| Index: chrome/browser/sessions/tab_loader_delegate.cc
|
| diff --git a/chrome/browser/sessions/tab_loader_delegate.cc b/chrome/browser/sessions/tab_loader_delegate.cc
|
| index 8e926d4217deb8e26395bdbe6b5e45d70d1a6014..640495ed68077d5f8379997dd0b7d310c539196f 100644
|
| --- a/chrome/browser/sessions/tab_loader_delegate.cc
|
| +++ b/chrome/browser/sessions/tab_loader_delegate.cc
|
| @@ -4,33 +4,65 @@
|
|
|
| #include "chrome/browser/sessions/tab_loader_delegate.h"
|
|
|
| -#if !defined(OS_CHROMEOS)
|
| +#include "net/base/network_change_notifier.h"
|
|
|
| namespace {
|
|
|
| // The timeout time after which the next tab gets loaded if the previous tab did
|
| -// not finish loading yet.
|
| -static const int kInitialDelayTimerMS = 100;
|
| +// not finish loading yet. The used value is half of the median value of all
|
| +// ChromeOS devices loading the 25 most common web pages. Half is chosen since
|
| +// the loading time is a mix of server response and data bandwidth.
|
| +static const int kInitialDelayTimerMS = 1500;
|
|
|
| -class TabLoaderDelegateImpl : public TabLoaderDelegate {
|
| +class TabLoaderDelegateImpl
|
| + : public TabLoaderDelegate,
|
| + public net::NetworkChangeNotifier::ConnectionTypeObserver {
|
| public:
|
| - TabLoaderDelegateImpl() {}
|
| - ~TabLoaderDelegateImpl() override {}
|
| + explicit TabLoaderDelegateImpl(TabLoaderCallback* callback);
|
| + ~TabLoaderDelegateImpl() override;
|
|
|
| // TabLoaderDelegate:
|
| base::TimeDelta GetTimeoutBeforeLoadingNextTab() const override {
|
| return base::TimeDelta::FromMilliseconds(kInitialDelayTimerMS);
|
| }
|
|
|
| + // net::NetworkChangeNotifier::ConnectionTypeObserver:
|
| + void OnConnectionTypeChanged(
|
| + net::NetworkChangeNotifier::ConnectionType type) override;
|
| +
|
| private:
|
| + // The function to call when the connection type changes.
|
| + TabLoaderCallback* callback_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(TabLoaderDelegateImpl);
|
| };
|
| +
|
| +TabLoaderDelegateImpl::TabLoaderDelegateImpl(TabLoaderCallback* callback)
|
| + : callback_(callback) {
|
| + net::NetworkChangeNotifier::AddConnectionTypeObserver(this);
|
| + if (net::NetworkChangeNotifier::IsOffline()) {
|
| + // When we are off-line we do not allow loading of tabs, since each of
|
| + // these tabs would start loading simultaneously when going online.
|
| + // TODO(skuhne): Once we get a higher level resource control logic which
|
| + // distributes network access, we can remove this.
|
| + callback->SetTabLoadingEnabled(false);
|
| + }
|
| +}
|
| +
|
| +TabLoaderDelegateImpl::~TabLoaderDelegateImpl() {
|
| + net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
|
| +}
|
| +
|
| +void TabLoaderDelegateImpl::OnConnectionTypeChanged(
|
| + net::NetworkChangeNotifier::ConnectionType type) {
|
| + callback_->SetTabLoadingEnabled(
|
| + type != net::NetworkChangeNotifier::CONNECTION_NONE);
|
| +}
|
| } // namespace
|
|
|
| // static
|
| scoped_ptr<TabLoaderDelegate> TabLoaderDelegate::Create(
|
| TabLoaderCallback* callback) {
|
| - return scoped_ptr<TabLoaderDelegate>(new TabLoaderDelegateImpl());
|
| + return scoped_ptr<TabLoaderDelegate>(
|
| + new TabLoaderDelegateImpl(callback));
|
| }
|
| -
|
| -#endif // !defined(OS_CHROMEOS)
|
|
|