- Revision
- 187047
- Author
- ander...@apple.com
- Date
- 2015-07-20 16:45:41 -0700 (Mon, 20 Jul 2015)
Log Message
Support blocking a plug-in for non-security reasons
https://bugs.webkit.org/show_bug.cgi?id=145009
Patch by Gordon Sheridan <gordon_sheri...@apple.com> on 2015-07-20
Reviewed by Anders Carlsson.
* Shared/Plugins/PluginModuleInfo.h:
Replace PluginModuleBlocked with separate enum values for blocking for security and compatibility.
* UIProcess/API/C/WKAPICast.h:
(WebKit::toWKPluginLoadPolicy):
Modify to handle change to PluginModuleBlocked enum.
(WebKit::toPluginModuleLoadPolicy):
Ditto.
* UIProcess/API/C/WKPluginLoadPolicy.h:
Added enum value for blocking a plugin for compatibility reasons.
* UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
(WebKit::shouldBlockPlugin):
Check load policy for both reasons a plugin may be blocked.
(WebKit::WKPlugInModuleLoadPolicyToPluginModuleLoadPolicy):
Added function to convert between load policy enum types.
(WebKit::PluginInfoStore::defaultLoadPolicyForPlugin):
Modified to call WKLoadPolicyForPluginVersion() which can distinguish between blocked for security or compatibility.
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::findPlugin):
Updated to recognize both PluginModuleBlocked enum values that indicate a plugin is blocked.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::createPlugin):
Ditto.
(WebKit::WebPage::canPluginHandleResponse):
Ditto.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (187046 => 187047)
--- trunk/Source/WebKit2/ChangeLog 2015-07-20 23:35:51 UTC (rev 187046)
+++ trunk/Source/WebKit2/ChangeLog 2015-07-20 23:45:41 UTC (rev 187047)
@@ -1,3 +1,44 @@
+2015-07-20 Gordon Sheridan <gordon_sheri...@apple.com>
+
+ Support blocking a plug-in for non-security reasons
+ https://bugs.webkit.org/show_bug.cgi?id=145009
+
+ Reviewed by Anders Carlsson.
+
+ * Shared/Plugins/PluginModuleInfo.h:
+ Replace PluginModuleBlocked with separate enum values for blocking for security and compatibility.
+
+ * UIProcess/API/C/WKAPICast.h:
+ (WebKit::toWKPluginLoadPolicy):
+ Modify to handle change to PluginModuleBlocked enum.
+
+ (WebKit::toPluginModuleLoadPolicy):
+ Ditto.
+
+ * UIProcess/API/C/WKPluginLoadPolicy.h:
+ Added enum value for blocking a plugin for compatibility reasons.
+
+ * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
+ (WebKit::shouldBlockPlugin):
+ Check load policy for both reasons a plugin may be blocked.
+
+ (WebKit::WKPlugInModuleLoadPolicyToPluginModuleLoadPolicy):
+ Added function to convert between load policy enum types.
+
+ (WebKit::PluginInfoStore::defaultLoadPolicyForPlugin):
+ Modified to call WKLoadPolicyForPluginVersion() which can distinguish between blocked for security or compatibility.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::findPlugin):
+ Updated to recognize both PluginModuleBlocked enum values that indicate a plugin is blocked.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::createPlugin):
+ Ditto.
+
+ (WebKit::WebPage::canPluginHandleResponse):
+ Ditto.
+
2015-07-20 Antti Koivisto <an...@apple.com>
NSURLCache fallback does not work on iOS due to sandboxing
Modified: trunk/Source/WebKit2/Shared/Plugins/PluginModuleInfo.h (187046 => 187047)
--- trunk/Source/WebKit2/Shared/Plugins/PluginModuleInfo.h 2015-07-20 23:35:51 UTC (rev 187046)
+++ trunk/Source/WebKit2/Shared/Plugins/PluginModuleInfo.h 2015-07-20 23:45:41 UTC (rev 187047)
@@ -43,7 +43,8 @@
// The plug-in should be blocked from being instantiated.
// Note that the plug-in will still be seen by e.g. navigator.plugins
- PluginModuleBlocked,
+ PluginModuleBlockedForSecurity,
+ PluginModuleBlockedForCompatibility,
};
struct PluginModuleInfo {
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h (187046 => 187047)
--- trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h 2015-07-20 23:35:51 UTC (rev 187046)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h 2015-07-20 23:45:41 UTC (rev 187047)
@@ -469,8 +469,10 @@
return kWKPluginLoadPolicyLoadNormally;
case PluginModuleLoadUnsandboxed:
return kWKPluginLoadPolicyLoadUnsandboxed;
- case PluginModuleBlocked:
+ case PluginModuleBlockedForSecurity:
return kWKPluginLoadPolicyBlocked;
+ case PluginModuleBlockedForCompatibility:
+ return kWKPluginLoadPolicyBlockedForCompatibility;
}
ASSERT_NOT_REACHED();
@@ -502,13 +504,15 @@
case kWKPluginLoadPolicyLoadNormally:
return PluginModuleLoadNormally;
case kWKPluginLoadPolicyBlocked:
- return PluginModuleBlocked;
+ return PluginModuleBlockedForSecurity;
+ case kWKPluginLoadPolicyBlockedForCompatibility:
+ return PluginModuleBlockedForCompatibility;
case kWKPluginLoadPolicyLoadUnsandboxed:
return PluginModuleLoadUnsandboxed;
}
ASSERT_NOT_REACHED();
- return PluginModuleBlocked;
+ return PluginModuleBlockedForSecurity;
}
inline WebCore::PluginLoadClientPolicy toPluginLoadClientPolicy(WKPluginLoadClientPolicy pluginLoadClientPolicy)
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPluginLoadPolicy.h (187046 => 187047)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPluginLoadPolicy.h 2015-07-20 23:35:51 UTC (rev 187046)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPluginLoadPolicy.h 2015-07-20 23:45:41 UTC (rev 187047)
@@ -37,6 +37,7 @@
kWKPluginLoadPolicyBlocked,
kWKPluginLoadPolicyInactive,
kWKPluginLoadPolicyLoadUnsandboxed,
+ kWKPluginLoadPolicyBlockedForCompatibility,
};
typedef uint32_t WKPluginLoadPolicy;
Modified: trunk/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm (187046 => 187047)
--- trunk/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm 2015-07-20 23:35:51 UTC (rev 187046)
+++ trunk/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm 2015-07-20 23:45:41 UTC (rev 187047)
@@ -75,7 +75,8 @@
static bool shouldBlockPlugin(const PluginModuleInfo& plugin)
{
- return PluginInfoStore::defaultLoadPolicyForPlugin(plugin) == PluginModuleBlocked;
+ PluginModuleLoadPolicy loadPolicy = PluginInfoStore::defaultLoadPolicyForPlugin(plugin);
+ return (loadPolicy == PluginModuleBlockedForSecurity) || (loadPolicy == PluginModuleBlockedForCompatibility);
}
bool PluginInfoStore::shouldUsePlugin(Vector<PluginModuleInfo>& alreadyLoadedPlugins, const PluginModuleInfo& plugin)
@@ -107,14 +108,29 @@
return true;
}
-PluginModuleLoadPolicy PluginInfoStore::defaultLoadPolicyForPlugin(const PluginModuleInfo& plugin)
+inline PluginModuleLoadPolicy WKPlugInModuleLoadPolicyToPluginModuleLoadPolicy(WKPlugInModuleLoadPolicy wksiPolicy)
{
- if (WKShouldBlockPlugin(plugin.bundleIdentifier, plugin.versionString))
- return PluginModuleBlocked;
- return PluginModuleLoadNormally;
+ switch (wksiPolicy) {
+ case WKPlugInModuleLoadPolicyLoadNormally:
+ return PluginModuleLoadNormally;
+ case WKPlugInModuleLoadPolicyLoadUnsandboxed:
+ return PluginModuleLoadUnsandboxed;
+ case WKPlugInModuleLoadPolicyBlockedForSecurity:
+ return PluginModuleBlockedForSecurity;
+ case WKPlugInModuleLoadPolicyBlockedForCompatibility:
+ return PluginModuleBlockedForCompatibility;
+ }
+
+ ASSERT_NOT_REACHED();
+ return PluginModuleBlockedForSecurity;
}
+PluginModuleLoadPolicy PluginInfoStore::defaultLoadPolicyForPlugin(const PluginModuleInfo& plugin)
+{
+ return WKPlugInModuleLoadPolicyToPluginModuleLoadPolicy(WKLoadPolicyForPluginVersion(plugin.bundleIdentifier, plugin.versionString));
+}
+
PluginModuleInfo PluginInfoStore::findPluginWithBundleIdentifier(const String& bundleIdentifier)
{
loadPluginsIfNecessary();
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (187046 => 187047)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-07-20 23:35:51 UTC (rev 187046)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-07-20 23:45:41 UTC (rev 187047)
@@ -1887,7 +1887,8 @@
pluginProcessSandboxPolicy = PluginProcessSandboxPolicyUnsandboxed;
break;
- case PluginModuleBlocked:
+ case PluginModuleBlockedForSecurity:
+ case PluginModuleBlockedForCompatibility:
pluginProcessToken = 0;
return;
}
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (187046 => 187047)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2015-07-20 23:35:51 UTC (rev 187046)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2015-07-20 23:45:41 UTC (rev 187047)
@@ -710,7 +710,8 @@
if (!sendSync(Messages::WebPageProxy::FindPlugin(parameters.mimeType, static_cast<uint32_t>(processType), parameters.url.string(), frameURLString, pageURLString, allowOnlyApplicationPlugins), Messages::WebPageProxy::FindPlugin::Reply(pluginProcessToken, newMIMEType, pluginLoadPolicy, unavailabilityDescription)))
return nullptr;
- bool isBlockedPlugin = static_cast<PluginModuleLoadPolicy>(pluginLoadPolicy) == PluginModuleBlocked;
+ PluginModuleLoadPolicy loadPolicy = static_cast<PluginModuleLoadPolicy>(pluginLoadPolicy);
+ bool isBlockedPlugin = (loadPolicy == PluginModuleBlockedForSecurity) || (loadPolicy == PluginModuleBlockedForCompatibility);
if (isBlockedPlugin || !pluginProcessToken) {
#if ENABLE(PDFKIT_PLUGIN)
@@ -4244,7 +4245,8 @@
if (!sendSync(Messages::WebPageProxy::FindPlugin(response.mimeType(), PluginProcessTypeNormal, response.url().string(), response.url().string(), response.url().string(), allowOnlyApplicationPlugins), Messages::WebPageProxy::FindPlugin::Reply(pluginProcessToken, newMIMEType, pluginLoadPolicy, unavailabilityDescription)))
return false;
- return pluginLoadPolicy != PluginModuleBlocked && pluginProcessToken;
+ bool isBlockedPlugin = (pluginLoadPolicy == PluginModuleBlockedForSecurity) || (pluginLoadPolicy == PluginModuleBlockedForCompatibility);
+ return !isBlockedPlugin && pluginProcessToken;
#else
UNUSED_PARAM(response);
return false;