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

Side by Side Diff: chrome/browser/chromeos/dbus/bluetooth_agent_service_provider.cc

Issue 9691025: dbus: allow unregistering of exported objects (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update doc from nit Created 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | dbus/bus.h » ('j') | 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 "chrome/browser/chromeos/dbus/bluetooth_agent_service_provider.h" 5 #include "chrome/browser/chromeos/dbus/bluetooth_agent_service_provider.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 19 matching lines...) Expand all
30 30
31 // The BluetoothAgentServiceProvider implementation used in production. 31 // The BluetoothAgentServiceProvider implementation used in production.
32 class BluetoothAgentServiceProviderImpl : public BluetoothAgentServiceProvider { 32 class BluetoothAgentServiceProviderImpl : public BluetoothAgentServiceProvider {
33 public: 33 public:
34 BluetoothAgentServiceProviderImpl(dbus::Bus* bus, 34 BluetoothAgentServiceProviderImpl(dbus::Bus* bus,
35 const dbus::ObjectPath& object_path, 35 const dbus::ObjectPath& object_path,
36 Delegate* delegate) 36 Delegate* delegate)
37 : weak_ptr_factory_(this), 37 : weak_ptr_factory_(this),
38 origin_thread_id_(base::PlatformThread::CurrentId()), 38 origin_thread_id_(base::PlatformThread::CurrentId()),
39 bus_(bus), 39 bus_(bus),
40 delegate_(delegate) { 40 delegate_(delegate),
41 object_path_(object_path) {
41 DVLOG(1) << "Creating BluetoothAdapterClientImpl for " 42 DVLOG(1) << "Creating BluetoothAdapterClientImpl for "
42 << object_path.value(); 43 << object_path.value();
43 44
44 exported_object_ = bus_->GetExportedObject(object_path); 45 exported_object_ = bus_->GetExportedObject(object_path_);
45 46
46 exported_object_->ExportMethod( 47 exported_object_->ExportMethod(
47 bluetooth_agent::kBluetoothAgentInterface, 48 bluetooth_agent::kBluetoothAgentInterface,
48 bluetooth_agent::kRelease, 49 bluetooth_agent::kRelease,
49 base::Bind(&BluetoothAgentServiceProviderImpl::Release, 50 base::Bind(&BluetoothAgentServiceProviderImpl::Release,
50 weak_ptr_factory_.GetWeakPtr()), 51 weak_ptr_factory_.GetWeakPtr()),
51 base::Bind(&BluetoothAgentServiceProviderImpl::ReleaseExported, 52 base::Bind(&BluetoothAgentServiceProviderImpl::ReleaseExported,
52 weak_ptr_factory_.GetWeakPtr())); 53 weak_ptr_factory_.GetWeakPtr()));
53 54
54 exported_object_->ExportMethod( 55 exported_object_->ExportMethod(
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 exported_object_->ExportMethod( 113 exported_object_->ExportMethod(
113 bluetooth_agent::kBluetoothAgentInterface, 114 bluetooth_agent::kBluetoothAgentInterface,
114 bluetooth_agent::kCancel, 115 bluetooth_agent::kCancel,
115 base::Bind(&BluetoothAgentServiceProviderImpl::Cancel, 116 base::Bind(&BluetoothAgentServiceProviderImpl::Cancel,
116 weak_ptr_factory_.GetWeakPtr()), 117 weak_ptr_factory_.GetWeakPtr()),
117 base::Bind(&BluetoothAgentServiceProviderImpl::CancelExported, 118 base::Bind(&BluetoothAgentServiceProviderImpl::CancelExported,
118 weak_ptr_factory_.GetWeakPtr())); 119 weak_ptr_factory_.GetWeakPtr()));
119 } 120 }
120 121
121 virtual ~BluetoothAgentServiceProviderImpl() { 122 virtual ~BluetoothAgentServiceProviderImpl() {
123 // Unregister the object path so we can reuse with a new agent.
124 bus_->UnregisterExportedObject(object_path_);
122 } 125 }
123 126
124 private: 127 private:
125 // Returns true if the current thread is on the origin thread. 128 // Returns true if the current thread is on the origin thread.
126 bool OnOriginThread() { 129 bool OnOriginThread() {
127 return base::PlatformThread::CurrentId() == origin_thread_id_; 130 return base::PlatformThread::CurrentId() == origin_thread_id_;
128 } 131 }
129 132
130 // Called by dbus:: when the agent is unregistered from the Bluetooth 133 // Called by dbus:: when the agent is unregistered from the Bluetooth
131 // daemon, generally at the end of a pairing request. 134 // daemon, generally at the end of a pairing request.
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 518
516 // D-Bus bus object is exported on, not owned by this object and must 519 // D-Bus bus object is exported on, not owned by this object and must
517 // outlive it. 520 // outlive it.
518 dbus::Bus* bus_; 521 dbus::Bus* bus_;
519 522
520 // All incoming method calls are passed on to the Delegate and a callback 523 // All incoming method calls are passed on to the Delegate and a callback
521 // passed to generate the reply. |delegate_| is generally the object that 524 // passed to generate the reply. |delegate_| is generally the object that
522 // owns this one, and must outlive it. 525 // owns this one, and must outlive it.
523 Delegate* delegate_; 526 Delegate* delegate_;
524 527
528 // D-Bus object path of object we are exporting, kept so we can unregister
529 // again in our destructor.
530 dbus::ObjectPath object_path_;
531
525 // D-Bus object we are exporting, owned by this object. 532 // D-Bus object we are exporting, owned by this object.
526 scoped_refptr<dbus::ExportedObject> exported_object_; 533 scoped_refptr<dbus::ExportedObject> exported_object_;
527 534
528 DISALLOW_COPY_AND_ASSIGN(BluetoothAgentServiceProviderImpl); 535 DISALLOW_COPY_AND_ASSIGN(BluetoothAgentServiceProviderImpl);
529 }; 536 };
530 537
531 // The BluetoothAgentServiceProvider implementation used on Linux desktop, 538 // The BluetoothAgentServiceProvider implementation used on Linux desktop,
532 // which does nothing. 539 // which does nothing.
533 class BluetoothAgentServiceProviderStubImpl 540 class BluetoothAgentServiceProviderStubImpl
534 : public BluetoothAgentServiceProvider { 541 : public BluetoothAgentServiceProvider {
(...skipping 17 matching lines...) Expand all
552 const dbus::ObjectPath& object_path, 559 const dbus::ObjectPath& object_path,
553 Delegate* delegate) { 560 Delegate* delegate) {
554 if (system::runtime_environment::IsRunningOnChromeOS()) { 561 if (system::runtime_environment::IsRunningOnChromeOS()) {
555 return new BluetoothAgentServiceProviderImpl(bus, object_path, delegate); 562 return new BluetoothAgentServiceProviderImpl(bus, object_path, delegate);
556 } else { 563 } else {
557 return new BluetoothAgentServiceProviderStubImpl(delegate); 564 return new BluetoothAgentServiceProviderStubImpl(delegate);
558 } 565 }
559 } 566 }
560 567
561 } // namespace chromeos 568 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | dbus/bus.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698