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

Unified Diff: content/renderer/mojo/service_registry_js_wrapper.cc

Issue 1470153002: [mojo] Enable ServiceRegistryImpl to override remote services (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@usb-testing-3
Patch Set: Created 4 years, 11 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
Index: content/renderer/mojo/service_registry_js_wrapper.cc
diff --git a/content/renderer/mojo/service_registry_js_wrapper.cc b/content/renderer/mojo/service_registry_js_wrapper.cc
index b91a16225e1571f6352ff4a7469f6d984b868688..b23e084bb5030ecf1d7a480bfba28f7b241f9613 100644
--- a/content/renderer/mojo/service_registry_js_wrapper.cc
+++ b/content/renderer/mojo/service_registry_js_wrapper.cc
@@ -6,12 +6,27 @@
#include <utility>
+#include "base/memory/scoped_ptr.h"
#include "content/common/mojo/service_registry_impl.h"
#include "content/public/common/service_registry.h"
#include "third_party/mojo/src/mojo/edk/js/handle.h"
+#include "v8/include/v8.h"
namespace content {
+namespace {
+
+void CallJsFactory(scoped_ptr<v8::Persistent<v8::Function>> factory,
+ mojo::ScopedMessagePipeHandle pipe) {
+ v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ v8::Local<v8::Value> argv[] = {
+ gin::ConvertToV8(isolate, mojo::Handle(pipe.release().value()))
+ };
+ factory->Get(isolate)->Call(v8::Undefined(isolate), 1, argv);
+}
+
+} // namespace
+
gin::WrapperInfo ServiceRegistryJsWrapper::kWrapperInfo = {
gin::kEmbedderNativeGin};
const char ServiceRegistryJsWrapper::kModuleName[] =
@@ -34,7 +49,9 @@ gin::ObjectTemplateBuilder ServiceRegistryJsWrapper::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return Wrappable<ServiceRegistryJsWrapper>::GetObjectTemplateBuilder(isolate).
SetMethod("connectToService",
- &ServiceRegistryJsWrapper::ConnectToService);
+ &ServiceRegistryJsWrapper::ConnectToService).
+ SetMethod("addServiceOverrideForTesting",
+ &ServiceRegistryJsWrapper::AddServiceOverrideForTesting);
}
mojo::Handle ServiceRegistryJsWrapper::ConnectToService(
@@ -46,6 +63,20 @@ mojo::Handle ServiceRegistryJsWrapper::ConnectToService(
return pipe.handle1.release();
}
+void ServiceRegistryJsWrapper::AddServiceOverrideForTesting(
+ const std::string& service_name,
+ v8::Local<v8::Function> service_factory) {
+ ServiceRegistryImpl* registry =
+ static_cast<ServiceRegistryImpl*>(service_registry_.get());
+ if (!registry)
+ return;
+ scoped_ptr<v8::Persistent<v8::Function>> factory(
+ new v8::Persistent<v8::Function>(v8::Isolate::GetCurrent(),
+ service_factory));
+ registry->AddServiceOverrideForTesting(
+ service_name, base::Bind(&CallJsFactory, base::Passed(&factory)));
+}
+
ServiceRegistryJsWrapper::ServiceRegistryJsWrapper(
base::WeakPtr<ServiceRegistry> service_registry)
: service_registry_(service_registry) {
« no previous file with comments | « content/renderer/mojo/service_registry_js_wrapper.h ('k') | third_party/WebKit/LayoutTests/harness-tests/mojo-helpers.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698