Changeset 147052 in webkit


Ignore:
Timestamp:
Mar 27, 2013 8:38:12 PM (11 years ago)
Author:
weinig@apple.com
Message:

[WebKit2] Need SPI to determine whether a plug-in is blocked
https://bugs.webkit.org/show_bug.cgi?id=113463

Reviewed by Anders Carlsson.

Add new SPI, WKContextCopyPlugInInfoForBundleIdetifier, to get data about a plug-in,
including whether it is blocked by x-protect.

  • UIProcess/WebLoaderClient.cpp:
  • UIProcess/API/C/WKAPICast.h:

(WebKit::toWKPluginLoadPolicy):
(WebKit::toPluginModuleLoadPolicy):
Move to a shared location.

  • UIProcess/API/C/mac/WKContextPrivateMac.h:
  • UIProcess/API/C/mac/WKContextPrivateMac.mm:

(WKContextIsPlugInUpdateAvailable):
(WKPlugInInfoPathKey):
(WKPlugInInfoBundleIdentifierKey):
(WKPlugInInfoVersionKey):
(WKPlugInInfoLoadPolicyKey):
(WKPlugInInfoUpdatePastLastBlockedVersionIsKnownAvailableKey):
(WKContextCopyPlugInInfoForBundleIdetifier):
Add new SPI and dictionary keys.

  • UIProcess/Plugins/PluginInfoStore.cpp:

(WebKit::PluginInfoStore::findPluginWithBundleIdentifer):

  • UIProcess/Plugins/PluginInfoStore.h:
  • UIProcess/Plugins/mac/PluginInfoStoreMac.mm:

(WebKit::PluginInfoStore::findPluginWithBundleIdentifer):
Add function to lookup plug-ins by bundle identifier.

Location:
trunk/Source/WebKit2
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r147049 r147052  
     12013-03-27  Sam Weinig  <sam@webkit.org>
     2
     3        [WebKit2] Need SPI to determine whether a plug-in is blocked
     4        https://bugs.webkit.org/show_bug.cgi?id=113463
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Add new SPI, WKContextCopyPlugInInfoForBundleIdetifier, to get data about a plug-in,
     9        including whether it is blocked by x-protect.
     10
     11        * UIProcess/WebLoaderClient.cpp:
     12        * UIProcess/API/C/WKAPICast.h:
     13        (WebKit::toWKPluginLoadPolicy):
     14        (WebKit::toPluginModuleLoadPolicy):
     15        Move to a shared location.
     16
     17        * UIProcess/API/C/mac/WKContextPrivateMac.h:
     18        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
     19        (WKContextIsPlugInUpdateAvailable):
     20        (WKPlugInInfoPathKey):
     21        (WKPlugInInfoBundleIdentifierKey):
     22        (WKPlugInInfoVersionKey):
     23        (WKPlugInInfoLoadPolicyKey):
     24        (WKPlugInInfoUpdatePastLastBlockedVersionIsKnownAvailableKey):
     25        (WKContextCopyPlugInInfoForBundleIdetifier):
     26        Add new SPI and dictionary keys.
     27
     28        * UIProcess/Plugins/PluginInfoStore.cpp:
     29        (WebKit::PluginInfoStore::findPluginWithBundleIdentifer):
     30        * UIProcess/Plugins/PluginInfoStore.h:
     31        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
     32        (WebKit::PluginInfoStore::findPluginWithBundleIdentifer):
     33        Add function to lookup plug-ins by bundle identifier.
     34
    1352013-03-27  Beth Dakin  <bdakin@apple.com>
    236
  • trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h

    r141448 r147052  
    3131#include "FontSmoothingLevel.h"
    3232#include "HTTPCookieAcceptPolicy.h"
     33#include "PluginModuleInfo.h"
    3334#include "ProcessModel.h"
    3435#include "ResourceCachesToClear.h"
    35 #include "WebGrammarDetail.h"
    3636#include "WKContext.h"
    3737#include "WKCookieManager.h"
     
    4343#include "WKResourceCacheManager.h"
    4444#include "WKSharedAPICast.h"
     45#include "WebGrammarDetail.h"
    4546#include <WebCore/Credential.h>
    4647#include <WebCore/FrameLoaderTypes.h>
     
    403404}
    404405
     406inline WKPluginLoadPolicy toWKPluginLoadPolicy(PluginModuleLoadPolicy pluginModuleLoadPolicy)
     407{
     408    switch (pluginModuleLoadPolicy) {
     409    case PluginModuleLoadNormally:
     410        return kWKPluginLoadPolicyLoadNormally;
     411    case PluginModuleBlocked:
     412        return kWKPluginLoadPolicyBlocked;
     413    case PluginModuleInactive:
     414        return kWKPluginLoadPolicyInactive;
     415    }
     416   
     417    ASSERT_NOT_REACHED();
     418    return kWKPluginLoadPolicyBlocked;
     419}
     420
     421inline PluginModuleLoadPolicy toPluginModuleLoadPolicy(WKPluginLoadPolicy pluginLoadPolicy)
     422{
     423    switch (pluginLoadPolicy) {
     424    case kWKPluginLoadPolicyLoadNormally:
     425        return PluginModuleLoadNormally;
     426    case kWKPluginLoadPolicyBlocked:
     427        return PluginModuleBlocked;
     428    case kWKPluginLoadPolicyInactive:
     429        return PluginModuleInactive;
     430    }
     431   
     432    ASSERT_NOT_REACHED();
     433    return PluginModuleBlocked;
     434}
     435
    405436inline ProxyingRefPtr<WebGrammarDetail> toAPI(const WebCore::GrammarDetail& grammarDetail)
    406437{
  • trunk/Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.h

    r142919 r147052  
    3838WK_EXPORT bool WKContextIsPlugInUpdateAvailable(WKContextRef context, WKStringRef plugInBundleIdentifier);
    3939
     40
     41/* Value type: WKStringRef */
     42WK_EXPORT WKStringRef WKPlugInInfoPathKey();
     43
     44/* Value type: WKStringRef */
     45WK_EXPORT WKStringRef WKPlugInInfoBundleIdentifierKey();
     46
     47/* Value type: WKStringRef */
     48WK_EXPORT WKStringRef WKPlugInInfoVersionKey();
     49
     50/* Value type: WKUInt64Ref */
     51WK_EXPORT WKStringRef WKPlugInInfoLoadPolicyKey();
     52
     53/* Value type: WKBooleanRef */
     54WK_EXPORT WKStringRef WKPlugInInfoUpdatePastLastBlockedVersionIsKnownAvailableKey();
     55
     56WK_EXPORT WKDictionaryRef WKContextCopyPlugInInfoForBundleIdentifier(WKContextRef context, WKStringRef plugInBundleIdentifier);
     57
    4058#ifdef __cplusplus
    4159}
  • trunk/Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.mm

    r142919 r147052  
    2727#import "WKContextPrivateMac.h"
    2828
     29#import "ImmutableDictionary.h"
     30#import "PluginInfoStore.h"
     31#import "StringUtilities.h"
    2932#import "WKAPICast.h"
     33#import "WKSharedAPICast.h"
    3034#import "WKStringCF.h"
    3135#import "WebContext.h"
     36#import "WebNumber.h"
     37#import "WebString.h"
    3238#import <WebKitSystemInterface.h>
    3339#import <wtf/RetainPtr.h>
     
    4551}
    4652
    47 bool WKContextIsPlugInUpdateAvailable(WKContextRef context, WKStringRef plugInBundleIdentifier)
     53bool WKContextIsPlugInUpdateAvailable(WKContextRef contextRef, WKStringRef plugInBundleIdentifierRef)
    4854{
    49     return WKIsPluginUpdateAvailable((NSString *)adoptCF(WKStringCopyCFString(kCFAllocatorDefault, plugInBundleIdentifier)).get());
     55    return WKIsPluginUpdateAvailable((NSString *)adoptCF(WKStringCopyCFString(kCFAllocatorDefault, plugInBundleIdentifierRef)).get());
    5056}
     57
     58
     59WKStringRef WKPlugInInfoPathKey()
     60{
     61    static WebString* key = WebString::createFromUTF8String("WKPlugInInfoPath").leakRef();
     62    return toAPI(key);
     63}
     64
     65WKStringRef WKPlugInInfoBundleIdentifierKey()
     66{
     67    static WebString* key = WebString::createFromUTF8String("WKPlugInInfoBundleIdentifier").leakRef();
     68    return toAPI(key);
     69}
     70
     71WKStringRef WKPlugInInfoVersionKey()
     72{
     73    static WebString* key = WebString::createFromUTF8String("WKPlugInInfoVersion").leakRef();
     74    return toAPI(key);
     75}
     76
     77WKStringRef WKPlugInInfoLoadPolicyKey()
     78{
     79    static WebString* key = WebString::createFromUTF8String("WKPlugInInfoLoadPolicy").leakRef();
     80    return toAPI(key);
     81}
     82
     83WKStringRef WKPlugInInfoUpdatePastLastBlockedVersionIsKnownAvailableKey()
     84{
     85    static WebString* key = WebString::createFromUTF8String("WKPlugInInfoUpdatePastLastBlockedVersionIsKnownAvailable").leakRef();
     86    return toAPI(key);
     87}
     88
     89WKDictionaryRef WKContextCopyPlugInInfoForBundleIdentifier(WKContextRef contextRef, WKStringRef plugInBundleIdentifierRef)
     90{
     91    PluginModuleInfo info = toImpl(contextRef)->pluginInfoStore().findPluginWithBundleIdentifier(toWTFString(plugInBundleIdentifierRef));
     92    if (info.path.isNull())
     93        return 0;
     94
     95    ImmutableDictionary::MapType map;
     96    map.set(toWTFString(WKPlugInInfoPathKey()), WebString::create(info.path));
     97    map.set(toWTFString(WKPlugInInfoBundleIdentifierKey()), WebString::create(info.bundleIdentifier));
     98    map.set(toWTFString(WKPlugInInfoVersionKey()), WebString::create(info.versionString));
     99    map.set(toWTFString(WKPlugInInfoLoadPolicyKey()), WebUInt64::create(toWKPluginLoadPolicy(PluginInfoStore::policyForPlugin(info))));
     100    map.set(toWTFString(WKPlugInInfoUpdatePastLastBlockedVersionIsKnownAvailableKey()), WebBoolean::create(WKIsPluginUpdateAvailable(nsStringFromWebCoreString(info.bundleIdentifier))));
     101
     102    return toAPI(ImmutableDictionary::adopt(map).leakRef());
     103}
  • trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp

    r144672 r147052  
    191191    return MIMETypeRegistry::getMIMETypeForExtension(extension);
    192192}
     193   
     194PluginModuleInfo PluginInfoStore::findPluginWithBundleIdentifier(const String&)
     195{
     196    ASSERT_NOT_REACHED();
     197    return PluginModuleInfo();
     198}
     199
    193200#endif
    194201
  • trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h

    r144672 r147052  
    6363    // plug-in type. In that case, mimeType will be filled in with the right MIME type.
    6464    PluginModuleInfo findPlugin(String& mimeType, const WebCore::KURL&);
    65    
     65
     66    // Returns the info for the plug-in with the given bundle identifier.
     67    PluginModuleInfo findPluginWithBundleIdentifier(const String& bundleIdentifier);
     68
    6669    // Returns the info for the plug-in with the given path.
    6770    PluginModuleInfo infoForPluginWithPath(const String& pluginPath) const;
  • trunk/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm

    r136620 r147052  
    172172}
    173173
     174PluginModuleInfo PluginInfoStore::findPluginWithBundleIdentifier(const String& bundleIdentifier)
     175{
     176    loadPluginsIfNecessary();
     177
     178    for (size_t i = 0; i < m_plugins.size(); ++i) {
     179        if (m_plugins[i].bundleIdentifier == bundleIdentifier)
     180            return m_plugins[i];
     181    }
     182   
     183    return PluginModuleInfo();
     184}
     185
    174186} // namespace WebKit
    175187
  • trunk/Source/WebKit2/UIProcess/WebLoaderClient.cpp

    r144114 r147052  
    300300}
    301301
    302 static inline WKPluginLoadPolicy toWKPluginLoadPolicy(PluginModuleLoadPolicy pluginModuleLoadPolicy)
    303 {
    304     switch (pluginModuleLoadPolicy) {
    305     case PluginModuleLoadNormally:
    306         return kWKPluginLoadPolicyLoadNormally;
    307     case PluginModuleBlocked:
    308         return kWKPluginLoadPolicyBlocked;
    309     case PluginModuleInactive:
    310         return kWKPluginLoadPolicyInactive;
    311     }
    312 
    313     ASSERT_NOT_REACHED();
    314     return kWKPluginLoadPolicyBlocked;
    315 }
    316 
    317 static inline PluginModuleLoadPolicy toPluginModuleLoadPolicy(WKPluginLoadPolicy pluginLoadPolicy)
    318 {
    319     switch (pluginLoadPolicy) {
    320     case kWKPluginLoadPolicyLoadNormally:
    321         return PluginModuleLoadNormally;
    322     case kWKPluginLoadPolicyBlocked:
    323         return PluginModuleBlocked;
    324     case kWKPluginLoadPolicyInactive:
    325         return PluginModuleInactive;
    326     }
    327 
    328     ASSERT_NOT_REACHED();
    329     return PluginModuleBlocked;
    330 }
    331 
    332302PluginModuleLoadPolicy WebLoaderClient::pluginLoadPolicy(WebPageProxy* page, const String& pluginBundleIdentifier, const String& pluginBundleVersion, const String& displayName, const String& frameURLString, const String& pageURLString, PluginModuleLoadPolicy currentPluginLoadPolicy)
    333303{
Note: See TracChangeset for help on using the changeset viewer.