Changeset 181494 in webkit
- Timestamp:
- Mar 13, 2015, 7:50:28 PM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 44 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/dom/DOMImplementation.cpp (modified) (2 diffs)
-
WebCore/loader/SubframeLoader.cpp (modified) (3 diffs)
-
WebCore/platform/PlatformStrategies.h (modified) (1 diff)
-
WebCore/plugins/DOMMimeType.cpp (modified) (3 diffs)
-
WebCore/plugins/DOMMimeType.h (modified) (1 diff)
-
WebCore/plugins/DOMMimeTypeArray.cpp (modified) (4 diffs)
-
WebCore/plugins/DOMPlugin.cpp (modified) (4 diffs)
-
WebCore/plugins/DOMPlugin.h (modified) (1 diff)
-
WebCore/plugins/DOMPluginArray.cpp (modified) (4 diffs)
-
WebCore/plugins/PluginData.cpp (modified) (5 diffs)
-
WebCore/plugins/PluginData.h (modified) (5 diffs)
-
WebCore/plugins/PluginStrategy.h (modified) (1 diff)
-
WebCore/replay/SerializationMethods.cpp (modified) (6 diffs)
-
WebCore/replay/WebInputs.json (modified) (1 diff)
-
WebKit/mac/ChangeLog (modified) (1 diff)
-
WebKit/mac/Plugins/WebBasePluginPackage.mm (modified) (1 diff)
-
WebKit/mac/Plugins/WebNetscapePluginPackage.mm (modified) (1 diff)
-
WebKit/mac/WebCoreSupport/WebPlatformStrategies.h (modified) (1 diff)
-
WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm (modified) (1 diff)
-
WebKit/mac/WebView/WebFrame.mm (modified) (1 diff)
-
WebKit/win/ChangeLog (modified) (1 diff)
-
WebKit/win/WebCoreSupport/WebPlatformStrategies.cpp (modified) (1 diff)
-
WebKit/win/WebCoreSupport/WebPlatformStrategies.h (modified) (1 diff)
-
WebKit/win/WebView.cpp (modified) (1 diff)
-
WebKit2/ChangeLog (modified) (1 diff)
-
WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm (modified) (1 diff)
-
WebKit2/Shared/WebCoreArgumentCoders.cpp (modified) (2 diffs)
-
WebKit2/Shared/WebProcessCreationParameters.cpp (modified) (2 diffs)
-
WebKit2/Shared/WebProcessCreationParameters.h (modified) (1 diff)
-
WebKit2/UIProcess/API/C/WKAPICast.h (modified) (3 diffs)
-
WebKit2/UIProcess/API/C/WKPluginLoadPolicy.h (modified) (1 diff)
-
WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.h (modified) (2 diffs)
-
WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.mm (modified) (1 diff)
-
WebKit2/UIProcess/WebProcessPool.cpp (modified) (2 diffs)
-
WebKit2/UIProcess/WebProcessPool.h (modified) (2 diffs)
-
WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm (modified) (1 diff)
-
WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (modified) (2 diffs)
-
WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp (modified) (4 diffs)
-
WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h (modified) (3 diffs)
-
WebKit2/WebProcess/WebPage/WebPage.cpp (modified) (1 diff)
-
WebKit2/WebProcess/WebProcess.cpp (modified) (2 diffs)
-
WebKit2/WebProcess/WebProcess.h (modified) (1 diff)
-
WebKit2/WebProcess/WebProcess.messages.in (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r181492 r181494 1 2015-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 1 15 2015-03-13 Antti Koivisto <antti@apple.com> 2 16 -
trunk/Source/WebCore/dom/DOMImplementation.cpp
r181483 r181494 330 330 // PDF is one image type for which a plugin can override built-in support. 331 331 // We do not want QuickTime to take over all image types, obviously. 332 if (MIMETypeRegistry::isPDFOrPostScriptMIMEType(type) && pluginData && pluginData->supports WebVisibleMimeType(type, allowedPluginTypes))332 if (MIMETypeRegistry::isPDFOrPostScriptMIMEType(type) && pluginData && pluginData->supportsMimeType(type, allowedPluginTypes)) 333 333 return PluginDocument::create(frame, url); 334 334 if (Image::supportsType(type)) … … 349 349 // Disallowing plug-ins to use text/plain prevents plug-ins from hijacking a fundamental type that the browser is expected to handle, 350 350 // and also serves as an optimization to prevent loading the plug-in database in the common case. 351 if (type != "text/plain" && ((pluginData && pluginData->supports WebVisibleMimeType(type, allowedPluginTypes)) || (frame && frame->loader().client().shouldAlwaysUsePluginDocument(type))))351 if (type != "text/plain" && ((pluginData && pluginData->supportsMimeType(type, allowedPluginTypes)) || (frame && frame->loader().client().shouldAlwaysUsePluginDocument(type)))) 352 352 return PluginDocument::create(frame, url); 353 353 if (isTextMIMEType(type)) -
trunk/Source/WebCore/loader/SubframeLoader.cpp
r181483 r181494 168 168 const PluginData& pluginData = page->pluginData(); 169 169 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]; 175 172 for (size_t j = 0; j < mimeClassInfo.extensions.size(); ++j) { 176 173 if (equalIgnoringCase(extension, mimeClassInfo.extensions[j])) … … 195 192 } 196 193 197 String pluginFile = page->pluginData().pluginFileFor WebVisibleMimeType(newMIMEType);194 String pluginFile = page->pluginData().pluginFileForMimeType(newMIMEType); 198 195 String description = !pluginFile ? newMIMEType : pluginFile; 199 196 … … 371 368 // can handle TIFF (which QuickTime can also handle) they probably intended to override QT. 372 369 if (m_frame.page() && (mimeType == "image/tiff" || mimeType == "image/tif" || mimeType == "image/x-tiff")) { 373 String pluginName = m_frame.page()->pluginData().pluginNameFor WebVisibleMimeType(mimeType);370 String pluginName = m_frame.page()->pluginData().pluginNameForMimeType(mimeType); 374 371 if (!pluginName.isEmpty() && !pluginName.contains("QuickTime", false)) 375 372 return true; -
trunk/Source/WebCore/platform/PlatformStrategies.h
r181483 r181494 89 89 }; 90 90 91 WEBCORE_EXPORTPlatformStrategies* platformStrategies();91 PlatformStrategies* platformStrategies(); 92 92 WEBCORE_EXPORT void setPlatformStrategies(PlatformStrategies*); 93 93 bool hasPlatformStrategies(); -
trunk/Source/WebCore/plugins/DOMMimeType.cpp
r181483 r181494 43 43 } 44 44 45 StringDOMMimeType::type() const45 const String &DOMMimeType::type() const 46 46 { 47 47 return mimeClassInfo().type; … … 61 61 } 62 62 63 StringDOMMimeType::description() const63 const String &DOMMimeType::description() const 64 64 { 65 65 return mimeClassInfo().desc; 66 }67 68 MimeClassInfo DOMMimeType::mimeClassInfo() const69 {70 Vector<MimeClassInfo> mimes;71 Vector<size_t> mimePluginIndices;72 m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices);73 return mimes[m_index];74 66 } 75 67 … … 79 71 return 0; 80 72 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]); 85 74 } 86 75 -
trunk/Source/WebCore/plugins/DOMMimeType.h
r181483 r181494 38 38 ~DOMMimeType(); 39 39 40 Stringtype() const;40 const String &type() const; 41 41 String suffixes() const; 42 Stringdescription() const;42 const String &description() const; 43 43 PassRefPtr<DOMPlugin> enabledPlugin() const; 44 44 45 45 private: 46 MimeClassInfo mimeClassInfo() const;46 const MimeClassInfo& mimeClassInfo() const { return m_pluginData->mimes()[m_index]; } 47 47 48 48 DOMMimeType(PassRefPtr<PluginData>, Frame*, unsigned index); -
trunk/Source/WebCore/plugins/DOMMimeTypeArray.cpp
r181483 r181494 49 49 if (!data) 50 50 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(); 56 52 } 57 53 … … 61 57 if (!data) 62 58 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(); 68 60 if (index >= mimes.size()) 69 61 return 0; … … 76 68 if (!data) 77 69 return 0; 78 79 Vector<MimeClassInfo> mimes; 80 Vector<size_t> mimePluginIndices; 81 data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 70 const Vector<MimeClassInfo>& mimes = data->mimes(); 82 71 for (unsigned i = 0; i < mimes.size(); ++i) { 83 72 if (mimes[i].type == propertyName) … … 92 81 if (!data) 93 82 return 0; 94 95 Vector<MimeClassInfo> mimes; 96 Vector<size_t> mimePluginIndices; 97 data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 83 const Vector<MimeClassInfo>& mimes = data->mimes(); 98 84 for (unsigned i = 0; i < mimes.size(); ++i) { 99 85 if (mimes[i].type == propertyName) -
trunk/Source/WebCore/plugins/DOMPlugin.cpp
r181483 r181494 57 57 } 58 58 59 PluginInfo DOMPlugin::pluginInfo() const60 {61 return m_pluginData->webVisiblePlugins()[m_index];62 }63 64 59 PassRefPtr<DOMMimeType> DOMPlugin::item(unsigned index) 65 60 { … … 67 62 return 0; 68 63 69 MimeClassInfomime = pluginInfo().mimes[index];64 const MimeClassInfo& mime = pluginInfo().mimes[index]; 70 65 71 Vector<MimeClassInfo> mimes; 72 Vector<size_t> mimePluginIndices; 73 m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 66 const Vector<MimeClassInfo>& mimes = m_pluginData->mimes(); 74 67 for (unsigned i = 0; i < mimes.size(); ++i) { 75 if (mimes[i] == mime && m imePluginIndices[i] == m_index)68 if (mimes[i] == mime && m_pluginData->mimePluginIndices()[i] == m_index) 76 69 return DOMMimeType::create(m_pluginData.get(), m_frame, i); 77 70 } … … 81 74 bool DOMPlugin::canGetItemsForName(const AtomicString& propertyName) 82 75 { 83 Vector<MimeClassInfo> mimes; 84 Vector<size_t> mimePluginIndices; 85 m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 76 const Vector<MimeClassInfo>& mimes = m_pluginData->mimes(); 86 77 for (unsigned i = 0; i < mimes.size(); ++i) 87 78 if (mimes[i].type == propertyName) … … 92 83 PassRefPtr<DOMMimeType> DOMPlugin::namedItem(const AtomicString& propertyName) 93 84 { 94 Vector<MimeClassInfo> mimes; 95 Vector<size_t> mimePluginIndices; 96 m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 85 const Vector<MimeClassInfo>& mimes = m_pluginData->mimes(); 97 86 for (unsigned i = 0; i < mimes.size(); ++i) 98 87 if (mimes[i].type == propertyName) -
trunk/Source/WebCore/plugins/DOMPlugin.h
r181483 r181494 49 49 50 50 private: 51 PluginInfo pluginInfo() const;51 const PluginInfo& pluginInfo() const { return m_pluginData->plugins()[m_index]; } 52 52 53 53 DOMPlugin(PluginData*, Frame*, unsigned index); -
trunk/Source/WebCore/plugins/DOMPluginArray.cpp
r181483 r181494 49 49 if (!data) 50 50 return 0; 51 52 return data->webVisiblePlugins().size(); 51 return data->plugins().size(); 53 52 } 54 53 … … 58 57 if (!data) 59 58 return 0; 60 61 const Vector<PluginInfo>& plugins = data->webVisiblePlugins(); 59 const Vector<PluginInfo>& plugins = data->plugins(); 62 60 if (index >= plugins.size()) 63 61 return 0; … … 70 68 if (!data) 71 69 return 0; 72 73 const Vector<PluginInfo>& plugins = data->webVisiblePlugins(); 70 const Vector<PluginInfo>& plugins = data->plugins(); 74 71 for (unsigned i = 0; i < plugins.size(); ++i) { 75 72 if (plugins[i].name == propertyName) … … 84 81 if (!data) 85 82 return 0; 86 87 const Vector<PluginInfo>& plugins = data->webVisiblePlugins(); 83 const Vector<PluginInfo>& plugins = data->plugins(); 88 84 for (unsigned i = 0; i < plugins.size(); ++i) { 89 85 if (plugins[i].name == propertyName) -
trunk/Source/WebCore/plugins/PluginData.cpp
r181483 r181494 3 3 Copyright (C) 2000 Daniel Molkentin (molkentin@kde.org) 4 4 Copyright (C) 2000 Stefan Schimanski (schimmi@kde.org) 5 Copyright (C) 2003, 2004, 2005, 2006, 2007 , 2015Apple Inc. All Rights Reserved.5 Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All Rights Reserved. 6 6 Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 7 7 … … 32 32 PluginData::PluginData(const Page* page) 33 33 { 34 ASSERT_ARG(page,page);34 initPlugins(page); 35 35 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]; 55 38 for (unsigned j = 0; j < plugin.mimes.size(); ++j) { 56 m imes.append(plugin.mimes[j]);57 m imePluginIndices.append(i);39 m_mimes.append(plugin.mimes[j]); 40 m_mimePluginIndices.append(i); 58 41 } 59 42 } 60 43 } 61 44 62 bool PluginData::supports WebVisibleMimeType(const String& mimeType, const AllowedPluginTypes allowedPluginTypes) const45 bool PluginData::supportsMimeType(const String& mimeType, const AllowedPluginTypes allowedPluginTypes) const 63 46 { 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)) 71 49 return true; 72 50 } … … 74 52 } 75 53 76 const PluginInfo* PluginData::pluginInfoFor WebVisibleMimeType(const String& mimeType) const54 const PluginInfo* PluginData::pluginInfoForMimeType(const String& mimeType) const 77 55 { 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 86 59 if (info.type == mimeType) 87 return & plugins[mimePluginIndices[i]];60 return &m_plugins[m_mimePluginIndices[i]]; 88 61 } 89 62 … … 91 64 } 92 65 93 String PluginData::pluginNameFor WebVisibleMimeType(const String& mimeType) const66 String PluginData::pluginNameForMimeType(const String& mimeType) const 94 67 { 95 if (const PluginInfo* info = pluginInfoFor WebVisibleMimeType(mimeType))68 if (const PluginInfo* info = pluginInfoForMimeType(mimeType)) 96 69 return info->name; 97 70 return String(); 98 71 } 99 72 100 String PluginData::pluginFileFor WebVisibleMimeType(const String& mimeType) const73 String PluginData::pluginFileForMimeType(const String& mimeType) const 101 74 { 102 if (const PluginInfo* info = pluginInfoFor WebVisibleMimeType(mimeType))75 if (const PluginInfo* info = pluginInfoForMimeType(mimeType)) 103 76 return info->file; 104 77 return String(); … … 110 83 } 111 84 112 void PluginData::initPlugins( )85 void PluginData::initPlugins(const Page* page) 113 86 { 114 87 ASSERT(m_plugins.isEmpty()); 115 116 platformStrategies()->pluginStrategy()->getPluginInfo( m_page, m_plugins);88 89 platformStrategies()->pluginStrategy()->getPluginInfo(page, m_plugins); 117 90 } 118 91 -
trunk/Source/WebCore/plugins/PluginData.h
r181483 r181494 30 30 struct PluginInfo; 31 31 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 synchronously34 // 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 50 32 struct MimeClassInfo { 51 33 String type; … … 65 47 Vector<MimeClassInfo> mimes; 66 48 bool isApplicationPlugin; 67 68 PluginLoadClientPolicy clientLoadPolicy;69 70 #if PLATFORM(MAC)71 String bundleIdentifier;72 String versionString;73 #endif74 49 }; 75 50 … … 80 55 81 56 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; } 84 59 85 60 enum AllowedPluginTypes { … … 88 63 }; 89 64 90 WEBCORE_EXPORT bool supports WebVisibleMimeType(const String& mimeType, const AllowedPluginTypes) const;91 String pluginNameFor WebVisibleMimeType(const String& mimeType) const;92 String pluginFileFor WebVisibleMimeType(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; 93 68 94 69 static void refresh(); … … 96 71 private: 97 72 explicit PluginData(const Page*); 98 void initPlugins( );99 const PluginInfo* pluginInfoFor WebVisibleMimeType(const String& mimeType) const;73 void initPlugins(const Page*); 74 const PluginInfo* pluginInfoForMimeType(const String& mimeType) const; 100 75 101 76 protected: 102 77 #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) 104 79 : m_plugins(plugins) 80 , m_mimes(mimes) 81 , m_mimePluginIndices(indices) 105 82 { 106 83 } 107 84 #endif 108 85 109 const Page* m_page;110 86 Vector<PluginInfo> m_plugins; 87 Vector<MimeClassInfo> m_mimes; 88 Vector<size_t> m_mimePluginIndices; 111 89 }; 112 90 -
trunk/Source/WebCore/plugins/PluginStrategy.h
r181483 r181494 37 37 virtual void refreshPlugins() = 0; 38 38 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 #endif44 39 45 40 protected: -
trunk/Source/WebCore/replay/SerializationMethods.cpp
r181483 r181494 54 54 using WebCore::PlatformWheelEventGranularity; 55 55 using WebCore::PluginData; 56 using WebCore::PluginLoadClientPolicy;57 56 using WebCore::PluginInfo; 58 57 using WebCore::SecurityOrigin; … … 439 438 EncodedValue EncodingTraits<PluginData>::encodeValue(RefPtr<PluginData> input) 440 439 { 441 // FIXME: This needs to work in terms of web-visible plug-ins.442 440 EncodedValue encodedData = EncodedValue::createObject(); 443 441 442 Vector<uint32_t> castedMimePluginIndices(input->mimePluginIndices().size()); 443 for (uint32_t index : input->mimePluginIndices()) 444 castedMimePluginIndices.append(WTF::safeCast<uint32_t>(index)); 445 444 446 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); 445 449 446 450 return encodedData; … … 449 453 class DeserializedPluginData : public PluginData { 450 454 public: 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) 453 457 { 454 458 } … … 458 462 { 459 463 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)); 463 472 464 473 return true; … … 475 484 ENCODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes, input.mimes); 476 485 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 #endif482 486 483 487 return encodedData; … … 494 498 DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, Vector<MimeClassInfo>, mimes, info.mimes); 495 499 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 #endif501 500 502 501 input = info; -
trunk/Source/WebCore/replay/WebInputs.json
r181483 r181494 67 67 "header": "plugins/PluginData.h" 68 68 }, 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 76 69 { 77 70 "name": "ScrollDirection", "mode": "SCALAR", "storage": "uint8_t", -
trunk/Source/WebKit/mac/ChangeLog
r181491 r181494 1 2015-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 1 15 2015-03-13 Eric Carlson <eric.carlson@apple.com> 2 16 -
trunk/Source/WebKit/mac/Plugins/WebBasePluginPackage.mm
r181483 r181494 250 250 251 251 pluginInfo.isApplicationPlugin = false; 252 pluginInfo.clientLoadPolicy = PluginLoadClientPolicyUndefined;253 #if PLATFORM(MAC)254 pluginInfo.bundleIdentifier = self.bundleIdentifier;255 pluginInfo.versionString = self.bundleVersion;256 #endif257 252 258 253 return YES; -
trunk/Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm
r181483 r181494 147 147 148 148 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 155 150 [self closeResourceFile:resRef]; 156 151 -
trunk/Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h
r181483 r181494 63 63 virtual void refreshPlugins() override; 64 64 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 #endif70 65 71 66 // WebCore::LoaderStrategy -
trunk/Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm
r181483 r181494 129 129 } 130 130 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 #endif145 146 131 void WebPlatformStrategies::getTypes(Vector<String>& types, const String& pasteboardName) 147 132 { -
trunk/Source/WebKit/mac/WebView/WebFrame.mm
r181483 r181494 980 980 if (WebCore::DOMImplementation::isTextMIMEType(mimeType) 981 981 || Image::supportsType(mimeType) 982 || (pluginData && pluginData->supports WebVisibleMimeType(mimeType, PluginData::AllPlugins) && frame->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))983 || (pluginData && pluginData->supports WebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins)))982 || (pluginData && pluginData->supportsMimeType(mimeType, PluginData::AllPlugins) && frame->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin)) 983 || (pluginData && pluginData->supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins))) 984 984 return NO; 985 985 -
trunk/Source/WebKit/win/ChangeLog
r181483 r181494 1 2015-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 1 15 2015-03-10 Conrad Shultz <conrad_shultz@apple.com> 2 16 -
trunk/Source/WebKit/win/WebCoreSupport/WebPlatformStrategies.cpp
r181483 r181494 135 135 } 136 136 } 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 56 56 virtual void refreshPlugins(); 57 57 virtual void getPluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&); 58 virtual void getWebVisiblePluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&);59 58 }; 60 59 -
trunk/Source/WebKit/win/WebView.cpp
r181483 r181494 2630 2630 2631 2631 if (!canShow && m_page) { 2632 canShow = (m_page->pluginData().supports WebVisibleMimeType(mimeType, PluginData::AllPlugins) && allowPlugins)2633 || m_page->pluginData().supports WebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins);2632 canShow = (m_page->pluginData().supportsMimeType(mimeType, PluginData::AllPlugins) && allowPlugins) 2633 || m_page->pluginData().supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins); 2634 2634 } 2635 2635 -
trunk/Source/WebKit2/ChangeLog
r181491 r181494 1 2015-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 1 15 2015-03-13 Eric Carlson <eric.carlson@apple.com> 2 16 -
trunk/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
r181483 r181494 400 400 401 401 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 408 403 return true; 409 404 } -
trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp
r181483 r181494 567 567 void ArgumentCoder<PluginInfo>::encode(ArgumentEncoder& encoder, const PluginInfo& pluginInfo) 568 568 { 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 581 572 bool ArgumentCoder<PluginInfo>::decode(ArgumentDecoder& decoder, PluginInfo& pluginInfo) 582 573 { … … 591 582 if (!decoder.decode(pluginInfo.isApplicationPlugin)) 592 583 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 #endif602 584 603 585 return true; -
trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
r181483 r181494 145 145 encoder << hasRichContentServices; 146 146 #endif 147 148 #if ENABLE(NETSCAPE_PLUGIN_API)149 encoder << pluginLoadClientPolicies;150 #endif151 147 } 152 148 … … 307 303 #endif 308 304 309 #if ENABLE(NETSCAPE_PLUGIN_API)310 if (!decoder.decode(parameters.pluginLoadClientPolicies))311 return false;312 #endif313 314 305 return true; 315 306 } -
trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h
r181483 r181494 168 168 bool hasRichContentServices; 169 169 #endif 170 171 #if ENABLE(NETSCAPE_PLUGIN_API)172 HashMap<String, HashMap<String, HashMap<String, uint8_t>>> pluginLoadClientPolicies;173 #endif174 170 }; 175 171 -
trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h
r181483 r181494 48 48 #include <WebCore/Credential.h> 49 49 #include <WebCore/FrameLoaderTypes.h> 50 #include <WebCore/PluginData.h>51 50 #include <WebCore/ProtectionSpace.h> 52 51 #include <WebCore/Settings.h> … … 484 483 } 485 484 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 505 485 inline PluginModuleLoadPolicy toPluginModuleLoadPolicy(WKPluginLoadPolicy pluginLoadPolicy) 506 486 { … … 518 498 } 519 499 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 539 500 inline WebCore::WebGLLoadPolicy toWebGLLoadPolicy(WKWebGLLoadPolicy webGLLoadPolicy) 540 501 { -
trunk/Source/WebKit2/UIProcess/API/C/WKPluginLoadPolicy.h
r181483 r181494 41 41 typedef uint32_t WKPluginLoadPolicy; 42 42 43 enum WKPluginLoadClientPolicy {44 kWKPluginLoadClientPolicyUndefined = 0,45 kWKPluginLoadClientPolicyBlock,46 kWKPluginLoadClientPolicyAsk,47 kWKPluginLoadClientPolicyAllow,48 kWKPluginLoadClientPolicyAllowAlways,49 };50 51 43 #ifdef __cplusplus 52 44 } -
trunk/Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.h
r181483 r181494 28 28 29 29 #include <WebKit/WKBase.h> 30 #include <WebKit/WKPluginLoadPolicy.h>31 30 32 31 #ifdef __cplusplus … … 38 37 39 38 WK_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);43 39 44 40 WK_EXPORT WKDictionaryRef WKContextCopyPlugInInfoForBundleIdentifier(WKContextRef context, WKStringRef plugInBundleIdentifier); -
trunk/Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.mm
r181483 r181494 50 50 #else 51 51 return WKIsPluginUpdateAvailable((NSString *)adoptCF(WKStringCopyCFString(kCFAllocatorDefault, plugInBundleIdentifierRef)).get()); 52 #endif53 }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 #endif60 }61 62 void WKContextClearPluginClientPolicies(WKContextRef contextRef)63 {64 #if ENABLE(NETSCAPE_PLUGIN_API)65 toImpl(contextRef)->clearPluginClientPolicies();66 52 #endif 67 53 } -
trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp
r181483 r181494 684 684 #endif 685 685 686 #if ENABLE(NETSCAPE_PLUGIN_API)687 parameters.pluginLoadClientPolicies = m_pluginLoadClientPolicies;688 #endif689 690 686 #if OS(LINUX) 691 687 parameters.shouldEnableMemoryPressureReliefLogging = true; … … 1423 1419 m_client.plugInInformationBecameAvailable(this, API::Array::create(WTF::move(plugins)).get()); 1424 1420 } 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 #endif1441 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 #endif1450 sendToAllProcesses(Messages::WebProcess::ClearPluginClientPolicies());1451 }1452 1421 #endif 1453 1422 -
trunk/Source/WebKit2/UIProcess/WebProcessPool.h
r181483 r181494 184 184 185 185 PluginInfoStore& pluginInfoStore() { return m_pluginInfoStore; } 186 187 void setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy, const String& host, const String& bundleIdentifier, const String& versionString);188 void clearPluginClientPolicies();189 186 #endif 190 187 … … 544 541 HashMap<String, String> m_encodedContentExtensions; 545 542 #endif 546 547 #if ENABLE(NETSCAPE_PLUGIN_API)548 HashMap<String, HashMap<String, HashMap<String, uint8_t>>> m_pluginLoadClientPolicies;549 #endif550 543 }; 551 544 -
trunk/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm
r181483 r181494 540 540 info.name = builtInPDFPluginName(); 541 541 info.isApplicationPlugin = true; 542 info.clientLoadPolicy = PluginLoadClientPolicyUndefined;543 542 544 543 MimeClassInfo pdfMimeClassInfo; -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r181483 r181494 1448 1448 ASSERT(extension.lower() == extension); 1449 1449 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]; 1455 1452 1456 1453 if (mimeClassInfo.extensions.contains(extension)) … … 1487 1484 if (WebPage* webPage = m_frame->page()) { 1488 1485 const PluginData& pluginData = webPage->corePage()->pluginData(); 1489 if (pluginData.supports WebVisibleMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))1486 if (pluginData.supportsMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin)) 1490 1487 plugInSupportsMIMEType = true; 1491 else if (pluginData.supports WebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins))1488 else if (pluginData.supportsMimeType(mimeType, PluginData::OnlyApplicationPlugins)) 1492 1489 plugInSupportsMIMEType = true; 1493 1490 } -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
r181483 r181494 1 1 /* 2 * Copyright (C) 2010, 2011, 2012 , 2015Apple Inc. All rights reserved.2 * Copyright (C) 2010, 2011, 2012 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 45 45 #include "WebProcessProxyMessages.h" 46 46 #include <WebCore/Color.h> 47 #include <WebCore/DocumentLoader.h>48 47 #include <WebCore/IDBFactoryBackendInterface.h> 49 48 #include <WebCore/LoaderStrategy.h> … … 268 267 { 269 268 #if ENABLE(NETSCAPE_PLUGIN_API) 270 ASSERT_ARG(page, page); 271 populatePluginCache(*page); 269 populatePluginCache(); 272 270 273 271 if (page->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin)) { … … 283 281 } 284 282 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 #endif304 }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 #endif332 333 283 #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) 284 void 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; 382 297 } 383 298 #endif // ENABLE(NETSCAPE_PLUGIN_API) -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h
r181483 r181494 32 32 #include <WebCore/PlatformStrategies.h> 33 33 #include <WebCore/PluginStrategy.h> 34 #include <wtf/HashMap.h>35 34 #include <wtf/NeverDestroyed.h> 36 35 … … 69 68 virtual void refreshPlugins() override; 70 69 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 #endif80 70 81 71 // WebCore::PasteboardStrategy … … 110 100 #if ENABLE(NETSCAPE_PLUGIN_API) 111 101 // WebCore::PluginStrategy implementation. 112 void populatePluginCache( const WebCore::Page&);102 void populatePluginCache(); 113 103 bool m_pluginCacheIsPopulated; 114 104 bool m_shouldRefreshPlugins; 115 105 Vector<WebCore::PluginInfo> m_cachedPlugins; 116 106 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)122 107 #endif // ENABLE(NETSCAPE_PLUGIN_API) 123 108 }; -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r181483 r181494 4427 4427 4428 4428 const PluginData& pluginData = m_page->pluginData(); 4429 if (pluginData.supports WebVisibleMimeType(MIMEType, PluginData::AllPlugins) && corePage()->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))4429 if (pluginData.supportsMimeType(MIMEType, PluginData::AllPlugins) && corePage()->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin)) 4430 4430 return true; 4431 4431 4432 4432 // We can use application plugins even if plugins aren't enabled. 4433 if (pluginData.supports WebVisibleMimeType(MIMEType, PluginData::OnlyApplicationPlugins))4433 if (pluginData.supportsMimeType(MIMEType, PluginData::OnlyApplicationPlugins)) 4434 4434 return true; 4435 4435 -
trunk/Source/WebKit2/WebProcess/WebProcess.cpp
r181483 r181494 385 385 } 386 386 #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 #endif396 387 } 397 388 … … 870 861 871 862 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 #endif879 }880 881 void WebProcess::clearPluginClientPolicies()882 {883 #if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC)884 platformStrategies()->pluginStrategy()->clearPluginClientPolicies();885 #endif886 863 } 887 864 -
trunk/Source/WebKit2/WebProcess/WebProcess.h
r181483 r181494 124 124 void plugInDidStartFromOrigin(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, WebCore::SessionID); 125 125 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();128 126 129 127 bool fullKeyboardAccessEnabled() const { return m_fullKeyboardAccessEnabled; } -
trunk/Source/WebKit2/WebProcess/WebProcess.messages.in
r181483 r181494 57 57 ResetPlugInAutoStartOriginDefaultHashes(HashMap<uint32_t,double> hashes) 58 58 ResetPlugInAutoStartOriginHashes(HashMap<WebCore::SessionID, HashMap<uint32_t,double>> hashes) 59 SetPluginLoadClientPolicy(uint8_t policy, String host, String bundleIdentifier, String versionString)60 ClearPluginClientPolicies()61 59 62 60 void StartMemorySampler(WebKit::SandboxExtension::Handle sampleLogFileHandle, String sampleLogFilePath, double interval);
Note:
See TracChangeset
for help on using the changeset viewer.