Index: extensions/renderer/api/serial/data_receiver_unittest.cc |
diff --git a/extensions/renderer/api/serial/data_receiver_unittest.cc b/extensions/renderer/api/serial/data_receiver_unittest.cc |
index f699d02c6c6d05bf23203420aca6245b82b3001d..1be159698f86be815201631ae67c042c7ab43137 100644 |
--- a/extensions/renderer/api/serial/data_receiver_unittest.cc |
+++ b/extensions/renderer/api/serial/data_receiver_unittest.cc |
@@ -7,10 +7,56 @@ |
#include "device/serial/data_source_sender.h" |
#include "device/serial/data_stream.mojom.h" |
#include "extensions/renderer/api_test_base.h" |
+#include "gin/dictionary.h" |
+#include "gin/wrappable.h" |
#include "grit/extensions_renderer_resources.h" |
namespace extensions { |
+class DataReceiverFactory : public gin::Wrappable<DataReceiverFactory> { |
+ public: |
+ using Callback = base::Callback<void( |
+ mojo::InterfaceRequest<device::serial::DataSource>, |
+ mojo::InterfacePtr<device::serial::DataSourceClient>)>; |
+ static gin::Handle<DataReceiverFactory> Create(v8::Isolate* isolate, |
+ const Callback& callback) { |
+ return gin::CreateHandle(isolate, |
+ new DataReceiverFactory(callback, isolate)); |
+ } |
+ |
+ gin::ObjectTemplateBuilder GetObjectTemplateBuilder( |
+ v8::Isolate* isolate) override { |
+ return Wrappable<DataReceiverFactory>::GetObjectTemplateBuilder(isolate) |
+ .SetMethod("create", &DataReceiverFactory::CreateReceiver); |
+ } |
+ |
+ gin::Dictionary CreateReceiver() { |
+ mojo::InterfacePtr<device::serial::DataSource> sink; |
+ mojo::InterfacePtr<device::serial::DataSourceClient> client; |
+ mojo::InterfaceRequest<device::serial::DataSourceClient> client_request = |
+ mojo::GetProxy(&client); |
+ callback_.Run(mojo::GetProxy(&sink), client.Pass()); |
+ |
+ gin::Dictionary result = gin::Dictionary::CreateEmpty(isolate_); |
+ result.Set("source", sink.PassMessagePipe().release()); |
+ result.Set("client", client_request.PassMessagePipe().release()); |
+ return result; |
+ } |
+ |
+ static gin::WrapperInfo kWrapperInfo; |
+ |
+ private: |
+ DataReceiverFactory(const Callback& callback, v8::Isolate* isolate) |
+ : callback_(callback), isolate_(isolate) {} |
+ |
+ base::Callback<void(mojo::InterfaceRequest<device::serial::DataSource>, |
+ mojo::InterfacePtr<device::serial::DataSourceClient>)> |
+ callback_; |
+ v8::Isolate* isolate_; |
+}; |
+ |
+gin::WrapperInfo DataReceiverFactory::kWrapperInfo = {gin::kEmbedderNativeGin}; |
+ |
// Runs tests defined in extensions/test/data/data_receiver_unittest.js |
class DataReceiverTest : public ApiTestBase { |
public: |
@@ -18,8 +64,13 @@ class DataReceiverTest : public ApiTestBase { |
void SetUp() override { |
ApiTestBase::SetUp(); |
- service_provider()->AddService(base::Bind( |
- &DataReceiverTest::CreateDataSource, base::Unretained(this))); |
+ gin::ModuleRegistry::From(env()->context()->v8_context()) |
+ ->AddBuiltinModule(env()->isolate(), |
+ "device/serial/data_receiver_test_factory", |
+ DataReceiverFactory::Create( |
+ env()->isolate(), |
+ base::Bind(&DataReceiverTest::CreateDataSource, |
+ base::Unretained(this))).ToV8()); |
} |
void TearDown() override { |
@@ -35,12 +86,12 @@ class DataReceiverTest : public ApiTestBase { |
private: |
void CreateDataSource( |
- mojo::InterfaceRequest<device::serial::DataSource> request) { |
- sender_ = mojo::WeakBindToRequest( |
- new device::DataSourceSender( |
- base::Bind(&DataReceiverTest::ReadyToSend, base::Unretained(this)), |
- base::Bind(base::DoNothing)), |
- &request); |
+ mojo::InterfaceRequest<device::serial::DataSource> request, |
+ mojo::InterfacePtr<device::serial::DataSourceClient> client) { |
+ sender_ = new device::DataSourceSender( |
+ request.Pass(), client.Pass(), |
+ base::Bind(&DataReceiverTest::ReadyToSend, base::Unretained(this)), |
+ base::Bind(base::DoNothing)); |
} |
void ReadyToSend(scoped_ptr<device::WritableBuffer> buffer) { |