Unreviewed, rolling out r181483.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Mar 2015 02:50:28 +0000 (02:50 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Mar 2015 02:50:28 +0000 (02:50 +0000)
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

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181494 268f45cc-cd09-0410-ab3c-d52691b4dbfc

44 files changed:
Source/WebCore/ChangeLog
Source/WebCore/dom/DOMImplementation.cpp
Source/WebCore/loader/SubframeLoader.cpp
Source/WebCore/platform/PlatformStrategies.h
Source/WebCore/plugins/DOMMimeType.cpp
Source/WebCore/plugins/DOMMimeType.h
Source/WebCore/plugins/DOMMimeTypeArray.cpp
Source/WebCore/plugins/DOMPlugin.cpp
Source/WebCore/plugins/DOMPlugin.h
Source/WebCore/plugins/DOMPluginArray.cpp
Source/WebCore/plugins/PluginData.cpp
Source/WebCore/plugins/PluginData.h
Source/WebCore/plugins/PluginStrategy.h
Source/WebCore/replay/SerializationMethods.cpp
Source/WebCore/replay/WebInputs.json
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/Plugins/WebBasePluginPackage.mm
Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm
Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h
Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm
Source/WebKit/mac/WebView/WebFrame.mm
Source/WebKit/win/ChangeLog
Source/WebKit/win/WebCoreSupport/WebPlatformStrategies.cpp
Source/WebKit/win/WebCoreSupport/WebPlatformStrategies.h
Source/WebKit/win/WebView.cpp
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
Source/WebKit2/Shared/WebCoreArgumentCoders.cpp
Source/WebKit2/Shared/WebProcessCreationParameters.cpp
Source/WebKit2/Shared/WebProcessCreationParameters.h
Source/WebKit2/UIProcess/API/C/WKAPICast.h
Source/WebKit2/UIProcess/API/C/WKPluginLoadPolicy.h
Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.h
Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.mm
Source/WebKit2/UIProcess/WebProcessPool.cpp
Source/WebKit2/UIProcess/WebProcessPool.h
Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm
Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h
Source/WebKit2/WebProcess/WebPage/WebPage.cpp
Source/WebKit2/WebProcess/WebProcess.cpp
Source/WebKit2/WebProcess/WebProcess.h
Source/WebKit2/WebProcess/WebProcess.messages.in

index 493e453..7819566 100644 (file)
@@ -1,3 +1,17 @@
+2015-03-13  Commit Queue  <commit-queue@webkit.org>
+
+        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
+
 2015-03-13  Antti Koivisto  <antti@apple.com>
 
         Cache glyph widths to GlyphPages
index ae3d842..40c151b 100644 (file)
@@ -329,7 +329,7 @@ RefPtr<Document> DOMImplementation::createDocument(const String& type, Frame* fr
 
     // PDF is one image type for which a plugin can override built-in support.
     // We do not want QuickTime to take over all image types, obviously.
-    if (MIMETypeRegistry::isPDFOrPostScriptMIMEType(type) && pluginData && pluginData->supportsWebVisibleMimeType(type, allowedPluginTypes))
+    if (MIMETypeRegistry::isPDFOrPostScriptMIMEType(type) && pluginData && pluginData->supportsMimeType(type, allowedPluginTypes))
         return PluginDocument::create(frame, url);
     if (Image::supportsType(type))
         return ImageDocument::create(*frame, url);
@@ -348,7 +348,7 @@ RefPtr<Document> DOMImplementation::createDocument(const String& type, Frame* fr
     // Everything else except text/plain can be overridden by plugins. In particular, Adobe SVG Viewer should be used for SVG, if installed.
     // Disallowing plug-ins to use text/plain prevents plug-ins from hijacking a fundamental type that the browser is expected to handle,
     // and also serves as an optimization to prevent loading the plug-in database in the common case.
-    if (type != "text/plain" && ((pluginData && pluginData->supportsWebVisibleMimeType(type, allowedPluginTypes)) || (frame && frame->loader().client().shouldAlwaysUsePluginDocument(type))))
+    if (type != "text/plain" && ((pluginData && pluginData->supportsMimeType(type, allowedPluginTypes)) || (frame && frame->loader().client().shouldAlwaysUsePluginDocument(type))))
         return PluginDocument::create(frame, url);
     if (isTextMIMEType(type))
         return TextDocument::create(frame, url);
index b0fd52f..bcaa98d 100644 (file)
@@ -167,11 +167,8 @@ static String findPluginMIMETypeFromURL(Page* page, const String& url)
 
     const PluginData& pluginData = page->pluginData();
 
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    pluginData.getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
-    for (size_t i = 0; i < mimes.size(); ++i) {
-        const MimeClassInfo& mimeClassInfo = mimes[i];
+    for (size_t i = 0; i < pluginData.mimes().size(); ++i) {
+        const MimeClassInfo& mimeClassInfo = pluginData.mimes()[i];
         for (size_t j = 0; j < mimeClassInfo.extensions.size(); ++j) {
             if (equalIgnoringCase(extension, mimeClassInfo.extensions[j]))
                 return mimeClassInfo.type;
@@ -194,7 +191,7 @@ static void logPluginRequest(Page* page, const String& mimeType, const String& u
             return;
     }
 
-    String pluginFile = page->pluginData().pluginFileForWebVisibleMimeType(newMIMEType);
+    String pluginFile = page->pluginData().pluginFileForMimeType(newMIMEType);
     String description = !pluginFile ? newMIMEType : pluginFile;
 
     DiagnosticLoggingClient& diagnosticLoggingClient = page->mainFrame().diagnosticLoggingClient();
@@ -370,7 +367,7 @@ bool SubframeLoader::shouldUsePlugin(const URL& url, const String& mimeType, boo
     // Allow other plug-ins to win over QuickTime because if the user has installed a plug-in that
     // can handle TIFF (which QuickTime can also handle) they probably intended to override QT.
     if (m_frame.page() && (mimeType == "image/tiff" || mimeType == "image/tif" || mimeType == "image/x-tiff")) {
-        String pluginName = m_frame.page()->pluginData().pluginNameForWebVisibleMimeType(mimeType);
+        String pluginName = m_frame.page()->pluginData().pluginNameForMimeType(mimeType);
         if (!pluginName.isEmpty() && !pluginName.contains("QuickTime", false)) 
             return true;
     }
index 4e625fb..740bcfd 100644 (file)
@@ -88,7 +88,7 @@ private:
     PluginStrategy* m_pluginStrategy;
 };
 
-WEBCORE_EXPORT PlatformStrategies* platformStrategies();
+PlatformStrategies* platformStrategies();
 WEBCORE_EXPORT void setPlatformStrategies(PlatformStrategies*);
 bool hasPlatformStrategies();
     
index e28a8a0..3e1ef9a 100644 (file)
@@ -42,7 +42,7 @@ DOMMimeType::~DOMMimeType()
 {
 }
 
-String DOMMimeType::type() const
+const String &DOMMimeType::type() const
 {
     return mimeClassInfo().type;
 }
@@ -60,28 +60,17 @@ String DOMMimeType::suffixes() const
     return builder.toString();
 }
 
-String DOMMimeType::description() const
+const String &DOMMimeType::description() const
 {
     return mimeClassInfo().desc;
 }
 
-MimeClassInfo DOMMimeType::mimeClassInfo() const
-{
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
-    return mimes[m_index];
-}
-
 PassRefPtr<DOMPlugin> DOMMimeType::enabledPlugin() const
 {
     if (!m_frame || !m_frame->page() || !m_frame->page()->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
         return 0;
 
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
-    return DOMPlugin::create(m_pluginData.get(), m_frame, mimePluginIndices[m_index]);
+    return DOMPlugin::create(m_pluginData.get(), m_frame, m_pluginData->mimePluginIndices()[m_index]);
 }
 
 } // namespace WebCore
index a0903a2..5083e24 100644 (file)
@@ -37,13 +37,13 @@ public:
     static Ref<DOMMimeType> create(PassRefPtr<PluginData> pluginData, Frame* frame, unsigned index) { return adoptRef(*new DOMMimeType(pluginData, frame, index)); }
     ~DOMMimeType();
 
-    String type() const;
+    const String &type() const;
     String suffixes() const;
-    String description() const;
+    const String &description() const;
     PassRefPtr<DOMPlugin> enabledPlugin() const;
 
 private:
-    MimeClassInfo mimeClassInfo() const;
+    const MimeClassInfo& mimeClassInfo() const { return m_pluginData->mimes()[m_index]; }
 
     DOMMimeType(PassRefPtr<PluginData>, Frame*, unsigned index);
     RefPtr<PluginData> m_pluginData;
index 0e14fd3..6b2c439 100644 (file)
@@ -48,11 +48,7 @@ unsigned DOMMimeTypeArray::length() const
     PluginData* data = getPluginData();
     if (!data)
         return 0;
-
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
-    return mimes.size();
+    return data->mimes().size();
 }
 
 PassRefPtr<DOMMimeType> DOMMimeTypeArray::item(unsigned index)
@@ -60,11 +56,7 @@ PassRefPtr<DOMMimeType> DOMMimeTypeArray::item(unsigned index)
     PluginData* data = getPluginData();
     if (!data)
         return 0;
-
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
-
+    const Vector<MimeClassInfo>& mimes = data->mimes();
     if (index >= mimes.size())
         return 0;
     return DOMMimeType::create(data, m_frame, index);
@@ -75,10 +67,7 @@ bool DOMMimeTypeArray::canGetItemsForName(const AtomicString& propertyName)
     PluginData *data = getPluginData();
     if (!data)
         return 0;
-
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
+    const Vector<MimeClassInfo>& mimes = data->mimes();
     for (unsigned i = 0; i < mimes.size(); ++i) {
         if (mimes[i].type == propertyName)
             return true;
@@ -91,10 +80,7 @@ PassRefPtr<DOMMimeType> DOMMimeTypeArray::namedItem(const AtomicString& property
     PluginData *data = getPluginData();
     if (!data)
         return 0;
-
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
+    const Vector<MimeClassInfo>& mimes = data->mimes();
     for (unsigned i = 0; i < mimes.size(); ++i) {
         if (mimes[i].type == propertyName)
             return DOMMimeType::create(data, m_frame, i);
index f2488bc..3fe917f 100644 (file)
@@ -56,23 +56,16 @@ unsigned DOMPlugin::length() const
     return pluginInfo().mimes.size();
 }
 
-PluginInfo DOMPlugin::pluginInfo() const
-{
-    return m_pluginData->webVisiblePlugins()[m_index];
-}
-
 PassRefPtr<DOMMimeType> DOMPlugin::item(unsigned index)
 {
     if (index >= pluginInfo().mimes.size())
         return 0;
 
-    MimeClassInfo mime = pluginInfo().mimes[index];
+    const MimeClassInfo& mime = pluginInfo().mimes[index];
 
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
+    const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
     for (unsigned i = 0; i < mimes.size(); ++i) {
-        if (mimes[i] == mime && mimePluginIndices[i] == m_index)
+        if (mimes[i] == mime && m_pluginData->mimePluginIndices()[i] == m_index)
             return DOMMimeType::create(m_pluginData.get(), m_frame, i);
     }
     return 0;
@@ -80,9 +73,7 @@ PassRefPtr<DOMMimeType> DOMPlugin::item(unsigned index)
 
 bool DOMPlugin::canGetItemsForName(const AtomicString& propertyName)
 {
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
+    const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
     for (unsigned i = 0; i < mimes.size(); ++i)
         if (mimes[i].type == propertyName)
             return true;
@@ -91,9 +82,7 @@ bool DOMPlugin::canGetItemsForName(const AtomicString& propertyName)
 
 PassRefPtr<DOMMimeType> DOMPlugin::namedItem(const AtomicString& propertyName)
 {
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
+    const Vector<MimeClassInfo>& mimes = m_pluginData->mimes();
     for (unsigned i = 0; i < mimes.size(); ++i)
         if (mimes[i].type == propertyName)
             return DOMMimeType::create(m_pluginData.get(), m_frame, i);
index 522098e..125ca26 100644 (file)
@@ -48,7 +48,7 @@ public:
     PassRefPtr<DOMMimeType> namedItem(const AtomicString& propertyName);
 
 private:
-    PluginInfo pluginInfo() const;
+    const PluginInfo& pluginInfo() const { return m_pluginData->plugins()[m_index]; }
 
     DOMPlugin(PluginData*, Frame*, unsigned index);
     RefPtr<PluginData> m_pluginData;
index 12e51a9..815ea25 100644 (file)
@@ -48,8 +48,7 @@ unsigned DOMPluginArray::length() const
     PluginData* data = pluginData();
     if (!data)
         return 0;
-
-    return data->webVisiblePlugins().size();
+    return data->plugins().size();
 }
 
 PassRefPtr<DOMPlugin> DOMPluginArray::item(unsigned index)
@@ -57,8 +56,7 @@ PassRefPtr<DOMPlugin> DOMPluginArray::item(unsigned index)
     PluginData* data = pluginData();
     if (!data)
         return 0;
-
-    const Vector<PluginInfo>& plugins = data->webVisiblePlugins();
+    const Vector<PluginInfo>& plugins = data->plugins();
     if (index >= plugins.size())
         return 0;
     return DOMPlugin::create(data, m_frame, index);
@@ -69,8 +67,7 @@ bool DOMPluginArray::canGetItemsForName(const AtomicString& propertyName)
     PluginData* data = pluginData();
     if (!data)
         return 0;
-
-    const Vector<PluginInfo>& plugins = data->webVisiblePlugins();
+    const Vector<PluginInfo>& plugins = data->plugins();
     for (unsigned i = 0; i < plugins.size(); ++i) {
         if (plugins[i].name == propertyName)
             return true;
@@ -83,8 +80,7 @@ PassRefPtr<DOMPlugin> DOMPluginArray::namedItem(const AtomicString& propertyName
     PluginData* data = pluginData();
     if (!data)
         return 0;
-
-    const Vector<PluginInfo>& plugins = data->webVisiblePlugins();
+    const Vector<PluginInfo>& plugins = data->plugins();
     for (unsigned i = 0; i < plugins.size(); ++i) {
         if (plugins[i].name == propertyName)
             return DOMPlugin::create(data, m_frame, i);
index d2821ab..6dd4eaa 100644 (file)
@@ -2,7 +2,7 @@
     Copyright (C) 2000 Harri Porten (porten@kde.org)
     Copyright (C) 2000 Daniel Molkentin (molkentin@kde.org)
     Copyright (C) 2000 Stefan Schimanski (schimmi@kde.org)
-    Copyright (C) 2003, 2004, 2005, 2006, 2007, 2015 Apple Inc. All Rights Reserved.
+    Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All Rights Reserved.
     Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
 
     This library is free software; you can redistribute it and/or
@@ -31,75 +31,48 @@ namespace WebCore {
 
 PluginData::PluginData(const Page* page)
 {
-    ASSERT_ARG(page, page);
+    initPlugins(page);
 
-    m_page = page;
-    initPlugins();
-}
-
-Vector<PluginInfo> PluginData::webVisiblePlugins() const
-{
-    Vector<PluginInfo> plugins;
-    platformStrategies()->pluginStrategy()->getWebVisiblePluginInfo(m_page, plugins);
-    return plugins;
-}
-
-void PluginData::getWebVisibleMimesAndPluginIndices(Vector<MimeClassInfo>& mimes, Vector<size_t>& mimePluginIndices) const
-{
-    ASSERT_ARG(mimes, mimes.isEmpty());
-    ASSERT_ARG(mimePluginIndices, mimePluginIndices.isEmpty());
-
-    const Vector<PluginInfo>& plugins = webVisiblePlugins();
-    for (unsigned i = 0; i < plugins.size(); ++i) {
-        const PluginInfo& plugin = plugins[i];
+    for (unsigned i = 0; i < m_plugins.size(); ++i) {
+        const PluginInfo& plugin = m_plugins[i];
         for (unsigned j = 0; j < plugin.mimes.size(); ++j) {
-            mimes.append(plugin.mimes[j]);
-            mimePluginIndices.append(i);
+            m_mimes.append(plugin.mimes[j]);
+            m_mimePluginIndices.append(i);
         }
     }
 }
 
-bool PluginData::supportsWebVisibleMimeType(const String& mimeType, const AllowedPluginTypes allowedPluginTypes) const
+bool PluginData::supportsMimeType(const String& mimeType, const AllowedPluginTypes allowedPluginTypes) const
 {
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    const Vector<PluginInfo>& plugins = webVisiblePlugins();
-    getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
-
-    for (unsigned i = 0; i < mimes.size(); ++i) {
-        if (mimes[i].type == mimeType && (allowedPluginTypes == AllPlugins || plugins[mimePluginIndices[i]].isApplicationPlugin))
+    for (unsigned i = 0; i < m_mimes.size(); ++i) {
+        if (m_mimes[i].type == mimeType && (allowedPluginTypes == AllPlugins || m_plugins[m_mimePluginIndices[i]].isApplicationPlugin))
             return true;
     }
     return false;
 }
 
-const PluginInfo* PluginData::pluginInfoForWebVisibleMimeType(const String& mimeType) const
+const PluginInfo* PluginData::pluginInfoForMimeType(const String& mimeType) const
 {
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    const Vector<PluginInfo>& plugins = webVisiblePlugins();
-    getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
-
-    for (unsigned i = 0; i < mimes.size(); ++i) {
-        const MimeClassInfo& info = mimes[i];
-
+    for (unsigned i = 0; i < m_mimes.size(); ++i) {
+        const MimeClassInfo& info = m_mimes[i];
+    
         if (info.type == mimeType)
-            return &plugins[mimePluginIndices[i]];
+            return &m_plugins[m_mimePluginIndices[i]];
     }
 
     return 0;
 }
 
-String PluginData::pluginNameForWebVisibleMimeType(const String& mimeType) const
+String PluginData::pluginNameForMimeType(const String& mimeType) const
 {
-    if (const PluginInfo* info = pluginInfoForWebVisibleMimeType(mimeType))
+    if (const PluginInfo* info = pluginInfoForMimeType(mimeType))
         return info->name;
     return String();
 }
 
-String PluginData::pluginFileForWebVisibleMimeType(const String& mimeType) const
+String PluginData::pluginFileForMimeType(const String& mimeType) const
 {
-    if (const PluginInfo* info = pluginInfoForWebVisibleMimeType(mimeType))
+    if (const PluginInfo* info = pluginInfoForMimeType(mimeType))
         return info->file;
     return String();
 }
@@ -109,11 +82,11 @@ void PluginData::refresh()
     platformStrategies()->pluginStrategy()->refreshPlugins();
 }
 
-void PluginData::initPlugins()
+void PluginData::initPlugins(const Page* page)
 {
     ASSERT(m_plugins.isEmpty());
-
-    platformStrategies()->pluginStrategy()->getPluginInfo(m_page, m_plugins);
+    
+    platformStrategies()->pluginStrategy()->getPluginInfo(page, m_plugins);
 }
 
 }
index 981684d..1f26679 100644 (file)
@@ -29,24 +29,6 @@ namespace WebCore {
 class Page;
 struct PluginInfo;
 
-enum PluginLoadClientPolicy : uint8_t {
-    // No client-specific plug-in load policy has been defined. The plug-in should be visible in navigator.plugins and WebKit should synchronously
-    // ask the client whether the plug-in should be loaded.
-    PluginLoadClientPolicyUndefined = 0,
-
-    // The plug-in module should be blocked from being instantiated. The plug-in should be hidden in navigator.plugins.
-    PluginLoadClientPolicyBlock,
-
-    // WebKit should synchronously ask the client whether the plug-in should be loaded. The plug-in should be visible in navigator.plugins.
-    PluginLoadClientPolicyAsk,
-
-    // The plug-in module may be loaded if WebKit is not blocking it.
-    PluginLoadClientPolicyAllow,
-
-    // The plug-in module should be loaded irrespective of whether WebKit has asked it to be blocked.
-    PluginLoadClientPolicyAllowAlways,
-};
-
 struct MimeClassInfo {
     String type;
     String desc;
@@ -64,13 +46,6 @@ struct PluginInfo {
     String desc;
     Vector<MimeClassInfo> mimes;
     bool isApplicationPlugin;
-
-    PluginLoadClientPolicy clientLoadPolicy;
-
-#if PLATFORM(MAC)
-    String bundleIdentifier;
-    String versionString;
-#endif
 };
 
 // FIXME: merge with PluginDatabase in the future
@@ -79,35 +54,38 @@ public:
     static Ref<PluginData> create(const Page* page) { return adoptRef(*new PluginData(page)); }
 
     const Vector<PluginInfo>& plugins() const { return m_plugins; }
-    Vector<PluginInfo> webVisiblePlugins() const;
-    WEBCORE_EXPORT void getWebVisibleMimesAndPluginIndices(Vector<MimeClassInfo>&, Vector<size_t>&) const;
+    const Vector<MimeClassInfo>& mimes() const { return m_mimes; }
+    const Vector<size_t>& mimePluginIndices() const { return m_mimePluginIndices; }
 
     enum AllowedPluginTypes {
         AllPlugins,
         OnlyApplicationPlugins
     };
 
-    WEBCORE_EXPORT bool supportsWebVisibleMimeType(const String& mimeType, const AllowedPluginTypes) const;
-    String pluginNameForWebVisibleMimeType(const String& mimeType) const;
-    String pluginFileForWebVisibleMimeType(const String& mimeType) const;
+    WEBCORE_EXPORT bool supportsMimeType(const String& mimeType, const AllowedPluginTypes) const;
+    String pluginNameForMimeType(const String& mimeType) const;
+    String pluginFileForMimeType(const String& mimeType) const;
 
     static void refresh();
 
 private:
     explicit PluginData(const Page*);
-    void initPlugins();
-    const PluginInfo* pluginInfoForWebVisibleMimeType(const String& mimeType) const;
+    void initPlugins(const Page*);
+    const PluginInfo* pluginInfoForMimeType(const String& mimeType) const;
 
 protected:
 #if defined ENABLE_WEB_REPLAY && ENABLE_WEB_REPLAY
-    PluginData(Vector<PluginInfo> plugins)
+    PluginData(Vector<PluginInfo> plugins, Vector<MimeClassInfo> mimes, Vector<size_t> indices)
         : m_plugins(plugins)
+        , m_mimes(mimes)
+        , m_mimePluginIndices(indices)
     {
     }
 #endif
 
-    const Page* m_page;
     Vector<PluginInfo> m_plugins;
+    Vector<MimeClassInfo> m_mimes;
+    Vector<size_t> m_mimePluginIndices;
 };
 
 }
index 3a40ceb..05d199f 100644 (file)
@@ -36,11 +36,6 @@ class PluginStrategy {
 public:
     virtual void refreshPlugins() = 0;
     virtual void getPluginInfo(const Page*, Vector<PluginInfo>&) = 0;
-    virtual void getWebVisiblePluginInfo(const Page*, Vector<PluginInfo>&) = 0;
-#if PLATFORM(MAC)
-    virtual void setPluginLoadClientPolicy(PluginLoadClientPolicy, const String& host, const String& bundleIdentifier, const String& versionString) = 0;
-    virtual void clearPluginClientPolicies() = 0;
-#endif
 
 protected:
     virtual ~PluginStrategy() { }
index 7236ac1..669a101 100644 (file)
@@ -53,7 +53,6 @@ using WebCore::PlatformMouseEvent;
 using WebCore::PlatformWheelEvent;
 using WebCore::PlatformWheelEventGranularity;
 using WebCore::PluginData;
-using WebCore::PluginLoadClientPolicy;
 using WebCore::PluginInfo;
 using WebCore::SecurityOrigin;
 using WebCore::URL;
@@ -438,18 +437,23 @@ bool EncodingTraits<PlatformWheelEvent>::decodeValue(EncodedValue& encodedData,
 
 EncodedValue EncodingTraits<PluginData>::encodeValue(RefPtr<PluginData> input)
 {
-    // FIXME: This needs to work in terms of web-visible plug-ins.
     EncodedValue encodedData = EncodedValue::createObject();
 
+    Vector<uint32_t> castedMimePluginIndices(input->mimePluginIndices().size());
+    for (uint32_t index : input->mimePluginIndices())
+        castedMimePluginIndices.append(WTF::safeCast<uint32_t>(index));
+
     ENCODE_TYPE_WITH_KEY(encodedData, Vector<PluginInfo>, plugins, input->plugins());
+    ENCODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes, input->mimes());
+    ENCODE_TYPE_WITH_KEY(encodedData, Vector<uint32_t>, mimePluginIndices, castedMimePluginIndices);
 
     return encodedData;
 }
 
 class DeserializedPluginData : public PluginData {
 public:
-    DeserializedPluginData(Vector<PluginInfo> plugins)
-        : PluginData(plugins)
+    DeserializedPluginData(Vector<PluginInfo> plugins, Vector<MimeClassInfo> mimes, Vector<size_t> indices)
+        : PluginData(plugins, mimes, indices)
     {
     }
 };
@@ -457,9 +461,14 @@ public:
 bool EncodingTraits<PluginData>::decodeValue(EncodedValue& encodedData, RefPtr<PluginData>& input)
 {
     DECODE_TYPE_WITH_KEY(encodedData, Vector<PluginInfo>, plugins);
+    DECODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes);
+    DECODE_TYPE_WITH_KEY(encodedData, Vector<uint32_t>, mimePluginIndices);
+
+    Vector<size_t> castedMimePluginIndices(mimePluginIndices.size());
+    for (uint32_t index : mimePluginIndices)
+        castedMimePluginIndices.append(WTF::safeCast<size_t>(index));
 
-    // FIXME: This needs to work in terms of web-visible plug-ins.
-    input = adoptRef(new DeserializedPluginData(plugins));
+    input = adoptRef(new DeserializedPluginData(plugins, mimes, castedMimePluginIndices));
 
     return true;
 }
@@ -474,11 +483,6 @@ EncodedValue EncodingTraits<PluginInfo>::encodeValue(const PluginInfo& input)
     ENCODE_TYPE_WITH_KEY(encodedData, String, desc, input.desc);
     ENCODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes, input.mimes);
     ENCODE_TYPE_WITH_KEY(encodedData, bool, isApplicationPlugin, input.isApplicationPlugin);
-    ENCODE_TYPE_WITH_KEY(encodedData, PluginLoadClientPolicy, clientLoadPolicy, static_cast<PluginLoadClientPolicy>(input.clientLoadPolicy));
-#if PLATFORM(MAC)
-    ENCODE_TYPE_WITH_KEY(encodedData, String, bundleIdentifier, input.bundleIdentifier);
-    ENCODE_TYPE_WITH_KEY(encodedData, String, versionString, input.versionString);
-#endif
 
     return encodedData;
 }
@@ -493,11 +497,6 @@ bool EncodingTraits<PluginInfo>::decodeValue(EncodedValue& encodedData, PluginIn
     DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, String, desc, info.desc);
     DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, Vector<MimeClassInfo>, mimes, info.mimes);
     DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, bool, isApplicationPlugin, info.isApplicationPlugin);
-    DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, PluginLoadClientPolicy, clientLoadPolicy, info.clientLoadPolicy);
-#if PLATFORM(MAC)
-    DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, String, bundleIdentifier, input.bundleIdentifier);
-    DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, String, versionString, input.versionString);
-#endif
 
     input = info;
     return true;
index 7d9b544..b17231e 100644 (file)
                 "header": "plugins/PluginData.h"
             },
             {
-                "name": "PluginLoadClientPolicy", "mode": "SCALAR", "storage": "uint8_t",
-                "flags": ["ENUM"],
-                "values": ["PluginLoadClientPolicyUndefined", "PluginLoadClientPolicyBlock", "PluginLoadClientPolicyAsk", "PluginLoadClientPolicyAllow", "PluginLoadClientPolicyAllowAlways"],
-                "header": "plugins/PluginData.h"
-            },
-
-            {
                 "name": "ScrollDirection", "mode": "SCALAR", "storage": "uint8_t",
                 "flags": ["ENUM"],
                 "values": ["ScrollUp", "ScrollDown", "ScrollLeft", "ScrollRight"],
index bac5633..2634fd5 100644 (file)
@@ -1,3 +1,17 @@
+2015-03-13  Commit Queue  <commit-queue@webkit.org>
+
+        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
+
 2015-03-13  Eric Carlson  <eric.carlson@apple.com>
 
         [Mac] Enable WIRELESS_PLAYBACK_TARGET
index 9dd5aaa..a4820d8 100644 (file)
@@ -249,11 +249,6 @@ static NSString *pathByResolvingSymlinksAndAliases(NSString *thePath)
     pluginInfo.desc = description;
 
     pluginInfo.isApplicationPlugin = false;
-    pluginInfo.clientLoadPolicy = PluginLoadClientPolicyUndefined;
-#if PLATFORM(MAC)
-    pluginInfo.bundleIdentifier = self.bundleIdentifier;
-    pluginInfo.versionString = self.bundleVersion;
-#endif
 
     return YES;
 }
index 5e45c1a..1906ef3 100644 (file)
@@ -146,12 +146,7 @@ using namespace WebCore;
     pluginInfo.name = theName;
 
     pluginInfo.isApplicationPlugin = false;
-    pluginInfo.clientLoadPolicy = PluginLoadClientPolicyUndefined;
-#if PLATFORM(MAC)
-    pluginInfo.bundleIdentifier = self.bundleIdentifier;
-    pluginInfo.versionString = self.bundleVersion;
-#endif
-
+    
     [self closeResourceFile:resRef];
     
     return YES;
index 8e48d8f..3d568fd 100644 (file)
@@ -62,11 +62,6 @@ private:
     // WebCore::PluginStrategy
     virtual void refreshPlugins() override;
     virtual void getPluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override;
-    virtual void getWebVisiblePluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override;
-#if PLATFORM(MAC)
-    virtual void setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy, const String&, const String&, const String&) override;
-    virtual void clearPluginClientPolicies() override;
-#endif
 
     // WebCore::LoaderStrategy
     // - Using default implementation.
index 9bb3442..e75f0c7 100644 (file)
@@ -128,21 +128,6 @@ void WebPlatformStrategies::getPluginInfo(const Page* page, Vector<PluginInfo>&
     END_BLOCK_OBJC_EXCEPTIONS;
 }
 
-void WebPlatformStrategies::getWebVisiblePluginInfo(const Page* page, Vector<PluginInfo>& plugins)
-{
-    getPluginInfo(page, plugins);
-}
-
-#if PLATFORM(MAC)
-void WebPlatformStrategies::setPluginLoadClientPolicy(PluginLoadClientPolicy, const String&, const String&, const String&)
-{
-}
-
-void WebPlatformStrategies::clearPluginClientPolicies()
-{
-}
-#endif
-
 void WebPlatformStrategies::getTypes(Vector<String>& types, const String& pasteboardName)
 {
     PlatformPasteboard(pasteboardName).getTypes(types);
index 97a21e2..f9840be 100644 (file)
@@ -979,8 +979,8 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
 
     if (WebCore::DOMImplementation::isTextMIMEType(mimeType)
         || Image::supportsType(mimeType)
-        || (pluginData && pluginData->supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && frame->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
-        || (pluginData && pluginData->supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins)))
+        || (pluginData && pluginData->supportsMimeType(mimeType, PluginData::AllPlugins) && frame->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
+        || (pluginData && pluginData->supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins)))
         return NO;
 
     return YES;
index 3bcf7bc..01d9609 100644 (file)
@@ -1,3 +1,17 @@
+2015-03-13  Commit Queue  <commit-queue@webkit.org>
+
+        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
+
 2015-03-10  Conrad Shultz  <conrad_shultz@apple.com>
 
         Allow clients to selectively disable plug-ins
index b1e4d54..a32099b 100644 (file)
@@ -134,8 +134,3 @@ void WebPlatformStrategies::getPluginInfo(const WebCore::Page*, Vector<WebCore::
         outPlugins[i] = info;
     }
 }
-
-void WebPlatformStrategies::getWebVisiblePluginInfo(const Page* page, Vector<PluginInfo>& plugins)
-{
-    getPluginInfo(page, plugins);
-}
index e617a36..8a7cd0f 100644 (file)
@@ -55,7 +55,6 @@ private:
     // WebCore::PluginStrategy
     virtual void refreshPlugins();
     virtual void getPluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&);
-    virtual void getWebVisiblePluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&);
 };
 
 #endif // WebPlatformStrategies_h
index e905f83..3581849 100644 (file)
@@ -2629,8 +2629,8 @@ bool WebView::canShowMIMEType(const String& mimeType)
         || MIMETypeRegistry::isSupportedMediaMIMEType(mimeType);
 
     if (!canShow && m_page) {
-        canShow = (m_page->pluginData().supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && allowPlugins)
-            || m_page->pluginData().supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins);
+        canShow = (m_page->pluginData().supportsMimeType(mimeType, PluginData::AllPlugins) && allowPlugins)
+            || m_page->pluginData().supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins);
     }
 
     if (!canShow)
index 3353507..524701d 100644 (file)
@@ -1,3 +1,17 @@
+2015-03-13  Commit Queue  <commit-queue@webkit.org>
+
+        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
+
 2015-03-13  Eric Carlson  <eric.carlson@apple.com>
 
         [Mac] Enable WIRELESS_PLAYBACK_TARGET
index e6cf81a..a50c50e 100644 (file)
@@ -399,12 +399,7 @@ bool NetscapePluginModule::getPluginInfo(const String& pluginPath, PluginModuleI
         plugin.info.desc = plugin.info.file;
 
     plugin.info.isApplicationPlugin = false;
-    plugin.info.clientLoadPolicy = PluginLoadClientPolicyUndefined;
-#if PLATFORM(MAC)
-    plugin.info.bundleIdentifier = plugin.bundleIdentifier;
-    plugin.info.versionString = plugin.versionString;
-#endif
-
+    
     return true;
 }
 
index de442e8..4ce9bf0 100644 (file)
@@ -566,18 +566,9 @@ bool ArgumentCoder<MimeClassInfo>::decode(ArgumentDecoder& decoder, MimeClassInf
 
 void ArgumentCoder<PluginInfo>::encode(ArgumentEncoder& encoder, const PluginInfo& pluginInfo)
 {
-    encoder << pluginInfo.name;
-    encoder << pluginInfo.file;
-    encoder << pluginInfo.desc;
-    encoder << pluginInfo.mimes;
-    encoder << pluginInfo.isApplicationPlugin;
-    encoder.encodeEnum(pluginInfo.clientLoadPolicy);
-#if PLATFORM(MAC)
-    encoder << pluginInfo.bundleIdentifier;
-    encoder << pluginInfo.versionString;
-#endif
+    encoder << pluginInfo.name << pluginInfo.file << pluginInfo.desc << pluginInfo.mimes << pluginInfo.isApplicationPlugin;
 }
-
+    
 bool ArgumentCoder<PluginInfo>::decode(ArgumentDecoder& decoder, PluginInfo& pluginInfo)
 {
     if (!decoder.decode(pluginInfo.name))
@@ -590,15 +581,6 @@ bool ArgumentCoder<PluginInfo>::decode(ArgumentDecoder& decoder, PluginInfo& plu
         return false;
     if (!decoder.decode(pluginInfo.isApplicationPlugin))
         return false;
-    PluginLoadClientPolicy clientLoadPolicy;
-    if (!decoder.decodeEnum(clientLoadPolicy))
-        return false;
-#if PLATFORM(MAC)
-    if (!decoder.decode(pluginInfo.bundleIdentifier))
-        return false;
-    if (!decoder.decode(pluginInfo.versionString))
-        return false;
-#endif
 
     return true;
 }
index 91a3361..6df5a47 100644 (file)
@@ -144,10 +144,6 @@ void WebProcessCreationParameters::encode(IPC::ArgumentEncoder& encoder) const
     encoder << hasSelectionServices;
     encoder << hasRichContentServices;
 #endif
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-    encoder << pluginLoadClientPolicies;
-#endif
 }
 
 bool WebProcessCreationParameters::decode(IPC::ArgumentDecoder& decoder, WebProcessCreationParameters& parameters)
@@ -306,11 +302,6 @@ bool WebProcessCreationParameters::decode(IPC::ArgumentDecoder& decoder, WebProc
         return false;
 #endif
 
-#if ENABLE(NETSCAPE_PLUGIN_API)
-    if (!decoder.decode(parameters.pluginLoadClientPolicies))
-        return false;
-#endif
-
     return true;
 }
 
index c99c3f2..8664823 100644 (file)
@@ -167,10 +167,6 @@ struct WebProcessCreationParameters {
     bool hasSelectionServices;
     bool hasRichContentServices;
 #endif
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-    HashMap<String, HashMap<String, HashMap<String, uint8_t>>> pluginLoadClientPolicies;
-#endif
 };
 
 } // namespace WebKit
index f18e8b9..4885bdd 100644 (file)
@@ -47,7 +47,6 @@
 #include "WebGrammarDetail.h"
 #include <WebCore/Credential.h>
 #include <WebCore/FrameLoaderTypes.h>
-#include <WebCore/PluginData.h>
 #include <WebCore/ProtectionSpace.h>
 #include <WebCore/Settings.h>
 
@@ -483,25 +482,6 @@ inline WKPluginLoadPolicy toWKPluginLoadPolicy(PluginModuleLoadPolicy pluginModu
     return kWKPluginLoadPolicyBlocked;
 }
 
-inline WKPluginLoadClientPolicy toWKPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy PluginLoadClientPolicy)
-{
-    switch (PluginLoadClientPolicy) {
-    case WebCore::PluginLoadClientPolicyUndefined:
-        return kWKPluginLoadClientPolicyUndefined;
-    case WebCore::PluginLoadClientPolicyBlock:
-        return kWKPluginLoadClientPolicyBlock;
-    case WebCore::PluginLoadClientPolicyAsk:
-        return kWKPluginLoadClientPolicyAsk;
-    case WebCore::PluginLoadClientPolicyAllow:
-        return kWKPluginLoadClientPolicyAllow;
-    case WebCore::PluginLoadClientPolicyAllowAlways:
-        return kWKPluginLoadClientPolicyAllowAlways;
-    }
-
-    ASSERT_NOT_REACHED();
-    return kWKPluginLoadClientPolicyBlock;
-}
-
 inline PluginModuleLoadPolicy toPluginModuleLoadPolicy(WKPluginLoadPolicy pluginLoadPolicy)
 {
     switch (pluginLoadPolicy) {
@@ -517,25 +497,6 @@ inline PluginModuleLoadPolicy toPluginModuleLoadPolicy(WKPluginLoadPolicy plugin
     return PluginModuleBlocked;
 }
 
-inline WebCore::PluginLoadClientPolicy toPluginLoadClientPolicy(WKPluginLoadClientPolicy pluginLoadClientPolicy)
-{
-    switch (pluginLoadClientPolicy) {
-    case kWKPluginLoadClientPolicyUndefined:
-        return WebCore::PluginLoadClientPolicyUndefined;
-    case kWKPluginLoadClientPolicyBlock:
-        return WebCore::PluginLoadClientPolicyBlock;
-    case kWKPluginLoadClientPolicyAsk:
-        return WebCore::PluginLoadClientPolicyAsk;
-    case kWKPluginLoadClientPolicyAllow:
-        return WebCore::PluginLoadClientPolicyAllow;
-    case kWKPluginLoadClientPolicyAllowAlways:
-        return WebCore::PluginLoadClientPolicyAllowAlways;
-    }
-
-    ASSERT_NOT_REACHED();
-    return WebCore::PluginLoadClientPolicyBlock;
-}
-
 inline WebCore::WebGLLoadPolicy toWebGLLoadPolicy(WKWebGLLoadPolicy webGLLoadPolicy)
 {
     switch (webGLLoadPolicy) {
index ac8299d..715935a 100644 (file)
@@ -40,14 +40,6 @@ enum {
 };
 typedef uint32_t WKPluginLoadPolicy;
 
-enum WKPluginLoadClientPolicy {
-    kWKPluginLoadClientPolicyUndefined = 0,
-    kWKPluginLoadClientPolicyBlock,
-    kWKPluginLoadClientPolicyAsk,
-    kWKPluginLoadClientPolicyAllow,
-    kWKPluginLoadClientPolicyAllowAlways,
-};
-
 #ifdef __cplusplus
 }
 #endif
index 3c5101b..6b3fdf2 100644 (file)
@@ -27,7 +27,6 @@
 #define WKContextPrivateMac_h
 
 #include <WebKit/WKBase.h>
-#include <WebKit/WKPluginLoadPolicy.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -38,9 +37,6 @@ WK_EXPORT void WKContextSetProcessSuppressionEnabled(WKContextRef context, bool
 
 WK_EXPORT bool WKContextIsPlugInUpdateAvailable(WKContextRef context, WKStringRef plugInBundleIdentifier);
 
-WK_EXPORT void WKContextSetPluginLoadClientPolicy(WKContextRef context, WKPluginLoadClientPolicy policy, WKStringRef host, WKStringRef bundleIdentifier, WKStringRef versionString);
-WK_EXPORT void WKContextClearPluginClientPolicies(WKContextRef context);
-
 WK_EXPORT WKDictionaryRef WKContextCopyPlugInInfoForBundleIdentifier(WKContextRef context, WKStringRef plugInBundleIdentifier);
 
 typedef void (^WKContextGetInfoForInstalledPlugInsBlock)(WKArrayRef, WKErrorRef);
index ef2e24d..7a76238 100644 (file)
@@ -52,20 +52,6 @@ bool WKContextIsPlugInUpdateAvailable(WKContextRef contextRef, WKStringRef plugI
 #endif
 }
 
-void WKContextSetPluginLoadClientPolicy(WKContextRef contextRef, WKPluginLoadClientPolicy policy, WKStringRef host, WKStringRef bundleIdentifier, WKStringRef versionString)
-{
-#if ENABLE(NETSCAPE_PLUGIN_API)
-    toImpl(contextRef)->setPluginLoadClientPolicy(toPluginLoadClientPolicy(policy), toWTFString(host), toWTFString(bundleIdentifier), toWTFString(versionString));
-#endif
-}
-
-void WKContextClearPluginClientPolicies(WKContextRef contextRef)
-{
-#if ENABLE(NETSCAPE_PLUGIN_API)
-    toImpl(contextRef)->clearPluginClientPolicies();
-#endif
-}
-
 WKDictionaryRef WKContextCopyPlugInInfoForBundleIdentifier(WKContextRef contextRef, WKStringRef plugInBundleIdentifierRef)
 {
 #if ENABLE(NETSCAPE_PLUGIN_API)
index ef096f1..8f3f918 100644 (file)
@@ -683,10 +683,6 @@ WebProcessProxy& WebProcessPool::createNewWebProcess()
     serviceController.refreshExistingServices();
 #endif
 
-#if ENABLE(NETSCAPE_PLUGIN_API)
-    parameters.pluginLoadClientPolicies = m_pluginLoadClientPolicies;
-#endif
-
 #if OS(LINUX)
     parameters.shouldEnableMemoryPressureReliefLogging = true;
 #endif
@@ -1422,33 +1418,6 @@ void WebProcessPool::pluginInfoStoreDidLoadPlugins(PluginInfoStore* store)
 
     m_client.plugInInformationBecameAvailable(this, API::Array::create(WTF::move(plugins)).get());
 }
-
-void WebProcessPool::setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy policy, const String& host, const String& bundleIdentifier, const String& versionString)
-{
-#if ENABLE(NETSCAPE_PLUGIN_API)
-    HashMap<String, HashMap<String, uint8_t>> policiesByIdentifier;
-    if (m_pluginLoadClientPolicies.contains(host))
-        policiesByIdentifier = m_pluginLoadClientPolicies.get(host);
-
-    HashMap<String, uint8_t> versionsToPolicies;
-    if (policiesByIdentifier.contains(bundleIdentifier))
-        versionsToPolicies = policiesByIdentifier.get(bundleIdentifier);
-
-    versionsToPolicies.set(versionString, policy);
-    policiesByIdentifier.set(bundleIdentifier, versionsToPolicies);
-    m_pluginLoadClientPolicies.set(host, policiesByIdentifier);
-#endif
-
-    sendToAllProcesses(Messages::WebProcess::SetPluginLoadClientPolicy(policy, host, bundleIdentifier, versionString));
-}
-
-void WebProcessPool::clearPluginClientPolicies()
-{
-#if ENABLE(NETSCAPE_PLUGIN_API)
-    m_pluginLoadClientPolicies.clear();
-#endif
-    sendToAllProcesses(Messages::WebProcess::ClearPluginClientPolicies());
-}
 #endif
     
 void WebProcessPool::setMemoryCacheDisabled(bool disabled)
index 435f517..0960531 100644 (file)
@@ -183,9 +183,6 @@ public:
     void setAdditionalPluginsDirectory(const String&);
 
     PluginInfoStore& pluginInfoStore() { return m_pluginInfoStore; }
-
-    void setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy, const String& host, const String& bundleIdentifier, const String& versionString);
-    void clearPluginClientPolicies();
 #endif
 
 #if ENABLE(NETWORK_PROCESS)
@@ -543,10 +540,6 @@ private:
 #if ENABLE(CONTENT_EXTENSIONS)
     HashMap<String, String> m_encodedContentExtensions;
 #endif
-
-#if ENABLE(NETSCAPE_PLUGIN_API)
-    HashMap<String, HashMap<String, HashMap<String, uint8_t>>> m_pluginLoadClientPolicies;
-#endif
 };
 
 template<typename T>
index 3c96558..0ac9192 100644 (file)
@@ -539,7 +539,6 @@ PluginInfo PDFPlugin::pluginInfo()
     PluginInfo info;
     info.name = builtInPDFPluginName();
     info.isApplicationPlugin = true;
-    info.clientLoadPolicy = PluginLoadClientPolicyUndefined;
 
     MimeClassInfo pdfMimeClassInfo;
     pdfMimeClassInfo.type = "application/pdf";
index 9e8572e..6386b36 100644 (file)
@@ -1447,11 +1447,8 @@ static bool pluginSupportsExtension(const PluginData& pluginData, const String&
 {
     ASSERT(extension.lower() == extension);
 
-    Vector<MimeClassInfo> mimes;
-    Vector<size_t> mimePluginIndices;
-    pluginData.getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);
-    for (size_t i = 0; i < mimes.size(); ++i) {
-        const MimeClassInfo& mimeClassInfo = mimes[i];
+    for (size_t i = 0; i < pluginData.mimes().size(); ++i) {
+        const MimeClassInfo& mimeClassInfo = pluginData.mimes()[i];
 
         if (mimeClassInfo.extensions.contains(extension))
             return true;
@@ -1486,9 +1483,9 @@ ObjectContentType WebFrameLoaderClient::objectContentType(const URL& url, const
     bool plugInSupportsMIMEType = false;
     if (WebPage* webPage = m_frame->page()) {
         const PluginData& pluginData = webPage->corePage()->pluginData();
-        if (pluginData.supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
+        if (pluginData.supportsMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
             plugInSupportsMIMEType = true;
-        else if (pluginData.supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins))
+        else if (pluginData.supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins))
             plugInSupportsMIMEType = true;
     }
     
index 236880a..e3f42df 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010, 2011, 2012, 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2011, 2012 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -44,7 +44,6 @@
 #include "WebProcess.h"
 #include "WebProcessProxyMessages.h"
 #include <WebCore/Color.h>
-#include <WebCore/DocumentLoader.h>
 #include <WebCore/IDBFactoryBackendInterface.h>
 #include <WebCore/LoaderStrategy.h>
 #include <WebCore/MainFrame.h>
@@ -267,8 +266,7 @@ void WebPlatformStrategies::refreshPlugins()
 void WebPlatformStrategies::getPluginInfo(const WebCore::Page* page, Vector<WebCore::PluginInfo>& plugins)
 {
 #if ENABLE(NETSCAPE_PLUGIN_API)
-    ASSERT_ARG(page, page);
-    populatePluginCache(*page);
+    populatePluginCache();
 
     if (page->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin)) {
         plugins = m_cachedPlugins;
@@ -282,103 +280,20 @@ void WebPlatformStrategies::getPluginInfo(const WebCore::Page* page, Vector<WebC
 #endif // ENABLE(NETSCAPE_PLUGIN_API)
 }
 
-void WebPlatformStrategies::getWebVisiblePluginInfo(const Page* page, Vector<PluginInfo>& plugins)
-{
-    ASSERT_ARG(page, page);
-    ASSERT_ARG(plugins, plugins.isEmpty());
-
-    getPluginInfo(page, plugins);
-
-#if PLATFORM(MAC)
-    for (int32_t i = plugins.size() - 1; i >= 0; --i) {
-        PluginInfo& info = plugins.at(i);
-        PluginLoadClientPolicy clientPolicy = info.clientLoadPolicy;
-        // Allow built-in plugins. Also tentatively allow plugins that the client might later selectively permit.
-        if (info.isApplicationPlugin || clientPolicy == PluginLoadClientPolicyAsk)
-            continue;
-
-        if (clientPolicy == PluginLoadClientPolicyBlock)
-            plugins.remove(i);
-    }
-#endif
-}
-
-#if PLATFORM(MAC)
-void WebPlatformStrategies::setPluginLoadClientPolicy(PluginLoadClientPolicy clientPolicy, const String& host, const String& bundleIdentifier, const String& versionString)
-{
-    String hostToSet = host.isNull() || !host.length() ? "*" : host;
-    String bundleIdentifierToSet = bundleIdentifier.isNull() || !bundleIdentifier.length() ? "*" : bundleIdentifier;
-    String versionStringToSet = versionString.isNull() || !versionString.length() ? "*" : versionString;
-
-    PluginPolicyMapsByIdentifier policiesByIdentifier;
-    if (m_hostsToPluginIdentifierData.contains(hostToSet))
-        policiesByIdentifier = m_hostsToPluginIdentifierData.get(hostToSet);
-
-    PluginLoadClientPoliciesByBundleVersion versionsToPolicies;
-    if (policiesByIdentifier.contains(bundleIdentifierToSet))
-        versionsToPolicies = policiesByIdentifier.get(bundleIdentifierToSet);
-
-    versionsToPolicies.set(versionStringToSet, clientPolicy);
-    policiesByIdentifier.set(bundleIdentifierToSet, versionsToPolicies);
-    m_hostsToPluginIdentifierData.set(hostToSet, policiesByIdentifier);
-}
-
-void WebPlatformStrategies::clearPluginClientPolicies()
+#if ENABLE(NETSCAPE_PLUGIN_API)
+void WebPlatformStrategies::populatePluginCache()
 {
-    m_hostsToPluginIdentifierData.clear();
-}
-
-#endif
+    if (m_pluginCacheIsPopulated)
+        return;
 
-#if ENABLE(NETSCAPE_PLUGIN_API)
-#if PLATFORM(MAC)
-bool WebPlatformStrategies::pluginLoadClientPolicyForHost(const String& host, const PluginInfo& info, PluginLoadClientPolicy& policy) const
-{
-    String hostToLookUp = host;
-    if (!m_hostsToPluginIdentifierData.contains(hostToLookUp))
-        hostToLookUp = "*";
-    if (!m_hostsToPluginIdentifierData.contains(hostToLookUp))
-        return false;
-
-    PluginPolicyMapsByIdentifier policiesByIdentifier = m_hostsToPluginIdentifierData.get(hostToLookUp);
-    String identifier = info.bundleIdentifier;
-    if (!identifier || !policiesByIdentifier.contains(identifier))
-        identifier = "*";
-    if (!policiesByIdentifier.contains(identifier))
-        return false;
-
-    PluginLoadClientPoliciesByBundleVersion versionsToPolicies = policiesByIdentifier.get(identifier);
-    String version = info.versionString;
-    if (!version || !versionsToPolicies.contains(version))
-        version = "*";
-    if (!versionsToPolicies.contains(version))
-        return false;
-
-    policy = versionsToPolicies.get(version);
-    return true;
-}
-#endif // PLATFORM(MAC)
-
-void WebPlatformStrategies::populatePluginCache(const WebCore::Page& page)
-{
-    if (!m_pluginCacheIsPopulated) {
-        if (!WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetPlugins(m_shouldRefreshPlugins), Messages::WebProcessProxy::GetPlugins::Reply(m_cachedPlugins, m_cachedApplicationPlugins), 0))
-            return;
-
-        m_shouldRefreshPlugins = false;
-        m_pluginCacheIsPopulated = true;
-    }
+    ASSERT(m_cachedPlugins.isEmpty());
+    
+    // FIXME: Should we do something in case of error here?
+    if (!WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetPlugins(m_shouldRefreshPlugins), Messages::WebProcessProxy::GetPlugins::Reply(m_cachedPlugins, m_cachedApplicationPlugins), 0))
+        return;
 
-#if PLATFORM(MAC)
-    String pageHost = page.mainFrame().loader().documentLoader()->responseURL().host();
-    for (PluginInfo& info : m_cachedPlugins) {
-        PluginLoadClientPolicy clientPolicy;
-        if (pluginLoadClientPolicyForHost(pageHost, info, clientPolicy))
-            info.clientLoadPolicy = clientPolicy;
-    }
-#else
-    UNUSED_PARAM(page);
-#endif // not PLATFORM(MAC)
+    m_shouldRefreshPlugins = false;
+    m_pluginCacheIsPopulated = true;
 }
 #endif // ENABLE(NETSCAPE_PLUGIN_API)
 
index 3b2fcb1..afa0ba1 100644 (file)
@@ -31,7 +31,6 @@
 #include <WebCore/PasteboardStrategy.h>
 #include <WebCore/PlatformStrategies.h>
 #include <WebCore/PluginStrategy.h>
-#include <wtf/HashMap.h>
 #include <wtf/NeverDestroyed.h>
 
 namespace WebKit {
@@ -68,15 +67,6 @@ private:
     // WebCore::PluginStrategy
     virtual void refreshPlugins() override;
     virtual void getPluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override;
-    virtual void getWebVisiblePluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override;
-
-#if PLATFORM(MAC)
-    typedef HashMap<String, WebCore::PluginLoadClientPolicy> PluginLoadClientPoliciesByBundleVersion;
-    typedef HashMap<String, PluginLoadClientPoliciesByBundleVersion> PluginPolicyMapsByIdentifier;
-
-    virtual void setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy, const String& host, const String& bundleIdentifier, const String& versionString) override;
-    virtual void clearPluginClientPolicies() override;
-#endif
 
     // WebCore::PasteboardStrategy
 #if PLATFORM(IOS)
@@ -109,16 +99,11 @@ private:
 
 #if ENABLE(NETSCAPE_PLUGIN_API)
     // WebCore::PluginStrategy implementation.
-    void populatePluginCache(const WebCore::Page&);
+    void populatePluginCache();
     bool m_pluginCacheIsPopulated;
     bool m_shouldRefreshPlugins;
     Vector<WebCore::PluginInfo> m_cachedPlugins;
     Vector<WebCore::PluginInfo> m_cachedApplicationPlugins;
-
-#if PLATFORM(MAC)
-    HashMap<String, PluginPolicyMapsByIdentifier> m_hostsToPluginIdentifierData;
-    bool pluginLoadClientPolicyForHost(const String&, const WebCore::PluginInfo&, WebCore::PluginLoadClientPolicy&) const;
-#endif // PLATFORM(MAC)
 #endif // ENABLE(NETSCAPE_PLUGIN_API)
 };
 
index 8f3fba5..e9dc781 100644 (file)
@@ -4426,11 +4426,11 @@ bool WebPage::canShowMIMEType(const String& MIMEType) const
         return true;
 
     const PluginData& pluginData = m_page->pluginData();
-    if (pluginData.supportsWebVisibleMimeType(MIMEType, PluginData::AllPlugins) && corePage()->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
+    if (pluginData.supportsMimeType(MIMEType, PluginData::AllPlugins) && corePage()->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))
         return true;
 
     // We can use application plugins even if plugins aren't enabled.
-    if (pluginData.supportsWebVisibleMimeType(MIMEType, PluginData::OnlyApplicationPlugins))
+    if (pluginData.supportsMimeType(MIMEType, PluginData::OnlyApplicationPlugins))
         return true;
 
     return false;
index 6bce63d..f180c9a 100644 (file)
@@ -384,15 +384,6 @@ void WebProcess::initializeWebProcess(WebProcessCreationParameters&& parameters)
         Inspector::RemoteInspector::singleton().setParentProcessInformation(presenterApplicationPid(), auditData);
     }
 #endif
-
-#if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC)
-    for (const auto& hostKeyValue : parameters.pluginLoadClientPolicies) {
-        for (const auto& bundleIdentifierKeyValue : hostKeyValue.value) {
-            for (const auto& versionStringKeyValue : bundleIdentifierKeyValue.value)
-                platformStrategies()->pluginStrategy()->setPluginLoadClientPolicy(static_cast<PluginLoadClientPolicy>(versionStringKeyValue.value), hostKeyValue.key, bundleIdentifierKeyValue.key, versionStringKeyValue.key);
-        }
-    }
-#endif
 }
 
 #if ENABLE(NETWORK_PROCESS)
@@ -871,20 +862,6 @@ void WebProcess::plugInDidReceiveUserInteraction(const String& pageOrigin, const
     parentProcessConnection()->send(Messages::WebProcessPool::PlugInDidReceiveUserInteraction(plugInOriginHash, sessionID), 0);
 }
 
-void WebProcess::setPluginLoadClientPolicy(uint8_t policy, const String& host, const String& bundleIdentifier, const String& versionString)
-{
-#if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC)
-    platformStrategies()->pluginStrategy()->setPluginLoadClientPolicy(static_cast<PluginLoadClientPolicy>(policy), host, bundleIdentifier, versionString);
-#endif
-}
-
-void WebProcess::clearPluginClientPolicies()
-{
-#if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC)
-    platformStrategies()->pluginStrategy()->clearPluginClientPolicies();
-#endif
-}
-
 static void fromCountedSetToHashMap(TypeCountSet* countedSet, HashMap<String, uint64_t>& map)
 {
     TypeCountSet::const_iterator end = countedSet->end();
index a620692..9d6c5e1 100644 (file)
@@ -123,8 +123,6 @@ public:
     bool shouldPlugInAutoStartFromOrigin(WebPage&, const String& pageOrigin, const String& pluginOrigin, const String& mimeType);
     void plugInDidStartFromOrigin(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, WebCore::SessionID);
     void plugInDidReceiveUserInteraction(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, WebCore::SessionID);
-    void setPluginLoadClientPolicy(uint8_t policy, const String& host, const String& bundleIdentifier, const String& versionString);
-    void clearPluginClientPolicies();
 
     bool fullKeyboardAccessEnabled() const { return m_fullKeyboardAccessEnabled; }
 
index a137681..677d4ba 100644 (file)
@@ -56,8 +56,6 @@ messages -> WebProcess LegacyReceiver {
     DidAddPlugInAutoStartOriginHash(uint32_t hash, double expirationTime, WebCore::SessionID sessionID)
     ResetPlugInAutoStartOriginDefaultHashes(HashMap<uint32_t,double> hashes)
     ResetPlugInAutoStartOriginHashes(HashMap<WebCore::SessionID, HashMap<uint32_t,double>> hashes)
-    SetPluginLoadClientPolicy(uint8_t policy, String host, String bundleIdentifier, String versionString)
-    ClearPluginClientPolicies()
 
     void StartMemorySampler(WebKit::SandboxExtension::Handle sampleLogFileHandle, String sampleLogFilePath, double interval);
     void StopMemorySampler();