Diff
Modified: trunk/Source/WebKit2/ChangeLog (116715 => 116716)
--- trunk/Source/WebKit2/ChangeLog 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/ChangeLog 2012-05-11 01:49:40 UTC (rev 116716)
@@ -1,5 +1,77 @@
2012-05-10 Anders Carlsson <[email protected]>
+ WebKit2: Add a way to blacklist specific plug-ins/plug-in versions
+ https://bugs.webkit.org/show_bug.cgi?id=86164
+ <rdar://problem/9551196>
+
+ Reviewed by Sam Weinig.
+
+ * Shared/API/c/WKError.h:
+ Add kWKErrorCodeInsecurePlugInVersion error code.
+
+ * Shared/APIClientTraits.cpp:
+ Update now that didFailToInitializePlugin is deprecated.
+
+ * UIProcess/API/C/WKPage.h:
+ Deprecate didFailToInitializePlugin and replace it with the more generic pluginDidFail.
+ Also, deprecate missingPluginButtonClicked and replace it with unavailablePluginButtonClicked.
+
+ * UIProcess/Plugins/PluginInfoStore.cpp:
+ (WebKit::PluginInfoStore::shouldBlockPlugin):
+ Non-Mac version, always return false.
+
+ * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
+ (WebKit::PluginInfoStore::shouldBlockPlugin):
+ Call WKShouldBlockPlugin.
+
+ * UIProcess/WebContext.cpp:
+ (WebKit::WebContext::getPluginPath):
+ Check if the plug-in should be blocked.
+
+ * UIProcess/WebContext.messages.in:
+ GetPluginPath now takes an additional out parameter, a boolean that determines whether the plug-in
+ should be blocked from loading or not.
+
+ * UIProcess/WebLoaderClient.cpp:
+ (WebKit::WebLoaderClient::didFailToInitializePlugin):
+ Call m_client.pluginDidFail.
+
+ (WebKit::WebLoaderClient::didBlockInsecurePluginVersion):
+ Ditto.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::unavailablePluginButtonClicked):
+ Call the loader client.
+
+ (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
+ Ditto.
+
+ * UIProcess/WebPageProxy.messages.in:
+ Rename MissingPluginButtonClicked to UnavailablePluginButtonClicked and add a new DidBlockInsecurePluginVersion message.
+
+ * UIProcess/WebUIClient.cpp:
+ (WebKit::WebUIClient::unavailablePluginButtonClicked):
+ Call missingPluginButtonClicked and unavailablePluginButtonClicked.
+
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::shouldUnavailablePluginMessageBeButton):
+ (WebKit::WebChromeClient::unavailablePluginButtonClicked):
+ Handle RenderEmbeddedObject::InsecurePluginVersion.
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::createPlugin):
+ WebPage::createPlugin now takes the plug-in element.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::createPlugin):
+ If the plug-in is blocked, set the appropriate unavailability reason.
+
+ * WebProcess/WebProcess.cpp:
+ (WebKit::canPluginHandleResponse):
+ Update now that GetPluginPath returns a blocked parameter as well.
+
+2012-05-10 Anders Carlsson <[email protected]>
+
Rename the missing plug-in indicator to the unavailable plug-in indicator
https://bugs.webkit.org/show_bug.cgi?id=86136
Modified: trunk/Source/WebKit2/Shared/API/c/WKError.h (116715 => 116716)
--- trunk/Source/WebKit2/Shared/API/c/WKError.h 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/Shared/API/c/WKError.h 2012-05-11 01:49:40 UTC (rev 116716)
@@ -42,6 +42,7 @@
kWKErrorCodeJavaUnavailable = 202,
kWKErrorCodePlugInCancelledConnection = 203,
kWKErrorCodePlugInWillHandleLoad = 204,
+ kWKErrorCodeInsecurePlugInVersion = 205,
};
typedef uint32_t WKErrorCode;
Modified: trunk/Source/WebKit2/Shared/APIClientTraits.cpp (116715 => 116716)
--- trunk/Source/WebKit2/Shared/APIClientTraits.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/Shared/APIClientTraits.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -52,7 +52,7 @@
};
const size_t APIClientTraits<WKPageLoaderClient>::interfaceSizesByVersion[] = {
- offsetof(WKPageLoaderClient, didFailToInitializePlugin),
+ offsetof(WKPageLoaderClient, didFailToInitializePlugin_deprecatedForUseWithV0),
sizeof(WKPageLoaderClient)
};
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.h (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.h 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.h 2012-05-11 01:49:40 UTC (rev 116716)
@@ -27,6 +27,7 @@
#define WKPage_h
#include <WebKit2/WKBase.h>
+#include <WebKit2/WKError.h>
#include <WebKit2/WKEvent.h>
#include <WebKit2/WKFindOptions.h>
#include <WebKit2/WKGeometry.h>
@@ -69,10 +70,13 @@
typedef void (*WKPageDidReceiveAuthenticationChallengeInFrameCallback)(WKPageRef page, WKFrameRef frame, WKAuthenticationChallengeRef authenticationChallenge, const void *clientInfo);
typedef void (*WKPageDidChangeBackForwardListCallback)(WKPageRef page, WKBackForwardListItemRef addedItem, WKArrayRef removedItems, const void *clientInfo);
typedef bool (*WKPageShouldGoToBackForwardListItemCallback)(WKPageRef page, WKBackForwardListItemRef item, const void *clientInfo);
-typedef void (*WKPageDidFailToInitializePluginCallback)(WKPageRef page, WKStringRef mimeType, const void* clientInfo);
typedef void (*WKPageDidNewFirstVisuallyNonEmptyLayoutCallback)(WKPageRef page, WKTypeRef userData, const void *clientInfo);
typedef void (*WKPageWillGoToBackForwardListItemCallback)(WKPageRef page, WKBackForwardListItemRef item, WKTypeRef userData, const void *clientInfo);
+typedef void (*WKPagePluginDidFailCallback)(WKPageRef page, WKErrorCode errorCode, WKStringRef mimeType, const void* clientInfo);
+// Deprecated
+typedef void (*WKPageDidFailToInitializePluginCallback_deprecatedForUseWithV0)(WKPageRef page, WKStringRef mimeType, const void* clientInfo);
+
struct WKPageLoaderClient {
int version;
const void * clientInfo;
@@ -104,7 +108,7 @@
WKPageCallback processDidCrash;
WKPageDidChangeBackForwardListCallback didChangeBackForwardList;
WKPageShouldGoToBackForwardListItemCallback shouldGoToBackForwardListItem;
- WKPageDidFailToInitializePluginCallback didFailToInitializePlugin;
+ WKPageDidFailToInitializePluginCallback_deprecatedForUseWithV0 didFailToInitializePlugin_deprecatedForUseWithV0;
// Version 1
WKPageDidDetectXSSForFrameCallback didDetectXSSForFrame;
@@ -115,6 +119,7 @@
WKPageWillGoToBackForwardListItemCallback willGoToBackForwardListItem;
WKPageCallback interactionOccurredWhileProcessUnresponsive;
+ WKPagePluginDidFailCallback pluginDidFail;
};
typedef struct WKPageLoaderClient WKPageLoaderClient;
@@ -172,6 +177,13 @@
enum { kWKPageResourceLoadClientCurrentVersion = 0 };
+enum {
+ kWKPluginUnavailabilityReasonPluginMissing,
+ kWKPluginUnavailabilityReasonPluginCrashed,
+ kWKPluginUnavailabilityReasonInsecurePluginVersion
+};
+typedef uint32_t WKPluginUnavailabilityReason;
+
// UI Client
typedef WKPageRef (*WKPageCreateNewPageCallback)(WKPageRef page, WKURLRequestRef urlRequest, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton mouseButton, const void *clientInfo);
typedef void (*WKPageRunJavaScriptAlertCallback)(WKPageRef page, WKStringRef alertText, WKFrameRef frame, const void *clientInfo);
@@ -182,7 +194,6 @@
typedef void (*WKPageUnfocusCallback)(WKPageRef page, const void *clientInfo);
typedef void (*WKPageSetStatusTextCallback)(WKPageRef page, WKStringRef text, const void *clientInfo);
typedef void (*WKPageMouseDidMoveOverElementCallback)(WKPageRef page, WKHitTestResultRef hitTestResult, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo);
-typedef void (*WKPageMissingPluginButtonClickedCallback)(WKPageRef page, WKStringRef mimeType, WKStringRef url, WKStringRef pluginsPageURL, const void* clientInfo);
typedef void (*WKPageDidNotHandleKeyEventCallback)(WKPageRef page, WKNativeEventPtr event, const void *clientInfo);
typedef void (*WKPageDidNotHandleWheelEventCallback)(WKPageRef page, WKNativeEventPtr event, const void *clientInfo);
typedef bool (*WKPageGetToolbarsAreVisibleCallback)(WKPageRef page, const void *clientInfo);
@@ -207,10 +218,12 @@
typedef void (*WKPageSaveDataToFileInDownloadsFolderCallback)(WKPageRef page, WKStringRef suggestedFilename, WKStringRef mimeType, WKURLRef originatingURL, WKDataRef data, const void* clientInfo);
typedef bool (*WKPageShouldInterruptJavaScriptCallback)(WKPageRef page, const void *clientInfo);
typedef void (*WKPageDecidePolicyForNotificationPermissionRequestCallback)(WKPageRef page, WKSecurityOriginRef origin, WKNotificationPermissionRequestRef permissionRequest, const void *clientInfo);
+typedef void (*WKPageUnavailablePluginButtonClickedCallback)(WKPageRef page, WKPluginUnavailabilityReason pluginUnavailabilityReason, WKStringRef mimeType, WKStringRef url, WKStringRef pluginsPageURL, const void* clientInfo);
// Deprecated
typedef WKPageRef (*WKPageCreateNewPageCallback_deprecatedForUseWithV0)(WKPageRef page, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton mouseButton, const void *clientInfo);
typedef void (*WKPageMouseDidMoveOverElementCallback_deprecatedForUseWithV0)(WKPageRef page, WKEventModifiers modifiers, WKTypeRef userData, const void *clientInfo);
+typedef void (*WKPageMissingPluginButtonClickedCallback_deprecatedForUseWithV0)(WKPageRef page, WKStringRef mimeType, WKStringRef url, WKStringRef pluginsPageURL, const void* clientInfo);
struct WKPageUIClient {
int version;
@@ -228,7 +241,7 @@
WKPageRunJavaScriptPromptCallback runJavaScriptPrompt;
WKPageSetStatusTextCallback setStatusText;
WKPageMouseDidMoveOverElementCallback_deprecatedForUseWithV0 mouseDidMoveOverElement_deprecatedForUseWithV0;
- WKPageMissingPluginButtonClickedCallback missingPluginButtonClicked;
+ WKPageMissingPluginButtonClickedCallback_deprecatedForUseWithV0 missingPluginButtonClicked_deprecatedForUseWithV0;
WKPageDidNotHandleKeyEventCallback didNotHandleKeyEvent;
WKPageDidNotHandleWheelEventCallback didNotHandleWheelEvent;
WKPageGetToolbarsAreVisibleCallback toolbarsAreVisible;
@@ -261,6 +274,7 @@
WKPageCreateNewPageCallback createNewPage;
WKPageMouseDidMoveOverElementCallback mouseDidMoveOverElement;
WKPageDecidePolicyForNotificationPermissionRequestCallback decidePolicyForNotificationPermissionRequest;
+ WKPageUnavailablePluginButtonClickedCallback unavailablePluginButtonClicked;
};
typedef struct WKPageUIClient WKPageUIClient;
Modified: trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -174,6 +174,11 @@
}
#if !PLATFORM(MAC)
+bool PluginInfoStore::shouldBlockPlugin(const PluginModuleInfo&) const
+{
+ return false;
+}
+
String PluginInfoStore::getMIMETypeForExtension(const String& extension)
{
return MIMETypeRegistry::getMIMETypeForExtension(extension);
Modified: trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h 2012-05-11 01:49:40 UTC (rev 116716)
@@ -53,8 +53,11 @@
// Returns the info for the plug-in with the given path.
PluginModuleInfo infoForPluginWithPath(const String& pluginPath) const;
+ // Return whether this plug-in should be blocked from being instantiated.
+ // Note that the plug-in will still be seen by e.g. navigator.plugins
+ bool shouldBlockPlugin(const PluginModuleInfo&) const;
+
private:
-
PluginModuleInfo findPluginForMIMEType(const String& mimeType) const;
PluginModuleInfo findPluginForExtension(const String& extension, String& mimeType) const;
Modified: trunk/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm 2012-05-11 01:49:40 UTC (rev 116716)
@@ -89,6 +89,11 @@
return true;
}
+bool PluginInfoStore::shouldBlockPlugin(const PluginModuleInfo& plugin) const
+{
+ return WKShouldBlockPlugin(plugin.bundleIdentifier, plugin.versionString);
+}
+
String PluginInfoStore::getMIMETypeForExtension(const String& extension)
{
// FIXME: This should just call MIMETypeRegistry::getMIMETypeForExtension and be
Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebContext.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -620,7 +620,7 @@
#endif
}
-void WebContext::getPluginPath(const String& mimeType, const String& urlString, String& pluginPath)
+void WebContext::getPluginPath(const String& mimeType, const String& urlString, String& pluginPath, bool& blocked)
{
MESSAGE_CHECK_URL(urlString);
@@ -630,6 +630,12 @@
if (!plugin.path)
return;
+ blocked = false;
+ if (pluginInfoStore().shouldBlockPlugin(plugin)) {
+ blocked = true;
+ return;
+ }
+
pluginPath = plugin.path;
}
Modified: trunk/Source/WebKit2/UIProcess/WebContext.h (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebContext.h 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebContext.h 2012-05-11 01:49:40 UTC (rev 116716)
@@ -217,7 +217,7 @@
// Plugins
void getPlugins(bool refresh, Vector<WebCore::PluginInfo>&);
- void getPluginPath(const String& mimeType, const String& urlString, String& pluginPath);
+ void getPluginPath(const String& mimeType, const String& urlString, String& pluginPath, bool& blocked);
#if !ENABLE(PLUGIN_PROCESS)
void didGetSitesWithPluginData(const Vector<String>& sites, uint64_t callbackID);
void didClearPluginSiteData(uint64_t callbackID);
Modified: trunk/Source/WebKit2/UIProcess/WebContext.messages.in (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebContext.messages.in 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebContext.messages.in 2012-05-11 01:49:40 UTC (rev 116716)
@@ -33,7 +33,7 @@
# Plugin messages.
GetPlugins(bool refresh) -> (Vector<WebCore::PluginInfo> plugins)
- GetPluginPath(WTF::String mimeType, WTF::String urlString) -> (WTF::String pluginPath)
+ GetPluginPath(WTF::String mimeType, WTF::String urlString) -> (WTF::String pluginPath, bool blocked)
#if !ENABLE(PLUGIN_PROCESS)
void DidGetSitesWithPluginData(Vector<WTF::String> sites, uint64_t callbackID)
Modified: trunk/Source/WebKit2/UIProcess/WebLoaderClient.cpp (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebLoaderClient.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebLoaderClient.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -266,10 +266,21 @@
void WebLoaderClient::didFailToInitializePlugin(WebPageProxy* page, const String& mimeType)
{
- if (!m_client.didFailToInitializePlugin)
+ if (m_client.didFailToInitializePlugin_deprecatedForUseWithV0)
+ m_client.didFailToInitializePlugin_deprecatedForUseWithV0(toAPI(page), toAPI(mimeType.impl()), m_client.clientInfo);
+
+ if (!m_client.pluginDidFail)
return;
- m_client.didFailToInitializePlugin(toAPI(page), toAPI(mimeType.impl()), m_client.clientInfo);
+ m_client.pluginDidFail(toAPI(page), kWKErrorCodeCannotLoadPlugIn, toAPI(mimeType.impl()), m_client.clientInfo);
}
+void WebLoaderClient::didBlockInsecurePluginVersion(WebPageProxy* page, const String& mimeType)
+{
+ if (!m_client.pluginDidFail)
+ return;
+
+ m_client.pluginDidFail(toAPI(page), kWKErrorCodeInsecurePlugInVersion, toAPI(mimeType.impl()), m_client.clientInfo);
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/WebLoaderClient.h (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebLoaderClient.h 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebLoaderClient.h 2012-05-11 01:49:40 UTC (rev 116716)
@@ -87,6 +87,7 @@
void willGoToBackForwardListItem(WebPageProxy*, WebBackForwardListItem*, APIObject*);
void didFailToInitializePlugin(WebPageProxy*, const String& mimeType);
+ void didBlockInsecurePluginVersion(WebPageProxy*, const String& mimeType);
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -2399,12 +2399,13 @@
m_uiClient.mouseDidMoveOverElement(this, hitTestResultData, modifiers, userData.get());
}
-void WebPageProxy::missingPluginButtonClicked(const String& mimeType, const String& url, const String& pluginsPageURL)
+void WebPageProxy::unavailablePluginButtonClicked(uint32_t opaquePluginUnavailabilityReason, const String& mimeType, const String& url, const String& pluginsPageURL)
{
MESSAGE_CHECK_URL(url);
MESSAGE_CHECK_URL(pluginsPageURL);
- m_uiClient.missingPluginButtonClicked(this, mimeType, url, pluginsPageURL);
+ WKPluginUnavailabilityReason pluginUnavailabilityReason = static_cast<WKPluginUnavailabilityReason>(opaquePluginUnavailabilityReason);
+ m_uiClient.unavailablePluginButtonClicked(this, pluginUnavailabilityReason, mimeType, url, pluginsPageURL);
}
void WebPageProxy::setToolbarsAreVisible(bool toolbarsAreVisible)
@@ -3620,6 +3621,11 @@
m_loaderClient.didFailToInitializePlugin(this, mimeType);
}
+void WebPageProxy::didBlockInsecurePluginVersion(const String& mimeType)
+{
+ m_loaderClient.didBlockInsecurePluginVersion(this, mimeType);
+}
+
bool WebPageProxy::willHandleHorizontalScrollEvents() const
{
return !m_canShortCircuitHorizontalWheelEvents;
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2012-05-11 01:49:40 UTC (rev 116716)
@@ -718,7 +718,7 @@
void shouldInterruptJavaScript(bool& result);
void setStatusText(const String&);
void mouseDidMoveOverElement(const WebHitTestResult::Data& hitTestResultData, uint32_t modifiers, CoreIPC::ArgumentDecoder*);
- void missingPluginButtonClicked(const String& mimeType, const String& url, const String& pluginsPageURL);
+ void unavailablePluginButtonClicked(uint32_t opaquePluginUnavailabilityReason, const String& mimeType, const String& url, const String& pluginsPageURL);
void setToolbarsAreVisible(bool toolbarsAreVisible);
void getToolbarsAreVisible(bool& toolbarsAreVisible);
void setMenuBarIsVisible(bool menuBarIsVisible);
@@ -745,6 +745,7 @@
void didChangeScrollOffsetPinningForMainFrame(bool pinnedToLeftSide, bool pinnedToRightSide);
void didChangePageCount(unsigned);
void didFailToInitializePlugin(const String& mimeType);
+ void didBlockInsecurePluginVersion(const String& mimeType);
void setCanShortCircuitHorizontalWheelEvents(bool canShortCircuitHorizontalWheelEvents) { m_canShortCircuitHorizontalWheelEvents = canShortCircuitHorizontalWheelEvents; }
void reattachToWebProcess();
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2012-05-11 01:49:40 UTC (rev 116716)
@@ -30,7 +30,7 @@
RunJavaScriptPrompt(uint64_t frameID, WTF::String message, WTF::String defaultValue) -> (WTF::String result)
ShouldInterruptJavaScript() -> (bool shouldInterupt)
MouseDidMoveOverElement(WebKit::WebHitTestResult::Data hitTestResultData, uint32_t modifiers, WebKit::InjectedBundleUserMessageEncoder userData);
- MissingPluginButtonClicked(WTF::String mimeType, WTF::String url, WTF::String pluginsPageURL)
+ UnavailablePluginButtonClicked(uint32_t pluginUnavailabilityReason, WTF::String mimeType, WTF::String url, WTF::String pluginsPageURL)
DidChangeViewportProperties(WebCore::ViewportAttributes attributes)
DidReceiveEvent(uint32_t type, bool handled)
StopResponsivenessTimer()
@@ -66,6 +66,7 @@
DidChangeScrollOffsetPinningForMainFrame(bool hasHorizontalScrollbar, bool hasVerticalScrollbar)
DidChangePageCount(unsigned pageCount);
DidFailToInitializePlugin(WTF::String mimeType)
+ DidBlockInsecurePluginVersion(WTF::String mimeType)
SetCanShortCircuitHorizontalWheelEvents(bool canShortCircuitHorizontalWheelEvents)
#if USE(TILED_BACKING_STORE)
Modified: trunk/Source/WebKit2/UIProcess/WebUIClient.cpp (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebUIClient.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebUIClient.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -174,12 +174,18 @@
m_client.mouseDidMoveOverElement(toAPI(page), toAPI(webHitTestResult.get()), toAPI(modifiers), toAPI(userData), m_client.clientInfo);
}
-void WebUIClient::missingPluginButtonClicked(WebPageProxy* page, const String& mimeType, const String& url, const String& pluginsPageURL)
+void WebUIClient::unavailablePluginButtonClicked(WebPageProxy* page, WKPluginUnavailabilityReason pluginUnavailabilityReason, const String& mimeType, const String& url, const String& pluginsPageURL)
{
- if (!m_client.missingPluginButtonClicked)
+ if (pluginUnavailabilityReason == kWKPluginUnavailabilityReasonPluginMissing) {
+ if (m_client.missingPluginButtonClicked_deprecatedForUseWithV0)
+ m_client.missingPluginButtonClicked_deprecatedForUseWithV0(toAPI(page), toAPI(mimeType.impl()), toAPI(url.impl()), toAPI(pluginsPageURL.impl()), m_client.clientInfo);
+ }
+
+ if (!m_client.unavailablePluginButtonClicked)
return;
- m_client.missingPluginButtonClicked(toAPI(page), toAPI(mimeType.impl()), toAPI(url.impl()), toAPI(pluginsPageURL.impl()), m_client.clientInfo);
+ m_client.unavailablePluginButtonClicked(toAPI(page), pluginUnavailabilityReason, toAPI(mimeType.impl()), toAPI(url.impl()), toAPI(pluginsPageURL.impl()), m_client.clientInfo);
+
}
bool WebUIClient::implementsDidNotHandleKeyEvent() const
Modified: trunk/Source/WebKit2/UIProcess/WebUIClient.h (116715 => 116716)
--- trunk/Source/WebKit2/UIProcess/WebUIClient.h 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/UIProcess/WebUIClient.h 2012-05-11 01:49:40 UTC (rev 116716)
@@ -70,7 +70,7 @@
void setStatusText(WebPageProxy*, const String&);
void mouseDidMoveOverElement(WebPageProxy*, const WebHitTestResult::Data&, WebEvent::Modifiers, APIObject*);
- void missingPluginButtonClicked(WebPageProxy*, const String& mimeType, const String& url, const String& pluginsPageURL);
+ void unavailablePluginButtonClicked(WebPageProxy*, WKPluginUnavailabilityReason, const String& mimeType, const String& url, const String& pluginsPageURL);
bool implementsDidNotHandleKeyEvent() const;
void didNotHandleKeyEvent(WebPageProxy*, const NativeWebKeyboardEvent&);
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp (116715 => 116716)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -470,7 +470,7 @@
bool WebChromeClient::shouldUnavailablePluginMessageBeButton(RenderEmbeddedObject::PluginUnavailabilityReason pluginUnavailabilityReason) const
{
- if (pluginUnavailabilityReason == RenderEmbeddedObject::PluginMissing) {
+ if (pluginUnavailabilityReason == RenderEmbeddedObject::PluginMissing || pluginUnavailabilityReason == RenderEmbeddedObject::InsecurePluginVersion) {
// FIXME: <rdar://problem/8794397> We should only return true when there is a
// missingPluginButtonClicked callback defined on the Page UI client.
return true;
@@ -482,12 +482,11 @@
void WebChromeClient::unavailablePluginButtonClicked(Element* element, RenderEmbeddedObject::PluginUnavailabilityReason pluginUnavailabilityReason) const
{
ASSERT(element->hasTagName(objectTag) || element->hasTagName(embedTag));
- ASSERT(pluginUnavailabilityReason == RenderEmbeddedObject::PluginMissing);
+ ASSERT(pluginUnavailabilityReason == RenderEmbeddedObject::PluginMissing || pluginUnavailabilityReason == RenderEmbeddedObject::InsecurePluginVersion);
HTMLPlugInImageElement* pluginElement = static_cast<HTMLPlugInImageElement*>(element);
- if (pluginUnavailabilityReason == RenderEmbeddedObject::PluginMissing)
- m_page->send(Messages::WebPageProxy::MissingPluginButtonClicked(pluginElement->serviceType(), pluginElement->url(), pluginElement->getAttribute(pluginspageAttr)));
+ m_page->send(Messages::WebPageProxy::UnavailablePluginButtonClicked(pluginUnavailabilityReason, pluginElement->serviceType(), pluginElement->url(), pluginElement->getAttribute(pluginspageAttr)));
}
void WebChromeClient::scrollbarsModeDidChange() const
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (116715 => 116716)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -1317,7 +1317,7 @@
}
#endif
- RefPtr<Plugin> plugin = webPage->createPlugin(m_frame, parameters);
+ RefPtr<Plugin> plugin = webPage->createPlugin(m_frame, pluginElement, parameters);
if (!plugin)
return 0;
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (116715 => 116716)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -91,6 +91,7 @@
#include <WebCore/FrameView.h>
#include <WebCore/HTMLFormElement.h>
#include <WebCore/HTMLInputElement.h>
+#include <WebCore/HTMLPlugInElement.h>
#include <WebCore/HistoryItem.h>
#include <WebCore/KeyboardEvent.h>
#include <WebCore/MouseEvent.h>
@@ -385,16 +386,25 @@
}
#endif
-PassRefPtr<Plugin> WebPage::createPlugin(WebFrame* frame, const Plugin::Parameters& parameters)
+PassRefPtr<Plugin> WebPage::createPlugin(WebFrame* frame, HTMLPlugInElement* pluginElement, const Plugin::Parameters& parameters)
{
String pluginPath;
+ bool blocked;
if (!WebProcess::shared().connection()->sendSync(
Messages::WebContext::GetPluginPath(parameters.mimeType, parameters.url.string()),
- Messages::WebContext::GetPluginPath::Reply(pluginPath), 0)) {
+ Messages::WebContext::GetPluginPath::Reply(pluginPath, blocked), 0)) {
return 0;
}
+ if (blocked) {
+ if (pluginElement->renderer()->isEmbeddedObject())
+ toRenderEmbeddedObject(pluginElement->renderer())->setPluginUnavailabilityReason(RenderEmbeddedObject::InsecurePluginVersion);
+
+ send(Messages::WebPageProxy::DidBlockInsecurePluginVersion(parameters.mimeType));
+ return 0;
+ }
+
if (pluginPath.isNull()) {
#if PLATFORM(MAC)
if (parameters.mimeType == "application/pdf"
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (116715 => 116716)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h 2012-05-11 01:49:40 UTC (rev 116716)
@@ -103,6 +103,7 @@
class GraphicsContext;
class Frame;
class FrameView;
+ class HTMLPlugInElement;
class KeyboardEvent;
class Page;
class PrintContext;
@@ -256,7 +257,7 @@
WebCore::Frame* mainFrame() const; // May return 0.
WebCore::FrameView* mainFrameView() const; // May return 0.
- PassRefPtr<Plugin> createPlugin(WebFrame*, const Plugin::Parameters&);
+ PassRefPtr<Plugin> createPlugin(WebFrame*, WebCore::HTMLPlugInElement*, const Plugin::Parameters&);
EditorState editorState() const;
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (116715 => 116716)
--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -764,11 +764,12 @@
static bool canPluginHandleResponse(const ResourceResponse& response)
{
String pluginPath;
+ bool blocked;
- if (!WebProcess::shared().connection()->sendSync(Messages::WebContext::GetPluginPath(response.mimeType(), response.url().string()), Messages::WebContext::GetPluginPath::Reply(pluginPath), 0))
+ if (!WebProcess::shared().connection()->sendSync(Messages::WebContext::GetPluginPath(response.mimeType(), response.url().string()), Messages::WebContext::GetPluginPath::Reply(pluginPath, blocked), 0))
return false;
- return !pluginPath.isEmpty();
+ return !blocked && !pluginPath.isEmpty();
}
bool WebProcess::shouldUseCustomRepresentationForResponse(const ResourceResponse& response) const
Modified: trunk/Tools/ChangeLog (116715 => 116716)
--- trunk/Tools/ChangeLog 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Tools/ChangeLog 2012-05-11 01:49:40 UTC (rev 116716)
@@ -1,3 +1,19 @@
+2012-05-10 Anders Carlsson <[email protected]>
+
+ WebKit2: Add a way to blacklist specific plug-ins/plug-in versions
+ https://bugs.webkit.org/show_bug.cgi?id=86164
+ <rdar://problem/9551196>
+
+ Reviewed by Sam Weinig.
+
+ Update for WK2 API changes.
+
+ * MiniBrowser/mac/BrowserWindowController.m:
+ (-[BrowserWindowController awakeFromNib]):
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::createOtherPage):
+ (WTR::TestController::initialize):
+
2012-05-10 Dirk Pranke <[email protected]>
nrwt: [chromium] fix path to asan symbolize script
Modified: trunk/Tools/MiniBrowser/mac/BrowserWindowController.m (116715 => 116716)
--- trunk/Tools/MiniBrowser/mac/BrowserWindowController.m 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Tools/MiniBrowser/mac/BrowserWindowController.m 2012-05-11 01:49:40 UTC (rev 116716)
@@ -611,6 +611,7 @@
0, // didNewFirstVisuallyNonEmptyLayout
0, // willGoToBackForwardListItem
0, // interactionOccurredWhileProcessUnresponsive
+ 0, // pluginDidFail
};
WKPageSetPageLoaderClient(_webView.pageRef, &loadClient);
@@ -669,6 +670,7 @@
createNewPage,
mouseDidMoveOverElement,
0, // decidePolicyForNotificationPermissionRequest
+ 0, // unavailablePluginButtonClicked
};
WKPageSetPageUIClient(_webView.pageRef, &uiClient);
}
Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (116715 => 116716)
--- trunk/Tools/WebKitTestRunner/TestController.cpp 2012-05-11 01:45:47 UTC (rev 116715)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp 2012-05-11 01:49:40 UTC (rev 116716)
@@ -212,6 +212,7 @@
createOtherPage,
0, // mouseDidMoveOverElement
0, // decidePolicyForNotificationPermissionRequest
+ 0, // unavailablePluginButtonClicked
};
WKPageSetPageUIClient(newPage, &otherPageUIClient);
@@ -371,6 +372,7 @@
createOtherPage,
0, // mouseDidMoveOverElement
0, // decidePolicyForNotificationPermissionRequest
+ 0, // unavailablePluginButtonClicked
};
WKPageSetPageUIClient(m_mainWebView->page(), &pageUIClient);
@@ -406,6 +408,7 @@
0, // didNewFirstVisuallyNonEmptyLayout
0, // willGoToBackForwardListItem
0, // interactionOccurredWhileProcessUnresponsive
+ 0, // pluginDidFail
};
WKPageSetPageLoaderClient(m_mainWebView->page(), &pageLoaderClient);
}