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