Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5770)

Unified Diff: chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl_unittest.cc

Issue 2462753002: Use Ash's ShelfWindowWatcher for app panel windows. (Closed)
Patch Set: Address comments. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 67a3596901fb4f9b7dcec4028ef14a9f51b4318e..2a2dd5ea88700f38a8547aa9dabb2003a4288b6d 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
@@ -15,6 +15,7 @@
#include <vector>
#include "ash/common/ash_switches.h"
+#include "ash/common/shelf/shelf_controller.h"
#include "ash/common/shelf/shelf_model.h"
#include "ash/common/shelf/shelf_model_observer.h"
#include "ash/common/test/test_session_state_delegate.h"
@@ -125,12 +126,7 @@ const char kDummyAppId[] = "dummyappid_dummyappid_dummyappid";
// ShelfModelObserver implementation that tracks what messages are invoked.
class TestShelfModelObserver : public ash::ShelfModelObserver {
public:
- TestShelfModelObserver()
- : added_(0),
- removed_(0),
- changed_(0) {
- }
-
+ TestShelfModelObserver() {}
~TestShelfModelObserver() override {}
// Overridden from ash::ShelfModelObserver:
@@ -169,10 +165,10 @@ class TestShelfModelObserver : public ash::ShelfModelObserver {
int last_index() const { return last_index_; }
private:
- int added_;
- int removed_;
- int changed_;
- int last_index_;
+ int added_ = 0;
+ int removed_ = 0;
+ int changed_ = 0;
+ int last_index_ = 0;
DISALLOW_COPY_AND_ASSIGN(TestShelfModelObserver);
};
@@ -189,11 +185,8 @@ class TestAppIconLoaderImpl : public AppIconLoader {
bool CanLoadImageForApp(const std::string& id) override {
return supported_apps_.find(id) != supported_apps_.end();
}
-
void FetchImage(const std::string& id) override { ++fetch_count_; }
-
void ClearImage(const std::string& id) override { ++clear_count_; }
-
void UpdateImage(const std::string& id) override {}
int fetch_count() const { return fetch_count_; }
@@ -302,9 +295,7 @@ class TestV2AppLauncherItemController : public LauncherItemController {
class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
protected:
ChromeLauncherControllerImplTest()
- : BrowserWithTestWindowTest(Browser::TYPE_TABBED, false),
- test_controller_(NULL),
- extension_service_(NULL) {}
+ : BrowserWithTestWindowTest(Browser::TYPE_TABBED, false) {}
~ChromeLauncherControllerImplTest() override {}
@@ -323,7 +314,7 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
ASSERT_TRUE(profile_manager_->SetUp());
}
- model_.reset(new ash::ShelfModel);
+ model_ = ash::WmShell::Get()->shelf_controller()->model();
model_observer_.reset(new TestShelfModelObserver);
model_->AddObserver(model_observer_.get());
@@ -472,11 +463,6 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
model_->RemoveObserver(model_observer_.get());
model_observer_.reset();
launcher_controller_.reset();
-
- // |model_| must be deleted after |launch_controller_|, because
- // |launch_controller_| has a map of pointers to the data held by |model_|.
- model_.reset();
-
BrowserWithTestWindowTest::TearDown();
}
@@ -499,9 +485,8 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
}
void InitLauncherController() {
- AddAppListLauncherItem();
launcher_controller_.reset(
- new ChromeLauncherControllerImpl(profile(), model_.get()));
+ new ChromeLauncherControllerImpl(profile(), model_));
// TODO(crbug.com/654622): Some tests break with a non-null static instance.
ChromeLauncherControllerImpl::set_instance_for_test(nullptr);
launcher_controller_->Init();
@@ -516,10 +501,11 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
void RecreateChromeLauncher() {
// Destroy controller first if it exists.
launcher_controller_.reset();
- model_.reset(new ash::ShelfModel);
+ while (model_->item_count() > 0)
+ model_->RemoveItemAt(0);
AddAppListLauncherItem();
launcher_controller_ =
- base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_.get());
+ base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_);
launcher_controller_->Init();
}
@@ -917,15 +903,15 @@ class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest {
bool auto_start_arc_test_ = false;
std::unique_ptr<ChromeLauncherControllerImpl> launcher_controller_;
std::unique_ptr<TestShelfModelObserver> model_observer_;
- std::unique_ptr<ash::ShelfModel> model_;
+ ash::ShelfModel* model_ = nullptr;
std::unique_ptr<TestingProfileManager> profile_manager_;
// |item_delegate_manager_| owns |test_controller_|.
- LauncherItemController* test_controller_;
+ LauncherItemController* test_controller_ = nullptr;
- ExtensionService* extension_service_;
+ ExtensionService* extension_service_ = nullptr;
- app_list::AppListSyncableService* app_service_;
+ app_list::AppListSyncableService* app_service_ = nullptr;
private:
TestBrowserWindow* CreateTestBrowserWindowAura() {
@@ -1020,18 +1006,21 @@ class V1App : public TestBrowserWindow {
DISALLOW_COPY_AND_ASSIGN(V1App);
};
-// A V2 application which gets created with an |extension| and for a |profile|.
-// Upon destruction it will properly close the application.
+// A V2 application window created with an |extension| and for a |profile|.
+// Upon destruction it will properly close the application; supports panels too.
class V2App {
public:
- V2App(Profile* profile, const extensions::Extension* extension)
+ V2App(Profile* profile,
+ const extensions::Extension* extension,
+ extensions::AppWindow::WindowType window_type =
+ extensions::AppWindow::WINDOW_TYPE_DEFAULT)
: creator_web_contents_(
content::WebContentsTester::CreateTestWebContents(profile,
nullptr)) {
window_ = new extensions::AppWindow(profile, new ChromeAppDelegate(true),
extension);
- extensions::AppWindow::CreateParams params =
- extensions::AppWindow::CreateParams();
+ extensions::AppWindow::CreateParams params;
+ params.window_type = window_type;
// Note: normally, the creator RFH is the background page of the
// app/extension
// calling chrome.app.window.create. For unit testing purposes, just passing
@@ -1188,8 +1177,8 @@ class MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest
app_name);
SetLauncherControllerHelper(helper);
- NavigateAndCommitActiveTabWithTitle(
- v1_app->browser(), GURL(url), ASCIIToUTF16(""));
+ NavigateAndCommitActiveTabWithTitle(v1_app->browser(), GURL(url),
+ base::string16());
return v1_app;
}
@@ -3273,55 +3262,43 @@ TEST_F(ChromeLauncherControllerImplTest, V1AppMenuDeletionExecution) {
// Tests that panels create launcher items correctly
TEST_F(ChromeLauncherControllerImplTest, AppPanels) {
- InitLauncherControllerWithBrowser();
- // App list and Browser shortcut ShelfItems are added.
- EXPECT_EQ(2, model_observer_->added());
- EXPECT_EQ(1, model_observer_->changed());
-
+ InitLauncherController();
+ model_observer_->clear_counts();
const std::string app_id = extension1_->id();
+
// app_icon_loader is owned by ChromeLauncherControllerImpl.
TestAppIconLoaderImpl* app_icon_loader = new TestAppIconLoaderImpl();
app_icon_loader->AddSupportedApp(app_id);
SetAppIconLoader(std::unique_ptr<AppIconLoader>(app_icon_loader));
- // Test adding an app panel
- AppWindowLauncherItemController* app_panel_controller =
- new ExtensionAppWindowLauncherItemController(
- LauncherItemController::TYPE_APP_PANEL, app_id, "id",
- launcher_controller_.get());
- ash::ShelfID shelf_id1 = launcher_controller_->CreateAppLauncherItem(
- app_panel_controller, app_id, ash::STATUS_RUNNING);
+ // Make an app panel; the ShelfItem is added by ash::ShelfWindowWatcher.
+ std::unique_ptr<V2App> app_panel1 = base::MakeUnique<V2App>(
+ profile(), extension1_.get(), extensions::AppWindow::WINDOW_TYPE_PANEL);
+ EXPECT_TRUE(app_panel1->window()->GetNativeWindow()->IsVisible());
int panel_index = model_observer_->last_index();
- EXPECT_EQ(3, model_observer_->added());
- EXPECT_EQ(1, model_observer_->changed());
+ EXPECT_EQ(1, model_observer_->added());
EXPECT_EQ(1, app_icon_loader->fetch_count());
model_observer_->clear_counts();
// App panels should have a separate identifier than the app id
EXPECT_EQ(0, launcher_controller_->GetShelfIDForAppID(app_id));
- // Setting the app image image should not change the panel if it set its icon
- app_panel_controller->set_image_set_by_controller(true);
+ // Setting the app image should not change the panel, which has a window icon.
gfx::ImageSkia image;
launcher_controller_->OnAppImageUpdated(app_id, image);
EXPECT_EQ(0, model_observer_->changed());
model_observer_->clear_counts();
- // Add a second app panel and verify that it get the same index as the first
- // one had, being added to the left of the existing panel.
- AppWindowLauncherItemController* app_panel_controller2 =
- new ExtensionAppWindowLauncherItemController(
- LauncherItemController::TYPE_APP_PANEL, app_id, "id",
- launcher_controller_.get());
-
- ash::ShelfID shelf_id2 = launcher_controller_->CreateAppLauncherItem(
- app_panel_controller2, app_id, ash::STATUS_RUNNING);
+ // Make a second app panel and verify that it gets the same index as the first
+ // panel, being added to the left of the existing panel.
+ std::unique_ptr<V2App> app_panel2 = base::MakeUnique<V2App>(
+ profile(), extension2_.get(), extensions::AppWindow::WINDOW_TYPE_PANEL);
EXPECT_EQ(panel_index, model_observer_->last_index());
EXPECT_EQ(1, model_observer_->added());
model_observer_->clear_counts();
- launcher_controller_->CloseLauncherItem(shelf_id2);
- launcher_controller_->CloseLauncherItem(shelf_id1);
+ app_panel1.reset();
+ app_panel2.reset();
EXPECT_EQ(2, model_observer_->removed());
}
@@ -3419,11 +3396,12 @@ TEST_F(ChromeLauncherControllerImplTest, PersistLauncherItemPositions) {
EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT, model_->items()[3].type);
launcher_controller_.reset();
- model_.reset(new ash::ShelfModel);
+ while (!model_->items().empty())
+ model_->RemoveItemAt(0);
AddAppListLauncherItem();
launcher_controller_ =
- base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_.get());
+ base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_);
helper = new TestLauncherControllerHelper(profile());
helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1");
helper->SetAppID(tab_strip_model->GetWebContentsAt(1), "2");
@@ -3465,11 +3443,12 @@ TEST_F(ChromeLauncherControllerImplTest, PersistPinned) {
EXPECT_EQ(initial_size + 1, model_->items().size());
launcher_controller_.reset();
- model_.reset(new ash::ShelfModel);
+ while (!model_->items().empty())
+ model_->RemoveItemAt(0);
AddAppListLauncherItem();
launcher_controller_ =
- base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_.get());
+ base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_);
helper = new TestLauncherControllerHelper(profile());
helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1");
SetLauncherControllerHelper(helper);
@@ -3504,36 +3483,35 @@ TEST_F(ChromeLauncherControllerImplTest, MultipleAppIconLoaders) {
SetAppIconLoaders(std::unique_ptr<AppIconLoader>(app_icon_loader1),
std::unique_ptr<AppIconLoader>(app_icon_loader2));
- AppWindowLauncherItemController* app_panel_controller3 =
+ AppWindowLauncherItemController* app_controller3 =
new ExtensionAppWindowLauncherItemController(
- LauncherItemController::TYPE_APP_PANEL, app_id3, "id",
+ LauncherItemController::TYPE_APP, app_id3, "id",
launcher_controller_.get());
const ash::ShelfID shelfId3 = launcher_controller_->CreateAppLauncherItem(
- app_panel_controller3, app_id3, ash::STATUS_RUNNING);
+ app_controller3, app_id3, ash::STATUS_RUNNING);
EXPECT_EQ(0, app_icon_loader1->fetch_count());
EXPECT_EQ(0, app_icon_loader1->clear_count());
EXPECT_EQ(0, app_icon_loader2->fetch_count());
EXPECT_EQ(0, app_icon_loader2->clear_count());
- AppWindowLauncherItemController* app_panel_controller2 =
+ AppWindowLauncherItemController* app_controller2 =
new ExtensionAppWindowLauncherItemController(
- LauncherItemController::TYPE_APP_PANEL, app_id2, "id",
+ LauncherItemController::TYPE_APP, app_id2, "id",
launcher_controller_.get());
const ash::ShelfID shelfId2 = launcher_controller_->CreateAppLauncherItem(
- app_panel_controller2, app_id2, ash::STATUS_RUNNING);
+ app_controller2, app_id2, ash::STATUS_RUNNING);
EXPECT_EQ(0, app_icon_loader1->fetch_count());
EXPECT_EQ(0, app_icon_loader1->clear_count());
EXPECT_EQ(1, app_icon_loader2->fetch_count());
EXPECT_EQ(0, app_icon_loader2->clear_count());
- // Test adding an app panel
- AppWindowLauncherItemController* app_panel_controller1 =
+ AppWindowLauncherItemController* app_controller1 =
new ExtensionAppWindowLauncherItemController(
- LauncherItemController::TYPE_APP_PANEL, app_id1, "id",
+ LauncherItemController::TYPE_APP, app_id1, "id",
launcher_controller_.get());
const ash::ShelfID shelfId1 = launcher_controller_->CreateAppLauncherItem(
- app_panel_controller1, app_id1, ash::STATUS_RUNNING);
+ app_controller1, app_id1, ash::STATUS_RUNNING);
EXPECT_EQ(1, app_icon_loader1->fetch_count());
EXPECT_EQ(0, app_icon_loader1->clear_count());
EXPECT_EQ(1, app_icon_loader2->fetch_count());

Powered by Google App Engine
This is Rietveld 408576698