Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / oobe_base_test.cc
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/login/oobe_base_test.h"
6
7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/path_service.h"
10 #include "chrome/browser/chrome_notification_types.h"
11 #include "chrome/browser/chromeos/login/existing_user_controller.h"
12 #include "chrome/browser/chromeos/login/fake_user_manager.h"
13 #include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
14 #include "chrome/browser/lifetime/application_lifetime.h"
15 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
16 #include "chrome/common/chrome_paths.h"
17 #include "chrome/common/chrome_switches.h"
18 #include "chromeos/chromeos_switches.h"
19 #include "content/public/browser/notification_observer.h"
20 #include "content/public/browser/notification_registrar.h"
21 #include "content/public/browser/notification_service.h"
22 #include "content/public/test/browser_test_utils.h"
23 #include "google_apis/gaia/gaia_switches.h"
24 #include "net/dns/mock_host_resolver.h"
25 #include "net/test/embedded_test_server/http_request.h"
26 #include "net/test/embedded_test_server/http_response.h"
27
28 namespace chromeos {
29
30 namespace {
31
32 // Note the path name must be the same as in shill stub.
33 const char kStubEthernetServicePath[] = "eth1";
34
35 }  // namespace
36
37 OobeBaseTest::OobeBaseTest()
38     : fake_gaia_(new FakeGaia()),
39       network_portal_detector_(NULL),
40       needs_background_networking_(false) {
41   set_exit_when_last_browser_closes(false);
42   set_chromeos_user_ = false;
43 }
44
45 OobeBaseTest::~OobeBaseTest() {
46 }
47
48 void OobeBaseTest::SetUp() {
49   base::FilePath test_data_dir;
50   PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
51   embedded_test_server()->ServeFilesFromDirectory(test_data_dir);
52   embedded_test_server()->RegisterRequestHandler(
53       base::Bind(&FakeGaia::HandleRequest, base::Unretained(fake_gaia_.get())));
54   ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
55   // Stop IO thread here because no threads are allowed while
56   // spawning sandbox host process. See crbug.com/322732.
57   embedded_test_server()->StopThread();
58
59   ExtensionApiTest::SetUp();
60 }
61
62 void OobeBaseTest::SetUpInProcessBrowserTestFixture() {
63   host_resolver()->AddRule("*", "127.0.0.1");
64   network_portal_detector_ = new NetworkPortalDetectorTestImpl();
65   NetworkPortalDetector::InitializeForTesting(network_portal_detector_);
66   network_portal_detector_->SetDefaultNetworkPathForTesting(
67       kStubEthernetServicePath);
68
69   ExtensionApiTest::SetUpInProcessBrowserTestFixture();
70 }
71
72 void OobeBaseTest::SetUpOnMainThread() {
73   // Restart the thread as the sandbox host process has already been spawned.
74   embedded_test_server()->RestartThreadAndListen();
75
76   ExtensionApiTest::SetUpOnMainThread();
77 }
78
79 void OobeBaseTest::CleanUpOnMainThread() {
80   // If the login display is still showing, exit gracefully.
81   if (LoginDisplayHostImpl::default_host()) {
82     base::MessageLoop::current()->PostTask(FROM_HERE,
83                                            base::Bind(&chrome::AttemptExit));
84     content::RunMessageLoop();
85   }
86
87   ExtensionApiTest::CleanUpOnMainThread();
88 }
89
90 void OobeBaseTest::SetUpCommandLine(CommandLine* command_line) {
91   ExtensionApiTest::SetUpCommandLine(command_line);
92   command_line->AppendSwitch(chromeos::switches::kLoginManager);
93   command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests);
94   if (!needs_background_networking_)
95     command_line->AppendSwitch(::switches::kDisableBackgroundNetworking);
96   command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user");
97
98   // Create gaia and webstore URL from test server url but using different
99   // host names. This is to avoid gaia response being tagged as from
100   // webstore in chrome_resource_dispatcher_host_delegate.cc.
101   const GURL& server_url = embedded_test_server()->base_url();
102
103   std::string gaia_host("gaia");
104   GURL::Replacements replace_gaia_host;
105   replace_gaia_host.SetHostStr(gaia_host);
106   GURL gaia_url = server_url.ReplaceComponents(replace_gaia_host);
107   command_line->AppendSwitchASCII(::switches::kGaiaUrl, gaia_url.spec());
108   command_line->AppendSwitchASCII(::switches::kLsoUrl, gaia_url.spec());
109   command_line->AppendSwitchASCII(::switches::kGoogleApisUrl,
110                                   gaia_url.spec());
111   fake_gaia_->Initialize();
112 }
113
114 void OobeBaseTest::SimulateNetworkOffline() {
115   NetworkPortalDetector::CaptivePortalState offline_state;
116   offline_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_OFFLINE;
117   network_portal_detector_->SetDetectionResultsForTesting(
118       kStubEthernetServicePath, offline_state);
119   network_portal_detector_->NotifyObserversForTesting();
120 }
121
122 base::Closure OobeBaseTest::SimulateNetworkOfflineClosure() {
123   return base::Bind(&OobeBaseTest::SimulateNetworkOffline,
124                     base::Unretained(this));
125 }
126
127 void OobeBaseTest::SimulateNetworkOnline() {
128   NetworkPortalDetector::CaptivePortalState online_state;
129   online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE;
130   online_state.response_code = 204;
131   network_portal_detector_->SetDetectionResultsForTesting(
132       kStubEthernetServicePath, online_state);
133   network_portal_detector_->NotifyObserversForTesting();
134 }
135
136 base::Closure OobeBaseTest::SimulateNetworkOnlineClosure() {
137   return base::Bind(&OobeBaseTest::SimulateNetworkOnline,
138                     base::Unretained(this));
139 }
140
141 void OobeBaseTest::SimulateNetworkPortal() {
142   NetworkPortalDetector::CaptivePortalState portal_state;
143   portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL;
144   network_portal_detector_->SetDetectionResultsForTesting(
145       kStubEthernetServicePath, portal_state);
146   network_portal_detector_->NotifyObserversForTesting();
147 }
148
149 base::Closure OobeBaseTest::SimulateNetworkPortalClosure() {
150   return base::Bind(&OobeBaseTest::SimulateNetworkPortal,
151                     base::Unretained(this));
152 }
153
154 void OobeBaseTest::JsExpect(const std::string& expression) {
155   bool result;
156   ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
157       GetLoginUI()->GetWebContents(),
158       "window.domAutomationController.send(!!(" + expression + "));",
159        &result));
160   ASSERT_TRUE(result) << expression;
161 }
162
163 content::WebUI* OobeBaseTest::GetLoginUI() {
164   return static_cast<chromeos::LoginDisplayHostImpl*>(
165       chromeos::LoginDisplayHostImpl::default_host())->GetOobeUI()->web_ui();
166 }
167
168 SigninScreenHandler* OobeBaseTest::GetSigninScreenHandler() {
169   return static_cast<chromeos::LoginDisplayHostImpl*>(
170       chromeos::LoginDisplayHostImpl::default_host())
171       ->GetOobeUI()
172       ->signin_screen_handler_for_test();
173 }
174
175 WebUILoginDisplay* OobeBaseTest::GetLoginDisplay() {
176   ExistingUserController* controller =
177       ExistingUserController::current_controller();
178   CHECK(controller);
179   return static_cast<WebUILoginDisplay*>(
180       controller->login_display());
181 }
182
183 }  // namespace chromeos