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

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

Issue 128523003: Unregister Bluetooth profile when the extension that added it is unloaded. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix style issue Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h b/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h
index a0ae71be5793039e2c1f4a39ef6c9474a2d4047c..eb23825eb52b48897b7f4e96e905255895a701ef 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h
@@ -11,6 +11,8 @@
#include "base/memory/scoped_vector.h"
#include "base/memory/weak_ptr.h"
#include "chrome/common/extensions/api/bluetooth.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
#include "device/bluetooth/bluetooth_adapter.h"
#include "device/bluetooth/bluetooth_adapter_factory.h"
#include "device/bluetooth/bluetooth_socket.h"
@@ -26,8 +28,13 @@ class BluetoothProfile;
namespace extensions {
+// Foward declarations of internal structs.
+struct ExtensionBluetoothSocketRecord;
+struct ExtensionBluetoothProfileRecord;
+
class ExtensionBluetoothEventRouter
- : public device::BluetoothAdapter::Observer {
+ : public device::BluetoothAdapter::Observer,
+ public content::NotificationObserver {
public:
explicit ExtensionBluetoothEventRouter(Profile* profile);
virtual ~ExtensionBluetoothEventRouter();
@@ -46,18 +53,22 @@ class ExtensionBluetoothEventRouter
void OnListenerRemoved();
// Register the BluetoothSocket |socket| for use by the extensions system.
- // This class will hold onto the socket for its lifetime, or until
- // ReleaseSocket is called for the socket. Returns an id for the socket.
- int RegisterSocket(scoped_refptr<device::BluetoothSocket> socket);
+ // This class will hold onto the socket for its lifetime until
+ // ReleaseSocket is called for the socket, or until the extension associated
+ // with the socket is disabled/ reloaded. Returns an id for the socket.
+ int RegisterSocket(const std::string& extension_id,
+ scoped_refptr<device::BluetoothSocket> socket);
// Release the BluetoothSocket corresponding to |id|. Returns true if
// the socket was found and released, false otherwise.
bool ReleaseSocket(int id);
// Add the BluetoothProfile |bluetooth_profile| for use by the extension
- // system. This class will hold onto the profile for its lifetime, or until
- // RemoveProfile is called for the profile.
+ // system. This class will hold onto the profile until RemoveProfile is
+ // called for the profile, or until the extension that added the profile
+ // is disabled/reloaded.
void AddProfile(const std::string& uuid,
+ const std::string& extension_id,
device::BluetoothProfile* bluetooth_profile);
// Unregister the BluetoothProfile corersponding to |uuid| and release the
@@ -105,6 +116,11 @@ class ExtensionBluetoothEventRouter
virtual void DeviceAdded(device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) OVERRIDE;
+ // Overridden from content::NotificationObserver
+ virtual void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE;
+
// Exposed for testing.
void SetAdapterForTest(device::BluetoothAdapter* adapter) {
adapter_ = adapter;
@@ -114,6 +130,7 @@ class ExtensionBluetoothEventRouter
void InitializeAdapter(scoped_refptr<device::BluetoothAdapter> adapter);
void MaybeReleaseAdapter();
void DispatchAdapterStateEvent();
+ void CleanUpForExtension(const std::string& extension_id);
bool send_discovery_events_;
bool responsible_for_discovery_;
@@ -128,17 +145,20 @@ class ExtensionBluetoothEventRouter
// the extension javascript.
int next_socket_id_;
- typedef std::map<int, scoped_refptr<device::BluetoothSocket> > SocketMap;
+ typedef std::map<int, ExtensionBluetoothSocketRecord> SocketMap;
SocketMap socket_map_;
typedef ScopedVector<extensions::api::bluetooth::Device>
DeviceList;
DeviceList discovered_devices_;
- // A map that maps uuids to the BluetoothProfile objects.
- typedef std::map<std::string, device::BluetoothProfile*> BluetoothProfileMap;
+ // A map that maps uuids to ExtensionBluetoothProfileRecord.
+ typedef std::map<std::string, ExtensionBluetoothProfileRecord>
+ BluetoothProfileMap;
BluetoothProfileMap bluetooth_profile_map_;
+ content::NotificationRegistrar registrar_;
+
base::WeakPtrFactory<ExtensionBluetoothEventRouter> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(ExtensionBluetoothEventRouter);

Powered by Google App Engine
This is Rietveld 408576698