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

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

Issue 1706063002: Eliminate ShellClientFactoryConnection & just have the ApplicationManager do it. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@factory
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 | « mojo/shell/application_instance.h ('k') | mojo/shell/application_manager.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 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 "mojo/shell/application_instance.h" 5 #include "mojo/shell/application_instance.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/atomic_sequence_num.h" 11 #include "base/atomic_sequence_num.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/stl_util.h" 13 #include "base/stl_util.h"
14 #include "mojo/common/common_type_converters.h" 14 #include "mojo/common/common_type_converters.h"
15 #include "mojo/common/url_type_converters.h" 15 #include "mojo/common/url_type_converters.h"
16 #include "mojo/shell/application_manager.h" 16 #include "mojo/shell/application_manager.h"
17 17
18 namespace mojo { 18 namespace mojo {
19 namespace shell { 19 namespace shell {
20 20
21 ApplicationInstance::ApplicationInstance( 21 ApplicationInstance::ApplicationInstance(
22 mojom::ShellClientPtr shell_client, 22 mojom::ShellClientPtr shell_client,
23 ApplicationManager* manager, 23 ApplicationManager* manager,
24 const Identity& identity, 24 const Identity& identity,
25 uint32_t requesting_shell_client_factory_id,
26 const mojom::Shell::ConnectToApplicationCallback& connect_callback, 25 const mojom::Shell::ConnectToApplicationCallback& connect_callback,
27 const base::Closure& on_application_end, 26 const base::Closure& on_application_end,
28 const String& application_name) 27 const String& application_name)
29 : manager_(manager), 28 : manager_(manager),
30 id_(GenerateUniqueID()), 29 id_(GenerateUniqueID()),
31 identity_(identity), 30 identity_(identity),
32 allow_any_application_(identity.filter().size() == 1 && 31 allow_any_application_(identity.filter().size() == 1 &&
33 identity.filter().count("*") == 1), 32 identity.filter().count("*") == 1),
34 requesting_shell_client_factory_id_(requesting_shell_client_factory_id),
35 connect_callback_(connect_callback), 33 connect_callback_(connect_callback),
36 on_application_end_(on_application_end), 34 on_application_end_(on_application_end),
37 shell_client_(std::move(shell_client)), 35 shell_client_(std::move(shell_client)),
38 binding_(this), 36 binding_(this),
39 pid_receiver_binding_(this), 37 pid_receiver_binding_(this),
40 queue_requests_(false), 38 queue_requests_(false),
41 native_runner_(nullptr), 39 native_runner_(nullptr),
42 application_name_(application_name), 40 application_name_(application_name),
43 pid_(base::kNullProcessId) { 41 pid_(base::kNullProcessId) {
44 DCHECK_NE(Shell::kInvalidApplicationID, id_); 42 DCHECK_NE(Shell::kInvalidApplicationID, id_);
45 } 43 }
46 44
47 ApplicationInstance::~ApplicationInstance() { 45 ApplicationInstance::~ApplicationInstance() {
48 for (auto request : queued_client_requests_) { 46 for (auto request : queued_client_requests_)
49 request->connect_callback().Run(kInvalidApplicationID, 47 request->connect_callback().Run(kInvalidApplicationID);
50 kInvalidApplicationID);
51 }
52 STLDeleteElements(&queued_client_requests_); 48 STLDeleteElements(&queued_client_requests_);
53 } 49 }
54 50
55 void ApplicationInstance::InitializeApplication() { 51 void ApplicationInstance::InitializeApplication() {
56 shell_client_->Initialize(binding_.CreateInterfacePtrAndBind(), 52 shell_client_->Initialize(binding_.CreateInterfacePtrAndBind(),
57 identity_.url().spec(), id_); 53 identity_.url().spec(), id_);
58 binding_.set_connection_error_handler([this]() { OnConnectionError(); }); 54 binding_.set_connection_error_handler([this]() { OnConnectionError(); });
59 } 55 }
60 56
61 void ApplicationInstance::ConnectToClient( 57 void ApplicationInstance::ConnectToClient(
(...skipping 10 matching lines...) Expand all
72 native_runner_ = native_runner; 68 native_runner_ = native_runner;
73 } 69 }
74 70
75 void ApplicationInstance::BindPIDReceiver( 71 void ApplicationInstance::BindPIDReceiver(
76 InterfaceRequest<mojom::PIDReceiver> pid_receiver) { 72 InterfaceRequest<mojom::PIDReceiver> pid_receiver) {
77 pid_receiver_binding_.Bind(std::move(pid_receiver)); 73 pid_receiver_binding_.Bind(std::move(pid_receiver));
78 } 74 }
79 75
80 void ApplicationInstance::RunConnectCallback() { 76 void ApplicationInstance::RunConnectCallback() {
81 if (!connect_callback_.is_null()) 77 if (!connect_callback_.is_null())
82 connect_callback_.Run(id_, requesting_shell_client_factory_id_); 78 connect_callback_.Run(id_);
83 } 79 }
84 80
85 // Shell implementation: 81 // Shell implementation:
86 void ApplicationInstance::ConnectToApplication( 82 void ApplicationInstance::ConnectToApplication(
87 URLRequestPtr app_request, 83 URLRequestPtr app_request,
88 shell::mojom::InterfaceProviderRequest remote_interfaces, 84 shell::mojom::InterfaceProviderRequest remote_interfaces,
89 shell::mojom::InterfaceProviderPtr local_interfaces, 85 shell::mojom::InterfaceProviderPtr local_interfaces,
90 mojom::CapabilityFilterPtr filter, 86 mojom::CapabilityFilterPtr filter,
91 const ConnectToApplicationCallback& callback) { 87 const ConnectToApplicationCallback& callback) {
92 std::string url_string = app_request->url.To<std::string>(); 88 std::string url_string = app_request->url.To<std::string>();
93 GURL url(url_string); 89 GURL url(url_string);
94 if (!url.is_valid()) { 90 if (!url.is_valid()) {
95 LOG(ERROR) << "Error: invalid URL: " << url_string; 91 LOG(ERROR) << "Error: invalid URL: " << url_string;
96 callback.Run(kInvalidApplicationID, kInvalidApplicationID); 92 callback.Run(kInvalidApplicationID);
97 return; 93 return;
98 } 94 }
99 if (allow_any_application_ || 95 if (allow_any_application_ ||
100 identity_.filter().find(url.spec()) != identity_.filter().end()) { 96 identity_.filter().find(url.spec()) != identity_.filter().end()) {
101 CapabilityFilter capability_filter = GetPermissiveCapabilityFilter(); 97 CapabilityFilter capability_filter = GetPermissiveCapabilityFilter();
102 if (!filter.is_null()) 98 if (!filter.is_null())
103 capability_filter = filter->filter.To<CapabilityFilter>(); 99 capability_filter = filter->filter.To<CapabilityFilter>();
104 100
105 scoped_ptr<ConnectToApplicationParams> params( 101 scoped_ptr<ConnectToApplicationParams> params(
106 new ConnectToApplicationParams); 102 new ConnectToApplicationParams);
107 params->SetSource(this); 103 params->SetSource(this);
108 GURL app_url(app_request->url.get()); 104 GURL app_url(app_request->url.get());
109 params->SetTargetURLRequest( 105 params->SetTargetURLRequest(
110 std::move(app_request), 106 std::move(app_request),
111 Identity(app_url, std::string(), capability_filter)); 107 Identity(app_url, std::string(), capability_filter));
112 params->set_remote_interfaces(std::move(remote_interfaces)); 108 params->set_remote_interfaces(std::move(remote_interfaces));
113 params->set_local_interfaces(std::move(local_interfaces)); 109 params->set_local_interfaces(std::move(local_interfaces));
114 params->set_connect_callback(callback); 110 params->set_connect_callback(callback);
115 manager_->ConnectToApplication(std::move(params)); 111 manager_->ConnectToApplication(std::move(params));
116 } else { 112 } else {
117 LOG(WARNING) << "CapabilityFilter prevented connection from: " << 113 LOG(WARNING) << "CapabilityFilter prevented connection from: " <<
118 identity_.url() << " to: " << url.spec(); 114 identity_.url() << " to: " << url.spec();
119 callback.Run(kInvalidApplicationID, kInvalidApplicationID); 115 callback.Run(kInvalidApplicationID);
120 } 116 }
121 } 117 }
122 118
123 void ApplicationInstance::QuitApplication() { 119 void ApplicationInstance::QuitApplication() {
124 queue_requests_ = true; 120 queue_requests_ = true;
125 shell_client_->OnQuitRequested( 121 shell_client_->OnQuitRequested(
126 base::Bind(&ApplicationInstance::OnQuitRequestedResult, 122 base::Bind(&ApplicationInstance::OnQuitRequestedResult,
127 base::Unretained(this))); 123 base::Unretained(this)));
128 } 124 }
129 125
130 void ApplicationInstance::SetPID(uint32_t pid) { 126 void ApplicationInstance::SetPID(uint32_t pid) {
131 // This will call us back to update pid_. 127 // This will call us back to update pid_.
132 manager_->ApplicationPIDAvailable(id_, pid); 128 manager_->ApplicationPIDAvailable(id_, pid);
133 } 129 }
134 130
135 uint32_t ApplicationInstance::GenerateUniqueID() const { 131 uint32_t ApplicationInstance::GenerateUniqueID() const {
136 static uint32_t id = Shell::kInvalidApplicationID; 132 static uint32_t id = Shell::kInvalidApplicationID;
137 ++id; 133 ++id;
138 CHECK_NE(Shell::kInvalidApplicationID, id); 134 CHECK_NE(Shell::kInvalidApplicationID, id);
139 return id; 135 return id;
140 } 136 }
141 137
142 void ApplicationInstance::CallAcceptConnection( 138 void ApplicationInstance::CallAcceptConnection(
143 scoped_ptr<ConnectToApplicationParams> params) { 139 scoped_ptr<ConnectToApplicationParams> params) {
144 params->connect_callback().Run(id_, requesting_shell_client_factory_id_); 140 params->connect_callback().Run(id_);
145 AllowedInterfaces interfaces; 141 AllowedInterfaces interfaces;
146 interfaces.insert("*"); 142 interfaces.insert("*");
147 if (!params->source().is_null()) 143 if (!params->source().is_null())
148 interfaces = GetAllowedInterfaces(params->source().filter(), identity_); 144 interfaces = GetAllowedInterfaces(params->source().filter(), identity_);
149 145
150 ApplicationInstance* source = 146 ApplicationInstance* source =
151 manager_->GetApplicationInstance(params->source()); 147 manager_->GetApplicationInstance(params->source());
152 uint32_t source_id = source ? source->id() : Shell::kInvalidApplicationID; 148 uint32_t source_id = source ? source->id() : Shell::kInvalidApplicationID;
153 shell_client_->AcceptConnection( 149 shell_client_->AcceptConnection(
154 params->source().url().spec(), source_id, params->TakeRemoteInterfaces(), 150 params->source().url().spec(), source_id, params->TakeRemoteInterfaces(),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 195
200 queue_requests_ = false; 196 queue_requests_ = false;
201 for (auto request : queued_client_requests_) 197 for (auto request : queued_client_requests_)
202 CallAcceptConnection(make_scoped_ptr(request)); 198 CallAcceptConnection(make_scoped_ptr(request));
203 199
204 queued_client_requests_.clear(); 200 queued_client_requests_.clear();
205 } 201 }
206 202
207 } // namespace shell 203 } // namespace shell
208 } // namespace mojo 204 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/shell/application_instance.h ('k') | mojo/shell/application_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698