Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |