1 // Copyright 2014 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.
7 #include "base/command_line.h"
8 #include "base/compiler_specific.h"
9 #include "base/files/file_path.h"
10 #include "base/files/file_util.h"
11 #include "base/files/scoped_temp_dir.h"
12 #include "base/macros.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/strings/stringprintf.h"
15 #include "chrome/browser/chrome_notification_types.h"
16 #include "chrome/browser/chromeos/login/test/oobe_base_test.h"
17 #include "chrome/browser/chromeos/login/wizard_controller.h"
18 #include "chrome/browser/policy/test/local_policy_test_server.h"
19 #include "chrome/browser/ui/browser.h"
20 #include "chrome/browser/ui/browser_list.h"
21 #include "chrome/browser/ui/host_desktop.h"
22 #include "chrome/browser/ui/tabs/tab_strip_model.h"
23 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
24 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
25 #include "components/policy/core/common/policy_switches.h"
26 #include "content/public/browser/notification_service.h"
27 #include "content/public/test/test_utils.h"
28 #include "google_apis/gaia/fake_gaia.h"
29 #include "google_apis/gaia/gaia_constants.h"
30 #include "google_apis/gaia/gaia_urls.h"
31 #include "testing/gtest/include/gtest/gtest.h"
38 const char kAccountId
[] = "dla1@example.com";
39 const char kAccountPassword
[] = "letmein";
40 const char* const kStartupURLs
[] = {"chrome://policy", "chrome://about"};
41 const char kTestAuthCode
[] = "fake-auth-code";
42 const char kTestGaiaUberToken
[] = "fake-uber-token";
43 const char kTestAuthLoginAccessToken
[] = "fake-access-token";
44 const char kTestRefreshToken
[] = "fake-refresh-token";
45 const char kTestAuthSIDCookie
[] = "fake-auth-SID-cookie";
46 const char kTestAuthLSIDCookie
[] = "fake-auth-LSID-cookie";
47 const char kTestSessionSIDCookie
[] = "fake-session-SID-cookie";
48 const char kTestSessionLSIDCookie
[] = "fake-session-LSID-cookie";
49 const char kTestUserinfoToken
[] = "fake-userinfo-token";
53 class UserCloudPolicyManagerTest
: public chromeos::OobeBaseTest
{
55 UserCloudPolicyManagerTest() {
56 set_open_about_blank_on_browser_launch(false);
59 ~UserCloudPolicyManagerTest() override
{}
61 void SetUp() override
{
62 ASSERT_TRUE(temp_dir_
.CreateUniqueTempDir());
65 test_server_
.reset(new LocalPolicyTestServer(policy_file_path()));
66 ASSERT_TRUE(test_server_
->Start());
68 OobeBaseTest::SetUp();
71 void SetUpCommandLine(base::CommandLine
* command_line
) override
{
72 command_line
->AppendSwitchASCII(policy::switches::kDeviceManagementUrl
,
73 test_server_
->GetServiceURL().spec());
74 OobeBaseTest::SetUpCommandLine(command_line
);
77 void SetUpOnMainThread() override
{
78 SetMergeSessionParams(kAccountId
);
79 SetupGaiaServerWithAccessTokens();
80 OobeBaseTest::SetUpOnMainThread();
83 void SetupGaiaServerWithAccessTokens() {
84 FakeGaia::AccessTokenInfo token_info
;
85 token_info
.token
= kTestUserinfoToken
;
86 token_info
.scopes
.insert(GaiaConstants::kDeviceManagementServiceOAuth
);
87 token_info
.scopes
.insert(GaiaConstants::kOAuthWrapBridgeUserInfoScope
);
88 token_info
.audience
= GaiaUrls::GetInstance()->oauth2_chrome_client_id();
89 token_info
.email
= kAccountId
;
90 fake_gaia_
->IssueOAuthToken(kTestRefreshToken
, token_info
);
93 void SetMergeSessionParams(const std::string
& email
) {
94 FakeGaia::MergeSessionParams params
;
95 params
.auth_sid_cookie
= kTestAuthSIDCookie
;
96 params
.auth_lsid_cookie
= kTestAuthLSIDCookie
;
97 params
.auth_code
= kTestAuthCode
;
98 params
.refresh_token
= kTestRefreshToken
;
99 params
.access_token
= kTestAuthLoginAccessToken
;
100 params
.gaia_uber_token
= kTestGaiaUberToken
;
101 params
.session_sid_cookie
= kTestSessionSIDCookie
;
102 params
.session_lsid_cookie
= kTestSessionLSIDCookie
;
103 params
.email
= email
;
104 fake_gaia_
->SetMergeSessionParams(params
);
107 void SkipToLoginScreen() {
108 chromeos::WizardController::SkipPostLoginScreensForTesting();
109 chromeos::WizardController
* wizard_controller
=
110 chromeos::WizardController::default_controller();
111 ASSERT_TRUE(wizard_controller
);
112 wizard_controller
->SkipToLoginForTesting(chromeos::LoginScreenContext());
114 content::WindowedNotificationObserver(
115 chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE
,
116 content::NotificationService::AllSources()).Wait();
119 void LogIn(const std::string
& user_id
, const std::string
& password
) {
120 GetLoginDisplay()->ShowSigninScreenForCreds(user_id
, password
);
122 content::WindowedNotificationObserver(
123 chrome::NOTIFICATION_SESSION_STARTED
,
124 content::NotificationService::AllSources()).Wait();
127 void SetServerPolicy() {
128 const char kPolicy
[] =
132 " \"RestoreOnStartup\": 4,"
133 " \"RestoreOnStartupURLs\": ["
134 " \"chrome://policy\","
135 " \"chrome://about\""
138 " \"recommended\": {}"
140 " \"managed_users\": [ \"*\" ],"
141 " \"policy_user\": \"%s\","
142 " \"current_key_index\": 0"
145 const std::string policy
= base::StringPrintf(
146 kPolicy
, dm_protocol::kChromeUserPolicyType
, kAccountId
);
148 const int bytes_written
=
149 base::WriteFile(policy_file_path(), policy
.data(), policy
.size());
150 ASSERT_EQ(static_cast<int>(policy
.size()), bytes_written
);
153 base::FilePath
policy_file_path() const {
154 return temp_dir_
.path().AppendASCII("policy.json");
157 scoped_ptr
<LocalPolicyTestServer
> test_server_
;
159 base::ScopedTempDir temp_dir_
;
162 DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyManagerTest
);
165 IN_PROC_BROWSER_TEST_F(UserCloudPolicyManagerTest
, StartSession
) {
168 LogIn(kAccountId
, kAccountPassword
);
170 // Check that the startup pages specified in policy were opened.
171 BrowserList
* browser_list
=
172 BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH
);
173 EXPECT_EQ(1U, browser_list
->size());
174 Browser
* browser
= browser_list
->get(0);
175 ASSERT_TRUE(browser
);
177 TabStripModel
* tabs
= browser
->tab_strip_model();
179 const int expected_tab_count
= static_cast<int>(arraysize(kStartupURLs
));
180 EXPECT_EQ(expected_tab_count
, tabs
->count());
181 for (int i
= 0; i
< expected_tab_count
&& i
< tabs
->count(); ++i
) {
182 EXPECT_EQ(GURL(kStartupURLs
[i
]),
183 tabs
->GetWebContentsAt(i
)->GetVisibleURL());
187 } // namespace policy