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

Unified Diff: services/service_manager/service_manager.cc

Issue 2844063003: Migrate RenderFrameImpl to use BinderRegistry. (Closed)
Patch Set: . Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/service_manager/public/cpp/lib/binder_registry.cc ('k') | services/ui/service.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/service_manager/service_manager.cc
diff --git a/services/service_manager/service_manager.cc b/services/service_manager/service_manager.cc
index c2259d4d5969224f7b98e2bd414833bb7f77a7b9..daac308d52682210af9a700bc777b97b5f72126b 100644
--- a/services/service_manager/service_manager.cc
+++ b/services/service_manager/service_manager.cc
@@ -26,7 +26,6 @@
#include "services/catalog/public/interfaces/constants.mojom.h"
#include "services/service_manager/connect_util.h"
#include "services/service_manager/public/cpp/connector.h"
-#include "services/service_manager/public/cpp/interface_registry.h"
#include "services/service_manager/public/cpp/service.h"
#include "services/service_manager/public/cpp/service_context.h"
#include "services/service_manager/public/interfaces/connector.mojom.h"
@@ -52,6 +51,50 @@ bool Succeeded(mojom::ConnectResult result) {
return result == mojom::ConnectResult::SUCCEEDED;
}
+// Returns the set of capabilities required from the target.
+CapabilitySet GetRequestedCapabilities(const InterfaceProviderSpec& source_spec,
+ const Identity& target) {
+ CapabilitySet capabilities;
+
+ // Start by looking for specs specific to the supplied identity.
+ auto it = source_spec.requires.find(target.name());
+ if (it != source_spec.requires.end()) {
+ std::copy(it->second.begin(), it->second.end(),
+ std::inserter(capabilities, capabilities.begin()));
+ }
+
+ // Apply wild card rules too.
+ it = source_spec.requires.find("*");
+ if (it != source_spec.requires.end()) {
+ std::copy(it->second.begin(), it->second.end(),
+ std::inserter(capabilities, capabilities.begin()));
+ }
+ return capabilities;
+}
+
+// Generates a single set of interfaces that is the union of all interfaces
+// exposed by the target for the capabilities requested by the source.
+InterfaceSet GetInterfacesToExpose(const InterfaceProviderSpec& source_spec,
Ken Rockot(use gerrit already) 2017/04/27 19:30:45 nit: Remove this from interface_registry.h too? Th
+ const Identity& target,
+ const InterfaceProviderSpec& target_spec) {
+ InterfaceSet exposed_interfaces;
+ // TODO(beng): remove this once we can assert that an InterfaceRegistry must
+ // always be constructed with a valid identity.
+ if (!target.IsValid()) {
+ exposed_interfaces.insert("*");
+ return exposed_interfaces;
+ }
+ CapabilitySet capabilities = GetRequestedCapabilities(source_spec, target);
+ for (const auto& capability : capabilities) {
+ auto it = target_spec.provides.find(capability);
+ if (it != target_spec.provides.end()) {
+ for (const auto& interface_name : it->second)
+ exposed_interfaces.insert(interface_name);
+ }
+ }
+ return exposed_interfaces;
+}
+
} // namespace
Identity CreateServiceManagerIdentity() {
« no previous file with comments | « services/service_manager/public/cpp/lib/binder_registry.cc ('k') | services/ui/service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698