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

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

Issue 2860503002: mash: Replace int ShelfIDs with AppLaunchID strings. (Closed)
Patch Set: Restore AppLaunchId class via using ShelfID = AppLaunchId; cleanup. Created 3 years, 7 months 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/extension_app_window_launcher_controller.cc
diff --git a/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc
index 1e0671732cdbb1c0120906da54121007be8f9530..f8258c8982d65897962701e149d39d84329d2084 100644
--- a/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.cc
@@ -4,8 +4,9 @@
#include "chrome/browser/ui/ash/launcher/extension_app_window_launcher_controller.h"
+#include "ash/public/cpp/shelf_types.h"
+#include "ash/public/cpp/window_properties.h"
#include "ash/shelf/shelf_model.h"
-#include "ash/wm/window_properties.h"
#include "ash/wm/window_util.h"
#include "ash/wm_window.h"
#include "base/stl_util.h"
@@ -25,7 +26,8 @@ using extensions::AppWindowRegistry;
namespace {
-std::string GetLaunchId(AppWindow* app_window) {
+// Get the ShelfID for a given |app_window|.
+ash::ShelfID GetShelfId(AppWindow* app_window) {
// Set launch_id default value to an empty string. If showInShelf parameter
// is true or the window type is panel and the window key is not empty, its
// value is appended to the launch_id. Otherwise, if the window key is
@@ -37,14 +39,7 @@ std::string GetLaunchId(AppWindow* app_window) {
else
launch_id = base::StringPrintf("%d", app_window->session_id().id());
}
- return launch_id;
-}
-
-std::string GetAppShelfId(AppWindow* app_window) {
- // Set app_shelf_id value to app_id and then append launch_id.
- std::string app_id = app_window->extension_id();
- std::string launch_id = GetLaunchId(app_window);
- return app_id + launch_id;
+ return ash::ShelfID(app_window->extension_id(), launch_id);
}
} // namespace
@@ -58,15 +53,11 @@ ExtensionAppWindowLauncherController::ExtensionAppWindowLauncherController(
}
ExtensionAppWindowLauncherController::~ExtensionAppWindowLauncherController() {
- for (std::set<AppWindowRegistry*>::iterator it = registry_.begin();
- it != registry_.end(); ++it)
- (*it)->RemoveObserver(this);
-
- for (WindowToAppShelfIdMap::iterator iter =
- window_to_app_shelf_id_map_.begin();
- iter != window_to_app_shelf_id_map_.end(); ++iter) {
- iter->first->RemoveObserver(this);
- }
+ for (extensions::AppWindowRegistry* iter : registry_)
+ iter->RemoveObserver(this);
+
+ for (const auto& iter : window_to_shelf_id_map_)
+ iter.first->RemoveObserver(this);
}
void ExtensionAppWindowLauncherController::AdditionalUserAddedToSession(
@@ -87,8 +78,8 @@ void ExtensionAppWindowLauncherController::AdditionalUserAddedToSession(
void ExtensionAppWindowLauncherController::OnAppWindowIconChanged(
AppWindow* app_window) {
- const std::string app_shelf_id = GetAppShelfId(app_window);
- AppControllerMap::iterator iter = app_controller_map_.find(app_shelf_id);
+ const ash::ShelfID shelf_id = GetShelfId(app_window);
+ AppControllerMap::iterator iter = app_controller_map_.find(shelf_id);
if (iter == app_controller_map_.end())
return;
@@ -127,79 +118,67 @@ void ExtensionAppWindowLauncherController::OnWindowDestroying(
}
void ExtensionAppWindowLauncherController::RegisterApp(AppWindow* app_window) {
+ const ash::ShelfID shelf_id = GetShelfId(app_window);
James Cook 2017/05/04 16:38:49 nit: DCHECK that it is valid
msw 2017/05/04 19:05:58 Done.
+ aura::Window* window = app_window->GetNativeWindow();
+ window->SetProperty(ash::kShelfIDKey, new ash::ShelfID(shelf_id));
+
// Windows created by IME extension should be treated the same way as the
// virtual keyboard window, which does not register itself in launcher.
// Ash's ShelfWindowWatcher handles app panel windows separately.
if (app_window->is_ime_window() || app_window->window_type_is_panel())
return;
- aura::Window* window = app_window->GetNativeWindow();
// Get the app's shelf identifier and add an entry to the map.
- DCHECK(window_to_app_shelf_id_map_.find(window) ==
- window_to_app_shelf_id_map_.end());
- const std::string app_shelf_id = GetAppShelfId(app_window);
- window_to_app_shelf_id_map_[window] = app_shelf_id;
+ DCHECK_EQ(window_to_shelf_id_map_.count(window), 0u);
+ window_to_shelf_id_map_[window] = shelf_id;
window->AddObserver(this);
// Find or create an item controller and launcher item.
- std::string app_id = app_window->extension_id();
ash::ShelfItemStatus status = ash::wm::IsActiveWindow(window)
? ash::STATUS_ACTIVE
: ash::STATUS_RUNNING;
AppControllerMap::iterator app_controller_iter =
- app_controller_map_.find(app_shelf_id);
- ash::ShelfID shelf_id = 0;
+ app_controller_map_.find(shelf_id);
if (app_controller_iter != app_controller_map_.end()) {
ExtensionAppWindowLauncherItemController* controller =
app_controller_iter->second;
- DCHECK(controller->app_id() == app_id);
- shelf_id = controller->shelf_id();
+ DCHECK_EQ(controller->app_id(), shelf_id.app_id());
controller->AddAppWindow(app_window);
} else {
- std::string launch_id = GetLaunchId(app_window);
std::unique_ptr<ExtensionAppWindowLauncherItemController> controller =
- base::MakeUnique<ExtensionAppWindowLauncherItemController>(
- ash::AppLaunchId(app_id, launch_id));
- ExtensionAppWindowLauncherItemController* item_controller =
- controller.get();
-
+ base::MakeUnique<ExtensionAppWindowLauncherItemController>(shelf_id);
+ app_controller_map_[shelf_id] = controller.get();
controller->AddAppWindow(app_window);
- // If there is already a shelf id mapped to this AppLaunchId (e.g. pinned),
- // use that shelf item.
- shelf_id = owner()->GetShelfIDForAppIDAndLaunchID(app_id, launch_id);
- if (shelf_id == 0) {
- shelf_id = owner()->CreateAppLauncherItem(std::move(controller), status);
+ // Check for any existing pinned shelf item with a matching |shelf_id|.
+ const int item_index = owner()->shelf_model()->ItemIndexByID(shelf_id);
+ if (item_index < 0) {
+ owner()->CreateAppLauncherItem(std::move(controller), status);
// Restore any existing app icon and flag as set.
if (app_window->HasCustomIcon() && !app_window->app_icon().IsEmpty()) {
owner()->SetLauncherItemImage(shelf_id,
app_window->app_icon().AsImageSkia());
- item_controller->set_image_set_by_controller(true);
+ app_controller_map_[shelf_id]->set_image_set_by_controller(true);
}
} else {
owner()->shelf_model()->SetShelfItemDelegate(shelf_id,
std::move(controller));
}
-
- // We need to change the controller associated with app_shelf_id.
- app_controller_map_[app_shelf_id] = item_controller;
}
+
owner()->SetItemStatus(shelf_id, status);
- ash::WmWindow::Get(window)->aura_window()->SetProperty(ash::kShelfIDKey,
- shelf_id);
}
void ExtensionAppWindowLauncherController::UnregisterApp(aura::Window* window) {
- WindowToAppShelfIdMap::iterator window_iter =
- window_to_app_shelf_id_map_.find(window);
- DCHECK(window_iter != window_to_app_shelf_id_map_.end());
- std::string app_shelf_id = window_iter->second;
- window_to_app_shelf_id_map_.erase(window_iter);
+ const auto window_iter = window_to_shelf_id_map_.find(window);
+ DCHECK(window_iter != window_to_shelf_id_map_.end());
+ ash::ShelfID shelf_id = window_iter->second;
+ window_to_shelf_id_map_.erase(window_iter);
window->RemoveObserver(this);
AppControllerMap::iterator app_controller_iter =
- app_controller_map_.find(app_shelf_id);
+ app_controller_map_.find(shelf_id);
DCHECK(app_controller_iter != app_controller_map_.end());
ExtensionAppWindowLauncherItemController* controller;
controller = app_controller_iter->second;
@@ -208,7 +187,6 @@ void ExtensionAppWindowLauncherController::UnregisterApp(aura::Window* window) {
if (controller->window_count() == 0) {
// If this is the last window associated with the app window shelf id,
// close the shelf item.
- ash::ShelfID shelf_id = controller->shelf_id();
owner()->CloseLauncherItem(shelf_id);
app_controller_map_.erase(app_controller_iter);
}
@@ -216,8 +194,7 @@ void ExtensionAppWindowLauncherController::UnregisterApp(aura::Window* window) {
bool ExtensionAppWindowLauncherController::IsRegisteredApp(
aura::Window* window) {
- return window_to_app_shelf_id_map_.find(window) !=
- window_to_app_shelf_id_map_.end();
+ return window_to_shelf_id_map_.find(window) != window_to_shelf_id_map_.end();
}
// Private Methods
@@ -225,13 +202,11 @@ bool ExtensionAppWindowLauncherController::IsRegisteredApp(
AppWindowLauncherItemController*
ExtensionAppWindowLauncherController::ControllerForWindow(
aura::Window* window) {
- WindowToAppShelfIdMap::iterator window_iter =
- window_to_app_shelf_id_map_.find(window);
- if (window_iter == window_to_app_shelf_id_map_.end())
+ const auto window_iter = window_to_shelf_id_map_.find(window);
+ if (window_iter == window_to_shelf_id_map_.end())
return nullptr;
- AppControllerMap::iterator app_controller_iter =
- app_controller_map_.find(window_iter->second);
- if (app_controller_iter == app_controller_map_.end())
+ const auto controller_iter = app_controller_map_.find(window_iter->second);
+ if (controller_iter == app_controller_map_.end())
return nullptr;
- return app_controller_iter->second;
+ return controller_iter->second;
}

Powered by Google App Engine
This is Rietveld 408576698