зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1377447 - Add a new flush type between Frames and InterruptibleLayout to initialize layout if needed and use it from CheckIfFocusable; r=smaug
This commit is contained in:
Родитель
a62cae74d4
Коммит
d39018ac62
|
@ -27,12 +27,13 @@ enum class FlushType : uint8_t {
|
|||
notifications. */
|
||||
Style = 3, /* As above, plus flush style reresolution */
|
||||
Frames = Style,
|
||||
InterruptibleLayout = 4, /* As above, plus flush reflow,
|
||||
EnsurePresShellInitAndFrames = 4, /* As above, plus ensure the pres shell is alive */
|
||||
InterruptibleLayout = 5, /* As above, plus flush reflow,
|
||||
but allow it to be interrupted (so
|
||||
an incomplete layout may result) */
|
||||
Layout = 5, /* As above, but layout must run to
|
||||
Layout = 6, /* As above, but layout must run to
|
||||
completion */
|
||||
Display = 6, /* As above, plus flush painting */
|
||||
Display = 7, /* As above, plus flush painting */
|
||||
|
||||
Count
|
||||
};
|
||||
|
|
|
@ -1567,9 +1567,10 @@ nsFocusManager::CheckIfFocusable(nsIContent* aContent, uint32_t aFlags)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
// Make sure that our frames are up to date
|
||||
// Make sure that our frames are up to date while ensuring the presshell is
|
||||
// also initialized in case we come from an autofocus event.
|
||||
mEventHandlingNeedsFlush = false;
|
||||
doc->FlushPendingNotifications(FlushType::Frames);
|
||||
doc->FlushPendingNotifications(FlushType::EnsurePresShellInitAndFrames);
|
||||
|
||||
nsIPresShell *shell = doc->GetShell();
|
||||
if (!shell)
|
||||
|
|
|
@ -1068,7 +1068,7 @@ HTMLContentSink::FlushPendingNotifications(FlushType aType)
|
|||
FlushTags();
|
||||
}
|
||||
}
|
||||
if (aType >= FlushType::InterruptibleLayout) {
|
||||
if (aType >= FlushType::EnsurePresShellInitAndFrames) {
|
||||
// Make sure that layout has started so that the reflow flush
|
||||
// will actually happen.
|
||||
StartLayout(true);
|
||||
|
|
|
@ -1465,7 +1465,7 @@ nsXMLContentSink::FlushPendingNotifications(FlushType aType)
|
|||
FlushText(false);
|
||||
}
|
||||
}
|
||||
if (aType >= FlushType::InterruptibleLayout) {
|
||||
if (aType >= FlushType::EnsurePresShellInitAndFrames) {
|
||||
// Make sure that layout has started so that the reflow flush
|
||||
// will actually happen.
|
||||
MaybeStartLayout(true);
|
||||
|
|
|
@ -4090,6 +4090,9 @@ PresShell::DoFlushPendingNotifications(mozilla::ChangesToFlush aFlush)
|
|||
"",
|
||||
"Content",
|
||||
"ContentAndNotify",
|
||||
// As far as the profiler is concerned, EnsurePresShellInitAndFrames and
|
||||
// Frames are the same
|
||||
"Style",
|
||||
"Style",
|
||||
"InterruptibleLayout",
|
||||
"Layout",
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<input type="text" autofocus="">
|
|
@ -0,0 +1,4 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<link rel="stylesheet" href="nothing">
|
||||
<input type="text" autofocus="">
|
|
@ -0,0 +1,3 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<input type="text">
|
|
@ -2032,3 +2032,5 @@ fails-if(!stylo||styloVsGecko) == 1365162-1.html 1365162-1-ref.html
|
|||
== 1375674.html 1375674-ref.html
|
||||
== 1372041.html 1372041-ref.html
|
||||
== 1376092.html 1376092-ref.html
|
||||
== 1377447-1.html 1377447-1-ref.html
|
||||
!= 1377447-1.html 1377447-2.html
|
||||
|
|
|
@ -216,7 +216,7 @@ nsHtml5TreeOpExecutor::SetParser(nsParserBase* aParser)
|
|||
void
|
||||
nsHtml5TreeOpExecutor::FlushPendingNotifications(FlushType aType)
|
||||
{
|
||||
if (aType >= FlushType::InterruptibleLayout) {
|
||||
if (aType >= FlushType::EnsurePresShellInitAndFrames) {
|
||||
// Bug 577508 / 253951
|
||||
nsContentSink::StartLayout(true);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче