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

Unified Diff: chromecast/browser/cast_content_browser_client.cc

Issue 2562393005: [Chromecast] Reference internal services manifest. (Closed)
Patch Set: Fix CastContentClient header Created 4 years 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
Index: chromecast/browser/cast_content_browser_client.cc
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc
index 7d9e4a3379d3e55d2b7943d3151788d7117efd92..1de06f8a11e6ea7adbc6ed0c3409fa1796b5106f 100644
--- a/chromecast/browser/cast_content_browser_client.cc
+++ b/chromecast/browser/cast_content_browser_client.cc
@@ -48,6 +48,7 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/resource_dispatcher_host.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/common/connection_filter.h"
#include "content/public/common/content_descriptors.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/service_names.mojom.h"
@@ -55,6 +56,7 @@
#include "content/public/common/web_preferences.h"
#include "net/ssl/ssl_cert_request_info.h"
#include "net/url_request/url_request_context_getter.h"
+#include "services/service_manager/public/cpp/connector.h"
#include "services/service_manager/public/cpp/interface_registry.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/display/display.h"
@@ -76,6 +78,7 @@ namespace chromecast {
namespace shell {
namespace {
+
#if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS)
static std::unique_ptr<service_manager::Service> CreateMediaService(
CastContentBrowserClient* browser_client) {
@@ -92,6 +95,48 @@ static std::unique_ptr<service_manager::Service> CreateMediaService(
}
#endif // defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS)
+// This filter will be added to the ServiceManagerConnection for the browser
+// process, registering these interfaces in "service:content_browser" so any
+// external service can use them. This allows another service to connect to an
+// interface "mojom::Foo" registered here by calling:
+//
+// mojom::FooPtr remote_foo;
+// connector()->GetInterface("service:content_browser", &remote_foo");
+//
+// Note: Service manifests will also need to be updated. For the example above,
+// chromecast/browser/cast_content_browser_manifest_overlay.json will need to
+// "provide" the interface...
+//
+// provides: {
+// "foo_interfaces": [ "mojom::Foo" ]
+// }
+//
+// ...and the service manifest for the remote service will need to "require" it
+// from "content_browser":
+//
+// requires: {
+// "content_browser": [ "foo_interfaces" ]
+// }
+//
+// We will not filter on |remote_identity| here; instead, connection
+// constraints will be enforced only by the manifests.
+class ContentBrowserConnectionFilter : public content::ConnectionFilter {
alokp 2016/12/14 05:46:16 Are we using connection filter anywhere? If not I
slan 2016/12/19 17:58:18 Removed.
+ public:
+ ContentBrowserConnectionFilter() {}
+ ~ContentBrowserConnectionFilter() override {}
+
+ // content::ConnectionFilter implementation:
+ bool OnConnect(const service_manager::Identity& remote_identity,
+ service_manager::InterfaceRegistry* registry,
+ service_manager::Connector* connector) {
+ DCHECK(registry);
+ return true;
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ContentBrowserConnectionFilter);
+};
+
} // namespace
CastContentBrowserClient::CastContentBrowserClient()
@@ -422,6 +467,8 @@ void CastContentBrowserClient::ExposeInterfacesToRenderer(
base::ThreadTaskRunnerHandle::Get());
}
+// When registering an in-process service, also update the manifest overlay in
+// chromecast/browser/BUILD.gn to include the service.
void CastContentBrowserClient::RegisterInProcessServices(
StaticServiceMap* services) {
#if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS)
@@ -432,6 +479,12 @@ void CastContentBrowserClient::RegisterInProcessServices(
#endif
}
+void CastContentBrowserClient::AddConnectionFilters(
+ ConnectionFilterList* connection_filter_list) {
+ connection_filter_list->push_back(
+ base::MakeUnique<ContentBrowserConnectionFilter>());
+}
+
std::unique_ptr<base::Value>
CastContentBrowserClient::GetServiceManifestOverlay(
const std::string& service_name) {

Powered by Google App Engine
This is Rietveld 408576698