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 4b5b8ad57c4bcaf22bf4a3a0803c5992c3274ae2..f7ac73d8ec8ec93c32976cca0a5dcbc512bc6238 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 |
@@ -82,6 +82,7 @@ |
#include "chrome/test/base/testing_profile.h" |
#include "chrome/test/base/testing_profile_manager.h" |
#include "chromeos/chromeos_switches.h" |
+#include "components/arc/arc_util.h" |
#include "components/arc/common/app.mojom.h" |
#include "components/arc/test/fake_app_instance.h" |
#include "components/exo/shell_surface.h" |
@@ -877,7 +878,9 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest { |
std::vector<arc::mojom::AppInfo>()); |
} |
- void EnableArc(bool enabled) { |
+ // TODO(victorhsieh): Add test coverage for when ARC is started regardless |
+ // Play Store opt-in status, and the followed opt-in and opt-out. |
+ void EnablePlayStore(bool enabled) { |
arc::SetArcPlayStoreEnabledForProfile(profile(), enabled); |
base::RunLoop().RunUntilIdle(); |
} |
@@ -998,15 +1001,26 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest { |
}; |
class ChromeLauncherControllerImplWithArcTest |
- : public ChromeLauncherControllerImplTest { |
+ : public ChromeLauncherControllerImplTest, |
+ public ::testing::WithParamInterface<bool> { |
protected: |
ChromeLauncherControllerImplWithArcTest() { auto_start_arc_test_ = true; } |
~ChromeLauncherControllerImplWithArcTest() override {} |
+ void SetUp() override { |
+ if (GetParam()) |
+ arc::SetArcAlwaysStartForTesting(); |
+ ChromeLauncherControllerImplTest::SetUp(); |
+ } |
+ |
private: |
DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerImplWithArcTest); |
}; |
+INSTANTIATE_TEST_CASE_P(, |
+ ChromeLauncherControllerImplWithArcTest, |
+ ::testing::Bool()); |
+ |
// Watches WebContents and blocks until it is destroyed. This is needed for |
// the destruction of a V2 application. |
class WebContentsDestroyedWatcher : public content::WebContentsObserver { |
@@ -1277,17 +1291,29 @@ class MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest |
}; |
class ChromeLauncherControllerImplMultiProfileWithArcTest |
- : public MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest { // NOLINT(whitespace/line_length) |
+ : public MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest, // NOLINT(whitespace/line_length) |
+ public ::testing::WithParamInterface<bool> { |
protected: |
ChromeLauncherControllerImplMultiProfileWithArcTest() { |
auto_start_arc_test_ = true; |
} |
~ChromeLauncherControllerImplMultiProfileWithArcTest() override {} |
+ void SetUp() override { |
+ if (GetParam()) |
+ arc::SetArcAlwaysStartForTesting(); |
+ MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest:: |
+ SetUp(); |
+ } |
+ |
private: |
DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerImplMultiProfileWithArcTest); |
}; |
+INSTANTIATE_TEST_CASE_P(, |
+ ChromeLauncherControllerImplMultiProfileWithArcTest, |
+ ::testing::Bool()); |
+ |
TEST_F(ChromeLauncherControllerImplTest, DefaultApps) { |
InitLauncherController(); |
// Model should only contain the browser shortcut and app list items. |
@@ -1304,7 +1330,7 @@ TEST_F(ChromeLauncherControllerImplTest, DefaultApps) { |
EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
} |
-TEST_F(ChromeLauncherControllerImplWithArcTest, |
+TEST_P(ChromeLauncherControllerImplWithArcTest, |
ArcAppPinCrossPlatformWorkflow) { |
// Work on ARC disabled platform first. |
const std::string arc_app_id1 = |
@@ -1382,7 +1408,10 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, |
EXPECT_EQ(0U, app_service_->sync_items().size()); |
// Move back to ARC disabled platform. |
- EnableArc(false); |
+ // TODO(victorhsieh): Implement opt-out. |
+ if (arc::ShouldArcAlwaysStart()) |
+ return; |
+ EnablePlayStore(false); |
StartAppSyncService(copy_sync_list); |
RecreateChromeLauncher(); |
@@ -1398,7 +1427,7 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, |
model_->Move(4, 2); |
launcher_controller_->UnpinAppWithID(extension2_->id()); |
EXPECT_EQ("AppList, App3, Chrome, App1", GetPinnedAppStatus()); |
- EnableArc(true); |
+ EnablePlayStore(true); |
SendListOfArcApps(); |
@@ -1835,7 +1864,7 @@ TEST_F(ChromeLauncherControllerImplTest, CheckRunningAppOrder) { |
EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); |
} |
-TEST_F(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunch) { |
+TEST_P(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunch) { |
RecreateChromeLauncher(); |
const arc::mojom::AppInfo& app1 = arc_test_.fake_apps()[0]; |
@@ -1910,7 +1939,7 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunch) { |
(request1->IsForApp(app3) && request2->IsForApp(app2))); |
} |
-TEST_F(ChromeLauncherControllerImplMultiProfileWithArcTest, ArcMultiUser) { |
+TEST_P(ChromeLauncherControllerImplMultiProfileWithArcTest, ArcMultiUser) { |
SendListOfArcApps(); |
InitLauncherController(); |
@@ -1982,7 +2011,7 @@ TEST_F(ChromeLauncherControllerImplMultiProfileWithArcTest, ArcMultiUser) { |
arc_window3->CloseNow(); |
} |
-TEST_F(ChromeLauncherControllerImplWithArcTest, ArcRunningApp) { |
+TEST_P(ChromeLauncherControllerImplWithArcTest, ArcRunningApp) { |
InitLauncherController(); |
const std::string arc_app_id = ArcAppTest::GetAppId(arc_test_.fake_apps()[0]); |
@@ -2025,7 +2054,7 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, ArcRunningApp) { |
// Test race creation/deletion of ARC app. |
// TODO(khmel): Remove after moving everything to wayland protocol. |
-TEST_F(ChromeLauncherControllerImplWithArcTest, ArcRaceCreateClose) { |
+TEST_P(ChromeLauncherControllerImplWithArcTest, ArcRaceCreateClose) { |
InitLauncherController(); |
const std::string arc_app_id1 = |
@@ -2072,7 +2101,7 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, ArcRaceCreateClose) { |
launcher_controller_->GetShelfIDForAppID(arc_app_id2)); |
} |
-TEST_F(ChromeLauncherControllerImplWithArcTest, ArcWindowRecreation) { |
+TEST_P(ChromeLauncherControllerImplWithArcTest, ArcWindowRecreation) { |
InitLauncherController(); |
const std::string arc_app_id = ArcAppTest::GetAppId(arc_test_.fake_apps()[0]); |
@@ -2101,7 +2130,7 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, ArcWindowRecreation) { |
// Validate that ARC app is pinned correctly and pin is removed automatically |
// once app is uninstalled. |
-TEST_F(ChromeLauncherControllerImplWithArcTest, ArcAppPin) { |
+TEST_P(ChromeLauncherControllerImplWithArcTest, ArcAppPin) { |
InitLauncherController(); |
const std::string arc_app_id = ArcAppTest::GetAppId(arc_test_.fake_apps()[0]); |
@@ -2123,24 +2152,30 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, ArcAppPin) { |
EXPECT_TRUE(launcher_controller_->IsAppPinned(extension2_->id())); |
EXPECT_EQ("AppList, Chrome, App1, Fake App 0, App2", GetPinnedAppStatus()); |
+ // In opt-out mode, only system apps are available and can't be uninstalled. |
+ // Skip the rest of the test. |
+ if (arc::ShouldArcAlwaysStart()) |
+ return; |
UninstallArcApps(); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id)); |
EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); |
SendListOfArcApps(); |
+ EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id)); |
EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); |
// Opt-Out/Opt-In remove item from the shelf. |
launcher_controller_->PinAppWithID(arc_app_id); |
EXPECT_EQ("AppList, Chrome, App1, App2, Fake App 0", GetPinnedAppStatus()); |
- EnableArc(false); |
+ EnablePlayStore(false); |
EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); |
- EnableArc(true); |
+ EnablePlayStore(true); |
EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); |
SendListOfArcApps(); |
EXPECT_EQ("AppList, Chrome, App1, App2, Fake App 0", GetPinnedAppStatus()); |
} |
// Validates that ARC app pins persist across OptOut/OptIn. |
-TEST_F(ChromeLauncherControllerImplWithArcTest, ArcAppPinOptOutOptIn) { |
+TEST_P(ChromeLauncherControllerImplWithArcTest, ArcAppPinOptOutOptIn) { |
InitLauncherController(); |
const std::string arc_app_id1 = |
@@ -2164,7 +2199,10 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, ArcAppPinOptOutOptIn) { |
EXPECT_EQ("AppList, Chrome, App1, Fake App 1, App2, Fake App 0", |
GetPinnedAppStatus()); |
- EnableArc(false); |
+ // TODO(victorhsieh): Implement opt-out. |
+ if (arc::ShouldArcAlwaysStart()) |
+ return; |
+ EnablePlayStore(false); |
EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); |
EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); |
@@ -2172,7 +2210,7 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, ArcAppPinOptOutOptIn) { |
EXPECT_TRUE(launcher_controller_->IsAppPinned(extension2_->id())); |
EXPECT_FALSE(launcher_controller_->IsAppPinned(arc_app_id2)); |
- EnableArc(true); |
+ EnablePlayStore(true); |
SendListOfArcApps(); |
base::RunLoop().RunUntilIdle(); |
@@ -3610,7 +3648,7 @@ TEST_F(ChromeLauncherControllerImplTest, MultipleAppIconLoaders) { |
EXPECT_EQ(1, app_icon_loader2->clear_count()); |
} |
-TEST_F(ChromeLauncherControllerImplWithArcTest, ArcAppPinPolicy) { |
+TEST_P(ChromeLauncherControllerImplWithArcTest, ArcAppPinPolicy) { |
InitLauncherControllerWithBrowser(); |
arc::mojom::AppInfo appinfo = CreateAppInfo( |
"Some App", "SomeActivity", "com.example.app", OrientationLock::NONE); |
@@ -3629,10 +3667,14 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, ArcAppPinPolicy) { |
GetPinnableForAppID(app_id, profile())); |
} |
-TEST_F(ChromeLauncherControllerImplWithArcTest, ArcManaged) { |
+TEST_P(ChromeLauncherControllerImplWithArcTest, ArcManaged) { |
+ // TODO(victorhsieh): Implement opt-in and opt-out. |
+ if (arc::ShouldArcAlwaysStart()) |
+ return; |
+ |
extension_service_->AddExtension(arc_support_host_.get()); |
// Test enables ARC, so turn it off for initial values. |
- EnableArc(false); |
+ EnablePlayStore(false); |
InitLauncherController(); |
@@ -3672,19 +3714,19 @@ TEST_F(ChromeLauncherControllerImplWithArcTest, ArcManaged) { |
"AppList, Chrome, Play Store"); |
// ARC is not managed and enabled, Play Store pin should be available. |
- EnableArc(true); |
+ EnablePlayStore(true); |
ValidateArcState(true, false, |
arc::ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, |
"AppList, Chrome, Play Store"); |
// User disables ARC. ARC is not managed and disabled, Play Store pin should |
// be automatically removed. |
- EnableArc(false); |
+ EnablePlayStore(false); |
ValidateArcState(false, false, arc::ArcSessionManager::State::STOPPED, |
"AppList, Chrome"); |
// Even if re-enable it again, Play Store pin does not appear automatically. |
- EnableArc(true); |
+ EnablePlayStore(true); |
ValidateArcState(true, false, |
arc::ArcSessionManager::State::SHOWING_TERMS_OF_SERVICE, |
"AppList, Chrome"); |
@@ -3766,14 +3808,21 @@ class ChromeLauncherControllerOrientationTest |
DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerOrientationTest); |
}; |
+INSTANTIATE_TEST_CASE_P(, |
+ ChromeLauncherControllerOrientationTest, |
+ ::testing::Bool()); |
+ |
class ChromeLauncherControllerArcDefaultAppsTest |
- : public ChromeLauncherControllerImplTest { |
+ : public ChromeLauncherControllerImplTest, |
+ public ::testing::WithParamInterface<bool> { |
public: |
ChromeLauncherControllerArcDefaultAppsTest() {} |
~ChromeLauncherControllerArcDefaultAppsTest() override {} |
protected: |
void SetUp() override { |
+ if (GetParam()) |
+ arc::SetArcAlwaysStartForTesting(); |
ArcDefaultAppList::UseTestAppsDirectory(); |
ChromeLauncherControllerImplTest::SetUp(); |
} |
@@ -3782,14 +3831,18 @@ class ChromeLauncherControllerArcDefaultAppsTest |
DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerArcDefaultAppsTest); |
}; |
+INSTANTIATE_TEST_CASE_P(, |
+ ChromeLauncherControllerArcDefaultAppsTest, |
+ ::testing::Bool()); |
+ |
} // namespace |
-TEST_F(ChromeLauncherControllerOrientationTest, |
+TEST_P(ChromeLauncherControllerOrientationTest, |
ArcOrientationLockBeforeWindowReady) { |
ASSERT_TRUE(display::Display::HasInternalDisplay()); |
extension_service_->AddExtension(arc_support_host_.get()); |
- EnableArc(true); |
+ EnablePlayStore(true); |
InitLauncherController(); |
@@ -3834,11 +3887,11 @@ TEST_F(ChromeLauncherControllerOrientationTest, |
display::Screen::GetScreen()->GetPrimaryDisplay().rotation()); |
} |
-TEST_F(ChromeLauncherControllerOrientationTest, ArcOrientationLock) { |
+TEST_P(ChromeLauncherControllerOrientationTest, ArcOrientationLock) { |
ASSERT_TRUE(display::Display::HasInternalDisplay()); |
extension_service_->AddExtension(arc_support_host_.get()); |
- EnableArc(true); |
+ EnablePlayStore(true); |
EnableTabletMode(true); |
InitLauncherController(); |
@@ -3931,11 +3984,11 @@ TEST_F(ChromeLauncherControllerOrientationTest, ArcOrientationLock) { |
EXPECT_FALSE(controller->rotation_locked()); |
} |
-TEST_F(ChromeLauncherControllerOrientationTest, CurrentWithLandscapeDisplay) { |
+TEST_P(ChromeLauncherControllerOrientationTest, CurrentWithLandscapeDisplay) { |
ASSERT_TRUE(display::Display::HasInternalDisplay()); |
extension_service_->AddExtension(arc_support_host_.get()); |
- EnableArc(true); |
+ EnablePlayStore(true); |
EnableTabletMode(true); |
InitLauncherController(); |
@@ -3992,13 +4045,13 @@ TEST_F(ChromeLauncherControllerOrientationTest, CurrentWithLandscapeDisplay) { |
display::Screen::GetScreen()->GetPrimaryDisplay().rotation()); |
} |
-TEST_F(ChromeLauncherControllerArcDefaultAppsTest, DefaultApps) { |
+TEST_P(ChromeLauncherControllerArcDefaultAppsTest, DefaultApps) { |
arc_test_.SetUp(profile()); |
InitLauncherController(); |
ChromeLauncherController::set_instance_for_test(launcher_controller_.get()); |
ArcAppListPrefs* const prefs = arc_test_.arc_app_list_prefs(); |
- EnableArc(false); |
+ EnablePlayStore(false); |
EXPECT_FALSE(arc::IsArcPlayStoreEnabledForProfile(profile())); |
ASSERT_TRUE(prefs->GetAppIds().size()); |
@@ -4012,7 +4065,7 @@ TEST_F(ChromeLauncherControllerArcDefaultAppsTest, DefaultApps) { |
launcher_controller_->GetShelfIDForAppID(app_id)); |
// Stop ARC again. Shelf item should go away. |
- EnableArc(false); |
+ EnablePlayStore(false); |
EXPECT_EQ(ash::kInvalidShelfID, |
launcher_controller_->GetShelfIDForAppID(app_id)); |