Chromium Code Reviews| Index: third_party/WebKit/Source/core/page/Page.h |
| diff --git a/third_party/WebKit/Source/core/page/Page.h b/third_party/WebKit/Source/core/page/Page.h |
| index 69e603bfc81921b7e1cc668dbaa8ee6dc62ee935..2c402f710641810b8318150be96c33d55ac8c989 100644 |
| --- a/third_party/WebKit/Source/core/page/Page.h |
| +++ b/third_party/WebKit/Source/core/page/Page.h |
| @@ -60,6 +60,7 @@ class Frame; |
| class FrameHost; |
| class PluginData; |
| class PointerLockController; |
| +class ScopedPageSuspender; |
| class ScrollingCoordinator; |
| class Settings; |
| class SpellCheckerClient; |
| @@ -104,7 +105,8 @@ class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>, |
| ~Page() override; |
| - void willBeClosed(); |
| + void closeSoon(); |
| + bool isClosing() const { return m_isClosing; } |
| using PageSet = PersistentHeapHashSet<WeakMember<Page>>; |
| @@ -187,10 +189,13 @@ class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>, |
| return m_tabKeyCyclesThroughElements; |
| } |
| - // DefersLoading is used to delay loads during modal dialogs. |
| - // Modal dialogs are supposed to freeze all background processes |
| - // in the page, including prevent additional loads from staring/continuing. |
| - void setSuspended(bool); |
| + // Suspension is used to implement the "Optionally, pause while waiting for |
| + // the user to acknowledge the message" step of simple dialog processing: |
| + // https://html.spec.whatwg.org/multipage/webappapis.html#simple-dialogs |
| + // |
| + // Per https://html.spec.whatwg.org/multipage/webappapis.html#pause, no loads |
| + // are allowed to start/continue in this state, and all background processing |
| + // is also suspended. |
|
kinuko
2016/12/20 08:09:28
A bit tangential, but: afaik we're going to introd
dcheng
2016/12/20 08:19:04
Yeah, it's definitely confusing. This was renamed
haraken
2016/12/20 10:05:38
Yeah, this is confusing...
Just to clarify: The "
|
| bool suspended() const { return m_suspended; } |
| void setPageScaleFactor(float); |
| @@ -228,6 +233,8 @@ class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>, |
| void willBeDestroyed(); |
| private: |
| + friend class ScopedPageSuspender; |
| + |
| explicit Page(PageClients&); |
| void initGroup(); |
| @@ -235,6 +242,9 @@ class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>, |
| // SettingsDelegate overrides. |
| void settingsChanged(SettingsDelegate::ChangeType) override; |
| + // ScopedPageSuspender helpers. |
| + void setSuspended(bool); |
| + |
| Member<PageAnimator> m_animator; |
| const Member<AutoscrollController> m_autoscrollController; |
| Member<ChromeClient> m_chromeClient; |
| @@ -270,6 +280,12 @@ class CORE_EXPORT Page final : public GarbageCollectedFinalized<Page>, |
| HostsUsingFeatures m_hostsUsingFeatures; |
| bool m_openedByDOM; |
| + // Set to true when window.close() has been called and the Page will be |
| + // destroyed. The browsing contexts in this page should no longer be |
| + // discoverable via JS. |
| + // TODO(dcheng): Try to remove |DOMWindow::m_windowIsClosing| in favor of |
| + // this. However, this depends on resolving https://crbug.com/674641 |
| + bool m_isClosing; |
| bool m_tabKeyCyclesThroughElements; |
| bool m_suspended; |