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

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

Issue 1728083002: Extract a Connector interface from Shell that can be cloned & passed to other threads (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@12uid
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
(...skipping 15 matching lines...) Expand all
26 id_(GenerateUniqueID()), 26 id_(GenerateUniqueID()),
27 identity_(identity), 27 identity_(identity),
28 allow_any_application_(identity.filter().size() == 1 && 28 allow_any_application_(identity.filter().size() == 1 &&
29 identity.filter().count("*") == 1), 29 identity.filter().count("*") == 1),
30 shell_client_(std::move(shell_client)), 30 shell_client_(std::move(shell_client)),
31 binding_(this), 31 binding_(this),
32 pid_receiver_binding_(this), 32 pid_receiver_binding_(this),
33 queue_requests_(false), 33 queue_requests_(false),
34 native_runner_(nullptr), 34 native_runner_(nullptr),
35 pid_(base::kNullProcessId) { 35 pid_(base::kNullProcessId) {
36 DCHECK_NE(Shell::kInvalidApplicationID, id_); 36 DCHECK_NE(kInvalidApplicationID, id_);
37 } 37 }
38 38
39 ApplicationInstance::~ApplicationInstance() { 39 ApplicationInstance::~ApplicationInstance() {
40 for (auto request : queued_client_requests_) 40 for (auto request : queued_client_requests_)
41 request->connect_callback().Run(kInvalidApplicationID); 41 request->connect_callback().Run(kInvalidApplicationID);
42 STLDeleteElements(&queued_client_requests_); 42 STLDeleteElements(&queued_client_requests_);
43 } 43 }
44 44
45 void ApplicationInstance::InitializeApplication() { 45 void ApplicationInstance::InitializeApplication() {
46 shell_client_->Initialize(binding_.CreateInterfacePtrAndBind(), 46 shell_client_->Initialize(binding_.CreateInterfacePtrAndBind(),
(...skipping 13 matching lines...) Expand all
60 void ApplicationInstance::SetNativeRunner(NativeRunner* native_runner) { 60 void ApplicationInstance::SetNativeRunner(NativeRunner* native_runner) {
61 native_runner_ = native_runner; 61 native_runner_ = native_runner;
62 } 62 }
63 63
64 void ApplicationInstance::BindPIDReceiver( 64 void ApplicationInstance::BindPIDReceiver(
65 InterfaceRequest<mojom::PIDReceiver> pid_receiver) { 65 InterfaceRequest<mojom::PIDReceiver> pid_receiver) {
66 pid_receiver_binding_.Bind(std::move(pid_receiver)); 66 pid_receiver_binding_.Bind(std::move(pid_receiver));
67 } 67 }
68 68
69 // Shell implementation: 69 // Shell implementation:
70 void ApplicationInstance::GetConnector(mojom::ConnectorRequest request) {
71 connectors_.AddBinding(this, std::move(request));
72 }
73
74 void ApplicationInstance::QuitApplication() {
75 queue_requests_ = true;
76 shell_client_->OnQuitRequested(
77 base::Bind(&ApplicationInstance::OnQuitRequestedResult,
78 base::Unretained(this)));
79 }
80
81 // Connector implementation:
70 void ApplicationInstance::Connect( 82 void ApplicationInstance::Connect(
71 const String& app_url, 83 const String& app_url,
72 uint32_t user_id, 84 uint32_t user_id,
73 shell::mojom::InterfaceProviderRequest remote_interfaces, 85 shell::mojom::InterfaceProviderRequest remote_interfaces,
74 shell::mojom::InterfaceProviderPtr local_interfaces, 86 shell::mojom::InterfaceProviderPtr local_interfaces,
75 mojom::CapabilityFilterPtr filter, 87 mojom::CapabilityFilterPtr filter,
76 const ConnectCallback& callback) { 88 const ConnectCallback& callback) {
77 GURL url = app_url.To<GURL>(); 89 GURL url = app_url.To<GURL>();
78 if (!url.is_valid()) { 90 if (!url.is_valid()) {
79 LOG(ERROR) << "Error: invalid URL: " << app_url; 91 LOG(ERROR) << "Error: invalid URL: " << app_url;
(...skipping 14 matching lines...) Expand all
94 params->set_local_interfaces(std::move(local_interfaces)); 106 params->set_local_interfaces(std::move(local_interfaces));
95 params->set_connect_callback(callback); 107 params->set_connect_callback(callback);
96 manager_->Connect(std::move(params)); 108 manager_->Connect(std::move(params));
97 } else { 109 } else {
98 LOG(WARNING) << "CapabilityFilter prevented connection from: " << 110 LOG(WARNING) << "CapabilityFilter prevented connection from: " <<
99 identity_.url() << " to: " << url.spec(); 111 identity_.url() << " to: " << url.spec();
100 callback.Run(kInvalidApplicationID); 112 callback.Run(kInvalidApplicationID);
101 } 113 }
102 } 114 }
103 115
104 void ApplicationInstance::QuitApplication() { 116 void ApplicationInstance::Clone(mojom::ConnectorRequest request) {
105 queue_requests_ = true; 117 connectors_.AddBinding(this, std::move(request));
106 shell_client_->OnQuitRequested(
107 base::Bind(&ApplicationInstance::OnQuitRequestedResult,
108 base::Unretained(this)));
109 } 118 }
110 119
111 void ApplicationInstance::SetPID(uint32_t pid) { 120 void ApplicationInstance::SetPID(uint32_t pid) {
112 // This will call us back to update pid_. 121 // This will call us back to update pid_.
113 manager_->ApplicationPIDAvailable(id_, pid); 122 manager_->ApplicationPIDAvailable(id_, pid);
114 } 123 }
115 124
116 uint32_t ApplicationInstance::GenerateUniqueID() const { 125 uint32_t ApplicationInstance::GenerateUniqueID() const {
117 static uint32_t id = Shell::kInvalidApplicationID; 126 static uint32_t id = kInvalidApplicationID;
118 ++id; 127 ++id;
119 CHECK_NE(Shell::kInvalidApplicationID, id); 128 CHECK_NE(kInvalidApplicationID, id);
120 return id; 129 return id;
121 } 130 }
122 131
123 void ApplicationInstance::CallAcceptConnection( 132 void ApplicationInstance::CallAcceptConnection(
124 scoped_ptr<ConnectParams> params) { 133 scoped_ptr<ConnectParams> params) {
125 params->connect_callback().Run(id_); 134 params->connect_callback().Run(id_);
126 AllowedInterfaces interfaces; 135 AllowedInterfaces interfaces;
127 interfaces.insert("*"); 136 interfaces.insert("*");
128 if (!params->source().is_null()) 137 if (!params->source().is_null())
129 interfaces = GetAllowedInterfaces(params->source().filter(), identity_); 138 interfaces = GetAllowedInterfaces(params->source().filter(), identity_);
130 139
131 ApplicationInstance* source = 140 ApplicationInstance* source =
132 manager_->GetApplicationInstance(params->source()); 141 manager_->GetApplicationInstance(params->source());
133 uint32_t source_id = source ? source->id() : Shell::kInvalidApplicationID; 142 uint32_t source_id = source ? source->id() : kInvalidApplicationID;
134 shell_client_->AcceptConnection( 143 shell_client_->AcceptConnection(
135 params->source().url().spec(), params->source().user_id(), source_id, 144 params->source().url().spec(), params->source().user_id(), source_id,
136 params->TakeRemoteInterfaces(), params->TakeLocalInterfaces(), 145 params->TakeRemoteInterfaces(), params->TakeLocalInterfaces(),
137 Array<String>::From(interfaces), params->target().url().spec()); 146 Array<String>::From(interfaces), params->target().url().spec());
138 } 147 }
139 148
140 void ApplicationInstance::OnConnectionError() { 149 void ApplicationInstance::OnConnectionError() {
141 std::vector<ConnectParams*> queued_client_requests; 150 std::vector<ConnectParams*> queued_client_requests;
142 queued_client_requests_.swap(queued_client_requests); 151 queued_client_requests_.swap(queued_client_requests);
143 auto manager = manager_; 152 auto manager = manager_;
(...skipping 12 matching lines...) Expand all
156 165
157 queue_requests_ = false; 166 queue_requests_ = false;
158 for (auto request : queued_client_requests_) 167 for (auto request : queued_client_requests_)
159 CallAcceptConnection(make_scoped_ptr(request)); 168 CallAcceptConnection(make_scoped_ptr(request));
160 169
161 queued_client_requests_.clear(); 170 queued_client_requests_.clear();
162 } 171 }
163 172
164 } // namespace shell 173 } // namespace shell
165 } // namespace mojo 174 } // 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