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

Side by Side Diff: ui/views/mus/native_widget_mus.cc

Issue 1676713002: ash/mash: Add a mus-client that sets up ash to provide the system ui for mash. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "ui/views/mus/native_widget_mus.h" 5 #include "ui/views/mus/native_widget_mus.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/thread_task_runner_handle.h" 8 #include "base/thread_task_runner_handle.h"
9 #include "components/mus/public/cpp/property_type_converters.h" 9 #include "components/mus/public/cpp/property_type_converters.h"
10 #include "components/mus/public/cpp/window.h" 10 #include "components/mus/public/cpp/window.h"
(...skipping 12 matching lines...) Expand all
23 #include "ui/native_theme/native_theme_aura.h" 23 #include "ui/native_theme/native_theme_aura.h"
24 #include "ui/views/mus/platform_window_mus.h" 24 #include "ui/views/mus/platform_window_mus.h"
25 #include "ui/views/mus/surface_context_factory.h" 25 #include "ui/views/mus/surface_context_factory.h"
26 #include "ui/views/mus/window_manager_constants_converters.h" 26 #include "ui/views/mus/window_manager_constants_converters.h"
27 #include "ui/views/mus/window_manager_frame_values.h" 27 #include "ui/views/mus/window_manager_frame_values.h"
28 #include "ui/views/mus/window_tree_host_mus.h" 28 #include "ui/views/mus/window_tree_host_mus.h"
29 #include "ui/views/widget/widget_delegate.h" 29 #include "ui/views/widget/widget_delegate.h"
30 #include "ui/views/window/custom_frame_view.h" 30 #include "ui/views/window/custom_frame_view.h"
31 #include "ui/wm/core/base_focus_rules.h" 31 #include "ui/wm/core/base_focus_rules.h"
32 #include "ui/wm/core/capture_controller.h" 32 #include "ui/wm/core/capture_controller.h"
33 #include "ui/wm/core/default_screen_position_client.h"
33 #include "ui/wm/core/focus_controller.h" 34 #include "ui/wm/core/focus_controller.h"
34 35
35 DECLARE_WINDOW_PROPERTY_TYPE(mus::Window*); 36 DECLARE_WINDOW_PROPERTY_TYPE(mus::Window*);
36 37
37 namespace views { 38 namespace views {
38 namespace { 39 namespace {
39 40
40 DEFINE_WINDOW_PROPERTY_KEY(mus::Window*, kMusWindow, nullptr); 41 DEFINE_WINDOW_PROPERTY_KEY(mus::Window*, kMusWindow, nullptr);
41 42
42 MUS_DEFINE_WINDOW_PROPERTY_KEY(NativeWidgetMus*, kNativeWidgetMusKey, nullptr); 43 MUS_DEFINE_WINDOW_PROPERTY_KEY(NativeWidgetMus*, kNativeWidgetMusKey, nullptr);
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 } // namespace 173 } // namespace
173 174
174 //////////////////////////////////////////////////////////////////////////////// 175 ////////////////////////////////////////////////////////////////////////////////
175 // NativeWidgetMus, public: 176 // NativeWidgetMus, public:
176 177
177 NativeWidgetMus::NativeWidgetMus(internal::NativeWidgetDelegate* delegate, 178 NativeWidgetMus::NativeWidgetMus(internal::NativeWidgetDelegate* delegate,
178 mojo::Shell* shell, 179 mojo::Shell* shell,
179 mus::Window* window, 180 mus::Window* window,
180 mus::mojom::SurfaceType surface_type) 181 mus::mojom::SurfaceType surface_type)
181 : window_(window), 182 : window_(window),
182 shell_(shell),
183 native_widget_delegate_(delegate), 183 native_widget_delegate_(delegate),
184 surface_type_(surface_type), 184 surface_type_(surface_type),
185 show_state_before_fullscreen_(ui::PLATFORM_WINDOW_STATE_UNKNOWN), 185 show_state_before_fullscreen_(ui::PLATFORM_WINDOW_STATE_UNKNOWN),
186 ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET), 186 ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET),
187 content_(new aura::Window(this)), 187 content_(new aura::Window(this)),
188 close_widget_factory_(this) { 188 close_widget_factory_(this) {
189 // TODO(fsamuel): Figure out lifetime of |window_|. 189 // TODO(fsamuel): Figure out lifetime of |window_|.
190 aura::SetMusWindow(content_, window_); 190 aura::SetMusWindow(content_, window_);
191 191
192 window->SetLocalProperty(kNativeWidgetMusKey, this); 192 window->SetLocalProperty(kNativeWidgetMusKey, this);
193 // WindowTreeHost creates the compositor using the ContextFactory from
sky 2016/02/08 17:42:15 Seems better to do initialization in InitNativeWid
sadrul 2016/02/08 18:33:24 We need to install the RootWindowSettings for the
194 // aura::Env. Install |context_factory_| there so that |context_factory_| is
195 // picked up.
196 ui::ContextFactory* default_context_factory =
197 aura::Env::GetInstance()->context_factory();
198 // For Chrome, we need the GpuProcessTransportFactory so that renderer and
199 // browser pixels are composited into a single backing
200 // SoftwareOutputDeviceMus.
201 if (!default_context_factory) {
202 context_factory_.reset(
203 new SurfaceContextFactory(shell, window_, surface_type_));
204 aura::Env::GetInstance()->set_context_factory(context_factory_.get());
205 }
206 window_tree_host_.reset(new WindowTreeHostMus(shell, this, window_));
207 aura::Env::GetInstance()->set_context_factory(default_context_factory);
193 } 208 }
194 209
195 NativeWidgetMus::~NativeWidgetMus() { 210 NativeWidgetMus::~NativeWidgetMus() {
196 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) 211 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET)
197 delete native_widget_delegate_; 212 delete native_widget_delegate_;
198 else 213 else
199 CloseNow(); 214 CloseNow();
200 } 215 }
201 216
202 // static 217 // static
203 void NativeWidgetMus::NotifyFrameChanged( 218 void NativeWidgetMus::NotifyFrameChanged(
204 mus::WindowTreeConnection* connection) { 219 mus::WindowTreeConnection* connection) {
205 for (mus::Window* window : connection->GetRoots()) { 220 for (mus::Window* window : connection->GetRoots()) {
206 NativeWidgetMus* native_widget = 221 NativeWidgetMus* native_widget =
207 window->GetLocalProperty(kNativeWidgetMusKey); 222 window->GetLocalProperty(kNativeWidgetMusKey);
208 if (native_widget && native_widget->GetWidget()->non_client_view()) { 223 if (native_widget && native_widget->GetWidget()->non_client_view()) {
209 native_widget->GetWidget()->non_client_view()->Layout(); 224 native_widget->GetWidget()->non_client_view()->Layout();
210 native_widget->GetWidget()->non_client_view()->SchedulePaint(); 225 native_widget->GetWidget()->non_client_view()->SchedulePaint();
211 native_widget->UpdateClientArea(); 226 native_widget->UpdateClientArea();
212 } 227 }
213 } 228 }
214 } 229 }
215 230
231 aura::Window* NativeWidgetMus::GetRootWindow() {
232 return window_tree_host_->window();
233 }
234
216 void NativeWidgetMus::OnPlatformWindowClosed() { 235 void NativeWidgetMus::OnPlatformWindowClosed() {
217 native_widget_delegate_->OnNativeWidgetDestroying(); 236 native_widget_delegate_->OnNativeWidgetDestroying();
218 237
219 window_tree_client_.reset(); // Uses |content_|. 238 window_tree_client_.reset(); // Uses |content_|.
220 capture_client_.reset(); // Uses |content_|. 239 capture_client_.reset(); // Uses |content_|.
221 240
222 window_tree_host_->RemoveObserver(this); 241 window_tree_host_->RemoveObserver(this);
223 window_tree_host_.reset(); 242 window_tree_host_.reset();
224 243
225 window_ = nullptr; 244 window_ = nullptr;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 304
286 NonClientFrameView* NativeWidgetMus::CreateNonClientFrameView() { 305 NonClientFrameView* NativeWidgetMus::CreateNonClientFrameView() {
287 return new ClientSideNonClientFrameView(GetWidget()); 306 return new ClientSideNonClientFrameView(GetWidget());
288 } 307 }
289 308
290 void NativeWidgetMus::InitNativeWidget(const Widget::InitParams& params) { 309 void NativeWidgetMus::InitNativeWidget(const Widget::InitParams& params) {
291 ownership_ = params.ownership; 310 ownership_ = params.ownership;
292 window_->SetCanFocus(params.activatable == 311 window_->SetCanFocus(params.activatable ==
293 Widget::InitParams::ACTIVATABLE_YES); 312 Widget::InitParams::ACTIVATABLE_YES);
294 313
295 // WindowTreeHost creates the compositor using the ContextFactory from
296 // aura::Env. Install |context_factory_| there so that |context_factory_| is
297 // picked up.
298 ui::ContextFactory* default_context_factory =
299 aura::Env::GetInstance()->context_factory();
300 // For Chrome, we need the GpuProcessTransportFactory so that renderer and
301 // browser pixels are composited into a single backing
302 // SoftwareOutputDeviceMus.
303 if (!default_context_factory) {
304 if (!context_factory_) {
305 context_factory_.reset(new SurfaceContextFactory(shell_, window_,
306 surface_type_));
307 }
308 aura::Env::GetInstance()->set_context_factory(context_factory_.get());
309 }
310 window_tree_host_.reset(new WindowTreeHostMus(shell_, this, window_));
311 window_tree_host_->AddObserver(this); 314 window_tree_host_->AddObserver(this);
312 window_tree_host_->InitHost(); 315 window_tree_host_->InitHost();
313 aura::Env::GetInstance()->set_context_factory(default_context_factory);
314 window_tree_host_->window()->SetProperty(kMusWindow, window_); 316 window_tree_host_->window()->SetProperty(kMusWindow, window_);
315 317
316 focus_client_.reset(new wm::FocusController(new FocusRulesImpl)); 318 focus_client_.reset(new wm::FocusController(new FocusRulesImpl));
317 319
318 aura::client::SetFocusClient(window_tree_host_->window(), 320 aura::client::SetFocusClient(window_tree_host_->window(),
319 focus_client_.get()); 321 focus_client_.get());
320 aura::client::SetActivationClient(window_tree_host_->window(), 322 aura::client::SetActivationClient(window_tree_host_->window(),
321 focus_client_.get()); 323 focus_client_.get());
324 screen_position_client_.reset(new wm::DefaultScreenPositionClient());
325 aura::client::SetScreenPositionClient(window_tree_host_->window(),
326 screen_position_client_.get());
327
322 window_tree_client_.reset( 328 window_tree_client_.reset(
323 new NativeWidgetMusWindowTreeClient(window_tree_host_->window())); 329 new NativeWidgetMusWindowTreeClient(window_tree_host_->window()));
324 window_tree_host_->window()->AddPreTargetHandler(focus_client_.get()); 330 window_tree_host_->window()->AddPreTargetHandler(focus_client_.get());
325 window_tree_host_->window()->SetLayoutManager( 331 window_tree_host_->window()->SetLayoutManager(
326 new ContentWindowLayoutManager(window_tree_host_->window(), content_)); 332 new ContentWindowLayoutManager(window_tree_host_->window(), content_));
327 capture_client_.reset( 333 capture_client_.reset(
328 new aura::client::DefaultCaptureClient(window_tree_host_->window())); 334 new aura::client::DefaultCaptureClient(window_tree_host_->window()));
329 335
330 content_->SetType(ui::wm::WINDOW_TYPE_NORMAL); 336 content_->SetType(ui::wm::WINDOW_TYPE_NORMAL);
331 content_->Init(ui::LAYER_TEXTURED); 337 content_->Init(ui::LAYER_TEXTURED);
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 854
849 void NativeWidgetMus::OnGestureEvent(ui::GestureEvent* event) { 855 void NativeWidgetMus::OnGestureEvent(ui::GestureEvent* event) {
850 native_widget_delegate_->OnGestureEvent(event); 856 native_widget_delegate_->OnGestureEvent(event);
851 } 857 }
852 858
853 void NativeWidgetMus::OnHostCloseRequested(const aura::WindowTreeHost* host) { 859 void NativeWidgetMus::OnHostCloseRequested(const aura::WindowTreeHost* host) {
854 GetWidget()->Close(); 860 GetWidget()->Close();
855 } 861 }
856 862
857 } // namespace views 863 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698