blob: 88123c9ac46441af085375489a9a9db291622853 [file] [log] [blame]
// 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_