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

Unified Diff: chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc

Issue 11360200: Decouple bluetooth_event_router from extension_system. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Removed MockBluetoothSocket Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
diff --git a/chrome/browser/extensions/bluetooth_event_router.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
similarity index 81%
rename from chrome/browser/extensions/bluetooth_event_router.cc
rename to chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
index d38db9e8b925a6438b7a199889ee2f576b1ea5dc..b43b6ead707ad82564321f2eda86b5616192e405 100644
--- a/chrome/browser/extensions/bluetooth_event_router.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
@@ -2,9 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/extensions/bluetooth_event_router.h"
+#include "chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h"
#include <map>
+#include <string>
#include "base/json/json_writer.h"
#include "base/memory/ref_counted.h"
@@ -26,18 +27,40 @@ ExtensionBluetoothEventRouter::ExtensionBluetoothEventRouter(Profile* profile)
: send_discovery_events_(false),
responsible_for_discovery_(false),
profile_(profile),
- adapter_(device::BluetoothAdapterFactory::DefaultAdapter()),
+ adapter_(NULL),
+ num_event_listeners_(0),
next_socket_id_(1) {
DCHECK(profile_);
- if (adapter_.get())
- adapter_->AddObserver(this);
}
ExtensionBluetoothEventRouter::~ExtensionBluetoothEventRouter() {
- if (adapter_.get())
- adapter_->RemoveObserver(this);
+ CHECK(socket_map_.size() == 0);
+ CHECK(num_event_listeners_ == 0);
+ MaybeReleaseAdapter();
+}
+
+scoped_refptr<const device::BluetoothAdapter>
+ExtensionBluetoothEventRouter::adapter() {
+ return GetMutableAdapter();
+}
+
+scoped_refptr<device::BluetoothAdapter>
+ExtensionBluetoothEventRouter::GetMutableAdapter() {
+ if (adapter_)
+ return adapter_;
+
+ return device::BluetoothAdapterFactory::DefaultAdapter();
+}
+
+void ExtensionBluetoothEventRouter::OnListenerAdded() {
+ num_event_listeners_++;
+ InitializeAdapterIfNeeded();
+}
- socket_map_.clear();
+void ExtensionBluetoothEventRouter::OnListenerRemoved() {
+ num_event_listeners_--;
+ CHECK(num_event_listeners_ >= 0);
+ MaybeReleaseAdapter();
}
int ExtensionBluetoothEventRouter::RegisterSocket(
@@ -103,7 +126,7 @@ void ExtensionBluetoothEventRouter::DispatchDeviceEvent(
void ExtensionBluetoothEventRouter::AdapterPresentChanged(
device::BluetoothAdapter* adapter, bool present) {
- if (adapter != adapter_.get()) {
+ if (adapter != adapter_) {
DVLOG(1) << "Ignoring event for adapter " << adapter->address();
return;
}
@@ -115,7 +138,7 @@ void ExtensionBluetoothEventRouter::AdapterPresentChanged(
void ExtensionBluetoothEventRouter::AdapterPoweredChanged(
device::BluetoothAdapter* adapter, bool has_power) {
- if (adapter != adapter_.get()) {
+ if (adapter != adapter_) {
DVLOG(1) << "Ignoring event for adapter " << adapter->address();
return;
}
@@ -127,7 +150,7 @@ void ExtensionBluetoothEventRouter::AdapterPoweredChanged(
void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged(
device::BluetoothAdapter* adapter, bool discovering) {
- if (adapter != adapter_.get()) {
+ if (adapter != adapter_) {
DVLOG(1) << "Ignoring event for adapter " << adapter->address();
return;
}
@@ -146,7 +169,7 @@ void ExtensionBluetoothEventRouter::AdapterDiscoveringChanged(
void ExtensionBluetoothEventRouter::DeviceAdded(
device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) {
- if (adapter != adapter_.get()) {
+ if (adapter != adapter_) {
DVLOG(1) << "Ignoring event for adapter " << adapter->address();
return;
}
@@ -164,6 +187,20 @@ void ExtensionBluetoothEventRouter::DeviceAdded(
*extension_device);
}
+void ExtensionBluetoothEventRouter::InitializeAdapterIfNeeded() {
+ if (!adapter_) {
+ adapter_ = GetMutableAdapter();
+ adapter_->AddObserver(this);
+ }
+}
+
+void ExtensionBluetoothEventRouter::MaybeReleaseAdapter() {
+ if (adapter_ && num_event_listeners_ == 0) {
+ adapter_->RemoveObserver(this);
+ adapter_ = NULL;
+ }
+}
+
void ExtensionBluetoothEventRouter::DispatchBooleanValueEvent(
const char* event_name, bool value) {
scoped_ptr<ListValue> args(new ListValue());

Powered by Google App Engine
This is Rietveld 408576698