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

Side by Side Diff: third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp

Issue 2704083002: Remove Page dependency from NetworkStateNotifier (Closed)
Patch Set: . 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 #include "core/input/EventHandler.h" 67 #include "core/input/EventHandler.h"
68 #include "core/inspector/ConsoleMessage.h" 68 #include "core/inspector/ConsoleMessage.h"
69 #include "core/inspector/InspectorInstrumentation.h" 69 #include "core/inspector/InspectorInstrumentation.h"
70 #include "core/inspector/InspectorTraceEvents.h" 70 #include "core/inspector/InspectorTraceEvents.h"
71 #include "core/loader/DocumentLoader.h" 71 #include "core/loader/DocumentLoader.h"
72 #include "core/loader/FrameLoaderClient.h" 72 #include "core/loader/FrameLoaderClient.h"
73 #include "core/loader/SinkDocument.h" 73 #include "core/loader/SinkDocument.h"
74 #include "core/loader/appcache/ApplicationCache.h" 74 #include "core/loader/appcache/ApplicationCache.h"
75 #include "core/page/ChromeClient.h" 75 #include "core/page/ChromeClient.h"
76 #include "core/page/CreateWindow.h" 76 #include "core/page/CreateWindow.h"
77 #include "core/page/NetworkStateNotifier.h"
77 #include "core/page/Page.h" 78 #include "core/page/Page.h"
78 #include "core/page/WindowFeatures.h" 79 #include "core/page/WindowFeatures.h"
79 #include "core/page/scrolling/ScrollingCoordinator.h" 80 #include "core/page/scrolling/ScrollingCoordinator.h"
80 #include "core/timing/DOMWindowPerformance.h" 81 #include "core/timing/DOMWindowPerformance.h"
81 #include "core/timing/Performance.h" 82 #include "core/timing/Performance.h"
82 #include "platform/EventDispatchForbiddenScope.h" 83 #include "platform/EventDispatchForbiddenScope.h"
83 #include "platform/WebFrameScheduler.h" 84 #include "platform/WebFrameScheduler.h"
84 #include "platform/loader/fetch/ResourceFetcher.h" 85 #include "platform/loader/fetch/ResourceFetcher.h"
85 #include "platform/weborigin/SecurityOrigin.h" 86 #include "platform/weborigin/SecurityOrigin.h"
86 #include "platform/weborigin/Suborigin.h" 87 #include "platform/weborigin/Suborigin.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 void dispose() { m_window->removePostMessageTimer(this); } 158 void dispose() { m_window->removePostMessageTimer(this); }
158 159
159 Member<MessageEvent> m_event; 160 Member<MessageEvent> m_event;
160 Member<LocalDOMWindow> m_window; 161 Member<LocalDOMWindow> m_window;
161 RefPtr<SecurityOrigin> m_targetOrigin; 162 RefPtr<SecurityOrigin> m_targetOrigin;
162 std::unique_ptr<SourceLocation> m_location; 163 std::unique_ptr<SourceLocation> m_location;
163 RefPtr<UserGestureToken> m_userGestureToken; 164 RefPtr<UserGestureToken> m_userGestureToken;
164 bool m_disposalAllowed; 165 bool m_disposalAllowed;
165 }; 166 };
166 167
168 class LocalDOMWindow::NetworkStateObserver final
169 : public GarbageCollected<LocalDOMWindow::NetworkStateObserver>,
170 public NetworkStateNotifier::NetworkStateObserver,
171 public ContextLifecycleObserver {
172 USING_GARBAGE_COLLECTED_MIXIN(LocalDOMWindow::NetworkStateObserver);
173
174 public:
175 NetworkStateObserver(LocalDOMWindow& window)
jkarlin 2017/02/22 18:38:08 I don't have much blink experience. Should this be
kinuko 2017/02/23 01:15:35 Yeah I know how you feel, in my understanding we p
176 : ContextLifecycleObserver(window.document()), m_window(&window) {
177 networkStateNotifier().addOnLineObserver(
178 this,
179 TaskRunnerHelper::get(TaskType::Networking, window.document()).get());
180 }
181
182 void onLineStateChange(bool onLine) override {
183 AtomicString eventName =
184 onLine ? EventTypeNames::online : EventTypeNames::offline;
185 m_window->dispatchEvent(Event::create(eventName));
186 InspectorInstrumentation::networkStateChanged(m_window->frame(), onLine);
187 }
188
189 void contextDestroyed(ExecutionContext* context) override {
190 networkStateNotifier().removeOnLineObserver(
jkarlin 2017/02/22 18:38:08 I'm not familiar with this code. Are we guaranteed
kinuko 2017/02/23 01:15:35 Yes, it's guaranteed. (This is GC'ed class, addin
191 this, TaskRunnerHelper::get(TaskType::Networking, context).get());
192 }
193
194 DEFINE_INLINE_VIRTUAL_TRACE() {
195 visitor->trace(m_window);
196 ContextLifecycleObserver::trace(visitor);
197 }
198
199 private:
200 Member<LocalDOMWindow> m_window;
201 };
202
167 static void updateSuddenTerminationStatus( 203 static void updateSuddenTerminationStatus(
168 LocalDOMWindow* domWindow, 204 LocalDOMWindow* domWindow,
169 bool addedListener, 205 bool addedListener,
170 FrameLoaderClient::SuddenTerminationDisablerType disablerType) { 206 FrameLoaderClient::SuddenTerminationDisablerType disablerType) {
171 Platform::current()->suddenTerminationChanged(!addedListener); 207 Platform::current()->suddenTerminationChanged(!addedListener);
172 if (domWindow->frame() && domWindow->frame()->loader().client()) 208 if (domWindow->frame() && domWindow->frame()->loader().client())
173 domWindow->frame()->loader().client()->suddenTerminationDisablerChanged( 209 domWindow->frame()->loader().client()->suddenTerminationDisablerChanged(
174 addedListener, disablerType); 210 addedListener, disablerType);
175 } 211 }
176 212
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 368
333 Document* LocalDOMWindow::installNewDocument(const String& mimeType, 369 Document* LocalDOMWindow::installNewDocument(const String& mimeType,
334 const DocumentInit& init, 370 const DocumentInit& init,
335 bool forceXHTML) { 371 bool forceXHTML) {
336 ASSERT(init.frame() == frame()); 372 ASSERT(init.frame() == frame());
337 373
338 clearDocument(); 374 clearDocument();
339 375
340 m_document = createDocument(mimeType, init, forceXHTML); 376 m_document = createDocument(mimeType, init, forceXHTML);
341 m_eventQueue = DOMWindowEventQueue::create(m_document.get()); 377 m_eventQueue = DOMWindowEventQueue::create(m_document.get());
378 m_networkStateObserver = new NetworkStateObserver(*this);
dcheng 2017/02/22 08:05:13 The main question I have about this CL is why Netw
kinuko 2017/02/22 08:38:27 Done.
342 m_document->initialize(); 379 m_document->initialize();
343 380
344 if (!frame()) 381 if (!frame())
345 return m_document; 382 return m_document;
346 383
347 frame()->script().updateDocument(); 384 frame()->script().updateDocument();
348 m_document->updateViewportDescription(); 385 m_document->updateViewportDescription();
349 386
350 if (frame()->page() && frame()->view()) { 387 if (frame()->page() && frame()->view()) {
351 if (ScrollingCoordinator* scrollingCoordinator = 388 if (ScrollingCoordinator* scrollingCoordinator =
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 m_locationbar = nullptr; 537 m_locationbar = nullptr;
501 m_menubar = nullptr; 538 m_menubar = nullptr;
502 m_personalbar = nullptr; 539 m_personalbar = nullptr;
503 m_scrollbars = nullptr; 540 m_scrollbars = nullptr;
504 m_statusbar = nullptr; 541 m_statusbar = nullptr;
505 m_toolbar = nullptr; 542 m_toolbar = nullptr;
506 m_navigator = nullptr; 543 m_navigator = nullptr;
507 m_media = nullptr; 544 m_media = nullptr;
508 m_customElements = nullptr; 545 m_customElements = nullptr;
509 m_applicationCache = nullptr; 546 m_applicationCache = nullptr;
547 m_networkStateObserver = nullptr;
510 } 548 }
511 549
512 void LocalDOMWindow::sendOrientationChangeEvent() { 550 void LocalDOMWindow::sendOrientationChangeEvent() {
513 ASSERT(RuntimeEnabledFeatures::orientationEventEnabled()); 551 ASSERT(RuntimeEnabledFeatures::orientationEventEnabled());
514 ASSERT(frame()->isMainFrame()); 552 ASSERT(frame()->isMainFrame());
515 553
516 // Before dispatching the event, build a list of all frames in the page 554 // Before dispatching the event, build a list of all frames in the page
517 // to send the event to, to mitigate side effects from event handlers 555 // to send the event to, to mitigate side effects from event handlers
518 // potentially interfering with others. 556 // potentially interfering with others.
519 HeapVector<Member<Frame>> frames; 557 HeapVector<Member<Frame>> frames;
(...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after
1618 visitor->trace(m_menubar); 1656 visitor->trace(m_menubar);
1619 visitor->trace(m_personalbar); 1657 visitor->trace(m_personalbar);
1620 visitor->trace(m_scrollbars); 1658 visitor->trace(m_scrollbars);
1621 visitor->trace(m_statusbar); 1659 visitor->trace(m_statusbar);
1622 visitor->trace(m_toolbar); 1660 visitor->trace(m_toolbar);
1623 visitor->trace(m_navigator); 1661 visitor->trace(m_navigator);
1624 visitor->trace(m_media); 1662 visitor->trace(m_media);
1625 visitor->trace(m_customElements); 1663 visitor->trace(m_customElements);
1626 visitor->trace(m_external); 1664 visitor->trace(m_external);
1627 visitor->trace(m_applicationCache); 1665 visitor->trace(m_applicationCache);
1666 visitor->trace(m_networkStateObserver);
1628 visitor->trace(m_eventQueue); 1667 visitor->trace(m_eventQueue);
1629 visitor->trace(m_postMessageTimers); 1668 visitor->trace(m_postMessageTimers);
1630 visitor->trace(m_visualViewport); 1669 visitor->trace(m_visualViewport);
1631 visitor->trace(m_eventListenerObservers); 1670 visitor->trace(m_eventListenerObservers);
1632 DOMWindow::trace(visitor); 1671 DOMWindow::trace(visitor);
1633 Supplementable<LocalDOMWindow>::trace(visitor); 1672 Supplementable<LocalDOMWindow>::trace(visitor);
1634 } 1673 }
1635 1674
1636 DEFINE_TRACE_WRAPPERS(LocalDOMWindow) { 1675 DEFINE_TRACE_WRAPPERS(LocalDOMWindow) {
1637 visitor->traceWrappers(m_customElements); 1676 visitor->traceWrappers(m_customElements);
1638 DOMWindow::traceWrappers(visitor); 1677 DOMWindow::traceWrappers(visitor);
1639 } 1678 }
1640 1679
1641 } // namespace blink 1680 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/LocalDOMWindow.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