Title: [187047] trunk/Source/WebKit2
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;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to