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

Side by Side Diff: mojo/shell/application_manager.cc

Issue 1351963002: Some more minor cleanup to ApplicationManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 3 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 | « mojo/shell/application_manager.h ('k') | mojo/shell/application_manager_unittest.cc » ('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 "mojo/shell/application_manager.h" 5 #include "mojo/shell/application_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 52
53 ApplicationManager::ApplicationManager( 53 ApplicationManager::ApplicationManager(
54 scoped_ptr<PackageManager> package_manager) 54 scoped_ptr<PackageManager> package_manager)
55 : package_manager_(package_manager.Pass()), 55 : package_manager_(package_manager.Pass()),
56 content_handler_id_counter_(0u), 56 content_handler_id_counter_(0u),
57 weak_ptr_factory_(this) { 57 weak_ptr_factory_(this) {
58 package_manager_->SetApplicationManager(this); 58 package_manager_->SetApplicationManager(this);
59 } 59 }
60 60
61 ApplicationManager::~ApplicationManager() { 61 ApplicationManager::~ApplicationManager() {
62 URLToContentHandlerMap url_to_content_handler(url_to_content_handler_); 62 IdentityToContentHandlerMap identity_to_content_handler(
63 for (auto& pair : url_to_content_handler) 63 identity_to_content_handler_);
64 for (auto& pair : identity_to_content_handler)
64 pair.second->CloseConnection(); 65 pair.second->CloseConnection();
65 TerminateShellConnections(); 66 TerminateShellConnections();
66 STLDeleteValues(&url_to_loader_); 67 STLDeleteValues(&url_to_loader_);
67 } 68 }
68 69
69 void ApplicationManager::TerminateShellConnections() { 70 void ApplicationManager::TerminateShellConnections() {
70 STLDeleteValues(&identity_to_instance_); 71 STLDeleteValues(&identity_to_instance_);
71 } 72 }
72 73
73 void ApplicationManager::ConnectToApplication( 74 void ApplicationManager::ConnectToApplication(
74 ApplicationInstance* originator,
75 URLRequestPtr app_url_request,
76 const std::string& qualifier,
77 InterfaceRequest<ServiceProvider> services,
78 ServiceProviderPtr exposed_services,
79 const CapabilityFilter& filter,
80 const base::Closure& on_application_end,
81 const Shell::ConnectToApplicationCallback& connect_callback) {
82 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams);
83 params->SetOriginatorInfo(originator);
84 params->SetURLInfo(app_url_request.Pass());
85 params->set_qualifier(qualifier);
86 params->set_services(services.Pass());
87 params->set_exposed_services(exposed_services.Pass());
88 params->set_filter(filter);
89 params->set_on_application_end(on_application_end);
90 params->set_connect_callback(connect_callback);
91
92 ConnectToApplication(params.Pass());
93 }
94
95 void ApplicationManager::ConnectToApplication(
96 scoped_ptr<ConnectToApplicationParams> params) { 75 scoped_ptr<ConnectToApplicationParams> params) {
97 GURL original_url = params->app_url(); 76 GURL original_url = params->app_url();
98 URLRequestPtr original_url_request = params->TakeAppURLRequest(); 77 URLRequestPtr original_url_request = params->TakeAppURLRequest();
99 78
100 TRACE_EVENT_INSTANT1("mojo_shell", "ApplicationManager::ConnectToApplication", 79 TRACE_EVENT_INSTANT1("mojo_shell", "ApplicationManager::ConnectToApplication",
101 TRACE_EVENT_SCOPE_THREAD, "original_url", 80 TRACE_EVENT_SCOPE_THREAD, "original_url",
102 original_url.spec()); 81 original_url.spec());
103 DCHECK(original_url.is_valid()); 82 DCHECK(original_url.is_valid());
104 DCHECK(original_url_request); 83 DCHECK(original_url_request);
105 84
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 return true; 120 return true;
142 } 121 }
143 122
144 void ApplicationManager::ConnectToApplicationWithLoader( 123 void ApplicationManager::ConnectToApplicationWithLoader(
145 scoped_ptr<ConnectToApplicationParams>* params, 124 scoped_ptr<ConnectToApplicationParams>* params,
146 const GURL& resolved_url, 125 const GURL& resolved_url,
147 ApplicationLoader* loader) { 126 ApplicationLoader* loader) {
148 if (!(*params)->app_url().SchemeIs("mojo")) 127 if (!(*params)->app_url().SchemeIs("mojo"))
149 (*params)->SetURLInfo(resolved_url); 128 (*params)->SetURLInfo(resolved_url);
150 129
151 loader->Load(resolved_url, RegisterInstance(params->Pass(), nullptr)); 130 loader->Load(resolved_url, CreateInstance(params->Pass(), nullptr));
152 } 131 }
153 132
154 InterfaceRequest<Application> ApplicationManager::RegisterInstance( 133 InterfaceRequest<Application> ApplicationManager::CreateInstance(
155 scoped_ptr<ConnectToApplicationParams> params, 134 scoped_ptr<ConnectToApplicationParams> params,
156 ApplicationInstance** resulting_instance) { 135 ApplicationInstance** resulting_instance) {
157 Identity app_identity(params->app_url(), params->qualifier()); 136 Identity app_identity(params->app_url(), params->qualifier());
158 137
159 ApplicationPtr application; 138 ApplicationPtr application;
160 InterfaceRequest<Application> application_request = GetProxy(&application); 139 InterfaceRequest<Application> application_request = GetProxy(&application);
161 ApplicationInstance* instance = new ApplicationInstance( 140 ApplicationInstance* instance = new ApplicationInstance(
162 application.Pass(), this, params->originator_identity(), app_identity, 141 application.Pass(), this, params->originator_identity(), app_identity,
163 params->filter(), Shell::kInvalidContentHandlerID, 142 params->filter(), Shell::kInvalidContentHandlerID,
164 params->on_application_end()); 143 params->on_application_end());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 197
219 Identity originator_identity = params->originator_identity(); 198 Identity originator_identity = params->originator_identity();
220 CapabilityFilter originator_filter = params->originator_filter(); 199 CapabilityFilter originator_filter = params->originator_filter();
221 CapabilityFilter filter = params->filter(); 200 CapabilityFilter filter = params->filter();
222 GURL app_url = params->app_url(); 201 GURL app_url = params->app_url();
223 std::string qualifier = params->qualifier(); 202 std::string qualifier = params->qualifier();
224 Shell::ConnectToApplicationCallback connect_callback = 203 Shell::ConnectToApplicationCallback connect_callback =
225 params->connect_callback(); 204 params->connect_callback();
226 params->set_connect_callback(EmptyConnectCallback()); 205 params->set_connect_callback(EmptyConnectCallback());
227 ApplicationInstance* app = nullptr; 206 ApplicationInstance* app = nullptr;
228 InterfaceRequest<Application> request(RegisterInstance(params.Pass(), &app)); 207 InterfaceRequest<Application> request(CreateInstance(params.Pass(), &app));
229 208
230 209
231 GURL content_handler_url; 210 GURL content_handler_url;
232 URLResponsePtr new_response; 211 URLResponsePtr new_response;
233 if (package_manager_->HandleWithContentHandler(fetcher.get(), 212 if (package_manager_->HandleWithContentHandler(fetcher.get(),
234 app_url, 213 app_url,
235 blocking_pool_, 214 blocking_pool_,
236 &new_response, 215 &new_response,
237 &content_handler_url, 216 &content_handler_url,
238 &qualifier)) { 217 &qualifier)) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 const Identity& originator_identity, 271 const Identity& originator_identity,
293 const CapabilityFilter& originator_filter, 272 const CapabilityFilter& originator_filter,
294 const GURL& content_handler_url, 273 const GURL& content_handler_url,
295 const std::string& qualifier, 274 const std::string& qualifier,
296 const CapabilityFilter& filter, 275 const CapabilityFilter& filter,
297 const Shell::ConnectToApplicationCallback& connect_callback, 276 const Shell::ConnectToApplicationCallback& connect_callback,
298 ApplicationInstance* app, 277 ApplicationInstance* app,
299 InterfaceRequest<Application> application_request, 278 InterfaceRequest<Application> application_request,
300 URLResponsePtr url_response) { 279 URLResponsePtr url_response) {
301 ContentHandlerConnection* connection = nullptr; 280 ContentHandlerConnection* connection = nullptr;
302 std::pair<GURL, std::string> key(content_handler_url, qualifier); 281 Identity content_handler_identity(content_handler_url, qualifier);
303 // TODO(beng): Figure out the extent to which capability filter should be 282 // TODO(beng): Figure out the extent to which capability filter should be
304 // factored into handler identity. 283 // factored into handler identity.
305 URLToContentHandlerMap::iterator iter = url_to_content_handler_.find(key); 284 IdentityToContentHandlerMap::iterator iter =
306 if (iter != url_to_content_handler_.end()) { 285 identity_to_content_handler_.find(content_handler_identity);
286 if (iter != identity_to_content_handler_.end()) {
307 connection = iter->second; 287 connection = iter->second;
308 } else { 288 } else {
309 connection = new ContentHandlerConnection( 289 connection = new ContentHandlerConnection(
310 this, originator_identity, originator_filter, content_handler_url, 290 this, originator_identity, originator_filter, content_handler_url,
311 qualifier, filter, ++content_handler_id_counter_); 291 qualifier, filter, ++content_handler_id_counter_);
312 url_to_content_handler_[key] = connection; 292 identity_to_content_handler_[content_handler_identity] = connection;
313 } 293 }
314 294
315 app->set_requesting_content_handler_id(connection->id()); 295 app->set_requesting_content_handler_id(connection->id());
316 connection->content_handler()->StartApplication(application_request.Pass(), 296 connection->content_handler()->StartApplication(application_request.Pass(),
317 url_response.Pass()); 297 url_response.Pass());
318 connect_callback.Run(connection->id()); 298 connect_callback.Run(connection->id());
319 } 299 }
320 300
321 void ApplicationManager::SetLoaderForURL(scoped_ptr<ApplicationLoader> loader, 301 void ApplicationManager::SetLoaderForURL(scoped_ptr<ApplicationLoader> loader,
322 const GURL& url) { 302 const GURL& url) {
(...skipping 20 matching lines...) Expand all
343 DCHECK(it != identity_to_instance_.end()); 323 DCHECK(it != identity_to_instance_.end());
344 delete it->second; 324 delete it->second;
345 identity_to_instance_.erase(it); 325 identity_to_instance_.erase(it);
346 if (!on_application_end.is_null()) 326 if (!on_application_end.is_null())
347 on_application_end.Run(); 327 on_application_end.Run();
348 } 328 }
349 329
350 void ApplicationManager::OnContentHandlerConnectionClosed( 330 void ApplicationManager::OnContentHandlerConnectionClosed(
351 ContentHandlerConnection* content_handler) { 331 ContentHandlerConnection* content_handler) {
352 // Remove the mapping to the content handler. 332 // Remove the mapping to the content handler.
353 auto it = url_to_content_handler_.find( 333 auto it = identity_to_content_handler_.find(
354 std::make_pair(content_handler->content_handler_url(), 334 Identity(content_handler->content_handler_url(),
355 content_handler->content_handler_qualifier())); 335 content_handler->content_handler_qualifier()));
356 DCHECK(it != url_to_content_handler_.end()); 336 DCHECK(it != identity_to_content_handler_.end());
357 url_to_content_handler_.erase(it); 337 identity_to_content_handler_.erase(it);
358 } 338 }
359 339
360 void ApplicationManager::CleanupRunner(NativeRunner* runner) { 340 void ApplicationManager::CleanupRunner(NativeRunner* runner) {
361 native_runners_.erase( 341 native_runners_.erase(
362 std::find(native_runners_.begin(), native_runners_.end(), runner)); 342 std::find(native_runners_.begin(), native_runners_.end(), runner));
363 } 343 }
364 344
365 ScopedMessagePipeHandle ApplicationManager::ConnectToServiceByName(
366 const GURL& application_url,
367 const std::string& interface_name) {
368 ServiceProviderPtr services;
369 scoped_ptr<ConnectToApplicationParams> params(new ConnectToApplicationParams);
370 params->SetURLInfo(application_url);
371 params->set_services(GetProxy(&services));
372 params->set_filter(GetPermissiveCapabilityFilter());
373 ConnectToApplication(params.Pass());
374 MessagePipe pipe;
375 services->ConnectToService(interface_name, pipe.handle1.Pass());
376 return pipe.handle0.Pass();
377 }
378
379 Shell::ConnectToApplicationCallback EmptyConnectCallback() { 345 Shell::ConnectToApplicationCallback EmptyConnectCallback() {
380 return base::Bind(&OnEmptyOnConnectCallback); 346 return base::Bind(&OnEmptyOnConnectCallback);
381 } 347 }
382 348
383 } // namespace shell 349 } // namespace shell
384 } // namespace mojo 350 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/shell/application_manager.h ('k') | mojo/shell/application_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698