Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(279)

Unified Diff: third_party/WebKit/Source/core/dom/Document.cpp

Issue 2704083002: Remove Page dependency from NetworkStateNotifier (Closed)
Patch Set: nullcheck for tests Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/dom/Document.cpp
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index 44883d53f5a70fb724fe4faad6350134fb4342b3..9889fb85bf43f3295a5e177381782f09c295abfa 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -205,6 +205,7 @@
#include "core/page/EventWithHitTestResults.h"
#include "core/page/FocusController.h"
#include "core/page/FrameTree.h"
+#include "core/page/NetworkStateNotifier.h"
#include "core/page/Page.h"
#include "core/page/PointerLockController.h"
#include "core/page/scrolling/RootScrollerController.h"
@@ -404,6 +405,38 @@ static void recordLoadReasonToHistogram(WouldLoadReason reason) {
unseenFrameHistogram.count(reason);
}
+class Document::NetworkStateObserver final
+ : public GarbageCollected<Document::NetworkStateObserver>,
+ public NetworkStateNotifier::NetworkStateObserver,
+ public ContextLifecycleObserver {
+ USING_GARBAGE_COLLECTED_MIXIN(Document::NetworkStateObserver);
+
+ public:
+ explicit NetworkStateObserver(Document& document)
+ : ContextLifecycleObserver(&document) {
+ networkStateNotifier().addOnLineObserver(
+ this,
+ TaskRunnerHelper::get(TaskType::Networking, getExecutionContext()));
+ }
+
+ void onLineStateChange(bool onLine) override {
+ AtomicString eventName =
+ onLine ? EventTypeNames::online : EventTypeNames::offline;
+ Document* document = toDocument(getExecutionContext());
+ if (!document->domWindow())
+ return;
+ document->domWindow()->dispatchEvent(Event::create(eventName));
+ InspectorInstrumentation::networkStateChanged(document->frame(), onLine);
+ }
+
+ void contextDestroyed(ExecutionContext* context) override {
+ networkStateNotifier().removeOnLineObserver(
+ this, TaskRunnerHelper::get(TaskType::Networking, context));
+ }
+
+ DEFINE_INLINE_VIRTUAL_TRACE() { ContextLifecycleObserver::trace(visitor); }
+};
+
Document::Document(const DocumentInit& initializer,
DocumentClassFlags documentClasses)
: ContainerNode(0, CreateDocument),
@@ -496,7 +529,8 @@ Document::Document(const DocumentInit& initializer,
m_nodeCount(0),
m_wouldLoadReason(Created),
m_passwordCount(0),
- m_engagementLevel(mojom::blink::EngagementLevel::NONE) {
+ m_engagementLevel(mojom::blink::EngagementLevel::NONE),
+ m_networkStateObserver(new NetworkStateObserver(*this)) {
if (m_frame) {
DCHECK(m_frame->page());
provideContextFeaturesToDocumentFrom(*this, *m_frame->page());
@@ -6563,6 +6597,7 @@ DEFINE_TRACE(Document) {
visitor->trace(m_resizeObserverController);
visitor->trace(m_propertyRegistry);
visitor->trace(m_styleReattachDataMap);
+ visitor->trace(m_networkStateObserver);
Supplementable<Document>::trace(visitor);
TreeScope::trace(visitor);
ContainerNode::trace(visitor);
« no previous file with comments | « third_party/WebKit/Source/core/dom/Document.h ('k') | third_party/WebKit/Source/core/page/NetworkStateNotifier.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698