| 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 <stdio.h> | 6 #include <stdio.h> |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 // Wait for our end of the message pipe to be readable. | 162 // Wait for our end of the message pipe to be readable. |
| 163 MojoResult result = WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE); | 163 MojoResult result = WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE); |
| 164 if (result != MOJO_RESULT_OK) { | 164 if (result != MOJO_RESULT_OK) { |
| 165 // It was closed, probably. | 165 // It was closed, probably. |
| 166 CHECK_EQ(result, MOJO_RESULT_FAILED_PRECONDITION); | 166 CHECK_EQ(result, MOJO_RESULT_FAILED_PRECONDITION); |
| 167 break; | 167 break; |
| 168 } | 168 } |
| 169 | 169 |
| 170 std::string read_buffer(1000, '\0'); | 170 std::string read_buffer(1000, '\0'); |
| 171 uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer.size()); | 171 uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer.size()); |
| 172 CHECK_EQ(mp->ReadMessage(0, | 172 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&read_buffer[0]), |
| 173 &read_buffer[0], &read_buffer_size, | 173 MakeUserPointer(&read_buffer_size), NULL, NULL, |
| 174 NULL, NULL, | |
| 175 MOJO_READ_MESSAGE_FLAG_NONE), | 174 MOJO_READ_MESSAGE_FLAG_NONE), |
| 176 MOJO_RESULT_OK); | 175 MOJO_RESULT_OK); |
| 177 read_buffer.resize(read_buffer_size); | 176 read_buffer.resize(read_buffer_size); |
| 178 VLOG(2) << "Child got: " << read_buffer; | 177 VLOG(2) << "Child got: " << read_buffer; |
| 179 | 178 |
| 180 if (read_buffer == quitquitquit) { | 179 if (read_buffer == quitquitquit) { |
| 181 VLOG(2) << "Child quitting."; | 180 VLOG(2) << "Child quitting."; |
| 182 break; | 181 break; |
| 183 } | 182 } |
| 184 | 183 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 208 EXPECT_EQ(MOJO_RESULT_OK, | 207 EXPECT_EQ(MOJO_RESULT_OK, |
| 209 mp->WriteMessage(0, | 208 mp->WriteMessage(0, |
| 210 hello.data(), static_cast<uint32_t>(hello.size()), | 209 hello.data(), static_cast<uint32_t>(hello.size()), |
| 211 NULL, | 210 NULL, |
| 212 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 211 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 213 | 212 |
| 214 EXPECT_EQ(MOJO_RESULT_OK, WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE)); | 213 EXPECT_EQ(MOJO_RESULT_OK, WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE)); |
| 215 | 214 |
| 216 std::string read_buffer(1000, '\0'); | 215 std::string read_buffer(1000, '\0'); |
| 217 uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer.size()); | 216 uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer.size()); |
| 218 CHECK_EQ(mp->ReadMessage(0, | 217 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&read_buffer[0]), |
| 219 &read_buffer[0], &read_buffer_size, | 218 MakeUserPointer(&read_buffer_size), NULL, NULL, |
| 220 NULL, NULL, | |
| 221 MOJO_READ_MESSAGE_FLAG_NONE), | 219 MOJO_READ_MESSAGE_FLAG_NONE), |
| 222 MOJO_RESULT_OK); | 220 MOJO_RESULT_OK); |
| 223 read_buffer.resize(read_buffer_size); | 221 read_buffer.resize(read_buffer_size); |
| 224 VLOG(2) << "Parent got: " << read_buffer; | 222 VLOG(2) << "Parent got: " << read_buffer; |
| 225 EXPECT_EQ(hello + hello, read_buffer); | 223 EXPECT_EQ(hello + hello, read_buffer); |
| 226 | 224 |
| 227 mp->Close(0); | 225 mp->Close(0); |
| 228 | 226 |
| 229 // We sent one message. | 227 // We sent one message. |
| 230 EXPECT_EQ(1 % 100, helper()->WaitForChildShutdown()); | 228 EXPECT_EQ(1 % 100, helper()->WaitForChildShutdown()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 257 quitquitquit.data(), | 255 quitquitquit.data(), |
| 258 static_cast<uint32_t>(quitquitquit.size()), | 256 static_cast<uint32_t>(quitquitquit.size()), |
| 259 NULL, | 257 NULL, |
| 260 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 258 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 261 | 259 |
| 262 for (size_t i = 0; i < kNumMessages; i++) { | 260 for (size_t i = 0; i < kNumMessages; i++) { |
| 263 EXPECT_EQ(MOJO_RESULT_OK, WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE)); | 261 EXPECT_EQ(MOJO_RESULT_OK, WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE)); |
| 264 | 262 |
| 265 std::string read_buffer(kNumMessages * 2, '\0'); | 263 std::string read_buffer(kNumMessages * 2, '\0'); |
| 266 uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer.size()); | 264 uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer.size()); |
| 267 CHECK_EQ(mp->ReadMessage(0, | 265 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&read_buffer[0]), |
| 268 &read_buffer[0], &read_buffer_size, | 266 MakeUserPointer(&read_buffer_size), NULL, NULL, |
| 269 NULL, NULL, | |
| 270 MOJO_READ_MESSAGE_FLAG_NONE), | 267 MOJO_READ_MESSAGE_FLAG_NONE), |
| 271 MOJO_RESULT_OK); | 268 MOJO_RESULT_OK); |
| 272 read_buffer.resize(read_buffer_size); | 269 read_buffer.resize(read_buffer_size); |
| 273 | 270 |
| 274 EXPECT_EQ(std::string(i * 2, 'A' + (i % 26)), read_buffer); | 271 EXPECT_EQ(std::string(i * 2, 'A' + (i % 26)), read_buffer); |
| 275 } | 272 } |
| 276 | 273 |
| 277 // Wait for it to become readable, which should fail (since we sent | 274 // Wait for it to become readable, which should fail (since we sent |
| 278 // "quitquitquit"). | 275 // "quitquitquit"). |
| 279 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 276 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 296 channel_thread.Start(client_platform_handle.Pass(), mp); | 293 channel_thread.Start(client_platform_handle.Pass(), mp); |
| 297 | 294 |
| 298 // Wait for the first message from our parent. | 295 // Wait for the first message from our parent. |
| 299 CHECK_EQ(WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE), MOJO_RESULT_OK); | 296 CHECK_EQ(WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE), MOJO_RESULT_OK); |
| 300 | 297 |
| 301 // It should have a shared buffer. | 298 // It should have a shared buffer. |
| 302 std::string read_buffer(100, '\0'); | 299 std::string read_buffer(100, '\0'); |
| 303 uint32_t num_bytes = static_cast<uint32_t>(read_buffer.size()); | 300 uint32_t num_bytes = static_cast<uint32_t>(read_buffer.size()); |
| 304 DispatcherVector dispatchers; | 301 DispatcherVector dispatchers; |
| 305 uint32_t num_dispatchers = 10; // Maximum number to receive. | 302 uint32_t num_dispatchers = 10; // Maximum number to receive. |
| 306 CHECK_EQ(mp->ReadMessage(0, | 303 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&read_buffer[0]), |
| 307 &read_buffer[0], &num_bytes, | 304 MakeUserPointer(&num_bytes), &dispatchers, |
| 308 &dispatchers, &num_dispatchers, | 305 &num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE), |
| 309 MOJO_READ_MESSAGE_FLAG_NONE), | |
| 310 MOJO_RESULT_OK); | 306 MOJO_RESULT_OK); |
| 311 read_buffer.resize(num_bytes); | 307 read_buffer.resize(num_bytes); |
| 312 CHECK_EQ(read_buffer, std::string("go 1")); | 308 CHECK_EQ(read_buffer, std::string("go 1")); |
| 313 CHECK_EQ(num_dispatchers, 1u); | 309 CHECK_EQ(num_dispatchers, 1u); |
| 314 | 310 |
| 315 CHECK_EQ(dispatchers[0]->GetType(), Dispatcher::kTypeSharedBuffer); | 311 CHECK_EQ(dispatchers[0]->GetType(), Dispatcher::kTypeSharedBuffer); |
| 316 | 312 |
| 317 scoped_refptr<SharedBufferDispatcher> dispatcher( | 313 scoped_refptr<SharedBufferDispatcher> dispatcher( |
| 318 static_cast<SharedBufferDispatcher*>(dispatchers[0].get())); | 314 static_cast<SharedBufferDispatcher*>(dispatchers[0].get())); |
| 319 | 315 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 339 static_cast<uint32_t>(go2.size()), | 335 static_cast<uint32_t>(go2.size()), |
| 340 NULL, | 336 NULL, |
| 341 MOJO_WRITE_MESSAGE_FLAG_NONE), | 337 MOJO_WRITE_MESSAGE_FLAG_NONE), |
| 342 MOJO_RESULT_OK); | 338 MOJO_RESULT_OK); |
| 343 | 339 |
| 344 // Now wait for our parent to send us a message. | 340 // Now wait for our parent to send us a message. |
| 345 CHECK_EQ(WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE), MOJO_RESULT_OK); | 341 CHECK_EQ(WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE), MOJO_RESULT_OK); |
| 346 | 342 |
| 347 read_buffer = std::string(100, '\0'); | 343 read_buffer = std::string(100, '\0'); |
| 348 num_bytes = static_cast<uint32_t>(read_buffer.size()); | 344 num_bytes = static_cast<uint32_t>(read_buffer.size()); |
| 349 CHECK_EQ(mp->ReadMessage(0, | 345 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&read_buffer[0]), |
| 350 &read_buffer[0], &num_bytes, | 346 MakeUserPointer(&num_bytes), NULL, NULL, |
| 351 NULL, NULL, | |
| 352 MOJO_READ_MESSAGE_FLAG_NONE), | 347 MOJO_READ_MESSAGE_FLAG_NONE), |
| 353 MOJO_RESULT_OK); | 348 MOJO_RESULT_OK); |
| 354 read_buffer.resize(num_bytes); | 349 read_buffer.resize(num_bytes); |
| 355 CHECK_EQ(read_buffer, std::string("go 3")); | 350 CHECK_EQ(read_buffer, std::string("go 3")); |
| 356 | 351 |
| 357 // It should have written something to the shared buffer. | 352 // It should have written something to the shared buffer. |
| 358 static const char kWorld[] = "world!!!"; | 353 static const char kWorld[] = "world!!!"; |
| 359 CHECK_EQ(memcmp(mapping->base(), kWorld, sizeof(kWorld)), 0); | 354 CHECK_EQ(memcmp(mapping->base(), kWorld, sizeof(kWorld)), 0); |
| 360 | 355 |
| 361 // And we're done. | 356 // And we're done. |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 | 407 |
| 413 EXPECT_TRUE(dispatcher->HasOneRef()); | 408 EXPECT_TRUE(dispatcher->HasOneRef()); |
| 414 dispatcher = NULL; | 409 dispatcher = NULL; |
| 415 | 410 |
| 416 // Wait for a message from the child. | 411 // Wait for a message from the child. |
| 417 EXPECT_EQ(MOJO_RESULT_OK, WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE)); | 412 EXPECT_EQ(MOJO_RESULT_OK, WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE)); |
| 418 | 413 |
| 419 std::string read_buffer(100, '\0'); | 414 std::string read_buffer(100, '\0'); |
| 420 uint32_t num_bytes = static_cast<uint32_t>(read_buffer.size()); | 415 uint32_t num_bytes = static_cast<uint32_t>(read_buffer.size()); |
| 421 EXPECT_EQ(MOJO_RESULT_OK, | 416 EXPECT_EQ(MOJO_RESULT_OK, |
| 422 mp->ReadMessage(0, | 417 mp->ReadMessage(0, UserPointer<void>(&read_buffer[0]), |
| 423 &read_buffer[0], &num_bytes, | 418 MakeUserPointer(&num_bytes), NULL, NULL, |
| 424 NULL, NULL, | |
| 425 MOJO_READ_MESSAGE_FLAG_NONE)); | 419 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 426 read_buffer.resize(num_bytes); | 420 read_buffer.resize(num_bytes); |
| 427 EXPECT_EQ(std::string("go 2"), read_buffer); | 421 EXPECT_EQ(std::string("go 2"), read_buffer); |
| 428 | 422 |
| 429 // After we get it, the child should have written something to the shared | 423 // After we get it, the child should have written something to the shared |
| 430 // buffer. | 424 // buffer. |
| 431 static const char kHello[] = "hello"; | 425 static const char kHello[] = "hello"; |
| 432 EXPECT_EQ(0, memcmp(mapping->base(), kHello, sizeof(kHello))); | 426 EXPECT_EQ(0, memcmp(mapping->base(), kHello, sizeof(kHello))); |
| 433 | 427 |
| 434 // Now we'll write some stuff to the shared buffer. | 428 // Now we'll write some stuff to the shared buffer. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 462 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()), | 456 scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()), |
| 463 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint()))); | 457 scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint()))); |
| 464 channel_thread.Start(client_platform_handle.Pass(), mp); | 458 channel_thread.Start(client_platform_handle.Pass(), mp); |
| 465 | 459 |
| 466 CHECK_EQ(WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE), MOJO_RESULT_OK); | 460 CHECK_EQ(WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE), MOJO_RESULT_OK); |
| 467 | 461 |
| 468 std::string read_buffer(100, '\0'); | 462 std::string read_buffer(100, '\0'); |
| 469 uint32_t num_bytes = static_cast<uint32_t>(read_buffer.size()); | 463 uint32_t num_bytes = static_cast<uint32_t>(read_buffer.size()); |
| 470 DispatcherVector dispatchers; | 464 DispatcherVector dispatchers; |
| 471 uint32_t num_dispatchers = 10; // Maximum number to receive. | 465 uint32_t num_dispatchers = 10; // Maximum number to receive. |
| 472 CHECK_EQ(mp->ReadMessage(0, | 466 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&read_buffer[0]), |
| 473 &read_buffer[0], &num_bytes, | 467 MakeUserPointer(&num_bytes), &dispatchers, |
| 474 &dispatchers, &num_dispatchers, | 468 &num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE), |
| 475 MOJO_READ_MESSAGE_FLAG_NONE), | |
| 476 MOJO_RESULT_OK); | 469 MOJO_RESULT_OK); |
| 477 mp->Close(0); | 470 mp->Close(0); |
| 478 | 471 |
| 479 read_buffer.resize(num_bytes); | 472 read_buffer.resize(num_bytes); |
| 480 CHECK_EQ(read_buffer, std::string("hello")); | 473 CHECK_EQ(read_buffer, std::string("hello")); |
| 481 CHECK_EQ(num_dispatchers, 1u); | 474 CHECK_EQ(num_dispatchers, 1u); |
| 482 | 475 |
| 483 CHECK_EQ(dispatchers[0]->GetType(), Dispatcher::kTypePlatformHandle); | 476 CHECK_EQ(dispatchers[0]->GetType(), Dispatcher::kTypePlatformHandle); |
| 484 | 477 |
| 485 scoped_refptr<PlatformHandleDispatcher> dispatcher( | 478 scoped_refptr<PlatformHandleDispatcher> dispatcher( |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 551 WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE)); | 544 WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE)); |
| 552 | 545 |
| 553 mp->Close(0); | 546 mp->Close(0); |
| 554 | 547 |
| 555 EXPECT_EQ(0, helper()->WaitForChildShutdown()); | 548 EXPECT_EQ(0, helper()->WaitForChildShutdown()); |
| 556 } | 549 } |
| 557 | 550 |
| 558 } // namespace | 551 } // namespace |
| 559 } // namespace system | 552 } // namespace system |
| 560 } // namespace mojo | 553 } // namespace mojo |
| OLD | NEW |