| 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..754000a12aadacfc839302258e760a140165b406 100644
|
| --- a/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc
|
| +++ b/chrome/browser/ui/ash/launcher/browser_launcher_item_controller.cc
|
| @@ -49,6 +49,14 @@ BrowserLauncherItemController::~BrowserLauncherItemController() {
|
| window_->RemoveObserver(this);
|
| if (launcher_id() > 0)
|
| launcher_controller()->CloseLauncherItem(launcher_id());
|
| + if (type() == TYPE_WINDOWED_APP)
|
| + launcher_controller()->UnlockV1AppWithID(LauncherItemController::app_id());
|
| +}
|
| +
|
| +const std::string& BrowserLauncherItemController::app_id() const {
|
| + if (type() == TYPE_WINDOWED_APP)
|
| + return empty_app_id_;
|
| + return LauncherItemController::app_id();
|
| }
|
|
|
| void BrowserLauncherItemController::Init() {
|
| @@ -56,7 +64,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 +72,8 @@ void BrowserLauncherItemController::Init() {
|
| is_incognito_ ? ChromeLauncherController::STATE_INCOGNITO :
|
| ChromeLauncherController::STATE_NOT_INCOGNITO,
|
| app_status);
|
| + if (type() == TYPE_WINDOWED_APP)
|
| + launcher_controller()->LockV1AppWithID(LauncherItemController::app_id());
|
| }
|
| // In testing scenarios we can get tab strips with no active contents.
|
| if (tab_model_->active_index() != TabStripModel::kNoTab)
|
| @@ -81,6 +91,17 @@ BrowserLauncherItemController* BrowserLauncherItemController::Create(
|
| std::string 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()) {
|
| + app_id = web_app::GetExtensionIdFromApplicationName(
|
| + browser->app_name());
|
| + // Only allow this for known applications. Some unit tests for example
|
| + // do not have one.
|
| + if (!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)
|
|
|