| Index: services/service_manager/public/cpp/interface_registry.h
|
| diff --git a/services/service_manager/public/cpp/interface_registry.h b/services/service_manager/public/cpp/interface_registry.h
|
| deleted file mode 100644
|
| index 96e23a764435ec4af7a4b0b0da3534dedfaba639..0000000000000000000000000000000000000000
|
| --- a/services/service_manager/public/cpp/interface_registry.h
|
| +++ /dev/null
|
| @@ -1,240 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef SERVICES_SERVICE_MANAGER_PUBLIC_CPP_INTERFACE_REGISTRY_H_
|
| -#define SERVICES_SERVICE_MANAGER_PUBLIC_CPP_INTERFACE_REGISTRY_H_
|
| -
|
| -#include <list>
|
| -#include <memory>
|
| -#include <queue>
|
| -#include <set>
|
| -#include <utility>
|
| -
|
| -#include "base/callback.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "mojo/public/cpp/bindings/binding.h"
|
| -#include "services/service_manager/public/cpp/identity.h"
|
| -#include "services/service_manager/public/cpp/interface_provider_spec.h"
|
| -#include "services/service_manager/public/cpp/lib/callback_binder.h"
|
| -#include "services/service_manager/public/cpp/lib/interface_factory_binder.h"
|
| -#include "services/service_manager/public/interfaces/interface_provider.mojom.h"
|
| -
|
| -namespace service_manager {
|
| -class Connection;
|
| -class InterfaceBinder;
|
| -
|
| -// Returns the set of capabilities required from the target.
|
| -CapabilitySet GetRequestedCapabilities(const InterfaceProviderSpec& source_spec,
|
| - const Identity& target);
|
| -
|
| -// 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,
|
| - const Identity& target,
|
| - const InterfaceProviderSpec& target_spec);
|
| -
|
| -// An implementation of mojom::InterfaceProvider that allows the user to
|
| -// register services to be exposed to another application.
|
| -//
|
| -// To use, define a class that implements your specific interface. Then
|
| -// implement an InterfaceFactory<Foo> that binds instances of FooImpl to
|
| -// InterfaceRequest<Foo>s and register that on the registry like this:
|
| -//
|
| -// registry.AddInterface(&factory);
|
| -//
|
| -// Or, if you have multiple factories implemented by the same type, explicitly
|
| -// specify the interface to register the factory for:
|
| -//
|
| -// registry.AddInterface<Foo>(&my_foo_and_bar_factory_);
|
| -// registry.AddInterface<Bar>(&my_foo_and_bar_factory_);
|
| -//
|
| -// The InterfaceFactory must outlive the InterfaceRegistry.
|
| -//
|
| -// Additionally you may specify a default InterfaceBinder to handle requests for
|
| -// interfaces unhandled by any registered InterfaceFactory. Just as with
|
| -// InterfaceFactory, the default InterfaceBinder supplied must outlive
|
| -// InterfaceRegistry.
|
| -//
|
| -class InterfaceRegistry : public mojom::InterfaceProvider {
|
| - public:
|
| - using Binder = base::Callback<void(const std::string&,
|
| - mojo::ScopedMessagePipeHandle)>;
|
| -
|
| - class TestApi {
|
| - public:
|
| - explicit TestApi(InterfaceRegistry* registry) : registry_(registry) {}
|
| - ~TestApi() {}
|
| -
|
| - void SetInterfaceBinderForName(InterfaceBinder* binder,
|
| - const std::string& interface_name) {
|
| - registry_->SetInterfaceBinderForName(
|
| - base::WrapUnique(binder), interface_name);
|
| - }
|
| -
|
| - template <typename Interface>
|
| - void GetLocalInterface(mojo::InterfaceRequest<Interface> request) {
|
| - GetLocalInterface(Interface::Name_, request.PassMessagePipe());
|
| - }
|
| -
|
| - void GetLocalInterface(const std::string& name,
|
| - mojo::ScopedMessagePipeHandle handle) {
|
| - registry_->GetInterface(name, std::move(handle));
|
| - }
|
| -
|
| - private:
|
| - InterfaceRegistry* registry_;
|
| - DISALLOW_COPY_AND_ASSIGN(TestApi);
|
| - };
|
| -
|
| - // Construct an unbound InterfaceRegistry. This object will not bind requests
|
| - // for interfaces until Bind() is called. |name| is used for error reporting
|
| - // and should reflect the name of the InterfaceProviderSpec pair that controls
|
| - // which interfaces can be bound via this InterfaceRegistry.
|
| - explicit InterfaceRegistry(const std::string& name);
|
| - ~InterfaceRegistry() override;
|
| -
|
| - // Sets a default handler for incoming interface requests which are allowed by
|
| - // capability filters but have no registered handler in this registry.
|
| - void set_default_binder(const Binder& binder) { default_binder_ = binder; }
|
| -
|
| - // Binds a request for an InterfaceProvider from a remote source.
|
| - // |remote_info| contains the the identity of the remote, and the remote's
|
| - // InterfaceProviderSpec, which will be intersected with the local's exports
|
| - // to determine what interfaces may be bound.
|
| - void Bind(mojom::InterfaceProviderRequest request,
|
| - const Identity& local_identity,
|
| - const InterfaceProviderSpec& local_interface_provider_spec,
|
| - const Identity& remote_identity,
|
| - const InterfaceProviderSpec& remote_interface_provider_spec);
|
| -
|
| - // Serializes the contents of the registry (including the local and remote
|
| - // specs) to a stringstream.
|
| - void Serialize(std::stringstream* stream);
|
| -
|
| - base::WeakPtr<InterfaceRegistry> GetWeakPtr();
|
| -
|
| - // Allows |Interface| to be exposed via this registry. Requests to bind will
|
| - // be handled by |factory|. Returns true if the interface was exposed, false
|
| - // if Connection policy prevented exposure.
|
| - template <typename Interface>
|
| - bool AddInterface(InterfaceFactory<Interface>* factory) {
|
| - return SetInterfaceBinderForName(
|
| - base::MakeUnique<internal::InterfaceFactoryBinder<Interface>>(factory),
|
| - Interface::Name_);
|
| - }
|
| -
|
| - // Like AddInterface above, except supplies a callback to bind the MP instead
|
| - // of an InterfaceFactory, and optionally provides a task runner where the
|
| - // callback will be run.
|
| - template <typename Interface>
|
| - bool AddInterface(
|
| - const base::Callback<void(mojo::InterfaceRequest<Interface>)>& callback,
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner =
|
| - nullptr) {
|
| - return SetInterfaceBinderForName(
|
| - base::MakeUnique<internal::CallbackBinder<Interface>>(callback,
|
| - task_runner),
|
| - Interface::Name_);
|
| - }
|
| - bool AddInterface(
|
| - const std::string& name,
|
| - const base::Callback<void(mojo::ScopedMessagePipeHandle)>& callback,
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner =
|
| - nullptr);
|
| -
|
| - template <typename Interface>
|
| - void RemoveInterface() {
|
| - RemoveInterface(Interface::Name_);
|
| - }
|
| - void RemoveInterface(const std::string& name);
|
| -
|
| - // Temporarily prevent incoming interface requests from being bound. Incoming
|
| - // requests will be queued internally and dispatched once ResumeBinding() is
|
| - // called.
|
| - void PauseBinding();
|
| -
|
| - // Resumes incoming interface request binding.
|
| - void ResumeBinding();
|
| -
|
| - // Populates a set with the interface names this registry can bind.
|
| - void GetInterfaceNames(std::set<std::string>* interface_names);
|
| -
|
| - // Sets a closure to be run when the InterfaceProvider pipe is closed. Note
|
| - // that by the time any added closure is invoked, the InterfaceRegistry may
|
| - // have been deleted.
|
| - void AddConnectionLostClosure(const base::Closure& connection_lost_closure);
|
| -
|
| - // Binds a local interface request.
|
| - void BindInterface(const std::string& name,
|
| - mojo::ScopedMessagePipeHandle handle);
|
| -
|
| - private:
|
| - using InterfaceNameToBinderMap =
|
| - std::map<std::string, std::unique_ptr<InterfaceBinder>>;
|
| -
|
| - // mojom::InterfaceProvider:
|
| - void GetInterface(const std::string& interface_name,
|
| - mojo::ScopedMessagePipeHandle handle) override;
|
| -
|
| - // Returns true if the binder was set, false if it was not set (e.g. by
|
| - // some filtering policy preventing this interface from being exposed).
|
| - bool SetInterfaceBinderForName(std::unique_ptr<InterfaceBinder> binder,
|
| - const std::string& name);
|
| -
|
| - // Returns true if |remote_identity_| is allowed to bind |interface_name|,
|
| - // according to capability policy.
|
| - bool CanBindRequestForInterface(const std::string& interface_name) const;
|
| -
|
| - // Called whenever |remote_interface_provider_spec_| changes to rebuild the
|
| - // contents of |exposed_interfaces_| and |expose_all_interfaces_|.
|
| - void RebuildExposedInterfaces();
|
| -
|
| - void OnConnectionError();
|
| -
|
| - mojom::InterfaceProviderRequest pending_request_;
|
| -
|
| - mojo::Binding<mojom::InterfaceProvider> binding_;
|
| -
|
| - std::string name_;
|
| -
|
| - // Initialized from static metadata in the host service's manifest.
|
| - Identity local_identity_;
|
| - InterfaceProviderSpec local_interface_provider_spec_;
|
| -
|
| - // Initialized from static metadata in the remote service's manifest.
|
| - Identity remote_identity_;
|
| - // Initialized from static metadata in the remote service's manifest. May be
|
| - // mutated after the fact when a capability is dynamically granted via a call
|
| - // to GrantCapability().
|
| - InterfaceProviderSpec remote_interface_provider_spec_;
|
| -
|
| - // Metadata computed whenever |remote_interface_provider_spec_| changes.
|
| - InterfaceSet exposed_interfaces_;
|
| - bool expose_all_interfaces_ = false;
|
| -
|
| - // Contains every interface binder that has been registered with this
|
| - // InterfaceRegistry. Not all binders may be reachable depending on the
|
| - // capabilities requested by the remote. Only interfaces in
|
| - // exposed_interfaces_ may be bound. When |expose_all_interfaces_| is true,
|
| - // any interface may be bound.
|
| - InterfaceNameToBinderMap name_to_binder_;
|
| - Binder default_binder_;
|
| -
|
| - bool is_paused_ = false;
|
| -
|
| - // Pending interface requests which can accumulate if GetInterface() is called
|
| - // while binding is paused.
|
| - std::queue<std::pair<std::string, mojo::ScopedMessagePipeHandle>>
|
| - pending_interface_requests_;
|
| -
|
| - std::list<base::Closure> connection_lost_closures_;
|
| -
|
| - base::WeakPtrFactory<InterfaceRegistry> weak_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(InterfaceRegistry);
|
| -};
|
| -
|
| -} // namespace service_manager
|
| -
|
| -#endif // SERVICES_SERVICE_MANAGER_PUBLIC_CPP_INTERFACE_REGISTRY_H_
|
|
|