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 76b5f13e359db807d8f61ff14723a002205353e9..9de260a325590655f1b9467623c86c5a90cd2888 100644 |
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc |
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc |
@@ -298,17 +298,33 @@ ash::ShelfID ChromeLauncherControllerImpl::CreateAppLauncherItem( |
const std::string& app_id, |
ash::ShelfItemStatus status) { |
return InsertAppLauncherItem(controller, app_id, status, model_->item_count(), |
- controller->GetShelfItemType()); |
+ ash::TYPE_APP); |
+} |
+ |
+const ash::ShelfItem& ChromeLauncherControllerImpl::GetItem( |
+ ash::ShelfID id) const { |
+ const int index = model_->ItemIndexByID(id); |
+ DCHECK_GE(index, 0); |
+ return model_->items()[index]; |
+} |
+ |
+void ChromeLauncherControllerImpl::SetItemType(ash::ShelfID id, |
+ ash::ShelfItemType type) { |
+ const int index = model_->ItemIndexByID(id); |
+ DCHECK_GE(index, 0); |
+ ash::ShelfItem item = model_->items()[index]; |
+ if (item.type != type) { |
+ item.type = type; |
+ model_->Set(index, item); |
+ } |
} |
void ChromeLauncherControllerImpl::SetItemStatus(ash::ShelfID id, |
ash::ShelfItemStatus status) { |
- int index = model_->ItemIndexByID(id); |
- ash::ShelfItemStatus old_status = model_->items()[index].status; |
- // Since ordinary browser windows are not registered, we might get a negative |
- // index here. |
- if (index >= 0 && old_status != status) { |
- ash::ShelfItem item = model_->items()[index]; |
+ const int index = model_->ItemIndexByID(id); |
+ DCHECK_GE(index, 0); |
+ ash::ShelfItem item = model_->items()[index]; |
+ if (item.status != status) { |
item.status = status; |
model_->Set(index, item); |
} |
@@ -378,12 +394,10 @@ void ChromeLauncherControllerImpl::UnpinAndUpdatePrefs(ash::ShelfID id, |
GetLaunchIDForShelfID(id))); |
} |
- if (controller->type() == LauncherItemController::TYPE_APP || |
- controller->locked()) { |
+ if (GetItem(id).status != ash::STATUS_CLOSED || controller->locked()) |
UnpinRunningAppInternal(model_->ItemIndexByID(id)); |
- } else { |
+ else |
LauncherItemClosed(id); |
- } |
} |
bool ChromeLauncherControllerImpl::IsPinned(ash::ShelfID id) { |
@@ -686,27 +700,25 @@ std::vector<content::WebContents*> |
ChromeLauncherControllerImpl::GetV1ApplicationsFromAppId( |
const std::string& app_id) { |
ash::ShelfID id = GetShelfIDForAppID(app_id); |
- |
- // If there is no such an item pinned to the launcher, no menu gets created. |
- if (id) { |
+ // If there is no such item pinned to the launcher, no menu gets created. |
+ if (id != ash::kInvalidShelfID && |
+ GetItem(id).type == ash::TYPE_APP_SHORTCUT) { |
LauncherItemController* controller = GetLauncherItemController(id); |
- DCHECK(controller); |
- if (controller->type() == LauncherItemController::TYPE_SHORTCUT) |
- return GetV1ApplicationsFromController(controller); |
+ AppShortcutLauncherItemController* app_controller = |
+ static_cast<AppShortcutLauncherItemController*>(controller); |
+ return app_controller->GetRunningApplications(); |
} |
return std::vector<content::WebContents*>(); |
} |
void ChromeLauncherControllerImpl::ActivateShellApp(const std::string& app_id, |
- int index) { |
+ int window_index) { |
ash::ShelfID id = GetShelfIDForAppID(app_id); |
- if (id) { |
+ if (id != ash::kInvalidShelfID && GetItem(id).type == ash::TYPE_APP) { |
LauncherItemController* controller = GetLauncherItemController(id); |
- if (controller && controller->type() == LauncherItemController::TYPE_APP) { |
- AppWindowLauncherItemController* app_window_controller = |
- static_cast<AppWindowLauncherItemController*>(controller); |
- app_window_controller->ActivateIndexedApp(index); |
- } |
+ AppWindowLauncherItemController* app_window_controller = |
+ static_cast<AppWindowLauncherItemController*>(controller); |
+ app_window_controller->ActivateIndexedApp(window_index); |
} |
} |
@@ -1262,8 +1274,7 @@ void ChromeLauncherControllerImpl::UpdateAppLaunchersFromPref() { |
DCHECK(controller); |
DCHECK_NE(controller->app_id(), extension_misc::kChromeAppId); |
- if (controller->locked() || |
- controller->type() == LauncherItemController::TYPE_APP) { |
+ if (item.status != ash::STATUS_CLOSED || controller->locked()) { |
UnpinRunningAppInternal(index); |
// Note, item can be moved to the right due weighting in shelf model. |
DCHECK_GE(model_->ItemIndexByID(item.id), index); |
@@ -1326,7 +1337,7 @@ ash::ShelfID ChromeLauncherControllerImpl::InsertAppLauncherItem( |
CHECK(!HasShelfIDToAppIDMapping(id)); |
CHECK(controller); |
// Ash's ShelfWindowWatcher handles app panel windows separately. |
- DCHECK_NE(ash::TYPE_APP_PANEL, controller->GetShelfItemType()); |
+ DCHECK_NE(ash::TYPE_APP_PANEL, shelf_item_type); |
id_to_item_controller_map_[id] = controller; |
controller->set_shelf_id(id); |
@@ -1352,15 +1363,6 @@ ash::ShelfID ChromeLauncherControllerImpl::InsertAppLauncherItem( |
return id; |
} |
-std::vector<content::WebContents*> |
-ChromeLauncherControllerImpl::GetV1ApplicationsFromController( |
- LauncherItemController* controller) { |
- DCHECK(controller->type() == LauncherItemController::TYPE_SHORTCUT); |
- AppShortcutLauncherItemController* app_controller = |
- static_cast<AppShortcutLauncherItemController*>(controller); |
- return app_controller->GetRunningApplications(); |
-} |
- |
void ChromeLauncherControllerImpl::CreateBrowserShortcutLauncherItem() { |
ash::ShelfItem browser_shortcut; |
browser_shortcut.type = ash::TYPE_BROWSER_SHORTCUT; |