Index: third_party/WebKit/Source/core/testing/Internals.cpp |
diff --git a/third_party/WebKit/Source/core/testing/Internals.cpp b/third_party/WebKit/Source/core/testing/Internals.cpp |
index 45599839a2552add0e97821c0110f42d8927dd66..0a1dc3a9512c80dc54698808fff2ba829b4b09b6 100644 |
--- a/third_party/WebKit/Source/core/testing/Internals.cpp |
+++ b/third_party/WebKit/Source/core/testing/Internals.cpp |
@@ -172,6 +172,31 @@ class InternalsIterationSource final |
} |
}; |
+class UseCounterObserverImpl final : public UseCounter::Observer { |
+ WTF_MAKE_NONCOPYABLE(UseCounterObserverImpl); |
+ |
+ public: |
+ UseCounterObserverImpl(ScriptPromiseResolver* resolver, |
+ UseCounter::Feature feature) |
+ : m_resolver(resolver), m_feature(feature) {} |
+ |
+ bool onCountFeature(UseCounter::Feature feature) final { |
+ if (m_feature != feature) |
+ return false; |
+ m_resolver->resolve(feature); |
+ return true; |
+ } |
+ |
+ DEFINE_INLINE_VIRTUAL_TRACE() { |
+ UseCounter::Observer::trace(visitor); |
+ visitor->trace(m_resolver); |
+ } |
+ |
+ private: |
+ Member<ScriptPromiseResolver> m_resolver; |
+ UseCounter::Feature m_feature; |
+}; |
+ |
} // namespace |
static WTF::Optional<DocumentMarker::MarkerType> markerTypeFrom( |
@@ -3009,6 +3034,26 @@ bool Internals::isCSSPropertyUseCounted(Document* document, |
return UseCounter::isCounted(*document, propertyName); |
} |
+ScriptPromise Internals::observeUseCounter(ScriptState* scriptState, |
+ Document* document, |
+ uint32_t feature) { |
+ ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
+ ScriptPromise promise = resolver->promise(); |
+ if (feature >= UseCounter::NumberOfFeatures) { |
+ resolver->reject(); |
+ return promise; |
+ } |
+ UseCounter::Feature useCounterFeature = |
+ static_cast<UseCounter::Feature>(feature); |
+ if (UseCounter::isCounted(*document, useCounterFeature)) { |
+ resolver->resolve(); |
+ return promise; |
+ } |
+ UseCounter::addObserver( |
+ *document, new UseCounterObserverImpl(resolver, useCounterFeature)); |
+ return promise; |
+} |
+ |
String Internals::unscopableAttribute() { |
return "unscopableAttribute"; |
} |