From b1029e4f2815385c5a0c3522e9af063cd49f1d92 Mon Sep 17 00:00:00 2001 From: Agi Sferro Date: Fri, 9 Oct 2020 17:31:52 +0000 Subject: [PATCH] Bug 1648157 - Add parameter to not iterate subdocs on media change. r=emilio Differential Revision: https://phabricator.services.mozilla.com/D92807 --- layout/base/nsPresContext.cpp | 22 +++++++++++++--------- layout/base/nsPresContext.h | 5 ++++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/layout/base/nsPresContext.cpp b/layout/base/nsPresContext.cpp index 2ffe68754986..f41799a5cea2 100644 --- a/layout/base/nsPresContext.cpp +++ b/layout/base/nsPresContext.cpp @@ -1542,7 +1542,8 @@ void nsPresContext::PostRebuildAllStyleDataEvent( } void nsPresContext::MediaFeatureValuesChangedAllDocuments( - const MediaFeatureChange& aChange) { + const MediaFeatureChange& aChange, + RecurseIntoInProcessSubDocuments aRecurseSubDocuments) { // Handle the media feature value change in this document. MediaFeatureValuesChanged(aChange); @@ -1550,14 +1551,17 @@ void nsPresContext::MediaFeatureValuesChangedAllDocuments( // document is using. mDocument->ImageTracker()->MediaFeatureValuesChangedAllDocuments(aChange); - // And then into any subdocuments. - auto recurse = [&aChange](dom::Document& aSubDoc) { - if (nsPresContext* pc = aSubDoc.GetPresContext()) { - pc->MediaFeatureValuesChangedAllDocuments(aChange); - } - return CallState::Continue; - }; - mDocument->EnumerateSubDocuments(recurse); + if (aRecurseSubDocuments == RecurseIntoInProcessSubDocuments::Yes) { + // And then into any subdocuments. + auto recurse = [&aChange, aRecurseSubDocuments](dom::Document& aSubDoc) { + if (nsPresContext* pc = aSubDoc.GetPresContext()) { + pc->MediaFeatureValuesChangedAllDocuments(aChange, + aRecurseSubDocuments); + } + return CallState::Continue; + }; + mDocument->EnumerateSubDocuments(recurse); + } } void nsPresContext::FlushPendingMediaFeatureValuesChanged() { diff --git a/layout/base/nsPresContext.h b/layout/base/nsPresContext.h index 79c1583892a0..967dbdbea35b 100644 --- a/layout/base/nsPresContext.h +++ b/layout/base/nsPresContext.h @@ -283,6 +283,8 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr { void ContentLanguageChanged(); + enum class RecurseIntoInProcessSubDocuments : bool { No, Yes }; + /** * Handle changes in the values of media features (used in media queries). */ @@ -296,7 +298,8 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr { * features that must be updated in all subdocuments e.g. display-mode. */ void MediaFeatureValuesChangedAllDocuments( - const mozilla::MediaFeatureChange&); + const mozilla::MediaFeatureChange&, + RecurseIntoInProcessSubDocuments = RecurseIntoInProcessSubDocuments::Yes); /** * Updates the size mode on all remote children and recursively notifies this