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

Side by Side Diff: components/mus/mus_app.cc

Issue 1725353003: Eliminate mojo::Shell client lib class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@15connector
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
« no previous file with comments | « components/mus/mus_app.h ('k') | components/mus/public/cpp/lib/window_tree_client_impl.h » ('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 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 "components/mus/mus_app.h" 5 #include "components/mus/mus_app.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
11 #include "base/threading/platform_thread.h" 11 #include "base/threading/platform_thread.h"
12 #include "components/mus/common/args.h" 12 #include "components/mus/common/args.h"
13 #include "components/mus/gles2/gpu_impl.h" 13 #include "components/mus/gles2/gpu_impl.h"
14 #include "components/mus/ws/client_connection.h" 14 #include "components/mus/ws/client_connection.h"
15 #include "components/mus/ws/connection_manager.h" 15 #include "components/mus/ws/connection_manager.h"
16 #include "components/mus/ws/window_tree_factory.h" 16 #include "components/mus/ws/window_tree_factory.h"
17 #include "components/mus/ws/window_tree_host_connection.h" 17 #include "components/mus/ws/window_tree_host_connection.h"
18 #include "components/mus/ws/window_tree_host_impl.h" 18 #include "components/mus/ws/window_tree_host_impl.h"
19 #include "components/mus/ws/window_tree_impl.h" 19 #include "components/mus/ws/window_tree_impl.h"
20 #include "components/resource_provider/public/cpp/resource_loader.h" 20 #include "components/resource_provider/public/cpp/resource_loader.h"
21 #include "mojo/public/c/system/main.h" 21 #include "mojo/public/c/system/main.h"
22 #include "mojo/services/tracing/public/cpp/tracing_impl.h" 22 #include "mojo/services/tracing/public/cpp/tracing_impl.h"
23 #include "mojo/shell/public/cpp/connection.h" 23 #include "mojo/shell/public/cpp/connection.h"
24 #include "mojo/shell/public/cpp/shell.h" 24 #include "mojo/shell/public/cpp/connector.h"
25 #include "ui/base/resource/resource_bundle.h" 25 #include "ui/base/resource/resource_bundle.h"
26 #include "ui/base/ui_base_paths.h" 26 #include "ui/base/ui_base_paths.h"
27 #include "ui/events/event_switches.h" 27 #include "ui/events/event_switches.h"
28 #include "ui/events/platform/platform_event_source.h" 28 #include "ui/events/platform/platform_event_source.h"
29 #include "ui/gl/gl_surface.h" 29 #include "ui/gl/gl_surface.h"
30 30
31 #if defined(USE_X11) 31 #if defined(USE_X11)
32 #include <X11/Xlib.h> 32 #include <X11/Xlib.h>
33 #include "base/command_line.h" 33 #include "base/command_line.h"
34 #include "ui/platform_window/x11/x11_window.h" 34 #include "ui/platform_window/x11/x11_window.h"
(...skipping 16 matching lines...) Expand all
51 51
52 } // namespace 52 } // namespace
53 53
54 // TODO(sky): this is a pretty typical pattern, make it easier to do. 54 // TODO(sky): this is a pretty typical pattern, make it easier to do.
55 struct MandolineUIServicesApp::PendingRequest { 55 struct MandolineUIServicesApp::PendingRequest {
56 scoped_ptr<mojo::InterfaceRequest<mojom::DisplayManager>> dm_request; 56 scoped_ptr<mojo::InterfaceRequest<mojom::DisplayManager>> dm_request;
57 scoped_ptr<mojo::InterfaceRequest<mojom::WindowTreeFactory>> wtf_request; 57 scoped_ptr<mojo::InterfaceRequest<mojom::WindowTreeFactory>> wtf_request;
58 }; 58 };
59 59
60 MandolineUIServicesApp::MandolineUIServicesApp() 60 MandolineUIServicesApp::MandolineUIServicesApp()
61 : shell_(nullptr) {} 61 : connector_(nullptr) {}
62 62
63 MandolineUIServicesApp::~MandolineUIServicesApp() { 63 MandolineUIServicesApp::~MandolineUIServicesApp() {
64 if (gpu_state_) 64 if (gpu_state_)
65 gpu_state_->StopThreads(); 65 gpu_state_->StopThreads();
66 // Destroy |connection_manager_| first, since it depends on |event_source_|. 66 // Destroy |connection_manager_| first, since it depends on |event_source_|.
67 connection_manager_.reset(); 67 connection_manager_.reset();
68 } 68 }
69 69
70 void MandolineUIServicesApp::InitializeResources(mojo::Shell* shell) { 70 void MandolineUIServicesApp::InitializeResources(mojo::Connector* connector) {
71 if (ui::ResourceBundle::HasSharedInstance()) 71 if (ui::ResourceBundle::HasSharedInstance())
72 return; 72 return;
73 73
74 std::set<std::string> resource_paths; 74 std::set<std::string> resource_paths;
75 resource_paths.insert(kResourceFileStrings); 75 resource_paths.insert(kResourceFileStrings);
76 resource_paths.insert(kResourceFile100); 76 resource_paths.insert(kResourceFile100);
77 resource_paths.insert(kResourceFile200); 77 resource_paths.insert(kResourceFile200);
78 78
79 resource_provider::ResourceLoader resource_loader(shell, resource_paths); 79 resource_provider::ResourceLoader resource_loader(connector, resource_paths);
80 if (!resource_loader.BlockUntilLoaded()) 80 if (!resource_loader.BlockUntilLoaded())
81 return; 81 return;
82 CHECK(resource_loader.loaded()); 82 CHECK(resource_loader.loaded());
83 ui::RegisterPathProvider(); 83 ui::RegisterPathProvider();
84 84
85 // Initialize resource bundle with 1x and 2x cursor bitmaps. 85 // Initialize resource bundle with 1x and 2x cursor bitmaps.
86 ui::ResourceBundle::InitSharedInstanceWithPakFileRegion( 86 ui::ResourceBundle::InitSharedInstanceWithPakFileRegion(
87 resource_loader.ReleaseFile(kResourceFileStrings), 87 resource_loader.ReleaseFile(kResourceFileStrings),
88 base::MemoryMappedFile::Region::kWholeFile); 88 base::MemoryMappedFile::Region::kWholeFile);
89 ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile( 89 ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile(
90 resource_loader.ReleaseFile(kResourceFile100), ui::SCALE_FACTOR_100P); 90 resource_loader.ReleaseFile(kResourceFile100), ui::SCALE_FACTOR_100P);
91 ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile( 91 ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile(
92 resource_loader.ReleaseFile(kResourceFile200), ui::SCALE_FACTOR_200P); 92 resource_loader.ReleaseFile(kResourceFile200), ui::SCALE_FACTOR_200P);
93 } 93 }
94 94
95 void MandolineUIServicesApp::Initialize(mojo::Shell* shell, 95 void MandolineUIServicesApp::Initialize(mojo::Connector* connector,
96 const std::string& url, 96 const std::string& url,
97 uint32_t id, 97 uint32_t id,
98 uint32_t user_id) { 98 uint32_t user_id) {
99 shell_ = shell; 99 connector_ = connector;
100 surfaces_state_ = new SurfacesState; 100 surfaces_state_ = new SurfacesState;
101 101
102 base::PlatformThread::SetName("mus"); 102 base::PlatformThread::SetName("mus");
103 103
104 #if defined(USE_X11) 104 #if defined(USE_X11)
105 XInitThreads(); 105 XInitThreads();
106 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 106 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
107 if (command_line->HasSwitch(kUseX11TestConfig)) { 107 if (command_line->HasSwitch(kUseX11TestConfig)) {
108 ui::test::SetUseOverrideRedirectWindowByDefault(true); 108 ui::test::SetUseOverrideRedirectWindowByDefault(true);
109 } 109 }
110 #endif 110 #endif
111 111
112 InitializeResources(shell); 112 InitializeResources(connector);
113 113
114 #if defined(USE_OZONE) 114 #if defined(USE_OZONE)
115 // The ozone platform can provide its own event source. So initialize the 115 // The ozone platform can provide its own event source. So initialize the
116 // platform before creating the default event source. 116 // platform before creating the default event source.
117 // TODO(rjkroege): Add tracing here. 117 // TODO(rjkroege): Add tracing here.
118 // Because GL libraries need to be initialized before entering the sandbox, 118 // Because GL libraries need to be initialized before entering the sandbox,
119 // in MUS, |InitializeForUI| will load the GL libraries. 119 // in MUS, |InitializeForUI| will load the GL libraries.
120 ui::OzonePlatform::InitializeForUI(); 120 ui::OzonePlatform::InitializeForUI();
121 #endif 121 #endif
122 122
123 // TODO(rjkroege): Enter sandbox here before we start threads in GpuState 123 // TODO(rjkroege): Enter sandbox here before we start threads in GpuState
124 // http://crbug.com/584532 124 // http://crbug.com/584532
125 125
126 #if !defined(OS_ANDROID) 126 #if !defined(OS_ANDROID)
127 event_source_ = ui::PlatformEventSource::CreateDefault(); 127 event_source_ = ui::PlatformEventSource::CreateDefault();
128 #endif 128 #endif
129 129
130 // TODO(rjkroege): It is possible that we might want to generalize the 130 // TODO(rjkroege): It is possible that we might want to generalize the
131 // GpuState object. 131 // GpuState object.
132 gpu_state_ = new GpuState(); 132 gpu_state_ = new GpuState();
133 connection_manager_.reset(new ws::ConnectionManager(this, surfaces_state_)); 133 connection_manager_.reset(new ws::ConnectionManager(this, surfaces_state_));
134 134
135 tracing_.Initialize(shell, url); 135 tracing_.Initialize(connector, url);
136 } 136 }
137 137
138 bool MandolineUIServicesApp::AcceptConnection(Connection* connection) { 138 bool MandolineUIServicesApp::AcceptConnection(Connection* connection) {
139 connection->AddInterface<Gpu>(this); 139 connection->AddInterface<Gpu>(this);
140 connection->AddInterface<mojom::DisplayManager>(this); 140 connection->AddInterface<mojom::DisplayManager>(this);
141 connection->AddInterface<mojom::WindowManagerFactoryService>(this); 141 connection->AddInterface<mojom::WindowManagerFactoryService>(this);
142 connection->AddInterface<mojom::WindowTreeFactory>(this); 142 connection->AddInterface<mojom::WindowTreeFactory>(this);
143 connection->AddInterface<WindowTreeHostFactory>(this); 143 connection->AddInterface<WindowTreeHostFactory>(this);
144 return true; 144 return true;
145 } 145 }
146 146
147 void MandolineUIServicesApp::OnFirstRootConnectionCreated() { 147 void MandolineUIServicesApp::OnFirstRootConnectionCreated() {
148 PendingRequests requests; 148 PendingRequests requests;
149 requests.swap(pending_requests_); 149 requests.swap(pending_requests_);
150 for (auto& request : requests) { 150 for (auto& request : requests) {
151 if (request->dm_request) 151 if (request->dm_request)
152 Create(nullptr, std::move(*request->dm_request)); 152 Create(nullptr, std::move(*request->dm_request));
153 else 153 else
154 Create(nullptr, std::move(*request->wtf_request)); 154 Create(nullptr, std::move(*request->wtf_request));
155 } 155 }
156 } 156 }
157 157
158 void MandolineUIServicesApp::OnNoMoreRootConnections() { 158 void MandolineUIServicesApp::OnNoMoreRootConnections() {
159 shell_->Quit(); 159 base::MessageLoop::current()->QuitWhenIdle();
160 } 160 }
161 161
162 ws::ClientConnection* 162 ws::ClientConnection*
163 MandolineUIServicesApp::CreateClientConnectionForEmbedAtWindow( 163 MandolineUIServicesApp::CreateClientConnectionForEmbedAtWindow(
164 ws::ConnectionManager* connection_manager, 164 ws::ConnectionManager* connection_manager,
165 mojo::InterfaceRequest<mojom::WindowTree> tree_request, 165 mojo::InterfaceRequest<mojom::WindowTree> tree_request,
166 ws::ServerWindow* root, 166 ws::ServerWindow* root,
167 uint32_t policy_bitmask, 167 uint32_t policy_bitmask,
168 mojom::WindowTreeClientPtr client) { 168 mojom::WindowTreeClientPtr client) {
169 scoped_ptr<ws::WindowTreeImpl> service( 169 scoped_ptr<ws::WindowTreeImpl> service(
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 } 223 }
224 224
225 void MandolineUIServicesApp::CreateWindowTreeHost( 225 void MandolineUIServicesApp::CreateWindowTreeHost(
226 mojo::InterfaceRequest<mojom::WindowTreeHost> host, 226 mojo::InterfaceRequest<mojom::WindowTreeHost> host,
227 mojom::WindowTreeClientPtr tree_client) { 227 mojom::WindowTreeClientPtr tree_client) {
228 DCHECK(connection_manager_); 228 DCHECK(connection_manager_);
229 229
230 // TODO(fsamuel): We need to make sure that only the window manager can create 230 // TODO(fsamuel): We need to make sure that only the window manager can create
231 // new roots. 231 // new roots.
232 ws::WindowTreeHostImpl* host_impl = new ws::WindowTreeHostImpl( 232 ws::WindowTreeHostImpl* host_impl = new ws::WindowTreeHostImpl(
233 connection_manager_.get(), shell_, gpu_state_, surfaces_state_); 233 connection_manager_.get(), connector_, gpu_state_, surfaces_state_);
234 234
235 // WindowTreeHostConnection manages its own lifetime. 235 // WindowTreeHostConnection manages its own lifetime.
236 host_impl->Init(new ws::WindowTreeHostConnectionImpl( 236 host_impl->Init(new ws::WindowTreeHostConnectionImpl(
237 std::move(host), make_scoped_ptr(host_impl), std::move(tree_client), 237 std::move(host), make_scoped_ptr(host_impl), std::move(tree_client),
238 connection_manager_.get())); 238 connection_manager_.get()));
239 } 239 }
240 240
241 } // namespace mus 241 } // namespace mus
OLDNEW
« no previous file with comments | « components/mus/mus_app.h ('k') | components/mus/public/cpp/lib/window_tree_client_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698