user_cloud_policy_manager_chromeos_browsertest.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <string> 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/command_line.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/compiler_specific.h" 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/files/file_path.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/files/file_util.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/files/scoped_temp_dir.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/macros.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/scoped_ptr.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/strings/stringprintf.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/login/test/oobe_base_test.h" 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/login/wizard_controller.h" 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/policy/test/local_policy_test_server.h" 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/browser.h" 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/browser_list.h" 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/host_desktop.h" 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/tabs/tab_strip_model.h" 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_constants.h" 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/policy/core/common/policy_switches.h" 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/notification_service.h" 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/test/test_utils.h" 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "google_apis/gaia/fake_gaia.h" 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "google_apis/gaia/gaia_constants.h" 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "google_apis/gaia/gaia_urls.h" 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "testing/gtest/include/gtest/gtest.h" 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "url/gurl.h" 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace policy { 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kAccountId[] = "dla1@example.com"; 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kAccountPassword[] = "letmein"; 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char* kStartupURLs[] = {"chrome://policy", "chrome://about"}; 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kTestAuthCode[] = "fake-auth-code"; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kTestGaiaUberToken[] = "fake-uber-token"; 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kTestAuthLoginAccessToken[] = "fake-access-token"; 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestRefreshToken[] = "fake-refresh-token"; 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestAuthSIDCookie[] = "fake-auth-SID-cookie"; 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestAuthLSIDCookie[] = "fake-auth-LSID-cookie"; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestSessionSIDCookie[] = "fake-session-SID-cookie"; 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestSessionLSIDCookie[] = "fake-session-LSID-cookie"; 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestUserinfoToken[] = "fake-userinfo-token"; 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass UserCloudPolicyManagerTest : public chromeos::OobeBaseTest { 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu protected: 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserCloudPolicyManagerTest() { 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch set_open_about_blank_on_browser_launch(false); 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~UserCloudPolicyManagerTest() {} 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetUp() OVERRIDE { 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetServerPolicy(); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu test_server_.reset(new LocalPolicyTestServer(policy_file_path())); 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(test_server_->Start()); 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu OobeBaseTest::SetUp(); 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu command_line->AppendSwitchASCII(policy::switches::kDeviceManagementUrl, 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu test_server_->GetServiceURL().spec()); 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu OobeBaseTest::SetUpCommandLine(command_line); 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void SetUpOnMainThread() OVERRIDE { 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SetMergeSessionParams(kAccountId); 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SetupGaiaServerWithAccessTokens(); 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu OobeBaseTest::SetUpOnMainThread(); 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetupGaiaServerWithAccessTokens() { 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FakeGaia::AccessTokenInfo token_info; 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu token_info.token = kTestUserinfoToken; 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu token_info.scopes.insert(GaiaConstants::kDeviceManagementServiceOAuth); 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu token_info.scopes.insert(GaiaConstants::kOAuthWrapBridgeUserInfoScope); 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu token_info.audience = GaiaUrls::GetInstance()->oauth2_chrome_client_id(); 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu token_info.email = kAccountId; 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu fake_gaia_->IssueOAuthToken(kTestRefreshToken, token_info); 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void SetMergeSessionParams(const std::string& email) { 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FakeGaia::MergeSessionParams params; 955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu params.auth_sid_cookie = kTestAuthSIDCookie; 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu params.auth_lsid_cookie = kTestAuthLSIDCookie; 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu params.auth_code = kTestAuthCode; 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu params.refresh_token = kTestRefreshToken; 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params.access_token = kTestAuthLoginAccessToken; 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params.gaia_uber_token = kTestGaiaUberToken; 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params.session_sid_cookie = kTestSessionSIDCookie; 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params.session_lsid_cookie = kTestSessionLSIDCookie; 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) params.email = email; 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) fake_gaia_->SetMergeSessionParams(params); 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void SkipToLoginScreen() { 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chromeos::WizardController::SkipPostLoginScreensForTesting(); 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chromeos::WizardController* wizard_controller = 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chromeos::WizardController::default_controller(); 1115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(wizard_controller); 1125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu wizard_controller->SkipToLoginForTesting(chromeos::LoginScreenContext()); 1135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::WindowedNotificationObserver( 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::NotificationService::AllSources()).Wait(); 1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void LogIn(const std::string& user_id, const std::string& password) { 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetLoginDisplay()->ShowSigninScreenForCreds(user_id, password); 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::WindowedNotificationObserver( 1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu chrome::NOTIFICATION_SESSION_STARTED, 1245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::NotificationService::AllSources()).Wait(); 1255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void SetServerPolicy() { 1285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const char kPolicy[] = 1295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "{" 1305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"%s\": {" 1315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"mandatory\": {" 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " \"RestoreOnStartup\": 4," 1335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"RestoreOnStartupURLs\": [" 1345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"chrome://policy\"," 1355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu " \"chrome://about\"" 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " ]" 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch " }," 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch " \"recommended\": {}" 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch " }," 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " \"managed_users\": [ \"*\" ]," 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " \"policy_user\": \"%s\"," 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " \"current_key_index\": 0" 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "}"; 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string policy = base::StringPrintf( 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kPolicy, dm_protocol::kChromeUserPolicyType, kAccountId); 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int bytes_written = 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::WriteFile(policy_file_path(), policy.data(), policy.size()); 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(static_cast<int>(policy.size()), bytes_written); 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::FilePath policy_file_path() const { 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return temp_dir_.path().AppendASCII("policy.json"); 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<LocalPolicyTestServer> test_server_; 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::ScopedTempDir temp_dir_; 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyManagerTest); 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UserCloudPolicyManagerTest, StartSession) { 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SkipToLoginScreen(); 1676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LogIn(kAccountId, kAccountPassword); 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Check that the startup pages specified in policy were opened. 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BrowserList* browser_list = 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH); 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1U, browser_list->size()); 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Browser* browser = browser_list->get(0); 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(browser); 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TabStripModel* tabs = browser->tab_strip_model(); 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(tabs); 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int expected_tab_count = static_cast<int>(arraysize(kStartupURLs)); 1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(expected_tab_count, tabs->count()); 1815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu for (int i = 0; i < expected_tab_count && i < tabs->count(); ++i) { 1825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(GURL(kStartupURLs[i]), 1835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu tabs->GetWebContentsAt(i)->GetVisibleURL()); 1845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace policy 1885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu