OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h" | 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <map> | 10 #include <map> |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
447 Extension::NO_FLAGS, "gggggggggggggggggggggggggggggggg", &error); | 447 Extension::NO_FLAGS, "gggggggggggggggggggggggggggggggg", &error); |
448 arc_support_host_ = Extension::Create(base::FilePath(), Manifest::UNPACKED, | 448 arc_support_host_ = Extension::Create(base::FilePath(), Manifest::UNPACKED, |
449 manifest, Extension::NO_FLAGS, | 449 manifest, Extension::NO_FLAGS, |
450 ArcSupportHost::kHostAppId, &error); | 450 ArcSupportHost::kHostAppId, &error); |
451 extension_service_->AddExtension(extension_chrome_.get()); | 451 extension_service_->AddExtension(extension_chrome_.get()); |
452 } | 452 } |
453 | 453 |
454 // Creates a running platform V2 app (not pinned) of type |app_id|. | 454 // Creates a running platform V2 app (not pinned) of type |app_id|. |
455 virtual void CreateRunningV2App(const std::string& app_id) { | 455 virtual void CreateRunningV2App(const std::string& app_id) { |
456 DCHECK(!test_controller_); | 456 DCHECK(!test_controller_); |
457 ash::ShelfID id = | |
458 launcher_controller_->CreateAppShortcutLauncherItemWithType( | |
459 ash::AppLaunchId(app_id), model_->item_count(), ash::TYPE_APP); | |
460 DCHECK(id); | |
461 // Change the created launcher controller into a V2 app controller. | 457 // Change the created launcher controller into a V2 app controller. |
462 test_controller_ = new TestV2AppLauncherItemController(app_id, | 458 test_controller_ = new TestV2AppLauncherItemController(app_id, |
463 launcher_controller_.get()); | 459 launcher_controller_.get()); |
464 launcher_controller_->SetItemController(id, test_controller_); | 460 ash::ShelfID id = launcher_controller_->InsertAppLauncherItem( |
461 test_controller_, ash::STATUS_RUNNING, model_->item_count(), | |
462 ash::TYPE_APP); | |
465 DCHECK(launcher_controller_->IsPlatformApp(id)); | 463 DCHECK(launcher_controller_->IsPlatformApp(id)); |
466 launcher_controller_->SetItemStatus(id, ash::STATUS_RUNNING); | |
467 } | 464 } |
468 | 465 |
469 // Sets the stage for a multi user test. | 466 // Sets the stage for a multi user test. |
470 virtual void SetUpMultiUserScenario(syncer::SyncChangeList* user_a, | 467 virtual void SetUpMultiUserScenario(syncer::SyncChangeList* user_a, |
471 syncer::SyncChangeList* user_b) { | 468 syncer::SyncChangeList* user_b) { |
472 InitLauncherController(); | 469 InitLauncherController(); |
473 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); | 470 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); |
474 | 471 |
475 // Set an empty pinned pref to begin with. | 472 // Set an empty pinned pref to begin with. |
476 syncer::SyncChangeList sync_list; | 473 syncer::SyncChangeList sync_list; |
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1310 private: | 1307 private: |
1311 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerImplMultiProfileWithArcTest); | 1308 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerImplMultiProfileWithArcTest); |
1312 }; | 1309 }; |
1313 | 1310 |
1314 INSTANTIATE_TEST_CASE_P(, | 1311 INSTANTIATE_TEST_CASE_P(, |
1315 ChromeLauncherControllerImplMultiProfileWithArcTest, | 1312 ChromeLauncherControllerImplMultiProfileWithArcTest, |
1316 ::testing::Bool()); | 1313 ::testing::Bool()); |
1317 | 1314 |
1318 TEST_F(ChromeLauncherControllerImplTest, DefaultApps) { | 1315 TEST_F(ChromeLauncherControllerImplTest, DefaultApps) { |
1319 InitLauncherController(); | 1316 InitLauncherController(); |
1320 // Model should only contain the browser shortcut and app list items. | 1317 // The model should only contain the browser shortcut and app list items. |
1321 EXPECT_EQ(2, model_->item_count()); | 1318 EXPECT_EQ(2, model_->item_count()); |
1322 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1319 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1323 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 1320 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
1324 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 1321 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
1325 | 1322 |
1326 // Installing |extension3_| should add it to the launcher - behind the | 1323 // Installing |extension3_| should add it to the launcher - behind the |
1327 // chrome icon. | 1324 // chrome icon. |
1328 extension_service_->AddExtension(extension3_.get()); | 1325 extension_service_->AddExtension(extension3_.get()); |
1329 EXPECT_EQ("AppList, Chrome, App3", GetPinnedAppStatus()); | 1326 EXPECT_EQ("AppList, Chrome, App3", GetPinnedAppStatus()); |
1330 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1327 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1495 // order. | 1492 // order. |
1496 TEST_F(ChromeLauncherControllerImplTest, RestoreDefaultAppsReverseOrder) { | 1493 TEST_F(ChromeLauncherControllerImplTest, RestoreDefaultAppsReverseOrder) { |
1497 InitLauncherController(); | 1494 InitLauncherController(); |
1498 | 1495 |
1499 syncer::SyncChangeList sync_list; | 1496 syncer::SyncChangeList sync_list; |
1500 InsertAddPinChange(&sync_list, 0, extension1_->id()); | 1497 InsertAddPinChange(&sync_list, 0, extension1_->id()); |
1501 InsertAddPinChange(&sync_list, 1, extension2_->id()); | 1498 InsertAddPinChange(&sync_list, 1, extension2_->id()); |
1502 InsertAddPinChange(&sync_list, 2, extension3_->id()); | 1499 InsertAddPinChange(&sync_list, 2, extension3_->id()); |
1503 SendPinChanges(sync_list, true); | 1500 SendPinChanges(sync_list, true); |
1504 | 1501 |
1505 // Model should only contain the browser shortcut and app list items. | 1502 // The model should only contain the browser shortcut and app list items. |
1506 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1503 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1507 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 1504 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
1508 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 1505 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
1509 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); | 1506 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); |
1510 | 1507 |
1511 // Installing |extension3_| should add it to the shelf - behind the | 1508 // Installing |extension3_| should add it to the shelf - behind the |
1512 // chrome icon. | 1509 // chrome icon. |
1513 ash::ShelfItem item; | 1510 ash::ShelfItem item; |
1514 extension_service_->AddExtension(extension3_.get()); | 1511 extension_service_->AddExtension(extension3_.get()); |
1515 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1512 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
(...skipping 17 matching lines...) Expand all Loading... | |
1533 // order. | 1530 // order. |
1534 TEST_F(ChromeLauncherControllerImplTest, RestoreDefaultAppsRandomOrder) { | 1531 TEST_F(ChromeLauncherControllerImplTest, RestoreDefaultAppsRandomOrder) { |
1535 InitLauncherController(); | 1532 InitLauncherController(); |
1536 | 1533 |
1537 syncer::SyncChangeList sync_list; | 1534 syncer::SyncChangeList sync_list; |
1538 InsertAddPinChange(&sync_list, 0, extension1_->id()); | 1535 InsertAddPinChange(&sync_list, 0, extension1_->id()); |
1539 InsertAddPinChange(&sync_list, 1, extension2_->id()); | 1536 InsertAddPinChange(&sync_list, 1, extension2_->id()); |
1540 InsertAddPinChange(&sync_list, 2, extension3_->id()); | 1537 InsertAddPinChange(&sync_list, 2, extension3_->id()); |
1541 SendPinChanges(sync_list, true); | 1538 SendPinChanges(sync_list, true); |
1542 | 1539 |
1543 // Model should only contain the browser shortcut and app list items. | 1540 // The model should only contain the browser shortcut and app list items. |
1544 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1541 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1545 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 1542 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
1546 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 1543 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
1547 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); | 1544 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); |
1548 | 1545 |
1549 // Installing |extension2_| should add it to the launcher - behind the | 1546 // Installing |extension2_| should add it to the launcher - behind the |
1550 // chrome icon. | 1547 // chrome icon. |
1551 extension_service_->AddExtension(extension2_.get()); | 1548 extension_service_->AddExtension(extension2_.get()); |
1552 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1549 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1553 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 1550 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
(...skipping 18 matching lines...) Expand all Loading... | |
1572 RestoreDefaultAppsRandomOrderChromeMoved) { | 1569 RestoreDefaultAppsRandomOrderChromeMoved) { |
1573 InitLauncherController(); | 1570 InitLauncherController(); |
1574 | 1571 |
1575 syncer::SyncChangeList sync_list; | 1572 syncer::SyncChangeList sync_list; |
1576 InsertAddPinChange(&sync_list, 0, extension1_->id()); | 1573 InsertAddPinChange(&sync_list, 0, extension1_->id()); |
1577 InsertAddPinChange(&sync_list, 1, extension_misc::kChromeAppId); | 1574 InsertAddPinChange(&sync_list, 1, extension_misc::kChromeAppId); |
1578 InsertAddPinChange(&sync_list, 2, extension2_->id()); | 1575 InsertAddPinChange(&sync_list, 2, extension2_->id()); |
1579 InsertAddPinChange(&sync_list, 3, extension3_->id()); | 1576 InsertAddPinChange(&sync_list, 3, extension3_->id()); |
1580 SendPinChanges(sync_list, true); | 1577 SendPinChanges(sync_list, true); |
1581 | 1578 |
1582 // Model should only contain the browser shortcut and app list items. | 1579 // The model should only contain the browser shortcut and app list items. |
1583 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1580 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1584 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 1581 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
1585 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 1582 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
1586 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); | 1583 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); |
1587 | 1584 |
1588 // Installing |extension2_| should add it to the shelf - behind the | 1585 // Installing |extension2_| should add it to the shelf - behind the |
1589 // chrome icon. | 1586 // chrome icon. |
1590 ash::ShelfItem item; | 1587 ash::ShelfItem item; |
1591 extension_service_->AddExtension(extension2_.get()); | 1588 extension_service_->AddExtension(extension2_.get()); |
1592 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1589 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1656 extension_service_->UnloadExtension(extension2_->id(), | 1653 extension_service_->UnloadExtension(extension2_->id(), |
1657 UnloadedExtensionInfo::REASON_UNINSTALL); | 1654 UnloadedExtensionInfo::REASON_UNINSTALL); |
1658 EXPECT_EQ("AppList, Chrome, App3", GetPinnedAppStatus()); | 1655 EXPECT_EQ("AppList, Chrome, App3", GetPinnedAppStatus()); |
1659 | 1656 |
1660 // Check that an update of an extension does not crash the system. | 1657 // Check that an update of an extension does not crash the system. |
1661 extension_service_->UnloadExtension(extension3_->id(), | 1658 extension_service_->UnloadExtension(extension3_->id(), |
1662 UnloadedExtensionInfo::REASON_UPDATE); | 1659 UnloadedExtensionInfo::REASON_UPDATE); |
1663 EXPECT_EQ("AppList, Chrome, App3", GetPinnedAppStatus()); | 1660 EXPECT_EQ("AppList, Chrome, App3", GetPinnedAppStatus()); |
1664 } | 1661 } |
1665 | 1662 |
1666 // Check that simple locking of an application will 'create' a launcher item. | 1663 // Test the V1 app interaction flow: run it, activate it, close it. |
1667 TEST_F(ChromeLauncherControllerImplTest, CheckLockApps) { | 1664 TEST_F(ChromeLauncherControllerImplTest, V1AppRunActivateClose) { |
1668 InitLauncherController(); | 1665 InitLauncherController(); |
1669 // Model should only contain the browser shortcut and app list items. | 1666 // The model should only contain the browser shortcut and app list items. |
1670 EXPECT_EQ(2, model_->item_count()); | |
1671 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1672 EXPECT_EQ(ash::kInvalidShelfID, | |
1673 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1674 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | |
1675 EXPECT_EQ(ash::kInvalidShelfID, | |
1676 launcher_controller_->GetShelfIDForAppID(extension2_->id())); | |
1677 | |
1678 launcher_controller_->LockV1AppWithID(extension1_->id()); | |
1679 | |
1680 EXPECT_EQ(3, model_->item_count()); | |
1681 EXPECT_EQ(ash::TYPE_APP, model_->items()[2].type); | |
1682 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1683 EXPECT_NE(ash::kInvalidShelfID, | |
1684 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1685 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | |
1686 EXPECT_EQ(ash::kInvalidShelfID, | |
1687 launcher_controller_->GetShelfIDForAppID(extension2_->id())); | |
1688 | |
1689 launcher_controller_->UnlockV1AppWithID(extension1_->id()); | |
1690 | |
1691 EXPECT_EQ(2, model_->item_count()); | |
1692 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1693 EXPECT_EQ(ash::kInvalidShelfID, | |
1694 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1695 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | |
1696 EXPECT_EQ(ash::kInvalidShelfID, | |
1697 launcher_controller_->GetShelfIDForAppID(extension2_->id())); | |
1698 } | |
1699 | |
1700 // Check that multiple locks of an application will be properly handled. | |
1701 TEST_F(ChromeLauncherControllerImplTest, CheckMultiLockApps) { | |
1702 InitLauncherController(); | |
1703 // Model should only contain the browser shortcut and app list items. | |
1704 EXPECT_EQ(2, model_->item_count()); | 1667 EXPECT_EQ(2, model_->item_count()); |
1705 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1668 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1706 EXPECT_EQ(ash::kInvalidShelfID, | 1669 EXPECT_EQ(ash::kInvalidShelfID, |
1707 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1670 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1708 | 1671 |
1709 for (int i = 0; i < 2; i++) { | 1672 // Reporting that the app is running should create a new shelf item. |
1710 launcher_controller_->LockV1AppWithID(extension1_->id()); | 1673 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_RUNNING); |
1711 | |
1712 EXPECT_EQ(3, model_->item_count()); | |
1713 EXPECT_EQ(ash::TYPE_APP, model_->items()[2].type); | |
1714 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1715 EXPECT_NE(ash::kInvalidShelfID, | |
1716 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1717 } | |
1718 | |
1719 launcher_controller_->UnlockV1AppWithID(extension1_->id()); | |
1720 | |
1721 EXPECT_EQ(3, model_->item_count()); | 1674 EXPECT_EQ(3, model_->item_count()); |
1722 EXPECT_EQ(ash::TYPE_APP, model_->items()[2].type); | 1675 EXPECT_EQ(ash::TYPE_APP, model_->items()[2].type); |
1676 EXPECT_EQ(ash::STATUS_RUNNING, model_->items()[2].status); | |
1723 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1677 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1724 EXPECT_NE(ash::kInvalidShelfID, | 1678 EXPECT_NE(ash::kInvalidShelfID, |
1725 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1679 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1726 | 1680 |
1727 launcher_controller_->UnlockV1AppWithID(extension1_->id()); | 1681 // Reporting an active status should just update the existing item. |
1682 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_ACTIVE); | |
1683 EXPECT_EQ(3, model_->item_count()); | |
1684 EXPECT_EQ(ash::STATUS_ACTIVE, model_->items()[2].status); | |
1728 | 1685 |
1686 // Reporting that the app is closed should remove its shelf item. | |
1687 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_CLOSED); | |
1688 EXPECT_EQ(2, model_->item_count()); | |
1689 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1690 EXPECT_EQ(ash::kInvalidShelfID, | |
1691 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1692 | |
1693 // Reporting that the app is closed agani should have no effect. | |
James Cook
2017/03/31 19:13:22
nit: again
msw
2017/03/31 19:36:06
Done.
| |
1694 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_CLOSED); | |
1695 EXPECT_EQ(2, model_->item_count()); | |
1696 } | |
1697 | |
1698 // Test the V1 app interaction flow: pin it, run it, close it, unpin it. | |
1699 TEST_F(ChromeLauncherControllerImplTest, V1AppPinRunCloseUnpin) { | |
1700 InitLauncherController(); | |
1701 // The model should only contain the browser shortcut and app list items. | |
1702 EXPECT_EQ(2, model_->item_count()); | |
1703 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1704 EXPECT_EQ(ash::kInvalidShelfID, | |
1705 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1706 | |
1707 // Pinning the app should create a new shelf item. | |
1708 launcher_controller_->PinAppWithID(extension1_->id()); | |
1709 EXPECT_EQ(3, model_->item_count()); | |
1710 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | |
1711 EXPECT_EQ(ash::STATUS_CLOSED, model_->items()[2].status); | |
1712 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1713 EXPECT_NE(ash::kInvalidShelfID, | |
1714 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1715 | |
1716 // Reporting that the app is running should just update the existing item. | |
1717 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_RUNNING); | |
1718 EXPECT_EQ(3, model_->item_count()); | |
1719 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | |
1720 EXPECT_EQ(ash::STATUS_RUNNING, model_->items()[2].status); | |
1721 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1722 EXPECT_NE(ash::kInvalidShelfID, | |
1723 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1724 | |
1725 // Reporting that the app is closed should just update the existing item. | |
1726 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_CLOSED); | |
1727 EXPECT_EQ(3, model_->item_count()); | |
1728 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | |
1729 EXPECT_EQ(ash::STATUS_CLOSED, model_->items()[2].status); | |
1730 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1731 EXPECT_NE(ash::kInvalidShelfID, | |
1732 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1733 | |
1734 // Unpinning the app should remove its shelf item. | |
1735 launcher_controller_->UnpinAppWithID(extension1_->id()); | |
1729 EXPECT_EQ(2, model_->item_count()); | 1736 EXPECT_EQ(2, model_->item_count()); |
1730 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1737 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1731 EXPECT_EQ(ash::kInvalidShelfID, | 1738 EXPECT_EQ(ash::kInvalidShelfID, |
1732 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1739 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1733 } | 1740 } |
James Cook
2017/03/31 19:13:22
nice tests, documented and easy to read blocks.
msw
2017/03/31 19:36:06
Acknowledged.
| |
1734 | 1741 |
1735 // Check that already pinned items are not effected by locks. | 1742 // Test the V1 app interaction flow: run it, pin it, close it, unpin it. |
1736 TEST_F(ChromeLauncherControllerImplTest, CheckAlreadyPinnedLockApps) { | 1743 TEST_F(ChromeLauncherControllerImplTest, V1AppRunPinCloseUnpin) { |
1737 InitLauncherController(); | 1744 InitLauncherController(); |
1738 // Model should only contain the browser shortcut and app list items. | 1745 // The model should only contain the browser shortcut and app list items. |
1739 EXPECT_EQ(2, model_->item_count()); | 1746 EXPECT_EQ(2, model_->item_count()); |
1740 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1747 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1741 EXPECT_EQ(ash::kInvalidShelfID, | 1748 EXPECT_EQ(ash::kInvalidShelfID, |
1742 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1749 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1743 | 1750 |
1751 // Reporting that the app is running should create a new shelf item. | |
1752 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_RUNNING); | |
1753 EXPECT_EQ(3, model_->item_count()); | |
1754 EXPECT_EQ(ash::TYPE_APP, model_->items()[2].type); | |
1755 EXPECT_EQ(ash::STATUS_RUNNING, model_->items()[2].status); | |
1756 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1757 EXPECT_NE(ash::kInvalidShelfID, | |
1758 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1759 | |
1760 // Pinning the app should just update the existing item. | |
1744 launcher_controller_->PinAppWithID(extension1_->id()); | 1761 launcher_controller_->PinAppWithID(extension1_->id()); |
1745 | |
1746 EXPECT_EQ(3, model_->item_count()); | 1762 EXPECT_EQ(3, model_->item_count()); |
1747 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | 1763 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); |
1764 EXPECT_EQ(ash::STATUS_RUNNING, model_->items()[2].status); | |
1748 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | 1765 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); |
1749 EXPECT_NE(ash::kInvalidShelfID, | 1766 EXPECT_NE(ash::kInvalidShelfID, |
1750 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1767 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1751 | 1768 |
1752 launcher_controller_->LockV1AppWithID(extension1_->id()); | 1769 // Reporting that the app is closed should just update the existing item. |
1753 | 1770 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_CLOSED); |
1754 EXPECT_EQ(3, model_->item_count()); | 1771 EXPECT_EQ(3, model_->item_count()); |
1755 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | 1772 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); |
1773 EXPECT_EQ(ash::STATUS_CLOSED, model_->items()[2].status); | |
1756 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | 1774 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); |
1757 EXPECT_NE(ash::kInvalidShelfID, | 1775 EXPECT_NE(ash::kInvalidShelfID, |
1758 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1776 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1759 | 1777 |
1760 launcher_controller_->UnlockV1AppWithID(extension1_->id()); | 1778 // Unpinning the app should remove its shelf item. |
1761 | |
1762 EXPECT_EQ(3, model_->item_count()); | |
1763 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | |
1764 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | |
1765 EXPECT_NE(ash::kInvalidShelfID, | |
1766 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
1767 | |
1768 launcher_controller_->UnpinAppWithID(extension1_->id()); | 1779 launcher_controller_->UnpinAppWithID(extension1_->id()); |
1769 | |
1770 EXPECT_EQ(2, model_->item_count()); | 1780 EXPECT_EQ(2, model_->item_count()); |
1771 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1781 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1772 EXPECT_EQ(ash::kInvalidShelfID, | 1782 EXPECT_EQ(ash::kInvalidShelfID, |
1773 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1783 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1774 } | 1784 } |
1775 | 1785 |
1776 // Check that already pinned items which get locked stay after unpinning. | 1786 // Test the V1 app interaction flow: pin it, run it, unpin it, close it. |
1777 TEST_F(ChromeLauncherControllerImplTest, CheckPinnedAppsStayAfterUnlock) { | 1787 TEST_F(ChromeLauncherControllerImplTest, V1AppPinRunUnpinClose) { |
1778 InitLauncherController(); | 1788 InitLauncherController(); |
1779 // Model should only contain the browser shortcut and app list items. | 1789 // The model should only contain the browser shortcut and app list items. |
1780 EXPECT_EQ(2, model_->item_count()); | 1790 EXPECT_EQ(2, model_->item_count()); |
1781 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1791 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1782 EXPECT_EQ(ash::kInvalidShelfID, | 1792 EXPECT_EQ(ash::kInvalidShelfID, |
1783 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1793 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1784 | 1794 |
1795 // Pinning the app should create a new shelf item. | |
1785 launcher_controller_->PinAppWithID(extension1_->id()); | 1796 launcher_controller_->PinAppWithID(extension1_->id()); |
1786 | |
1787 EXPECT_EQ(3, model_->item_count()); | 1797 EXPECT_EQ(3, model_->item_count()); |
1788 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | 1798 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); |
1799 EXPECT_EQ(ash::STATUS_CLOSED, model_->items()[2].status); | |
1789 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | 1800 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); |
1790 EXPECT_NE(ash::kInvalidShelfID, | 1801 EXPECT_NE(ash::kInvalidShelfID, |
1791 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1802 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1792 | 1803 |
1793 launcher_controller_->LockV1AppWithID(extension1_->id()); | 1804 // Reporting that the app is running should just update the existing item. |
1794 | 1805 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_RUNNING); |
1795 EXPECT_EQ(3, model_->item_count()); | 1806 EXPECT_EQ(3, model_->item_count()); |
1796 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | 1807 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); |
1808 EXPECT_EQ(ash::STATUS_RUNNING, model_->items()[2].status); | |
1797 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | 1809 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); |
1798 EXPECT_NE(ash::kInvalidShelfID, | 1810 EXPECT_NE(ash::kInvalidShelfID, |
1799 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1811 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1800 | 1812 |
1813 // Unpinning the app should just update the existing item. | |
1801 launcher_controller_->UnpinAppWithID(extension1_->id()); | 1814 launcher_controller_->UnpinAppWithID(extension1_->id()); |
1802 | |
1803 EXPECT_EQ(3, model_->item_count()); | 1815 EXPECT_EQ(3, model_->item_count()); |
1804 EXPECT_EQ(ash::TYPE_APP, model_->items()[2].type); | 1816 EXPECT_EQ(ash::TYPE_APP, model_->items()[2].type); |
1817 EXPECT_EQ(ash::STATUS_RUNNING, model_->items()[2].status); | |
1805 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1818 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1806 EXPECT_NE(ash::kInvalidShelfID, | 1819 EXPECT_NE(ash::kInvalidShelfID, |
1807 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1820 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1808 | 1821 |
1809 launcher_controller_->UnlockV1AppWithID(extension1_->id()); | 1822 // Reporting that the app is closed should remove its shelf item. |
1810 | 1823 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_CLOSED); |
1811 EXPECT_EQ(2, model_->item_count()); | 1824 EXPECT_EQ(2, model_->item_count()); |
1812 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 1825 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
1813 EXPECT_EQ(ash::kInvalidShelfID, | 1826 EXPECT_EQ(ash::kInvalidShelfID, |
1814 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | 1827 launcher_controller_->GetShelfIDForAppID(extension1_->id())); |
1815 } | 1828 } |
1816 | 1829 |
1817 // Check that running applications wich are not pinned get properly restored | 1830 // Ensure unpinned V1 app ordering is properly restored after user changes. |
1818 // upon user change. | 1831 TEST_F(ChromeLauncherControllerImplTest, CheckRunningV1AppOrder) { |
1819 TEST_F(ChromeLauncherControllerImplTest, CheckRunningAppOrder) { | |
1820 InitLauncherController(); | 1832 InitLauncherController(); |
1821 // Model should only contain the browser shortcut and app list items. | 1833 // The model should only contain the browser shortcut and app list items. |
1822 EXPECT_EQ(2, model_->item_count()); | 1834 EXPECT_EQ(2, model_->item_count()); |
1823 | 1835 |
1824 // Add a few running applications. | 1836 // Add a few running applications. |
1825 launcher_controller_->LockV1AppWithID(extension1_->id()); | 1837 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_RUNNING); |
1826 launcher_controller_->LockV1AppWithID(extension2_->id()); | 1838 launcher_controller_->SetV1AppStatus(extension2_->id(), ash::STATUS_RUNNING); |
1827 launcher_controller_->LockV1AppWithID(extension3_->id()); | 1839 launcher_controller_->SetV1AppStatus(extension3_->id(), ash::STATUS_RUNNING); |
1828 EXPECT_EQ(5, model_->item_count()); | 1840 EXPECT_EQ(5, model_->item_count()); |
1829 // Note that this not only checks the order of applications but also the | 1841 // Note that this not only checks the order of applications but also the |
1830 // running type. | 1842 // running type. |
1831 EXPECT_EQ("AppList, Chrome, app1, app2, app3", GetPinnedAppStatus()); | 1843 EXPECT_EQ("AppList, Chrome, app1, app2, app3", GetPinnedAppStatus()); |
1832 | 1844 |
1833 // Remember the current order of applications for the current user. | 1845 // Remember the current order of applications for the current user. |
1834 const AccountId& current_account_id = | 1846 const AccountId& current_account_id = |
1835 multi_user_util::GetAccountIdFromProfile(profile()); | 1847 multi_user_util::GetAccountIdFromProfile(profile()); |
1836 RememberUnpinnedRunningApplicationOrder(); | 1848 RememberUnpinnedRunningApplicationOrder(); |
1837 | 1849 |
1838 // Switch some items and check that restoring a user which was not yet | 1850 // Switch some items and check that restoring a user which was not yet |
1839 // remembered changes nothing. | 1851 // remembered changes nothing. |
1840 model_->Move(2, 3); | 1852 model_->Move(2, 3); |
1841 EXPECT_EQ("AppList, Chrome, app2, app1, app3", GetPinnedAppStatus()); | 1853 EXPECT_EQ("AppList, Chrome, app2, app1, app3", GetPinnedAppStatus()); |
1842 const AccountId second_fake_account_id( | 1854 const AccountId second_fake_account_id( |
1843 AccountId::FromUserEmail("second-fake-user@fake.com")); | 1855 AccountId::FromUserEmail("second-fake-user@fake.com")); |
1844 RestoreUnpinnedRunningApplicationOrder(second_fake_account_id); | 1856 RestoreUnpinnedRunningApplicationOrder(second_fake_account_id); |
1845 EXPECT_EQ("AppList, Chrome, app2, app1, app3", GetPinnedAppStatus()); | 1857 EXPECT_EQ("AppList, Chrome, app2, app1, app3", GetPinnedAppStatus()); |
1846 | 1858 |
1847 // Restoring the stored user should however do the right thing. | 1859 // Restoring the stored user should however do the right thing. |
1848 RestoreUnpinnedRunningApplicationOrder(current_account_id); | 1860 RestoreUnpinnedRunningApplicationOrder(current_account_id); |
1849 EXPECT_EQ("AppList, Chrome, app1, app2, app3", GetPinnedAppStatus()); | 1861 EXPECT_EQ("AppList, Chrome, app1, app2, app3", GetPinnedAppStatus()); |
1850 | 1862 |
1851 // Switch again some items and even delete one - making sure that the missing | 1863 // Switch again some items and even delete one - making sure that the missing |
1852 // item gets properly handled. | 1864 // item gets properly handled. |
1853 model_->Move(3, 4); | 1865 model_->Move(3, 4); |
1854 launcher_controller_->UnlockV1AppWithID(extension1_->id()); | 1866 launcher_controller_->SetV1AppStatus(extension1_->id(), ash::STATUS_CLOSED); |
1855 EXPECT_EQ("AppList, Chrome, app3, app2", GetPinnedAppStatus()); | 1867 EXPECT_EQ("AppList, Chrome, app3, app2", GetPinnedAppStatus()); |
1856 RestoreUnpinnedRunningApplicationOrder(current_account_id); | 1868 RestoreUnpinnedRunningApplicationOrder(current_account_id); |
1857 EXPECT_EQ("AppList, Chrome, app2, app3", GetPinnedAppStatus()); | 1869 EXPECT_EQ("AppList, Chrome, app2, app3", GetPinnedAppStatus()); |
1858 | 1870 |
1859 // Check that removing more items does not crash and changes nothing. | 1871 // Check that removing more items does not crash and changes nothing. |
1860 launcher_controller_->UnlockV1AppWithID(extension2_->id()); | 1872 launcher_controller_->SetV1AppStatus(extension2_->id(), ash::STATUS_CLOSED); |
1861 RestoreUnpinnedRunningApplicationOrder(current_account_id); | 1873 RestoreUnpinnedRunningApplicationOrder(current_account_id); |
1862 EXPECT_EQ("AppList, Chrome, app3", GetPinnedAppStatus()); | 1874 EXPECT_EQ("AppList, Chrome, app3", GetPinnedAppStatus()); |
1863 launcher_controller_->UnlockV1AppWithID(extension3_->id()); | 1875 launcher_controller_->SetV1AppStatus(extension3_->id(), ash::STATUS_CLOSED); |
1864 RestoreUnpinnedRunningApplicationOrder(current_account_id); | 1876 RestoreUnpinnedRunningApplicationOrder(current_account_id); |
1865 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); | 1877 EXPECT_EQ("AppList, Chrome", GetPinnedAppStatus()); |
1866 } | 1878 } |
1867 | 1879 |
1868 TEST_P(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunch) { | 1880 TEST_P(ChromeLauncherControllerImplWithArcTest, ArcDeferredLaunch) { |
1869 RecreateChromeLauncher(); | 1881 RecreateChromeLauncher(); |
1870 | 1882 |
1871 const arc::mojom::AppInfo& app1 = arc_test_.fake_apps()[0]; | 1883 const arc::mojom::AppInfo& app1 = arc_test_.fake_apps()[0]; |
1872 const arc::mojom::AppInfo& app2 = arc_test_.fake_apps()[1]; | 1884 const arc::mojom::AppInfo& app2 = arc_test_.fake_apps()[1]; |
1873 const arc::mojom::AppInfo& app3 = arc_test_.fake_apps()[2]; | 1885 const arc::mojom::AppInfo& app3 = arc_test_.fake_apps()[2]; |
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2467 | 2479 |
2468 // Transfer the window to another user's desktop and check that activating it | 2480 // Transfer the window to another user's desktop and check that activating it |
2469 // does pull it back to that user. | 2481 // does pull it back to that user. |
2470 manager->ShowWindowForUser( | 2482 manager->ShowWindowForUser( |
2471 window, multi_user_util::GetAccountIdFromProfile(profile2)); | 2483 window, multi_user_util::GetAccountIdFromProfile(profile2)); |
2472 EXPECT_FALSE(manager->IsWindowOnDesktopOfUser(window, current_user)); | 2484 EXPECT_FALSE(manager->IsWindowOnDesktopOfUser(window, current_user)); |
2473 launcher_controller_->ActivateWindowOrMinimizeIfActive(browser_window, false); | 2485 launcher_controller_->ActivateWindowOrMinimizeIfActive(browser_window, false); |
2474 EXPECT_TRUE(manager->IsWindowOnDesktopOfUser(window, current_user)); | 2486 EXPECT_TRUE(manager->IsWindowOnDesktopOfUser(window, current_user)); |
2475 } | 2487 } |
2476 | 2488 |
2477 // Check that lock -> pin -> unlock -> unpin does properly transition. | 2489 // Check that a running windowed V1 application will be properly pinned and |
2478 TEST_F(ChromeLauncherControllerImplTest, CheckLockPinUnlockUnpin) { | 2490 // unpinned when the order gets changed through a profile / policy change. |
2479 InitLauncherController(); | |
2480 // Model should only contain the browser shortcut and app list items. | |
2481 EXPECT_EQ(2, model_->item_count()); | |
2482 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
2483 EXPECT_EQ(ash::kInvalidShelfID, | |
2484 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
2485 | |
2486 launcher_controller_->LockV1AppWithID(extension1_->id()); | |
2487 | |
2488 EXPECT_EQ(3, model_->item_count()); | |
2489 EXPECT_EQ(ash::TYPE_APP, model_->items()[2].type); | |
2490 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
2491 EXPECT_NE(ash::kInvalidShelfID, | |
2492 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
2493 | |
2494 launcher_controller_->PinAppWithID(extension1_->id()); | |
2495 | |
2496 EXPECT_EQ(3, model_->item_count()); | |
2497 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | |
2498 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | |
2499 EXPECT_NE(ash::kInvalidShelfID, | |
2500 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
2501 | |
2502 launcher_controller_->UnlockV1AppWithID(extension1_->id()); | |
2503 | |
2504 EXPECT_EQ(3, model_->item_count()); | |
2505 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[2].type); | |
2506 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | |
2507 EXPECT_NE(ash::kInvalidShelfID, | |
2508 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
2509 | |
2510 launcher_controller_->UnpinAppWithID(extension1_->id()); | |
2511 | |
2512 EXPECT_EQ(2, model_->item_count()); | |
2513 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | |
2514 EXPECT_EQ(ash::kInvalidShelfID, | |
2515 launcher_controller_->GetShelfIDForAppID(extension1_->id())); | |
2516 } | |
2517 | |
2518 // Check that a locked (windowed V1 application) will be properly converted | |
2519 // between locked and pinned when the order gets changed through a profile / | |
2520 // policy change. | |
2521 TEST_F(ChromeLauncherControllerImplTest, | 2491 TEST_F(ChromeLauncherControllerImplTest, |
2522 RestoreDefaultAndLockedAppsResyncOrder) { | 2492 RestoreDefaultAndRunningV1AppsResyncOrder) { |
2523 InitLauncherController(); | 2493 InitLauncherController(); |
2524 | 2494 |
2525 syncer::SyncChangeList sync_list; | 2495 syncer::SyncChangeList sync_list; |
2526 InsertAddPinChange(&sync_list, 0, extension1_->id()); | 2496 InsertAddPinChange(&sync_list, 0, extension1_->id()); |
2527 InsertAddPinChange(&sync_list, 1, extension3_->id()); | 2497 InsertAddPinChange(&sync_list, 1, extension3_->id()); |
2528 SendPinChanges(sync_list, true); | 2498 SendPinChanges(sync_list, true); |
2529 | 2499 |
2530 // The shelf layout has always one static item at the beginning (App List). | 2500 // The shelf layout has always one static item at the beginning (App List). |
2531 extension_service_->AddExtension(extension1_.get()); | 2501 extension_service_->AddExtension(extension1_.get()); |
2532 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); | 2502 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); |
2533 extension_service_->AddExtension(extension2_.get()); | 2503 extension_service_->AddExtension(extension2_.get()); |
2534 // No new app icon will be generated. | 2504 // No new app icon will be generated. |
2535 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); | 2505 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); |
2536 | 2506 |
2537 // Add the app as locked app which will add it (un-pinned). | 2507 // Set the app status as running, which will add an unpinned item. |
2538 launcher_controller_->LockV1AppWithID(extension2_->id()); | 2508 launcher_controller_->SetV1AppStatus(extension2_->id(), ash::STATUS_RUNNING); |
2539 EXPECT_EQ("AppList, Chrome, App1, app2", GetPinnedAppStatus()); | 2509 EXPECT_EQ("AppList, Chrome, App1, app2", GetPinnedAppStatus()); |
2540 extension_service_->AddExtension(extension3_.get()); | 2510 extension_service_->AddExtension(extension3_.get()); |
2541 EXPECT_EQ("AppList, Chrome, App1, App3, app2", GetPinnedAppStatus()); | 2511 EXPECT_EQ("AppList, Chrome, App1, App3, app2", GetPinnedAppStatus()); |
2542 | 2512 |
2543 // Now request to pin all items which should convert the locked item into a | 2513 // Now request to pin all items, which will pin the running unpinned items. |
2544 // pinned item. | |
2545 syncer::SyncChangeList sync_list1; | 2514 syncer::SyncChangeList sync_list1; |
2546 InsertAddPinChange(&sync_list1, 0, extension3_->id()); | 2515 InsertAddPinChange(&sync_list1, 0, extension3_->id()); |
2547 InsertAddPinChange(&sync_list1, 1, extension2_->id()); | 2516 InsertAddPinChange(&sync_list1, 1, extension2_->id()); |
2548 InsertAddPinChange(&sync_list1, 2, extension1_->id()); | 2517 InsertAddPinChange(&sync_list1, 2, extension1_->id()); |
2549 SendPinChanges(sync_list1, true); | 2518 SendPinChanges(sync_list1, true); |
2550 EXPECT_EQ("AppList, Chrome, App3, App2, App1", GetPinnedAppStatus()); | 2519 EXPECT_EQ("AppList, Chrome, App3, App2, App1", GetPinnedAppStatus()); |
2551 | 2520 |
2552 // Going back to a status where there is no requirement for app 2 to be pinned | 2521 // Removing the requirement for app 2 to be pinned should convert it back to |
2553 // should convert it back to locked but not pinned and state. The position | 2522 // running but not pinned. It should move towards the end of the shelf, after |
2554 // is determined by the |ShelfModel|'s weight system and since running | 2523 // the pinned items, as determined by the |ShelfModel|'s weight system. |
2555 // applications are not allowed to be mixed with shortcuts, it should show up | |
2556 // at the end of the list. | |
2557 syncer::SyncChangeList sync_list2; | 2524 syncer::SyncChangeList sync_list2; |
2558 InsertAddPinChange(&sync_list2, 0, extension3_->id()); | 2525 InsertAddPinChange(&sync_list2, 0, extension3_->id()); |
2559 InsertAddPinChange(&sync_list2, 1, extension1_->id()); | 2526 InsertAddPinChange(&sync_list2, 1, extension1_->id()); |
2560 SendPinChanges(sync_list2, true); | 2527 SendPinChanges(sync_list2, true); |
2561 EXPECT_EQ("AppList, Chrome, App3, App1, app2", GetPinnedAppStatus()); | 2528 EXPECT_EQ("AppList, Chrome, App3, App1, app2", GetPinnedAppStatus()); |
2562 | 2529 |
2563 // Removing an item should simply close it and everything should shift. | 2530 // Removing an item should simply close it and everything should shift. |
2564 SendPinChanges(syncer::SyncChangeList(), true); | 2531 SendPinChanges(syncer::SyncChangeList(), true); |
2565 EXPECT_EQ("AppList, Chrome, App3, app2", GetPinnedAppStatus()); | 2532 EXPECT_EQ("AppList, Chrome, App3, app2", GetPinnedAppStatus()); |
2566 } | 2533 } |
2567 | 2534 |
2568 // Check that a running and not pinned V2 application will be properly converted | 2535 // Check that a running unpinned V2 application will be properly pinned and |
2569 // between locked and pinned when the order gets changed through a profile / | 2536 // unpinned when the order gets changed through a profile / policy change. |
2570 // policy change. | |
2571 TEST_F(ChromeLauncherControllerImplTest, | 2537 TEST_F(ChromeLauncherControllerImplTest, |
2572 RestoreDefaultAndRunningV2AppsResyncOrder) { | 2538 RestoreDefaultAndRunningV2AppsResyncOrder) { |
2573 InitLauncherController(); | 2539 InitLauncherController(); |
2574 syncer::SyncChangeList sync_list0; | 2540 syncer::SyncChangeList sync_list0; |
2575 InsertAddPinChange(&sync_list0, 0, extension1_->id()); | 2541 InsertAddPinChange(&sync_list0, 0, extension1_->id()); |
2576 InsertAddPinChange(&sync_list0, 1, extension3_->id()); | 2542 InsertAddPinChange(&sync_list0, 1, extension3_->id()); |
2577 SendPinChanges(sync_list0, true); | 2543 SendPinChanges(sync_list0, true); |
2578 // The shelf layout has always one static item at the beginning (app List). | 2544 // The shelf layout has always one static item at the beginning (app List). |
2579 extension_service_->AddExtension(extension1_.get()); | 2545 extension_service_->AddExtension(extension1_.get()); |
2580 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); | 2546 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); |
2581 extension_service_->AddExtension(extension_platform_app_.get()); | 2547 extension_service_->AddExtension(extension_platform_app_.get()); |
2582 // No new app icon will be generated. | 2548 // No new app icon will be generated. |
2583 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); | 2549 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); |
2584 // Add an unpinned but running V2 app. | 2550 // Add an unpinned but running V2 app. |
2585 CreateRunningV2App(extension_platform_app_->id()); | 2551 CreateRunningV2App(extension_platform_app_->id()); |
2586 EXPECT_EQ("AppList, Chrome, App1, *platform_app", GetPinnedAppStatus()); | 2552 EXPECT_EQ("AppList, Chrome, App1, *platform_app", GetPinnedAppStatus()); |
2587 extension_service_->AddExtension(extension3_.get()); | 2553 extension_service_->AddExtension(extension3_.get()); |
2588 EXPECT_EQ("AppList, Chrome, App1, App3, *platform_app", GetPinnedAppStatus()); | 2554 EXPECT_EQ("AppList, Chrome, App1, App3, *platform_app", GetPinnedAppStatus()); |
2589 | 2555 |
2590 // Now request to pin all items which should convert the locked item into a | 2556 // Now request to pin all items, which should pin the running unpinned item. |
2591 // pinned item. | |
2592 syncer::SyncChangeList sync_list1; | 2557 syncer::SyncChangeList sync_list1; |
2593 InsertAddPinChange(&sync_list1, 0, extension3_->id()); | 2558 InsertAddPinChange(&sync_list1, 0, extension3_->id()); |
2594 InsertAddPinChange(&sync_list1, 1, extension_platform_app_->id()); | 2559 InsertAddPinChange(&sync_list1, 1, extension_platform_app_->id()); |
2595 InsertAddPinChange(&sync_list1, 2, extension1_->id()); | 2560 InsertAddPinChange(&sync_list1, 2, extension1_->id()); |
2596 SendPinChanges(sync_list1, true); | 2561 SendPinChanges(sync_list1, true); |
2597 EXPECT_EQ("AppList, Chrome, App3, *Platform_App, App1", GetPinnedAppStatus()); | 2562 EXPECT_EQ("AppList, Chrome, App3, *Platform_App, App1", GetPinnedAppStatus()); |
2598 | 2563 |
2599 // Going back to a status where there is no requirement for the V2 app to be | 2564 // Removing the requirement for app 2 to be pinned should convert it back to |
2600 // pinned should convert it back to running V2 app. Since the position is | 2565 // running but not pinned. It should move towards the end of the shelf, after |
2601 // determined by the |ShelfModel|'s weight system, it will be after last | 2566 // the pinned items, as determined by the |ShelfModel|'s weight system. |
2602 // pinned item. | |
2603 syncer::SyncChangeList sync_list2; | 2567 syncer::SyncChangeList sync_list2; |
2604 InsertAddPinChange(&sync_list2, 0, extension3_->id()); | 2568 InsertAddPinChange(&sync_list2, 0, extension3_->id()); |
2605 InsertAddPinChange(&sync_list2, 1, extension1_->id()); | 2569 InsertAddPinChange(&sync_list2, 1, extension1_->id()); |
2606 SendPinChanges(sync_list2, true); | 2570 SendPinChanges(sync_list2, true); |
2607 EXPECT_EQ("AppList, Chrome, App3, App1, *platform_app", GetPinnedAppStatus()); | 2571 EXPECT_EQ("AppList, Chrome, App3, App1, *platform_app", GetPinnedAppStatus()); |
2608 | 2572 |
2609 // Removing an item should simply close it and everything should shift. | 2573 // Removing an item should simply close it and everything should shift. |
2610 syncer::SyncChangeList sync_list3; | 2574 syncer::SyncChangeList sync_list3; |
2611 InsertAddPinChange(&sync_list3, 0, extension3_->id()); | 2575 InsertAddPinChange(&sync_list3, 0, extension3_->id()); |
2612 SendPinChanges(sync_list3, true); | 2576 SendPinChanges(sync_list3, true); |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3009 // Check that V1 apps are correctly reflected in the launcher menu using the | 2973 // Check that V1 apps are correctly reflected in the launcher menu using the |
3010 // refocus logic. | 2974 // refocus logic. |
3011 // Note that the extension matching logic is tested by the extension system | 2975 // Note that the extension matching logic is tested by the extension system |
3012 // and does not need a separate test here. | 2976 // and does not need a separate test here. |
3013 TEST_F(ChromeLauncherControllerImplTest, V1AppMenuGeneration) { | 2977 TEST_F(ChromeLauncherControllerImplTest, V1AppMenuGeneration) { |
3014 EXPECT_EQ(1U, chrome::GetTotalBrowserCount()); | 2978 EXPECT_EQ(1U, chrome::GetTotalBrowserCount()); |
3015 EXPECT_EQ(0, browser()->tab_strip_model()->count()); | 2979 EXPECT_EQ(0, browser()->tab_strip_model()->count()); |
3016 | 2980 |
3017 InitLauncherControllerWithBrowser(); | 2981 InitLauncherControllerWithBrowser(); |
3018 | 2982 |
3019 // Model should only contain the browser shortcut and app list items. | 2983 // The model should only contain the browser shortcut and app list items. |
3020 EXPECT_EQ(2, model_->item_count()); | 2984 EXPECT_EQ(2, model_->item_count()); |
3021 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 2985 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
3022 | 2986 |
3023 // Installing |extension3_| adds it to the launcher. | 2987 // Installing |extension3_| adds it to the launcher. |
3024 ash::ShelfID gmail_id = model_->next_id(); | 2988 ash::ShelfID gmail_id = model_->next_id(); |
3025 extension_service_->AddExtension(extension3_.get()); | 2989 extension_service_->AddExtension(extension3_.get()); |
3026 EXPECT_EQ(3, model_->item_count()); | 2990 EXPECT_EQ(3, model_->item_count()); |
3027 int gmail_index = model_->ItemIndexByID(gmail_id); | 2991 int gmail_index = model_->ItemIndexByID(gmail_id); |
3028 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[gmail_index].type); | 2992 EXPECT_EQ(ash::TYPE_PINNED_APP, model_->items()[gmail_index].type); |
3029 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension3_->id())); | 2993 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension3_->id())); |
(...skipping 1401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4431 EXPECT_EQ(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, | 4395 EXPECT_EQ(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, |
4432 shelf_controller->auto_hide()); | 4396 shelf_controller->auto_hide()); |
4433 EXPECT_EQ(2u, shelf_controller->auto_hide_change_count()); | 4397 EXPECT_EQ(2u, shelf_controller->auto_hide_change_count()); |
4434 | 4398 |
4435 PrefService* prefs = profile()->GetTestingPrefService(); | 4399 PrefService* prefs = profile()->GetTestingPrefService(); |
4436 EXPECT_EQ("Left", prefs->GetString(prefs::kShelfAlignmentLocal)); | 4400 EXPECT_EQ("Left", prefs->GetString(prefs::kShelfAlignmentLocal)); |
4437 EXPECT_EQ("Left", prefs->GetString(prefs::kShelfAlignment)); | 4401 EXPECT_EQ("Left", prefs->GetString(prefs::kShelfAlignment)); |
4438 EXPECT_EQ("Always", prefs->GetString(prefs::kShelfAutoHideBehaviorLocal)); | 4402 EXPECT_EQ("Always", prefs->GetString(prefs::kShelfAutoHideBehaviorLocal)); |
4439 EXPECT_EQ("Always", prefs->GetString(prefs::kShelfAutoHideBehavior)); | 4403 EXPECT_EQ("Always", prefs->GetString(prefs::kShelfAutoHideBehavior)); |
4440 } | 4404 } |
OLD | NEW |