зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1613054 part 2 - On iframe.focus() create the initial about:blank for in-process case and treat the iframe as focusable for OOP case. r=nika
Test cases in https://bugzilla.mozilla.org/show_bug.cgi?id=1649099 Differential Revision: https://phabricator.services.mozilla.com/D88978
This commit is contained in:
Родитель
8bb9ef510a
Коммит
323bd1842b
|
@ -6454,6 +6454,7 @@ nsresult nsDocShell::CreateAboutBlankContentViewer(
|
||||||
bool hadTiming = mTiming;
|
bool hadTiming = mTiming;
|
||||||
bool toBeReset = MaybeInitTiming();
|
bool toBeReset = MaybeInitTiming();
|
||||||
if (mContentViewer) {
|
if (mContentViewer) {
|
||||||
|
MOZ_ASSERT(nsContentUtils::IsSafeToRunScript());
|
||||||
if (aCheckPermitUnload) {
|
if (aCheckPermitUnload) {
|
||||||
// We've got a content viewer already. Make sure the user
|
// We've got a content viewer already. Make sure the user
|
||||||
// permits us to discard the current document and replace it
|
// permits us to discard the current document and replace it
|
||||||
|
|
|
@ -1985,6 +1985,25 @@ Element* nsFocusManager::FlushAndCheckIfFocusable(Element* aElement,
|
||||||
: nullptr;
|
: nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If this is an iframe that doesn't have an in-process subdocument, it is
|
||||||
|
// either an OOP iframe or an in-process iframe without lazy about:blank
|
||||||
|
// creation having taken place. In the OOP case, treat the frame as
|
||||||
|
// focusable for consistency with Chrome. In the in-process case, create
|
||||||
|
// the initial about:blank for in-process BrowsingContexts in order to
|
||||||
|
// have the `GetSubDocumentFor` call after this block return something.
|
||||||
|
if (RefPtr<nsFrameLoaderOwner> flo = do_QueryObject(aElement)) {
|
||||||
|
// Only look at pre-existing browsing contexts. If this function is
|
||||||
|
// called during reflow, calling GetBrowsingContext() could cause frame
|
||||||
|
// loader initialization at a time when it isn't safe.
|
||||||
|
if (BrowsingContext* bc = flo->GetExtantBrowsingContext()) {
|
||||||
|
// This call may create a contentViewer-created about:blank.
|
||||||
|
// That's intentional, so we can move focus there.
|
||||||
|
if (!bc->GetDocument()) {
|
||||||
|
return aElement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// if this is a child frame content node, check if it is visible and
|
// if this is a child frame content node, check if it is visible and
|
||||||
// call the content node's IsFocusable method instead of the frame's
|
// call the content node's IsFocusable method instead of the frame's
|
||||||
// IsFocusable method. This skips checking the style system and ensures that
|
// IsFocusable method. This skips checking the style system and ensures that
|
||||||
|
|
Загрузка…
Ссылка в новой задаче