Bug 1318506 - Label PluginInstance IPC messages with plugin's DocGroup (r=jimm)
authorBill McCloskey <billm@mozilla.com>
Tue, 15 Nov 2016 15:35:54 -0800
changeset 325081 044347624e6050c8a505f4de1cae38177708e7ad
parent 325080 1d97f42563af21847fb4870a9635dffd5b4a7a26
child 325082 526959c0620c36fd5fe9d0cfe8af0c9a184f9887
push id24
push usermaklebus@msu.edu
push dateTue, 20 Dec 2016 03:11:33 +0000
reviewersjimm
bugs1318506
milestone53.0a1
Bug 1318506 - Label PluginInstance IPC messages with plugin's DocGroup (r=jimm) The goal here is to assign a DocGroup to every runnable. This patch labels all IPC message handlers for PPluginInstance with the DocGroup of the plugin instance's document. MozReview-Commit-ID: 6OIard9n2GB
dom/plugins/ipc/PluginModuleParent.cpp
--- a/dom/plugins/ipc/PluginModuleParent.cpp
+++ b/dom/plugins/ipc/PluginModuleParent.cpp
@@ -2751,16 +2751,29 @@ PluginModuleParent::NPP_NewInternal(NPMI
     }
 
     // Release the surrogate reference that was in pdata
     RefPtr<PluginAsyncSurrogate> surrogate(
         dont_AddRef(PluginAsyncSurrogate::Cast(instance)));
     // Now replace it with the instance
     instance->pdata = static_cast<PluginDataResolver*>(parentInstance);
 
+    // Any IPC messages for the PluginInstance actor should be dispatched to the
+    // DocGroup for the plugin's document.
+    RefPtr<nsPluginInstanceOwner> owner = parentInstance->GetOwner();
+    nsCOMPtr<nsIDOMElement> elt;
+    owner->GetDOMElement(getter_AddRefs(elt));
+    if (nsCOMPtr<nsINode> node = do_QueryInterface(elt)) {
+        nsCOMPtr<nsIDocument> doc = node->OwnerDoc();
+        if (doc) {
+            nsCOMPtr<nsIEventTarget> eventTarget = doc->EventTargetFor(dom::TaskCategory::Other);
+            SetEventTargetForActor(parentInstance, eventTarget);
+        }
+    }
+
     if (!SendPPluginInstanceConstructor(parentInstance,
                                         nsDependentCString(pluginType), mode,
                                         names, values)) {
         // |parentInstance| is automatically deleted.
         instance->pdata = nullptr;
         *error = NPERR_GENERIC_ERROR;
         return NS_ERROR_FAILURE;
     }