| Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc
|
| diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc
|
| index 1c3b07e0dd82ade763636f80edc7f87d10d8634f..9fc4dae8193220e7bbabe799be508c12d0afe6a6 100644
|
| --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc
|
| +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc
|
| @@ -273,6 +273,59 @@ class TestV2AppLauncherItemController : public ash::ShelfItemDelegate {
|
| DISALLOW_COPY_AND_ASSIGN(TestV2AppLauncherItemController);
|
| };
|
|
|
| +// A test ShelfController implementation that tracks alignment and auto-hide.
|
| +class TestShelfController : public ash::mojom::ShelfController {
|
| + public:
|
| + TestShelfController() : binding_(this) {}
|
| + ~TestShelfController() override {}
|
| +
|
| + ash::ShelfAlignment alignment() const { return alignment_; }
|
| + ash::ShelfAutoHideBehavior auto_hide() const { return auto_hide_; }
|
| +
|
| + size_t alignment_change_count() const { return alignment_change_count_; }
|
| + size_t auto_hide_change_count() const { return auto_hide_change_count_; }
|
| +
|
| + ash::mojom::ShelfControllerPtr CreateInterfacePtrAndBind() {
|
| + return binding_.CreateInterfacePtrAndBind();
|
| + }
|
| +
|
| + // ash::mojom::ShelfController:
|
| + void AddObserver(
|
| + ash::mojom::ShelfObserverAssociatedPtrInfo observer) override {
|
| + observer_.Bind(std::move(observer));
|
| + }
|
| + void SetAlignment(ash::ShelfAlignment alignment,
|
| + int64_t display_id) override {
|
| + alignment_change_count_++;
|
| + alignment_ = alignment;
|
| + observer_->OnAlignmentChanged(alignment_, display_id);
|
| + }
|
| + void SetAutoHideBehavior(ash::ShelfAutoHideBehavior auto_hide,
|
| + int64_t display_id) override {
|
| + auto_hide_change_count_++;
|
| + auto_hide_ = auto_hide;
|
| + observer_->OnAutoHideBehaviorChanged(auto_hide_, display_id);
|
| + }
|
| + void PinItem(
|
| + const ash::ShelfItem& item,
|
| + ash::mojom::ShelfItemDelegateAssociatedPtrInfo delegate) override {}
|
| + void UnpinItem(const std::string& app_id) override {}
|
| + void SetItemImage(const std::string& app_id, const SkBitmap& image) override {
|
| + }
|
| +
|
| + private:
|
| + ash::ShelfAlignment alignment_ = ash::SHELF_ALIGNMENT_BOTTOM_LOCKED;
|
| + ash::ShelfAutoHideBehavior auto_hide_ = ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN;
|
| +
|
| + size_t alignment_change_count_ = 0;
|
| + size_t auto_hide_change_count_ = 0;
|
| +
|
| + ash::mojom::ShelfObserverAssociatedPtr observer_;
|
| + mojo::Binding<ash::mojom::ShelfController> binding_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestShelfController);
|
| +};
|
| +
|
| // A callback that does nothing after shelf item selection handling.
|
| void NoopCallback(ash::ShelfAction action, base::Optional<ash::MenuItemList>) {}
|
|
|
| @@ -287,6 +340,65 @@ void SelectItem(ash::ShelfItemDelegate* delegate) {
|
|
|
| } // namespace
|
|
|
| +// A test ChromeLauncherControllerImpl subclass that uses TestShelfController.
|
| +class TestChromeLauncherControllerImpl : public ChromeLauncherControllerImpl {
|
| + public:
|
| + TestChromeLauncherControllerImpl(Profile* profile, ash::ShelfModel* model)
|
| + : ChromeLauncherControllerImpl(profile, model) {}
|
| +
|
| + // ChromeLauncherControllerImpl:
|
| + using ChromeLauncherControllerImpl::ReleaseProfile;
|
| + bool ConnectToShelfController() override {
|
| + // Set the shelf controller pointer to a test instance; this is run in init.
|
| + if (!shelf_controller_.is_bound())
|
| + shelf_controller_ = test_shelf_controller_.CreateInterfacePtrAndBind();
|
| + return true;
|
| + }
|
| +
|
| + TestShelfController* test_shelf_controller() {
|
| + return &test_shelf_controller_;
|
| + }
|
| +
|
| + private:
|
| + TestShelfController test_shelf_controller_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestChromeLauncherControllerImpl);
|
| +};
|
| +
|
| +// A shell delegate that owns a ChromeLauncherController, like production.
|
| +// TODO(msw): Refine ChromeLauncherControllerImpl lifetime management.
|
| +// TODO(msw): Avoid relying on TestShellDelegate's ShelfInitializer.
|
| +class ChromeLauncherTestShellDelegate : public ash::test::TestShellDelegate {
|
| + public:
|
| + ChromeLauncherTestShellDelegate() {}
|
| +
|
| + // Create a ChromeLauncherControllerImpl instance.
|
| + ChromeLauncherControllerImpl* CreateLauncherController(Profile* profile) {
|
| + launcher_controller_ = base::MakeUnique<ChromeLauncherControllerImpl>(
|
| + profile, ash::Shell::Get()->shelf_model());
|
| + return launcher_controller_.get();
|
| + }
|
| +
|
| + // Create a TestChromeLauncherControllerImpl instance.
|
| + TestChromeLauncherControllerImpl* CreateTestLauncherController(
|
| + Profile* profile) {
|
| + auto controller = base::MakeUnique<TestChromeLauncherControllerImpl>(
|
| + profile, ash::Shell::Get()->shelf_model());
|
| + TestChromeLauncherControllerImpl* controller_weak = controller.get();
|
| + launcher_controller_ = std::move(controller);
|
| + launcher_controller_->Init();
|
| + return controller_weak;
|
| + }
|
| +
|
| + // ash::test::TestShellDelegate:
|
| + void ShelfShutdown() override { launcher_controller_.reset(); }
|
| +
|
| + private:
|
| + std::unique_ptr<ChromeLauncherControllerImpl> launcher_controller_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ChromeLauncherTestShellDelegate);
|
| +};
|
| +
|
| class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
|
| protected:
|
| ChromeLauncherControllerImplTest()
|
| @@ -300,6 +412,9 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
|
|
|
| app_list::AppListSyncableServiceFactory::SetUseInTesting();
|
|
|
| + shell_delegate_ = new ChromeLauncherTestShellDelegate();
|
| + ash_test_helper()->set_test_shell_delegate(shell_delegate_);
|
| +
|
| BrowserWithTestWindowTest::SetUp();
|
|
|
| if (!profile_manager_) {
|
| @@ -485,21 +600,14 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
|
| model_->Add(app_list);
|
| }
|
|
|
| - // Create a launcher controller instance and register it as the ShelfDelegate.
|
| - // Returns a pointer to the uninitialized controller, which is owned by Shell.
|
| + // Create a launcher controller instance, owned by the test shell delegate.
|
| + // Returns a pointer to the uninitialized controller.
|
| ChromeLauncherControllerImpl* CreateLauncherController() {
|
| - // Shell owns ChromeLauncherController as its ShelfDelegate. The lifetime
|
| - // of this instance should match production behavior as closely as possible.
|
| - DCHECK(!ChromeLauncherController::instance());
|
| - std::unique_ptr<ChromeLauncherControllerImpl> launcher_controller =
|
| - base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_);
|
| - launcher_controller_ = launcher_controller.get();
|
| - ash::test::ShellTestApi().SetShelfDelegate(std::move(launcher_controller));
|
| + launcher_controller_ = shell_delegate_->CreateLauncherController(profile());
|
| return launcher_controller_;
|
| }
|
|
|
| - // Create and initialize the controller.
|
| - // Returns a pointer to the initialized controller, which is owned by Shell.
|
| + // Create and initialize the controller, owned by the test shell delegate.
|
| void InitLauncherController() { CreateLauncherController()->Init(); }
|
|
|
| // Create and initialize the controller; create a tab and show the browser.
|
| @@ -509,14 +617,14 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
|
| browser()->window()->Show();
|
| }
|
|
|
| - // Destroy Shell's controller instance and clear the local pointer.
|
| + // Destroy the launcher controller instance and clear the local pointer.
|
| void ResetLauncherController() {
|
| launcher_controller_ = nullptr;
|
| - ash::test::ShellTestApi().SetShelfDelegate(nullptr);
|
| + shell_delegate_->ShelfShutdown();
|
| }
|
|
|
| // Destroy and recreate the controller; clear and reinitialize the ShelfModel.
|
| - // Returns a pointer to the uninitialized controller, which is owned by Shell.
|
| + // Returns a pointer to the uninitialized controller, owned by shell delegate.
|
| // TODO(msw): This does not accurately represent ChromeLauncherControllerImpl
|
| // lifetime or usage in production, and does not accurately simulate restarts.
|
| ChromeLauncherControllerImpl* RecreateLauncherController() {
|
| @@ -939,6 +1047,7 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
|
| ArcAppTest arc_test_;
|
| bool auto_start_arc_test_ = false;
|
| ChromeLauncherControllerImpl* launcher_controller_ = nullptr;
|
| + ChromeLauncherTestShellDelegate* shell_delegate_ = nullptr;
|
| std::unique_ptr<TestShelfModelObserver> model_observer_;
|
| ash::ShelfModel* model_ = nullptr;
|
| std::unique_ptr<TestingProfileManager> profile_manager_;
|
| @@ -1108,10 +1217,6 @@ class MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest
|
|
|
| // Initialize the rest.
|
| ChromeLauncherControllerImplTest::SetUp();
|
| -
|
| - // Get some base objects.
|
| - shell_delegate_ = static_cast<ash::test::TestShellDelegate*>(
|
| - ash::Shell::Get()->shell_delegate());
|
| shell_delegate_->set_multi_profiles_enabled(true);
|
| }
|
|
|
| @@ -1196,8 +1301,6 @@ class MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest
|
| return v1_app;
|
| }
|
|
|
| - ash::test::TestShellDelegate* shell_delegate() { return shell_delegate_; }
|
| -
|
| // Override BrowserWithTestWindowTest:
|
| TestingProfile* CreateProfile() override {
|
| return CreateMultiUserProfile("user1");
|
| @@ -1221,8 +1324,6 @@ class MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest
|
|
|
| std::unique_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_;
|
|
|
| - ash::test::TestShellDelegate* shell_delegate_;
|
| -
|
| ProfileToNameMap created_profiles_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(
|
| @@ -4145,105 +4246,24 @@ TEST_F(ChromeLauncherControllerImplTest, SyncOffLocalUpdate) {
|
| EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus());
|
| }
|
|
|
| -// A test ShelfController implementation that tracks alignment and auto-hide.
|
| -class TestShelfController : public ash::mojom::ShelfController {
|
| - public:
|
| - TestShelfController() : binding_(this) {}
|
| - ~TestShelfController() override {}
|
| -
|
| - ash::ShelfAlignment alignment() const { return alignment_; }
|
| - ash::ShelfAutoHideBehavior auto_hide() const { return auto_hide_; }
|
| -
|
| - size_t alignment_change_count() const { return alignment_change_count_; }
|
| - size_t auto_hide_change_count() const { return auto_hide_change_count_; }
|
| -
|
| - ash::mojom::ShelfControllerPtr CreateInterfacePtrAndBind() {
|
| - return binding_.CreateInterfacePtrAndBind();
|
| - }
|
| -
|
| - // ash::mojom::ShelfController:
|
| - void AddObserver(
|
| - ash::mojom::ShelfObserverAssociatedPtrInfo observer) override {
|
| - observer_.Bind(std::move(observer));
|
| - }
|
| - void SetAlignment(ash::ShelfAlignment alignment,
|
| - int64_t display_id) override {
|
| - alignment_change_count_++;
|
| - alignment_ = alignment;
|
| - observer_->OnAlignmentChanged(alignment_, display_id);
|
| - }
|
| - void SetAutoHideBehavior(ash::ShelfAutoHideBehavior auto_hide,
|
| - int64_t display_id) override {
|
| - auto_hide_change_count_++;
|
| - auto_hide_ = auto_hide;
|
| - observer_->OnAutoHideBehaviorChanged(auto_hide_, display_id);
|
| - }
|
| - void PinItem(
|
| - const ash::ShelfItem& item,
|
| - ash::mojom::ShelfItemDelegateAssociatedPtrInfo delegate) override {}
|
| - void UnpinItem(const std::string& app_id) override {}
|
| - void SetItemImage(const std::string& app_id, const SkBitmap& image) override {
|
| - }
|
| -
|
| - private:
|
| - ash::ShelfAlignment alignment_ = ash::SHELF_ALIGNMENT_BOTTOM_LOCKED;
|
| - ash::ShelfAutoHideBehavior auto_hide_ = ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN;
|
| -
|
| - size_t alignment_change_count_ = 0;
|
| - size_t auto_hide_change_count_ = 0;
|
| -
|
| - ash::mojom::ShelfObserverAssociatedPtr observer_;
|
| - mojo::Binding<ash::mojom::ShelfController> binding_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestShelfController);
|
| -};
|
| -
|
| -// A test ChromeLauncherControllerImpl sublcass that uses TestShelfController.
|
| -class TestChromeLauncherControllerImpl : public ChromeLauncherControllerImpl {
|
| - public:
|
| - TestChromeLauncherControllerImpl(Profile* profile, ash::ShelfModel* model)
|
| - : ChromeLauncherControllerImpl(profile, model) {}
|
| -
|
| - // ChromeLauncherControllerImpl:
|
| - using ChromeLauncherControllerImpl::ReleaseProfile;
|
| - bool ConnectToShelfController() override {
|
| - // Set the shelf controller pointer to a test instance; this is run in init.
|
| - if (!shelf_controller_.is_bound())
|
| - shelf_controller_ = test_shelf_controller_.CreateInterfacePtrAndBind();
|
| - return true;
|
| - }
|
| -
|
| - TestShelfController* test_shelf_controller() {
|
| - return &test_shelf_controller_;
|
| - }
|
| -
|
| - private:
|
| - TestShelfController test_shelf_controller_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestChromeLauncherControllerImpl);
|
| -};
|
| -
|
| -using ChromeLauncherControllerImplPrefTest = BrowserWithTestWindowTest;
|
| -
|
| // Tests that shelf profile preferences are loaded on login.
|
| -TEST_F(ChromeLauncherControllerImplPrefTest, PrefsLoadedOnLogin) {
|
| +TEST_F(ChromeLauncherControllerImplTest, PrefsLoadedOnLogin) {
|
| PrefService* prefs = profile()->GetTestingPrefService();
|
| prefs->SetString(prefs::kShelfAlignmentLocal, "Left");
|
| prefs->SetString(prefs::kShelfAlignment, "Left");
|
| prefs->SetString(prefs::kShelfAutoHideBehaviorLocal, "Always");
|
| prefs->SetString(prefs::kShelfAutoHideBehavior, "Always");
|
|
|
| - ash::ShelfModel* model = ash::Shell::Get()->shelf_controller()->model();
|
| - TestChromeLauncherControllerImpl test_launcher_controller(profile(), model);
|
| - test_launcher_controller.Init();
|
| + TestChromeLauncherControllerImpl* test_launcher_controller =
|
| + shell_delegate_->CreateTestLauncherController(profile());
|
|
|
| // Simulate login for the test controller.
|
| - test_launcher_controller.ReleaseProfile();
|
| - test_launcher_controller.AttachProfile(profile());
|
| + test_launcher_controller->ReleaseProfile();
|
| + test_launcher_controller->AttachProfile(profile());
|
| base::RunLoop().RunUntilIdle();
|
|
|
| TestShelfController* shelf_controller =
|
| - test_launcher_controller.test_shelf_controller();
|
| + test_launcher_controller->test_shelf_controller();
|
| ASSERT_TRUE(shelf_controller);
|
| EXPECT_EQ(ash::SHELF_ALIGNMENT_LEFT, shelf_controller->alignment());
|
| EXPECT_EQ(1u, shelf_controller->alignment_change_count());
|
| @@ -4253,18 +4273,17 @@ TEST_F(ChromeLauncherControllerImplPrefTest, PrefsLoadedOnLogin) {
|
| }
|
|
|
| // Tests that the shelf controller's changes are not wastefully echoed back.
|
| -TEST_F(ChromeLauncherControllerImplPrefTest, DoNotEchoShelfControllerChanges) {
|
| - ash::ShelfModel* model = ash::Shell::Get()->shelf_controller()->model();
|
| - TestChromeLauncherControllerImpl test_launcher_controller(profile(), model);
|
| - test_launcher_controller.Init();
|
| +TEST_F(ChromeLauncherControllerImplTest, DoNotEchoShelfControllerChanges) {
|
| + TestChromeLauncherControllerImpl* test_launcher_controller =
|
| + shell_delegate_->CreateTestLauncherController(profile());
|
|
|
| // Simulate login for the test controller.
|
| - test_launcher_controller.ReleaseProfile();
|
| - test_launcher_controller.AttachProfile(profile());
|
| + test_launcher_controller->ReleaseProfile();
|
| + test_launcher_controller->AttachProfile(profile());
|
| base::RunLoop().RunUntilIdle();
|
|
|
| TestShelfController* shelf_controller =
|
| - test_launcher_controller.test_shelf_controller();
|
| + test_launcher_controller->test_shelf_controller();
|
| ASSERT_TRUE(shelf_controller);
|
| EXPECT_EQ(ash::SHELF_ALIGNMENT_BOTTOM, shelf_controller->alignment());
|
| EXPECT_EQ(1u, shelf_controller->alignment_change_count());
|
|
|