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

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

Issue 845593003: Pass ServiceProvider and ServiceProvider& params in Connect (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: use nullptr instead of ServiceProviderPtr(), fix ShellImpl Created 5 years, 11 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/application_manager/application_manager.h ('k') | mojo/application_manager/shell_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 "mojo/application_manager/application_manager.h" 5 #include "mojo/application_manager/application_manager.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 45
46 GURL ApplicationManager::Delegate::ResolveURL(const GURL& url) { 46 GURL ApplicationManager::Delegate::ResolveURL(const GURL& url) {
47 return url; 47 return url;
48 } 48 }
49 49
50 class ApplicationManager::ContentHandlerConnection : public ErrorHandler { 50 class ApplicationManager::ContentHandlerConnection : public ErrorHandler {
51 public: 51 public:
52 ContentHandlerConnection(ApplicationManager* manager, 52 ContentHandlerConnection(ApplicationManager* manager,
53 const GURL& content_handler_url) 53 const GURL& content_handler_url)
54 : manager_(manager), content_handler_url_(content_handler_url) { 54 : manager_(manager), content_handler_url_(content_handler_url) {
55 ServiceProviderPtr service_provider; 55 ServiceProviderPtr services;
56 StubServiceProvider* service_provider_impl = 56 manager->ConnectToApplication(content_handler_url, GURL(),
57 BindToProxy(new StubServiceProvider, &service_provider); 57 GetProxy(&services), nullptr);
58 manager->ConnectToApplication( 58 mojo::ConnectToService(services.get(), &content_handler_);
59 content_handler_url, GURL(), service_provider.Pass());
60 mojo::ConnectToService(service_provider_impl->client(), &content_handler_);
61 content_handler_.set_error_handler(this); 59 content_handler_.set_error_handler(this);
62 } 60 }
63 61
64 ContentHandler* content_handler() { return content_handler_.get(); } 62 ContentHandler* content_handler() { return content_handler_.get(); }
65 63
66 GURL content_handler_url() { return content_handler_url_; } 64 GURL content_handler_url() { return content_handler_url_; }
67 65
68 private: 66 private:
69 // ErrorHandler implementation: 67 // ErrorHandler implementation:
70 void OnConnectionError() override { manager_->OnContentHandlerError(this); } 68 void OnConnectionError() override { manager_->OnContentHandlerError(this); }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 STLDeleteValues(&scheme_to_loader_); 103 STLDeleteValues(&scheme_to_loader_);
106 } 104 }
107 105
108 void ApplicationManager::TerminateShellConnections() { 106 void ApplicationManager::TerminateShellConnections() {
109 STLDeleteValues(&url_to_shell_impl_); 107 STLDeleteValues(&url_to_shell_impl_);
110 } 108 }
111 109
112 void ApplicationManager::ConnectToApplication( 110 void ApplicationManager::ConnectToApplication(
113 const GURL& requested_url, 111 const GURL& requested_url,
114 const GURL& requestor_url, 112 const GURL& requestor_url,
115 ServiceProviderPtr service_provider) { 113 InterfaceRequest<ServiceProvider> services,
114 ServiceProviderPtr exposed_services) {
116 DCHECK(requested_url.is_valid()); 115 DCHECK(requested_url.is_valid());
117 ApplicationLoader* loader = GetLoaderForURL(requested_url, 116 ApplicationLoader* loader = GetLoaderForURL(requested_url,
118 DONT_INCLUDE_DEFAULT_LOADER); 117 DONT_INCLUDE_DEFAULT_LOADER);
119 if (loader) { 118 if (loader) {
120 ConnectToApplicationImpl(requested_url, requested_url, requestor_url, 119 ConnectToApplicationImpl(requested_url, requested_url, requestor_url,
121 service_provider.Pass(), loader); 120 services.Pass(), exposed_services.Pass(), loader);
122 return; 121 return;
123 } 122 }
124 123
125 GURL resolved_url = delegate_->ResolveURL(requested_url); 124 GURL resolved_url = delegate_->ResolveURL(requested_url);
126 loader = GetLoaderForURL(resolved_url, INCLUDE_DEFAULT_LOADER); 125 loader = GetLoaderForURL(resolved_url, INCLUDE_DEFAULT_LOADER);
127 if (loader) { 126 if (loader) {
128 ConnectToApplicationImpl(requested_url, resolved_url, requestor_url, 127 ConnectToApplicationImpl(requested_url, resolved_url, requestor_url,
129 service_provider.Pass(), loader); 128 services.Pass(), exposed_services.Pass(), loader);
130 return; 129 return;
131 } 130 }
132 131
133 LOG(WARNING) << "Could not find loader to load application: " 132 LOG(WARNING) << "Could not find loader to load application: "
134 << requested_url.spec(); 133 << requested_url.spec();
135 } 134 }
136 135
137 void ApplicationManager::ConnectToApplicationImpl( 136 void ApplicationManager::ConnectToApplicationImpl(
138 const GURL& requested_url, 137 const GURL& requested_url,
139 const GURL& resolved_url, 138 const GURL& resolved_url,
140 const GURL& requestor_url, 139 const GURL& requestor_url,
141 ServiceProviderPtr service_provider, 140 InterfaceRequest<ServiceProvider> services,
141 ServiceProviderPtr exposed_services,
142 ApplicationLoader* loader) { 142 ApplicationLoader* loader) {
143 ShellImpl* shell = nullptr; 143 ShellImpl* shell = nullptr;
144 URLToShellImplMap::const_iterator shell_it = 144 URLToShellImplMap::const_iterator shell_it =
145 url_to_shell_impl_.find(resolved_url); 145 url_to_shell_impl_.find(resolved_url);
146 if (shell_it != url_to_shell_impl_.end()) { 146 if (shell_it != url_to_shell_impl_.end()) {
147 shell = shell_it->second; 147 shell = shell_it->second;
148 } else { 148 } else {
149 MessagePipe pipe; 149 MessagePipe pipe;
150 shell = 150 shell =
151 new ShellImpl(pipe.handle0.Pass(), this, requested_url, resolved_url); 151 new ShellImpl(pipe.handle0.Pass(), this, requested_url, resolved_url);
152 url_to_shell_impl_[resolved_url] = shell; 152 url_to_shell_impl_[resolved_url] = shell;
153 shell->client()->Initialize(GetArgsForURL(requested_url)); 153 shell->client()->Initialize(GetArgsForURL(requested_url));
154 154
155 loader->Load(this, resolved_url, pipe.handle1.Pass(), 155 loader->Load(this, resolved_url, pipe.handle1.Pass(),
156 base::Bind(&ApplicationManager::LoadWithContentHandler, 156 base::Bind(&ApplicationManager::LoadWithContentHandler,
157 weak_ptr_factory_.GetWeakPtr())); 157 weak_ptr_factory_.GetWeakPtr()));
158 } 158 }
159 ConnectToClient(shell, resolved_url, requestor_url, service_provider.Pass()); 159 ConnectToClient(shell, resolved_url, requestor_url, services.Pass(),
160 exposed_services.Pass());
160 } 161 }
161 162
162 void ApplicationManager::ConnectToClient(ShellImpl* shell_impl, 163 void ApplicationManager::ConnectToClient(
163 const GURL& url, 164 ShellImpl* shell_impl,
164 const GURL& requestor_url, 165 const GURL& url,
165 ServiceProviderPtr service_provider) { 166 const GURL& requestor_url,
166 shell_impl->ConnectToClient(requestor_url, service_provider.Pass()); 167 InterfaceRequest<ServiceProvider> services,
168 ServiceProviderPtr exposed_services) {
169 shell_impl->ConnectToClient(requestor_url, services.Pass(),
170 exposed_services.Pass());
167 } 171 }
168 172
169 void ApplicationManager::RegisterExternalApplication( 173 void ApplicationManager::RegisterExternalApplication(
170 const GURL& url, 174 const GURL& url,
171 ScopedMessagePipeHandle shell_handle) { 175 ScopedMessagePipeHandle shell_handle) {
172 ShellImpl* shell_impl = new ShellImpl(shell_handle.Pass(), this, url, url); 176 ShellImpl* shell_impl = new ShellImpl(shell_handle.Pass(), this, url, url);
173 url_to_shell_impl_[url] = shell_impl; 177 url_to_shell_impl_[url] = shell_impl;
174 shell_impl->client()->Initialize(GetArgsForURL(url)); 178 shell_impl->client()->Initialize(GetArgsForURL(url));
175 } 179 }
176 180
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 auto it = 253 auto it =
250 url_to_content_handler_.find(content_handler->content_handler_url()); 254 url_to_content_handler_.find(content_handler->content_handler_url());
251 DCHECK(it != url_to_content_handler_.end()); 255 DCHECK(it != url_to_content_handler_.end());
252 delete it->second; 256 delete it->second;
253 url_to_content_handler_.erase(it); 257 url_to_content_handler_.erase(it);
254 } 258 }
255 259
256 ScopedMessagePipeHandle ApplicationManager::ConnectToServiceByName( 260 ScopedMessagePipeHandle ApplicationManager::ConnectToServiceByName(
257 const GURL& application_url, 261 const GURL& application_url,
258 const std::string& interface_name) { 262 const std::string& interface_name) {
259 StubServiceProvider* stub_sp = new StubServiceProvider; 263 ServiceProviderPtr services;
260 ServiceProviderPtr spp; 264 ConnectToApplication(application_url, GURL(), GetProxy(&services), nullptr);
261 BindToProxy(stub_sp, &spp);
262 ConnectToApplication(application_url, GURL(), spp.Pass());
263 MessagePipe pipe; 265 MessagePipe pipe;
264 stub_sp->GetRemoteServiceProvider()->ConnectToService(interface_name, 266 services->ConnectToService(interface_name, pipe.handle1.Pass());
265 pipe.handle1.Pass());
266 return pipe.handle0.Pass(); 267 return pipe.handle0.Pass();
267 } 268 }
268 269
269 Array<String> ApplicationManager::GetArgsForURL(const GURL& url) { 270 Array<String> ApplicationManager::GetArgsForURL(const GURL& url) {
270 URLToArgsMap::const_iterator args_it = url_to_args_.find(url); 271 URLToArgsMap::const_iterator args_it = url_to_args_.find(url);
271 if (args_it != url_to_args_.end()) 272 if (args_it != url_to_args_.end())
272 return Array<String>::From(args_it->second); 273 return Array<String>::From(args_it->second);
273 return Array<String>(); 274 return Array<String>();
274 } 275 }
275 } // namespace mojo 276 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/application_manager/application_manager.h ('k') | mojo/application_manager/shell_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698