Chromium Code Reviews| 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 1984510f3459599970ff20e94b2cdae442eee780..891d972e5d50186a79ef0b2f4cc62530562ac019 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 |
| @@ -277,48 +277,6 @@ class TestV2AppLauncherItemController : public ash::ShelfItemDelegate { |
| DISALLOW_COPY_AND_ASSIGN(TestV2AppLauncherItemController); |
| }; |
| -// Proxies to ShelfDelegate invocation to the given |
| -// ChromeLauncherControllerImpl instance. Because of ownership management, |
| -// ChromeLauncherControllerImpl instance cannot be injected to WmShell. |
| -// This wraps the instance, so that it can be injected. |
| -class ProxyShelfDelegate : public ash::ShelfDelegate { |
| - public: |
| - explicit ProxyShelfDelegate(ChromeLauncherControllerImpl* controller) |
| - : controller_(controller) {} |
| - ~ProxyShelfDelegate() override = default; |
| - |
| - ash::ShelfID GetShelfIDForAppID(const std::string& app_id) override { |
| - return controller_->GetShelfIDForAppID(app_id); |
| - }; |
| - |
| - ash::ShelfID GetShelfIDForAppIDAndLaunchID( |
| - const std::string& app_id, |
| - const std::string& launch_id) override { |
| - return controller_->GetShelfIDForAppIDAndLaunchID(app_id, launch_id); |
| - } |
| - |
| - const std::string& GetAppIDForShelfID(ash::ShelfID id) override { |
| - return controller_->GetAppIDForShelfID(id); |
| - } |
| - |
| - void PinAppWithID(const std::string& app_id) override { |
| - return controller_->PinAppWithID(app_id); |
| - } |
| - |
| - bool IsAppPinned(const std::string& app_id) override { |
| - return controller_->IsAppPinned(app_id); |
| - } |
| - |
| - void UnpinAppWithID(const std::string& app_id) override { |
| - return controller_->UnpinAppWithID(app_id); |
| - } |
| - |
| - private: |
| - ChromeLauncherControllerImpl* const controller_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(ProxyShelfDelegate); |
| -}; |
|
James Cook
2017/04/07 14:15:40
Glad to see this going away.
msw
2017/04/07 15:38:41
Acknowledged.
|
| - |
| // A callback that does nothing after shelf item selection handling. |
| void NoopCallback(ash::ShelfAction action, base::Optional<ash::MenuItemList>) {} |
| @@ -508,7 +466,7 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest { |
| arc_test_.TearDown(); |
| model_->RemoveObserver(model_observer_.get()); |
| model_observer_.reset(); |
| - launcher_controller_.reset(); |
| + launcher_controller_ = nullptr; |
| BrowserWithTestWindowTest::TearDown(); |
| } |
| @@ -530,34 +488,43 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest { |
| model_->Add(app_list); |
| } |
| - void InitLauncherController() { |
| - launcher_controller_.reset( |
| - new ChromeLauncherControllerImpl(profile(), model_)); |
| - launcher_controller_->Init(); |
| + // Create a launcher controller instance and register it as the ShelfDelegate. |
| + // Returns a pointer to the uninitialized controller, which is owned by Shell. |
| + 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)); |
| + return launcher_controller_; |
| } |
| + // Create and initialize the controller. |
| + // Returns a pointer to the initialized controller, which is owned by Shell. |
| + void InitLauncherController() { CreateLauncherController()->Init(); } |
| + |
| + // Create and initialize the controller; create a tab and show the browser. |
| + // Returns a pointer to the initialized controller, which is owned by Shell. |
|
James Cook
2017/04/07 14:15:40
nit: Not relevant anymore
msw
2017/04/07 15:38:41
Done.
|
| void InitLauncherControllerWithBrowser() { |
| InitLauncherController(); |
| chrome::NewTab(browser()); |
| browser()->window()->Show(); |
| } |
| - void RecreateChromeLauncher() { |
| - // Destroy controller first if it exists. |
| - launcher_controller_.reset(); |
| + // Destroy and recreate the controller; clear and reinitialize the ShelfModel. |
| + // Returns a pointer to the uninitialized controller, which is owned by Shell. |
| + // TODO(msw): This does not accurately represent ChromeLauncherControllerImpl |
| + // lifetime or usage in production, and does not accurately simulate restarts. |
| + ChromeLauncherControllerImpl* RecreateLauncherController() { |
| + // Destroy any existing controller first; only one may exist at a time. |
| + launcher_controller_ = nullptr; |
| + ash::test::ShellTestApi().SetShelfDelegate(nullptr); |
| while (model_->item_count() > 0) |
| model_->RemoveItemAt(0); |
| AddAppListLauncherItem(); |
| - launcher_controller_ = |
| - base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_); |
| - launcher_controller_->Init(); |
| - } |
| - |
| - // This needs to be called after InitLaunchController(), or its family. |
| - // It is not supported to recreate the instance. |
| - void SetShelfDelegate() { |
| - ash::test::ShellTestApi().SetShelfDelegate( |
| - base::MakeUnique<ProxyShelfDelegate>(launcher_controller_.get())); |
| + return CreateLauncherController(); |
| } |
| void StartAppSyncService(const syncer::SyncDataList& init_sync_list) { |
| @@ -975,7 +942,7 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest { |
| ArcAppTest arc_test_; |
| bool auto_start_arc_test_ = false; |
| - std::unique_ptr<ChromeLauncherControllerImpl> launcher_controller_; |
| + ChromeLauncherControllerImpl* launcher_controller_ = nullptr; |
| std::unique_ptr<TestShelfModelObserver> model_observer_; |
| ash::ShelfModel* model_ = nullptr; |
| std::unique_ptr<TestingProfileManager> profile_manager_; |
| @@ -1345,14 +1312,16 @@ TEST_P(ChromeLauncherControllerImplWithArcTest, |
| syncer::SyncDataList copy_sync_list = |
| app_service_->GetAllSyncData(syncer::APP_LIST); |
| - launcher_controller_.reset(); |
| + launcher_controller_ = nullptr; |
|
James Cook
2017/04/07 14:15:40
optional: utility method ResetLauncherController()
msw
2017/04/07 15:38:41
Done.
|
| + ash::test::ShellTestApi().SetShelfDelegate(nullptr); |
| + |
| SendPinChanges(syncer::SyncChangeList(), true); |
| StopAppSyncService(); |
| EXPECT_EQ(0U, app_service_->sync_items().size()); |
| // Move to ARC enabled platform, restart syncing with stored data. |
| StartAppSyncService(copy_sync_list); |
| - RecreateChromeLauncher(); |
| + RecreateLauncherController()->Init(); |
| // Pins must be automatically updated. |
| SendListOfArcApps(); |
| @@ -1376,7 +1345,9 @@ TEST_P(ChromeLauncherControllerImplWithArcTest, |
| copy_sync_list = app_service_->GetAllSyncData(syncer::APP_LIST); |
| - launcher_controller_.reset(); |
| + launcher_controller_ = nullptr; |
| + ash::test::ShellTestApi().SetShelfDelegate(nullptr); |
| + |
| ResetPinModel(); |
| SendPinChanges(syncer::SyncChangeList(), true); |
| @@ -1389,7 +1360,7 @@ TEST_P(ChromeLauncherControllerImplWithArcTest, |
| return; |
| EnablePlayStore(false); |
| StartAppSyncService(copy_sync_list); |
| - RecreateChromeLauncher(); |
| + RecreateLauncherController()->Init(); |
| EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); |
| EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id1)); |
| @@ -1856,7 +1827,7 @@ TEST_F(ChromeLauncherControllerImplTest, CheckRunningV1AppOrder) { |
| } |
| TEST_P(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunch) { |
| - RecreateChromeLauncher(); |
| + InitLauncherController(); |
| const arc::mojom::AppInfo& app1 = arc_test_.fake_apps()[0]; |
| const arc::mojom::AppInfo& app2 = arc_test_.fake_apps()[1]; |
| @@ -1946,7 +1917,7 @@ TEST_P(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunch) { |
| // Ensure the deferred controller does not override the active app controller |
| // (crbug.com/701152). |
| TEST_P(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunchForActiveApp) { |
| - RecreateChromeLauncher(); |
| + InitLauncherController(); |
| SendListOfArcApps(); |
| arc_test_.StopArcInstance(); |
| @@ -2725,7 +2696,7 @@ TEST_F(ChromeLauncherControllerImplTest, SyncUpdates) { |
| std::vector<std::string> expected_launchers; |
| std::vector<std::string> actual_launchers; |
| - GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
| + GetAppLaunchers(launcher_controller_, &actual_launchers); |
| EXPECT_EQ(expected_launchers, actual_launchers); |
| // Unavailable extensions don't create launcher items. |
| @@ -2737,14 +2708,14 @@ TEST_F(ChromeLauncherControllerImplTest, SyncUpdates) { |
| expected_launchers.push_back(extension2_->id()); |
| expected_launchers.push_back(extension4_->id()); |
| - GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
| + GetAppLaunchers(launcher_controller_, &actual_launchers); |
| EXPECT_EQ(expected_launchers, actual_launchers); |
| sync_list.clear(); |
| InsertAddPinChange(&sync_list, 2, extension3_->id()); |
| SendPinChanges(sync_list, false); |
| expected_launchers.insert(expected_launchers.begin() + 1, extension3_->id()); |
| - GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
| + GetAppLaunchers(launcher_controller_, &actual_launchers); |
| EXPECT_EQ(expected_launchers, actual_launchers); |
| sync_list.clear(); |
| @@ -2753,21 +2724,21 @@ TEST_F(ChromeLauncherControllerImplTest, SyncUpdates) { |
| InsertUpdatePinChange(&sync_list, 2, extension2_->id()); |
| SendPinChanges(sync_list, false); |
| std::reverse(expected_launchers.begin(), expected_launchers.end()); |
| - GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
| + GetAppLaunchers(launcher_controller_, &actual_launchers); |
| EXPECT_EQ(expected_launchers, actual_launchers); |
| // Sending legacy sync change without pin info should not affect pin model. |
| sync_list.clear(); |
| InsertLegacyPinChange(&sync_list, extension4_->id()); |
| SendPinChanges(sync_list, false); |
| - GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
| + GetAppLaunchers(launcher_controller_, &actual_launchers); |
| EXPECT_EQ(expected_launchers, actual_launchers); |
| sync_list.clear(); |
| InsertRemovePinChange(&sync_list, extension4_->id()); |
| SendPinChanges(sync_list, false); |
| expected_launchers.erase(expected_launchers.begin()); |
| - GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
| + GetAppLaunchers(launcher_controller_, &actual_launchers); |
| EXPECT_EQ(expected_launchers, actual_launchers); |
| sync_list.clear(); |
| @@ -2775,7 +2746,7 @@ TEST_F(ChromeLauncherControllerImplTest, SyncUpdates) { |
| InsertRemovePinChange(&sync_list, extension2_->id()); |
| SendPinChanges(sync_list, false); |
| expected_launchers.clear(); |
| - GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
| + GetAppLaunchers(launcher_controller_, &actual_launchers); |
| EXPECT_EQ(expected_launchers, actual_launchers); |
| } |
| @@ -2820,7 +2791,7 @@ TEST_F(ChromeLauncherControllerImplTest, ImportLegacyPin) { |
| EXPECT_EQ("AppList, Chrome, App4, App2, App5", GetPinnedAppStatus()); |
| // Next Chrome start should preserve pins. |
| - RecreateChromeLauncher(); |
| + RecreateLauncherController()->Init(); |
| StopPrefSyncService(); |
| StartPrefSyncService(syncer::SyncDataList()); |
| EXPECT_EQ("AppList, Chrome, App4, App2, App5", GetPinnedAppStatus()); |
| @@ -2843,13 +2814,13 @@ TEST_F(ChromeLauncherControllerImplTest, PendingInsertionOrder) { |
| expected_launchers.push_back(extension3_->id()); |
| std::vector<std::string> actual_launchers; |
| - GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
| + GetAppLaunchers(launcher_controller_, &actual_launchers); |
| EXPECT_EQ(expected_launchers, actual_launchers); |
| // Install |extension2| and verify it shows up between the other two. |
| extension_service_->AddExtension(extension2_.get()); |
| expected_launchers.insert(expected_launchers.begin() + 1, extension2_->id()); |
| - GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
| + GetAppLaunchers(launcher_controller_, &actual_launchers); |
| EXPECT_EQ(expected_launchers, actual_launchers); |
| } |
| @@ -2876,7 +2847,7 @@ TEST_F(ChromeLauncherControllerImplTest, BrowserMenuGeneration) { |
| item_browser.type = ash::TYPE_BROWSER_SHORTCUT; |
| item_browser.id = |
| launcher_controller_->GetShelfIDForAppID(extension_misc::kChromeAppId); |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 0, nullptr); |
| + CheckAppMenu(launcher_controller_, item_browser, 0, nullptr); |
| // Now make the created browser() visible by showing its browser window. |
| browser()->window()->Show(); |
| @@ -2884,7 +2855,7 @@ TEST_F(ChromeLauncherControllerImplTest, BrowserMenuGeneration) { |
| NavigateAndCommitActiveTabWithTitle(browser(), GURL("http://test1"), title1); |
| base::string16 one_menu_item[] = { title1 }; |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item); |
| + CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item); |
| // Create one more browser/window and check that one more was added. |
| std::unique_ptr<Browser> browser2( |
| @@ -2898,7 +2869,7 @@ TEST_F(ChromeLauncherControllerImplTest, BrowserMenuGeneration) { |
| // Check that the list contains now two entries - make furthermore sure that |
| // the active item is the first entry. |
| base::string16 two_menu_items[] = {title1, title2}; |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 2, two_menu_items); |
| + CheckAppMenu(launcher_controller_, item_browser, 2, two_menu_items); |
| // Apparently we have to close all tabs we have. |
| chrome::CloseTab(browser2.get()); |
| @@ -2917,14 +2888,14 @@ TEST_F(MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest, |
| // Check that the menu is empty. |
| chrome::NewTab(browser()); |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 0, nullptr); |
| + CheckAppMenu(launcher_controller_, item_browser, 0, nullptr); |
| // Show the created |browser()| by showing its window. |
| browser()->window()->Show(); |
| base::string16 title1 = ASCIIToUTF16("Test1"); |
| NavigateAndCommitActiveTabWithTitle(browser(), GURL("http://test1"), title1); |
| base::string16 one_menu_item1[] = { title1 }; |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item1); |
| + CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item1); |
| // Create a browser for another user and check that it is not included in the |
| // users running browser list. |
| @@ -2935,17 +2906,17 @@ TEST_F(MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest, |
| std::unique_ptr<Browser> browser2( |
| CreateBrowserAndTabWithProfile(profile2, user2, "http://test2")); |
| base::string16 one_menu_item2[] = { ASCIIToUTF16(user2) }; |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item1); |
| + CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item1); |
| // Switch to the other user and make sure that only that browser window gets |
| // shown. |
| SwitchActiveUser(account_id2); |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item2); |
| + CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item2); |
| // Transferred browsers of other users should not show up in the list. |
| chrome::MultiUserWindowManager::GetInstance()->ShowWindowForUser( |
| browser()->window()->GetNativeWindow(), account_id2); |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 1, one_menu_item2); |
| + CheckAppMenu(launcher_controller_, item_browser, 1, one_menu_item2); |
| chrome::CloseTab(browser2.get()); |
| } |
| @@ -2982,14 +2953,14 @@ TEST_F(ChromeLauncherControllerImplTest, V1AppMenuGeneration) { |
| ash::ShelfItem item_gmail; |
| item_gmail.type = ash::TYPE_PINNED_APP; |
| item_gmail.id = gmail_id; |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr); |
| + CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr); |
| // Set the gmail URL to a new tab. |
| base::string16 title1 = ASCIIToUTF16("Test1"); |
| NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1); |
| base::string16 one_menu_item[] = { title1 }; |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 1, one_menu_item); |
| + CheckAppMenu(launcher_controller_, item_gmail, 1, one_menu_item); |
| // Create one empty tab. |
| chrome::NewTab(browser()); |
| @@ -3004,20 +2975,20 @@ TEST_F(ChromeLauncherControllerImplTest, V1AppMenuGeneration) { |
| base::string16 title3 = ASCIIToUTF16("Test3"); |
| NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title3); |
| base::string16 two_menu_items[] = {title1, title3}; |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 2, two_menu_items); |
| + CheckAppMenu(launcher_controller_, item_gmail, 2, two_menu_items); |
| // Even though the item is in the V1 app list, it should also be in the |
| // browser list. |
| base::string16 browser_menu_item[] = {title3}; |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 1, browser_menu_item); |
| + CheckAppMenu(launcher_controller_, item_browser, 1, browser_menu_item); |
| // Test that closing of (all) the item(s) does work (and all menus get |
| // updated properly). |
| launcher_controller_->Close(item_gmail.id); |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr); |
| + CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr); |
| base::string16 browser_menu_item2[] = { title2 }; |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 1, browser_menu_item2); |
| + CheckAppMenu(launcher_controller_, item_browser, 1, browser_menu_item2); |
| } |
| // Check the multi profile case where only user related apps should show up. |
| @@ -3045,14 +3016,14 @@ TEST_F(MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest, |
| ash::ShelfItem item_gmail; |
| item_gmail.type = ash::TYPE_PINNED_APP; |
| item_gmail.id = gmail_id; |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr); |
| + CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr); |
| // Set the gmail URL to a new tab. |
| base::string16 title1 = ASCIIToUTF16("Test1"); |
| NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1); |
| base::string16 one_menu_item[] = { title1 }; |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 1, one_menu_item); |
| + CheckAppMenu(launcher_controller_, item_gmail, 1, one_menu_item); |
| // Create a second profile and switch to that user. |
| std::string user2 = "user2"; |
| @@ -3062,15 +3033,15 @@ TEST_F(MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest, |
| SwitchActiveUser(account_id2); |
| // No item should have content yet. |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 0, nullptr); |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr); |
| + CheckAppMenu(launcher_controller_, item_browser, 0, nullptr); |
| + CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr); |
| // Transfer the browser of the first user - it should still not show up. |
| chrome::MultiUserWindowManager::GetInstance()->ShowWindowForUser( |
| browser()->window()->GetNativeWindow(), account_id2); |
| - CheckAppMenu(launcher_controller_.get(), item_browser, 0, nullptr); |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 0, nullptr); |
| + CheckAppMenu(launcher_controller_, item_browser, 0, nullptr); |
| + CheckAppMenu(launcher_controller_, item_gmail, 0, nullptr); |
| } |
| // Check that V2 applications are creating items properly in the launcher when |
| @@ -3308,7 +3279,7 @@ TEST_F(ChromeLauncherControllerImplTest, V1AppMenuExecution) { |
| item_gmail.type = ash::TYPE_PINNED_APP; |
| item_gmail.id = gmail_id; |
| base::string16 two_menu_items[] = {title1, title2}; |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 2, two_menu_items); |
| + CheckAppMenu(launcher_controller_, item_gmail, 2, two_menu_items); |
| ash::ShelfItemDelegate* item_delegate = |
| launcher_controller_->GetShelfItemDelegate(gmail_id); |
| ASSERT_TRUE(item_delegate); |
| @@ -3356,7 +3327,7 @@ TEST_F(ChromeLauncherControllerImplTest, V1AppMenuDeletionExecution) { |
| item_gmail.type = ash::TYPE_PINNED_APP; |
| item_gmail.id = gmail_id; |
| base::string16 two_menu_items[] = {title1, title2}; |
| - CheckAppMenu(launcher_controller_.get(), item_gmail, 2, two_menu_items); |
| + CheckAppMenu(launcher_controller_, item_gmail, 2, two_menu_items); |
| ash::ShelfItemDelegate* item_delegate = |
| launcher_controller_->GetShelfItemDelegate(gmail_id); |
| @@ -3516,13 +3487,7 @@ TEST_F(ChromeLauncherControllerImplTest, PersistLauncherItemPositions) { |
| EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); |
| EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT, model_->items()[3].type); |
| - launcher_controller_.reset(); |
| - while (!model_->items().empty()) |
| - model_->RemoveItemAt(0); |
| - |
| - AddAppListLauncherItem(); |
| - launcher_controller_ = |
| - base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_); |
| + RecreateLauncherController(); |
| helper = new TestLauncherControllerHelper(profile()); |
| helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1"); |
| helper->SetAppID(tab_strip_model->GetWebContentsAt(1), "2"); |
| @@ -3563,13 +3528,7 @@ TEST_F(ChromeLauncherControllerImplTest, PersistPinned) { |
| EXPECT_FALSE(launcher_controller_->IsAppPinned("0")); |
| EXPECT_EQ(initial_size + 1, model_->items().size()); |
| - launcher_controller_.reset(); |
| - while (!model_->items().empty()) |
| - model_->RemoveItemAt(0); |
| - |
| - AddAppListLauncherItem(); |
| - launcher_controller_ = |
| - base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_); |
| + RecreateLauncherController(); |
| helper = new TestLauncherControllerHelper(profile()); |
| helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1"); |
| SetLauncherControllerHelper(helper); |
| @@ -3684,10 +3643,6 @@ TEST_P(ChromeLauncherControllerImplWithArcTest, ArcManaged) { |
| // Initially pins are imported from legacy pref based model. |
| StartPrefSyncService(syncer::SyncDataList()); |
| - // Inject |launcher_controller_| as ShelfDelegate to verify the behavior |
| - // of removing pinned icon in ArcSessionManager::OnOptInPreferenceChanged(). |
| - SetShelfDelegate(); |
| - |
| // Initial run, ARC is not managed and disabled, Play Store pin should be |
| // available. |
| ValidateArcState(false, false, arc::ArcSessionManager::State::STOPPED, |
| @@ -4048,7 +4003,9 @@ TEST_P(ChromeLauncherControllerOrientationTest, ArcOrientationLock) { |
| TEST_P(ChromeLauncherControllerArcDefaultAppsTest, DefaultApps) { |
| arc_test_.SetUp(profile()); |
| InitLauncherController(); |
| - ChromeLauncherController::set_instance_for_test(launcher_controller_.get()); |
| + // TODO(crbug.com/709297): Fix this workaround to prevent a TearDown crash. |
| + std::vector<std::unique_ptr<AppIconLoader>> no_loaders; |
| + launcher_controller_->SetAppIconLoadersForTest(no_loaders); |
| ArcAppListPrefs* const prefs = arc_test_.arc_app_list_prefs(); |
| EnablePlayStore(false); |
| @@ -4184,7 +4141,7 @@ TEST_F(ChromeLauncherControllerImplTest, SyncOffLocalUpdate) { |
| app_service_->GetAllSyncData(syncer::APP_LIST); |
| app_service_->StopSyncing(syncer::APP_LIST); |
| - RecreateChromeLauncher(); |
| + RecreateLauncherController()->Init(); |
| // Pinned state should not change. |
| EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); |