Bug 1391110: Part 2 - Reparent FrameLoader wrapper when owner content changes. r?smaug draft
authorKris Maglione <maglione.k@gmail.com>
Sat, 19 Aug 2017 13:03:59 -0700
changeset 649511 0968851ac4c4aad064646b9fbdbdf5e0d2c43e27
parent 649510 1b51c6a73ae7724f244fe9222ea0d9fd23ee2760
child 649512 af404fae59a8b260e2a2cbb8cfb9c1b620786ec6
push id75044
push usermaglione.k@gmail.com
push dateSat, 19 Aug 2017 21:21:25 +0000
reviewerssmaug
bugs1391110
milestone57.0a1
Bug 1391110: Part 2 - Reparent FrameLoader wrapper when owner content changes. r?smaug We allow swapping frameloaders between unrelated documents, so we need to reparent wrappers when the owner content changes. MozReview-Commit-ID: LNIf4ZrCZLo
dom/base/nsFrameLoader.cpp
--- a/dom/base/nsFrameLoader.cpp
+++ b/dom/base/nsFrameLoader.cpp
@@ -2351,16 +2351,27 @@ nsFrameLoader::GetDepthTooGreat(bool* aD
 void
 nsFrameLoader::SetOwnerContent(Element* aContent)
 {
   if (mObservingOwnerContent) {
     mObservingOwnerContent = false;
     mOwnerContent->RemoveMutationObserver(this);
   }
   mOwnerContent = aContent;
+
+  AutoJSAPI jsapi;
+  jsapi.Init();
+
+  JS::RootedObject wrapper(jsapi.cx(), GetWrapper());
+  if (wrapper) {
+    JSAutoCompartment ac(jsapi.cx(), wrapper);
+    nsresult rv = ReparentWrapper(jsapi.cx(), wrapper);
+    Unused << NS_WARN_IF(NS_FAILED(rv));
+  }
+
   if (RenderFrameParent* rfp = GetCurrentRenderFrame()) {
     rfp->OwnerContentChanged(aContent);
   }
 }
 
 bool
 nsFrameLoader::OwnerIsMozBrowserFrame()
 {