Index: chrome/browser/chromeos/net/network_portal_detector_strategy.h |
diff --git a/chrome/browser/chromeos/net/network_portal_detector_strategy.h b/chrome/browser/chromeos/net/network_portal_detector_strategy.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9d18976a79454d42d27c0b7ca7c068070a15cea1 |
--- /dev/null |
+++ b/chrome/browser/chromeos/net/network_portal_detector_strategy.h |
@@ -0,0 +1,111 @@ |
+// 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_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_STRATEGY_H_ |
+#define CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_STRATEGY_H_ |
+ |
+#include "base/compiler_specific.h" |
+#include "base/macros.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/time/time.h" |
+ |
+namespace chromeos { |
+ |
+class PortalDetectorStrategy { |
+ public: |
+ enum StrategyId { |
+ STRATEGY_ID_LOGIN_SCREEN, |
+ STRATEGY_ID_ERROR_SCREEN |
+ }; |
+ |
+ class Delegate { |
+ public: |
+ virtual ~Delegate() {} |
+ |
+ // Returns number of performed attempts. |
+ virtual int AttemptCount() = 0; |
+ |
+ // Returns time when current attempt was started. |
+ virtual base::TimeTicks AttemptStartTime() = 0; |
+ |
+ // Returns current TimeTicks. |
+ virtual base::TimeTicks GetCurrentTimeTicks() = 0; |
+ }; |
+ |
+ virtual ~PortalDetectorStrategy(); |
+ |
+ static scoped_ptr<PortalDetectorStrategy> CreateById(StrategyId id); |
+ |
+ void set_delegate(Delegate* delegate) { delegate_ = delegate; } |
+ |
+ // Returns true when detection attempt can be performed according to |
+ // current strategy. |
+ bool CanPerformAttempt(); |
+ |
+ // Returns true if additional attempt could be scheduled after |
+ // detection. |
+ bool CanPerformAttemptAfterDetection(); |
+ |
+ // Returns delay before next detection attempt. This delay is needed |
+ // to separate detection attempts in time. |
+ base::TimeDelta GetDelayTillNextAttempt(); |
+ |
+ // Returns timeout for the next detection attempt. |
+ base::TimeDelta GetNextAttemptTimeout(); |
+ |
+ virtual StrategyId Id() const = 0; |
+ |
+ protected: |
+ PortalDetectorStrategy(); |
+ |
+ // Interface for subclasses: |
+ virtual bool CanPerformAttemptImpl(); |
+ virtual bool CanPerformAttemptAfterDetectionImpl(); |
+ virtual base::TimeDelta GetDelayTillNextAttemptImpl(); |
+ virtual base::TimeDelta GetNextAttemptTimeoutImpl(); |
+ |
+ // Adjusts |delay| according to current attempt count and elapsed time |
+ // since previous attempt. |
+ base::TimeDelta AdjustDelay(const base::TimeDelta& delay); |
+ |
+ Delegate* delegate_; |
+ |
+ private: |
+ friend class NetworkPortalDetectorImplTest; |
+ |
+ static void set_delay_till_next_attempt_for_testing( |
+ const base::TimeDelta& timeout) { |
+ delay_till_next_attempt_for_testing_ = timeout; |
+ delay_till_next_attempt_for_testing_initialized_ = true; |
+ } |
+ |
+ static void set_next_attempt_timeout_for_testing( |
+ const base::TimeDelta& timeout) { |
+ next_attempt_timeout_for_testing_ = timeout; |
+ next_attempt_timeout_for_testing_initialized_ = true; |
+ } |
+ |
+ static void reset_fields_for_testing() { |
+ delay_till_next_attempt_for_testing_initialized_ = false; |
+ next_attempt_timeout_for_testing_initialized_ = false; |
+ } |
+ |
+ // Test delay before detection attempt, used by unit tests. |
+ static base::TimeDelta delay_till_next_attempt_for_testing_; |
+ |
+ // True when |min_time_between_attempts_for_testing_| is initialized. |
+ static bool delay_till_next_attempt_for_testing_initialized_; |
+ |
+ // Test timeout for a detection attempt, used by unit tests. |
+ static base::TimeDelta next_attempt_timeout_for_testing_; |
+ |
+ // True when |next_attempt_timeout_for_testing_| is initialized. |
+ static bool next_attempt_timeout_for_testing_initialized_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PortalDetectorStrategy); |
+}; |
+ |
+} // namespace chromeos |
+ |
+#endif // CHROME_BROWSER_CHROMEOS_NET_NETWORK_PORTAL_DETECTOR_STRATEGY_H_ |