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

Unified Diff: chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.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.cc
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
index 580c7b09027b8ca561731a2e555435b69f5de81a..2aaaf707ea975ed3af61ddcc8c004f0a21276efb 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
@@ -297,12 +297,7 @@ ash::ShelfID ChromeLauncherControllerImpl::CreateAppLauncherItem(
LauncherItemController* controller,
const std::string& app_id,
ash::ShelfItemStatus status) {
- CHECK(controller);
- int index = 0;
- // Panels are inserted on the left so as not to push all existing panels over.
- if (controller->GetShelfItemType() != ash::TYPE_APP_PANEL)
- index = model_->item_count();
- return InsertAppLauncherItem(controller, app_id, status, index,
+ return InsertAppLauncherItem(controller, app_id, status, model_->item_count(),
controller->GetShelfItemType());
}
@@ -431,7 +426,7 @@ void ChromeLauncherControllerImpl::LockV1AppWithID(const std::string& app_id) {
id = GetShelfIDForAppID(app_id);
}
CHECK(id);
- id_to_item_controller_map_[id]->lock();
+ GetLauncherItemController(id)->lock();
}
void ChromeLauncherControllerImpl::UnlockV1AppWithID(
@@ -439,7 +434,7 @@ void ChromeLauncherControllerImpl::UnlockV1AppWithID(
ash::ShelfID id = GetShelfIDForAppID(app_id);
CHECK(id);
CHECK(IsPinned(id) || IsWindowedAppInLauncher(app_id));
- LauncherItemController* controller = id_to_item_controller_map_[id];
+ LauncherItemController* controller = GetLauncherItemController(id);
controller->unlock();
if (!controller->locked() && !IsPinned(id))
CloseLauncherItem(id);
@@ -453,10 +448,10 @@ void ChromeLauncherControllerImpl::Launch(ash::ShelfID id, int event_flags) {
}
void ChromeLauncherControllerImpl::Close(ash::ShelfID id) {
- LauncherItemController* controller = GetLauncherItemController(id);
- if (!controller)
+ ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(id);
+ if (!delegate)
return; // May happen if menu closed.
- controller->Close();
+ delegate->Close();
}
bool ChromeLauncherControllerImpl::IsOpen(ash::ShelfID id) {
@@ -803,7 +798,7 @@ ChromeLauncherControllerImpl::GetBrowserShortcutLauncherItemController() {
LauncherItemController* ChromeLauncherControllerImpl::GetLauncherItemController(
const ash::ShelfID id) {
if (!HasShelfIDToAppIDMapping(id))
- return NULL;
+ return nullptr;
return id_to_item_controller_map_[id];
}
@@ -906,7 +901,7 @@ void ChromeLauncherControllerImpl::AttachProfile(Profile* profile_to_attach) {
ash::ShelfID ChromeLauncherControllerImpl::GetShelfIDForAppID(
const std::string& app_id) {
// Get shelf id for app_id and empty launch_id.
- return GetShelfIDForAppIDAndLaunchID(app_id, "");
+ return GetShelfIDForAppIDAndLaunchID(app_id, std::string());
}
ash::ShelfID ChromeLauncherControllerImpl::GetShelfIDForAppIDAndLaunchID(
@@ -915,15 +910,12 @@ ash::ShelfID ChromeLauncherControllerImpl::GetShelfIDForAppIDAndLaunchID(
const std::string shelf_app_id =
ArcAppWindowLauncherController::GetShelfAppIdFromArcAppId(app_id);
for (const auto& id_to_item_controller_pair : id_to_item_controller_map_) {
- if (id_to_item_controller_pair.second->type() ==
- LauncherItemController::TYPE_APP_PANEL)
- continue; // Don't include panels
if (id_to_item_controller_pair.second->app_id() == shelf_app_id &&
id_to_item_controller_pair.second->launch_id() == launch_id) {
return id_to_item_controller_pair.first;
}
}
- return 0;
+ return ash::kInvalidShelfID;
}
bool ChromeLauncherControllerImpl::HasShelfIDToAppIDMapping(
@@ -935,7 +927,10 @@ bool ChromeLauncherControllerImpl::HasShelfIDToAppIDMapping(
const std::string& ChromeLauncherControllerImpl::GetAppIDForShelfID(
ash::ShelfID id) {
LauncherItemController* controller = GetLauncherItemController(id);
- return controller ? controller->app_id() : base::EmptyString();
+ if (controller)
+ return controller->app_id();
+ ash::ShelfItems::const_iterator item = model_->ItemByID(id);
+ return item != model_->items().end() ? item->app_id : base::EmptyString();
}
void ChromeLauncherControllerImpl::PinAppWithID(const std::string& app_id) {
@@ -1028,11 +1023,6 @@ ash::ShelfID ChromeLauncherControllerImpl::CreateAppShortcutLauncherItem(
ash::TYPE_APP_SHORTCUT);
}
-const std::string& ChromeLauncherControllerImpl::GetAppIdFromShelfIdForTest(
- ash::ShelfID id) {
- return id_to_item_controller_map_[id]->app_id();
-}
-
///////////////////////////////////////////////////////////////////////////////
// ChromeLauncherControllerImpl private:
@@ -1357,6 +1347,8 @@ ash::ShelfID ChromeLauncherControllerImpl::InsertAppLauncherItem(
ash::ShelfID id = model_->next_id();
CHECK(!HasShelfIDToAppIDMapping(id));
CHECK(controller);
+ // Ash's ShelfWindowWatcher handles app panel windows separately.
+ DCHECK_NE(ash::TYPE_APP_PANEL, controller->GetShelfItemType());
id_to_item_controller_map_[id] = controller;
controller->set_shelf_id(id);
@@ -1369,7 +1361,6 @@ ash::ShelfID ChromeLauncherControllerImpl::InsertAppLauncherItem(
status = new_state;
item.status = status;
-
model_->AddAt(index, item);
AppIconLoader* app_icon_loader = GetAppIconLoaderForApp(app_id);
@@ -1392,7 +1383,7 @@ ChromeLauncherControllerImpl::GetV1ApplicationsFromController(
return app_controller->GetRunningApplications();
}
-ash::ShelfID ChromeLauncherControllerImpl::CreateBrowserShortcutLauncherItem() {
+void ChromeLauncherControllerImpl::CreateBrowserShortcutLauncherItem() {
ash::ShelfItem browser_shortcut;
browser_shortcut.type = ash::TYPE_BROWSER_SHORTCUT;
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
@@ -1404,7 +1395,6 @@ ash::ShelfID ChromeLauncherControllerImpl::CreateBrowserShortcutLauncherItem() {
id_to_item_controller_map_[id]->set_shelf_id(id);
// ShelfModel owns BrowserShortcutLauncherItemController.
SetShelfItemDelegate(id, id_to_item_controller_map_[id]);
- return id;
}
bool ChromeLauncherControllerImpl::IsIncognito(
@@ -1483,8 +1473,7 @@ void ChromeLauncherControllerImpl::ReleaseProfile() {
///////////////////////////////////////////////////////////////////////////////
// ash::ShelfModelObserver:
-void ChromeLauncherControllerImpl::ShelfItemAdded(int index) {
-}
+void ChromeLauncherControllerImpl::ShelfItemAdded(int index) {}
void ChromeLauncherControllerImpl::ShelfItemRemoved(int index,
ash::ShelfID id) {
@@ -1494,8 +1483,7 @@ void ChromeLauncherControllerImpl::ShelfItemRemoved(int index,
if (iter == id_to_item_controller_map_.end())
return;
- LOG(ERROR) << "Unexpected change of shelf item id: " << id;
-
+ LOG(ERROR) << "Unexpected removal of shelf item, id: " << id;
id_to_item_controller_map_.erase(iter);
}
@@ -1521,7 +1509,7 @@ void ChromeLauncherControllerImpl::OnSetShelfItemDelegate(
IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id);
if (iter == id_to_item_controller_map_.end() || item_delegate == iter->second)
return;
- LOG(ERROR) << "Unexpected change of shelf item id: " << id;
+ LOG(ERROR) << "Unexpected change of shelf item delegate, id: " << id;
id_to_item_controller_map_.erase(iter);
}
@@ -1555,18 +1543,13 @@ void ChromeLauncherControllerImpl::OnAppImageUpdated(
const std::string& id,
const gfx::ImageSkia& image) {
// TODO: need to get this working for shortcuts.
- for (IDToItemControllerMap::const_iterator i =
- id_to_item_controller_map_.begin();
- i != id_to_item_controller_map_.end(); ++i) {
- LauncherItemController* controller = i->second;
- if (controller->app_id() != id)
+ for (int index = 0; index < model_->item_count(); ++index) {
+ ash::ShelfItem item = model_->items()[index];
+ if (GetAppIDForShelfID(item.id) != id)
continue;
- if (controller->image_set_by_controller())
+ LauncherItemController* controller = GetLauncherItemController(item.id);
+ if (!controller || controller->image_set_by_controller())
continue;
- int index = model_->ItemIndexByID(i->first);
- if (index == -1)
- continue;
- ash::ShelfItem item = model_->items()[index];
item.image = image;
if (arc_deferred_launcher_)
arc_deferred_launcher_->MaybeApplySpinningEffect(id, &item.image);

Powered by Google App Engine
This is Rietveld 408576698