зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1382357 - Wait to destroy frames until after we've successfully fetched the binding. r=heycam
The issue here is that the DestroyFramesFor call does a ClearServoDataFromSubtree, and then we subsequently fail to load the bindings, leaving ourselves with an unstyled subtree that isn't marked with descendant bits and isn't rooted at a display:none element, which is forbidden. This can trigger crashes when we call the innerText getter on one of the unstyled elements, since that will first flush layout (which won't find the unstyled subtree), and then invoke IsOrHasAncestorWithDisplayNone, which passes LazyComputeBehavior::Assert. MozReview-Commit-ID: 7roBkH9fTGZ
This commit is contained in:
Родитель
47a2617b3f
Коммит
ff4e044f30
|
@ -116,7 +116,15 @@ public:
|
|||
if (!doc)
|
||||
return;
|
||||
|
||||
// Destroy the frames for mBoundElement.
|
||||
// Get the binding.
|
||||
bool ready = false;
|
||||
nsXBLService::GetInstance()->BindingReady(mBoundElement, mBindingURI, &ready);
|
||||
if (!ready)
|
||||
return;
|
||||
|
||||
// Destroy the frames for mBoundElement. Do this after getting the binding,
|
||||
// since if the binding fetch fails then we don't want to destroy the
|
||||
// frames.
|
||||
nsIContent* destroyedFramesFor = nullptr;
|
||||
nsIPresShell* shell = doc->GetShell();
|
||||
if (shell) {
|
||||
|
@ -124,12 +132,6 @@ public:
|
|||
}
|
||||
MOZ_ASSERT(!mBoundElement->GetPrimaryFrame());
|
||||
|
||||
// Get the binding.
|
||||
bool ready = false;
|
||||
nsXBLService::GetInstance()->BindingReady(mBoundElement, mBindingURI, &ready);
|
||||
if (!ready)
|
||||
return;
|
||||
|
||||
// If |mBoundElement| is (in addition to having binding |mBinding|)
|
||||
// also a descendant of another element with binding |mBinding|,
|
||||
// then we might have just constructed it due to the
|
||||
|
|
Загрузка…
Ссылка в новой задаче