Changeset 181562 in webkit
- Timestamp:
- Mar 16, 2015, 10:13:04 AM (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) (4 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
r181553 r181562 1 2015-03-16 Conrad Shultz <conrad_shultz@apple.com> 2 3 Allow clients to selectively disable plug-ins 4 https://bugs.webkit.org/show_bug.cgi?id=142506 5 6 Reviewed by Anders Carlsson. 7 8 Add new functionality allow clients to declaratively disable individual plug-ins (in a manner that conceals them 9 from the page). As part of this: 10 11 1) Introduce the concept of web-visible plug-ins and related concepts, as distinct from the real underlying 12 set of plug-ins. 13 14 2) Where applicable, plumb additional information about plug-ins (specifically, bundle identification) deeper 15 down the stack. 16 17 3) Add generic functionality to PluginStrategy to support filtering plug-ins for visibility and introduce 18 a concrete implementation thereof in WebPlatformStrategies in WebKit2. 19 20 4) Add messaging infrastructure to allow clients to set and clear plug-in policies. 21 22 While currently only used in a very limited manner, the new declarative plug-in policies are written generically 23 so that they could be easily used in the future to reduce synchronous messaging to the client when loading plug-ins. 24 25 * dom/DOMImplementation.cpp: 26 (WebCore::DOMImplementation::createDocument): 27 Update to reflect function rename. 28 29 * loader/SubframeLoader.cpp: 30 (WebCore::findPluginMIMETypeFromURL): 31 Adopt getWebVisibleMimesAndPluginIndices(). 32 (WebCore::logPluginRequest): 33 Update to reflect function rename. 34 (WebCore::SubframeLoader::shouldUsePlugin): 35 Ditto. 36 37 * platform/PlatformStrategies.h: 38 Export platformStrategies(), since it is now used in WebProcess.cpp. 39 40 * plugins/DOMMimeType.cpp: 41 (WebCore::DOMMimeType::type): 42 (WebCore::DOMMimeType::description): 43 (WebCore::DOMMimeType::mimeClassInfo): 44 Adopt getWebVisibleMimesAndPluginIndices(). 45 (WebCore::DOMMimeType::enabledPlugin): 46 Ditto. 47 48 * plugins/DOMMimeType.h: 49 Don't return references in a few places where it is no longer safe to do so. 50 (WebCore::DOMMimeType::mimeClassInfo): Deleted. 51 52 * plugins/DOMMimeTypeArray.cpp: 53 (WebCore::DOMMimeTypeArray::length): 54 Adopt getWebVisibleMimesAndPluginIndices(). 55 (WebCore::DOMMimeTypeArray::item): 56 Ditto. 57 (WebCore::DOMMimeTypeArray::canGetItemsForName): 58 Ditto. 59 (WebCore::DOMMimeTypeArray::namedItem): 60 Ditto. 61 62 * plugins/DOMPlugin.cpp: 63 (WebCore::DOMPlugin::pluginInfo): 64 Adopt getWebVisiblePlugins(). 65 (WebCore::DOMPlugin::item): 66 Adopt getWebVisibleMimesAndPluginIndices(). 67 (WebCore::DOMPlugin::canGetItemsForName): 68 Ditto. 69 (WebCore::DOMPlugin::namedItem): 70 Ditto. 71 72 * plugins/DOMPlugin.h: 73 (WebCore::DOMPlugin::pluginInfo): Deleted. 74 75 * plugins/DOMPluginArray.cpp: 76 (WebCore::DOMPluginArray::length): 77 Adopt getWebVisiblePlugins(). 78 (WebCore::DOMPluginArray::item): 79 Ditto. 80 (WebCore::DOMPluginArray::canGetItemsForName): 81 Ditto. 82 (WebCore::DOMPluginArray::namedItem): 83 Ditto. 84 85 * plugins/PluginData.cpp: 86 (WebCore::PluginData::PluginData): 87 Stash the passed-in Page and call initPlugins(). 88 (WebCore::PluginData::getWebVisiblePlugins): 89 New member function; call through to PluginStrategy::getWebVisiblePluginInfo(). 90 (WebCore::PluginData::getWebVisibleMimesAndPluginIndices): 91 New member function; build up the mimes and mimePluginIndices vectors in the same manner as before, but 92 limited to the web-visible plug-ins. 93 (WebCore::PluginData::supportsWebVisibleMimeType): 94 Renamed from supportsMimeType(); update to work in terms of web-visible plug-ins. 95 (WebCore::PluginData::pluginInfoForWebVisibleMimeType): 96 Renamed from pluginInfoForMimeType(); ditto. 97 (WebCore::PluginData::pluginNameForWebVisibleMimeType): 98 Renamed from pluginNameForMimeType(); ditto. 99 (WebCore::PluginData::pluginFileForWebVisibleMimeType): 100 Renamed from pluginFileForMimeType(); ditto. 101 (WebCore::PluginData::initPlugins): 102 (WebCore::PluginData::supportsMimeType): Deleted. 103 (WebCore::PluginData::pluginInfoForMimeType): Deleted. 104 (WebCore::PluginData::pluginNameForMimeType): Deleted. 105 (WebCore::PluginData::pluginFileForMimeType): Deleted. 106 107 * plugins/PluginData.h: 108 Add a member variable for the associate Page; declare the PluginLoadClientPolicy enumeration; add 109 new members to PluginInfo for the clientLoadPolicy and bundle information. 110 (WebCore::PluginData::PluginData): 111 Replace some member functions with new ones that will hide plug-ins upon request from the client; 112 (WebCore::PluginData::mimes): Deleted. 113 (WebCore::PluginData::mimePluginIndices): Deleted. 114 115 * plugins/PluginStrategy.h: 116 Declare new member functions for retrieving web-visible plug-ins and setting/clearing plug-in policies. 117 118 * replay/SerializationMethods.cpp: 119 (JSC::EncodingTraits<PluginData>::encodeValue): 120 Remove now-obsolete code for handling MIME types and add a FIXME. 121 (JSC::DeserializedPluginData::DeserializedPluginData): 122 (JSC::EncodingTraits<PluginData>::decodeValue): 123 Ditto. 124 (JSC::EncodingTraits<PluginInfo>::encodeValue): 125 Handle the new members in PluginInfo. 126 (JSC::EncodingTraits<PluginInfo>::decodeValue): 127 Ditto. 128 129 * replay/WebInputs.json: 130 Teach Replay about PluginLoadClientPolicy. 131 1 132 2015-03-16 Max Stepin <maxstepin@gmail.com> 2 133 -
trunk/Source/WebCore/dom/DOMImplementation.cpp
r181494 r181562 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 MimeType(type, allowedPluginTypes))332 if (MIMETypeRegistry::isPDFOrPostScriptMIMEType(type) && pluginData && pluginData->supportsWebVisibleMimeType(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 MimeType(type, allowedPluginTypes)) || (frame && frame->loader().client().shouldAlwaysUsePluginDocument(type))))351 if (type != "text/plain" && ((pluginData && pluginData->supportsWebVisibleMimeType(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
r181494 r181562 168 168 const PluginData& pluginData = page->pluginData(); 169 169 170 for (size_t i = 0; i < pluginData.mimes().size(); ++i) { 171 const MimeClassInfo& mimeClassInfo = pluginData.mimes()[i]; 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]; 172 175 for (size_t j = 0; j < mimeClassInfo.extensions.size(); ++j) { 173 176 if (equalIgnoringCase(extension, mimeClassInfo.extensions[j])) … … 192 195 } 193 196 194 String pluginFile = page->pluginData().pluginFileFor MimeType(newMIMEType);197 String pluginFile = page->pluginData().pluginFileForWebVisibleMimeType(newMIMEType); 195 198 String description = !pluginFile ? newMIMEType : pluginFile; 196 199 … … 368 371 // can handle TIFF (which QuickTime can also handle) they probably intended to override QT. 369 372 if (m_frame.page() && (mimeType == "image/tiff" || mimeType == "image/tif" || mimeType == "image/x-tiff")) { 370 String pluginName = m_frame.page()->pluginData().pluginNameFor MimeType(mimeType);373 String pluginName = m_frame.page()->pluginData().pluginNameForWebVisibleMimeType(mimeType); 371 374 if (!pluginName.isEmpty() && !pluginName.contains("QuickTime", false)) 372 375 return true; -
trunk/Source/WebCore/platform/PlatformStrategies.h
r181494 r181562 89 89 }; 90 90 91 PlatformStrategies* platformStrategies();91 WEBCORE_EXPORT PlatformStrategies* platformStrategies(); 92 92 WEBCORE_EXPORT void setPlatformStrategies(PlatformStrategies*); 93 93 bool hasPlatformStrategies(); -
trunk/Source/WebCore/plugins/DOMMimeType.cpp
r181494 r181562 43 43 } 44 44 45 const String &DOMMimeType::type() const45 String DOMMimeType::type() const 46 46 { 47 47 return mimeClassInfo().type; … … 61 61 } 62 62 63 const String &DOMMimeType::description() const63 String DOMMimeType::description() const 64 64 { 65 65 return mimeClassInfo().desc; 66 } 67 68 MimeClassInfo DOMMimeType::mimeClassInfo() const 69 { 70 Vector<MimeClassInfo> mimes; 71 Vector<size_t> mimePluginIndices; 72 m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 73 return mimes[m_index]; 66 74 } 67 75 … … 71 79 return 0; 72 80 73 return DOMPlugin::create(m_pluginData.get(), m_frame, m_pluginData->mimePluginIndices()[m_index]); 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]); 74 85 } 75 86 -
trunk/Source/WebCore/plugins/DOMMimeType.h
r181494 r181562 38 38 ~DOMMimeType(); 39 39 40 const String &type() const;40 String type() const; 41 41 String suffixes() const; 42 const String &description() const;42 String description() const; 43 43 PassRefPtr<DOMPlugin> enabledPlugin() const; 44 44 45 45 private: 46 const MimeClassInfo& mimeClassInfo() const { return m_pluginData->mimes()[m_index]; }46 MimeClassInfo mimeClassInfo() const; 47 47 48 48 DOMMimeType(PassRefPtr<PluginData>, Frame*, unsigned index); -
trunk/Source/WebCore/plugins/DOMMimeTypeArray.cpp
r181494 r181562 49 49 if (!data) 50 50 return 0; 51 return data->mimes().size(); 51 52 Vector<MimeClassInfo> mimes; 53 Vector<size_t> mimePluginIndices; 54 data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 55 return mimes.size(); 52 56 } 53 57 … … 57 61 if (!data) 58 62 return 0; 59 const Vector<MimeClassInfo>& mimes = data->mimes(); 63 64 Vector<MimeClassInfo> mimes; 65 Vector<size_t> mimePluginIndices; 66 data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 67 60 68 if (index >= mimes.size()) 61 69 return 0; … … 68 76 if (!data) 69 77 return 0; 70 const Vector<MimeClassInfo>& mimes = data->mimes(); 78 79 Vector<MimeClassInfo> mimes; 80 Vector<size_t> mimePluginIndices; 81 data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 71 82 for (unsigned i = 0; i < mimes.size(); ++i) { 72 83 if (mimes[i].type == propertyName) … … 81 92 if (!data) 82 93 return 0; 83 const Vector<MimeClassInfo>& mimes = data->mimes(); 94 95 Vector<MimeClassInfo> mimes; 96 Vector<size_t> mimePluginIndices; 97 data->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 84 98 for (unsigned i = 0; i < mimes.size(); ++i) { 85 99 if (mimes[i].type == propertyName) -
trunk/Source/WebCore/plugins/DOMPlugin.cpp
r181494 r181562 57 57 } 58 58 59 PluginInfo DOMPlugin::pluginInfo() const 60 { 61 return m_pluginData->webVisiblePlugins()[m_index]; 62 } 63 59 64 PassRefPtr<DOMMimeType> DOMPlugin::item(unsigned index) 60 65 { … … 62 67 return 0; 63 68 64 const MimeClassInfo&mime = pluginInfo().mimes[index];69 MimeClassInfo mime = pluginInfo().mimes[index]; 65 70 66 const Vector<MimeClassInfo>& mimes = m_pluginData->mimes(); 71 Vector<MimeClassInfo> mimes; 72 Vector<size_t> mimePluginIndices; 73 m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 67 74 for (unsigned i = 0; i < mimes.size(); ++i) { 68 if (mimes[i] == mime && m _pluginData->mimePluginIndices()[i] == m_index)75 if (mimes[i] == mime && mimePluginIndices[i] == m_index) 69 76 return DOMMimeType::create(m_pluginData.get(), m_frame, i); 70 77 } … … 74 81 bool DOMPlugin::canGetItemsForName(const AtomicString& propertyName) 75 82 { 76 const Vector<MimeClassInfo>& mimes = m_pluginData->mimes(); 83 Vector<MimeClassInfo> mimes; 84 Vector<size_t> mimePluginIndices; 85 m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 77 86 for (unsigned i = 0; i < mimes.size(); ++i) 78 87 if (mimes[i].type == propertyName) … … 83 92 PassRefPtr<DOMMimeType> DOMPlugin::namedItem(const AtomicString& propertyName) 84 93 { 85 const Vector<MimeClassInfo>& mimes = m_pluginData->mimes(); 94 Vector<MimeClassInfo> mimes; 95 Vector<size_t> mimePluginIndices; 96 m_pluginData->getWebVisibleMimesAndPluginIndices(mimes, mimePluginIndices); 86 97 for (unsigned i = 0; i < mimes.size(); ++i) 87 98 if (mimes[i].type == propertyName) -
trunk/Source/WebCore/plugins/DOMPlugin.h
r181494 r181562 49 49 50 50 private: 51 const PluginInfo& pluginInfo() const { return m_pluginData->plugins()[m_index]; }51 PluginInfo pluginInfo() const; 52 52 53 53 DOMPlugin(PluginData*, Frame*, unsigned index); -
trunk/Source/WebCore/plugins/DOMPluginArray.cpp
r181494 r181562 49 49 if (!data) 50 50 return 0; 51 return data->plugins().size(); 51 52 return data->webVisiblePlugins().size(); 52 53 } 53 54 … … 57 58 if (!data) 58 59 return 0; 59 const Vector<PluginInfo>& plugins = data->plugins(); 60 61 const Vector<PluginInfo>& plugins = data->webVisiblePlugins(); 60 62 if (index >= plugins.size()) 61 63 return 0; … … 68 70 if (!data) 69 71 return 0; 70 const Vector<PluginInfo>& plugins = data->plugins(); 72 73 const Vector<PluginInfo>& plugins = data->webVisiblePlugins(); 71 74 for (unsigned i = 0; i < plugins.size(); ++i) { 72 75 if (plugins[i].name == propertyName) … … 81 84 if (!data) 82 85 return 0; 83 const Vector<PluginInfo>& plugins = data->plugins(); 86 87 const Vector<PluginInfo>& plugins = data->webVisiblePlugins(); 84 88 for (unsigned i = 0; i < plugins.size(); ++i) { 85 89 if (plugins[i].name == propertyName) -
trunk/Source/WebCore/plugins/PluginData.cpp
r181494 r181562 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 Apple Inc. All Rights Reserved.5 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2015 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 initPlugins(page);34 ASSERT_ARG(page, page); 35 35 36 for (unsigned i = 0; i < m_plugins.size(); ++i) { 37 const PluginInfo& plugin = m_plugins[i]; 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]; 38 55 for (unsigned j = 0; j < plugin.mimes.size(); ++j) { 39 m _mimes.append(plugin.mimes[j]);40 m _mimePluginIndices.append(i);56 mimes.append(plugin.mimes[j]); 57 mimePluginIndices.append(i); 41 58 } 42 59 } 43 60 } 44 61 45 bool PluginData::supports MimeType(const String& mimeType, const AllowedPluginTypes allowedPluginTypes) const62 bool PluginData::supportsWebVisibleMimeType(const String& mimeType, const AllowedPluginTypes allowedPluginTypes) const 46 63 { 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)) 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)) 49 71 return true; 50 72 } … … 52 74 } 53 75 54 const PluginInfo* PluginData::pluginInfoForMimeType(const String& mimeType) const76 bool PluginData::getPluginInfoForWebVisibleMimeType(const String& mimeType, PluginInfo& pluginInfoRef) const 55 77 { 56 for (unsigned i = 0; i < m_mimes.size(); ++i) { 57 const MimeClassInfo& info = m_mimes[i]; 58 59 if (info.type == mimeType) 60 return &m_plugins[m_mimePluginIndices[i]]; 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 86 if (info.type == mimeType) { 87 pluginInfoRef = plugins[mimePluginIndices[i]]; 88 return true; 89 } 61 90 } 62 91 63 return 0;92 return false; 64 93 } 65 94 66 String PluginData::pluginNameFor MimeType(const String& mimeType) const95 String PluginData::pluginNameForWebVisibleMimeType(const String& mimeType) const 67 96 { 68 if (const PluginInfo* info = pluginInfoForMimeType(mimeType)) 69 return info->name; 97 PluginInfo info; 98 if (getPluginInfoForWebVisibleMimeType(mimeType, info)) 99 return info.name; 70 100 return String(); 71 101 } 72 102 73 String PluginData::pluginFileFor MimeType(const String& mimeType) const103 String PluginData::pluginFileForWebVisibleMimeType(const String& mimeType) const 74 104 { 75 if (const PluginInfo* info = pluginInfoForMimeType(mimeType)) 76 return info->file; 105 PluginInfo info; 106 if (getPluginInfoForWebVisibleMimeType(mimeType, info)) 107 return info.file; 77 108 return String(); 78 109 } … … 83 114 } 84 115 85 void PluginData::initPlugins( const Page* page)116 void PluginData::initPlugins() 86 117 { 87 118 ASSERT(m_plugins.isEmpty()); 88 89 platformStrategies()->pluginStrategy()->getPluginInfo( page, m_plugins);119 120 platformStrategies()->pluginStrategy()->getPluginInfo(m_page, m_plugins); 90 121 } 91 122 -
trunk/Source/WebCore/plugins/PluginData.h
r181494 r181562 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 synchronously 34 // ask the client whether the plug-in should be loaded. 35 PluginLoadClientPolicyUndefined = 0, 36 37 // The plug-in module should be blocked from being instantiated. The plug-in should be hidden in navigator.plugins. 38 PluginLoadClientPolicyBlock, 39 40 // WebKit should synchronously ask the client whether the plug-in should be loaded. The plug-in should be visible in navigator.plugins. 41 PluginLoadClientPolicyAsk, 42 43 // The plug-in module may be loaded if WebKit is not blocking it. 44 PluginLoadClientPolicyAllow, 45 46 // The plug-in module should be loaded irrespective of whether WebKit has asked it to be blocked. 47 PluginLoadClientPolicyAllowAlways, 48 }; 49 32 50 struct MimeClassInfo { 33 51 String type; … … 47 65 Vector<MimeClassInfo> mimes; 48 66 bool isApplicationPlugin; 67 68 PluginLoadClientPolicy clientLoadPolicy; 69 70 #if PLATFORM(MAC) 71 String bundleIdentifier; 72 String versionString; 73 #endif 49 74 }; 50 75 … … 55 80 56 81 const Vector<PluginInfo>& plugins() const { return m_plugins; } 57 const Vector<MimeClassInfo>& mimes() const { return m_mimes; }58 const Vector<size_t>& mimePluginIndices() const { return m_mimePluginIndices; }82 Vector<PluginInfo> webVisiblePlugins() const; 83 WEBCORE_EXPORT void getWebVisibleMimesAndPluginIndices(Vector<MimeClassInfo>&, Vector<size_t>&) const; 59 84 60 85 enum AllowedPluginTypes { … … 63 88 }; 64 89 65 WEBCORE_EXPORT bool supports MimeType(const String& mimeType, const AllowedPluginTypes) const;66 String pluginNameFor MimeType(const String& mimeType) const;67 String pluginFileFor MimeType(const String& mimeType) const;90 WEBCORE_EXPORT bool supportsWebVisibleMimeType(const String& mimeType, const AllowedPluginTypes) const; 91 String pluginNameForWebVisibleMimeType(const String& mimeType) const; 92 String pluginFileForWebVisibleMimeType(const String& mimeType) const; 68 93 69 94 static void refresh(); … … 71 96 private: 72 97 explicit PluginData(const Page*); 73 void initPlugins( const Page*);74 const PluginInfo* pluginInfoForMimeType(const String& mimeType) const;98 void initPlugins(); 99 bool getPluginInfoForWebVisibleMimeType(const String& mimeType, PluginInfo&) const; 75 100 76 101 protected: 77 102 #if defined ENABLE_WEB_REPLAY && ENABLE_WEB_REPLAY 78 PluginData(Vector<PluginInfo> plugins , Vector<MimeClassInfo> mimes, Vector<size_t> indices)103 PluginData(Vector<PluginInfo> plugins) 79 104 : m_plugins(plugins) 80 , m_mimes(mimes)81 , m_mimePluginIndices(indices)82 105 { 83 106 } 84 107 #endif 85 108 109 const Page* m_page; 86 110 Vector<PluginInfo> m_plugins; 87 Vector<MimeClassInfo> m_mimes;88 Vector<size_t> m_mimePluginIndices;89 111 }; 90 112 -
trunk/Source/WebCore/plugins/PluginStrategy.h
r181494 r181562 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 #endif 39 44 40 45 protected: -
trunk/Source/WebCore/replay/SerializationMethods.cpp
r181494 r181562 54 54 using WebCore::PlatformWheelEventGranularity; 55 55 using WebCore::PluginData; 56 using WebCore::PluginLoadClientPolicy; 56 57 using WebCore::PluginInfo; 57 58 using WebCore::SecurityOrigin; … … 438 439 EncodedValue EncodingTraits<PluginData>::encodeValue(RefPtr<PluginData> input) 439 440 { 441 // FIXME: This needs to work in terms of web-visible plug-ins. 440 442 EncodedValue encodedData = EncodedValue::createObject(); 441 443 442 Vector<uint32_t> castedMimePluginIndices(input->mimePluginIndices().size());443 for (uint32_t index : input->mimePluginIndices())444 castedMimePluginIndices.append(WTF::safeCast<uint32_t>(index));445 446 444 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);449 445 450 446 return encodedData; … … 453 449 class DeserializedPluginData : public PluginData { 454 450 public: 455 DeserializedPluginData(Vector<PluginInfo> plugins , Vector<MimeClassInfo> mimes, Vector<size_t> indices)456 : PluginData(plugins , mimes, indices)451 DeserializedPluginData(Vector<PluginInfo> plugins) 452 : PluginData(plugins) 457 453 { 458 454 } … … 462 458 { 463 459 DECODE_TYPE_WITH_KEY(encodedData, Vector<PluginInfo>, 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)); 460 461 // FIXME: This needs to work in terms of web-visible plug-ins. 462 input = adoptRef(new DeserializedPluginData(plugins)); 472 463 473 464 return true; … … 484 475 ENCODE_TYPE_WITH_KEY(encodedData, Vector<MimeClassInfo>, mimes, input.mimes); 485 476 ENCODE_TYPE_WITH_KEY(encodedData, bool, isApplicationPlugin, input.isApplicationPlugin); 477 ENCODE_TYPE_WITH_KEY(encodedData, PluginLoadClientPolicy, clientLoadPolicy, static_cast<PluginLoadClientPolicy>(input.clientLoadPolicy)); 478 #if PLATFORM(MAC) 479 ENCODE_TYPE_WITH_KEY(encodedData, String, bundleIdentifier, input.bundleIdentifier); 480 ENCODE_TYPE_WITH_KEY(encodedData, String, versionString, input.versionString); 481 #endif 486 482 487 483 return encodedData; … … 498 494 DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, Vector<MimeClassInfo>, mimes, info.mimes); 499 495 DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, bool, isApplicationPlugin, info.isApplicationPlugin); 496 DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, PluginLoadClientPolicy, clientLoadPolicy, info.clientLoadPolicy); 497 #if PLATFORM(MAC) 498 DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, String, bundleIdentifier, input.bundleIdentifier); 499 DECODE_TYPE_WITH_KEY_TO_LVALUE(encodedData, String, versionString, input.versionString); 500 #endif 500 501 501 502 input = info; -
trunk/Source/WebCore/replay/WebInputs.json
r181494 r181562 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 69 76 { 70 77 "name": "ScrollDirection", "mode": "SCALAR", "storage": "uint8_t", -
trunk/Source/WebKit/mac/ChangeLog
r181502 r181562 1 2015-03-16 Conrad Shultz <conrad_shultz@apple.com> 2 3 Allow clients to selectively disable plug-ins 4 https://bugs.webkit.org/show_bug.cgi?id=142506 5 6 Reviewed by Anders Carlsson. 7 8 Add new functionality allow clients to declaratively disable individual plug-ins (in a manner that conceals them 9 from the page). As part of this: 10 11 1) Introduce the concept of web-visible plug-ins and related concepts, as distinct from the real underlying 12 set of plug-ins. 13 14 2) Where applicable, plumb additional information about plug-ins (specifically, bundle identification) deeper 15 down the stack. 16 17 3) Add generic functionality to PluginStrategy to support filtering plug-ins for visibility and introduce 18 a concrete implementation thereof in WebPlatformStrategies in WebKit2. 19 20 4) Add messaging infrastructure to allow clients to set and clear plug-in policies. 21 22 While currently only used in a very limited manner, the new declarative plug-in policies are written generically 23 so that they could be easily used in the future to reduce synchronous messaging to the client when loading plug-ins. 24 25 * Plugins/WebBasePluginPackage.mm: 26 (-[WebBasePluginPackage getPluginInfoFromPLists]): 27 Set new members in PluginInfo. 28 29 * Plugins/WebNetscapePluginPackage.mm: 30 (-[WebNetscapePluginPackage getPluginInfoFromResources]): 31 Set new members in PluginInfo. 32 33 * WebCoreSupport/WebPlatformStrategies.h: 34 * WebCoreSupport/WebPlatformStrategies.mm: 35 (WebPlatformStrategies::getWebVisiblePluginInfo): 36 Override to wrap getPluginInfo(). 37 (WebPlatformStrategies::setPluginLoadClientPolicy): 38 Override to do nothing. 39 (WebPlatformStrategies::clearPluginClientPolicies): 40 Ditto. 41 42 * WebView/WebFrame.mm: 43 (-[WebFrame _canProvideDocumentSource]): 44 Update to reflect function rename. 45 1 46 2015-03-14 Dean Jackson <dino@apple.com> 2 47 -
trunk/Source/WebKit/mac/Plugins/WebBasePluginPackage.mm
r181494 r181562 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 #endif 252 257 253 258 return YES; -
trunk/Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm
r181494 r181562 147 147 148 148 pluginInfo.isApplicationPlugin = false; 149 149 pluginInfo.clientLoadPolicy = PluginLoadClientPolicyUndefined; 150 #if PLATFORM(MAC) 151 pluginInfo.bundleIdentifier = self.bundleIdentifier; 152 pluginInfo.versionString = self.bundleVersion; 153 #endif 154 150 155 [self closeResourceFile:resRef]; 151 156 -
trunk/Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h
r181494 r181562 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 #endif 65 70 66 71 // WebCore::LoaderStrategy -
trunk/Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm
r181494 r181562 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 #endif 145 131 146 void WebPlatformStrategies::getTypes(Vector<String>& types, const String& pasteboardName) 132 147 { -
trunk/Source/WebKit/mac/WebView/WebFrame.mm
r181494 r181562 980 980 if (WebCore::DOMImplementation::isTextMIMEType(mimeType) 981 981 || Image::supportsType(mimeType) 982 || (pluginData && pluginData->supports MimeType(mimeType, PluginData::AllPlugins) && frame->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))983 || (pluginData && pluginData->supports MimeType(mimeType, PluginData::OnlyApplicationPlugins)))982 || (pluginData && pluginData->supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && frame->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin)) 983 || (pluginData && pluginData->supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins))) 984 984 return NO; 985 985 -
trunk/Source/WebKit/win/ChangeLog
r181494 r181562 1 2015-03-16 Conrad Shultz <conrad_shultz@apple.com> 2 3 Allow clients to selectively disable plug-ins 4 https://bugs.webkit.org/show_bug.cgi?id=142506 5 6 Reviewed by Anders Carlsson. 7 8 * WebCoreSupport/WebPlatformStrategies.h: 9 * WebCoreSupport/WebPlatformStrategies.cpp: 10 (WebPlatformStrategies::getWebVisiblePluginInfo): 11 Wrap getPluginInfo(); 12 13 * WebView.cpp: 14 (WebView::canShowMIMEType): 15 Update to reflect function rename. 16 1 17 2015-03-13 Commit Queue <commit-queue@webkit.org> 2 18 -
trunk/Source/WebKit/win/WebCoreSupport/WebPlatformStrategies.cpp
r181494 r181562 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
r181494 r181562 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>&); 58 59 }; 59 60 -
trunk/Source/WebKit/win/WebView.cpp
r181494 r181562 2630 2630 2631 2631 if (!canShow && m_page) { 2632 canShow = (m_page->pluginData().supports MimeType(mimeType, PluginData::AllPlugins) && allowPlugins)2633 || m_page->pluginData().supports MimeType(mimeType, PluginData::OnlyApplicationPlugins);2632 canShow = (m_page->pluginData().supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && allowPlugins) 2633 || m_page->pluginData().supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins); 2634 2634 } 2635 2635 -
trunk/Source/WebKit2/ChangeLog
r181555 r181562 1 2015-03-16 Conrad Shultz <conrad_shultz@apple.com> 2 3 Allow clients to selectively disable plug-ins 4 https://bugs.webkit.org/show_bug.cgi?id=142506 5 6 Reviewed by Anders Carlsson. 7 8 Add new functionality allow clients to declaratively disable individual plug-ins (in a manner that conceals them 9 from the page). As part of this: 10 11 1) Introduce the concept of web-visible plug-ins and related concepts, as distinct from the real underlying 12 set of plug-ins. 13 14 2) Where applicable, plumb additional information about plug-ins (specifically, bundle identification) deeper 15 down the stack. 16 17 3) Add generic functionality to PluginStrategy to support filtering plug-ins for visibility and introduce 18 a concrete implementation thereof in WebPlatformStrategies in WebKit2. 19 20 4) Add messaging infrastructure to allow clients to set and clear plug-in policies. 21 22 While currently only used in a very limited manner, the new declarative plug-in policies are written generically 23 so that they could be easily used in the future to reduce synchronous messaging to the client when loading plug-ins. 24 25 * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm: 26 (WebKit::NetscapePluginModule::getPluginInfo): 27 Set new PluginInfo members. 28 29 * Shared/WebCoreArgumentCoders.cpp: 30 (IPC::ArgumentCoder<PluginInfo>::encode): 31 Handle new PluginInfo members. 32 (IPC::ArgumentCoder<PluginInfo>::decode): 33 Ditto. 34 35 * Shared/WebProcessCreationParameters.h: 36 Declare a member to store client plug-in policies. 37 38 * Shared/WebProcessCreationParameters.cpp: 39 (WebKit::WebProcessCreationParameters::encode): 40 Encode the policies. 41 (WebKit::WebProcessCreationParameters::decode): 42 Decode the policies. 43 44 * UIProcess/API/C/WKAPICast.h: 45 (WebKit::toWKPluginLoadClientPolicy): 46 Teach how to cast between WebCore and WebKit2 policy definitions. 47 (WebKit::toPluginLoadClientPolicy): 48 Ditto. 49 50 * UIProcess/API/C/WKPluginLoadPolicy.h: 51 Declare WKPluginLoadClientPolicy, matching PluginLoadClientPolicy in WebCore. 52 53 * UIProcess/API/C/mac/WKContextPrivateMac.h: 54 * UIProcess/API/C/mac/WKContextPrivateMac.mm: 55 (WKContextSetPluginLoadClientPolicy): 56 New function; wrap WebProcessPool::setPluginLoadClientPolicy(). 57 (WKContextClearPluginClientPolicies): 58 New function; wrap WebProcessPool::clearPluginClientPolicies(). 59 60 * UIProcess/WebProcessPool.h: 61 * UIProcess/WebProcessPool.cpp: 62 (WebKit::WebProcessPool::createNewWebProcess): 63 Copy any client plug-in policies to the new process' creation parameters. 64 (WebKit::WebProcessPool::setPluginLoadClientPolicy): 65 Send SetPluginLoadClientPolicy to all processes and stash the passed-in policy info. 66 (WebKit::WebProcessPool::clearPluginClientPolicies): 67 Send ClearPluginClientPolicies to all processes and clear any stashed policy info. 68 69 * WebProcess/Plugins/PDF/PDFPlugin.mm: 70 (WebKit::PDFPlugin::pluginInfo): 71 Set new PluginInfo member. 72 73 * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: 74 (WebKit::pluginSupportsExtension): 75 Adopt getWebVisibleMimesAndPluginIndices(). 76 (WebKit::WebFrameLoaderClient::objectContentType): 77 Update to reflect reflect function rename. 78 79 * WebProcess/WebCoreSupport/WebPlatformStrategies.h: 80 * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: 81 (WebKit::WebPlatformStrategies::getPluginInfo): 82 Pass the Page to populatePluginCache(). 83 (WebKit::WebPlatformStrategies::getWebVisiblePluginInfo): 84 New member function; wrap getPluginInfo(); if appropriate, filter out plug-ins the client has asked 85 to block on the current page. 86 (WebKit::WebPlatformStrategies::setPluginLoadClientPolicy): 87 New member function; map empty inputs to a wildcard character and insert the new policy into the nested map. 88 (WebKit::WebPlatformStrategies::clearPluginClientPolicies): 89 New member function; empty m_hostsToPluginIdentifierData. 90 (WebKit::WebPlatformStrategies::pluginLoadClientPolicyForHost): 91 New member function; look up the most specific policy for the given plug-in and host. 92 (WebKit::WebPlatformStrategies::populatePluginCache): 93 If appropriate, set the client load policy on the plug-ins; do this irrespective of whether the cache has 94 been populated since the Page, and therefore host, may change. 95 96 * WebProcess/WebPage/WebPage.cpp: 97 (WebKit::WebPage::canShowMIMEType): 98 Update to reflect function rename. 99 100 * WebProcess/WebProcess.h: 101 * WebProcess/WebProcess.cpp: 102 (WebKit::WebProcess::initializeWebProcess): 103 Enumerate and process the client plug-in policies in the creation parameters. 104 (WebKit::WebProcess::setPluginLoadClientPolicy): 105 New member function; wrap PluginStrategy::setPluginLoadClientPolicy. 106 (WebKit::WebProcess::clearPluginClientPolicies): 107 New member function; wrap PluginStrategy::clearPluginClientPolicies(). 108 109 * WebProcess/WebProcess.messages.in: 110 Add messages for setting and clearing policies. 111 1 112 2015-03-16 Carlos Garcia Campos <cgarcia@igalia.com> 2 113 -
trunk/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
r181494 r181562 400 400 401 401 plugin.info.isApplicationPlugin = false; 402 402 plugin.info.clientLoadPolicy = PluginLoadClientPolicyUndefined; 403 #if PLATFORM(MAC) 404 plugin.info.bundleIdentifier = plugin.bundleIdentifier; 405 plugin.info.versionString = plugin.versionString; 406 #endif 407 403 408 return true; 404 409 } -
trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp
r181494 r181562 567 567 void ArgumentCoder<PluginInfo>::encode(ArgumentEncoder& encoder, const PluginInfo& pluginInfo) 568 568 { 569 encoder << pluginInfo.name << pluginInfo.file << pluginInfo.desc << pluginInfo.mimes << pluginInfo.isApplicationPlugin; 570 } 571 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 572 581 bool ArgumentCoder<PluginInfo>::decode(ArgumentDecoder& decoder, PluginInfo& pluginInfo) 573 582 { … … 582 591 if (!decoder.decode(pluginInfo.isApplicationPlugin)) 583 592 return false; 593 PluginLoadClientPolicy clientLoadPolicy; 594 if (!decoder.decodeEnum(clientLoadPolicy)) 595 return false; 596 #if PLATFORM(MAC) 597 if (!decoder.decode(pluginInfo.bundleIdentifier)) 598 return false; 599 if (!decoder.decode(pluginInfo.versionString)) 600 return false; 601 #endif 584 602 585 603 return true; -
trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
r181494 r181562 145 145 encoder << hasRichContentServices; 146 146 #endif 147 148 #if ENABLE(NETSCAPE_PLUGIN_API) 149 encoder << pluginLoadClientPolicies; 150 #endif 147 151 } 148 152 … … 303 307 #endif 304 308 309 #if ENABLE(NETSCAPE_PLUGIN_API) 310 if (!decoder.decode(parameters.pluginLoadClientPolicies)) 311 return false; 312 #endif 313 305 314 return true; 306 315 } -
trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h
r181494 r181562 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 #endif 170 174 }; 171 175 -
trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h
r181494 r181562 48 48 #include <WebCore/Credential.h> 49 49 #include <WebCore/FrameLoaderTypes.h> 50 #include <WebCore/PluginData.h> 50 51 #include <WebCore/ProtectionSpace.h> 51 52 #include <WebCore/Settings.h> … … 483 484 } 484 485 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 485 505 inline PluginModuleLoadPolicy toPluginModuleLoadPolicy(WKPluginLoadPolicy pluginLoadPolicy) 486 506 { … … 498 518 } 499 519 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 500 539 inline WebCore::WebGLLoadPolicy toWebGLLoadPolicy(WKWebGLLoadPolicy webGLLoadPolicy) 501 540 { -
trunk/Source/WebKit2/UIProcess/API/C/WKPluginLoadPolicy.h
r181494 r181562 41 41 typedef uint32_t WKPluginLoadPolicy; 42 42 43 enum WKPluginLoadClientPolicy { 44 kWKPluginLoadClientPolicyUndefined = 0, 45 kWKPluginLoadClientPolicyBlock, 46 kWKPluginLoadClientPolicyAsk, 47 kWKPluginLoadClientPolicyAllow, 48 kWKPluginLoadClientPolicyAllowAlways, 49 }; 50 43 51 #ifdef __cplusplus 44 52 } -
trunk/Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.h
r181494 r181562 28 28 29 29 #include <WebKit/WKBase.h> 30 #include <WebKit/WKPluginLoadPolicy.h> 30 31 31 32 #ifdef __cplusplus … … 37 38 38 39 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); 39 43 40 44 WK_EXPORT WKDictionaryRef WKContextCopyPlugInInfoForBundleIdentifier(WKContextRef context, WKStringRef plugInBundleIdentifier); -
trunk/Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.mm
r181494 r181562 50 50 #else 51 51 return WKIsPluginUpdateAvailable((NSString *)adoptCF(WKStringCopyCFString(kCFAllocatorDefault, plugInBundleIdentifierRef)).get()); 52 #endif 53 } 54 55 void WKContextSetPluginLoadClientPolicy(WKContextRef contextRef, WKPluginLoadClientPolicy policy, WKStringRef host, WKStringRef bundleIdentifier, WKStringRef versionString) 56 { 57 #if ENABLE(NETSCAPE_PLUGIN_API) 58 toImpl(contextRef)->setPluginLoadClientPolicy(toPluginLoadClientPolicy(policy), toWTFString(host), toWTFString(bundleIdentifier), toWTFString(versionString)); 59 #endif 60 } 61 62 void WKContextClearPluginClientPolicies(WKContextRef contextRef) 63 { 64 #if ENABLE(NETSCAPE_PLUGIN_API) 65 toImpl(contextRef)->clearPluginClientPolicies(); 52 66 #endif 53 67 } -
trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp
r181494 r181562 684 684 #endif 685 685 686 #if ENABLE(NETSCAPE_PLUGIN_API) 687 parameters.pluginLoadClientPolicies = m_pluginLoadClientPolicies; 688 #endif 689 686 690 #if OS(LINUX) 687 691 parameters.shouldEnableMemoryPressureReliefLogging = true; … … 1419 1423 m_client.plugInInformationBecameAvailable(this, API::Array::create(WTF::move(plugins)).get()); 1420 1424 } 1425 1426 void WebProcessPool::setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy policy, const String& host, const String& bundleIdentifier, const String& versionString) 1427 { 1428 #if ENABLE(NETSCAPE_PLUGIN_API) 1429 HashMap<String, HashMap<String, uint8_t>> policiesByIdentifier; 1430 if (m_pluginLoadClientPolicies.contains(host)) 1431 policiesByIdentifier = m_pluginLoadClientPolicies.get(host); 1432 1433 HashMap<String, uint8_t> versionsToPolicies; 1434 if (policiesByIdentifier.contains(bundleIdentifier)) 1435 versionsToPolicies = policiesByIdentifier.get(bundleIdentifier); 1436 1437 versionsToPolicies.set(versionString, policy); 1438 policiesByIdentifier.set(bundleIdentifier, versionsToPolicies); 1439 m_pluginLoadClientPolicies.set(host, policiesByIdentifier); 1440 #endif 1441 1442 sendToAllProcesses(Messages::WebProcess::SetPluginLoadClientPolicy(policy, host, bundleIdentifier, versionString)); 1443 } 1444 1445 void WebProcessPool::clearPluginClientPolicies() 1446 { 1447 #if ENABLE(NETSCAPE_PLUGIN_API) 1448 m_pluginLoadClientPolicies.clear(); 1449 #endif 1450 sendToAllProcesses(Messages::WebProcess::ClearPluginClientPolicies()); 1451 } 1421 1452 #endif 1422 1453 -
trunk/Source/WebKit2/UIProcess/WebProcessPool.h
r181494 r181562 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(); 186 189 #endif 187 190 … … 541 544 HashMap<String, String> m_encodedContentExtensions; 542 545 #endif 546 547 #if ENABLE(NETSCAPE_PLUGIN_API) 548 HashMap<String, HashMap<String, HashMap<String, uint8_t>>> m_pluginLoadClientPolicies; 549 #endif 543 550 }; 544 551 -
trunk/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm
r181494 r181562 540 540 info.name = builtInPDFPluginName(); 541 541 info.isApplicationPlugin = true; 542 info.clientLoadPolicy = PluginLoadClientPolicyUndefined; 542 543 543 544 MimeClassInfo pdfMimeClassInfo; -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r181494 r181562 1448 1448 ASSERT(extension.lower() == extension); 1449 1449 1450 for (size_t i = 0; i < pluginData.mimes().size(); ++i) { 1451 const MimeClassInfo& mimeClassInfo = pluginData.mimes()[i]; 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]; 1452 1455 1453 1456 if (mimeClassInfo.extensions.contains(extension)) … … 1484 1487 if (WebPage* webPage = m_frame->page()) { 1485 1488 const PluginData& pluginData = webPage->corePage()->pluginData(); 1486 if (pluginData.supports MimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))1489 if (pluginData.supportsWebVisibleMimeType(mimeType, PluginData::AllPlugins) && webFrame()->coreFrame()->loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin)) 1487 1490 plugInSupportsMIMEType = true; 1488 else if (pluginData.supports MimeType(mimeType, PluginData::OnlyApplicationPlugins))1491 else if (pluginData.supportsWebVisibleMimeType(mimeType, PluginData::OnlyApplicationPlugins)) 1489 1492 plugInSupportsMIMEType = true; 1490 1493 } -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp
r181494 r181562 1 1 /* 2 * Copyright (C) 2010, 2011, 2012 Apple Inc. All rights reserved.2 * Copyright (C) 2010, 2011, 2012, 2015 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> 47 48 #include <WebCore/IDBFactoryBackendInterface.h> 48 49 #include <WebCore/LoaderStrategy.h> … … 267 268 { 268 269 #if ENABLE(NETSCAPE_PLUGIN_API) 269 populatePluginCache(); 270 ASSERT_ARG(page, page); 271 populatePluginCache(*page); 270 272 271 273 if (page->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin)) { … … 281 283 } 282 284 285 void WebPlatformStrategies::getWebVisiblePluginInfo(const Page* page, Vector<PluginInfo>& plugins) 286 { 287 ASSERT_ARG(page, page); 288 ASSERT_ARG(plugins, plugins.isEmpty()); 289 290 getPluginInfo(page, plugins); 291 292 #if PLATFORM(MAC) 293 for (int32_t i = plugins.size() - 1; i >= 0; --i) { 294 PluginInfo& info = plugins.at(i); 295 PluginLoadClientPolicy clientPolicy = info.clientLoadPolicy; 296 // Allow built-in plugins. Also tentatively allow plugins that the client might later selectively permit. 297 if (info.isApplicationPlugin || clientPolicy == PluginLoadClientPolicyAsk) 298 continue; 299 300 if (clientPolicy == PluginLoadClientPolicyBlock) 301 plugins.remove(i); 302 } 303 #endif 304 } 305 306 #if PLATFORM(MAC) 307 void WebPlatformStrategies::setPluginLoadClientPolicy(PluginLoadClientPolicy clientPolicy, const String& host, const String& bundleIdentifier, const String& versionString) 308 { 309 String hostToSet = host.isNull() || !host.length() ? "*" : host; 310 String bundleIdentifierToSet = bundleIdentifier.isNull() || !bundleIdentifier.length() ? "*" : bundleIdentifier; 311 String versionStringToSet = versionString.isNull() || !versionString.length() ? "*" : versionString; 312 313 PluginPolicyMapsByIdentifier policiesByIdentifier; 314 if (m_hostsToPluginIdentifierData.contains(hostToSet)) 315 policiesByIdentifier = m_hostsToPluginIdentifierData.get(hostToSet); 316 317 PluginLoadClientPoliciesByBundleVersion versionsToPolicies; 318 if (policiesByIdentifier.contains(bundleIdentifierToSet)) 319 versionsToPolicies = policiesByIdentifier.get(bundleIdentifierToSet); 320 321 versionsToPolicies.set(versionStringToSet, clientPolicy); 322 policiesByIdentifier.set(bundleIdentifierToSet, versionsToPolicies); 323 m_hostsToPluginIdentifierData.set(hostToSet, policiesByIdentifier); 324 } 325 326 void WebPlatformStrategies::clearPluginClientPolicies() 327 { 328 m_hostsToPluginIdentifierData.clear(); 329 } 330 331 #endif 332 283 333 #if ENABLE(NETSCAPE_PLUGIN_API) 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; 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) 297 382 } 298 383 #endif // ENABLE(NETSCAPE_PLUGIN_API) -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h
r181494 r181562 32 32 #include <WebCore/PlatformStrategies.h> 33 33 #include <WebCore/PluginStrategy.h> 34 #include <wtf/HashMap.h> 34 35 #include <wtf/NeverDestroyed.h> 35 36 … … 68 69 virtual void refreshPlugins() override; 69 70 virtual void getPluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override; 71 virtual void getWebVisiblePluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&) override; 72 73 #if PLATFORM(MAC) 74 typedef HashMap<String, WebCore::PluginLoadClientPolicy> PluginLoadClientPoliciesByBundleVersion; 75 typedef HashMap<String, PluginLoadClientPoliciesByBundleVersion> PluginPolicyMapsByIdentifier; 76 77 virtual void setPluginLoadClientPolicy(WebCore::PluginLoadClientPolicy, const String& host, const String& bundleIdentifier, const String& versionString) override; 78 virtual void clearPluginClientPolicies() override; 79 #endif 70 80 71 81 // WebCore::PasteboardStrategy … … 100 110 #if ENABLE(NETSCAPE_PLUGIN_API) 101 111 // WebCore::PluginStrategy implementation. 102 void populatePluginCache( );112 void populatePluginCache(const WebCore::Page&); 103 113 bool m_pluginCacheIsPopulated; 104 114 bool m_shouldRefreshPlugins; 105 115 Vector<WebCore::PluginInfo> m_cachedPlugins; 106 116 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) 107 122 #endif // ENABLE(NETSCAPE_PLUGIN_API) 108 123 }; -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r181494 r181562 4427 4427 4428 4428 const PluginData& pluginData = m_page->pluginData(); 4429 if (pluginData.supports MimeType(MIMEType, PluginData::AllPlugins) && corePage()->mainFrame().loader().subframeLoader().allowPlugins(NotAboutToInstantiatePlugin))4429 if (pluginData.supportsWebVisibleMimeType(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 MimeType(MIMEType, PluginData::OnlyApplicationPlugins))4433 if (pluginData.supportsWebVisibleMimeType(MIMEType, PluginData::OnlyApplicationPlugins)) 4434 4434 return true; 4435 4435 -
trunk/Source/WebKit2/WebProcess/WebProcess.cpp
r181494 r181562 385 385 } 386 386 #endif 387 388 #if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC) 389 for (auto hostIter = parameters.pluginLoadClientPolicies.begin(); hostIter != parameters.pluginLoadClientPolicies.end(); ++hostIter) { 390 for (auto bundleIdentifierIter = hostIter->value.begin(); bundleIdentifierIter != hostIter->value.end(); ++bundleIdentifierIter) { 391 for (auto versionIter = bundleIdentifierIter->value.begin(); versionIter != bundleIdentifierIter->value.end(); ++versionIter) 392 platformStrategies()->pluginStrategy()->setPluginLoadClientPolicy(static_cast<PluginLoadClientPolicy>(versionIter->value), hostIter->key, bundleIdentifierIter->key, versionIter->key); 393 } 394 } 395 #endif 387 396 } 388 397 … … 861 870 862 871 parentProcessConnection()->send(Messages::WebProcessPool::PlugInDidReceiveUserInteraction(plugInOriginHash, sessionID), 0); 872 } 873 874 void WebProcess::setPluginLoadClientPolicy(uint8_t policy, const String& host, const String& bundleIdentifier, const String& versionString) 875 { 876 #if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC) 877 platformStrategies()->pluginStrategy()->setPluginLoadClientPolicy(static_cast<PluginLoadClientPolicy>(policy), host, bundleIdentifier, versionString); 878 #endif 879 } 880 881 void WebProcess::clearPluginClientPolicies() 882 { 883 #if ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(MAC) 884 platformStrategies()->pluginStrategy()->clearPluginClientPolicies(); 885 #endif 863 886 } 864 887 -
trunk/Source/WebKit2/WebProcess/WebProcess.h
r181494 r181562 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(); 126 128 127 129 bool fullKeyboardAccessEnabled() const { return m_fullKeyboardAccessEnabled; } -
trunk/Source/WebKit2/WebProcess/WebProcess.messages.in
r181494 r181562 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() 59 61 60 62 void StartMemorySampler(WebKit::SandboxExtension::Handle sampleLogFileHandle, String sampleLogFilePath, double interval);
Note:
See TracChangeset
for help on using the changeset viewer.