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