From 0a31e73ee0337422c649acad89bc425b54c3b8e0 Mon Sep 17 00:00:00 2001 From: Cameron McCormack Date: Wed, 18 Oct 2017 17:26:41 +0800 Subject: [PATCH] Bug 1390694 - Part 3: Add nsBindingManager function to check for document state dependencies. r=emilio MozReview-Commit-ID: Aw04MrVHyIz --HG-- extra : rebase_source : dd1e15f0589ec532111711e14348c6d2ee590314 --- dom/xbl/nsBindingManager.cpp | 17 +++++++++++++++++ dom/xbl/nsBindingManager.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/dom/xbl/nsBindingManager.cpp b/dom/xbl/nsBindingManager.cpp index 19f37d0dbb68..46bdc788e834 100644 --- a/dom/xbl/nsBindingManager.cpp +++ b/dom/xbl/nsBindingManager.cpp @@ -1169,3 +1169,20 @@ nsBindingManager::FindNestedSingleInsertionPoint(nsIContent* aContainer, return parent; } + +bool +nsBindingManager::AnyBindingHasDocumentStateDependency(EventStates aStateMask) +{ + MOZ_ASSERT(mDocument->IsStyledByServo()); + + bool result = false; + EnumerateBoundContentBindings([&](nsXBLBinding* aBinding) { + ServoStyleSet* styleSet = aBinding->PrototypeBinding()->GetServoStyleSet(); + if (styleSet && styleSet->HasDocumentStateDependency(aStateMask)) { + result = true; + return false; + } + return true; + }); + return result; +} diff --git a/dom/xbl/nsBindingManager.h b/dom/xbl/nsBindingManager.h index d86fea8c6f4a..ba759760d31d 100644 --- a/dom/xbl/nsBindingManager.h +++ b/dom/xbl/nsBindingManager.h @@ -19,6 +19,7 @@ #include "nsTArray.h" #include "nsThreadUtils.h" #include "mozilla/StyleSheet.h" +#include "mozilla/EventStates.h" struct ElementDependentRuleProcessorData; class nsIXPConnectWrappedJS; @@ -175,6 +176,8 @@ public: nsIContent* FindNestedSingleInsertionPoint(nsIContent* aContainer, bool* aMulti); + bool AnyBindingHasDocumentStateDependency(mozilla::EventStates aStateMask); + protected: nsIXPConnectWrappedJS* GetWrappedJS(nsIContent* aContent); nsresult SetWrappedJS(nsIContent* aContent, nsIXPConnectWrappedJS* aResult);