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.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SUPERVISED_SUPERVISED_USER_TEST_BASE_H_
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define 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 "chrome/browser/chromeos/login/login_manager_test.h"
115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/profiles/profile.h"
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_registration_utility_stub.h"
145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chromeos/cryptohome/mock_async_method_caller.h"
155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chromeos/cryptohome/mock_homedir_methods.h"
165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "sync/api/fake_sync_change_processor.h"
175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "sync/api/sync_change.h"
185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "sync/api/sync_error_factory_mock.h"
195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "sync/protocol/sync.pb.h"
205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace chromeos {
225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestManager[] = "test-manager@gmail.com";
245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestOtherUser[] = "test-user@gmail.com";
255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestManagerPassword[] = "password";
275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestSupervisedUserDisplayName[] = "John Doe";
285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kTestSupervisedUserPassword[] = "simplepassword";
295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SupervisedUsersSyncTestAdapter {
315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public:
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  explicit SupervisedUsersSyncTestAdapter(Profile* profile);
335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bool HasChanges() { return !processor_->changes().empty(); }
355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  scoped_ptr< ::sync_pb::ManagedUserSpecifics> GetFirstChange();
375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void AddChange(const ::sync_pb::ManagedUserSpecifics& proto, bool update);
395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  syncer::FakeSyncChangeProcessor* processor_;
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SupervisedUserSyncService* service_;
425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  int next_sync_data_id_;
435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu};
445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SupervisedUsersSharedSettingsSyncTestAdapter {
465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public:
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  explicit SupervisedUsersSharedSettingsSyncTestAdapter(Profile* profile);
485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bool HasChanges() { return !processor_->changes().empty(); }
505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  scoped_ptr< ::sync_pb::ManagedUserSharedSettingSpecifics> GetFirstChange();
525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void AddChange(const ::sync_pb::ManagedUserSharedSettingSpecifics& proto,
545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 bool update);
555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void AddChange(const std::string& mu_id,
575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 const std::string& key,
585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 const base::Value& value,
595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 bool acknowledged,
605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 bool update);
615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  syncer::FakeSyncChangeProcessor* processor_;
63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SupervisedUserSharedSettingsService* service_;
645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  int next_sync_data_id_;
655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu};
665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SupervisedUserTestBase : public chromeos::LoginManagerTest {
685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public:
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SupervisedUserTestBase();
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~SupervisedUserTestBase();
715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu protected:
755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void TearDown() OVERRIDE;
765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void TearDownInProcessBrowserTestFixture() OVERRIDE;
785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void JSEval(const std::string& script);
805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void JSExpectAsync(const std::string& function);
825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void JSSetTextField(const std::string& element_selector,
845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                      const std::string& value);
855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void PrepareUsers();
875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void StartFlowLoginAsManager();
885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void FillNewUserData(const std::string& display_name);
895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void StartUserCreation(const std::string& button_id,
905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                         const std::string& expected_display_name);
915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void SigninAsSupervisedUser(bool check_homedir_calls,
925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                              int user_index,
935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                              const std::string& expected_display_name);
945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void SigninAsManager(int user_index);
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void RemoveSupervisedUser(size_t original_user_count,
965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                            int user_index,
975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                            const std::string& expected_display_name);
985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  cryptohome::MockAsyncMethodCaller* mock_async_method_caller_;
1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  cryptohome::MockHomedirMethods* mock_homedir_methods_;
1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  NetworkPortalDetectorTestImpl* network_portal_detector_;
102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SupervisedUserRegistrationUtilityStub* registration_utility_stub_;
103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  scoped_ptr<ScopedTestingSupervisedUserRegistrationUtility> scoped_utility_;
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<SupervisedUsersSharedSettingsSyncTestAdapter>
1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      shared_settings_adapter_;
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<SupervisedUsersSyncTestAdapter> supervised_users_adapter_;
1075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private:
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SupervisedUserTestBase);
1105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu};
1115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace chromeos
1135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_SUPERVISED_SUPERVISED_USER_TEST_BASE_H_
115