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

Unified Diff: third_party/WebKit/Source/platform/ServiceConnector.h

Issue 2460723003: Enable connection to Mojo services from Blink (Closed)
Patch Set: Self-review Created 4 years, 1 month 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: third_party/WebKit/Source/platform/ServiceConnector.h
diff --git a/third_party/WebKit/Source/platform/ServiceConnector.h b/third_party/WebKit/Source/platform/ServiceConnector.h
new file mode 100644
index 0000000000000000000000000000000000000000..6f9df0e8bc25e7d855d00195f14a4045d3062f00
--- /dev/null
+++ b/third_party/WebKit/Source/platform/ServiceConnector.h
@@ -0,0 +1,67 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
Ken Rockot(use gerrit already) 2016/12/05 20:54:18 nit: 2016
blundell 2016/12/15 17:04:52 Done. Hopefully this lands before it needs to be c
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ServiceConnector_h
+#define ServiceConnector_h
+
+#include "mojo/public/cpp/bindings/binding.h"
+#include "public/platform/Platform.h"
+#include "services/service_manager/public/interfaces/connector.mojom-blink.h"
+#include "wtf/StdLibExtras.h"
+
+namespace blink {
+
+// ServiceConnector supports connecting to Mojo services by name.
+class ServiceConnector {
+ public:
+ static ServiceConnector& instance() {
+ DEFINE_STATIC_LOCAL(ServiceConnector, instance, ());
+ return instance;
+ }
+
+ template <typename Interface>
+ void ConnectToInterface(const char* serviceName,
esprehn 2016/12/02 02:23:14 These should all be lowerCase() for now.
blundell 2016/12/15 17:04:52 Done.
+ mojo::InterfaceRequest<Interface> interfacePtr) {
Noel Gordon 2016/12/07 07:09:26 |interfacePtr| ?? Isn't the argument a request?
blundell 2016/12/15 17:04:52 Great catch, thanks. Done.
+ InitializeIfNecessary();
+
+ if (!m_connector.is_bound())
+ return;
+
+ service_manager::mojom::blink::IdentityPtr remoteIdentity(
+ service_manager::mojom::blink::Identity::New());
+ remoteIdentity->name = serviceName;
+ remoteIdentity->user_id = service_manager::mojom::blink::kInheritUserID;
+ remoteIdentity->instance = "";
+
+ service_manager::mojom::blink::InterfaceProviderPtr remoteInterfaces;
+ m_connector->Connect(std::move(remoteIdentity), GetProxy(&remoteInterfaces),
+ nullptr,
+ base::Bind(&ServiceConnector::OnConnectionCompleted));
+
+ remoteInterfaces->GetInterface(Interface::Name_,
+ interfacePtr.PassMessagePipe());
+ }
+
+ private:
+ ServiceConnector() : m_initialized(false) {}
Noel Gordon 2016/12/07 07:09:26 Is this needed? Could we init the class fully at c
blundell 2016/12/15 17:04:51 The recommended practice in Mojo is to set up all
+
+ void InitializeIfNecessary() {
esprehn 2016/12/02 02:23:14 initializeIfNeeded()
blundell 2016/12/15 17:04:52 Done.
+ if (m_initialized)
+ return;
+
+ m_connector = Platform::current()->serviceConnector();
+ m_initialized = true;
+ }
+
+ static void OnConnectionCompleted(
+ service_manager::mojom::ConnectResult result,
+ const WTF::String& targetUserID) {}
+
+ bool m_initialized;
+ service_manager::mojom::blink::ConnectorPtr m_connector;
+};
+
+} // namespace blink
+
+#endif // ServiceConnector_h

Powered by Google App Engine
This is Rietveld 408576698