Index: chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc |
diff --git a/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc b/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc |
index 81f8876e2b10e8fec6cdab3de261cdded99915e6..f1bbdce4a762637ae284bc4390965e617be6b6d9 100644 |
--- a/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc |
+++ b/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc |
@@ -33,9 +33,11 @@ BrowserLauncherItemController::BrowserLauncherItemController( |
aura::Window* window, |
TabStripModel* tab_model, |
ChromeLauncherController* launcher_controller, |
- const std::string& app_id) |
+ const std::string& app_id, |
+ const std::string& v1_app_id) |
: LauncherItemController(type, app_id, launcher_controller), |
window_(window), |
+ v1_app_id_(v1_app_id), |
tab_model_(tab_model), |
is_incognito_(tab_model->profile()->GetOriginalProfile() != |
tab_model->profile() && |
@@ -49,6 +51,8 @@ BrowserLauncherItemController::~BrowserLauncherItemController() { |
window_->RemoveObserver(this); |
if (launcher_id() > 0) |
launcher_controller()->CloseLauncherItem(launcher_id()); |
+ if (type() == TYPE_WINDOWED_APP) |
+ launcher_controller()->UnlockAppWithID(v1_app_id_); |
sky
2013/02/19 17:55:56
Why do you need the lock/unlock? Shouldn't that be
Mr4D (OOO till 08-26)
2013/02/19 19:22:13
As discussed.
|
} |
void BrowserLauncherItemController::Init() { |
@@ -56,7 +60,7 @@ void BrowserLauncherItemController::Init() { |
ash::LauncherItemStatus app_status = |
ash::wm::IsActiveWindow(window_) ? |
ash::STATUS_ACTIVE : ash::STATUS_RUNNING; |
- if (type() != TYPE_TABBED) { |
+ if (type() != TYPE_TABBED && type() != TYPE_WINDOWED_APP) { |
launcher_controller()->CreateAppLauncherItem(this, app_id(), app_status); |
} else { |
launcher_controller()->CreateTabbedLauncherItem( |
@@ -64,6 +68,8 @@ void BrowserLauncherItemController::Init() { |
is_incognito_ ? ChromeLauncherController::STATE_INCOGNITO : |
ChromeLauncherController::STATE_NOT_INCOGNITO, |
app_status); |
+ if (type() == TYPE_WINDOWED_APP) |
+ launcher_controller()->LockAppWithID(v1_app_id_); |
} |
// In testing scenarios we can get tab strips with no active contents. |
if (tab_model_->active_index() != TabStripModel::kNoTab) |
@@ -79,8 +85,20 @@ BrowserLauncherItemController* BrowserLauncherItemController::Create( |
Type type; |
std::string app_id; |
+ std::string v1_app_id; |
if (browser->is_type_tabbed() || browser->is_type_popup()) { |
type = TYPE_TABBED; |
+ if (!browser->is_type_tabbed() && |
+ browser->is_type_popup() && |
+ browser->is_app() && |
+ ChromeLauncherController::instance()->GetPerAppInterface()) { |
+ v1_app_id = web_app::GetExtensionIdFromApplicationName( |
+ browser->app_name()); |
+ // Only allow this for known applications. Some unit tests for example |
+ // do not have one. |
+ if (!v1_app_id.empty()) |
+ type = TYPE_WINDOWED_APP; |
+ } |
} else if (browser->is_app()) { |
if (browser->is_type_panel()) { |
if (browser->app_type() == Browser::APP_TYPE_CHILD) |
@@ -99,7 +117,8 @@ BrowserLauncherItemController* BrowserLauncherItemController::Create( |
browser->window()->GetNativeWindow(), |
browser->tab_strip_model(), |
ChromeLauncherController::instance(), |
- app_id); |
+ app_id, |
+ v1_app_id); |
controller->Init(); |
return controller; |
} |