Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/ash/launcher/extension_app_window_launcher_controlle r.h" | 5 #include "chrome/browser/ui/ash/launcher/extension_app_window_launcher_controlle r.h" |
| 6 | 6 |
| 7 #include "ash/aura/wm_window_aura.h" | 7 #include "ash/aura/wm_window_aura.h" |
| 8 #include "ash/common/shelf/shelf_delegate.h" | 8 #include "ash/common/shelf/shelf_delegate.h" |
| 9 #include "ash/common/shelf/shelf_item_types.h" | |
| 9 #include "ash/common/wm_shell.h" | 10 #include "ash/common/wm_shell.h" |
| 10 #include "ash/common/wm_window_property.h" | 11 #include "ash/common/wm_window_property.h" |
| 12 #include "ash/wm/window_properties.h" | |
| 11 #include "ash/wm/window_util.h" | 13 #include "ash/wm/window_util.h" |
| 12 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
| 13 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
| 14 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
| 15 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" | 17 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" |
| 16 #include "chrome/browser/ui/ash/launcher/extension_app_window_launcher_item_cont roller.h" | 18 #include "chrome/browser/ui/ash/launcher/extension_app_window_launcher_item_cont roller.h" |
| 17 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" | 19 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h" |
| 20 #include "chrome/browser/ui/ash/property_util.h" | |
| 18 #include "extensions/browser/app_window/app_window.h" | 21 #include "extensions/browser/app_window/app_window.h" |
| 19 #include "extensions/browser/app_window/native_app_window.h" | 22 #include "extensions/browser/app_window/native_app_window.h" |
| 20 #include "extensions/common/extension.h" | 23 #include "extensions/common/extension.h" |
| 21 #include "ui/aura/window.h" | 24 #include "ui/aura/window.h" |
| 22 #include "ui/aura/window_event_dispatcher.h" | 25 #include "ui/aura/window_event_dispatcher.h" |
| 23 | 26 |
| 24 using extensions::AppWindow; | 27 using extensions::AppWindow; |
| 25 using extensions::AppWindowRegistry; | 28 using extensions::AppWindowRegistry; |
| 26 | 29 |
| 27 namespace { | 30 namespace { |
| 28 | 31 |
| 29 std::string GetLaunchId(AppWindow* app_window) { | 32 std::string GetLaunchId(AppWindow* app_window) { |
| 30 // Set launch_id default value to an empty string. If showInShelf parameter | 33 // Set launch_id default value to an empty string. If showInShelf parameter |
| 31 // is true or the window type is panel and the window key is not empty, its | 34 // is true and the window key is not empty, its value is appended to the |
| 32 // value is appended to the launch_id. Otherwise, if the window key is | 35 // launch_id. Otherwise, if the window key is empty, the session_id is used. |
| 33 // empty, the session_id is used. | |
| 34 std::string launch_id; | 36 std::string launch_id; |
| 35 if (app_window->show_in_shelf() || app_window->window_type_is_panel()) { | 37 if (app_window->show_in_shelf()) { |
|
James Cook
2016/11/02 17:53:44
Can you tell me more about this? This sounds like
msw
2016/11/10 21:07:46
I aimed to remove all panel use/control from this
| |
| 36 if (!app_window->window_key().empty()) | 38 if (!app_window->window_key().empty()) |
| 37 launch_id = app_window->window_key(); | 39 launch_id = app_window->window_key(); |
| 38 else | 40 else |
| 39 launch_id = base::StringPrintf("%d", app_window->session_id().id()); | 41 launch_id = base::StringPrintf("%d", app_window->session_id().id()); |
| 40 } | 42 } |
| 41 return launch_id; | 43 return launch_id; |
| 42 } | 44 } |
| 43 | 45 |
| 44 std::string GetAppShelfId(AppWindow* app_window) { | 46 std::string GetAppShelfId(AppWindow* app_window) { |
| 45 // Set app_shelf_id value to app_id and then append launch_id. | 47 // Set app_shelf_id value to app_id and then append launch_id. |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 120 aura::Window* window) { | 122 aura::Window* window) { |
| 121 UnregisterApp(window); | 123 UnregisterApp(window); |
| 122 } | 124 } |
| 123 | 125 |
| 124 void ExtensionAppWindowLauncherController::RegisterApp(AppWindow* app_window) { | 126 void ExtensionAppWindowLauncherController::RegisterApp(AppWindow* app_window) { |
| 125 // Windows created by IME extension should be treated the same way as the | 127 // Windows created by IME extension should be treated the same way as the |
| 126 // virtual keyboard window, which does not register itself in launcher. | 128 // virtual keyboard window, which does not register itself in launcher. |
| 127 if (app_window->is_ime_window()) | 129 if (app_window->is_ime_window()) |
| 128 return; | 130 return; |
| 129 | 131 |
| 132 // Ash's ShelfWindowWatcher handles app panel windows once their type is set. | |
| 130 aura::Window* window = app_window->GetNativeWindow(); | 133 aura::Window* window = app_window->GetNativeWindow(); |
| 134 if (app_window->window_type_is_panel()) { | |
| 135 property_util::SetIntProperty(window, ash::kShelfItemTypeKey, | |
| 136 ash::TYPE_APP_PANEL); | |
| 137 return; | |
| 138 } | |
| 139 | |
| 131 // Get the app's shelf identifier and add an entry to the map. | 140 // Get the app's shelf identifier and add an entry to the map. |
| 132 DCHECK(window_to_app_shelf_id_map_.find(window) == | 141 DCHECK(window_to_app_shelf_id_map_.find(window) == |
| 133 window_to_app_shelf_id_map_.end()); | 142 window_to_app_shelf_id_map_.end()); |
| 134 const std::string app_shelf_id = GetAppShelfId(app_window); | 143 const std::string app_shelf_id = GetAppShelfId(app_window); |
| 135 window_to_app_shelf_id_map_[window] = app_shelf_id; | 144 window_to_app_shelf_id_map_[window] = app_shelf_id; |
| 136 window->AddObserver(this); | 145 window->AddObserver(this); |
| 137 | 146 |
| 138 // Find or create an item controller and launcher item. | 147 // Find or create an item controller and launcher item. |
| 139 std::string app_id = app_window->extension_id(); | 148 std::string app_id = app_window->extension_id(); |
| 140 ash::ShelfItemStatus status = ash::wm::IsActiveWindow(window) | 149 ash::ShelfItemStatus status = ash::wm::IsActiveWindow(window) |
| 141 ? ash::STATUS_ACTIVE | 150 ? ash::STATUS_ACTIVE |
| 142 : ash::STATUS_RUNNING; | 151 : ash::STATUS_RUNNING; |
| 143 AppControllerMap::iterator app_controller_iter = | 152 AppControllerMap::iterator app_controller_iter = |
| 144 app_controller_map_.find(app_shelf_id); | 153 app_controller_map_.find(app_shelf_id); |
| 145 ash::ShelfID shelf_id = 0; | 154 ash::ShelfID shelf_id = 0; |
| 146 | 155 |
| 147 if (app_controller_iter != app_controller_map_.end()) { | 156 if (app_controller_iter != app_controller_map_.end()) { |
| 148 ExtensionAppWindowLauncherItemController* controller = | 157 ExtensionAppWindowLauncherItemController* controller = |
| 149 app_controller_iter->second; | 158 app_controller_iter->second; |
| 150 DCHECK(controller->app_id() == app_id); | 159 DCHECK(controller->app_id() == app_id); |
| 151 shelf_id = controller->shelf_id(); | 160 shelf_id = controller->shelf_id(); |
| 152 controller->AddAppWindow(app_window); | 161 controller->AddAppWindow(app_window); |
| 153 } else { | 162 } else { |
| 154 LauncherItemController::Type type = | 163 LauncherItemController::Type type = LauncherItemController::TYPE_APP; |
| 155 app_window->window_type_is_panel() | |
| 156 ? LauncherItemController::TYPE_APP_PANEL | |
| 157 : LauncherItemController::TYPE_APP; | |
| 158 std::string launch_id = GetLaunchId(app_window); | 164 std::string launch_id = GetLaunchId(app_window); |
| 159 ExtensionAppWindowLauncherItemController* controller = | 165 ExtensionAppWindowLauncherItemController* controller = |
| 160 new ExtensionAppWindowLauncherItemController(type, app_id, launch_id, | 166 new ExtensionAppWindowLauncherItemController(type, app_id, launch_id, |
| 161 owner()); | 167 owner()); |
| 162 controller->AddAppWindow(app_window); | 168 controller->AddAppWindow(app_window); |
| 163 // If there is already a shelf id mapped to this app_shelf_id (e.g. pinned), | 169 // If there is already a shelf id mapped to this app_shelf_id (e.g. pinned), |
| 164 // use that shelf item. | 170 // use that shelf item. |
| 165 shelf_id = | 171 shelf_id = |
| 166 ash::WmShell::Get()->shelf_delegate()->GetShelfIDForAppIDAndLaunchID( | 172 ash::WmShell::Get()->shelf_delegate()->GetShelfIDForAppIDAndLaunchID( |
| 167 app_id, launch_id); | 173 app_id, launch_id); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 224 WindowToAppShelfIdMap::iterator window_iter = | 230 WindowToAppShelfIdMap::iterator window_iter = |
| 225 window_to_app_shelf_id_map_.find(window); | 231 window_to_app_shelf_id_map_.find(window); |
| 226 if (window_iter == window_to_app_shelf_id_map_.end()) | 232 if (window_iter == window_to_app_shelf_id_map_.end()) |
| 227 return nullptr; | 233 return nullptr; |
| 228 AppControllerMap::iterator app_controller_iter = | 234 AppControllerMap::iterator app_controller_iter = |
| 229 app_controller_map_.find(window_iter->second); | 235 app_controller_map_.find(window_iter->second); |
| 230 if (app_controller_iter == app_controller_map_.end()) | 236 if (app_controller_iter == app_controller_map_.end()) |
| 231 return nullptr; | 237 return nullptr; |
| 232 return app_controller_iter->second; | 238 return app_controller_iter->second; |
| 233 } | 239 } |
| OLD | NEW |