| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/metrics/histogram_samples.h" | 9 #include "base/metrics/histogram_samples.h" |
| 10 #include "base/metrics/statistics_recorder.h" | 10 #include "base/metrics/statistics_recorder.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 // Start the D-Bus thread. | 37 // Start the D-Bus thread. |
| 38 dbus_thread_.reset(new base::Thread("D-Bus Thread")); | 38 dbus_thread_.reset(new base::Thread("D-Bus Thread")); |
| 39 base::Thread::Options thread_options; | 39 base::Thread::Options thread_options; |
| 40 thread_options.message_loop_type = base::MessageLoop::TYPE_IO; | 40 thread_options.message_loop_type = base::MessageLoop::TYPE_IO; |
| 41 ASSERT_TRUE(dbus_thread_->StartWithOptions(thread_options)); | 41 ASSERT_TRUE(dbus_thread_->StartWithOptions(thread_options)); |
| 42 | 42 |
| 43 // Create the client, using the D-Bus thread. | 43 // Create the client, using the D-Bus thread. |
| 44 Bus::Options bus_options; | 44 Bus::Options bus_options; |
| 45 bus_options.bus_type = Bus::SESSION; | 45 bus_options.bus_type = Bus::SESSION; |
| 46 bus_options.connection_type = Bus::PRIVATE; | 46 bus_options.connection_type = Bus::PRIVATE; |
| 47 bus_options.dbus_task_runner = dbus_thread_->message_loop_proxy(); | 47 bus_options.dbus_task_runner = dbus_thread_->task_runner(); |
| 48 bus_ = new Bus(bus_options); | 48 bus_ = new Bus(bus_options); |
| 49 object_proxy_ = bus_->GetObjectProxy( | 49 object_proxy_ = bus_->GetObjectProxy( |
| 50 "org.chromium.TestService", | 50 "org.chromium.TestService", |
| 51 ObjectPath("/org/chromium/TestObject")); | 51 ObjectPath("/org/chromium/TestObject")); |
| 52 ASSERT_TRUE(bus_->HasDBusThread()); | 52 ASSERT_TRUE(bus_->HasDBusThread()); |
| 53 | 53 |
| 54 object_proxy_->SetNameOwnerChangedCallback( | 54 object_proxy_->SetNameOwnerChangedCallback( |
| 55 base::Bind(&SignalSenderVerificationTest::OnNameOwnerChanged, | 55 base::Bind(&SignalSenderVerificationTest::OnNameOwnerChanged, |
| 56 base::Unretained(this), | 56 base::Unretained(this), |
| 57 &on_name_owner_changed_called_)); | 57 &on_name_owner_changed_called_)); |
| 58 | 58 |
| 59 // Connect to the "Test" signal of "org.chromium.TestInterface" from | 59 // Connect to the "Test" signal of "org.chromium.TestInterface" from |
| 60 // the remote object. | 60 // the remote object. |
| 61 object_proxy_->ConnectToSignal( | 61 object_proxy_->ConnectToSignal( |
| 62 "org.chromium.TestInterface", | 62 "org.chromium.TestInterface", |
| 63 "Test", | 63 "Test", |
| 64 base::Bind(&SignalSenderVerificationTest::OnTestSignal, | 64 base::Bind(&SignalSenderVerificationTest::OnTestSignal, |
| 65 base::Unretained(this)), | 65 base::Unretained(this)), |
| 66 base::Bind(&SignalSenderVerificationTest::OnConnected, | 66 base::Bind(&SignalSenderVerificationTest::OnConnected, |
| 67 base::Unretained(this))); | 67 base::Unretained(this))); |
| 68 // Wait until the object proxy is connected to the signal. | 68 // Wait until the object proxy is connected to the signal. |
| 69 run_loop_.reset(new base::RunLoop); | 69 run_loop_.reset(new base::RunLoop); |
| 70 run_loop_->Run(); | 70 run_loop_->Run(); |
| 71 | 71 |
| 72 // Start the test service, using the D-Bus thread. | 72 // Start the test service, using the D-Bus thread. |
| 73 TestService::Options options; | 73 TestService::Options options; |
| 74 options.dbus_task_runner = dbus_thread_->message_loop_proxy(); | 74 options.dbus_task_runner = dbus_thread_->task_runner(); |
| 75 test_service_.reset(new TestService(options)); | 75 test_service_.reset(new TestService(options)); |
| 76 ASSERT_TRUE(test_service_->StartService()); | 76 ASSERT_TRUE(test_service_->StartService()); |
| 77 ASSERT_TRUE(test_service_->WaitUntilServiceIsStarted()); | 77 ASSERT_TRUE(test_service_->WaitUntilServiceIsStarted()); |
| 78 ASSERT_TRUE(test_service_->HasDBusThread()); | 78 ASSERT_TRUE(test_service_->HasDBusThread()); |
| 79 ASSERT_TRUE(test_service_->has_ownership()); | 79 ASSERT_TRUE(test_service_->has_ownership()); |
| 80 | 80 |
| 81 // Same setup for the second TestService. This service should not have the | 81 // Same setup for the second TestService. This service should not have the |
| 82 // ownership of the name at this point. | 82 // ownership of the name at this point. |
| 83 test_service2_.reset(new TestService(options)); | 83 test_service2_.reset(new TestService(options)); |
| 84 ASSERT_TRUE(test_service2_->StartService()); | 84 ASSERT_TRUE(test_service2_->StartService()); |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 // OnNameOwnerChanged will PostTask to quit the message loop. | 271 // OnNameOwnerChanged will PostTask to quit the message loop. |
| 272 run_loop_.reset(new base::RunLoop); | 272 run_loop_.reset(new base::RunLoop); |
| 273 run_loop_->Run(); | 273 run_loop_->Run(); |
| 274 // latest_name_owner_ should be empty as the owner is gone. | 274 // latest_name_owner_ should be empty as the owner is gone. |
| 275 ASSERT_TRUE(latest_name_owner_.empty()); | 275 ASSERT_TRUE(latest_name_owner_.empty()); |
| 276 // Reset the flag as NameOwnerChanged is already received in setup. | 276 // Reset the flag as NameOwnerChanged is already received in setup. |
| 277 on_name_owner_changed_called_ = false; | 277 on_name_owner_changed_called_ = false; |
| 278 | 278 |
| 279 // Start a test service that allows theft, using the D-Bus thread. | 279 // Start a test service that allows theft, using the D-Bus thread. |
| 280 TestService::Options options; | 280 TestService::Options options; |
| 281 options.dbus_task_runner = dbus_thread_->message_loop_proxy(); | 281 options.dbus_task_runner = dbus_thread_->task_runner(); |
| 282 options.request_ownership_options = Bus::REQUIRE_PRIMARY_ALLOW_REPLACEMENT; | 282 options.request_ownership_options = Bus::REQUIRE_PRIMARY_ALLOW_REPLACEMENT; |
| 283 TestService stealable_test_service(options); | 283 TestService stealable_test_service(options); |
| 284 ASSERT_TRUE(stealable_test_service.StartService()); | 284 ASSERT_TRUE(stealable_test_service.StartService()); |
| 285 ASSERT_TRUE(stealable_test_service.WaitUntilServiceIsStarted()); | 285 ASSERT_TRUE(stealable_test_service.WaitUntilServiceIsStarted()); |
| 286 ASSERT_TRUE(stealable_test_service.HasDBusThread()); | 286 ASSERT_TRUE(stealable_test_service.HasDBusThread()); |
| 287 ASSERT_TRUE(stealable_test_service.has_ownership()); | 287 ASSERT_TRUE(stealable_test_service.has_ownership()); |
| 288 | 288 |
| 289 // OnNameOwnerChanged will PostTask to quit the message loop. | 289 // OnNameOwnerChanged will PostTask to quit the message loop. |
| 290 run_loop_.reset(new base::RunLoop); | 290 run_loop_.reset(new base::RunLoop); |
| 291 run_loop_->Run(); | 291 run_loop_->Run(); |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 | 392 |
| 393 // Now the second service owns the name. | 393 // Now the second service owns the name. |
| 394 const char kNewMessage[] = "hello, new world"; | 394 const char kNewMessage[] = "hello, new world"; |
| 395 | 395 |
| 396 test_service2_->SendTestSignal(kNewMessage); | 396 test_service2_->SendTestSignal(kNewMessage); |
| 397 WaitForTestSignal(); | 397 WaitForTestSignal(); |
| 398 ASSERT_EQ(kNewMessage, test_signal_string_); | 398 ASSERT_EQ(kNewMessage, test_signal_string_); |
| 399 } | 399 } |
| 400 | 400 |
| 401 } // namespace dbus | 401 } // namespace dbus |
| OLD | NEW |