⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 181494 in webkit


Ignore:
Timestamp:
Mar 13, 2015, 7:50:28 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

Unreviewed, rolling out r181483.
https://bugs.webkit.org/show_bug.cgi?id=142688

Caused use-after-free on many tests (Requested by ap on
#webkit).

Reverted changeset:

"Allow clients to selectively disable plug-ins"
https://bugs.webkit.org/show_bug.cgi?id=142506
http://trac.webkit.org/changeset/181483

Location:
trunk/Source
Files:
44 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r181492 r181494  
     12015-03-13  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r181483.
     4        https://bugs.webkit.org/show_bug.cgi?id=142688
     5
     6        Caused use-after-free on many tests (Requested by ap on
     7        #webkit).
     8
     9        Reverted changeset:
     10
     11        "Allow clients to selectively disable plug-ins"
     12        https://bugs.webkit.org/show_bug.cgi?id=142506
     13        http://trac.webkit.org/changeset/181483
     14
    1152015-03-13  Antti Koivisto  <antti@apple.com>
    216
  • trunk/Source/WebCore/dom/DOMImplementation.cpp

    r181483 r181494  
    330330    // PDF is one image type for which a plugin can override built-in support.
    331331    // We do not want QuickTime to take over all image types, obviously.
    332     if (MIMETypeRegistry::isPDFOrPostScriptMIMEType(type) && pluginData && pluginData->supportsWebVisibleMimeType(type, allowedPluginTypes))
     332    if (MIMETypeRegistry::isPDFOrPostScriptMIMEType(type) && pluginData && pluginData->supportsMimeType(type, allowedPluginTypes))
    333333        return PluginDocument::create(frame, url);
    334334    if (Image::supportsType(type))
     
    349349    // Disallowing plug-ins to use text/plain prevents plug-ins from hijacking a fundamental type that the browser is expected to handle,
    350350    // and also serves as an optimization to prevent loading the plug-in database in the common case.
    351     if (type != "text/plain" && ((pluginData && pluginData->supportsWebVisibleMimeType(type, allowedPluginTypes)) || (frame && frame->loader().client().shouldAlwaysUsePluginDocument(type))))
     351    if (type != "text/plain" && ((pluginData && pluginData->supportsMimeType(type, allowedPluginTypes)) || (frame && frame->loader().client().shouldAlwaysUsePluginDocument(type))))
    352352        return PluginDocument::create(frame, url);
    353353    if (isTextMIMEType(type))
  • trunk/Source/WebCore/loader/SubframeLoader.cpp

    r181483 r181494  
    168168    const PluginData& pluginData = page->pluginData();
    169169
    170     Vector<MimeClassInfo> mimes;
    171     Vector<size_t> mimePluginIndices;
    172     pluginData.getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
    173     for (size_t i = 0; i < mimes.size(); ++i) {
    174         const MimeClassInfo& mimeClassInfo = mimes[i];
     170    for (size_t i = 0; i < pluginData.mimes().size(); ++i) {
     171        const MimeClassInfo& mimeClassInfo = pluginData.mimes()[i];
    175172        for (size_t j = 0; j < mimeClassInfo.extensions.size(); ++j) {
    176173            if (equalIgnoringCase(extension, mimeClassInfo.extensions[j]))
     
    195192    }
    196193
    197     String pluginFile = page->pluginData().pluginFileForWebVisibleMimeType(newMIMEType);
     194    String pluginFile = page->pluginData().pluginFileForMimeType(newMIMEType);
    198195    String description = !pluginFile ? newMIMEType : pluginFile;
    199196
     
    371368    // can handle TIFF (which QuickTime can also handle) they probably intended to override QT.
    372369    if (m_frame.page() && (mimeType == "image/tiff" || mimeType == "image/tif" || mimeType == "image/x-tiff")) {
    373         String pluginName = m_frame.page()->pluginData().pluginNameForWebVisibleMimeType(mimeType);
     370        String pluginName = m_frame.page()->pluginData().pluginNameForMimeType(mimeType);
    374371        if (!pluginName.isEmpty() && !pluginName.contains("QuickTime", false))
    375372            return true;
  • trunk/Source/WebCore/platform/PlatformStrategies.h

    r181483 r181494  
    8989};
    9090
    91 WEBCORE_EXPORT PlatformStrategies* platformStrategies();
     91PlatformStrategies* platformStrategies();
    9292WEBCORE_EXPORT void setPlatformStrategies(PlatformStrategies*);
    9393bool hasPlatformStrategies();
  • trunk/Source/WebCore/plugins/DOMMimeType.cpp

    r181483 r181494  
    4343}
    4444
    45 String DOMMimeType::type() const
     45const String &DOMMimeType::type() const
    4646{
    4747    return mimeClassInfo().type;
     
    6161}
    6262
    63 String DOMMimeType::description() const
     63const String &DOMMimeType::description() const
    6464{
    6565    return mimeClassInfo().desc;
    66 }
    67 
    68 MimeClassInfo DOMMimeType::mimeClassInfo() const
    69 {
    70     Vector<MimeClassInfo> mimes;
    71     Vector<size_t> mimePluginIndices;
    72     m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
    73     return mimes[m_index];
    7466}
    7567
     
    7971        return 0;
    8072
    81     Vector<MimeClassInfo> mimes;
    82     Vector<size_t> mimePluginIndices;
    83     m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
    84     return DOMPlugin::create(m_pluginData.get(), m_frame, mimePluginIndices[m_index]);
     73    return DOMPlugin::create(m_pluginData.get(), m_frame, m_pluginData->mimePluginIndices()[m_index]);
    8574}
    8675
  • trunk/Source/WebCore/plugins/DOMMimeType.h

    r181483 r181494  
    3838    ~DOMMimeType();
    3939
    40     String type() const;
     40    const String &type() const;
    4141    String suffixes() const;
    42     String description() const;
     42    const String &description() const;
    4343    PassRefPtr<DOMPlugin> enabledPlugin() const;
    4444
    4545private:
    46     MimeClassInfo mimeClassInfo() const;
     46    const MimeClassInfo& mimeClassInfo() const { return m_pluginData->mimes()[m_index]; }
    4747
    4848    DOMMimeType(PassRefPtr<PluginData>, Frame*, unsigned index);
  • trunk/Source/WebCore/plugins/DOMMimeTypeArray.cpp

    r181483 r181494  
    4949    if (!data)
    5050        return 0;
    51 
    52     Vector<MimeClassInfo> mimes;
    53     Vector<size_t> mimePluginIndices;
    54     data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
    55     return mimes.size();
     51    return data->mimes().size();
    5652}
    5753
     
    6157    if (!data)
    6258        return 0;
    63 
    64     Vector<MimeClassInfo> mimes;
    65     Vector<size_t> mimePluginIndices;
    66     data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
    67 
     59    const Vector<MimeClassInfo>& mimes = data->mimes();
    6860    if (index >= mimes.size())
    6961        return 0;
     
    7668    if (!data)
    7769        return 0;
    78 
    79     Vector<MimeClassInfo> mimes;
    80     Vector<size_t> mimePluginIndices;
    81     data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
     70    const Vector<MimeClassInfo>& mimes = data->mimes();
    8271    for (unsigned i = 0; i < mimes.size(); ++i) {
    8372        if (mimes[i].type == propertyName)
     
    9281    if (!data)
    9382        return 0;
    94 
    95     Vector<MimeClassInfo> mimes;
    96     Vector<size_t> mimePluginIndices;
    97     data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
     83    const Vector<MimeClassInfo>& mimes = data->mimes();
    9884    for (unsigned i = 0; i < mimes.size(); ++i) {
    9985        if (mimes[i].type == propertyName)
  • trunk/Source/WebCore/plugins/DOMPlugin.cpp

    r181483 r181494  
    5757}
    5858
    59 PluginInfo DOMPlugin::pluginInfo() const
    60 {
    61     return m_pluginData->webVisiblePlugins()[m_index];
    62 }
    63 
    6459PassRefPtr<DOMMimeType> DOMPlugin::item(unsigned index)
    6560{
     
    6762        return 0;
    6863
    69     MimeClassInfo mime = pluginInfo().mimes[index];
     64    const MimeClassInfo& mime = pluginInfo().mimes[index];
    7065
    71     Vector<MimeClassInfo> mimes;
    72     Vector<size_t> mimePluginIndices;
    73     m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
     66    const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
    7467    for (unsigned i = 0; i < mimes.size(); ++i) {
    75         if (mimes[i] == mime && mimePluginIndices[i] == m_index)
     68        if (mimes[i] == mime && m_pluginData->mimePluginIndices()[i] == m_index)
    7669            return DOMMimeType::create(m_pluginData.get(), m_frame, i);
    7770    }
     
    8174bool DOMPlugin::canGetItemsForName(const AtomicString& propertyName)
    8275{
    83     Vector<MimeClassInfo> mimes;
    84     Vector<size_t> mimePluginIndices;
    85     m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
     76    const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
    8677    for (unsigned i = 0; i < mimes.size(); ++i)
    8778        if (mimes[i].type == propertyName)
     
    9283PassRefPtr<DOMMimeType> DOMPlugin::namedItem(const AtomicString& propertyName)
    9384{
    94     Vector<MimeClassInfo> mimes;
    95     Vector<size_t> mimePluginIndices;
    96     m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
     85    const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
    9786    for (unsigned i = 0; i < mimes.size(); ++i)
    9887        if (mimes[i].type == propertyName)
  • trunk/Source/WebCore/plugins/DOMPlugin.h

    r181483 r181494  
    4949
    5050private:
    51     PluginInfo pluginInfo() const;
     51    const PluginInfo& pluginInfo() const { return m_pluginData->plugins()[m_index]; }
    5252
    5353    DOMPlugin(PluginData*, Frame*, unsigned index);
  • trunk/Source/WebCore/plugins/DOMPluginArray.cpp

    r181483 r181494  
    4949    if (!data)
    5050        return 0;
    51 
    52     return data->webVisiblePlugins().size();
     51    return data->plugins().size();
    5352}
    5453
     
    5857    if (!data)
    5958        return 0;
    60 
    61     const Vector<PluginInfo>& plugins = data->webVisiblePlugins();
     59    const Vector<PluginInfo>& plugins = data->plugins();
    6260    if (index >= plugins.size())
    6361        return 0;
     
    7068    if (!data)
    7169        return 0;
    72 
    73     const Vector<PluginInfo>& plugins = data->webVisiblePlugins();
     70    const Vector<PluginInfo>& plugins = data->plugins();
    7471    for (unsigned i = 0; i < plugins.size(); ++i) {
    7572        if (plugins[i].name == propertyName)
     
    8481    if (!data)
    8582        return 0;
    86 
    87     const Vector<PluginInfo>& plugins = data->webVisiblePlugins();
     83    const Vector<PluginInfo>& plugins = data->plugins();
    8884    for (unsigned i = 0; i < plugins.size(); ++i) {
    8985        if (plugins[i].name == propertyName)
  • trunk/Source/WebCore/plugins/PluginData.cpp

    r181483 r181494  
    33    Copyright (C) 2000 Daniel Molkentin (molkentin@kde.org)
    44    Copyright (C) 2000 Stefan Schimanski (schimmi@kde.org)
    5     Copyright (C) 2003, 2004, 2005, 2006, 2007, 2015 Apple Inc. All Rights Reserved.
     5    Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All Rights Reserved.
    66    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
    77
     
    3232PluginData::PluginData(const Page* page)
    3333{
    34     ASSERT_ARG(page, page);
     34    initPlugins(page);
    3535
    36     m_page = page;
    37     initPlugins();
    38 }
    39 
    40 Vector<PluginInfo> PluginData::webVisiblePlugins() const
    41 {
    42     Vector<PluginInfo> plugins;
    43     platformStrategies()->pluginStrategy()->getWebVisiblePluginInfo(m_page, plugins);
    44     return plugins;
    45 }
    46 
    47 void PluginData::getWebVisibleMimesAndPluginIndices(Vector<MimeClassInfo>& mimes, Vector<size_t>& mimePluginIndices) const
    48 {
    49     ASSERT_ARG(mimes, mimes.isEmpty());
    50     ASSERT_ARG(mimePluginIndices, mimePluginIndices.isEmpty());
    51 
    52     const Vector<PluginInfo>& plugins = webVisiblePlugins();
    53     for (unsigned i = 0; i < plugins.size(); ++i) {
    54         const PluginInfo& plugin = plugins[i];
     36    for (unsigned i = 0; i < m_plugins.size(); ++i) {
     37        const PluginInfo& plugin = m_plugins[i];
    5538        for (unsigned j = 0; j < plugin.mimes.size(); ++j) {
    56             mimes.append(plugin.mimes[j]);
    57             mimePluginIndices.append(i);
     39            m_mimes.append(plugin.mimes[j]);
     40            m_mimePluginIndices.append(i);
    5841        }
    5942    }
    6043}
    6144
    62 bool PluginData::supportsWebVisibleMimeType(const String& mimeType, const AllowedPluginTypes allowedPluginTypes) const
     45bool PluginData::supportsMimeType(const String& mimeType, const AllowedPluginTypes allowedPluginTypes) const
    6346{
    64     Vector<MimeClassInfo> mimes;
    65     Vector<size_t> mimePluginIndices;
    66     const Vector<PluginInfo>& plugins = webVisiblePlugins();
    67     getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
    68 
    69     for (unsigned i = 0; i < mimes.size(); ++i) {
    70         if (mimes[i].type == mimeType && (allowedPluginTypes == AllPlugins || plugins[mimePluginIndices[i]].isApplicationPlugin))
     47    for (unsigned i = 0; i < m_mimes.size(); ++i) {
     48        if (m_mimes[i].type == mimeType && (allowedPluginTypes == AllPlugins || m_plugins[m_mimePluginIndices[i]].isApplicationPlugin))
    7149            return true;
    7250    }
     
    7452}
    7553
    76 const PluginInfo* PluginData::pluginInfoForWebVisibleMimeType(const String& mimeType) const
     54const PluginInfo* PluginData::pluginInfoForMimeType(const String& mimeType) const
    7755{
    78     Vector<MimeClassInfo> mimes;
    79     Vector<size_t> mimePluginIndices;
    80     const Vector<PluginInfo>& plugins = webVisiblePlugins();
    81     getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
    82 
    83     for (unsigned i = 0; i < mimes.size(); ++i) {
    84         const MimeClassInfo& info = mimes[i];
    85 
     56    for (unsigned i = 0; i < m_mimes.size(); ++i) {
     57        const MimeClassInfo& info = m_mimes[i];
     58   
    8659        if (info.type == mimeType)
    87             return &plugins[mimePluginIndices[i]];
     60            return &m_plugins[m_mimePluginIndices[i]];
    8861    }
    8962
     
    9164}
    9265
    93 String PluginData::pluginNameForWebVisibleMimeType(const String& mimeType) const
     66String PluginData::pluginNameForMimeType(const String& mimeType) const
    9467{
    95     if (const PluginInfo* info = pluginInfoForWebVisibleMimeType(mimeType))
     68    if (const PluginInfo* info = pluginInfoForMimeType(mimeType))
    9669        return info->name;
    9770    return String();
    9871}
    9972
    100 String PluginData::pluginFileForWebVisibleMimeType(const String& mimeType) const
     73String PluginData::pluginFileForMimeType(const String& mimeType) const
    10174{
    102     if (const PluginInfo* info = pluginInfoForWebVisibleMimeType(mimeType))
     75    if (const PluginInfo* info = pluginInfoForMimeType(mimeType))
    10376        return info->file;
    10477    return String();
     
    11083}
    11184
    112 void PluginData::initPlugins()
     85void PluginData::initPlugins(const Page* page)
    11386{
    11487    ASSERT(m_plugins.isEmpty());
    115 
    116     platformStrategies()->pluginStrategy()->getPluginInfo(m_page, m_plugins);
     88   
     89    platformStrategies()->pluginStrategy()->getPluginInfo(page, m_plugins);
    11790}
    11891
  • trunk/Source/WebCore/plugins/PluginData.h

    r181483 r181494  
    3030struct PluginInfo;
    3131
    32 enum PluginLoadClientPolicy : uint8_t {
    33     // No client-specific plug-in load policy has been defined. The plug-in should be visible in navigator.plugins and WebKit should synchronously
    34     // ask the client whether the plug-in should be loaded.
    35     PluginLoadClientPolicyUndefined = 0,
    36 
    37     // The plug-in module should be blocked from being instantiated. The plug-in should be hidden in navigator.plugins.
    38     PluginLoadClientPolicyBlock,
    39 
    40     // WebKit should synchronously ask the client whether the plug-in should be loaded. The plug-in should be visible in navigator.plugins.
    41     PluginLoadClientPolicyAsk,
    42 
    43     // The plug-in module may be loaded if WebKit is not blocking it.
    44     PluginLoadClientPolicyAllow,
    45 
    46     // The plug-in module should be loaded irrespective of whether WebKit has asked it to be blocked.
    47     PluginLoadClientPolicyAllowAlways,
    48 };
    49 
    5032struct MimeClassInfo {
    5133    String type;
     
    6547    Vector<MimeClassInfo> mimes;
    6648    bool isApplicationPlugin;
    67 
    68     PluginLoadClientPolicy clientLoadPolicy;
    69 
    70 #if PLATFORM(MAC)
    71     String bundleIdentifier;
    72     String versionString;
    73 #endif
    7449};
    7550
     
    8055
    8156    const Vector<PluginInfo>& plugins() const { return m_plugins; }
    82     Vector<PluginInfo> webVisiblePlugins() const;
    83     WEBCORE_EXPORT void getWebVisibleMimesAndPluginIndices(Vector<MimeClassInfo>&, Vector<size_t>&) const;
     57    const Vector<MimeClassInfo>& mimes() const { return m_mimes; }
     58    const Vector<size_t>& mimePluginIndices() const { return m_mimePluginIndices; }
    8459
    8560    enum AllowedPluginTypes {
     
    8863    };
    8964
    90     WEBCORE_EXPORT bool supportsWebVisibleMimeType(const String& mimeType, const AllowedPluginTypes) const;
    91     String pluginNameForWebVisibleMimeType(const String& mimeType) const;
    92     String pluginFileForWebVisibleMimeType(const String& mimeType) const;
     65    WEBCORE_EXPORT bool supportsMimeType(const String& mimeType, const AllowedPluginTypes) const;
     66    String pluginNameForMimeType(const String& mimeType) const;
     67    String pluginFileForMimeType(const String& mimeType) const;
    9368
    9469    static void refresh();
     
    9671private:
    9772    explicit PluginData(const Page*);
    98     void initPlugins();
    99     const PluginInfo* pluginInfoForWebVisibleMimeType(const String& mimeType) const;
     73    void initPlugins(const Page*);
     74    const PluginInfo* pluginInfoForMimeType(const String& mimeType) const;
    10075
    10176protected:
    10277#if defined ENABLE_WEB_REPLAY && ENABLE_WEB_REPLAY
    103     PluginData(Vector<PluginInfo> plugins)
     78    PluginData(Vector<PluginInfo> plugins, Vector<MimeClassInfo> mimes, Vector<size_t> indices)
    10479        : m_plugins(plugins)
     80        , m_mimes(mimes)
     81        , m_mimePluginIndices(indices)
    10582    {
    10683    }
    10784#endif
    10885
    109     const Page* m_page;
    11086    Vector<PluginInfo> m_plugins;
     87    Vector<MimeClassInfo> m_mimes;
     88    Vector<size_t> m_mimePluginIndices;
    11189};
    11290
  • trunk/Source/WebCore/plugins/PluginStrategy.h

    r181483 r181494  
    3737    virtual void refreshPlugins() = 0;
    3838    virtual void getPluginInfo(const Page*, Vector<PluginInfo>&) = 0;
    39     virtual void getWebVisiblePluginInfo(const Page*, Vector<PluginInfo>&) = 0;
    40 #if PLATFORM(MAC)
    41     virtual void setPluginLoadClientPolicy(PluginLoadClientPolicy, const String& host, const String& bundleIdentifier, const String& versionString) = 0;
    42     virtual void clearPluginClientPolicies() = 0;
    43 #endif
    4439
    4540protected:
  • trunk/Source/WebCore/replay/SerializationMethods.cpp

    r181483 r181494  
    5454using WebCore::PlatformWheelEventGranularity;
    5555using WebCore::PluginData;
    56 using WebCore::PluginLoadClientPolicy;
    5756using WebCore::PluginInfo;
    5857using WebCore::SecurityOrigin;
     
    439438EncodedValue EncodingTraits<PluginData>::encodeValue(RefPtr<PluginData> input)
    440439{
    441     // FIXME: This needs to work in terms of web-visible plug-ins.
    442440    EncodedValue encodedData = EncodedValue::createObject();
    443441
     442    Vector<uint32_t> castedMimePluginIndices(input->mimePluginIndices().size());
     443    for (uint32_t index : input->mimePluginIndices())
     444        castedMimePluginIndices.append(WTF::safeCast<uint32_t>(index));
     445
    444446    ENCODE_TYPE_WITH_KEY(encodedData, Vector<PluginInfo>, plugins, input->plugins());
     447    ENCODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes, input->mimes());
     448    ENCODE_TYPE_WITH_KEY(encodedData, Vector<uint32_t>, mimePluginIndices, castedMimePluginIndices);
    445449
    446450    return encodedData;
     
    449453class DeserializedPluginData : public PluginData {
    450454public:
    451     DeserializedPluginData(Vector<PluginInfo> plugins)
    452         : PluginData(plugins)
     455    DeserializedPluginData(Vector<PluginInfo> plugins, Vector<MimeClassInfo> mimes, Vector<size_t> indices)
     456        : PluginData(plugins, mimes, indices)
    453457    {
    454458    }
     
    458462{
    459463    DECODE_TYPE_WITH_KEY(encodedData, Vector<PluginInfo>, plugins);
    460 
    461     // FIXME: This needs to work in terms of web-visible plug-ins.
    462     input = adoptRef(new DeserializedPluginData(plugins));
     464    DECODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes);
     465    DECODE_TYPE_WITH_KEY(encodedData, Vector<uint32_t>, mimePluginIndices);
     466
     467    Vector<size_t> castedMimePluginIndices(mimePluginIndices.size());
     468    for (uint32_t index : mimePluginIndices)
     469        castedMimePluginIndices.append(WTF::safeCast<size_t>(index));
     470
     471    input = adoptRef(new DeserializedPluginData(plugins, mimes, castedMimePluginIndices));
    463472
    464473    return true;
     
    475484    ENCODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes, input.mimes);
    476485    ENCODE_TYPE_WITH_KEY(encodedData, bool, isApplicationPlugin, input.isApplicationPlugin);
    477     ENCODE_TYPE_WITH_KEY(encodedData, PluginLoadClientPolicy, clientLoadPolicy, static_cast<PluginLoadClientPolicy>(input.clientLoadPolicy));
    478 #if PLATFORM(MAC)
    479     ENCODE_TYPE_WITH_KEY(encodedData, String, bundleIdentifier, input.bundleIdentifier);
    480     ENCODE_TYPE_WITH_KEY(encodedData, String, versionString, input.versionString);
    481 #endif
    482486
    483487    return encodedData;
     
    494498    DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, Vector<MimeClassInfo>, mimes, info.mimes);
    495499    DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, bool, isApplicationPlugin, info.isApplicationPlugin);
    496     DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, PluginLoadClientPolicy, clientLoadPolicy, info.clientLoadPolicy);
    497 #if PLATFORM(MAC)
    498     DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, String, bundleIdentifier, input.bundleIdentifier);
    499     DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, String, versionString, input.versionString);
    500 #endif
    501500
    502501    input = info;
  • trunk/Source/WebCore/replay/WebInputs.json

    r181483 r181494  
    6767                "header": "plugins/PluginData.h"
    6868            },
    69             {
    70                 "name": "PluginLoadClientPolicy", "mode": "SCALAR", "storage": "uint8_t",
    71                 "flags": ["ENUM"],
    72                 "values": ["PluginLoadClientPolicyUndefined", "PluginLoadClientPolicyBlock", "PluginLoadClientPolicyAsk", "PluginLoadClientPolicyAllow", "PluginLoadClientPolicyAllowAlways"],
    73                 "header": "plugins/PluginData.h"
    74             },
    75 
    7669            {
    7770                "name": "ScrollDirection", "mode": "SCALAR", "storage": "uint8_t",
  • trunk/Source/WebKit/mac/ChangeLog

    r181491 r181494  
     12015-03-13  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r181483.
     4        https://bugs.webkit.org/show_bug.cgi?id=142688
     5
     6        Caused use-after-free on many tests (Requested by ap on
     7        #webkit).
     8
     9        Reverted changeset:
     10
     11        "Allow clients to selectively disable plug-ins"
     12        https://bugs.webkit.org/show_bug.cgi?id=142506
     13        http://trac.webkit.org/changeset/181483
     14
    1152015-03-13  Eric Carlson  <eric.carlson@apple.com>
    216
  • trunk/Source/WebKit/mac/Plugins/WebBasePluginPackage.mm

    r181483 r181494  
    250250
    251251    pluginInfo.isApplicationPlugin = false;
    252     pluginInfo.clientLoadPolicy = PluginLoadClientPolicyUndefined;
    253 #if PLATFORM(MAC)
    254     pluginInfo.bundleIdentifier = self.bundleIdentifier;
    255     pluginInfo.versionString = self.bundleVersion;
    256 #endif
    257252
    258253    return YES;
  • trunk/Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm

    r181483 r181494  
    147147
    148148    pluginInfo.isApplicationPlugin = false;
    149     pluginInfo.clientLoadPolicy = PluginLoadClientPolicyUndefined;
    150 #if PLATFORM(MAC)
    151     pluginInfo.bundleIdentifier = self.bundleIdentifier;
    152     pluginInfo.versionString = self.bundleVersion;
    153 #endif
    154 
     149   
    155150    [self closeResourceFile:resRef];
    156151   
  • trunk/Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h

    r181483 r181494  
    6363    virtual void refreshPlugins() override;
    6464    virtual void getPluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override;
    65     virtual void getWebVisiblePluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override;
    66 #if PLATFORM(MAC)
    67     virtual void setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy, const String&, const String&, const String&) override;
    68     virtual void clearPluginClientPolicies() override;
    69 #endif
    7065
    7166    // WebCore::LoaderStrategy
  • trunk/Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm

    r181483 r181494  
    129129}
    130130
    131 void WebPlatformStrategies::getWebVisiblePluginInfo(const Page* page, Vector<PluginInfo>& plugins)
    132 {
    133     getPluginInfo(page, plugins);
    134 }
    135 
    136 #if PLATFORM(MAC)
    137 void WebPlatformStrategies::setPluginLoadClientPolicy(PluginLoadClientPolicy, const String&, const String&, const String&)
    138 {
    139 }
    140 
    141 void WebPlatformStrategies::clearPluginClientPolicies()
    142 {
    143 }
    144 #endif
    145 
    146131void WebPlatformStrategies::getTypes(Vector<String>& types, const String& pasteboardName)
    147132{
  • trunk/Source/WebKit/mac/WebView/WebFrame.mm

    r181483 r181494  
    980980    if (WebCore::DOMImplementation::isTextMIMEType(mimeType)
    981981        || Image::supportsType(mimeType)
    982         || (pluginData && pluginData->supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && frame->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
    983         || (pluginData && pluginData->supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins)))
     982        || (pluginData && pluginData->supportsMimeType(mimeType, PluginData::AllPlugins) && frame->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
     983        || (pluginData && pluginData->supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins)))
    984984        return NO;
    985985
  • trunk/Source/WebKit/win/ChangeLog

    r181483 r181494  
     12015-03-13  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r181483.
     4        https://bugs.webkit.org/show_bug.cgi?id=142688
     5
     6        Caused use-after-free on many tests (Requested by ap on
     7        #webkit).
     8
     9        Reverted changeset:
     10
     11        "Allow clients to selectively disable plug-ins"
     12        https://bugs.webkit.org/show_bug.cgi?id=142506
     13        http://trac.webkit.org/changeset/181483
     14
    1152015-03-10  Conrad Shultz  <conrad_shultz@apple.com>
    216
  • trunk/Source/WebKit/win/WebCoreSupport/WebPlatformStrategies.cpp

    r181483 r181494  
    135135    }
    136136}
    137 
    138 void WebPlatformStrategies::getWebVisiblePluginInfo(const Page* page, Vector<PluginInfo>& plugins)
    139 {
    140     getPluginInfo(page, plugins);
    141 }
  • trunk/Source/WebKit/win/WebCoreSupport/WebPlatformStrategies.h

    r181483 r181494  
    5656    virtual void refreshPlugins();
    5757    virtual void getPluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&);
    58     virtual void getWebVisiblePluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&);
    5958};
    6059
  • trunk/Source/WebKit/win/WebView.cpp

    r181483 r181494  
    26302630
    26312631    if (!canShow && m_page) {
    2632         canShow = (m_page->pluginData().supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && allowPlugins)
    2633             || m_page->pluginData().supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins);
     2632        canShow = (m_page->pluginData().supportsMimeType(mimeType, PluginData::AllPlugins) && allowPlugins)
     2633            || m_page->pluginData().supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins);
    26342634    }
    26352635
  • trunk/Source/WebKit2/ChangeLog

    r181491 r181494  
     12015-03-13  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r181483.
     4        https://bugs.webkit.org/show_bug.cgi?id=142688
     5
     6        Caused use-after-free on many tests (Requested by ap on
     7        #webkit).
     8
     9        Reverted changeset:
     10
     11        "Allow clients to selectively disable plug-ins"
     12        https://bugs.webkit.org/show_bug.cgi?id=142506
     13        http://trac.webkit.org/changeset/181483
     14
    1152015-03-13  Eric Carlson  <eric.carlson@apple.com>
    216
  • trunk/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm

    r181483 r181494  
    400400
    401401    plugin.info.isApplicationPlugin = false;
    402     plugin.info.clientLoadPolicy = PluginLoadClientPolicyUndefined;
    403 #if PLATFORM(MAC)
    404     plugin.info.bundleIdentifier = plugin.bundleIdentifier;
    405     plugin.info.versionString = plugin.versionString;
    406 #endif
    407 
     402   
    408403    return true;
    409404}
  • trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp

    r181483 r181494  
    567567void ArgumentCoder<PluginInfo>::encode(ArgumentEncoder& encoder, const PluginInfo& pluginInfo)
    568568{
    569     encoder << pluginInfo.name;
    570     encoder << pluginInfo.file;
    571     encoder << pluginInfo.desc;
    572     encoder << pluginInfo.mimes;
    573     encoder << pluginInfo.isApplicationPlugin;
    574     encoder.encodeEnum(pluginInfo.clientLoadPolicy);
    575 #if PLATFORM(MAC)
    576     encoder << pluginInfo.bundleIdentifier;
    577     encoder << pluginInfo.versionString;
    578 #endif
    579 }
    580 
     569    encoder << pluginInfo.name << pluginInfo.file << pluginInfo.desc << pluginInfo.mimes << pluginInfo.isApplicationPlugin;
     570}
     571   
    581572bool ArgumentCoder<PluginInfo>::decode(ArgumentDecoder& decoder, PluginInfo& pluginInfo)
    582573{
     
    591582    if (!decoder.decode(pluginInfo.isApplicationPlugin))
    592583        return false;
    593     PluginLoadClientPolicy clientLoadPolicy;
    594     if (!decoder.decodeEnum(clientLoadPolicy))
    595         return false;
    596 #if PLATFORM(MAC)
    597     if (!decoder.decode(pluginInfo.bundleIdentifier))
    598         return false;
    599     if (!decoder.decode(pluginInfo.versionString))
    600         return false;
    601 #endif
    602584
    603585    return true;
  • trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp

    r181483 r181494  
    145145    encoder << hasRichContentServices;
    146146#endif
    147 
    148 #if ENABLE(NETSCAPE_PLUGIN_API)
    149     encoder << pluginLoadClientPolicies;
    150 #endif
    151147}
    152148
     
    307303#endif
    308304
    309 #if ENABLE(NETSCAPE_PLUGIN_API)
    310     if (!decoder.decode(parameters.pluginLoadClientPolicies))
    311         return false;
    312 #endif
    313 
    314305    return true;
    315306}
  • trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h

    r181483 r181494  
    168168    bool hasRichContentServices;
    169169#endif
    170 
    171 #if ENABLE(NETSCAPE_PLUGIN_API)
    172     HashMap<String, HashMap<String, HashMap<String, uint8_t>>> pluginLoadClientPolicies;
    173 #endif
    174170};
    175171
  • trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h

    r181483 r181494  
    4848#include <WebCore/Credential.h>
    4949#include <WebCore/FrameLoaderTypes.h>
    50 #include <WebCore/PluginData.h>
    5150#include <WebCore/ProtectionSpace.h>
    5251#include <WebCore/Settings.h>
     
    484483}
    485484
    486 inline WKPluginLoadClientPolicy toWKPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy PluginLoadClientPolicy)
    487 {
    488     switch (PluginLoadClientPolicy) {
    489     case WebCore::PluginLoadClientPolicyUndefined:
    490         return kWKPluginLoadClientPolicyUndefined;
    491     case WebCore::PluginLoadClientPolicyBlock:
    492         return kWKPluginLoadClientPolicyBlock;
    493     case WebCore::PluginLoadClientPolicyAsk:
    494         return kWKPluginLoadClientPolicyAsk;
    495     case WebCore::PluginLoadClientPolicyAllow:
    496         return kWKPluginLoadClientPolicyAllow;
    497     case WebCore::PluginLoadClientPolicyAllowAlways:
    498         return kWKPluginLoadClientPolicyAllowAlways;
    499     }
    500 
    501     ASSERT_NOT_REACHED();
    502     return kWKPluginLoadClientPolicyBlock;
    503 }
    504 
    505485inline PluginModuleLoadPolicy toPluginModuleLoadPolicy(WKPluginLoadPolicy pluginLoadPolicy)
    506486{
     
    518498}
    519499
    520 inline WebCore::PluginLoadClientPolicy toPluginLoadClientPolicy(WKPluginLoadClientPolicy pluginLoadClientPolicy)
    521 {
    522     switch (pluginLoadClientPolicy) {
    523     case kWKPluginLoadClientPolicyUndefined:
    524         return WebCore::PluginLoadClientPolicyUndefined;
    525     case kWKPluginLoadClientPolicyBlock:
    526         return WebCore::PluginLoadClientPolicyBlock;
    527     case kWKPluginLoadClientPolicyAsk:
    528         return WebCore::PluginLoadClientPolicyAsk;
    529     case kWKPluginLoadClientPolicyAllow:
    530         return WebCore::PluginLoadClientPolicyAllow;
    531     case kWKPluginLoadClientPolicyAllowAlways:
    532         return WebCore::PluginLoadClientPolicyAllowAlways;
    533     }
    534 
    535     ASSERT_NOT_REACHED();
    536     return WebCore::PluginLoadClientPolicyBlock;
    537 }
    538 
    539500inline WebCore::WebGLLoadPolicy toWebGLLoadPolicy(WKWebGLLoadPolicy webGLLoadPolicy)
    540501{
  • trunk/Source/WebKit2/UIProcess/API/C/WKPluginLoadPolicy.h

    r181483 r181494  
    4141typedef uint32_t WKPluginLoadPolicy;
    4242
    43 enum WKPluginLoadClientPolicy {
    44     kWKPluginLoadClientPolicyUndefined = 0,
    45     kWKPluginLoadClientPolicyBlock,
    46     kWKPluginLoadClientPolicyAsk,
    47     kWKPluginLoadClientPolicyAllow,
    48     kWKPluginLoadClientPolicyAllowAlways,
    49 };
    50 
    5143#ifdef __cplusplus
    5244}
  • trunk/Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.h

    r181483 r181494  
    2828
    2929#include <WebKit/WKBase.h>
    30 #include <WebKit/WKPluginLoadPolicy.h>
    3130
    3231#ifdef __cplusplus
     
    3837
    3938WK_EXPORT bool WKContextIsPlugInUpdateAvailable(WKContextRef context, WKStringRef plugInBundleIdentifier);
    40 
    41 WK_EXPORT void WKContextSetPluginLoadClientPolicy(WKContextRef context, WKPluginLoadClientPolicy policy, WKStringRef host, WKStringRef bundleIdentifier, WKStringRef versionString);
    42 WK_EXPORT void WKContextClearPluginClientPolicies(WKContextRef context);
    4339
    4440WK_EXPORT WKDictionaryRef WKContextCopyPlugInInfoForBundleIdentifier(WKContextRef context, WKStringRef plugInBundleIdentifier);
  • trunk/Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.mm

    r181483 r181494  
    5050#else
    5151    return WKIsPluginUpdateAvailable((NSString *)adoptCF(WKStringCopyCFString(kCFAllocatorDefault, plugInBundleIdentifierRef)).get());
    52 #endif
    53 }
    54 
    55 void WKContextSetPluginLoadClientPolicy(WKContextRef contextRef, WKPluginLoadClientPolicy policy, WKStringRef host, WKStringRef bundleIdentifier, WKStringRef versionString)
    56 {
    57 #if ENABLE(NETSCAPE_PLUGIN_API)
    58     toImpl(contextRef)->setPluginLoadClientPolicy(toPluginLoadClientPolicy(policy), toWTFString(host), toWTFString(bundleIdentifier), toWTFString(versionString));
    59 #endif
    60 }
    61 
    62 void WKContextClearPluginClientPolicies(WKContextRef contextRef)
    63 {
    64 #if ENABLE(NETSCAPE_PLUGIN_API)
    65     toImpl(contextRef)->clearPluginClientPolicies();
    6652#endif
    6753}
  • trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp

    r181483 r181494  
    684684#endif
    685685
    686 #if ENABLE(NETSCAPE_PLUGIN_API)
    687     parameters.pluginLoadClientPolicies = m_pluginLoadClientPolicies;
    688 #endif
    689 
    690686#if OS(LINUX)
    691687    parameters.shouldEnableMemoryPressureReliefLogging = true;
     
    14231419    m_client.plugInInformationBecameAvailable(this, API::Array::create(WTF::move(plugins)).get());
    14241420}
    1425 
    1426 void WebProcessPool::setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy policy, const String& host, const String& bundleIdentifier, const String& versionString)
    1427 {
    1428 #if ENABLE(NETSCAPE_PLUGIN_API)
    1429     HashMap<String, HashMap<String, uint8_t>> policiesByIdentifier;
    1430     if (m_pluginLoadClientPolicies.contains(host))
    1431         policiesByIdentifier = m_pluginLoadClientPolicies.get(host);
    1432 
    1433     HashMap<String, uint8_t> versionsToPolicies;
    1434     if (policiesByIdentifier.contains(bundleIdentifier))
    1435         versionsToPolicies = policiesByIdentifier.get(bundleIdentifier);
    1436 
    1437     versionsToPolicies.set(versionString, policy);
    1438     policiesByIdentifier.set(bundleIdentifier, versionsToPolicies);
    1439     m_pluginLoadClientPolicies.set(host, policiesByIdentifier);
    1440 #endif
    1441 
    1442     sendToAllProcesses(Messages::WebProcess::SetPluginLoadClientPolicy(policy, host, bundleIdentifier, versionString));
    1443 }
    1444 
    1445 void WebProcessPool::clearPluginClientPolicies()
    1446 {
    1447 #if ENABLE(NETSCAPE_PLUGIN_API)
    1448     m_pluginLoadClientPolicies.clear();
    1449 #endif
    1450     sendToAllProcesses(Messages::WebProcess::ClearPluginClientPolicies());
    1451 }
    14521421#endif
    14531422   
  • trunk/Source/WebKit2/UIProcess/WebProcessPool.h

    r181483 r181494  
    184184
    185185    PluginInfoStore& pluginInfoStore() { return m_pluginInfoStore; }
    186 
    187     void setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy, const String& host, const String& bundleIdentifier, const String& versionString);
    188     void clearPluginClientPolicies();
    189186#endif
    190187
     
    544541    HashMap<String, String> m_encodedContentExtensions;
    545542#endif
    546 
    547 #if ENABLE(NETSCAPE_PLUGIN_API)
    548     HashMap<String, HashMap<String, HashMap<String, uint8_t>>> m_pluginLoadClientPolicies;
    549 #endif
    550543};
    551544
  • trunk/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm

    r181483 r181494  
    540540    info.name = builtInPDFPluginName();
    541541    info.isApplicationPlugin = true;
    542     info.clientLoadPolicy = PluginLoadClientPolicyUndefined;
    543542
    544543    MimeClassInfo pdfMimeClassInfo;
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r181483 r181494  
    14481448    ASSERT(extension.lower() == extension);
    14491449
    1450     Vector<MimeClassInfo> mimes;
    1451     Vector<size_t> mimePluginIndices;
    1452     pluginData.getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
    1453     for (size_t i = 0; i < mimes.size(); ++i) {
    1454         const MimeClassInfo& mimeClassInfo = mimes[i];
     1450    for (size_t i = 0; i < pluginData.mimes().size(); ++i) {
     1451        const MimeClassInfo& mimeClassInfo = pluginData.mimes()[i];
    14551452
    14561453        if (mimeClassInfo.extensions.contains(extension))
     
    14871484    if (WebPage* webPage = m_frame->page()) {
    14881485        const PluginData& pluginData = webPage->corePage()->pluginData();
    1489         if (pluginData.supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
     1486        if (pluginData.supportsMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
    14901487            plugInSupportsMIMEType = true;
    1491         else if (pluginData.supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins))
     1488        else if (pluginData.supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins))
    14921489            plugInSupportsMIMEType = true;
    14931490    }
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp

    r181483 r181494  
    11/*
    2  * Copyright (C) 2010, 2011, 2012, 2015 Apple Inc. All rights reserved.
     2 * Copyright (C) 2010, 2011, 2012 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4545#include "WebProcessProxyMessages.h"
    4646#include <WebCore/Color.h>
    47 #include <WebCore/DocumentLoader.h>
    4847#include <WebCore/IDBFactoryBackendInterface.h>
    4948#include <WebCore/LoaderStrategy.h>
     
    268267{
    269268#if ENABLE(NETSCAPE_PLUGIN_API)
    270     ASSERT_ARG(page, page);
    271     populatePluginCache(*page);
     269    populatePluginCache();
    272270
    273271    if (page->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin)) {
     
    283281}
    284282
    285 void WebPlatformStrategies::getWebVisiblePluginInfo(const Page* page, Vector<PluginInfo>& plugins)
    286 {
    287     ASSERT_ARG(page, page);
    288     ASSERT_ARG(plugins, plugins.isEmpty());
    289 
    290     getPluginInfo(page, plugins);
    291 
    292 #if PLATFORM(MAC)
    293     for (int32_t i = plugins.size() - 1; i >= 0; --i) {
    294         PluginInfo& info = plugins.at(i);
    295         PluginLoadClientPolicy clientPolicy = info.clientLoadPolicy;
    296         // Allow built-in plugins. Also tentatively allow plugins that the client might later selectively permit.
    297         if (info.isApplicationPlugin || clientPolicy == PluginLoadClientPolicyAsk)
    298             continue;
    299 
    300         if (clientPolicy == PluginLoadClientPolicyBlock)
    301             plugins.remove(i);
    302     }
    303 #endif
    304 }
    305 
    306 #if PLATFORM(MAC)
    307 void WebPlatformStrategies::setPluginLoadClientPolicy(PluginLoadClientPolicy clientPolicy, const String& host, const String& bundleIdentifier, const String& versionString)
    308 {
    309     String hostToSet = host.isNull() || !host.length() ? "*" : host;
    310     String bundleIdentifierToSet = bundleIdentifier.isNull() || !bundleIdentifier.length() ? "*" : bundleIdentifier;
    311     String versionStringToSet = versionString.isNull() || !versionString.length() ? "*" : versionString;
    312 
    313     PluginPolicyMapsByIdentifier policiesByIdentifier;
    314     if (m_hostsToPluginIdentifierData.contains(hostToSet))
    315         policiesByIdentifier = m_hostsToPluginIdentifierData.get(hostToSet);
    316 
    317     PluginLoadClientPoliciesByBundleVersion versionsToPolicies;
    318     if (policiesByIdentifier.contains(bundleIdentifierToSet))
    319         versionsToPolicies = policiesByIdentifier.get(bundleIdentifierToSet);
    320 
    321     versionsToPolicies.set(versionStringToSet, clientPolicy);
    322     policiesByIdentifier.set(bundleIdentifierToSet, versionsToPolicies);
    323     m_hostsToPluginIdentifierData.set(hostToSet, policiesByIdentifier);
    324 }
    325 
    326 void WebPlatformStrategies::clearPluginClientPolicies()
    327 {
    328     m_hostsToPluginIdentifierData.clear();
    329 }
    330 
    331 #endif
    332 
    333283#if ENABLE(NETSCAPE_PLUGIN_API)
    334 #if PLATFORM(MAC)
    335 bool WebPlatformStrategies::pluginLoadClientPolicyForHost(const String& host, const PluginInfo& info, PluginLoadClientPolicy& policy) const
    336 {
    337     String hostToLookUp = host;
    338     if (!m_hostsToPluginIdentifierData.contains(hostToLookUp))
    339         hostToLookUp = "*";
    340     if (!m_hostsToPluginIdentifierData.contains(hostToLookUp))
    341         return false;
    342 
    343     PluginPolicyMapsByIdentifier policiesByIdentifier = m_hostsToPluginIdentifierData.get(hostToLookUp);
    344     String identifier = info.bundleIdentifier;
    345     if (!identifier || !policiesByIdentifier.contains(identifier))
    346         identifier = "*";
    347     if (!policiesByIdentifier.contains(identifier))
    348         return false;
    349 
    350     PluginLoadClientPoliciesByBundleVersion versionsToPolicies = policiesByIdentifier.get(identifier);
    351     String version = info.versionString;
    352     if (!version || !versionsToPolicies.contains(version))
    353         version = "*";
    354     if (!versionsToPolicies.contains(version))
    355         return false;
    356 
    357     policy = versionsToPolicies.get(version);
    358     return true;
    359 }
    360 #endif // PLATFORM(MAC)
    361 
    362 void WebPlatformStrategies::populatePluginCache(const WebCore::Page& page)
    363 {
    364     if (!m_pluginCacheIsPopulated) {
    365         if (!WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetPlugins(m_shouldRefreshPlugins), Messages::WebProcessProxy::GetPlugins::Reply(m_cachedPlugins, m_cachedApplicationPlugins), 0))
    366             return;
    367 
    368         m_shouldRefreshPlugins = false;
    369         m_pluginCacheIsPopulated = true;
    370     }
    371 
    372 #if PLATFORM(MAC)
    373     String pageHost = page.mainFrame().loader().documentLoader()->responseURL().host();
    374     for (PluginInfo& info : m_cachedPlugins) {
    375         PluginLoadClientPolicy clientPolicy;
    376         if (pluginLoadClientPolicyForHost(pageHost, info, clientPolicy))
    377             info.clientLoadPolicy = clientPolicy;
    378     }
    379 #else
    380     UNUSED_PARAM(page);
    381 #endif // not PLATFORM(MAC)
     284void WebPlatformStrategies::populatePluginCache()
     285{
     286    if (m_pluginCacheIsPopulated)
     287        return;
     288
     289    ASSERT(m_cachedPlugins.isEmpty());
     290   
     291    // FIXME: Should we do something in case of error here?
     292    if (!WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetPlugins(m_shouldRefreshPlugins), Messages::WebProcessProxy::GetPlugins::Reply(m_cachedPlugins, m_cachedApplicationPlugins), 0))
     293        return;
     294
     295    m_shouldRefreshPlugins = false;
     296    m_pluginCacheIsPopulated = true;
    382297}
    383298#endif // ENABLE(NETSCAPE_PLUGIN_API)
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h

    r181483 r181494  
    3232#include <WebCore/PlatformStrategies.h>
    3333#include <WebCore/PluginStrategy.h>
    34 #include <wtf/HashMap.h>
    3534#include <wtf/NeverDestroyed.h>
    3635
     
    6968    virtual void refreshPlugins() override;
    7069    virtual void getPluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override;
    71     virtual void getWebVisiblePluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override;
    72 
    73 #if PLATFORM(MAC)
    74     typedef HashMap<String, WebCore::PluginLoadClientPolicy> PluginLoadClientPoliciesByBundleVersion;
    75     typedef HashMap<String, PluginLoadClientPoliciesByBundleVersion> PluginPolicyMapsByIdentifier;
    76 
    77     virtual void setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy, const String& host, const String& bundleIdentifier, const String& versionString) override;
    78     virtual void clearPluginClientPolicies() override;
    79 #endif
    8070
    8171    // WebCore::PasteboardStrategy
     
    110100#if ENABLE(NETSCAPE_PLUGIN_API)
    111101    // WebCore::PluginStrategy implementation.
    112     void populatePluginCache(const WebCore::Page&);
     102    void populatePluginCache();
    113103    bool m_pluginCacheIsPopulated;
    114104    bool m_shouldRefreshPlugins;
    115105    Vector<WebCore::PluginInfo> m_cachedPlugins;
    116106    Vector<WebCore::PluginInfo> m_cachedApplicationPlugins;
    117 
    118 #if PLATFORM(MAC)
    119     HashMap<String, PluginPolicyMapsByIdentifier> m_hostsToPluginIdentifierData;
    120     bool pluginLoadClientPolicyForHost(const String&, const WebCore::PluginInfo&, WebCore::PluginLoadClientPolicy&) const;
    121 #endif // PLATFORM(MAC)
    122107#endif // ENABLE(NETSCAPE_PLUGIN_API)
    123108};
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r181483 r181494  
    44274427
    44284428    const PluginData& pluginData = m_page->pluginData();
    4429     if (pluginData.supportsWebVisibleMimeType(MIMEType, PluginData::AllPlugins) && corePage()->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
     4429    if (pluginData.supportsMimeType(MIMEType, PluginData::AllPlugins) && corePage()->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
    44304430        return true;
    44314431
    44324432    // We can use application plugins even if plugins aren't enabled.
    4433     if (pluginData.supportsWebVisibleMimeType(MIMEType, PluginData::OnlyApplicationPlugins))
     4433    if (pluginData.supportsMimeType(MIMEType, PluginData::OnlyApplicationPlugins))
    44344434        return true;
    44354435
  • trunk/Source/WebKit2/WebProcess/WebProcess.cpp

    r181483 r181494  
    385385    }
    386386#endif
    387 
    388 #if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC)
    389     for (const auto& hostKeyValue : parameters.pluginLoadClientPolicies) {
    390         for (const auto& bundleIdentifierKeyValue : hostKeyValue.value) {
    391             for (const auto& versionStringKeyValue : bundleIdentifierKeyValue.value)
    392                 platformStrategies()->pluginStrategy()->setPluginLoadClientPolicy(static_cast<PluginLoadClientPolicy>(versionStringKeyValue.value), hostKeyValue.key, bundleIdentifierKeyValue.key, versionStringKeyValue.key);
    393         }
    394     }
    395 #endif
    396387}
    397388
     
    870861
    871862    parentProcessConnection()->send(Messages::WebProcessPool::PlugInDidReceiveUserInteraction(plugInOriginHash, sessionID), 0);
    872 }
    873 
    874 void WebProcess::setPluginLoadClientPolicy(uint8_t policy, const String& host, const String& bundleIdentifier, const String& versionString)
    875 {
    876 #if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC)
    877     platformStrategies()->pluginStrategy()->setPluginLoadClientPolicy(static_cast<PluginLoadClientPolicy>(policy), host, bundleIdentifier, versionString);
    878 #endif
    879 }
    880 
    881 void WebProcess::clearPluginClientPolicies()
    882 {
    883 #if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC)
    884     platformStrategies()->pluginStrategy()->clearPluginClientPolicies();
    885 #endif
    886863}
    887864
  • trunk/Source/WebKit2/WebProcess/WebProcess.h

    r181483 r181494  
    124124    void plugInDidStartFromOrigin(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, WebCore::SessionID);
    125125    void plugInDidReceiveUserInteraction(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, WebCore::SessionID);
    126     void setPluginLoadClientPolicy(uint8_t policy, const String& host, const String& bundleIdentifier, const String& versionString);
    127     void clearPluginClientPolicies();
    128126
    129127    bool fullKeyboardAccessEnabled() const { return m_fullKeyboardAccessEnabled; }
  • trunk/Source/WebKit2/WebProcess/WebProcess.messages.in

    r181483 r181494  
    5757    ResetPlugInAutoStartOriginDefaultHashes(HashMap<uint32_t,double> hashes)
    5858    ResetPlugInAutoStartOriginHashes(HashMap<WebCore::SessionID, HashMap<uint32_t,double>> hashes)
    59     SetPluginLoadClientPolicy(uint8_t policy, String host, String bundleIdentifier, String versionString)
    60     ClearPluginClientPolicies()
    6159
    6260    void StartMemorySampler(WebKit::SandboxExtension::Handle sampleLogFileHandle, String sampleLogFilePath, double interval);
Note: See TracChangeset for help on using the changeset viewer.