| 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 "ash/common/shelf/app_list_button.h" | 9 #include "ash/common/shelf/app_list_button.h" | 
| 10 #include "ash/common/shelf/shelf_button.h" | 10 #include "ash/common/shelf/shelf_button.h" | 
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 332     int item_count = model_->item_count(); | 332     int item_count = model_->item_count(); | 
| 333     ash::ShelfID shortcut_id = controller_->CreateAppShortcutLauncherItem( | 333     ash::ShelfID shortcut_id = controller_->CreateAppShortcutLauncherItem( | 
| 334         ash::AppLaunchId(app_id), item_count); | 334         ash::AppLaunchId(app_id), item_count); | 
| 335     controller_->SyncPinPosition(shortcut_id); | 335     controller_->SyncPinPosition(shortcut_id); | 
| 336     EXPECT_EQ(++item_count, model_->item_count()); | 336     EXPECT_EQ(++item_count, model_->item_count()); | 
| 337     const ash::ShelfItem& item = *model_->ItemByID(shortcut_id); | 337     const ash::ShelfItem& item = *model_->ItemByID(shortcut_id); | 
| 338     EXPECT_EQ(ash::TYPE_PINNED_APP, item.type); | 338     EXPECT_EQ(ash::TYPE_PINNED_APP, item.type); | 
| 339     return item.id; | 339     return item.id; | 
| 340   } | 340   } | 
| 341 | 341 | 
| 342   void RemoveShortcut(ash::ShelfID id) { |  | 
| 343     controller_->Unpin(id); |  | 
| 344   } |  | 
| 345 |  | 
| 346   ash::ShelfID PinFakeApp(const std::string& app_id) { | 342   ash::ShelfID PinFakeApp(const std::string& app_id) { | 
| 347     return controller_->CreateAppShortcutLauncherItem(ash::AppLaunchId(app_id), | 343     return controller_->CreateAppShortcutLauncherItem(ash::AppLaunchId(app_id), | 
| 348                                                       model_->item_count()); | 344                                                       model_->item_count()); | 
| 349   } | 345   } | 
| 350 | 346 | 
| 351   // Get the index of an item which has the given type. | 347   // Get the index of an item which has the given type. | 
| 352   int GetIndexOfShelfItemType(ash::ShelfItemType type) { | 348   int GetIndexOfShelfItemType(ash::ShelfItemType type) { | 
| 353     return model_->GetItemIndexForType(type); | 349     return model_->GetItemIndexForType(type); | 
| 354   } | 350   } | 
| 355 | 351 | 
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 488   EXPECT_EQ(ash::STATUS_ACTIVE, item1.status); | 484   EXPECT_EQ(ash::STATUS_ACTIVE, item1.status); | 
| 489 | 485 | 
| 490   // Create a shortcut. The app item should be after it. | 486   // Create a shortcut. The app item should be after it. | 
| 491   ash::ShelfID foo_id = CreateAppShortcutLauncherItem(ash::AppLaunchId("foo")); | 487   ash::ShelfID foo_id = CreateAppShortcutLauncherItem(ash::AppLaunchId("foo")); | 
| 492   ++item_count; | 488   ++item_count; | 
| 493   ASSERT_EQ(item_count, shelf_model()->item_count()); | 489   ASSERT_EQ(item_count, shelf_model()->item_count()); | 
| 494   EXPECT_LT(shelf_model()->ItemIndexByID(foo_id), | 490   EXPECT_LT(shelf_model()->ItemIndexByID(foo_id), | 
| 495             shelf_model()->ItemIndexByID(id)); | 491             shelf_model()->ItemIndexByID(id)); | 
| 496 | 492 | 
| 497   // Pin the app. The item should remain. | 493   // Pin the app. The item should remain. | 
| 498   controller_->Pin(id); | 494   controller_->PinAppWithID(extension->id()); | 
| 499   ASSERT_EQ(item_count, shelf_model()->item_count()); | 495   ASSERT_EQ(item_count, shelf_model()->item_count()); | 
| 500   const ash::ShelfItem& item2 = *shelf_model()->ItemByID(id); | 496   const ash::ShelfItem& item2 = *shelf_model()->ItemByID(id); | 
| 501   EXPECT_EQ(ash::TYPE_PINNED_APP, item2.type); | 497   EXPECT_EQ(ash::TYPE_PINNED_APP, item2.type); | 
| 502   EXPECT_EQ(ash::STATUS_ACTIVE, item2.status); | 498   EXPECT_EQ(ash::STATUS_ACTIVE, item2.status); | 
| 503 | 499 | 
| 504   // New shortcuts should come after the item. | 500   // New shortcuts should come after the item. | 
| 505   ash::ShelfID bar_id = CreateAppShortcutLauncherItem(ash::AppLaunchId("bar")); | 501   ash::ShelfID bar_id = CreateAppShortcutLauncherItem(ash::AppLaunchId("bar")); | 
| 506   ++item_count; | 502   ++item_count; | 
| 507   ASSERT_EQ(item_count, shelf_model()->item_count()); | 503   ASSERT_EQ(item_count, shelf_model()->item_count()); | 
| 508   EXPECT_LT(shelf_model()->ItemIndexByID(id), | 504   EXPECT_LT(shelf_model()->ItemIndexByID(id), | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 539 | 535 | 
| 540   // Open a window. Confirm the item is now running. | 536   // Open a window. Confirm the item is now running. | 
| 541   AppWindow* window = CreateAppWindow(browser()->profile(), extension); | 537   AppWindow* window = CreateAppWindow(browser()->profile(), extension); | 
| 542   ash::wm::ActivateWindow(window->GetNativeWindow()); | 538   ash::wm::ActivateWindow(window->GetNativeWindow()); | 
| 543   ASSERT_EQ(item_count, shelf_model()->item_count()); | 539   ASSERT_EQ(item_count, shelf_model()->item_count()); | 
| 544   item = *shelf_model()->ItemByID(shortcut_id); | 540   item = *shelf_model()->ItemByID(shortcut_id); | 
| 545   EXPECT_EQ(ash::TYPE_PINNED_APP, item.type); | 541   EXPECT_EQ(ash::TYPE_PINNED_APP, item.type); | 
| 546   EXPECT_EQ(ash::STATUS_ACTIVE, item.status); | 542   EXPECT_EQ(ash::STATUS_ACTIVE, item.status); | 
| 547 | 543 | 
| 548   // Unpin the app. The item should remain. | 544   // Unpin the app. The item should remain. | 
| 549   controller_->Unpin(shortcut_id); | 545   controller_->UnpinAppWithID(app_id); | 
| 550   ASSERT_EQ(item_count, shelf_model()->item_count()); | 546   ASSERT_EQ(item_count, shelf_model()->item_count()); | 
| 551   item = *shelf_model()->ItemByID(shortcut_id); | 547   item = *shelf_model()->ItemByID(shortcut_id); | 
| 552   EXPECT_EQ(ash::TYPE_APP, item.type); | 548   EXPECT_EQ(ash::TYPE_APP, item.type); | 
| 553   EXPECT_EQ(ash::STATUS_ACTIVE, item.status); | 549   EXPECT_EQ(ash::STATUS_ACTIVE, item.status); | 
| 554   // The item should have moved after the other shortcuts. | 550   // The item should have moved after the other shortcuts. | 
| 555   EXPECT_GT(shelf_model()->ItemIndexByID(shortcut_id), | 551   EXPECT_GT(shelf_model()->ItemIndexByID(shortcut_id), | 
| 556             shelf_model()->ItemIndexByID(foo_id)); | 552             shelf_model()->ItemIndexByID(foo_id)); | 
| 557 | 553 | 
| 558   // Then close it, make sure the item's gone. | 554   // Then close it, make sure the item's gone. | 
| 559   CloseAppWindow(window); | 555   CloseAppWindow(window); | 
| (...skipping 1475 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2035   app_index = GetIndexOfShelfItemType(ash::TYPE_PINNED_APP); | 2031   app_index = GetIndexOfShelfItemType(ash::TYPE_PINNED_APP); | 
| 2036 | 2032 | 
| 2037   // Test #4: Ripping out the application should remove the item. | 2033   // Test #4: Ripping out the application should remove the item. | 
| 2038   RipOffItemIndex(app_index, &generator, &test, RIP_OFF_ITEM); | 2034   RipOffItemIndex(app_index, &generator, &test, RIP_OFF_ITEM); | 
| 2039   // => It should not have been removed and the location should be unchanged. | 2035   // => It should not have been removed and the location should be unchanged. | 
| 2040   EXPECT_EQ(2, model_->item_count()); | 2036   EXPECT_EQ(2, model_->item_count()); | 
| 2041   EXPECT_EQ(-1, GetIndexOfShelfItemType(ash::TYPE_PINNED_APP)); | 2037   EXPECT_EQ(-1, GetIndexOfShelfItemType(ash::TYPE_PINNED_APP)); | 
| 2042 | 2038 | 
| 2043   // Test #5: Uninstalling an application while it is being ripped off should | 2039   // Test #5: Uninstalling an application while it is being ripped off should | 
| 2044   // not crash. | 2040   // not crash. | 
| 2045   ash::ShelfID app_id = CreateShortcut("app2"); | 2041   CreateShortcut("app2"); | 
| 2046   test.RunMessageLoopUntilAnimationsDone(); | 2042   test.RunMessageLoopUntilAnimationsDone(); | 
| 2047   int app2_index = GetIndexOfShelfItemType(ash::TYPE_PINNED_APP); | 2043   int app2_index = GetIndexOfShelfItemType(ash::TYPE_PINNED_APP); | 
| 2048   EXPECT_EQ(3, model_->item_count());  // And it remains that way. | 2044   EXPECT_EQ(3, model_->item_count());  // And it remains that way. | 
| 2049   RipOffItemIndex(app2_index, | 2045   RipOffItemIndex(app2_index, | 
| 2050                   &generator, | 2046                   &generator, | 
| 2051                   &test, | 2047                   &test, | 
| 2052                   RIP_OFF_ITEM_AND_DONT_RELEASE_MOUSE); | 2048                   RIP_OFF_ITEM_AND_DONT_RELEASE_MOUSE); | 
| 2053   RemoveShortcut(app_id); | 2049   controller_->UnpinAppWithID("app2"); | 
| 2054   test.RunMessageLoopUntilAnimationsDone(); | 2050   test.RunMessageLoopUntilAnimationsDone(); | 
| 2055   EXPECT_EQ(2, model_->item_count());  // The item should now be gone. | 2051   EXPECT_EQ(2, model_->item_count());  // The item should now be gone. | 
| 2056   generator.ReleaseLeftButton(); | 2052   generator.ReleaseLeftButton(); | 
| 2057   base::RunLoop().RunUntilIdle(); | 2053   base::RunLoop().RunUntilIdle(); | 
| 2058   EXPECT_EQ(2, model_->item_count());  // And it remains that way. | 2054   EXPECT_EQ(2, model_->item_count());  // And it remains that way. | 
| 2059   EXPECT_EQ(-1, GetIndexOfShelfItemType(ash::TYPE_PINNED_APP)); | 2055   EXPECT_EQ(-1, GetIndexOfShelfItemType(ash::TYPE_PINNED_APP)); | 
| 2060 | 2056 | 
| 2061   // Test #6: Ripping out the application when the overflow button exists. | 2057   // Test #6: Ripping out the application when the overflow button exists. | 
| 2062   // After ripping out, overflow button should be removed. | 2058   // After ripping out, overflow button should be removed. | 
| 2063   int items_added = 0; | 2059   int items_added = 0; | 
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2217 | 2213 | 
| 2218     ++items_added; | 2214     ++items_added; | 
| 2219     ASSERT_LT(items_added, 10000); | 2215     ASSERT_LT(items_added, 10000); | 
| 2220   } | 2216   } | 
| 2221 | 2217 | 
| 2222   // Now show overflow bubble. | 2218   // Now show overflow bubble. | 
| 2223   test.ShowOverflowBubble(); | 2219   test.ShowOverflowBubble(); | 
| 2224   EXPECT_TRUE(shelf_->shelf_widget()->IsShowingOverflowBubble()); | 2220   EXPECT_TRUE(shelf_->shelf_widget()->IsShowingOverflowBubble()); | 
| 2225 | 2221 | 
| 2226   // Unpin first pinned app and there should be no crash. | 2222   // Unpin first pinned app and there should be no crash. | 
| 2227   controller_->UnpinAppWithID(std::string("fake_app_0")); | 2223   controller_->UnpinAppWithID("fake_app_0"); | 
| 2228 | 2224 | 
| 2229   test.RunMessageLoopUntilAnimationsDone(); | 2225   test.RunMessageLoopUntilAnimationsDone(); | 
| 2230   EXPECT_FALSE(shelf_->shelf_widget()->IsShowingOverflowBubble()); | 2226   EXPECT_FALSE(shelf_->shelf_widget()->IsShowingOverflowBubble()); | 
| 2231 } | 2227 } | 
| 2232 | 2228 | 
| 2233 // Check that a windowed V1 application can navigate away from its domain, but | 2229 // Check that a windowed V1 application can navigate away from its domain, but | 
| 2234 // still gets detected properly. | 2230 // still gets detected properly. | 
| 2235 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, V1AppNavigation) { | 2231 IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, V1AppNavigation) { | 
| 2236   // We assume that the web store is always there (which it apparently is). | 2232   // We assume that the web store is always there (which it apparently is). | 
| 2237   controller_->PinAppWithID(extensions::kWebStoreAppId); | 2233   controller_->PinAppWithID(extensions::kWebStoreAppId); | 
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2410 | 2406 | 
| 2411   // Close all windows via the menu item. | 2407   // Close all windows via the menu item. | 
| 2412   CloseBrowserWindow(browser(), menu1.get(), LauncherContextMenu::MENU_CLOSE); | 2408   CloseBrowserWindow(browser(), menu1.get(), LauncherContextMenu::MENU_CLOSE); | 
| 2413   EXPECT_EQ(0u, BrowserList::GetInstance()->size()); | 2409   EXPECT_EQ(0u, BrowserList::GetInstance()->size()); | 
| 2414 | 2410 | 
| 2415   // Check if "Close" is removed from the context menu. | 2411   // Check if "Close" is removed from the context menu. | 
| 2416   std::unique_ptr<LauncherContextMenu> menu2 = CreateBrowserItemContextMenu(); | 2412   std::unique_ptr<LauncherContextMenu> menu2 = CreateBrowserItemContextMenu(); | 
| 2417   ASSERT_FALSE( | 2413   ASSERT_FALSE( | 
| 2418       IsItemPresentInMenu(menu2.get(), LauncherContextMenu::MENU_CLOSE)); | 2414       IsItemPresentInMenu(menu2.get(), LauncherContextMenu::MENU_CLOSE)); | 
| 2419 } | 2415 } | 
| OLD | NEW | 
|---|