Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: dbus/test_service.cc

Issue 177703006: dbus: Handle NameOwnerChanged in ObjectManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « dbus/test_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "dbus/test_service.h" 5 #include "dbus/test_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/test/test_timeouts.h" 8 #include "base/test/test_timeouts.h"
9 #include "base/threading/platform_thread.h" 9 #include "base/threading/platform_thread.h"
10 #include "dbus/bus.h" 10 #include "dbus/bus.h"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 void TestService::OnOwnership(base::Callback<void(bool)> callback, 135 void TestService::OnOwnership(base::Callback<void(bool)> callback,
136 const std::string& service_name, 136 const std::string& service_name,
137 bool success) { 137 bool success) {
138 has_ownership_ = success; 138 has_ownership_ = success;
139 LOG_IF(ERROR, !success) << "Failed to own: " << service_name; 139 LOG_IF(ERROR, !success) << "Failed to own: " << service_name;
140 callback.Run(success); 140 callback.Run(success);
141 141
142 on_name_obtained_.Signal(); 142 on_name_obtained_.Signal();
143 } 143 }
144 144
145 void TestService::ReleaseOwnership(base::Closure callback) {
146 bus_->GetDBusTaskRunner()->PostTask(
147 FROM_HERE,
148 base::Bind(&TestService::ReleaseOwnershipInternal,
149 base::Unretained(this),
150 callback));
151 }
152
153 void TestService::ReleaseOwnershipInternal(
154 base::Closure callback) {
155 bus_->ReleaseOwnership("org.chromium.TestService");
156 has_ownership_ = false;
157
158 bus_->GetOriginTaskRunner()->PostTask(
159 FROM_HERE,
160 callback);
161 }
162
145 void TestService::OnExported(const std::string& interface_name, 163 void TestService::OnExported(const std::string& interface_name,
146 const std::string& method_name, 164 const std::string& method_name,
147 bool success) { 165 bool success) {
148 if (!success) { 166 if (!success) {
149 LOG(ERROR) << "Failed to export: " << interface_name << "." 167 LOG(ERROR) << "Failed to export: " << interface_name << "."
150 << method_name; 168 << method_name;
151 // Returning here will make WaitUntilServiceIsStarted() to time out 169 // Returning here will make WaitUntilServiceIsStarted() to time out
152 // and return false. 170 // and return false.
153 return; 171 return;
154 } 172 }
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 ObjectPath object_path; 454 ObjectPath object_path;
437 if (!reader.PopString(&action) || !reader.PopObjectPath(&object_path)) { 455 if (!reader.PopString(&action) || !reader.PopObjectPath(&object_path)) {
438 response_sender.Run(scoped_ptr<Response>()); 456 response_sender.Run(scoped_ptr<Response>());
439 return; 457 return;
440 } 458 }
441 459
442 if (action == "AddObject") 460 if (action == "AddObject")
443 AddObject(object_path); 461 AddObject(object_path);
444 else if (action == "RemoveObject") 462 else if (action == "RemoveObject")
445 RemoveObject(object_path); 463 RemoveObject(object_path);
464 else if (action == "ReleaseOwnership") {
465 ReleaseOwnership(base::Bind(&TestService::PerformActionResponse,
466 base::Unretained(this),
467 method_call, response_sender));
468 return;
469 } else if (action == "Ownership") {
470 ReleaseOwnership(base::Bind(&TestService::OwnershipReleased,
471 base::Unretained(this),
472 method_call, response_sender));
473 return;
474 }
446 475
447 scoped_ptr<Response> response = Response::FromMethodCall(method_call); 476 scoped_ptr<Response> response = Response::FromMethodCall(method_call);
448 response_sender.Run(response.Pass()); 477 response_sender.Run(response.Pass());
449 } 478 }
450 479
480 void TestService::PerformActionResponse(
481 MethodCall* method_call,
482 ExportedObject::ResponseSender response_sender) {
483 scoped_ptr<Response> response = Response::FromMethodCall(method_call);
484 response_sender.Run(response.Pass());
485 }
486
487 void TestService::OwnershipReleased(
488 MethodCall* method_call,
489 ExportedObject::ResponseSender response_sender) {
490 RequestOwnership(base::Bind(&TestService::OwnershipRegained,
491 base::Unretained(this),
492 method_call, response_sender));
493 }
494
495
496 void TestService::OwnershipRegained(
497 MethodCall* method_call,
498 ExportedObject::ResponseSender response_sender,
499 bool success) {
500 PerformActionResponse(method_call, response_sender);
501 }
502
503
451 void TestService::GetManagedObjects( 504 void TestService::GetManagedObjects(
452 MethodCall* method_call, 505 MethodCall* method_call,
453 ExportedObject::ResponseSender response_sender) { 506 ExportedObject::ResponseSender response_sender) {
454 scoped_ptr<Response> response = Response::FromMethodCall(method_call); 507 scoped_ptr<Response> response = Response::FromMethodCall(method_call);
455 MessageWriter writer(response.get()); 508 MessageWriter writer(response.get());
456 509
457 // The managed objects response is a dictionary of object paths identifying 510 // The managed objects response is a dictionary of object paths identifying
458 // the object(s) with a dictionary of strings identifying the interface(s) 511 // the object(s) with a dictionary of strings identifying the interface(s)
459 // they implement and then a dictionary of property values. 512 // they implement and then a dictionary of property values.
460 // 513 //
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 array_writer.OpenDictEntry(&dict_entry_writer); 663 array_writer.OpenDictEntry(&dict_entry_writer);
611 dict_entry_writer.AppendString("Name"); 664 dict_entry_writer.AppendString("Name");
612 dict_entry_writer.AppendVariantOfString(name); 665 dict_entry_writer.AppendVariantOfString(name);
613 array_writer.CloseContainer(&dict_entry_writer); 666 array_writer.CloseContainer(&dict_entry_writer);
614 writer.CloseContainer(&array_writer); 667 writer.CloseContainer(&array_writer);
615 668
616 exported_object_->SendSignal(&signal); 669 exported_object_->SendSignal(&signal);
617 } 670 }
618 671
619 } // namespace dbus 672 } // namespace dbus
OLDNEW
« no previous file with comments | « dbus/test_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698