| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_SESSIONS_TAB_LOADER_DELEGATE_H_ |
| #define CHROME_BROWSER_SESSIONS_TAB_LOADER_DELEGATE_H_ |
| |
| #include <memory> |
| |
| #include "base/time/time.h" |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| namespace resource_coordinator { |
| class SessionRestorePolicy; |
| } |
| |
| class TabLoaderCallback { |
| public: |
| // This function will get called to suppress and to allow tab loading. Tab |
| // loading is initially enabled. |
| virtual void SetTabLoadingEnabled(bool enable_tab_loading) = 0; |
| |
| // Invoked by the delegate to inform the tab loader of a change in the score |
| // of a tab. A higher score means the tab should be restored sooner. |
| virtual void NotifyTabScoreChanged(content::WebContents* contents, |
| float score) = 0; |
| }; |
| |
| // TabLoaderDelegate is created once the SessionRestore process is complete and |
| // the loading of hidden tabs starts. |
| class TabLoaderDelegate { |
| public: |
| virtual ~TabLoaderDelegate() {} |
| |
| // Create a tab loader delegate. |TabLoaderCallback::SetTabLoadingEnabled| can |
| // get called to disable / enable tab loading. |
| // The callback object is valid as long as this object exists. |
| static std::unique_ptr<TabLoaderDelegate> Create(TabLoaderCallback* callback); |
| |
| // Returns the default timeout time after which the first non-visible tab |
| // gets loaded if the first (visible) tab did not finish loading. |
| virtual base::TimeDelta GetFirstTabLoadingTimeout() const = 0; |
| |
| // Returns the default timeout time after which the next tab gets loaded if |
| // the previous tab did not finish loading. |
| virtual base::TimeDelta GetTimeoutBeforeLoadingNextTab() const = 0; |
| |
| // Returns the maximum number of tabs that should be loading simultaneously. |
| virtual size_t GetMaxSimultaneousTabLoads() const = 0; |
| |
| // Notifies the delegate of a tab that will be restored. This informs the |
| // delegate that this tab is being tracked, and changes in its priority or |
| // ranking should be forwarded to the TabLoader. WebContents provided to the |
| // delegate via this function are guaranteed to remain valid to derefence |
| // until a subsequent RemoveTab. Returns an initial score for the tab. |
| virtual float AddTabForScoring(content::WebContents* contents) const = 0; |
| |
| // Notifies the delegate of a tab that is no longer being tracked. |
| virtual void RemoveTabForScoring(content::WebContents* contents) const = 0; |
| |
| // Determines whether or not the given tab should be loaded. If this returns |
| // false, then the TabLoader no longer attempts to load |contents| and removes |
| // it from TabLoaders internal state. This is called immediately prior to |
| // trying to load the tab and allows the TabLoader to respond to changing |
| // conditions. |
| virtual bool ShouldLoad(content::WebContents* contents) const = 0; |
| |
| // Notifies the delegate that a tab load has been initiated. |
| virtual void NotifyTabLoadStarted() = 0; |
| |
| // Returns the policy engine that is in use. |
| virtual resource_coordinator::SessionRestorePolicy* GetPolicyForTesting() = 0; |
| |
| // Testing seam to inject a custom SessionRestorePolicy. |
| static void SetSessionRestorePolicyForTesting( |
| resource_coordinator::SessionRestorePolicy* policy); |
| |
| protected: |
| // The delegate should only be created via the factory function. |
| TabLoaderDelegate() {} |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(TabLoaderDelegate); |
| }; |
| |
| #endif // CHROME_BROWSER_SESSIONS_TAB_LOADER_DELEGATE_H_ |