| Index: chrome/browser/extensions/api/bluetooth/bluetooth_api.cc | 
| diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc | 
| index ba365e1bfaa5c3a514fbe941934314af7dc579a6..5373b787c4fcd36fbead0893e94acc3c2a30d228 100644 | 
| --- a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc | 
| +++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc | 
| @@ -11,11 +11,11 @@ | 
| #include <string> | 
|  | 
| #include "base/memory/ref_counted.h" | 
| +#include "chrome/browser/extensions/api/bluetooth/bluetooth_api_factory.h" | 
| #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h" | 
| -#include "chrome/browser/extensions/bluetooth_event_router.h" | 
| +#include "chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h" | 
| #include "chrome/browser/extensions/event_names.h" | 
| #include "chrome/browser/extensions/event_router.h" | 
| -#include "chrome/browser/extensions/extension_service.h" | 
| #include "chrome/browser/extensions/extension_system.h" | 
| #include "chrome/browser/profiles/profile.h" | 
| #include "chrome/common/extensions/api/bluetooth.h" | 
| @@ -39,7 +39,7 @@ using device::BluetoothSocket; | 
| namespace { | 
|  | 
| extensions::ExtensionBluetoothEventRouter* GetEventRouter(Profile* profile) { | 
| -  return profile->GetExtensionService()->bluetooth_event_router(); | 
| +  return extensions::BluetoothAPI::Get(profile)->bluetooth_event_router(); | 
| } | 
|  | 
| const BluetoothAdapter* GetAdapter(Profile* profile) { | 
| @@ -47,8 +47,7 @@ const BluetoothAdapter* GetAdapter(Profile* profile) { | 
| } | 
|  | 
| BluetoothAdapter* GetMutableAdapter(Profile* profile) { | 
| -  BluetoothAdapter* adapter = GetEventRouter(profile)->GetMutableAdapter(); | 
| -  return adapter; | 
| +  return GetEventRouter(profile)->GetMutableAdapter(); | 
| } | 
|  | 
| bool IsBluetoothSupported(Profile* profile) { | 
| @@ -85,6 +84,43 @@ namespace SetOutOfBandPairingData = | 
| namespace Write = extensions::api::bluetooth::Write; | 
|  | 
| namespace extensions { | 
| + | 
| +// static | 
| +BluetoothAPI* BluetoothAPI::Get(Profile* profile) { | 
| +  return BluetoothAPIFactory::GetForProfile(profile); | 
| +} | 
| + | 
| +BluetoothAPI::BluetoothAPI(Profile* profile) : profile_(profile) { | 
| +  ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( | 
| +      this, extensions::event_names::kBluetoothOnAvailabilityChanged); | 
| +  ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( | 
| +      this, extensions::event_names::kBluetoothOnPowerChanged); | 
| +  ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( | 
| +      this, extensions::event_names::kBluetoothOnDiscoveringChanged); | 
| +} | 
| + | 
| +BluetoothAPI::~BluetoothAPI() { | 
| +} | 
| + | 
| +ExtensionBluetoothEventRouter* BluetoothAPI::bluetooth_event_router() { | 
| +  if (!bluetooth_event_router_) | 
| +    bluetooth_event_router_.reset(new ExtensionBluetoothEventRouter(profile_)); | 
| + | 
| +  return bluetooth_event_router_.get(); | 
| +} | 
| + | 
| +void BluetoothAPI::Shutdown() { | 
| +  ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this); | 
| +} | 
| + | 
| +void BluetoothAPI::OnListenerAdded(const std::string& event_name) { | 
| +  bluetooth_event_router()->OnListenerAdded(); | 
| +} | 
| + | 
| +void BluetoothAPI::OnListenerRemoved(const std::string& event_name) { | 
| +  bluetooth_event_router()->OnListenerRemoved(); | 
| +} | 
| + | 
| namespace api { | 
|  | 
| bool BluetoothIsAvailableFunction::RunImpl() { | 
|  |