diff options
author | Liang Qi <liang.qi@qt.io> | 2018-01-20 22:47:18 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2018-01-20 22:47:51 +0100 |
commit | 71be1de8162f38fc544605743a0169e10a19dc39 (patch) | |
tree | 94d8f3504cd36bb69ec314151e456759bea97481 /src | |
parent | 53cfa9f6da036418e2842ac22871cdcc09c90ae6 (diff) | |
parent | eef3467cfad9f6ad892344bfcadbd59b5bcb4f53 (diff) |
Merge remote-tracking branch 'origin/5.10' into dev
Conflicts:
.qmake.conf
Change-Id: I1b0ab1fd69048c03f67da20e0c6e079ef07adf8b
Diffstat (limited to 'src')
-rw-r--r-- | src/webview/qwebview_darwin.mm | 62 | ||||
-rw-r--r-- | src/webview/webview-lib.pri | 1 | ||||
-rw-r--r-- | src/webview/webview.pro | 2 |
3 files changed, 58 insertions, 7 deletions
diff --git a/src/webview/qwebview_darwin.mm b/src/webview/qwebview_darwin.mm index ff9dc4d..90f6551 100644 --- a/src/webview/qwebview_darwin.mm +++ b/src/webview/qwebview_darwin.mm @@ -40,6 +40,7 @@ #include "qtwebviewfunctions.h" #include "qtwebviewfunctions_p.h" +#include <QtCore/private/qglobal_p.h> #include <QtCore/qdatetime.h> #include <QtCore/qmap.h> #include <QtCore/qvariant.h> @@ -190,13 +191,57 @@ QT_END_NAMESPACE if (--qDarwinWebViewPrivate->requestFrameCount == 0) { [self pageDone]; NSString *errorString = [error localizedDescription]; + NSURL *failingURL = error.userInfo[@"NSErrorFailingURLKey"]; + const QUrl url = [failingURL isKindOfClass:[NSURL class]] + ? QUrl::fromNSURL(failingURL) + : qDarwinWebViewPrivate->url(); Q_EMIT qDarwinWebViewPrivate->loadingChanged( - QWebViewLoadRequestPrivate(qDarwinWebViewPrivate->url(), + QWebViewLoadRequestPrivate(url, QWebView::LoadFailedStatus, QString::fromNSString(errorString))); } } +- (void)webView:(WKWebView *)webView +decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction + decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler + __attribute__((availability(ios_app_extension,unavailable))) +{ + Q_UNUSED(webView); + NSURL *url = navigationAction.request.URL; + const BOOL handled = (^{ +#if QT_MACOS_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(101300, 110000) + if (__builtin_available(macOS 10.13, iOS 11.0, *)) { + return [WKWebView handlesURLScheme:url.scheme]; + } else +#endif + { + // +[WKWebView handlesURLScheme:] is a stub that calls + // WebCore::SchemeRegistry::isBuiltinScheme(); + // replicate that as closely as possible + return [@[ + @"about", @"applewebdata", @"blob", @"data", + @"file", @"http", @"https", @"javascript", +#ifdef Q_OS_MACOS + @"safari-extension", +#endif + @"webkit-fake-url", @"wss", @"x-apple-content-filter", +#ifdef Q_OS_MACOS + @"x-apple-ql-id" +#endif + ] containsObject:url.scheme]; + } + })(); + if (!handled) { +#ifdef Q_OS_MACOS + [[NSWorkspace sharedWorkspace] openURL:url]; +#elif defined(Q_OS_IOS) + [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; +#endif + } + decisionHandler(handled ? WKNavigationActionPolicyAllow : WKNavigationActionPolicyCancel); +} + - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { Q_UNUSED(object); @@ -253,14 +298,19 @@ void QDarwinWebViewPrivate::setUrl(const QUrl &url) { if (url.isValid()) { requestFrameCount = 0; - if (!url.isLocalFile()) { - [wkWebView loadRequest:[NSURLRequest requestWithURL:url.toNSURL()]]; - } else { + +#if QT_MACOS_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(101100, 90000) + if (url.isLocalFile()) { // We need to pass local files via loadFileURL and the read access should cover // the directory that the file is in, to facilitate loading referenced images etc - [wkWebView loadFileURL:url.toNSURL() - allowingReadAccessToURL:QUrl(url.toString(QUrl::RemoveFilename)).toNSURL()]; + if (__builtin_available(macOS 10.11, iOS 9, *)) { + [wkWebView loadFileURL:url.toNSURL() + allowingReadAccessToURL:QUrl(url.toString(QUrl::RemoveFilename)).toNSURL()]; + return; + } } +#endif + [wkWebView loadRequest:[NSURLRequest requestWithURL:url.toNSURL()]]; } } diff --git a/src/webview/webview-lib.pri b/src/webview/webview-lib.pri index 0731f87..6630fd4 100644 --- a/src/webview/webview-lib.pri +++ b/src/webview/webview-lib.pri @@ -49,6 +49,7 @@ android { $$COMMON_HEADERS \ qwebview_darwin_p.h LIBS_PRIVATE += -framework Foundation -framework WebKit + macos: LIBS_PRIVATE += -framework AppKit ios: LIBS_PRIVATE += -framework UIKit macos: CONFIG += use_webengine_backend diff --git a/src/webview/webview.pro b/src/webview/webview.pro index 452a3cc..af1286e 100644 --- a/src/webview/webview.pro +++ b/src/webview/webview.pro @@ -1,7 +1,7 @@ TARGET = QtWebView QT = -QT_FOR_PRIVATE = quick-private gui-private +QT_FOR_PRIVATE = quick-private core-private gui-private include($$PWD/webview-lib.pri) |