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 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/login/supervised/supervised_user_test_base.h" 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <string> 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/compiler_specific.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/run_loop.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/strings/string_number_conversions.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/strings/stringprintf.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/strings/utf_string_conversions.h" 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/threading/sequenced_worker_pool.h" 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chrome_notification_types.h" 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/login/login_manager_test.h" 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/login/startup_utils.h" 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/login/supervised/supervised_user_authentication.h" 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/webui_login_view.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/supervised_user_manager.h" 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h" 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h" 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/profiles/profile_impl.h" 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_constants.h" 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_registration_utility.h" 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_registration_utility_stub.h" 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_shared_settings_service.h" 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_shared_settings_service_factory.h" 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_sync_service.h" 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_sync_service_factory.h" 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chromeos/cryptohome/mock_async_method_caller.h" 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chromeos/cryptohome/mock_homedir_methods.h" 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/key.h" 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/login/auth/user_context.h" 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/browser/notification_service.h" 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/test/browser_test_utils.h" 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/test/test_utils.h" 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "sync/api/fake_sync_change_processor.h" 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "sync/api/sync_change.h" 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "sync/api/sync_error_factory_mock.h" 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "sync/internal_api/public/attachments/attachment_service_proxy_for_test.h" 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "sync/protocol/sync.pb.h" 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuusing testing::_; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuusing base::StringPrintf; 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace chromeos { 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace { 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char kCurrentPage[] = "$('supervised-user-creation').currentPage_"; 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kStubEthernetGuid[] = "eth0"; 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SupervisedUsersSyncTestAdapter::SupervisedUsersSyncTestAdapter(Profile* profile) 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : processor_(), next_sync_data_id_(0) { 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) service_ = SupervisedUserSyncServiceFactory::GetForProfile(profile); 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu processor_ = new syncer::FakeSyncChangeProcessor(); 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu service_->MergeDataAndStartSyncing( 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) syncer::SUPERVISED_USERS, 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::SyncDataList(), 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<syncer::SyncChangeProcessor>(processor_), 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock)); 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuscoped_ptr< ::sync_pb::ManagedUserSpecifics> 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SupervisedUsersSyncTestAdapter::GetFirstChange() { 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr< ::sync_pb::ManagedUserSpecifics> result( 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new ::sync_pb::ManagedUserSpecifics); 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CHECK(HasChanges()) 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu << "GetFirstChange() should only be callled if HasChanges() is true"; 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const syncer::SyncData& data = processor_->changes().front().sync_data(); 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(syncer::SUPERVISED_USERS, data.GetDataType()); 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result->CopyFrom(data.GetSpecifics().managed_user()); 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return result.Pass(); 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUsersSyncTestAdapter::AddChange( 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const ::sync_pb::ManagedUserSpecifics& proto, 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool update) { 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu sync_pb::EntitySpecifics specifics; 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu specifics.mutable_managed_user()->CopyFrom(proto); 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::SyncData change_data = syncer::SyncData::CreateRemoteData( 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ++next_sync_data_id_, 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu specifics, 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::Time(), 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::AttachmentIdList(), 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::AttachmentServiceProxyForTest::Create()); 955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::SyncChange change(FROM_HERE, 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu update ? syncer::SyncChange::ACTION_UPDATE 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : syncer::SyncChange::ACTION_ADD, 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu change_data); 995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::SyncChangeList change_list; 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu change_list.push_back(change); 1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu service_->ProcessSyncChanges(FROM_HERE, change_list); 1045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SupervisedUsersSharedSettingsSyncTestAdapter:: 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SupervisedUsersSharedSettingsSyncTestAdapter(Profile* profile) 1085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : processor_(), next_sync_data_id_(0) { 1095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu service_ = 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext(profile); 1115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu processor_ = new syncer::FakeSyncChangeProcessor(); 1125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu service_->MergeDataAndStartSyncing( 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) syncer::SUPERVISED_USER_SHARED_SETTINGS, 1145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::SyncDataList(), 1155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<syncer::SyncChangeProcessor>(processor_), 1165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock)); 1175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuscoped_ptr< ::sync_pb::ManagedUserSharedSettingSpecifics> 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SupervisedUsersSharedSettingsSyncTestAdapter::GetFirstChange() { 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr< ::sync_pb::ManagedUserSharedSettingSpecifics> result( 1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new ::sync_pb::ManagedUserSharedSettingSpecifics); 1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu CHECK(HasChanges()) 1245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu << "GetFirstChange() should only be callled if HasChanges() is true"; 1255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const syncer::SyncData& data = processor_->changes().front().sync_data(); 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(syncer::SUPERVISED_USER_SHARED_SETTINGS, data.GetDataType()); 1275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu result->CopyFrom(data.GetSpecifics().managed_user_shared_setting()); 1285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return result.Pass(); 1295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUsersSharedSettingsSyncTestAdapter::AddChange( 1325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const ::sync_pb::ManagedUserSharedSettingSpecifics& proto, 1335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool update) { 1345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu sync_pb::EntitySpecifics specifics; 1355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu specifics.mutable_managed_user_shared_setting()->CopyFrom(proto); 1375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::SyncData change_data = syncer::SyncData::CreateRemoteData( 1395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ++next_sync_data_id_, 1405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu specifics, 1415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::Time(), 1425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::AttachmentIdList(), 1435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::AttachmentServiceProxyForTest::Create()); 1445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::SyncChange change(FROM_HERE, 1455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu update ? syncer::SyncChange::ACTION_UPDATE 1465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : syncer::SyncChange::ACTION_ADD, 1475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu change_data); 1485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::SyncChangeList change_list; 1505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu change_list.push_back(change); 1515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu service_->ProcessSyncChanges(FROM_HERE, change_list); 1535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUsersSharedSettingsSyncTestAdapter::AddChange( 1565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& mu_id, 1575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& key, 1585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::Value& value, 1595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool acknowledged, 1605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool update) { 1615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu syncer::SyncData data = 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SupervisedUserSharedSettingsService::CreateSyncDataForSetting( 1635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mu_id, key, value, acknowledged); 1645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AddChange(data.GetSpecifics().managed_user_shared_setting(), update); 1655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SupervisedUserTestBase::SupervisedUserTestBase() 1685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : LoginManagerTest(true), 1695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mock_async_method_caller_(NULL), 1705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mock_homedir_methods_(NULL), 1715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu network_portal_detector_(NULL), 1725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu registration_utility_stub_(NULL) { 1735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)SupervisedUserTestBase::~SupervisedUserTestBase() { 1765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::SetUpInProcessBrowserTestFixture() { 1795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LoginManagerTest::SetUpInProcessBrowserTestFixture(); 1805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mock_async_method_caller_ = new cryptohome::MockAsyncMethodCaller; 1815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mock_async_method_caller_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); 1825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cryptohome::AsyncMethodCaller::InitializeForTesting( 1835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mock_async_method_caller_); 1845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mock_homedir_methods_ = new cryptohome::MockHomedirMethods; 1865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mock_homedir_methods_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); 1875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cryptohome::HomedirMethods::InitializeForTesting(mock_homedir_methods_); 1885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) registration_utility_stub_ = new SupervisedUserRegistrationUtilityStub(); 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_utility_.reset(new ScopedTestingSupervisedUserRegistrationUtility( 1915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu registration_utility_stub_)); 1925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Setup network portal detector to return online state for both 1945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // ethernet and wifi networks. Ethernet is an active network by 1955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // default. 1965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu network_portal_detector_ = new NetworkPortalDetectorTestImpl(); 1975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NetworkPortalDetector::InitializeForTesting(network_portal_detector_); 1985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NetworkPortalDetector::CaptivePortalState online_state; 1995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; 2005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu online_state.response_code = 204; 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_portal_detector_->SetDefaultNetworkForTesting(kStubEthernetGuid); 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_portal_detector_->SetDetectionResultsForTesting(kStubEthernetGuid, 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch online_state); 2045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::TearDown() { 2075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cryptohome::AsyncMethodCaller::Shutdown(); 2085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cryptohome::HomedirMethods::Shutdown(); 2095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mock_homedir_methods_ = NULL; 2105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mock_async_method_caller_ = NULL; 2115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LoginManagerTest::TearDown(); 2125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::TearDownInProcessBrowserTestFixture() { 2155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NetworkPortalDetector::Shutdown(); 2165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::JSEval(const std::string& script) { 219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(content::ExecuteScript(web_contents(), script)) << script; 2205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::JSExpectAsync(const std::string& function) { 2235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool result; 2245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(content::ExecuteScriptAndExtractBool( 2255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu web_contents(), 2265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu StringPrintf( 2275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "(%s)(function() { window.domAutomationController.send(true); });", 2285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu function.c_str()), 229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &result)) << function; 2305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(result); 2315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::JSSetTextField(const std::string& element_selector, 2345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& value) { 2355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string function = 2365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu StringPrintf("document.querySelector('%s').value = '%s'", 2375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu element_selector.c_str(), 2385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu value.c_str()); 2395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSEval(function); 2405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::PrepareUsers() { 2435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RegisterUser(kTestManager); 2445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RegisterUser(kTestOtherUser); 2455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu chromeos::StartupUtils::MarkOobeCompleted(); 2465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::StartFlowLoginAsManager() { 2495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Navigate to supervised user creation screen. 2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSEval("chrome.send('showSupervisedUserCreationScreen')"); 2515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Read intro and proceed. 2535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect(StringPrintf("%s == 'intro'", kCurrentPage)); 2545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSEval("$('supervised-user-creation-start-button').click()"); 2565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Check that both users appear as managers, and test-manager@gmail.com is 2585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // the first one. 2595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect(StringPrintf("%s == 'manager'", kCurrentPage)); 2605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string manager_pods = 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "document.querySelectorAll('#supervised-user-creation-managers-pane " 2635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ".manager-pod')"; 2645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string selected_manager_pods = 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "document.querySelectorAll('#supervised-user-creation-managers-pane " 2665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ".manager-pod.focused')"; 2675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int managers_on_device = 2; 2695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect(StringPrintf("%s.length == 1", selected_manager_pods.c_str())); 2715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSExpect(StringPrintf( 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "$('supervised-user-creation').managerList_.pods.length == %d", 2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) managers_on_device)); 2755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect(StringPrintf( 2765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "%s.length == %d", manager_pods.c_str(), managers_on_device)); 2775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect(StringPrintf("%s[%d].user.emailAddress == '%s'", 2785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu manager_pods.c_str(), 2795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 0, 2805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kTestManager)); 2815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Select the first user as manager, and enter password. 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSExpect("$('supervised-user-creation-next-button').disabled"); 2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSSetTextField("#supervised-user-creation .manager-pod.focused input", 2855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kTestManagerPassword); 2865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSEval("$('supervised-user-creation').updateNextButtonForManager_()"); 2885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Next button is now enabled. 2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSExpect("!$('supervised-user-creation-next-button').disabled"); 291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) UserContext user_context(kTestManager); 292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_context.SetKey(Key(kTestManagerPassword)); 293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SetExpectedCredentials(user_context); 2945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::WindowedNotificationObserver login_observer( 2955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED, 2965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::NotificationService::AllSources()); 2975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Log in as manager. 2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSEval("$('supervised-user-creation-next-button').click()"); 3005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu login_observer.Wait(); 3015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // OAuth token is valid. 3036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->SaveUserOAuthStatus( 3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kTestManager, user_manager::User::OAUTH2_TOKEN_STATUS_VALID); 3055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::RunLoop().RunUntilIdle(); 3065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Check the page have changed. 3085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect(StringPrintf("%s == 'username'", kCurrentPage)); 3095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 3105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::FillNewUserData(const std::string& display_name) { 3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSExpect("$('supervised-user-creation-next-button').disabled"); 3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSSetTextField("#supervised-user-creation-name", display_name); 3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSEval("$('supervised-user-creation').checkUserName_()"); 3155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::RunLoop().RunUntilIdle(); 3175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSSetTextField("#supervised-user-creation-password", 3195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kTestSupervisedUserPassword); 3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSSetTextField("#supervised-user-creation-password-confirm", 3215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kTestSupervisedUserPassword); 3225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSEval("$('supervised-user-creation').updateNextButtonForUser_()"); 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSExpect("!$('supervised-user-creation-next-button').disabled"); 3255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 3265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::StartUserCreation( 3285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& button_id, 3295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& expected_display_name) { 3305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_CALL(*mock_homedir_methods_, MountEx(_, _, _, _)).Times(1); 3315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_CALL(*mock_homedir_methods_, AddKeyEx(_, _, _, _, _)).Times(1); 3325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSEval(std::string("$('").append(button_id).append("').click()")); 3345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ::testing::Mock::VerifyAndClearExpectations(mock_homedir_methods_); 3365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(registration_utility_stub_->register_was_called()); 3385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(registration_utility_stub_->display_name(), 3395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::UTF8ToUTF16(expected_display_name)); 3405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu registration_utility_stub_->RunSuccessCallback("token"); 3425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Token writing moves control to BlockingPool and back. 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RunAllBlockingPoolTasksUntilIdle(); 3455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect(StringPrintf("%s == 'created'", kCurrentPage)); 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) JSEval("$('supervised-user-creation-gotit-button').click()"); 3485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 3495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::SigninAsSupervisedUser( 3515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool check_homedir_calls, 3525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int user_index, 3535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& expected_display_name) { 3545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (check_homedir_calls) 3555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_CALL(*mock_homedir_methods_, MountEx(_, _, _, _)).Times(1); 3565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Log in as supervised user, make sure that everything works. 3586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(3UL, user_manager::UserManager::Get()->GetUsers().size()); 3595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Created supervised user have to be first in a list. 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* user = 3626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->GetUsers().at(user_index); 3635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_EQ(base::UTF8ToUTF16(expected_display_name), user->display_name()); 3645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LoginUser(user->email()); 3655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (check_homedir_calls) 3665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ::testing::Mock::VerifyAndClearExpectations(mock_homedir_methods_); 3676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Profile* profile = ProfileHelper::Get()->GetProfileByUserUnsafe(user); 3685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu shared_settings_adapter_.reset( 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new SupervisedUsersSharedSettingsSyncTestAdapter(profile)); 370010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 371010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Check ChromeOS preference is initialized. 372010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE( 373010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static_cast<ProfileImpl*>(profile)->chromeos_preferences_); 3745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 3755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::SigninAsManager(int user_index) { 3775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Log in as supervised user, make sure that everything works. 3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(3UL, user_manager::UserManager::Get()->GetUsers().size()); 3795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Created supervised user have to be first in a list. 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* user = 3826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->GetUsers().at(user_index); 3835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LoginUser(user->email()); 3846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Profile* profile = ProfileHelper::Get()->GetProfileByUserUnsafe(user); 3855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu shared_settings_adapter_.reset( 3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new SupervisedUsersSharedSettingsSyncTestAdapter(profile)); 3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) supervised_users_adapter_.reset(new SupervisedUsersSyncTestAdapter(profile)); 3885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 3895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SupervisedUserTestBase::RemoveSupervisedUser( 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t original_user_count, 3925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int user_index, 3935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& expected_display_name) { 3945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Remove supervised user. 3956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(original_user_count, 3966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->GetUsers().size()); 3975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Created supervised user have to be first in a list. 3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* user = 4006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->GetUsers().at(user_index); 4015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_EQ(base::UTF8ToUTF16(expected_display_name), user->display_name()); 4025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Open pod menu. 4045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect( 4055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu StringPrintf("!$('pod-row').pods[%d].isActionBoxMenuActive", user_index)); 4065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSEval(StringPrintf( 4075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "$('pod-row').pods[%d].querySelector('.action-box-button').click()", 4085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu user_index)); 4095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect( 4105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu StringPrintf("$('pod-row').pods[%d].isActionBoxMenuActive", user_index)); 4115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Select "Remove user" element. 4135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect(StringPrintf( 4145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "$('pod-row').pods[%d].actionBoxRemoveUserWarningElement.hidden", 4155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu user_index)); 4165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSEval(StringPrintf( 4175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "$('pod-row').pods[%d].querySelector('.action-box-menu-remove').click()", 4185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu user_index)); 4195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSExpect(StringPrintf( 4205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "!$('pod-row').pods[%d].actionBoxRemoveUserWarningElement.hidden", 4215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu user_index)); 4225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_CALL(*mock_async_method_caller_, AsyncRemove(_, _)).Times(1); 4245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Confirm deletion. 4265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu JSEval(StringPrintf( 4275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "$('pod-row').pods[%d].querySelector('.remove-warning-button').click()", 4285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu user_index)); 4295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Make sure there is no supervised user in list. 4316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(original_user_count - 1, 4326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->GetUsers().size()); 4335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 4345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace chromeos 436