Make sure we flush out content before we try to set up the plug-in, sincethat's going to perform DOM access that can flush. Bug 377070, r+sr=biesi

This commit is contained in:
bzbarsky@mit.edu 2007-05-23 12:53:31 -07:00
Родитель 0a0d69970c
Коммит 6b859eef41
1 изменённых файлов: 26 добавлений и 12 удалений

Просмотреть файл

@ -1294,20 +1294,34 @@ nsObjectLoadingContent::GetFrame()
do_QueryInterface(NS_STATIC_CAST(nsIImageLoadingContent*, this));
NS_ASSERTION(thisContent, "must be a content");
nsIDocument* doc = thisContent->GetCurrentDoc();
if (!doc) {
return nsnull; // No current doc -> no frame
}
PRBool flushed = PR_FALSE;
nsIFrame* frame;
do {
nsIDocument* doc = thisContent->GetCurrentDoc();
if (!doc) {
return nsnull; // No current doc -> no frame
}
nsIPresShell* shell = doc->GetPrimaryShell();
if (!shell) {
return nsnull; // No presentation -> no frame
}
nsIPresShell* shell = doc->GetPrimaryShell();
if (!shell) {
return nsnull; // No presentation -> no frame
}
nsIFrame* frame = shell->GetPrimaryFrameFor(thisContent);
if (!frame) {
return nsnull;
}
frame = shell->GetPrimaryFrameFor(thisContent);
if (!frame) {
return nsnull;
}
if (flushed) {
break;
}
// OK, let's flush out and try again. Note that we want to reget
// the document, etc, since flushing might run script.
doc->FlushPendingNotifications(Flush_ContentAndNotify);
flushed = PR_TRUE;
} while (1);
nsIObjectFrame* objFrame;
CallQueryInterface(frame, &objFrame);