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

Side by Side Diff: ash/sysui/sysui_application.cc

Issue 2024313002: Moves mash/wm/public -> ash/public (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: feedback Created 4 years, 6 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 unified diff | Download patch
« no previous file with comments | « ash/sysui/shelf_delegate_mus.cc ('k') | chrome/browser/chromeos/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "ash/sysui/sysui_application.h" 5 #include "ash/sysui/sysui_application.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "ash/desktop_background/desktop_background_controller.h" 12 #include "ash/desktop_background/desktop_background_controller.h"
13 #include "ash/host/ash_window_tree_host_init_params.h" 13 #include "ash/host/ash_window_tree_host_init_params.h"
14 #include "ash/host/ash_window_tree_host_platform.h" 14 #include "ash/host/ash_window_tree_host_platform.h"
15 #include "ash/material_design/material_design_controller.h" 15 #include "ash/material_design/material_design_controller.h"
16 #include "ash/public/interfaces/ash_window_type.mojom.h"
17 #include "ash/public/interfaces/container.mojom.h"
16 #include "ash/root_window_settings.h" 18 #include "ash/root_window_settings.h"
17 #include "ash/shell.h" 19 #include "ash/shell.h"
18 #include "ash/shell_init_params.h" 20 #include "ash/shell_init_params.h"
19 #include "ash/shell_window_ids.h" 21 #include "ash/shell_window_ids.h"
20 #include "ash/sysui/app_list_presenter_mus.h" 22 #include "ash/sysui/app_list_presenter_mus.h"
21 #include "ash/sysui/keyboard_ui_mus.h" 23 #include "ash/sysui/keyboard_ui_mus.h"
22 #include "ash/sysui/shelf_delegate_mus.h" 24 #include "ash/sysui/shelf_delegate_mus.h"
23 #include "ash/sysui/shell_delegate_mus.h" 25 #include "ash/sysui/shell_delegate_mus.h"
24 #include "ash/sysui/stub_context_factory.h" 26 #include "ash/sysui/stub_context_factory.h"
25 #include "base/bind.h" 27 #include "base/bind.h"
26 #include "base/files/file_path.h" 28 #include "base/files/file_path.h"
27 #include "base/path_service.h" 29 #include "base/path_service.h"
28 #include "base/threading/sequenced_worker_pool.h" 30 #include "base/threading/sequenced_worker_pool.h"
29 #include "components/mus/public/cpp/property_type_converters.h" 31 #include "components/mus/public/cpp/property_type_converters.h"
30 #include "mash/wm/public/interfaces/ash_window_type.mojom.h"
31 #include "mash/wm/public/interfaces/container.mojom.h"
32 #include "services/catalog/public/cpp/resource_loader.h" 32 #include "services/catalog/public/cpp/resource_loader.h"
33 #include "services/shell/public/cpp/connector.h" 33 #include "services/shell/public/cpp/connector.h"
34 #include "ui/aura/env.h" 34 #include "ui/aura/env.h"
35 #include "ui/base/resource/resource_bundle.h" 35 #include "ui/base/resource/resource_bundle.h"
36 #include "ui/base/ui_base_paths.h" 36 #include "ui/base/ui_base_paths.h"
37 #include "ui/message_center/message_center.h" 37 #include "ui/message_center/message_center.h"
38 #include "ui/platform_window/stub/stub_window.h" 38 #include "ui/platform_window/stub/stub_window.h"
39 #include "ui/views/mus/aura_init.h" 39 #include "ui/views/mus/aura_init.h"
40 #include "ui/views/mus/native_widget_mus.h" 40 #include "ui/views/mus/native_widget_mus.h"
41 #include "ui/views/mus/window_manager_connection.h" 41 #include "ui/views/mus/window_manager_connection.h"
(...skipping 11 matching lines...) Expand all
53 namespace ash { 53 namespace ash {
54 namespace sysui { 54 namespace sysui {
55 55
56 namespace { 56 namespace {
57 57
58 const char kResourceFileStrings[] = "ash_resources_strings.pak"; 58 const char kResourceFileStrings[] = "ash_resources_strings.pak";
59 const char kResourceFile100[] = "ash_resources_100_percent.pak"; 59 const char kResourceFile100[] = "ash_resources_100_percent.pak";
60 const char kResourceFile200[] = "ash_resources_200_percent.pak"; 60 const char kResourceFile200[] = "ash_resources_200_percent.pak";
61 61
62 // Tries to determine the corresponding mash container from widget init params. 62 // Tries to determine the corresponding mash container from widget init params.
63 mash::wm::mojom::Container GetContainerId( 63 mojom::Container GetContainerId(const views::Widget::InitParams& params) {
64 const views::Widget::InitParams& params) {
65 const int id = params.parent->id(); 64 const int id = params.parent->id();
66 if (id == kShellWindowId_DesktopBackgroundContainer) 65 if (id == kShellWindowId_DesktopBackgroundContainer)
67 return mash::wm::mojom::Container::USER_BACKGROUND; 66 return mojom::Container::USER_BACKGROUND;
68 if (id == kShellWindowId_ShelfContainer) 67 if (id == kShellWindowId_ShelfContainer)
69 return mash::wm::mojom::Container::USER_PRIVATE_SHELF; 68 return mojom::Container::USER_PRIVATE_SHELF;
70 if (id == kShellWindowId_StatusContainer) 69 if (id == kShellWindowId_StatusContainer)
71 return mash::wm::mojom::Container::STATUS; 70 return mojom::Container::STATUS;
72 71
73 // Determine the container based on Widget type. 72 // Determine the container based on Widget type.
74 switch (params.type) { 73 switch (params.type) {
75 case views::Widget::InitParams::Type::TYPE_BUBBLE: 74 case views::Widget::InitParams::Type::TYPE_BUBBLE:
76 return mash::wm::mojom::Container::BUBBLES; 75 return mojom::Container::BUBBLES;
77 case views::Widget::InitParams::Type::TYPE_MENU: 76 case views::Widget::InitParams::Type::TYPE_MENU:
78 return mash::wm::mojom::Container::MENUS; 77 return mojom::Container::MENUS;
79 case views::Widget::InitParams::Type::TYPE_TOOLTIP: 78 case views::Widget::InitParams::Type::TYPE_TOOLTIP:
80 return mash::wm::mojom::Container::DRAG_AND_TOOLTIPS; 79 return mojom::Container::DRAG_AND_TOOLTIPS;
81 default: 80 default:
82 return mash::wm::mojom::Container::COUNT; 81 return mojom::Container::COUNT;
83 } 82 }
84 } 83 }
85 84
86 // Tries to determine the corresponding ash window type from the ash container 85 // Tries to determine the corresponding ash window type from the ash container
87 // for the widget. 86 // for the widget.
88 mash::wm::mojom::AshWindowType GetAshWindowType(aura::Window* container) { 87 mojom::AshWindowType GetAshWindowType(aura::Window* container) {
89 DCHECK(container); 88 DCHECK(container);
90 int id = container->id(); 89 int id = container->id();
91 if (id == kShellWindowId_ShelfContainer) 90 if (id == kShellWindowId_ShelfContainer)
92 return mash::wm::mojom::AshWindowType::SHELF; 91 return mojom::AshWindowType::SHELF;
93 if (id == kShellWindowId_StatusContainer) 92 if (id == kShellWindowId_StatusContainer)
94 return mash::wm::mojom::AshWindowType::STATUS_AREA; 93 return mojom::AshWindowType::STATUS_AREA;
95 return mash::wm::mojom::AshWindowType::COUNT; 94 return mojom::AshWindowType::COUNT;
96 } 95 }
97 96
98 // Creates a StubWindow, which means this window never receives any input event, 97 // Creates a StubWindow, which means this window never receives any input event,
99 // or displays anything to the user. 98 // or displays anything to the user.
100 class AshWindowTreeHostMus : public AshWindowTreeHostPlatform { 99 class AshWindowTreeHostMus : public AshWindowTreeHostPlatform {
101 public: 100 public:
102 explicit AshWindowTreeHostMus(const gfx::Rect& initial_bounds) 101 explicit AshWindowTreeHostMus(const gfx::Rect& initial_bounds)
103 : AshWindowTreeHostPlatform() { 102 : AshWindowTreeHostPlatform() {
104 std::unique_ptr<ui::PlatformWindow> window(new ui::StubWindow(this)); 103 std::unique_ptr<ui::PlatformWindow> window(new ui::StubWindow(this));
105 window->SetBounds(initial_bounds); 104 window->SetBounds(initial_bounds);
(...skipping 28 matching lines...) Expand all
134 ViewsDelegate::GetInstance()->set_native_widget_factory( 133 ViewsDelegate::GetInstance()->set_native_widget_factory(
135 ViewsDelegate::NativeWidgetFactory()); 134 ViewsDelegate::NativeWidgetFactory());
136 } 135 }
137 136
138 private: 137 private:
139 views::NativeWidget* InitNativeWidget( 138 views::NativeWidget* InitNativeWidget(
140 const views::Widget::InitParams& params, 139 const views::Widget::InitParams& params,
141 views::internal::NativeWidgetDelegate* delegate) { 140 views::internal::NativeWidgetDelegate* delegate) {
142 std::map<std::string, std::vector<uint8_t>> properties; 141 std::map<std::string, std::vector<uint8_t>> properties;
143 if (params.parent) { 142 if (params.parent) {
144 mash::wm::mojom::Container container = GetContainerId(params); 143 mojom::Container container = GetContainerId(params);
145 if (container != mash::wm::mojom::Container::COUNT) { 144 if (container != mojom::Container::COUNT) {
146 properties[mash::wm::mojom::kWindowContainer_Property] = 145 properties[mojom::kWindowContainer_Property] =
147 mojo::ConvertTo<std::vector<uint8_t>>( 146 mojo::ConvertTo<std::vector<uint8_t>>(
148 static_cast<int32_t>(container)); 147 static_cast<int32_t>(container));
149 } 148 }
150 mash::wm::mojom::AshWindowType type = GetAshWindowType(params.parent); 149 mojom::AshWindowType type = GetAshWindowType(params.parent);
151 if (type != mash::wm::mojom::AshWindowType::COUNT) { 150 if (type != mojom::AshWindowType::COUNT) {
152 properties[mash::wm::mojom::kAshWindowType_Property] = 151 properties[mojom::kAshWindowType_Property] =
153 mojo::ConvertTo<std::vector<uint8_t>>(static_cast<int32_t>(type)); 152 mojo::ConvertTo<std::vector<uint8_t>>(static_cast<int32_t>(type));
154 } 153 }
155 } 154 }
156 155
157 // AshInit installs a stub implementation of ui::ContextFactory, so that the 156 // AshInit installs a stub implementation of ui::ContextFactory, so that the
158 // AshWindowTreeHost instances created do not actually show anything to the 157 // AshWindowTreeHost instances created do not actually show anything to the
159 // user. However, when creating a views::Widget instance, the 158 // user. However, when creating a views::Widget instance, the
160 // WindowManagerConnection creates a WindowTreeHostMus instance, which 159 // WindowManagerConnection creates a WindowTreeHostMus instance, which
161 // creates a ui::Compositor, and it needs a real ui::ContextFactory 160 // creates a ui::Compositor, and it needs a real ui::ContextFactory
162 // implementation. So, unset the context-factory here temporarily when 161 // implementation. So, unset the context-factory here temporarily when
(...skipping 23 matching lines...) Expand all
186 } // namespace 185 } // namespace
187 186
188 class AshInit { 187 class AshInit {
189 public: 188 public:
190 AshInit() : worker_pool_(new base::SequencedWorkerPool(2, "AshWorkerPool")) { 189 AshInit() : worker_pool_(new base::SequencedWorkerPool(2, "AshWorkerPool")) {
191 ui::RegisterPathProvider(); 190 ui::RegisterPathProvider();
192 } 191 }
193 192
194 ~AshInit() { worker_pool_->Shutdown(); } 193 ~AshInit() { worker_pool_->Shutdown(); }
195 194
196 aura::Window* root() { return ash::Shell::GetPrimaryRootWindow(); } 195 aura::Window* root() { return Shell::GetPrimaryRootWindow(); }
197 196
198 void Initialize(::shell::Connector* connector, 197 void Initialize(::shell::Connector* connector,
199 const ::shell::Identity& identity) { 198 const ::shell::Identity& identity) {
200 InitializeResourceBundle(connector); 199 InitializeResourceBundle(connector);
201 aura_init_.reset(new views::AuraInit(connector, "views_mus_resources.pak")); 200 aura_init_.reset(new views::AuraInit(connector, "views_mus_resources.pak"));
202 ash::MaterialDesignController::Initialize(); 201 MaterialDesignController::Initialize();
203 views::WindowManagerConnection::Create(connector, identity); 202 views::WindowManagerConnection::Create(connector, identity);
204 203
205 display::Screen* screen = display::Screen::GetScreen(); 204 display::Screen* screen = display::Screen::GetScreen();
206 DCHECK(screen); 205 DCHECK(screen);
207 gfx::Size size = screen->GetPrimaryDisplay().bounds().size(); 206 gfx::Size size = screen->GetPrimaryDisplay().bounds().size();
208 207
209 // Uninstall the ScreenMus installed by WindowManagerConnection, so that ash 208 // Uninstall the ScreenMus installed by WindowManagerConnection, so that ash
210 // installs and uses the ScreenAsh. This can be removed once ash learns to 209 // installs and uses the ScreenAsh. This can be removed once ash learns to
211 // talk to mus for managing displays. 210 // talk to mus for managing displays.
212 // TODO(mfomitchev): We need to fix this. http://crbug.com/607300 211 // TODO(mfomitchev): We need to fix this. http://crbug.com/607300
213 display::Screen::SetScreenInstance(nullptr); 212 display::Screen::SetScreenInstance(nullptr);
214 213
215 // Install some hook so that the WindowTreeHostMus created for widgets can 214 // Install some hook so that the WindowTreeHostMus created for widgets can
216 // be hooked up correctly. 215 // be hooked up correctly.
217 native_widget_factory_.reset(new NativeWidgetFactory()); 216 native_widget_factory_.reset(new NativeWidgetFactory());
218 217
219 ash::AshWindowTreeHost::SetFactory(base::Bind(&CreateWindowTreeHostMus)); 218 AshWindowTreeHost::SetFactory(base::Bind(&CreateWindowTreeHostMus));
220 219
221 std::unique_ptr<ash::AppListPresenterMus> app_list_presenter = 220 std::unique_ptr<AppListPresenterMus> app_list_presenter =
222 base::WrapUnique(new ash::AppListPresenterMus(connector)); 221 base::WrapUnique(new AppListPresenterMus(connector));
223 ash_delegate_ = new ShellDelegateMus(std::move(app_list_presenter)); 222 ash_delegate_ = new ShellDelegateMus(std::move(app_list_presenter));
224 223
225 InitializeComponents(); 224 InitializeComponents();
226 225
227 ash::ShellInitParams init_params; 226 ShellInitParams init_params;
228 init_params.delegate = ash_delegate_; 227 init_params.delegate = ash_delegate_;
229 init_params.context_factory = new StubContextFactory; 228 init_params.context_factory = new StubContextFactory;
230 init_params.blocking_pool = worker_pool_.get(); 229 init_params.blocking_pool = worker_pool_.get();
231 init_params.in_mus = true; 230 init_params.in_mus = true;
232 init_params.keyboard_factory = 231 init_params.keyboard_factory =
233 base::Bind(&KeyboardUIMus::Create, connector); 232 base::Bind(&KeyboardUIMus::Create, connector);
234 ash::Shell::CreateInstance(init_params); 233 Shell::CreateInstance(init_params);
235 ash::Shell::GetInstance()->CreateShelf(); 234 Shell::GetInstance()->CreateShelf();
236 ash::Shell::GetInstance()->UpdateAfterLoginStatusChange( 235 Shell::GetInstance()->UpdateAfterLoginStatusChange(user::LOGGED_IN_USER);
237 ash::user::LOGGED_IN_USER);
238 236
239 ash::Shell::GetPrimaryRootWindow()->GetHost()->Show(); 237 Shell::GetPrimaryRootWindow()->GetHost()->Show();
240 SetupWallpaper(SkColorSetARGB(255, 0, 255, 0)); 238 SetupWallpaper(SkColorSetARGB(255, 0, 255, 0));
241 } 239 }
242 240
243 void InitializeResourceBundle(::shell::Connector* connector) { 241 void InitializeResourceBundle(::shell::Connector* connector) {
244 if (ui::ResourceBundle::HasSharedInstance()) 242 if (ui::ResourceBundle::HasSharedInstance())
245 return; 243 return;
246 244
247 std::set<std::string> resource_paths; 245 std::set<std::string> resource_paths;
248 resource_paths.insert(kResourceFileStrings); 246 resource_paths.insert(kResourceFileStrings);
249 resource_paths.insert(kResourceFile100); 247 resource_paths.insert(kResourceFile100);
(...skipping 22 matching lines...) Expand all
272 bitmap.eraseColor(color); 270 bitmap.eraseColor(color);
273 #if !defined(NDEBUG) 271 #if !defined(NDEBUG)
274 // In debug builds we generate a simple pattern that allows visually 272 // In debug builds we generate a simple pattern that allows visually
275 // notice if transparency is broken. 273 // notice if transparency is broken.
276 { 274 {
277 SkAutoLockPixels alp(bitmap); 275 SkAutoLockPixels alp(bitmap);
278 *bitmap.getAddr32(0, 0) = SkColorSetRGB(0, 0, 0); 276 *bitmap.getAddr32(0, 0) = SkColorSetRGB(0, 0, 0);
279 } 277 }
280 #endif 278 #endif
281 gfx::ImageSkia wallpaper = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); 279 gfx::ImageSkia wallpaper = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
282 ash::Shell::GetInstance() 280 Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage(
283 ->desktop_background_controller() 281 wallpaper, wallpaper::WALLPAPER_LAYOUT_TILE);
284 ->SetWallpaperImage(wallpaper, wallpaper::WALLPAPER_LAYOUT_TILE);
285 } 282 }
286 283
287 void InitializeComponents() { 284 void InitializeComponents() {
288 message_center::MessageCenter::Initialize(); 285 message_center::MessageCenter::Initialize();
289 286
290 #if defined(OS_CHROMEOS) 287 #if defined(OS_CHROMEOS)
291 ui::DeviceDataManager::CreateInstance(); 288 ui::DeviceDataManager::CreateInstance();
292 chromeos::DBusThreadManager::Initialize(); 289 chromeos::DBusThreadManager::Initialize();
293 bluez::BluezDBusManager::Initialize( 290 bluez::BluezDBusManager::Initialize(
294 chromeos::DBusThreadManager::Get()->GetSystemBus(), 291 chromeos::DBusThreadManager::Get()->GetSystemBus(),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 void SysUIApplication::Create( 323 void SysUIApplication::Create(
327 ::shell::Connection* connection, 324 ::shell::Connection* connection,
328 mojo::InterfaceRequest<mash::shelf::mojom::ShelfController> request) { 325 mojo::InterfaceRequest<mash::shelf::mojom::ShelfController> request) {
329 mash::shelf::mojom::ShelfController* shelf_controller = 326 mash::shelf::mojom::ShelfController* shelf_controller =
330 static_cast<ShelfDelegateMus*>(Shell::GetInstance()->GetShelfDelegate()); 327 static_cast<ShelfDelegateMus*>(Shell::GetInstance()->GetShelfDelegate());
331 shelf_controller_bindings_.AddBinding(shelf_controller, std::move(request)); 328 shelf_controller_bindings_.AddBinding(shelf_controller, std::move(request));
332 } 329 }
333 330
334 } // namespace sysui 331 } // namespace sysui
335 } // namespace ash 332 } // namespace ash
OLDNEW
« no previous file with comments | « ash/sysui/shelf_delegate_mus.cc ('k') | chrome/browser/chromeos/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698