OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "mojo/application/application_runner_chromium.h" | 6 #include "mojo/application/application_runner_chromium.h" |
7 #include "mojo/common/tracing_impl.h" | 7 #include "mojo/common/tracing_impl.h" |
8 #include "mojo/public/c/system/main.h" | 8 #include "mojo/public/c/system/main.h" |
9 #include "mojo/public/cpp/application/application_delegate.h" | 9 #include "mojo/public/cpp/application/application_delegate.h" |
10 #include "mojo/public/cpp/application/service_provider_impl.h" | 10 #include "mojo/public/cpp/application/service_provider_impl.h" |
11 #include "mojo/services/view_manager/public/cpp/view_manager.h" | 11 #include "mojo/services/view_manager/public/cpp/view_manager.h" |
12 #include "mojo/services/view_manager/public/cpp/view_manager_delegate.h" | 12 #include "mojo/services/view_manager/public/cpp/view_manager_delegate.h" |
13 #include "services/window_manager/window_manager_app.h" | 13 #include "services/window_manager/window_manager_app.h" |
14 #include "services/window_manager/window_manager_delegate.h" | 14 #include "services/window_manager/window_manager_delegate.h" |
15 | 15 |
16 // ApplicationDelegate implementation file for WindowManager users (e.g. | 16 // ApplicationDelegate implementation file for WindowManager users (e.g. |
17 // core window manager tests) that do not want to provide their own | 17 // core window manager tests) that do not want to provide their own |
18 // ApplicationDelegate::Create(). | 18 // ApplicationDelegate::Create(). |
19 | 19 |
20 using mojo::View; | 20 using mojo::View; |
21 using mojo::ViewManager; | 21 using mojo::ViewManager; |
22 | 22 |
23 namespace window_manager { | 23 namespace window_manager { |
24 | 24 |
25 class DefaultWindowManager : public mojo::ApplicationDelegate, | 25 class DefaultWindowManager : public mojo::ApplicationDelegate, |
26 public mojo::ViewManagerDelegate, | 26 public mojo::ViewManagerDelegate, |
27 public WindowManagerDelegate { | 27 public WindowManagerDelegate { |
28 public: | 28 public: |
29 DefaultWindowManager() | 29 DefaultWindowManager() |
30 : window_manager_app_(new WindowManagerApp(this, this)), | 30 : window_manager_app_(new WindowManagerApp(this, this)), root_(nullptr) {} |
31 view_manager_(NULL), | |
32 root_(NULL) {} | |
33 ~DefaultWindowManager() override {} | 31 ~DefaultWindowManager() override {} |
34 | 32 |
35 private: | 33 private: |
36 // Overridden from mojo::ApplicationDelegate: | 34 // Overridden from mojo::ApplicationDelegate: |
37 void Initialize(mojo::ApplicationImpl* impl) override { | 35 void Initialize(mojo::ApplicationImpl* impl) override { |
38 window_manager_app_->Initialize(impl); | 36 window_manager_app_->Initialize(impl); |
39 mojo::TracingImpl::Create(impl); | 37 mojo::TracingImpl::Create(impl); |
40 } | 38 } |
41 bool ConfigureIncomingConnection( | 39 bool ConfigureIncomingConnection( |
42 mojo::ApplicationConnection* connection) override { | 40 mojo::ApplicationConnection* connection) override { |
43 window_manager_app_->ConfigureIncomingConnection(connection); | 41 window_manager_app_->ConfigureIncomingConnection(connection); |
44 return true; | 42 return true; |
45 } | 43 } |
46 | 44 |
47 // Overridden from ViewManagerDelegate: | 45 // Overridden from ViewManagerDelegate: |
48 void OnEmbed(ViewManager* view_manager, | 46 void OnEmbed(View* root, |
49 View* root, | |
50 mojo::ServiceProviderImpl* exported_services, | 47 mojo::ServiceProviderImpl* exported_services, |
51 scoped_ptr<mojo::ServiceProvider> imported_services) override { | 48 scoped_ptr<mojo::ServiceProvider> imported_services) override { |
52 view_manager_ = view_manager; | |
53 root_ = root; | 49 root_ = root; |
54 } | 50 } |
55 void OnViewManagerDisconnected(ViewManager* view_manager) override {} | 51 void OnViewManagerDisconnected(ViewManager* view_manager) override {} |
56 | 52 |
57 // Overridden from WindowManagerDelegate: | 53 // Overridden from WindowManagerDelegate: |
58 void Embed( | 54 void Embed( |
59 const mojo::String& url, | 55 const mojo::String& url, |
60 mojo::InterfaceRequest<mojo::ServiceProvider> service_provider) override { | 56 mojo::InterfaceRequest<mojo::ServiceProvider> service_provider) override { |
61 View* view = View::Create(view_manager_); | 57 View* view = View::Create(root_->view_manager()); |
62 root_->AddChild(view); | 58 root_->AddChild(view); |
63 view->SetVisible(true); | 59 view->SetVisible(true); |
64 view->Embed(url, scoped_ptr<mojo::ServiceProviderImpl>( | 60 view->Embed(url, scoped_ptr<mojo::ServiceProviderImpl>( |
65 new mojo::ServiceProviderImpl).Pass()); | 61 new mojo::ServiceProviderImpl).Pass()); |
66 } | 62 } |
67 | 63 |
68 scoped_ptr<WindowManagerApp> window_manager_app_; | 64 scoped_ptr<WindowManagerApp> window_manager_app_; |
69 | 65 |
70 ViewManager* view_manager_; | |
71 View* root_; | 66 View* root_; |
72 | 67 |
73 MOJO_DISALLOW_COPY_AND_ASSIGN(DefaultWindowManager); | 68 MOJO_DISALLOW_COPY_AND_ASSIGN(DefaultWindowManager); |
74 }; | 69 }; |
75 | 70 |
76 } // namespace window_manager | 71 } // namespace window_manager |
77 | 72 |
78 MojoResult MojoMain(MojoHandle shell_handle) { | 73 MojoResult MojoMain(MojoHandle shell_handle) { |
79 mojo::ApplicationRunnerChromium runner( | 74 mojo::ApplicationRunnerChromium runner( |
80 new window_manager::DefaultWindowManager); | 75 new window_manager::DefaultWindowManager); |
81 return runner.Run(shell_handle); | 76 return runner.Run(shell_handle); |
82 } | 77 } |
OLD | NEW |