Changeset 187047 in webkit


Ignore:
Timestamp:
Jul 20, 2015 4:45:41 PM (9 years ago)
Author:
andersca@apple.com
Message:

Support blocking a plug-in for non-security reasons
https://bugs.webkit.org/show_bug.cgi?id=145009

Patch by Gordon Sheridan <gordon_sheridan@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.

Location:
trunk/Source/WebKit2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r187045 r187047  
     12015-07-20  Gordon Sheridan  <gordon_sheridan@apple.com>
     2
     3        Support blocking a plug-in for non-security reasons
     4        https://bugs.webkit.org/show_bug.cgi?id=145009
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * Shared/Plugins/PluginModuleInfo.h:
     9        Replace PluginModuleBlocked with separate enum values for blocking for security and compatibility.
     10
     11        * UIProcess/API/C/WKAPICast.h:
     12        (WebKit::toWKPluginLoadPolicy):
     13        Modify to handle change to PluginModuleBlocked enum.
     14
     15        (WebKit::toPluginModuleLoadPolicy):
     16        Ditto.
     17
     18        * UIProcess/API/C/WKPluginLoadPolicy.h:
     19        Added enum value for blocking a plugin for compatibility reasons.
     20
     21        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
     22        (WebKit::shouldBlockPlugin):
     23        Check load policy for both reasons a plugin may be blocked.
     24
     25        (WebKit::WKPlugInModuleLoadPolicyToPluginModuleLoadPolicy):
     26        Added function to convert between load policy enum types.
     27
     28        (WebKit::PluginInfoStore::defaultLoadPolicyForPlugin):
     29        Modified to call WKLoadPolicyForPluginVersion() which can distinguish between blocked for security or compatibility.
     30
     31        * UIProcess/WebPageProxy.cpp:
     32        (WebKit::WebPageProxy::findPlugin):
     33        Updated to recognize both PluginModuleBlocked enum values that indicate a plugin is blocked.
     34
     35        * WebProcess/WebPage/WebPage.cpp:
     36        (WebKit::WebPage::createPlugin):
     37        Ditto.
     38
     39        (WebKit::WebPage::canPluginHandleResponse):
     40        Ditto.
     41
    1422015-07-20  Antti Koivisto  <antti@apple.com>
    243
  • trunk/Source/WebKit2/Shared/Plugins/PluginModuleInfo.h

    r169457 r187047  
    4444    // The plug-in should be blocked from being instantiated.
    4545    // Note that the plug-in will still be seen by e.g. navigator.plugins
    46     PluginModuleBlocked,
     46    PluginModuleBlockedForSecurity,
     47    PluginModuleBlockedForCompatibility,
    4748};
    4849
  • trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h

    r186484 r187047  
    470470    case PluginModuleLoadUnsandboxed:
    471471        return kWKPluginLoadPolicyLoadUnsandboxed;
    472     case PluginModuleBlocked:
     472    case PluginModuleBlockedForSecurity:
    473473        return kWKPluginLoadPolicyBlocked;
     474    case PluginModuleBlockedForCompatibility:
     475        return kWKPluginLoadPolicyBlockedForCompatibility;
    474476    }
    475477   
     
    503505        return PluginModuleLoadNormally;
    504506    case kWKPluginLoadPolicyBlocked:
    505         return PluginModuleBlocked;
     507        return PluginModuleBlockedForSecurity;
     508    case kWKPluginLoadPolicyBlockedForCompatibility:
     509        return PluginModuleBlockedForCompatibility;
    506510    case kWKPluginLoadPolicyLoadUnsandboxed:
    507511        return PluginModuleLoadUnsandboxed;
     
    509513   
    510514    ASSERT_NOT_REACHED();
    511     return PluginModuleBlocked;
     515    return PluginModuleBlockedForSecurity;
    512516}
    513517
  • trunk/Source/WebKit2/UIProcess/API/C/WKPluginLoadPolicy.h

    r182097 r187047  
    3838    kWKPluginLoadPolicyInactive,
    3939    kWKPluginLoadPolicyLoadUnsandboxed,
     40    kWKPluginLoadPolicyBlockedForCompatibility,
    4041};
    4142typedef uint32_t WKPluginLoadPolicy;
  • trunk/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm

    r169457 r187047  
    7676static bool shouldBlockPlugin(const PluginModuleInfo& plugin)
    7777{
    78     return PluginInfoStore::defaultLoadPolicyForPlugin(plugin) == PluginModuleBlocked;
     78    PluginModuleLoadPolicy loadPolicy = PluginInfoStore::defaultLoadPolicyForPlugin(plugin);
     79    return (loadPolicy == PluginModuleBlockedForSecurity) || (loadPolicy == PluginModuleBlockedForCompatibility);
    7980}
    8081
     
    108109}
    109110
     111inline PluginModuleLoadPolicy WKPlugInModuleLoadPolicyToPluginModuleLoadPolicy(WKPlugInModuleLoadPolicy wksiPolicy)
     112{
     113
     114    switch (wksiPolicy) {
     115        case WKPlugInModuleLoadPolicyLoadNormally:
     116            return PluginModuleLoadNormally;
     117        case WKPlugInModuleLoadPolicyLoadUnsandboxed:
     118            return PluginModuleLoadUnsandboxed;
     119        case WKPlugInModuleLoadPolicyBlockedForSecurity:
     120            return PluginModuleBlockedForSecurity;
     121        case WKPlugInModuleLoadPolicyBlockedForCompatibility:
     122            return PluginModuleBlockedForCompatibility;
     123    }
     124
     125    ASSERT_NOT_REACHED();
     126    return PluginModuleBlockedForSecurity;
     127}
     128
    110129PluginModuleLoadPolicy PluginInfoStore::defaultLoadPolicyForPlugin(const PluginModuleInfo& plugin)
    111130{
    112     if (WKShouldBlockPlugin(plugin.bundleIdentifier, plugin.versionString))
    113         return PluginModuleBlocked;
    114 
    115     return PluginModuleLoadNormally;
     131    return WKPlugInModuleLoadPolicyToPluginModuleLoadPolicy(WKLoadPolicyForPluginVersion(plugin.bundleIdentifier, plugin.versionString));
    116132}
    117133
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r186969 r187047  
    18881888        break;
    18891889
    1890     case PluginModuleBlocked:
     1890    case PluginModuleBlockedForSecurity:
     1891    case PluginModuleBlockedForCompatibility:
    18911892        pluginProcessToken = 0;
    18921893        return;
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r187039 r187047  
    711711        return nullptr;
    712712
    713     bool isBlockedPlugin = static_cast<PluginModuleLoadPolicy>(pluginLoadPolicy) == PluginModuleBlocked;
     713    PluginModuleLoadPolicy loadPolicy = static_cast<PluginModuleLoadPolicy>(pluginLoadPolicy);
     714    bool isBlockedPlugin = (loadPolicy == PluginModuleBlockedForSecurity) || (loadPolicy == PluginModuleBlockedForCompatibility);
    714715
    715716    if (isBlockedPlugin || !pluginProcessToken) {
     
    42454246        return false;
    42464247
    4247     return pluginLoadPolicy != PluginModuleBlocked && pluginProcessToken;
     4248    bool isBlockedPlugin = (pluginLoadPolicy == PluginModuleBlockedForSecurity) || (pluginLoadPolicy == PluginModuleBlockedForCompatibility);
     4249    return !isBlockedPlugin && pluginProcessToken;
    42484250#else
    42494251    UNUSED_PARAM(response);
Note: See TracChangeset for help on using the changeset viewer.