Title: [151077] branches/safari-537.43-branch/Source/WebKit2

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
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to