Diff
Modified: branches/safari-537.43-branch/Source/WebKit2/ChangeLog (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/ChangeLog 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/ChangeLog 2013-06-01 23:31:58 UTC (rev 151077)
@@ -1,3 +1,70 @@
+2013-06-01 Jessie Berlin <[email protected]>
+
+ Merge r151043
+
+ 2013-05-31 Jessie Berlin <[email protected]>
+
+ Need the ability to get the information for a plug-in with a particular process id that may
+ be running on a page
+ https://bugs.webkit.org/show_bug.cgi?id=117090
+
+ Reviewed by Anders Carlsson.
+
+ * UIProcess/API/C/mac/WKPagePrivateMac.cpp:
+ (callGetInformationForPlugInWithProcessIDBlockAndDispose):
+ Get the block from the context, invoke it with the result, and dispose of it.
+ (WKPageGetInformationForPlugInWithProcessID):
+ Ask the WebPageProxy and provide it with a dictionary callback that uses the
+ above function to invoke the passed in block.
+ * UIProcess/API/C/mac/WKPagePrivateMac.h:
+ Add WKPageGetInformationForPlugInWithProcessID and a typedef for the callback block.
+
+ * UIProcess/Plugins/PluginProcessManager.h:
+ Add ways to get the PluginProcessProxy associated with a process id or process token.
+ * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
+ (WebKit::PluginProcessManager::plugInProcessWithProcessID):
+ Return the first PluginProcessProxy with the passed in process ID.
+ (WebKit::PluginProcessManager::plugInProcessWithToken):
+ Return the first PluginProcessProxy with the passed in process token.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::close):
+ Invalidate any outstanding requests for plug-in information.
+ * UIProcess/WebPageProxy.h:
+ Keep track of the callbacks for the requests for plug-in information.
+ * UIProcess/WebPageProxy.messages.in:
+ * UIProcess/mac/WebPageProxyMac.mm:
+ (WebKit::WebPageProxy::getInformationForPlugInWithProcessID):
+ If there are no known plug-ins with the provided process ID, invoke the callback with a null
+ dictionary of plug-in information.
+ Otherwise, keep track of the callback and send a message to the web process asking for the
+ information.
+ (WebKit::WebPageProxy::containsPlugInCallback):
+ If the page did not contain the plug-in, invoke the callback with a null dictionary of
+ plug-in information.
+ Invoke the callback with a dictionary containing the PlugInModuleInfo.
+
+ * WebProcess/Plugins/Netscape/NetscapePlugin.h:
+ Return 0 for the plugInProcessToken.
+ * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
+ Ditto.
+ * WebProcess/Plugins/Plugin.h:
+ Add a pure virtual method for plugInProcessToken so it can be accessed from from the Plugin
+ on the PluginView.
+ * WebProcess/Plugins/PluginProxy.h:
+ Return the actual plug-in process token.
+
+ * WebProcess/Plugins/PluginView.h:
+ (WebKit::PluginView::plugIn):
+ Make it possible to get at the plug-in process token through the Plugin.
+
+ * WebProcess/WebPage/WebPageMac.mm:
+ (WebKit::WebPage::containsPluginViewsWithPluginProcessToken):
+ If there is an instance of the plug-in with that token, send a confirmation to the ui
+ process.
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+
2013-05-31 Lucas Forschler <[email protected]>
Merge r151040
Modified: branches/safari-537.43-branch/Source/WebKit2/UIProcess/API/C/mac/WKPagePrivateMac.cpp (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/UIProcess/API/C/mac/WKPagePrivateMac.cpp 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/UIProcess/API/C/mac/WKPagePrivateMac.cpp 2013-06-01 23:31:58 UTC (rev 151077)
@@ -35,3 +35,15 @@
{
return toImpl(pageRef)->processIdentifier();
}
+
+static void callGetInformationForPlugInWithProcessIDBlockAndDispose(WKDictionaryRef resultValue, WKErrorRef error, void* context)
+{
+ WKPageGetInformationForPlugInWithProcessIDBlock block = (WKPageGetInformationForPlugInWithProcessIDBlock)context;
+ block(resultValue, error);
+ Block_release(block);
+}
+
+void WKPageGetInformationForPlugInWithProcessID(WKPageRef pageRef, pid_t plugInProcessID, WKPageGetInformationForPlugInWithProcessIDBlock block)
+{
+ toImpl(pageRef)->getInformationForPlugInWithProcessID(plugInProcessID, DictionaryCallback::create(Block_copy(block), callGetInformationForPlugInWithProcessIDBlockAndDispose));
+}
Modified: branches/safari-537.43-branch/Source/WebKit2/UIProcess/API/C/mac/WKPagePrivateMac.h (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/UIProcess/API/C/mac/WKPagePrivateMac.h 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/UIProcess/API/C/mac/WKPagePrivateMac.h 2013-06-01 23:31:58 UTC (rev 151077)
@@ -34,6 +34,9 @@
WK_EXPORT pid_t WKPageGetProcessIdentifier(WKPageRef page);
+typedef void (^WKPageGetInformationForPlugInWithProcessIDBlock)(WKDictionaryRef, WKErrorRef);
+WK_EXPORT void WKPageGetInformationForPlugInWithProcessID(WKPageRef, pid_t plugInProcessID, WKPageGetInformationForPlugInWithProcessIDBlock);
+
#ifdef __cplusplus
}
#endif
Modified: branches/safari-537.43-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h 2013-06-01 23:31:58 UTC (rev 151077)
@@ -63,6 +63,8 @@
#if PLATFORM(MAC)
void setProcessSuppressionEnabled(bool);
+ PluginProcessProxy* plugInProcessWithProcessID(pid_t plugInProcessID) const;
+ PluginProcessProxy* plugInProcessWithToken(uint64_t plugInProcessToken) const;
#endif
private:
Modified: branches/safari-537.43-branch/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessManagerMac.mm (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessManagerMac.mm 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/UIProcess/Plugins/mac/PluginProcessManagerMac.mm 2013-06-01 23:31:58 UTC (rev 151077)
@@ -39,6 +39,24 @@
m_pluginProcesses[i]->setProcessSuppressionEnabled(processSuppressionEnabled);
}
+PluginProcessProxy* PluginProcessManager::plugInProcessWithProcessID(pid_t plugInProcessID) const
+{
+ for (size_t i = 0; i < m_pluginProcesses.size(); ++i) {
+ if (m_pluginProcesses[i]->processIdentifier() == plugInProcessID)
+ return m_pluginProcesses[i].get();
+ }
+ return 0;
+}
+
+PluginProcessProxy* PluginProcessManager::plugInProcessWithToken(uint64_t plugInProcessToken) const
+{
+ for (size_t i = 0; i < m_pluginProcesses.size(); ++i) {
+ if (m_pluginProcesses[i]->pluginProcessToken() == plugInProcessToken)
+ return m_pluginProcesses[i].get();
+ }
+ return 0;
+}
+
} // namespace WebKit
#endif // ENABLE(PLUGIN_PROCESS)
Modified: branches/safari-537.43-branch/Source/WebKit2/UIProcess/WebPageProxy.cpp (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-06-01 23:31:58 UTC (rev 151077)
@@ -615,6 +615,9 @@
#if PLATFORM(GTK)
invalidateCallbackMap(m_printFinishedCallbacks);
#endif
+#if PLATFORM(MAC)
+ invalidateCallbackMap(m_plugInInformationCallbacks);
+#endif
Vector<WebEditCommandProxy*> editCommandVector;
copyToVector(m_editCommandSet, editCommandVector);
Modified: branches/safari-537.43-branch/Source/WebKit2/UIProcess/WebPageProxy.h (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/UIProcess/WebPageProxy.h 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/UIProcess/WebPageProxy.h 2013-06-01 23:31:58 UTC (rev 151077)
@@ -166,6 +166,7 @@
class WebVibrationProxy;
#endif
+typedef GenericCallback<WKDictionaryRef> DictionaryCallback;
typedef GenericCallback<WKStringRef, StringImpl*> StringCallback;
typedef GenericCallback<WKSerializedScriptValueRef, WebSerializedScriptValue*> ScriptValueCallback;
@@ -536,6 +537,9 @@
void makeFirstResponder();
ColorSpaceData colorSpace();
+
+ void getInformationForPlugInWithProcessID(pid_t plugInProcessID, PassRefPtr<DictionaryCallback>);
+ void containsPlugInCallback(bool containsPlugIn, uint64_t plugInToken, uint64_t callbackID);
#endif
void pageScaleFactorDidChange(double);
@@ -1099,6 +1103,9 @@
#if PLATFORM(GTK)
HashMap<uint64_t, RefPtr<PrintFinishedCallback>> m_printFinishedCallbacks;
#endif
+#if PLATFORM(MAC)
+ HashMap<uint64_t, RefPtr<DictionaryCallback>> m_plugInInformationCallbacks;
+#endif
HashSet<WebEditCommandProxy*> m_editCommandSet;
Modified: branches/safari-537.43-branch/Source/WebKit2/UIProcess/WebPageProxy.messages.in (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2013-06-01 23:31:58 UTC (rev 151077)
@@ -261,6 +261,7 @@
# Plug-in complex text input support messages
PluginFocusOrWindowFocusChanged(uint64_t pluginComplexTextInputIdentifier, bool pluginHasFocusAndWindowHasFocus)
SetPluginComplexTextInputState(uint64_t pluginComplexTextInputIdentifier, uint64_t complexTextInputState)
+ ContainsPlugInCallback(bool containsPlugIn, uint64_t plugInProcessToken, uint64_t callbackID)
# Speech messages
GetIsSpeaking() -> (bool isSpeaking)
Modified: branches/safari-537.43-branch/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm 2013-06-01 23:31:58 UTC (rev 151077)
@@ -35,6 +35,9 @@
#import "PluginComplexTextInputState.h"
#import "PageClient.h"
#import "PageClientImpl.h"
+#import "PluginInformation.h"
+#import "PluginProcessManager.h"
+#import "PluginProcessProxy.h"
#import "StringUtilities.h"
#import "TextChecker.h"
#import "WebPageMessages.h"
@@ -456,6 +459,46 @@
m_pageClient->setPluginComplexTextInputState(pluginComplexTextInputIdentifier, static_cast<PluginComplexTextInputState>(pluginComplexTextInputState));
}
+void WebPageProxy::getInformationForPlugInWithProcessID(pid_t plugInProcessID, PassRefPtr<DictionaryCallback> prpCallback)
+{
+ RefPtr<DictionaryCallback> callback = prpCallback;
+ if (!isValid()) {
+ callback->invalidate();
+ return;
+ }
+
+ PluginProcessProxy* pluginProcessProxy = PluginProcessManager::shared().plugInProcessWithProcessID(plugInProcessID);
+ if (!pluginProcessProxy)
+ callback->performCallbackWithReturnValue(0);
+
+ uint64_t callbackID = callback->callbackID();
+ m_plugInInformationCallbacks.set(callbackID, callback.get());
+ m_process->send(Messages::WebPage::ContainsPluginViewsWithPluginProcessToken(pluginProcessProxy->pluginProcessToken(), callbackID), m_pageID);
+}
+
+void WebPageProxy::containsPlugInCallback(bool containsPlugIn, uint64_t plugInToken, uint64_t callbackID)
+{
+ RefPtr<DictionaryCallback> callback = m_plugInInformationCallbacks.take(callbackID);
+ if (!callback) {
+ // FIXME: Log error or assert.
+ return;
+ }
+
+ if (!containsPlugIn) {
+ callback->performCallbackWithReturnValue(0);
+ return;
+ }
+
+ PluginProcessProxy* plugInProcessProxy = PluginProcessManager::shared().plugInProcessWithToken(plugInToken);
+ ASSERT(plugInProcessProxy);
+
+ ImmutableDictionary::MapType map;
+ getPluginModuleInformation(plugInProcessProxy->pluginProcessAttributes().moduleInfo, map);
+ RefPtr<ImmutableDictionary> plugInInformation = ImmutableDictionary::adopt(map);
+
+ callback->performCallbackWithReturnValue(plugInInformation.get());
+}
+
void WebPageProxy::executeSavedCommandBySelector(const String& selector, bool& handled)
{
MESSAGE_CHECK(isValidKeypressCommandName(selector));
Modified: branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h 2013-06-01 23:31:58 UTC (rev 151077)
@@ -260,6 +260,8 @@
virtual String getSelectionString() const OVERRIDE { return String(); }
+ virtual uint64_t plugInProcessToken() const OVERRIDE { return 0; }
+
void updateNPNPrivateMode();
#if PLUGIN_ARCHITECTURE(WIN)
Modified: branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/PDF/SimplePDFPlugin.h (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/PDF/SimplePDFPlugin.h 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/PDF/SimplePDFPlugin.h 2013-06-01 23:31:58 UTC (rev 151077)
@@ -191,6 +191,8 @@
virtual String getSelectionString() const OVERRIDE { return String(); }
+ virtual uint64_t plugInProcessToken() const OVERRIDE { return 0; }
+
WebCore::IntSize m_scrollOffset;
private:
Modified: branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/Plugin.h (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/Plugin.h 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/Plugin.h 2013-06-01 23:31:58 UTC (rev 151077)
@@ -277,6 +277,8 @@
virtual String getSelectionString() const = 0;
+ virtual uint64_t plugInProcessToken() const = 0;
+
protected:
Plugin();
Modified: branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.h (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.h 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/PluginProxy.h 2013-06-01 23:31:58 UTC (rev 151077)
@@ -139,6 +139,8 @@
virtual String getSelectionString() const OVERRIDE { return String(); }
+ virtual uint64_t plugInProcessToken() const OVERRIDE { return m_pluginProcessToken; }
+
float contentsScaleFactor();
bool needsBackingStore() const;
bool updateBackingStore();
Modified: branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/PluginView.h (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/PluginView.h 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/WebProcess/Plugins/PluginView.h 2013-06-01 23:31:58 UTC (rev 151077)
@@ -80,6 +80,7 @@
#endif
WebCore::HTMLPlugInElement* pluginElement() const { return m_pluginElement.get(); }
+ Plugin* plugIn() const { return m_plugin.get(); }
const Plugin::Parameters& initialParameters() const { return m_parameters; }
// FIXME: Remove this; nobody should have to know about the plug-in view's renderer except the plug-in view itself.
Modified: branches/safari-537.43-branch/Source/WebKit2/WebProcess/WebPage/WebPage.h (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/WebProcess/WebPage/WebPage.h 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/WebProcess/WebPage/WebPage.h 2013-06-01 23:31:58 UTC (rev 151077)
@@ -372,8 +372,10 @@
void setBottomOverhangImage(PassRefPtr<WebImage>);
void updateHeaderAndFooterLayersForDeviceScaleChange(float scaleFactor);
-#endif
+ void containsPluginViewsWithPluginProcessToken(uint64_t plugInProcessToken, uint64_t callbackID);
+#endif // PLATFORM(MAC)
+
bool windowIsFocused() const;
bool windowAndWebPageAreFocused() const;
void installPageOverlay(PassRefPtr<PageOverlay>, bool shouldFadeIn = false);
Modified: branches/safari-537.43-branch/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in 2013-06-01 23:31:58 UTC (rev 151077)
@@ -263,6 +263,8 @@
# Complex text input support for plug-ins.
SendComplexTextInputToPlugin(uint64_t pluginComplexTextInputIdentifier, String textInput)
+ ContainsPluginViewsWithPluginProcessToken(uint64_t plugInProcessToken, uint64_t callbackID)
+
SetWindowIsVisible(bool windowIsVisible)
WindowAndViewFramesChanged(WebCore::FloatRect windowFrameInScreenCoordinates, WebCore::FloatRect windowFrameInUnflippedScreenCoordinates, WebCore::FloatRect viewFrameInWindowCoordinates, WebCore::FloatPoint accessibilityViewCoordinates)
ViewExposedRectChanged(WebCore::FloatRect exposedRect)
Modified: branches/safari-537.43-branch/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm (151076 => 151077)
--- branches/safari-537.43-branch/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm 2013-06-01 23:26:02 UTC (rev 151076)
+++ branches/safari-537.43-branch/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm 2013-06-01 23:31:58 UTC (rev 151077)
@@ -955,4 +955,17 @@
}
}
+void WebPage::containsPluginViewsWithPluginProcessToken(uint64_t plugInProcessToken, uint64_t callbackID)
+{
+ bool containsPlugIn = false;
+ for (HashSet<PluginView*>::const_iterator it = m_pluginViews.begin(), end = m_pluginViews.end(); it != end; ++it) {
+ if ((*it)->plugIn()->plugInProcessToken() == plugInProcessToken) {
+ containsPlugIn = true;
+ break;
+ }
+ }
+
+ send(Messages::WebPageProxy::ContainsPlugInCallback(containsPlugIn, plugInProcessToken, callbackID));
+}
+
} // namespace WebKit