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

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

Issue 1719193003: Add a user id parameter to connections (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 9 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 26 matching lines...) Expand all
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(),
47 identity_.url().spec(), id_); 47 identity_.url().spec(), id_, identity_.user_id());
48 binding_.set_connection_error_handler([this]() { OnConnectionError(); }); 48 binding_.set_connection_error_handler([this]() { OnConnectionError(); });
49 } 49 }
50 50
51 void ApplicationInstance::ConnectToClient(scoped_ptr<ConnectParams> params) { 51 void ApplicationInstance::ConnectToClient(scoped_ptr<ConnectParams> params) {
52 if (queue_requests_) { 52 if (queue_requests_) {
53 queued_client_requests_.push_back(params.release()); 53 queued_client_requests_.push_back(params.release());
54 return; 54 return;
55 } 55 }
56 56
57 CallAcceptConnection(std::move(params)); 57 CallAcceptConnection(std::move(params));
58 } 58 }
59 59
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::Connect( 70 void ApplicationInstance::Connect(
71 const String& app_url, 71 const String& app_url,
72 uint32_t user_id,
72 shell::mojom::InterfaceProviderRequest remote_interfaces, 73 shell::mojom::InterfaceProviderRequest remote_interfaces,
73 shell::mojom::InterfaceProviderPtr local_interfaces, 74 shell::mojom::InterfaceProviderPtr local_interfaces,
74 mojom::CapabilityFilterPtr filter, 75 mojom::CapabilityFilterPtr filter,
75 const ConnectCallback& callback) { 76 const ConnectCallback& callback) {
76 GURL url = app_url.To<GURL>(); 77 GURL url = app_url.To<GURL>();
77 if (!url.is_valid()) { 78 if (!url.is_valid()) {
78 LOG(ERROR) << "Error: invalid URL: " << app_url; 79 LOG(ERROR) << "Error: invalid URL: " << app_url;
79 callback.Run(kInvalidApplicationID); 80 callback.Run(kInvalidApplicationID);
80 return; 81 return;
81 } 82 }
82 if (allow_any_application_ || 83 if (allow_any_application_ ||
83 identity_.filter().find(url.spec()) != identity_.filter().end()) { 84 identity_.filter().find(url.spec()) != identity_.filter().end()) {
84 CapabilityFilter capability_filter = GetPermissiveCapabilityFilter(); 85 CapabilityFilter capability_filter = GetPermissiveCapabilityFilter();
85 if (!filter.is_null()) 86 if (!filter.is_null())
86 capability_filter = filter->filter.To<CapabilityFilter>(); 87 capability_filter = filter->filter.To<CapabilityFilter>();
87 88
88 scoped_ptr<ConnectParams> params(new ConnectParams); 89 scoped_ptr<ConnectParams> params(new ConnectParams);
89 params->SetSource(this); 90 params->set_source(identity_);
90 params->set_target(Identity(url, std::string(), capability_filter)); 91 params->set_target(
92 Identity(url, std::string(), user_id, capability_filter));
91 params->set_remote_interfaces(std::move(remote_interfaces)); 93 params->set_remote_interfaces(std::move(remote_interfaces));
92 params->set_local_interfaces(std::move(local_interfaces)); 94 params->set_local_interfaces(std::move(local_interfaces));
93 params->set_connect_callback(callback); 95 params->set_connect_callback(callback);
94 manager_->Connect(std::move(params)); 96 manager_->Connect(std::move(params));
95 } else { 97 } else {
96 LOG(WARNING) << "CapabilityFilter prevented connection from: " << 98 LOG(WARNING) << "CapabilityFilter prevented connection from: " <<
97 identity_.url() << " to: " << url.spec(); 99 identity_.url() << " to: " << url.spec();
98 callback.Run(kInvalidApplicationID); 100 callback.Run(kInvalidApplicationID);
99 } 101 }
100 } 102 }
(...skipping 22 matching lines...) Expand all
123 params->connect_callback().Run(id_); 125 params->connect_callback().Run(id_);
124 AllowedInterfaces interfaces; 126 AllowedInterfaces interfaces;
125 interfaces.insert("*"); 127 interfaces.insert("*");
126 if (!params->source().is_null()) 128 if (!params->source().is_null())
127 interfaces = GetAllowedInterfaces(params->source().filter(), identity_); 129 interfaces = GetAllowedInterfaces(params->source().filter(), identity_);
128 130
129 ApplicationInstance* source = 131 ApplicationInstance* source =
130 manager_->GetApplicationInstance(params->source()); 132 manager_->GetApplicationInstance(params->source());
131 uint32_t source_id = source ? source->id() : Shell::kInvalidApplicationID; 133 uint32_t source_id = source ? source->id() : Shell::kInvalidApplicationID;
132 shell_client_->AcceptConnection( 134 shell_client_->AcceptConnection(
133 params->source().url().spec(), source_id, params->TakeRemoteInterfaces(), 135 params->source().url().spec(), params->source().user_id(), source_id,
134 params->TakeLocalInterfaces(), Array<String>::From(interfaces), 136 params->TakeRemoteInterfaces(), params->TakeLocalInterfaces(),
135 params->target().url().spec()); 137 Array<String>::From(interfaces), params->target().url().spec());
136 } 138 }
137 139
138 void ApplicationInstance::OnConnectionError() { 140 void ApplicationInstance::OnConnectionError() {
139 std::vector<ConnectParams*> queued_client_requests; 141 std::vector<ConnectParams*> queued_client_requests;
140 queued_client_requests_.swap(queued_client_requests); 142 queued_client_requests_.swap(queued_client_requests);
141 auto manager = manager_; 143 auto manager = manager_;
142 manager_->OnApplicationInstanceError(this); 144 manager_->OnApplicationInstanceError(this);
143 //|this| is deleted. 145 //|this| is deleted.
144 146
145 // If any queued requests came to shell during time it was shutting down, 147 // If any queued requests came to shell during time it was shutting down,
146 // start them now. 148 // start them now.
147 for (auto request : queued_client_requests) 149 for (auto request : queued_client_requests)
148 manager->Connect(make_scoped_ptr(request)); 150 manager->Connect(make_scoped_ptr(request));
149 } 151 }
150 152
151 void ApplicationInstance::OnQuitRequestedResult(bool can_quit) { 153 void ApplicationInstance::OnQuitRequestedResult(bool can_quit) {
152 if (can_quit) 154 if (can_quit)
153 return; 155 return;
154 156
155 queue_requests_ = false; 157 queue_requests_ = false;
156 for (auto request : queued_client_requests_) 158 for (auto request : queued_client_requests_)
157 CallAcceptConnection(make_scoped_ptr(request)); 159 CallAcceptConnection(make_scoped_ptr(request));
158 160
159 queued_client_requests_.clear(); 161 queued_client_requests_.clear();
160 } 162 }
161 163
162 } // namespace shell 164 } // namespace shell
163 } // namespace mojo 165 } // 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