| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stdint.h> | 5 #include <stdint.h> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "mojo/public/cpp/bindings/binding.h" | 10 #include "mojo/public/cpp/bindings/binding.h" |
| 11 #include "mojo/public/cpp/bindings/strong_binding.h" | 11 #include "mojo/public/cpp/bindings/strong_binding.h" |
| 12 #include "mojo/public/cpp/test_support/test_utils.h" | 12 #include "mojo/public/cpp/test_support/test_utils.h" |
| 13 #include "mojo/public/interfaces/bindings/tests/sample_factory.mojom.h" | 13 #include "mojo/public/interfaces/bindings/tests/sample_factory.mojom.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 15 |
| 16 namespace mojo { | 16 namespace mojo { |
| 17 namespace test { | 17 namespace test { |
| 18 namespace { | 18 namespace { |
| 19 | 19 |
| 20 const char kText1[] = "hello"; | 20 const char kText1[] = "hello"; |
| 21 const char kText2[] = "world"; | 21 const char kText2[] = "world"; |
| 22 | 22 |
| 23 void RecordString(std::string* storage, | 23 void RecordString(std::string* storage, |
| 24 const base::Closure& closure, | 24 const base::Closure& closure, |
| 25 String str) { | 25 const std::string& str) { |
| 26 *storage = str.PassStorage(); | 26 *storage = str; |
| 27 closure.Run(); | 27 closure.Run(); |
| 28 } | 28 } |
| 29 | 29 |
| 30 base::Callback<void(mojo::String)> MakeStringRecorder( | 30 base::Callback<void(const std::string&)> MakeStringRecorder( |
| 31 std::string* storage, | 31 std::string* storage, |
| 32 const base::Closure& closure) { | 32 const base::Closure& closure) { |
| 33 return base::Bind(&RecordString, storage, closure); | 33 return base::Bind(&RecordString, storage, closure); |
| 34 } | 34 } |
| 35 | 35 |
| 36 class ImportedInterfaceImpl : public imported::ImportedInterface { | 36 class ImportedInterfaceImpl : public imported::ImportedInterface { |
| 37 public: | 37 public: |
| 38 ImportedInterfaceImpl( | 38 ImportedInterfaceImpl( |
| 39 InterfaceRequest<imported::ImportedInterface> request, | 39 InterfaceRequest<imported::ImportedInterface> request, |
| 40 const base::Closure& closure) | 40 const base::Closure& closure) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 51 static int do_something_count_; | 51 static int do_something_count_; |
| 52 Binding<ImportedInterface> binding_; | 52 Binding<ImportedInterface> binding_; |
| 53 base::Closure closure_; | 53 base::Closure closure_; |
| 54 }; | 54 }; |
| 55 int ImportedInterfaceImpl::do_something_count_ = 0; | 55 int ImportedInterfaceImpl::do_something_count_ = 0; |
| 56 | 56 |
| 57 class SampleNamedObjectImpl : public sample::NamedObject { | 57 class SampleNamedObjectImpl : public sample::NamedObject { |
| 58 public: | 58 public: |
| 59 explicit SampleNamedObjectImpl(InterfaceRequest<sample::NamedObject> request) | 59 explicit SampleNamedObjectImpl(InterfaceRequest<sample::NamedObject> request) |
| 60 : binding_(this, std::move(request)) {} | 60 : binding_(this, std::move(request)) {} |
| 61 void SetName(const mojo::String& name) override { name_ = name; } | 61 void SetName(const std::string& name) override { name_ = name; } |
| 62 | 62 |
| 63 void GetName(const GetNameCallback& callback) override { | 63 void GetName(const GetNameCallback& callback) override { |
| 64 callback.Run(name_); | 64 callback.Run(name_); |
| 65 } | 65 } |
| 66 | 66 |
| 67 private: | 67 private: |
| 68 std::string name_; | 68 std::string name_; |
| 69 StrongBinding<sample::NamedObject> binding_; | 69 StrongBinding<sample::NamedObject> binding_; |
| 70 }; | 70 }; |
| 71 | 71 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 void PumpMessages() { base::RunLoop().RunUntilIdle(); } | 160 void PumpMessages() { base::RunLoop().RunUntilIdle(); } |
| 161 | 161 |
| 162 private: | 162 private: |
| 163 base::MessageLoop loop_; | 163 base::MessageLoop loop_; |
| 164 }; | 164 }; |
| 165 | 165 |
| 166 void DoStuff(bool* got_response, | 166 void DoStuff(bool* got_response, |
| 167 std::string* got_text_reply, | 167 std::string* got_text_reply, |
| 168 const base::Closure& closure, | 168 const base::Closure& closure, |
| 169 sample::ResponsePtr response, | 169 sample::ResponsePtr response, |
| 170 String text_reply) { | 170 const std::string& text_reply) { |
| 171 *got_text_reply = text_reply; | 171 *got_text_reply = text_reply; |
| 172 | 172 |
| 173 if (response->pipe.is_valid()) { | 173 if (response->pipe.is_valid()) { |
| 174 std::string text2; | 174 std::string text2; |
| 175 EXPECT_TRUE(ReadTextMessage(response->pipe.get(), &text2)); | 175 EXPECT_TRUE(ReadTextMessage(response->pipe.get(), &text2)); |
| 176 | 176 |
| 177 // Ensure that simply accessing response.pipe does not close it. | 177 // Ensure that simply accessing response.pipe does not close it. |
| 178 EXPECT_TRUE(response->pipe.is_valid()); | 178 EXPECT_TRUE(response->pipe.is_valid()); |
| 179 | 179 |
| 180 EXPECT_EQ(std::string(kText2), text2); | 180 EXPECT_EQ(std::string(kText2), text2); |
| 181 | 181 |
| 182 // Do some more tests of handle passing: | 182 // Do some more tests of handle passing: |
| 183 ScopedMessagePipeHandle p = std::move(response->pipe); | 183 ScopedMessagePipeHandle p = std::move(response->pipe); |
| 184 EXPECT_TRUE(p.is_valid()); | 184 EXPECT_TRUE(p.is_valid()); |
| 185 EXPECT_FALSE(response->pipe.is_valid()); | 185 EXPECT_FALSE(response->pipe.is_valid()); |
| 186 } | 186 } |
| 187 | 187 |
| 188 *got_response = true; | 188 *got_response = true; |
| 189 closure.Run(); | 189 closure.Run(); |
| 190 } | 190 } |
| 191 | 191 |
| 192 void DoStuff2(bool* got_response, | 192 void DoStuff2(bool* got_response, |
| 193 std::string* got_text_reply, | 193 std::string* got_text_reply, |
| 194 const base::Closure& closure, | 194 const base::Closure& closure, |
| 195 String text_reply) { | 195 const std::string& text_reply) { |
| 196 *got_response = true; | 196 *got_response = true; |
| 197 *got_text_reply = text_reply; | 197 *got_text_reply = text_reply; |
| 198 closure.Run(); | 198 closure.Run(); |
| 199 } | 199 } |
| 200 | 200 |
| 201 TEST_F(HandlePassingTest, Basic) { | 201 TEST_F(HandlePassingTest, Basic) { |
| 202 sample::FactoryPtr factory; | 202 sample::FactoryPtr factory; |
| 203 SampleFactoryImpl factory_impl(GetProxy(&factory)); | 203 SampleFactoryImpl factory_impl(GetProxy(&factory)); |
| 204 | 204 |
| 205 MessagePipe pipe0; | 205 MessagePipe pipe0; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 TEST_F(HandlePassingTest, PipesAreClosed) { | 297 TEST_F(HandlePassingTest, PipesAreClosed) { |
| 298 sample::FactoryPtr factory; | 298 sample::FactoryPtr factory; |
| 299 SampleFactoryImpl factory_impl(GetProxy(&factory)); | 299 SampleFactoryImpl factory_impl(GetProxy(&factory)); |
| 300 | 300 |
| 301 MessagePipe extra_pipe; | 301 MessagePipe extra_pipe; |
| 302 | 302 |
| 303 MojoHandle handle0_value = extra_pipe.handle0.get().value(); | 303 MojoHandle handle0_value = extra_pipe.handle0.get().value(); |
| 304 MojoHandle handle1_value = extra_pipe.handle1.get().value(); | 304 MojoHandle handle1_value = extra_pipe.handle1.get().value(); |
| 305 | 305 |
| 306 { | 306 { |
| 307 Array<ScopedMessagePipeHandle> pipes(2); | 307 std::vector<ScopedMessagePipeHandle> pipes(2); |
| 308 pipes[0] = std::move(extra_pipe.handle0); | 308 pipes[0] = std::move(extra_pipe.handle0); |
| 309 pipes[1] = std::move(extra_pipe.handle1); | 309 pipes[1] = std::move(extra_pipe.handle1); |
| 310 | 310 |
| 311 sample::RequestPtr request(sample::Request::New()); | 311 sample::RequestPtr request(sample::Request::New()); |
| 312 request->more_pipes = std::move(pipes); | 312 request->more_pipes = std::move(pipes); |
| 313 | 313 |
| 314 factory->DoStuff(std::move(request), ScopedMessagePipeHandle(), | 314 factory->DoStuff(std::move(request), ScopedMessagePipeHandle(), |
| 315 sample::Factory::DoStuffCallback()); | 315 sample::Factory::DoStuffCallback()); |
| 316 } | 316 } |
| 317 | 317 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 run_loop.Run(); | 349 run_loop.Run(); |
| 350 run_loop2.Run(); | 350 run_loop2.Run(); |
| 351 | 351 |
| 352 EXPECT_EQ(std::string("object1"), name1); | 352 EXPECT_EQ(std::string("object1"), name1); |
| 353 EXPECT_EQ(std::string("object2"), name2); | 353 EXPECT_EQ(std::string("object2"), name2); |
| 354 } | 354 } |
| 355 | 355 |
| 356 } // namespace | 356 } // namespace |
| 357 } // namespace test | 357 } // namespace test |
| 358 } // namespace mojo | 358 } // namespace mojo |
| OLD | NEW |