Diff
Modified: trunk/Source/WebKit/ChangeLog (226608 => 226609)
--- trunk/Source/WebKit/ChangeLog 2018-01-09 03:08:47 UTC (rev 226608)
+++ trunk/Source/WebKit/ChangeLog 2018-01-09 03:26:18 UTC (rev 226609)
@@ -1,3 +1,25 @@
+2018-01-08 Alex Christensen <[email protected]>
+
+ Make ObjC SPI equivalent to WKPageNavigationClient.decidePolicyForPluginLoad
+ https://bugs.webkit.org/show_bug.cgi?id=181413
+ <rdar://problem/36169005>
+
+ Reviewed by Wenson Hsieh.
+
+ * UIProcess/API/APINavigationClient.h:
+ (API::NavigationClient::decidePolicyForPluginLoad):
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageSetPageNavigationClient):
+ * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
+ * UIProcess/Cocoa/NavigationState.h:
+ * UIProcess/Cocoa/NavigationState.mm:
+ (WebKit::NavigationState::setNavigationDelegate):
+ (WebKit::toPluginModuleLoadPolicy):
+ (WebKit::toWKPluginModuleLoadPolicy):
+ (WebKit::NavigationState::NavigationClient::decidePolicyForPluginLoad):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::findPlugin):
+
2018-01-08 Ryosuke Niwa <[email protected]>
iOS build fix attempt after r226602.
Modified: trunk/Source/WebKit/UIProcess/API/APILoaderClient.h (226608 => 226609)
--- trunk/Source/WebKit/UIProcess/API/APILoaderClient.h 2018-01-09 03:08:47 UTC (rev 226608)
+++ trunk/Source/WebKit/UIProcess/API/APILoaderClient.h 2018-01-09 03:26:18 UTC (rev 226609)
@@ -103,7 +103,7 @@
virtual void navigationGestureDidEnd(WebKit::WebPageProxy&, bool willNavigate, WebKit::WebBackForwardListItem&) { }
#if ENABLE(NETSCAPE_PLUGIN_API)
- virtual WebKit::PluginModuleLoadPolicy pluginLoadPolicy(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary*, WTF::String& /* unavailabilityDescription */) { return currentPluginLoadPolicy; }
+ virtual WebKit::PluginModuleLoadPolicy pluginLoadPolicy(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary&, WTF::String& /* unavailabilityDescription */) { return currentPluginLoadPolicy; }
virtual void didFailToInitializePlugin(WebKit::WebPageProxy&, API::Dictionary&) { }
virtual void didBlockInsecurePluginVersion(WebKit::WebPageProxy&, API::Dictionary*) { }
#endif // ENABLE(NETSCAPE_PLUGIN_API)
Modified: trunk/Source/WebKit/UIProcess/API/APINavigationClient.h (226608 => 226609)
--- trunk/Source/WebKit/UIProcess/API/APINavigationClient.h 2018-01-09 03:08:47 UTC (rev 226608)
+++ trunk/Source/WebKit/UIProcess/API/APINavigationClient.h 2018-01-09 03:26:18 UTC (rev 226609)
@@ -113,7 +113,7 @@
#if ENABLE(NETSCAPE_PLUGIN_API)
virtual bool didFailToInitializePlugIn(WebKit::WebPageProxy&, API::Dictionary&) { return false; }
- virtual WebKit::PluginModuleLoadPolicy decidePolicyForPluginLoad(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, Dictionary*, WTF::String&)
+ virtual WebKit::PluginModuleLoadPolicy decidePolicyForPluginLoad(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, Dictionary&, WTF::String&)
{
return currentPluginLoadPolicy;
}
Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (226608 => 226609)
--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2018-01-09 03:08:47 UTC (rev 226608)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2018-01-09 03:26:18 UTC (rev 226609)
@@ -1278,15 +1278,15 @@
m_client.pluginDidFail(toAPI(&page), kWKErrorCodeInsecurePlugInVersion, toAPI(pluginInformation), m_client.base.clientInfo);
}
- PluginModuleLoadPolicy pluginLoadPolicy(WebPageProxy& page, PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary* pluginInformation, String& unavailabilityDescription) override
+ PluginModuleLoadPolicy pluginLoadPolicy(WebPageProxy& page, PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary& pluginInformation, String& unavailabilityDescription) override
{
WKStringRef unavailabilityDescriptionOut = 0;
PluginModuleLoadPolicy loadPolicy = currentPluginLoadPolicy;
if (m_client.pluginLoadPolicy_deprecatedForUseWithV2)
- loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy_deprecatedForUseWithV2(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), m_client.base.clientInfo));
+ loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy_deprecatedForUseWithV2(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(&pluginInformation), m_client.base.clientInfo));
else if (m_client.pluginLoadPolicy)
- loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), &unavailabilityDescriptionOut, m_client.base.clientInfo));
+ loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(&pluginInformation), &unavailabilityDescriptionOut, m_client.base.clientInfo));
if (unavailabilityDescriptionOut) {
RefPtr<API::String> webUnavailabilityDescription = adoptRef(toImpl(unavailabilityDescriptionOut));
@@ -2313,13 +2313,13 @@
m_client.contentRuleListNotification(toAPI(&page), toURLRef(url.string().impl()), toAPI(API::Array::create(WTFMove(apiListIdentifiers)).ptr()), toAPI(API::Array::create(WTFMove(apiNotifications)).ptr()), m_client.base.clientInfo);
}
#if ENABLE(NETSCAPE_PLUGIN_API)
- PluginModuleLoadPolicy decidePolicyForPluginLoad(WebPageProxy& page, PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary* pluginInformation, String& unavailabilityDescription) override
+ PluginModuleLoadPolicy decidePolicyForPluginLoad(WebPageProxy& page, PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary& pluginInformation, String& unavailabilityDescription) override
{
WKStringRef unavailabilityDescriptionOut = 0;
PluginModuleLoadPolicy loadPolicy = currentPluginLoadPolicy;
if (m_client.decidePolicyForPluginLoad)
- loadPolicy = toPluginModuleLoadPolicy(m_client.decidePolicyForPluginLoad(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), &unavailabilityDescriptionOut, m_client.base.clientInfo));
+ loadPolicy = toPluginModuleLoadPolicy(m_client.decidePolicyForPluginLoad(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(&pluginInformation), &unavailabilityDescriptionOut, m_client.base.clientInfo));
if (unavailabilityDescriptionOut) {
RefPtr<API::String> webUnavailabilityDescription = adoptRef(toImpl(unavailabilityDescriptionOut));
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h (226608 => 226609)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h 2018-01-09 03:08:47 UTC (rev 226608)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h 2018-01-09 03:26:18 UTC (rev 226609)
@@ -39,6 +39,13 @@
_WKWebGLLoadPolicyAllowCreation,
_WKWebGLLoadPolicyPendingCreation,
} WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+
+typedef NS_ENUM(NSInteger, _WKPluginModuleLoadPolicy) {
+ _WKPluginModuleLoadPolicyLoadNormally,
+ _WKPluginModuleLoadPolicyLoadUnsandboxed,
+ _WKPluginModuleLoadPolicyBlockedForSecurity,
+ _WKPluginModuleLoadPolicyBlockedForCompatibility,
+} WK_API_AVAILABLE(macosx(WK_MAC_TBA));
#endif
static const WKNavigationActionPolicy _WKNavigationActionPolicyDownload = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 1);
@@ -92,6 +99,7 @@
- (void)_webView:(WKWebView *)webView resolveWebGLLoadPolicyForURL:(NSURL *)url decisionHandler:(void (^)(_WKWebGLLoadPolicy))decisionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA));
- (void)_webView:(WKWebView *)webView willGoToBackForwardListItem:(WKBackForwardListItem *)item inPageCache:(BOOL)inPageCache WK_API_AVAILABLE(macosx(WK_MAC_TBA));
- (void)_webView:(WKWebView *)webView didFailToInitializePlugInWithInfo:(NSDictionary *)info WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+- (_WKPluginModuleLoadPolicy)_webView:(WKWebView *)webView decidePolicyForPluginLoadWithCurrentPolicy:(_WKPluginModuleLoadPolicy)policy pluginInfo:(NSDictionary *)info unavailabilityDescription:(NSString *)unavailabilityDescription WK_API_AVAILABLE(macosx(WK_MAC_TBA));
- (void)_webView:(WKWebView *)webView backForwardListItemAdded:(WKBackForwardListItem *)itemAdded removed:(NSArray<WKBackForwardListItem *> *)itemsRemoved WK_API_AVAILABLE(macosx(WK_MAC_TBA));
#endif
Modified: trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h (226608 => 226609)
--- trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h 2018-01-09 03:08:47 UTC (rev 226608)
+++ trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h 2018-01-09 03:26:18 UTC (rev 226609)
@@ -121,6 +121,7 @@
void resolveWebGLLoadPolicy(WebPageProxy&, const WebCore::URL&, WTF::Function<void(WebCore::WebGLLoadPolicy)>&& completionHandler) const final;
bool willGoToBackForwardListItem(WebPageProxy&, WebBackForwardListItem&, bool inPageCache, API::Object*) final;
bool didFailToInitializePlugIn(WebPageProxy&, API::Dictionary&) final;
+ WebKit::PluginModuleLoadPolicy decidePolicyForPluginLoad(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy, API::Dictionary&, WTF::String&) final;
bool didChangeBackForwardList(WebPageProxy&, WebBackForwardListItem*, const Vector<Ref<WebBackForwardListItem>>&) final;
#endif
@@ -221,6 +222,7 @@
bool webViewBackForwardListItemAddedRemoved : 1;
bool webViewDidFailToInitializePlugInWithInfo : 1;
bool webViewWillGoToBackForwardListItemInPageCache : 1;
+ bool webViewDecidePolicyForPluginLoadWithCurrentPolicyPluginInfoUnavailabilityDescription : 1;
#endif
} m_navigationDelegateMethods;
Modified: trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm (226608 => 226609)
--- trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm 2018-01-09 03:08:47 UTC (rev 226608)
+++ trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm 2018-01-09 03:26:18 UTC (rev 226609)
@@ -185,6 +185,7 @@
m_navigationDelegateMethods.webViewWillGoToBackForwardListItemInPageCache = [delegate respondsToSelector:@selector(_webView:willGoToBackForwardListItem:inPageCache:)];
m_navigationDelegateMethods.webViewDidFailToInitializePlugInWithInfo = [delegate respondsToSelector:@selector(_webView:didFailToInitializePlugInWithInfo:)];
m_navigationDelegateMethods.webViewBackForwardListItemAddedRemoved = [delegate respondsToSelector:@selector(_webView:backForwardListItemAdded:removed:)];
+ m_navigationDelegateMethods.webViewDecidePolicyForPluginLoadWithCurrentPolicyPluginInfoUnavailabilityDescription = [delegate respondsToSelector:@selector(_webView:decidePolicyForPluginLoadWithCurrentPolicy:pluginInfo:unavailabilityDescription:)];
#endif
}
@@ -312,6 +313,50 @@
return true;
}
+static WebKit::PluginModuleLoadPolicy pluginModuleLoadPolicy(_WKPluginModuleLoadPolicy policy)
+{
+ switch (policy) {
+ case _WKPluginModuleLoadPolicyLoadNormally:
+ return WebKit::PluginModuleLoadNormally;
+ case _WKPluginModuleLoadPolicyLoadUnsandboxed:
+ return WebKit::PluginModuleLoadUnsandboxed;
+ case _WKPluginModuleLoadPolicyBlockedForSecurity:
+ return WebKit::PluginModuleBlockedForSecurity;
+ case _WKPluginModuleLoadPolicyBlockedForCompatibility:
+ return WebKit::PluginModuleBlockedForCompatibility;
+ }
+ ASSERT_NOT_REACHED();
+ return WebKit::PluginModuleLoadNormally;
+}
+
+static _WKPluginModuleLoadPolicy wkPluginModuleLoadPolicy(WebKit::PluginModuleLoadPolicy policy)
+{
+ switch (policy) {
+ case WebKit::PluginModuleLoadNormally:
+ return _WKPluginModuleLoadPolicyLoadNormally;
+ case WebKit::PluginModuleLoadUnsandboxed:
+ return _WKPluginModuleLoadPolicyLoadUnsandboxed;
+ case WebKit::PluginModuleBlockedForSecurity:
+ return _WKPluginModuleLoadPolicyBlockedForSecurity;
+ case WebKit::PluginModuleBlockedForCompatibility:
+ return _WKPluginModuleLoadPolicyBlockedForCompatibility;
+ }
+ ASSERT_NOT_REACHED();
+ return _WKPluginModuleLoadPolicyLoadNormally;
+}
+
+WebKit::PluginModuleLoadPolicy NavigationState::NavigationClient::decidePolicyForPluginLoad(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary& pluginInformation, WTF::String& unavailabilityDescription)
+{
+ if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForPluginLoadWithCurrentPolicyPluginInfoUnavailabilityDescription)
+ return currentPluginLoadPolicy;
+
+ auto navigationDelegate = m_navigationState.m_navigationDelegate.get();
+ if (!navigationDelegate)
+ return currentPluginLoadPolicy;
+
+ return pluginModuleLoadPolicy([(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView decidePolicyForPluginLoadWithCurrentPolicy:wkPluginModuleLoadPolicy(currentPluginLoadPolicy) pluginInfo:wrapper(pluginInformation) unavailabilityDescription:unavailabilityDescription]);
+}
+
inline WebCore::WebGLLoadPolicy toWebCoreWebGLLoadPolicy(_WKWebGLLoadPolicy policy)
{
switch (policy) {
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (226608 => 226609)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-01-09 03:08:47 UTC (rev 226608)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-01-09 03:26:18 UTC (rev 226609)
@@ -2055,7 +2055,7 @@
pluginLoadPolicy = PluginInfoStore::defaultLoadPolicyForPlugin(plugin);
#if PLATFORM(COCOA)
- RefPtr<API::Dictionary> pluginInformation = createPluginInformationDictionary(plugin, frameURLString, String(), pageURLString, String(), String());
+ auto pluginInformation = createPluginInformationDictionary(plugin, frameURLString, String(), pageURLString, String(), String());
if (m_navigationClient)
pluginLoadPolicy = m_navigationClient->decidePolicyForPluginLoad(*this, static_cast<PluginModuleLoadPolicy>(pluginLoadPolicy), pluginInformation.get(), unavailabilityDescription);
else