Index: chrome/browser/chromeos/login/captive_portal_window_browsertest.cc |
diff --git a/chrome/browser/chromeos/login/captive_portal_window_browsertest.cc b/chrome/browser/chromeos/login/captive_portal_window_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c098f272a92327c0d0a4872f5a60168cb241ecac |
--- /dev/null |
+++ b/chrome/browser/chromeos/login/captive_portal_window_browsertest.cc |
@@ -0,0 +1,155 @@ |
+// Copyright (c) 2013 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 "base/command_line.h" |
+#include "base/compiler_specific.h" |
+#include "base/logging.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "chrome/browser/chromeos/cros/cros_in_process_browser_test.h" |
+#include "chrome/browser/chromeos/login/captive_portal_window_proxy.h" |
+#include "chrome/browser/chromeos/login/login_display_host_impl.h" |
+#include "chromeos/chromeos_switches.h" |
+ |
+namespace chromeos { |
+ |
+namespace { |
+ |
+// Stub implementation of CaptivePortalWindowProxyDelegate, does |
+// nothing and used to instantiate CaptivePortalWindowProxy. |
+class CaptivePortalWindowProxyStubDelegate |
+ : public CaptivePortalWindowProxyDelegate { |
+ public: |
+ CaptivePortalWindowProxyStubDelegate(): num_portal_notifications_(0) { |
+ } |
+ |
+ virtual ~CaptivePortalWindowProxyStubDelegate() { |
+ } |
+ |
+ virtual void OnPortalDetected() OVERRIDE { |
+ ++num_portal_notifications_; |
+ } |
+ |
+ int num_portal_notifications() const { return num_portal_notifications_; } |
+ |
+ private: |
+ int num_portal_notifications_; |
+}; |
+ |
+} // namespace |
+ |
+class CaptivePortalWindowTest : public CrosInProcessBrowserTest { |
+ protected: |
+ void ShowIfRedirected() { |
+ captive_portal_window_proxy_->ShowIfRedirected(); |
+ } |
+ |
+ void Show() { |
+ captive_portal_window_proxy_->Show(); |
+ } |
+ |
+ void Close() { |
+ captive_portal_window_proxy_->Close(); |
+ } |
+ |
+ void OnRedirected() { |
+ captive_portal_window_proxy_->OnRedirected(); |
+ } |
+ |
+ void OnOriginalURLLoaded() { |
+ captive_portal_window_proxy_->OnOriginalURLLoaded(); |
+ } |
+ |
+ void CheckState(bool is_shown, int num_portal_notifications) { |
+ bool actual_is_shown = (CaptivePortalWindowProxy::STATE_DISPLAYED == |
+ captive_portal_window_proxy_->GetState()); |
+ ASSERT_EQ(is_shown, actual_is_shown); |
+ ASSERT_EQ(num_portal_notifications, delegate_.num_portal_notifications()); |
+ } |
+ |
+ virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
+ command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests); |
+ command_line->AppendSwitch(chromeos::switches::kLoginManager); |
+ } |
+ |
+ virtual void SetUpOnMainThread() OVERRIDE { |
+ CHECK(LoginDisplayHostImpl::default_host()); |
+ gfx::NativeWindow native_window = |
+ LoginDisplayHostImpl::default_host()->GetNativeWindow(); |
+ captive_portal_window_proxy_.reset( |
+ new CaptivePortalWindowProxy(&delegate_, native_window)); |
+ } |
+ |
+ private: |
+ scoped_ptr<CaptivePortalWindowProxy> captive_portal_window_proxy_; |
+ CaptivePortalWindowProxyStubDelegate delegate_; |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(CaptivePortalWindowTest, ShowClose) { |
+ CheckState(false, 0); |
+ |
+ Show(); |
+ CheckState(true, 0); |
+ |
+ Close(); |
+ CheckState(false, 0); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(CaptivePortalWindowTest, OnRedirected) { |
+ CheckState(false, 0); |
+ |
+ ShowIfRedirected(); |
+ CheckState(false, 0); |
+ |
+ OnRedirected(); |
+ CheckState(true, 1); |
+ |
+ Close(); |
+ CheckState(false, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(CaptivePortalWindowTest, OnOriginalURLLoaded) { |
+ CheckState(false, 0); |
+ |
+ ShowIfRedirected(); |
+ CheckState(false, 0); |
+ |
+ OnRedirected(); |
+ CheckState(true, 1); |
+ |
+ OnOriginalURLLoaded(); |
+ CheckState(false, 1); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(CaptivePortalWindowTest, MultipleCalls) { |
+ CheckState(false, 0); |
+ |
+ ShowIfRedirected(); |
+ CheckState(false, 0); |
+ |
+ Show(); |
+ CheckState(true, 0); |
+ |
+ Close(); |
+ CheckState(false, 0); |
+ |
+ OnRedirected(); |
+ CheckState(false, 1); |
+ |
+ OnOriginalURLLoaded(); |
+ CheckState(false, 1); |
+ |
+ Show(); |
+ CheckState(true, 1); |
+ |
+ OnRedirected(); |
+ CheckState(true, 2); |
+ |
+ Close(); |
+ CheckState(false, 2); |
+ |
+ OnOriginalURLLoaded(); |
+ CheckState(false, 2); |
+} |
+ |
+} // namespace chromeos |