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
--- 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()
{