Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2393)

Unified Diff: chrome/browser/chromeos/net/network_portal_detector_strategy.cc

Issue 183973029: Refactoring of the NetworkPortalDetector. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixes. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/net/network_portal_detector_strategy.cc
diff --git a/chrome/browser/chromeos/net/network_portal_detector_strategy.cc b/chrome/browser/chromeos/net/network_portal_detector_strategy.cc
new file mode 100644
index 0000000000000000000000000000000000000000..132354e6573ca7448f2c82f46230cf0842582229
--- /dev/null
+++ b/chrome/browser/chromeos/net/network_portal_detector_strategy.cc
@@ -0,0 +1,158 @@
+// 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.
+
+#include "chrome/browser/chromeos/net/network_portal_detector_strategy.h"
+
+#include "base/logging.h"
+#include "chromeos/network/network_handler.h"
+#include "chromeos/network/network_state.h"
+#include "chromeos/network/network_state_handler.h"
+
+namespace chromeos {
+
+namespace {
+
+const NetworkState* DefaultNetwork() {
+ return NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
+}
+
+class LoginScreenStrategy : public PortalDetectorStrategy {
+ public:
+ static const int kMaxAttempts = 3;
+ static const int kDelayBetweenAttemptsSec = 3;
+ static const int kBaseAttemptTimeoutSec = 5;
+
+ LoginScreenStrategy() {}
+ virtual ~LoginScreenStrategy() {}
+
+ protected:
+ // PortalDetectorStrategy overrides:
+ virtual StrategyId Id() const OVERRIDE { return STRATEGY_ID_LOGIN_SCREEN; }
+ virtual bool CanPerformAttemptImpl() OVERRIDE {
+ return delegate_->AttemptCount() < kMaxAttempts;
+ }
+ virtual base::TimeDelta GetDelayTillNextAttemptImpl() OVERRIDE {
+ return AdjustDelay(base::TimeDelta::FromSeconds(kDelayBetweenAttemptsSec));
+ }
+ virtual base::TimeDelta GetNextAttemptTimeoutImpl() OVERRIDE {
+ int timeout = DefaultNetwork()
+ ? (delegate_->AttemptCount() + 1) * kBaseAttemptTimeoutSec
+ : kBaseAttemptTimeoutSec;
+ return base::TimeDelta::FromSeconds(timeout);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(LoginScreenStrategy);
+};
+
+class ErrorScreenStrategy : public PortalDetectorStrategy {
+ public:
+ static const int kDelayBetweenAttemptsSec = 3;
+ static const int kAttemptTimeoutSec = 15;
+
+ ErrorScreenStrategy() {}
+ virtual ~ErrorScreenStrategy() {}
+
+ protected:
+ // PortalDetectorStrategy overrides:
+ virtual StrategyId Id() const OVERRIDE { return STRATEGY_ID_ERROR_SCREEN; }
+ virtual bool CanPerformAttemptImpl() OVERRIDE { return true; }
+ virtual bool CanPerformAttemptAfterDetectionImpl() OVERRIDE { return true; }
+ virtual base::TimeDelta GetDelayTillNextAttemptImpl() OVERRIDE {
+ return AdjustDelay(base::TimeDelta::FromSeconds(kDelayBetweenAttemptsSec));
+ }
+ virtual base::TimeDelta GetNextAttemptTimeoutImpl() OVERRIDE {
+ return base::TimeDelta::FromSeconds(kAttemptTimeoutSec);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ErrorScreenStrategy);
+};
+
+} // namespace
+
+// PortalDetectorStrategy -----------------------------------------------------
+
+// static
+base::TimeDelta PortalDetectorStrategy::delay_till_next_attempt_for_testing_;
+
+// static
+bool PortalDetectorStrategy::delay_till_next_attempt_for_testing_initialized_ =
+ false;
+
+// static
+base::TimeDelta PortalDetectorStrategy::next_attempt_timeout_for_testing_;
+
+// static
+bool PortalDetectorStrategy::next_attempt_timeout_for_testing_initialized_ =
+ false;
+
+PortalDetectorStrategy::PortalDetectorStrategy() : delegate_(NULL) {}
+
+PortalDetectorStrategy::~PortalDetectorStrategy() {}
+
+// statc
+scoped_ptr<PortalDetectorStrategy> PortalDetectorStrategy::CreateById(
+ StrategyId id) {
+ switch (id) {
+ case STRATEGY_ID_LOGIN_SCREEN:
+ return scoped_ptr<PortalDetectorStrategy>(new LoginScreenStrategy());
+ case STRATEGY_ID_ERROR_SCREEN:
+ return scoped_ptr<PortalDetectorStrategy>(new ErrorScreenStrategy());
+ default:
+ NOTREACHED();
+ return scoped_ptr<PortalDetectorStrategy>(
+ static_cast<PortalDetectorStrategy*>(NULL));
+ }
+}
+
+bool PortalDetectorStrategy::CanPerformAttempt() {
+ return CanPerformAttemptImpl();
+}
+
+bool PortalDetectorStrategy::CanPerformAttemptAfterDetection() {
+ return CanPerformAttemptAfterDetectionImpl();
+}
+
+base::TimeDelta PortalDetectorStrategy::GetDelayTillNextAttempt() {
+ if (delay_till_next_attempt_for_testing_initialized_)
+ return delay_till_next_attempt_for_testing_;
+ return GetDelayTillNextAttemptImpl();
+}
+
+base::TimeDelta PortalDetectorStrategy::GetNextAttemptTimeout() {
+ if (next_attempt_timeout_for_testing_initialized_)
+ return next_attempt_timeout_for_testing_;
+ return GetNextAttemptTimeoutImpl();
+}
+
+bool PortalDetectorStrategy::CanPerformAttemptImpl() { return false; }
+
+bool PortalDetectorStrategy::CanPerformAttemptAfterDetectionImpl() {
+ return false;
+}
+
+base::TimeDelta PortalDetectorStrategy::GetDelayTillNextAttemptImpl() {
+ return base::TimeDelta();
+}
+
+base::TimeDelta PortalDetectorStrategy::GetNextAttemptTimeoutImpl() {
+ return base::TimeDelta();
+}
+
+base::TimeDelta PortalDetectorStrategy::AdjustDelay(
+ const base::TimeDelta& delay) {
+ if (!delegate_->AttemptCount())
+ return base::TimeDelta();
+
+ base::TimeTicks now = delegate_->GetCurrentTimeTicks();
+ base::TimeDelta elapsed;
+ if (now > delegate_->AttemptStartTime())
+ elapsed = now - delegate_->AttemptStartTime();
+ if (delay > elapsed)
+ return delay - elapsed;
+ return base::TimeDelta();
+}
+
+} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698