summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOliver Wolff <oliver.wolff@qt.io>2018-01-10 10:43:58 +0100
committerOliver Wolff <oliver.wolff@qt.io>2018-02-01 06:52:04 +0000
commit0f0d87a757fe30976c183207968e1c07f87460d5 (patch)
tree6ece0c26972890012b6bba2ed15c1b6f3870ff1f /src
parentd037c87d94666f94faf2c6fbb0f5d11107496de4 (diff)
winrt: Launch default program if unviewable content is loaded
If a file type that cannot be shown in a webview, is passed via setUrl, the user should be asked what to do/the default program should be opened. This behavior matches what is done, when an unknown URL scheme is passed. Change-Id: Ia318f14d9dcdeb8f3bbb734b342eb38a02fb3dc4 Reviewed-by: Miguel Costa <miguel.costa@qt.io> Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/winrt/qwinrtwebview.cpp20
-rw-r--r--src/plugins/winrt/qwinrtwebview_p.h3
2 files changed, 23 insertions, 0 deletions
diff --git a/src/plugins/winrt/qwinrtwebview.cpp b/src/plugins/winrt/qwinrtwebview.cpp
index a9ae659..0faf7d1 100644
--- a/src/plugins/winrt/qwinrtwebview.cpp
+++ b/src/plugins/winrt/qwinrtwebview.cpp
@@ -279,6 +279,7 @@ struct WinRTWebView
EventRegistrationToken navigationStartingToken;
EventRegistrationToken navigationCompletedToken;
+ EventRegistrationToken unviewableContentToken;
bool isLoading : 1;
};
@@ -320,6 +321,10 @@ QWinRTWebViewPrivate::QWinRTWebViewPrivate(QObject *parent)
Callback<ITypedEventHandler<WebView *, WebViewNavigationCompletedEventArgs *>>(this, &QWinRTWebViewPrivate::onNavigationCompleted).Get(),
&d->navigationCompletedToken);
Q_ASSERT_SUCCEEDED(hr);
+ hr = d->ext->add_UnviewableContentIdentified(
+ Callback<ITypedEventHandler<WebView *, WebViewUnviewableContentIdentifiedEventArgs *>>(this, &QWinRTWebViewPrivate::onUnviewableContent).Get(),
+ &d->unviewableContentToken);
+ Q_ASSERT_SUCCEEDED(hr);
ComPtr<IDisplayInformationStatics> displayInformationStatics;
hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Graphics_Display_DisplayInformation).Get(),
@@ -347,6 +352,9 @@ QWinRTWebViewPrivate::~QWinRTWebViewPrivate()
Q_ASSERT_SUCCEEDED(hr);
hr = d->ext->remove_NavigationCompleted(d->navigationCompletedToken);
Q_ASSERT_SUCCEEDED(hr);
+ hr = d->ext->remove_UnviewableContentIdentified(d->unviewableContentToken);
+ Q_ASSERT_SUCCEEDED(hr);
+
ComPtr<IVector<UIElement *>> children;
hr = d->host->get_Children(&children);
Q_ASSERT_SUCCEEDED(hr);
@@ -680,3 +688,15 @@ HRESULT QWinRTWebViewPrivate::onNavigationCompleted(IWebView *, IWebViewNavigati
emit loadProgressChanged(100);
return S_OK;
}
+
+HRESULT QWinRTWebViewPrivate::onUnviewableContent(IWebView *, IWebViewUnviewableContentIdentifiedEventArgs *args)
+{
+ HRESULT hr;
+ ComPtr<IUriRuntimeClass> uri;
+ hr = args->get_Uri(&uri);
+ Q_ASSERT_SUCCEEDED(hr);
+ ComPtr<IAsyncOperation<bool>> op;
+ hr = d->launcherStatics->LaunchUriAsync(uri.Get(), &op);
+ Q_ASSERT_SUCCEEDED(hr);
+ return S_OK;
+}
diff --git a/src/plugins/winrt/qwinrtwebview_p.h b/src/plugins/winrt/qwinrtwebview_p.h
index 2b7d937..3756b7d 100644
--- a/src/plugins/winrt/qwinrtwebview_p.h
+++ b/src/plugins/winrt/qwinrtwebview_p.h
@@ -58,6 +58,7 @@ namespace ABI {
struct IWebView;
struct IWebViewNavigationStartingEventArgs;
struct IWebViewNavigationCompletedEventArgs;
+ struct IWebViewUnviewableContentIdentifiedEventArgs;
}
}
}
@@ -101,6 +102,8 @@ protected:
private:
HRESULT onNavigationStarted(ABI::Windows::UI::Xaml::Controls::IWebView *, ABI::Windows::UI::Xaml::Controls::IWebViewNavigationStartingEventArgs *);
HRESULT onNavigationCompleted(ABI::Windows::UI::Xaml::Controls::IWebView *, ABI::Windows::UI::Xaml::Controls::IWebViewNavigationCompletedEventArgs *);
+ HRESULT onUnviewableContent(ABI::Windows::UI::Xaml::Controls::IWebView *,
+ ABI::Windows::UI::Xaml::Controls::IWebViewUnviewableContentIdentifiedEventArgs *);
QScopedPointer<WinRTWebView> d;
};