OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <queue> | 5 #include <queue> |
6 | 6 |
7 #include "device/serial/data_source_sender.h" | 7 #include "device/serial/data_source_sender.h" |
8 #include "device/serial/data_stream.mojom.h" | 8 #include "device/serial/data_stream.mojom.h" |
9 #include "extensions/renderer/api_test_base.h" | 9 #include "extensions/renderer/api_test_base.h" |
| 10 #include "gin/dictionary.h" |
| 11 #include "gin/wrappable.h" |
10 #include "grit/extensions_renderer_resources.h" | 12 #include "grit/extensions_renderer_resources.h" |
11 | 13 |
12 namespace extensions { | 14 namespace extensions { |
13 | 15 |
| 16 class DataReceiverFactory : public gin::Wrappable<DataReceiverFactory> { |
| 17 public: |
| 18 using Callback = base::Callback<void( |
| 19 mojo::InterfaceRequest<device::serial::DataSource>, |
| 20 mojo::InterfacePtr<device::serial::DataSourceClient>)>; |
| 21 static gin::Handle<DataReceiverFactory> Create(v8::Isolate* isolate, |
| 22 const Callback& callback) { |
| 23 return gin::CreateHandle(isolate, |
| 24 new DataReceiverFactory(callback, isolate)); |
| 25 } |
| 26 |
| 27 gin::ObjectTemplateBuilder GetObjectTemplateBuilder( |
| 28 v8::Isolate* isolate) override { |
| 29 return Wrappable<DataReceiverFactory>::GetObjectTemplateBuilder(isolate) |
| 30 .SetMethod("create", &DataReceiverFactory::CreateReceiver); |
| 31 } |
| 32 |
| 33 gin::Dictionary CreateReceiver() { |
| 34 mojo::InterfacePtr<device::serial::DataSource> sink; |
| 35 mojo::InterfacePtr<device::serial::DataSourceClient> client; |
| 36 mojo::InterfaceRequest<device::serial::DataSourceClient> client_request = |
| 37 mojo::GetProxy(&client); |
| 38 callback_.Run(mojo::GetProxy(&sink), client.Pass()); |
| 39 |
| 40 gin::Dictionary result = gin::Dictionary::CreateEmpty(isolate_); |
| 41 result.Set("source", sink.PassMessagePipe().release()); |
| 42 result.Set("client", client_request.PassMessagePipe().release()); |
| 43 return result; |
| 44 } |
| 45 |
| 46 static gin::WrapperInfo kWrapperInfo; |
| 47 |
| 48 private: |
| 49 DataReceiverFactory(const Callback& callback, v8::Isolate* isolate) |
| 50 : callback_(callback), isolate_(isolate) {} |
| 51 |
| 52 base::Callback<void(mojo::InterfaceRequest<device::serial::DataSource>, |
| 53 mojo::InterfacePtr<device::serial::DataSourceClient>)> |
| 54 callback_; |
| 55 v8::Isolate* isolate_; |
| 56 }; |
| 57 |
| 58 gin::WrapperInfo DataReceiverFactory::kWrapperInfo = {gin::kEmbedderNativeGin}; |
| 59 |
14 // Runs tests defined in extensions/test/data/data_receiver_unittest.js | 60 // Runs tests defined in extensions/test/data/data_receiver_unittest.js |
15 class DataReceiverTest : public ApiTestBase { | 61 class DataReceiverTest : public ApiTestBase { |
16 public: | 62 public: |
17 DataReceiverTest() {} | 63 DataReceiverTest() {} |
18 | 64 |
19 void SetUp() override { | 65 void SetUp() override { |
20 ApiTestBase::SetUp(); | 66 ApiTestBase::SetUp(); |
21 service_provider()->AddService(base::Bind( | 67 gin::ModuleRegistry::From(env()->context()->v8_context()) |
22 &DataReceiverTest::CreateDataSource, base::Unretained(this))); | 68 ->AddBuiltinModule(env()->isolate(), |
| 69 "device/serial/data_receiver_test_factory", |
| 70 DataReceiverFactory::Create( |
| 71 env()->isolate(), |
| 72 base::Bind(&DataReceiverTest::CreateDataSource, |
| 73 base::Unretained(this))).ToV8()); |
23 } | 74 } |
24 | 75 |
25 void TearDown() override { | 76 void TearDown() override { |
26 if (sender_.get()) { | 77 if (sender_.get()) { |
27 sender_->ShutDown(); | 78 sender_->ShutDown(); |
28 sender_ = NULL; | 79 sender_ = NULL; |
29 } | 80 } |
30 ApiTestBase::TearDown(); | 81 ApiTestBase::TearDown(); |
31 } | 82 } |
32 | 83 |
33 std::queue<int32_t> error_to_send_; | 84 std::queue<int32_t> error_to_send_; |
34 std::queue<std::string> data_to_send_; | 85 std::queue<std::string> data_to_send_; |
35 | 86 |
36 private: | 87 private: |
37 void CreateDataSource( | 88 void CreateDataSource( |
38 mojo::InterfaceRequest<device::serial::DataSource> request) { | 89 mojo::InterfaceRequest<device::serial::DataSource> request, |
39 sender_ = mojo::WeakBindToRequest( | 90 mojo::InterfacePtr<device::serial::DataSourceClient> client) { |
40 new device::DataSourceSender( | 91 sender_ = new device::DataSourceSender( |
41 base::Bind(&DataReceiverTest::ReadyToSend, base::Unretained(this)), | 92 request.Pass(), client.Pass(), |
42 base::Bind(base::DoNothing)), | 93 base::Bind(&DataReceiverTest::ReadyToSend, base::Unretained(this)), |
43 &request); | 94 base::Bind(base::DoNothing)); |
44 } | 95 } |
45 | 96 |
46 void ReadyToSend(scoped_ptr<device::WritableBuffer> buffer) { | 97 void ReadyToSend(scoped_ptr<device::WritableBuffer> buffer) { |
47 if (data_to_send_.empty() && error_to_send_.empty()) | 98 if (data_to_send_.empty() && error_to_send_.empty()) |
48 return; | 99 return; |
49 | 100 |
50 std::string data; | 101 std::string data; |
51 int32_t error = 0; | 102 int32_t error = 0; |
52 if (!data_to_send_.empty()) { | 103 if (!data_to_send_.empty()) { |
53 data = data_to_send_.front(); | 104 data = data_to_send_.front(); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 data_to_send_.push("a"); | 170 data_to_send_.push("a"); |
120 RunTest("data_receiver_unittest.js", "testSerializeDuringReceive"); | 171 RunTest("data_receiver_unittest.js", "testSerializeDuringReceive"); |
121 } | 172 } |
122 | 173 |
123 TEST_F(DataReceiverTest, SerializeAfterClose) { | 174 TEST_F(DataReceiverTest, SerializeAfterClose) { |
124 data_to_send_.push("a"); | 175 data_to_send_.push("a"); |
125 RunTest("data_receiver_unittest.js", "testSerializeAfterClose"); | 176 RunTest("data_receiver_unittest.js", "testSerializeAfterClose"); |
126 } | 177 } |
127 | 178 |
128 } // namespace extensions | 179 } // namespace extensions |
OLD | NEW |