- Revision
- 141923
- Author
- [email protected]
- Date
- 2013-02-05 13:26:51 -0800 (Tue, 05 Feb 2013)
Log Message
WebKit clients should be able to override loading of blocked plug-ins
https://bugs.webkit.org/show_bug.cgi?id=108968
<rdar://problem/13154516>
Reviewed by Sam Weinig.
Replace the shouldInstantiatePlugin callback with a new pluginLoadPolicy which is called regardless
of whether the plug-in is blocked or not. This lets clients override the plug-in load policy and
force loading of blacklisted plug-ins (and vice versa).
* UIProcess/API/C/WKPage.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::getPluginPath):
* UIProcess/WebUIClient.cpp:
(WebKit::toWKPluginLoadPolicy):
(WebKit):
(WebKit::toPluginModuleLoadPolicy):
(WebKit::WebUIClient::pluginLoadPolicy):
* UIProcess/WebUIClient.h:
(WebUIClient):
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (141922 => 141923)
--- trunk/Source/WebKit2/ChangeLog 2013-02-05 21:16:43 UTC (rev 141922)
+++ trunk/Source/WebKit2/ChangeLog 2013-02-05 21:26:51 UTC (rev 141923)
@@ -1,3 +1,26 @@
+2013-02-05 Anders Carlsson <[email protected]>
+
+ WebKit clients should be able to override loading of blocked plug-ins
+ https://bugs.webkit.org/show_bug.cgi?id=108968
+ <rdar://problem/13154516>
+
+ Reviewed by Sam Weinig.
+
+ Replace the shouldInstantiatePlugin callback with a new pluginLoadPolicy which is called regardless
+ of whether the plug-in is blocked or not. This lets clients override the plug-in load policy and
+ force loading of blacklisted plug-ins (and vice versa).
+
+ * UIProcess/API/C/WKPage.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::getPluginPath):
+ * UIProcess/WebUIClient.cpp:
+ (WebKit::toWKPluginLoadPolicy):
+ (WebKit):
+ (WebKit::toPluginModuleLoadPolicy):
+ (WebKit::WebUIClient::pluginLoadPolicy):
+ * UIProcess/WebUIClient.h:
+ (WebUIClient):
+
2013-02-05 Simon Hausmann <[email protected]>
[Qt][WK2] Replace more uses of WebPageProxy with WKPage in QQuickWebView
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.h (141922 => 141923)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.h 2013-02-05 21:16:43 UTC (rev 141922)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.h 2013-02-05 21:26:51 UTC (rev 141923)
@@ -171,6 +171,13 @@
};
typedef uint32_t WKPluginUnavailabilityReason;
+enum {
+ kWKPluginLoadPolicyLoadNormally = 0,
+ kWKPluginLoadPolicyBlocked,
+ kWKPluginLoadPolicyInactive,
+};
+typedef uint32_t WKPluginLoadPolicy;
+
// 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);
@@ -208,7 +215,7 @@
typedef void (*WKPageUnavailablePluginButtonClickedCallback)(WKPageRef page, WKPluginUnavailabilityReason pluginUnavailabilityReason, WKStringRef mimeType, WKStringRef url, WKStringRef pluginsPageURL, const void* clientInfo);
typedef void (*WKPageShowColorPickerCallback)(WKPageRef page, WKStringRef initialColor, WKColorPickerResultListenerRef listener, const void* clientInfo);
typedef void (*WKPageHideColorPickerCallback)(WKPageRef page, const void* clientInfo);
-typedef bool (*WKPageShouldInstantiatePluginCallback)(WKPageRef page, WKStringRef identifier, WKStringRef displayName, const void* clientInfo);
+typedef WKPluginLoadPolicy (*WKPagePluginLoadPolicyCallback)(WKPageRef page, WKStringRef identifier, WKStringRef displayName, WKPluginLoadPolicy currentPluginLoadPolicy, const void* clientInfo);
// Deprecated
typedef WKPageRef (*WKPageCreateNewPageCallback_deprecatedForUseWithV0)(WKPageRef page, WKDictionaryRef features, WKEventModifiers modifiers, WKEventMouseButton mouseButton, const void *clientInfo);
@@ -269,7 +276,7 @@
// Version 2
WKPageShowColorPickerCallback showColorPicker;
WKPageHideColorPickerCallback hideColorPicker;
- WKPageShouldInstantiatePluginCallback shouldInstantiatePlugin;
+ WKPagePluginLoadPolicyCallback pluginLoadPolicy;
};
typedef struct WKPageUIClient WKPageUIClient;
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (141922 => 141923)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-02-05 21:16:43 UTC (rev 141922)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-02-05 21:26:51 UTC (rev 141923)
@@ -1233,14 +1233,14 @@
return;
pluginLoadPolicy = PluginInfoStore::policyForPlugin(plugin);
- if (pluginLoadPolicy != PluginModuleLoadNormally)
- return;
#if PLATFORM(MAC)
- pluginLoadPolicy = m_uiClient.shouldInstantiatePlugin(this, plugin.bundleIdentifier, plugin.info.name) ? PluginModuleLoadNormally : PluginModuleBlocked;
+ PluginModuleLoadPolicy currentPluginLoadPolicy = static_cast<PluginModuleLoadPolicy>(pluginLoadPolicy);
+ pluginLoadPolicy = m_uiClient.pluginLoadPolicy(this, plugin.bundleIdentifier, plugin.info.name, currentPluginLoadPolicy);
+#endif
+
if (pluginLoadPolicy != PluginModuleLoadNormally)
return;
-#endif
pluginPath = plugin.path;
}
Modified: trunk/Source/WebKit2/UIProcess/WebUIClient.cpp (141922 => 141923)
--- trunk/Source/WebKit2/UIProcess/WebUIClient.cpp 2013-02-05 21:16:43 UTC (rev 141922)
+++ trunk/Source/WebKit2/UIProcess/WebUIClient.cpp 2013-02-05 21:26:51 UTC (rev 141923)
@@ -438,12 +438,42 @@
}
#endif
-bool WebUIClient::shouldInstantiatePlugin(WebPageProxy* page, const String& identifier, const String& displayName)
+static inline WKPluginLoadPolicy toWKPluginLoadPolicy(PluginModuleLoadPolicy pluginModuleLoadPolicy)
{
- if (!m_client.shouldInstantiatePlugin)
- return true;
+ switch (pluginModuleLoadPolicy) {
+ case PluginModuleLoadNormally:
+ return kWKPluginLoadPolicyLoadNormally;
+ case PluginModuleBlocked:
+ return kWKPluginLoadPolicyBlocked;
+ case PluginModuleInactive:
+ return kWKPluginLoadPolicyInactive;
+ }
- return m_client.shouldInstantiatePlugin(toAPI(page), toAPI(identifier.impl()), toAPI(displayName.impl()), m_client.clientInfo);
+ ASSERT_NOT_REACHED();
+ return kWKPluginLoadPolicyBlocked;
}
+static inline PluginModuleLoadPolicy toPluginModuleLoadPolicy(WKPluginLoadPolicy pluginLoadPolicy)
+{
+ switch (pluginLoadPolicy) {
+ case kWKPluginLoadPolicyLoadNormally:
+ return PluginModuleLoadNormally;
+ case kWKPluginLoadPolicyBlocked:
+ return PluginModuleBlocked;
+ case kWKPluginLoadPolicyInactive:
+ return PluginModuleInactive;
+ }
+
+ ASSERT_NOT_REACHED();
+ return PluginModuleBlocked;
+}
+
+PluginModuleLoadPolicy WebUIClient::pluginLoadPolicy(WebPageProxy* page, const String& identifier, const String& displayName, PluginModuleLoadPolicy currentPluginLoadPolicy)
+{
+ if (!m_client.pluginLoadPolicy)
+ return currentPluginLoadPolicy;
+
+ return toPluginModuleLoadPolicy(m_client.pluginLoadPolicy(toAPI(page), toAPI(identifier.impl()), toAPI(displayName.impl()), toWKPluginLoadPolicy(currentPluginLoadPolicy), m_client.clientInfo));
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/WebUIClient.h (141922 => 141923)
--- trunk/Source/WebKit2/UIProcess/WebUIClient.h 2013-02-05 21:16:43 UTC (rev 141922)
+++ trunk/Source/WebKit2/UIProcess/WebUIClient.h 2013-02-05 21:26:51 UTC (rev 141923)
@@ -27,6 +27,7 @@
#define WebUIClient_h
#include "APIClient.h"
+#include "PluginModuleInfo.h"
#include "WKPage.h"
#include "WebEvent.h"
#include "WebHitTestResult.h"
@@ -122,7 +123,7 @@
bool hideColorPicker(WebPageProxy*);
#endif
- bool shouldInstantiatePlugin(WebPageProxy*, const String& identifier, const String& displayName);
+ PluginModuleLoadPolicy pluginLoadPolicy(WebPageProxy*, const String& identifier, const String& displayName, PluginModuleLoadPolicy currentPluginLoadPolicy);
};
} // namespace WebKit