Title: [242508] trunk/Source/WebCore
- Revision
- 242508
- Author
- za...@apple.com
- Date
- 2019-03-05 13:52:41 -0800 (Tue, 05 Mar 2019)
Log Message
[ContentChangeObserver] Send content change notification through adjustObservedState
https://bugs.webkit.org/show_bug.cgi?id=195328
<rdar://problem/48601143>
Reviewed by Simon Fraser.
Have a dedicated place for the notification logic.
* page/ios/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::stopDurationBasedContentObservation):
(WebCore::ContentChangeObserver::didInstallDOMTimer):
(WebCore::ContentChangeObserver::didRemoveDOMTimer):
(WebCore::ContentChangeObserver::domTimerExecuteDidFinish):
(WebCore::ContentChangeObserver::styleRecalcDidFinish):
(WebCore::ContentChangeObserver::mouseMovedDidStart):
(WebCore::ContentChangeObserver::adjustObservedState):
(WebCore::ContentChangeObserver::registerDOMTimer): Deleted.
(WebCore::ContentChangeObserver::unregisterDOMTimer): Deleted.
(WebCore::ContentChangeObserver::notifyContentChangeIfNeeded): Deleted.
* page/ios/ContentChangeObserver.h:
(WebCore::ContentChangeObserver::registerDOMTimer):
(WebCore::ContentChangeObserver::unregisterDOMTimer):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (242507 => 242508)
--- trunk/Source/WebCore/ChangeLog 2019-03-05 21:49:41 UTC (rev 242507)
+++ trunk/Source/WebCore/ChangeLog 2019-03-05 21:52:41 UTC (rev 242508)
@@ -1,3 +1,28 @@
+2019-03-05 Zalan Bujtas <za...@apple.com>
+
+ [ContentChangeObserver] Send content change notification through adjustObservedState
+ https://bugs.webkit.org/show_bug.cgi?id=195328
+ <rdar://problem/48601143>
+
+ Reviewed by Simon Fraser.
+
+ Have a dedicated place for the notification logic.
+
+ * page/ios/ContentChangeObserver.cpp:
+ (WebCore::ContentChangeObserver::stopDurationBasedContentObservation):
+ (WebCore::ContentChangeObserver::didInstallDOMTimer):
+ (WebCore::ContentChangeObserver::didRemoveDOMTimer):
+ (WebCore::ContentChangeObserver::domTimerExecuteDidFinish):
+ (WebCore::ContentChangeObserver::styleRecalcDidFinish):
+ (WebCore::ContentChangeObserver::mouseMovedDidStart):
+ (WebCore::ContentChangeObserver::adjustObservedState):
+ (WebCore::ContentChangeObserver::registerDOMTimer): Deleted.
+ (WebCore::ContentChangeObserver::unregisterDOMTimer): Deleted.
+ (WebCore::ContentChangeObserver::notifyContentChangeIfNeeded): Deleted.
+ * page/ios/ContentChangeObserver.h:
+ (WebCore::ContentChangeObserver::registerDOMTimer):
+ (WebCore::ContentChangeObserver::unregisterDOMTimer):
+
2019-03-05 Youenn Fablet <you...@apple.com>
MockLibWebRTCPeerConnection is leaking some session description
Modified: trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp (242507 => 242508)
--- trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp 2019-03-05 21:49:41 UTC (rev 242507)
+++ trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp 2019-03-05 21:52:41 UTC (rev 242508)
@@ -54,6 +54,7 @@
LOG_WITH_STREAM(ContentObservation, stream << "didInstallDOMTimer: register this timer: (" << &timer << ") and observe when it fires.");
registerDOMTimer(timer);
+ adjustObservedState(Event::InstalledDOMTimer);
}
void ContentChangeObserver::didRemoveDOMTimer(const DOMTimer& timer)
@@ -63,7 +64,7 @@
LOG_WITH_STREAM(ContentObservation, stream << "removeDOMTimer: remove registered timer (" << &timer << ")");
unregisterDOMTimer(timer);
- notifyContentChangeIfNeeded();
+ adjustObservedState(Event::RemovedDOMTimer);
}
void ContentChangeObserver::domTimerExecuteDidStart(const DOMTimer& timer)
@@ -84,7 +85,7 @@
m_domTimerisBeingExecuted = false;
unregisterDOMTimer(timer);
setShouldObserveNextStyleRecalc(m_document.hasPendingStyleRecalc());
- notifyContentChangeIfNeeded();
+ adjustObservedState(Event::EndedDOMTimerExecution);
}
void ContentChangeObserver::styleRecalcDidStart()
@@ -107,7 +108,6 @@
m_styleRecalcIsBeingExecuted = false;
setShouldObserveNextStyleRecalc(false);
adjustObservedState(Event::StyleRecalcFinished);
- notifyContentChangeIfNeeded();
}
void ContentChangeObserver::clearTimersAndReportContentChange()
@@ -143,7 +143,7 @@
ASSERT(!m_document.hasPendingStyleRecalc());
clearObservedDOMTimers();
setShouldObserveDOMTimerScheduling(true);
- adjustObservedState(Event::ContentObservationStarted);
+ adjustObservedState(Event::StartedMouseMovedEventDispatching);
}
void ContentChangeObserver::mouseMovedDidFinish()
@@ -156,18 +156,6 @@
return WKObservedContentChange();
}
-void ContentChangeObserver::registerDOMTimer(const DOMTimer& timer)
-{
- m_DOMTimerList.add(&timer);
- adjustObservedState(Event::InstalledDOMTimer);
-}
-
-void ContentChangeObserver::unregisterDOMTimer(const DOMTimer& timer)
-{
- m_DOMTimerList.remove(&timer);
- adjustObservedState(Event::RemovedDOMTimer);
-}
-
void ContentChangeObserver::setShouldObserveNextStyleRecalc(bool shouldObserve)
{
if (shouldObserve)
@@ -179,13 +167,24 @@
{
if (hasVisibleChangeState())
return true;
- return observedContentChange() == WKContentNoChange && !hasObservedDOMTimer() && !m_document.hasPendingStyleRecalc();
+ return observedContentChange() == WKContentNoChange && !hasPendingActivity();
}
void ContentChangeObserver::adjustObservedState(Event event)
{
+ auto notifyContentChangeIfNeeded = [&] {
+ if (!hasDeterminateState()) {
+ LOG(ContentObservation, "notifyContentChangeIfNeeded: not in a determined state yet.");
+ return;
+ }
+ LOG_WITH_STREAM(ContentObservation, stream << "notifyContentChangeIfNeeded: sending observedContentChange ->" << observedContentChange());
+ ASSERT(m_document.page());
+ ASSERT(m_document.frame());
+ m_document.page()->chrome().client().observedContentChange(*m_document.frame());
+ };
+
switch (event) {
- case Event::ContentObservationStarted:
+ case Event::StartedMouseMovedEventDispatching:
setHasNoChangeState();
break;
case Event::InstalledDOMTimer:
@@ -195,9 +194,11 @@
break;
case Event::RemovedDOMTimer:
case Event::StyleRecalcFinished:
+ case Event::EndedDOMTimerExecution:
// Demote to "no change" when there's no pending activity anymore.
- if (observedContentChange() == WKContentIndeterminateChange && !hasObservedDOMTimer() && !m_document.hasPendingStyleRecalc())
+ if (observedContentChange() == WKContentIndeterminateChange && !hasPendingActivity())
setHasNoChangeState();
+ notifyContentChangeIfNeeded();
break;
case Event::ContentVisibilityChanged:
setHasVisibleChangeState();
@@ -205,19 +206,6 @@
}
}
-void ContentChangeObserver::notifyContentChangeIfNeeded()
-{
- if (!hasDeterminateState()) {
- LOG(ContentObservation, "notifyContentChangeIfNeeded: not in a determined state yet.");
- return;
- }
- LOG_WITH_STREAM(ContentObservation, stream << "notifyContentChangeIfNeeded: sending observedContentChange ->" << observedContentChange());
- ASSERT(m_document.page());
- ASSERT(m_document.frame());
- m_document.page()->chrome().client().observedContentChange(*m_document.frame());
-}
-
-
static Visibility elementImplicitVisibility(const Element& element)
{
auto* renderer = element.renderer();
Modified: trunk/Source/WebCore/page/ios/ContentChangeObserver.h (242507 => 242508)
--- trunk/Source/WebCore/page/ios/ContentChangeObserver.h 2019-03-05 21:49:41 UTC (rev 242507)
+++ trunk/Source/WebCore/page/ios/ContentChangeObserver.h 2019-03-05 21:52:41 UTC (rev 242508)
@@ -93,8 +93,8 @@
bool isObservingDOMTimerScheduling() const { return m_isObservingDOMTimerScheduling; }
void domTimerExecuteDidStart(const DOMTimer&);
void domTimerExecuteDidFinish(const DOMTimer&);
- void registerDOMTimer(const DOMTimer&);
- void unregisterDOMTimer(const DOMTimer&);
+ void registerDOMTimer(const DOMTimer& timer) { m_DOMTimerList.add(&timer); }
+ void unregisterDOMTimer(const DOMTimer& timer) { m_DOMTimerList.remove(&timer); }
bool containsObservedDOMTimer(const DOMTimer& timer) const { return m_DOMTimerList.contains(&timer); }
void styleRecalcDidStart();
@@ -115,12 +115,13 @@
bool hasObservedDOMTimer() const { return !m_DOMTimerList.isEmpty(); }
bool hasDeterminateState() const;
- void notifyContentChangeIfNeeded();
+ bool hasPendingActivity() const { return hasObservedDOMTimer() || m_document.hasPendingStyleRecalc(); }
enum class Event {
- ContentObservationStarted,
+ StartedMouseMovedEventDispatching,
InstalledDOMTimer,
RemovedDOMTimer,
+ EndedDOMTimerExecution,
StyleRecalcFinished,
ContentVisibilityChanged
};
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes