| 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.
|
| 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;
|
|
|