Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Side by Side Diff: chrome/browser/chromeos/policy/device_local_account_browsertest.cc

Issue 427053002: Do not reload account picker when device-local account policy changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Moved policy code to Chrome-specific subclass. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 #include <string> 6 #include <string>
7 7
8 #include "apps/app_window_registry.h" 8 #include "apps/app_window_registry.h"
9 #include "apps/ui/native_app_window.h" 9 #include "apps/ui/native_app_window.h"
10 #include "ash/shell.h" 10 #include "ash/shell.h"
11 #include "ash/system/chromeos/session/logout_confirmation_controller.h" 11 #include "ash/system/chromeos/session/logout_confirmation_controller.h"
12 #include "ash/system/chromeos/session/logout_confirmation_dialog.h" 12 #include "ash/system/chromeos/session/logout_confirmation_dialog.h"
13 #include "base/basictypes.h" 13 #include "base/basictypes.h"
14 #include "base/bind.h" 14 #include "base/bind.h"
15 #include "base/bind_helpers.h" 15 #include "base/bind_helpers.h"
16 #include "base/callback.h" 16 #include "base/callback.h"
17 #include "base/command_line.h" 17 #include "base/command_line.h"
18 #include "base/file_util.h" 18 #include "base/file_util.h"
19 #include "base/files/file_path.h" 19 #include "base/files/file_path.h"
20 #include "base/json/json_reader.h" 20 #include "base/json/json_reader.h"
21 #include "base/json/json_writer.h" 21 #include "base/json/json_writer.h"
22 #include "base/location.h" 22 #include "base/location.h"
23 #include "base/macros.h"
23 #include "base/memory/ref_counted.h" 24 #include "base/memory/ref_counted.h"
24 #include "base/memory/scoped_ptr.h" 25 #include "base/memory/scoped_ptr.h"
25 #include "base/message_loop/message_loop.h" 26 #include "base/message_loop/message_loop.h"
26 #include "base/message_loop/message_loop_proxy.h" 27 #include "base/message_loop/message_loop_proxy.h"
27 #include "base/path_service.h" 28 #include "base/path_service.h"
29 #include "base/prefs/pref_change_registrar.h"
28 #include "base/prefs/pref_service.h" 30 #include "base/prefs/pref_service.h"
29 #include "base/run_loop.h" 31 #include "base/run_loop.h"
30 #include "base/sequenced_task_runner.h" 32 #include "base/sequenced_task_runner.h"
31 #include "base/strings/string_number_conversions.h" 33 #include "base/strings/string_number_conversions.h"
32 #include "base/strings/string_util.h" 34 #include "base/strings/string_util.h"
33 #include "base/strings/stringprintf.h" 35 #include "base/strings/stringprintf.h"
34 #include "base/strings/utf_string_conversions.h" 36 #include "base/strings/utf_string_conversions.h"
35 #include "base/values.h" 37 #include "base/values.h"
36 #include "chrome/browser/browser_process.h" 38 #include "chrome/browser/browser_process.h"
37 #include "chrome/browser/chrome_notification_types.h" 39 #include "chrome/browser/chrome_notification_types.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 using testing::Return; 137 using testing::Return;
136 using testing::_; 138 using testing::_;
137 139
138 namespace policy { 140 namespace policy {
139 141
140 namespace { 142 namespace {
141 143
142 const char kDomain[] = "example.com"; 144 const char kDomain[] = "example.com";
143 const char kAccountId1[] = "dla1@example.com"; 145 const char kAccountId1[] = "dla1@example.com";
144 const char kAccountId2[] = "dla2@example.com"; 146 const char kAccountId2[] = "dla2@example.com";
145 const char kDisplayName[] = "display name"; 147 const char kDisplayName1[] = "display name 1";
148 const char kDisplayName2[] = "display name 2";
146 const char* kStartupURLs[] = { 149 const char* kStartupURLs[] = {
147 "chrome://policy", 150 "chrome://policy",
148 "chrome://about", 151 "chrome://about",
149 }; 152 };
150 const char kExistentTermsOfServicePath[] = "chromeos/enterprise/tos.txt"; 153 const char kExistentTermsOfServicePath[] = "chromeos/enterprise/tos.txt";
151 const char kNonexistentTermsOfServicePath[] = "chromeos/enterprise/tos404.txt"; 154 const char kNonexistentTermsOfServicePath[] = "chromeos/enterprise/tos404.txt";
152 const char kRelativeUpdateURL[] = "/service/update2/crx"; 155 const char kRelativeUpdateURL[] = "/service/update2/crx";
153 const char kUpdateManifestHeader[] = 156 const char kUpdateManifestHeader[] =
154 "<?xml version='1.0' encoding='UTF-8'?>\n" 157 "<?xml version='1.0' encoding='UTF-8'?>\n"
155 "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>\n"; 158 "<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>\n";
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 GURL crx_url; 205 GURL crx_url;
203 }; 206 };
204 typedef std::map<std::string, Update> UpdateMap; 207 typedef std::map<std::string, Update> UpdateMap;
205 UpdateMap updates_; 208 UpdateMap updates_;
206 209
207 const std::string relative_update_url_; 210 const std::string relative_update_url_;
208 211
209 DISALLOW_COPY_AND_ASSIGN(TestingUpdateManifestProvider); 212 DISALLOW_COPY_AND_ASSIGN(TestingUpdateManifestProvider);
210 }; 213 };
211 214
215 // Helper that observes the dictionary |pref| in local state and waits until the
216 // value stored for |key| matches |expected_value|.
217 class DictionaryPrefValueWaiter {
218 public:
219 DictionaryPrefValueWaiter(const std::string& pref,
220 const std::string& key,
221 const std::string& expected_value);
222 ~DictionaryPrefValueWaiter();
223
224 void Wait();
225
226 private:
227 void QuitLoopIfExpectedValueFound();
228
229 const std::string pref_;
230 const std::string key_;
231 const std::string expected_value_;
232
233 base::RunLoop run_loop_;
234 PrefChangeRegistrar pref_change_registrar_;
235
236 DISALLOW_COPY_AND_ASSIGN(DictionaryPrefValueWaiter);
237 };
238
212 TestingUpdateManifestProvider::Update::Update(const std::string& version, 239 TestingUpdateManifestProvider::Update::Update(const std::string& version,
213 const GURL& crx_url) 240 const GURL& crx_url)
214 : version(version), 241 : version(version),
215 crx_url(crx_url) { 242 crx_url(crx_url) {
216 } 243 }
217 244
218 TestingUpdateManifestProvider::Update::Update() { 245 TestingUpdateManifestProvider::Update::Update() {
219 } 246 }
220 247
221 TestingUpdateManifestProvider::TestingUpdateManifestProvider( 248 TestingUpdateManifestProvider::TestingUpdateManifestProvider(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 } 285 }
259 content += kUpdateManifestFooter; 286 content += kUpdateManifestFooter;
260 scoped_ptr<net::test_server::BasicHttpResponse> 287 scoped_ptr<net::test_server::BasicHttpResponse>
261 http_response(new net::test_server::BasicHttpResponse); 288 http_response(new net::test_server::BasicHttpResponse);
262 http_response->set_code(net::HTTP_OK); 289 http_response->set_code(net::HTTP_OK);
263 http_response->set_content(content); 290 http_response->set_content(content);
264 http_response->set_content_type("text/xml"); 291 http_response->set_content_type("text/xml");
265 return http_response.PassAs<net::test_server::HttpResponse>(); 292 return http_response.PassAs<net::test_server::HttpResponse>();
266 } 293 }
267 294
295 DictionaryPrefValueWaiter::DictionaryPrefValueWaiter(
296 const std::string& pref,
297 const std::string& key,
298 const std::string& expected_value)
299 : pref_(pref),
300 key_(key),
301 expected_value_(expected_value) {
302 pref_change_registrar_.Init(g_browser_process->local_state());
303 }
304
305 DictionaryPrefValueWaiter::~DictionaryPrefValueWaiter() {
306 }
307
308 void DictionaryPrefValueWaiter::Wait() {
309 pref_change_registrar_.Add(
310 pref_.c_str(),
311 base::Bind(&DictionaryPrefValueWaiter::QuitLoopIfExpectedValueFound,
312 base::Unretained(this)));
313 QuitLoopIfExpectedValueFound();
314 run_loop_.Run();
315 }
316
317 void DictionaryPrefValueWaiter::QuitLoopIfExpectedValueFound() {
318 const base::DictionaryValue* pref =
319 pref_change_registrar_.prefs()->GetDictionary(pref_.c_str());
320 ASSERT_TRUE(pref);
321 std::string actual_value;
322 if (pref->GetStringWithoutPathExpansion(key_, &actual_value) &&
323 actual_value == expected_value_) {
324 run_loop_.Quit();
325 }
326 }
327
268 bool DoesInstallSuccessReferToId(const std::string& id, 328 bool DoesInstallSuccessReferToId(const std::string& id,
269 const content::NotificationSource& source, 329 const content::NotificationSource& source,
270 const content::NotificationDetails& details) { 330 const content::NotificationDetails& details) {
271 return content::Details<const extensions::InstalledExtensionInfo>(details)-> 331 return content::Details<const extensions::InstalledExtensionInfo>(details)->
272 extension->id() == id; 332 extension->id() == id;
273 } 333 }
274 334
275 bool DoesInstallFailureReferToId(const std::string& id, 335 bool DoesInstallFailureReferToId(const std::string& id,
276 const content::NotificationSource& source, 336 const content::NotificationSource& source,
277 const content::NotificationDetails& details) { 337 const content::NotificationDetails& details) {
278 return content::Details<const base::string16>(details)-> 338 return content::Details<const base::string16>(details)->
279 find(base::UTF8ToUTF16(id)) != base::string16::npos; 339 find(base::UTF8ToUTF16(id)) != base::string16::npos;
280 } 340 }
281 341
282 scoped_ptr<net::FakeURLFetcher> RunCallbackAndReturnFakeURLFetcher( 342 scoped_ptr<net::FakeURLFetcher> RunCallbackAndReturnFakeURLFetcher(
283 scoped_refptr<base::SequencedTaskRunner> task_runner, 343 scoped_refptr<base::SequencedTaskRunner> task_runner,
284 const base::Closure& callback, 344 const base::Closure& callback,
285 const GURL& url, 345 const GURL& url,
286 net::URLFetcherDelegate* delegate, 346 net::URLFetcherDelegate* delegate,
287 const std::string& response_data, 347 const std::string& response_data,
288 net::HttpStatusCode response_code, 348 net::HttpStatusCode response_code,
289 net::URLRequestStatus::Status status) { 349 net::URLRequestStatus::Status status) {
290 task_runner->PostTask(FROM_HERE, callback); 350 task_runner->PostTask(FROM_HERE, callback);
291 return make_scoped_ptr(new net::FakeURLFetcher( 351 return make_scoped_ptr(new net::FakeURLFetcher(
292 url, delegate, response_data, response_code, status)); 352 url, delegate, response_data, response_code, status));
293 } 353 }
294 354
295 bool DisplayNameMatches(const std::string& account_id,
296 const std::string& display_name) {
297 const user_manager::User* user =
298 chromeos::UserManager::Get()->FindUser(account_id);
299 if (!user || user->display_name().empty())
300 return false;
301 EXPECT_EQ(base::UTF8ToUTF16(display_name), user->display_name());
302 return true;
303 }
304
305 bool IsSessionStarted() { 355 bool IsSessionStarted() {
306 return chromeos::UserManager::Get()->IsSessionStarted(); 356 return chromeos::UserManager::Get()->IsSessionStarted();
307 } 357 }
308 358
309 } // namespace 359 } // namespace
310 360
311 class DeviceLocalAccountTest : public DevicePolicyCrosBrowserTest, 361 class DeviceLocalAccountTest : public DevicePolicyCrosBrowserTest,
312 public chromeos::UserManager::Observer, 362 public chromeos::UserManager::Observer,
313 public chrome::BrowserListObserver, 363 public chrome::BrowserListObserver,
314 public apps::AppWindowRegistry::Observer { 364 public apps::AppWindowRegistry::Observer {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); 452 em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
403 proto.mutable_show_user_names()->set_show_user_names(true); 453 proto.mutable_show_user_names()->set_show_user_names(true);
404 454
405 device_local_account_policy_.policy_data().set_policy_type( 455 device_local_account_policy_.policy_data().set_policy_type(
406 dm_protocol::kChromePublicAccountPolicyType); 456 dm_protocol::kChromePublicAccountPolicyType);
407 device_local_account_policy_.policy_data().set_username(kAccountId1); 457 device_local_account_policy_.policy_data().set_username(kAccountId1);
408 device_local_account_policy_.policy_data().set_settings_entity_id( 458 device_local_account_policy_.policy_data().set_settings_entity_id(
409 kAccountId1); 459 kAccountId1);
410 device_local_account_policy_.policy_data().set_public_key_version(1); 460 device_local_account_policy_.policy_data().set_public_key_version(1);
411 device_local_account_policy_.payload().mutable_userdisplayname()->set_value( 461 device_local_account_policy_.payload().mutable_userdisplayname()->set_value(
412 kDisplayName); 462 kDisplayName1);
413 } 463 }
414 464
415 void BuildDeviceLocalAccountPolicy() { 465 void BuildDeviceLocalAccountPolicy() {
416 device_local_account_policy_.SetDefaultSigningKey(); 466 device_local_account_policy_.SetDefaultSigningKey();
417 device_local_account_policy_.Build(); 467 device_local_account_policy_.Build();
418 } 468 }
419 469
420 void UploadDeviceLocalAccountPolicy() { 470 void UploadDeviceLocalAccountPolicy() {
421 BuildDeviceLocalAccountPolicy(); 471 BuildDeviceLocalAccountPolicy();
422 test_server_.UpdatePolicy( 472 test_server_.UpdatePolicy(
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 return GetExtensionCacheDirectoryForAccountID(account_id) 516 return GetExtensionCacheDirectoryForAccountID(account_id)
467 .Append(base::StringPrintf("%s-%s.crx", id.c_str(), version.c_str())); 517 .Append(base::StringPrintf("%s-%s.crx", id.c_str(), version.c_str()));
468 } 518 }
469 519
470 // Returns a profile which can be used for testing. 520 // Returns a profile which can be used for testing.
471 Profile* GetProfileForTest() { 521 Profile* GetProfileForTest() {
472 // Any profile can be used here since this test does not test multi profile. 522 // Any profile can be used here since this test does not test multi profile.
473 return ProfileManager::GetActiveUserProfile(); 523 return ProfileManager::GetActiveUserProfile();
474 } 524 }
475 525
526 void WaitForDisplayName(const std::string& user_id,
527 const std::string& expected_display_name) {
528 DictionaryPrefValueWaiter("UserDisplayName",
529 user_id,
530 expected_display_name).Wait();
531 }
532
476 void WaitForPolicy() { 533 void WaitForPolicy() {
477 // This observes the display name becoming available as this indicates 534 // Wait for the display name becoming available as that indicates
478 // device-local account policy is fully loaded, which is a prerequisite for 535 // device-local account policy is fully loaded, which is a prerequisite for
479 // successful login. 536 // successful login.
480 content::WindowedNotificationObserver( 537 WaitForDisplayName(user_id_1_, kDisplayName1);
481 chrome::NOTIFICATION_USER_LIST_CHANGED,
482 base::Bind(&DisplayNameMatches, user_id_1_, kDisplayName)).Wait();
483 } 538 }
484 539
485 void GetWebContents(content::WebContents** contents) { 540 void GetWebContents(content::WebContents** contents) {
486 chromeos::LoginDisplayHostImpl* host = 541 chromeos::LoginDisplayHostImpl* host =
487 reinterpret_cast<chromeos::LoginDisplayHostImpl*>( 542 reinterpret_cast<chromeos::LoginDisplayHostImpl*>(
488 chromeos::LoginDisplayHostImpl::default_host()); 543 chromeos::LoginDisplayHostImpl::default_host());
489 ASSERT_TRUE(host); 544 ASSERT_TRUE(host);
490 chromeos::WebUILoginView* web_ui_login_view = host->GetWebUILoginView(); 545 chromeos::WebUILoginView* web_ui_login_view = host->GetWebUILoginView();
491 ASSERT_TRUE(web_ui_login_view); 546 ASSERT_TRUE(web_ui_login_view);
492 content::WebUI* web_ui = web_ui_login_view->GetWebUI(); 547 content::WebUI* web_ui = web_ui_login_view->GetWebUI();
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 return chromeos::UserManager::Get()->IsKnownUser(account_id); 627 return chromeos::UserManager::Get()->IsKnownUser(account_id);
573 } 628 }
574 629
575 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, LoginScreen) { 630 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, LoginScreen) {
576 AddPublicSessionToDevicePolicy(kAccountId1); 631 AddPublicSessionToDevicePolicy(kAccountId1);
577 AddPublicSessionToDevicePolicy(kAccountId2); 632 AddPublicSessionToDevicePolicy(kAccountId2);
578 633
579 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED, 634 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED,
580 base::Bind(&IsKnownUser, user_id_1_)) 635 base::Bind(&IsKnownUser, user_id_1_))
581 .Wait(); 636 .Wait();
582 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED, 637 EXPECT_TRUE(IsKnownUser(user_id_2_));
583 base::Bind(&IsKnownUser, user_id_2_))
584 .Wait();
585 638
586 CheckPublicSessionPresent(user_id_1_); 639 CheckPublicSessionPresent(user_id_1_);
587 CheckPublicSessionPresent(user_id_2_); 640 CheckPublicSessionPresent(user_id_2_);
588 } 641 }
589 642
590 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, DisplayName) { 643 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, DisplayName) {
591 UploadAndInstallDeviceLocalAccountPolicy(); 644 UploadAndInstallDeviceLocalAccountPolicy();
592 AddPublicSessionToDevicePolicy(kAccountId1); 645 AddPublicSessionToDevicePolicy(kAccountId1);
593 646
594 WaitForPolicy(); 647 WaitForPolicy();
648
649 // Skip to the login screen.
650 chromeos::WizardController* wizard_controller =
651 chromeos::WizardController::default_controller();
652 ASSERT_TRUE(wizard_controller);
653 wizard_controller->SkipToLoginForTesting(LoginScreenContext());
654 content::WindowedNotificationObserver(
655 chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
656 content::NotificationService::AllSources()).Wait();
657
658 // Verify that the display name is shown in the UI.
659 content::WebContents* contents = NULL;
660 ASSERT_NO_FATAL_FAILURE(GetWebContents(&contents));
661 const std::string get_compact_pod_display_name = base::StringPrintf(
662 "domAutomationController.send(document.getElementById('pod-row')"
663 " .getPodWithUsername_('%s').nameElement.textContent);",
664 user_id_1_.c_str());
665 std::string display_name;
666 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
667 contents,
668 get_compact_pod_display_name,
669 &display_name));
670 EXPECT_EQ(kDisplayName1, display_name);
671 const std::string get_expanded_pod_display_name = base::StringPrintf(
672 "domAutomationController.send(document.getElementById('pod-row')"
673 " .getPodWithUsername_('%s').querySelector('.expanded-pane-name')"
674 " .textContent);",
675 user_id_1_.c_str());
676 display_name.clear();
677 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
678 contents,
679 get_expanded_pod_display_name,
680 &display_name));
681 EXPECT_EQ(kDisplayName1, display_name);
682
683 // Click on the pod to expand it.
684 ASSERT_TRUE(content::ExecuteScript(
685 contents,
686 base::StringPrintf(
687 "document.getElementById('pod-row').getPodWithUsername_('%s')"
688 " .click();",
689 user_id_1_.c_str())));
690
691 // Change the display name.
692 device_local_account_policy_.payload().mutable_userdisplayname()->set_value(
693 kDisplayName2);
694 UploadAndInstallDeviceLocalAccountPolicy();
695 policy::BrowserPolicyConnectorChromeOS* connector =
696 g_browser_process->platform_part()->browser_policy_connector_chromeos();
697 DeviceLocalAccountPolicyBroker* broker =
698 connector->GetDeviceLocalAccountPolicyService()->GetBrokerForUser(
699 user_id_1_);
700 ASSERT_TRUE(broker);
701 broker->core()->store()->Load();
702 WaitForDisplayName(user_id_1_, kDisplayName2);
703
704 // Verify that the new display name is shown in the UI.
705 display_name.clear();
706 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
707 contents,
708 get_compact_pod_display_name,
709 &display_name));
710 EXPECT_EQ(kDisplayName2, display_name);
711 display_name.clear();
712 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
713 contents,
714 get_expanded_pod_display_name,
715 &display_name));
716 EXPECT_EQ(kDisplayName2, display_name);
717
718 // Verify that the pod is still expanded. This indicates that the UI updated
719 // without reloading and losing state.
720 bool expanded = false;
721 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
722 contents,
723 base::StringPrintf(
724 "domAutomationController.send(document.getElementById('pod-row')"
725 " .getPodWithUsername_('%s').expanded);",
726 user_id_1_.c_str()),
727 &expanded));
728 EXPECT_TRUE(expanded);
595 } 729 }
596 730
597 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, PolicyDownload) { 731 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, PolicyDownload) {
598 UploadDeviceLocalAccountPolicy(); 732 UploadDeviceLocalAccountPolicy();
599 AddPublicSessionToDevicePolicy(kAccountId1); 733 AddPublicSessionToDevicePolicy(kAccountId1);
600 734
601 WaitForPolicy(); 735 WaitForPolicy();
602 736
603 // Sanity check: The policy should be present now. 737 // Sanity check: The policy should be present now.
604 ASSERT_FALSE(session_manager_client()->device_local_account_policy( 738 ASSERT_FALSE(session_manager_client()->device_local_account_policy(
605 kAccountId1).empty()); 739 kAccountId1).empty());
606 } 740 }
607 741
608 static bool IsNotKnownUser(const std::string& account_id) { 742 static bool IsNotKnownUser(const std::string& account_id) {
609 return !IsKnownUser(account_id); 743 return !IsKnownUser(account_id);
610 } 744 }
611 745
612 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, DevicePolicyChange) { 746 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, AccountListChange) {
613 AddPublicSessionToDevicePolicy(kAccountId1); 747 AddPublicSessionToDevicePolicy(kAccountId1);
614 AddPublicSessionToDevicePolicy(kAccountId2); 748 AddPublicSessionToDevicePolicy(kAccountId2);
615 749
616 // Wait until the login screen is up.
617 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED, 750 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED,
618 base::Bind(&IsKnownUser, user_id_1_)) 751 base::Bind(&IsKnownUser, user_id_1_))
619 .Wait(); 752 .Wait();
620 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED, 753 EXPECT_TRUE(IsKnownUser(user_id_2_));
621 base::Bind(&IsKnownUser, user_id_2_))
622 .Wait();
623 754
624 // Update policy to remove kAccountId2. 755 // Update policy to remove kAccountId2.
625 em::ChromeDeviceSettingsProto& proto(device_policy()->payload()); 756 em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
626 proto.mutable_device_local_accounts()->clear_account(); 757 proto.mutable_device_local_accounts()->clear_account();
627 AddPublicSessionToDevicePolicy(kAccountId1); 758 AddPublicSessionToDevicePolicy(kAccountId1);
628 759
629 em::ChromeDeviceSettingsProto policy; 760 em::ChromeDeviceSettingsProto policy;
630 policy.mutable_show_user_names()->set_show_user_names(true); 761 policy.mutable_show_user_names()->set_show_user_names(true);
631 em::DeviceLocalAccountInfoProto* account1 = 762 em::DeviceLocalAccountInfoProto* account1 =
632 policy.mutable_device_local_accounts()->add_account(); 763 policy.mutable_device_local_accounts()->add_account();
633 account1->set_account_id(kAccountId1); 764 account1->set_account_id(kAccountId1);
634 account1->set_type( 765 account1->set_type(
635 em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION); 766 em::DeviceLocalAccountInfoProto::ACCOUNT_TYPE_PUBLIC_SESSION);
636 767
637 test_server_.UpdatePolicy(dm_protocol::kChromeDevicePolicyType, std::string(), 768 test_server_.UpdatePolicy(dm_protocol::kChromeDevicePolicyType, std::string(),
638 policy.SerializeAsString()); 769 policy.SerializeAsString());
639 g_browser_process->policy_service()->RefreshPolicies(base::Closure()); 770 g_browser_process->policy_service()->RefreshPolicies(base::Closure());
640 771
641 // Make sure the second device-local account disappears. 772 // Make sure the second device-local account disappears.
642 content::WindowedNotificationObserver( 773 content::WindowedNotificationObserver(chrome::NOTIFICATION_USER_LIST_CHANGED,
643 chrome::NOTIFICATION_USER_LIST_CHANGED, 774 base::Bind(&IsNotKnownUser, user_id_2_))
644 base::Bind(&IsNotKnownUser, user_id_2_)).Wait(); 775 .Wait();
645 } 776 }
646 777
647 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, StartSession) { 778 IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, StartSession) {
648 // Specify startup pages. 779 // Specify startup pages.
649 device_local_account_policy_.payload().mutable_restoreonstartup()->set_value( 780 device_local_account_policy_.payload().mutable_restoreonstartup()->set_value(
650 SessionStartupPref::kPrefValueURLs); 781 SessionStartupPref::kPrefValueURLs);
651 em::StringListPolicyProto* startup_urls_proto = 782 em::StringListPolicyProto* startup_urls_proto =
652 device_local_account_policy_.payload().mutable_restoreonstartupurls(); 783 device_local_account_policy_.payload().mutable_restoreonstartupurls();
653 for (size_t i = 0; i < arraysize(kStartupURLs); ++i) 784 for (size_t i = 0; i < arraysize(kStartupURLs); ++i)
654 startup_urls_proto->mutable_value()->add_entries(kStartupURLs[i]); 785 startup_urls_proto->mutable_value()->add_entries(kStartupURLs[i]);
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 ASSERT_TRUE(content::ExecuteScript(contents, 1573 ASSERT_TRUE(content::ExecuteScript(contents,
1443 "$('tos-accept-button').click();")); 1574 "$('tos-accept-button').click();"));
1444 1575
1445 WaitForSessionStart(); 1576 WaitForSessionStart();
1446 } 1577 }
1447 1578
1448 INSTANTIATE_TEST_CASE_P(TermsOfServiceDownloadTestInstance, 1579 INSTANTIATE_TEST_CASE_P(TermsOfServiceDownloadTestInstance,
1449 TermsOfServiceDownloadTest, testing::Bool()); 1580 TermsOfServiceDownloadTest, testing::Bool());
1450 1581
1451 } // namespace policy 1582 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698