summaryrefslogtreecommitdiffstats
path: root/extensions
diff options
context:
space:
mode:
authorrockot <rockot@chromium.org>2014-09-05 01:02:44 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-05 08:05:55 +0000
commit1a51b92b7038b82a90c1a1944104eaf8c51a9e1c (patch)
tree9dde79f2e12d64897300d2c389725ab4d349f01f /extensions
parent243eec86f415a6624d8d41b0ea0393eda0b3a808 (diff)
downloadchromium_src-1a51b92b7038b82a90c1a1944104eaf8c51a9e1c.zip
chromium_src-1a51b92b7038b82a90c1a1944104eaf8c51a9e1c.tar.gz
chromium_src-1a51b92b7038b82a90c1a1944104eaf8c51a9e1c.tar.bz2
Fix HidService lifetime issues
This reverts HidService to being a singleton instance for now. BUG=401234 TBR=rpaquay Review URL: https://codereview.chromium.org/523743005 Cr-Commit-Position: refs/heads/master@{#293464}
Diffstat (limited to 'extensions')
-rw-r--r--extensions/browser/api/extensions_api_client.cc6
-rw-r--r--extensions/browser/api/extensions_api_client.h7
-rw-r--r--extensions/browser/api/hid/DEPS1
-rw-r--r--extensions/browser/api/hid/hid_api.cc4
-rw-r--r--extensions/browser/api/hid/hid_device_manager.cc10
-rw-r--r--extensions/browser/api/hid/hid_device_manager.h1
-rw-r--r--extensions/shell/app_shell.gyp2
-rw-r--r--extensions/shell/browser/api/shell_extensions_api_client.cc27
-rw-r--r--extensions/shell/browser/api/shell_extensions_api_client.h28
-rw-r--r--extensions/shell/browser/shell_device_client.cc7
-rw-r--r--extensions/shell/browser/shell_device_client.h1
-rw-r--r--extensions/shell/browser/shell_extensions_browser_client.cc4
12 files changed, 20 insertions, 78 deletions
diff --git a/extensions/browser/api/extensions_api_client.cc b/extensions/browser/api/extensions_api_client.cc
index e797212..471e2b1 100644
--- a/extensions/browser/api/extensions_api_client.cc
+++ b/extensions/browser/api/extensions_api_client.cc
@@ -30,12 +30,6 @@ AppViewGuestDelegate* ExtensionsAPIClient::CreateAppViewGuestDelegate() const {
return NULL;
}
-device::HidService* ExtensionsAPIClient::GetHidService() {
- // This should never be called by clients which don't support the HID API.
- NOTIMPLEMENTED();
- return NULL;
-}
-
WebViewGuestDelegate* ExtensionsAPIClient::CreateWebViewGuestDelegate(
WebViewGuest* web_view_guest) const {
return NULL;
diff --git a/extensions/browser/api/extensions_api_client.h b/extensions/browser/api/extensions_api_client.h
index 5f1a8e3..9332dc6 100644
--- a/extensions/browser/api/extensions_api_client.h
+++ b/extensions/browser/api/extensions_api_client.h
@@ -19,10 +19,6 @@ namespace content {
class BrowserContext;
}
-namespace device {
-class HidService;
-}
-
namespace extensions {
class AppViewGuestDelegate;
@@ -61,9 +57,6 @@ class ExtensionsAPIClient {
// Creates the AppViewGuestDelegate.
virtual AppViewGuestDelegate* CreateAppViewGuestDelegate() const;
- // Returns the HidService instance for this embedder.
- virtual device::HidService* GetHidService();
-
// Returns a delegate for some of WebViewGuest's behavior. The caller owns the
// returned WebViewGuestDelegate.
virtual WebViewGuestDelegate* CreateWebViewGuestDelegate (
diff --git a/extensions/browser/api/hid/DEPS b/extensions/browser/api/hid/DEPS
index 76a0f69..7dc8543 100644
--- a/extensions/browser/api/hid/DEPS
+++ b/extensions/browser/api/hid/DEPS
@@ -1,3 +1,4 @@
include_rules = [
+ "+device/core",
"+device/hid",
]
diff --git a/extensions/browser/api/hid/hid_api.cc b/extensions/browser/api/hid/hid_api.cc
index 05f4720..99cf1bd 100644
--- a/extensions/browser/api/hid/hid_api.cc
+++ b/extensions/browser/api/hid/hid_api.cc
@@ -7,12 +7,12 @@
#include <string>
#include <vector>
+#include "device/core/device_client.h"
#include "device/hid/hid_connection.h"
#include "device/hid/hid_device_filter.h"
#include "device/hid/hid_device_info.h"
#include "device/hid/hid_service.h"
#include "extensions/browser/api/api_resource_manager.h"
-#include "extensions/browser/api/extensions_api_client.h"
#include "extensions/common/api/hid.h"
#include "net/base/io_buffer.h"
@@ -143,7 +143,7 @@ void HidConnectFunction::AsyncWorkStart() {
return;
}
- HidService* hid_service = ExtensionsAPIClient::Get()->GetHidService();
+ HidService* hid_service = device::DeviceClient::Get()->GetHidService();
DCHECK(hid_service);
scoped_refptr<HidConnection> connection =
hid_service->Connect(device_info.device_id);
diff --git a/extensions/browser/api/hid/hid_device_manager.cc b/extensions/browser/api/hid/hid_device_manager.cc
index b57e2d9..1c25025 100644
--- a/extensions/browser/api/hid/hid_device_manager.cc
+++ b/extensions/browser/api/hid/hid_device_manager.cc
@@ -8,6 +8,7 @@
#include <vector>
#include "base/lazy_instance.h"
+#include "device/core/device_client.h"
#include "device/hid/hid_device_filter.h"
#include "device/hid/hid_service.h"
#include "extensions/browser/api/extensions_api_client.h"
@@ -21,7 +22,8 @@ using device::HidUsageAndPage;
namespace extensions {
HidDeviceManager::HidDeviceManager(content::BrowserContext* context)
- : next_resource_id_(0) {}
+ : next_resource_id_(0) {
+}
HidDeviceManager::~HidDeviceManager() {}
@@ -38,7 +40,7 @@ scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices(
const std::vector<HidDeviceFilter>& filters) {
UpdateDevices();
- HidService* hid_service = ExtensionsAPIClient::Get()->GetHidService();
+ HidService* hid_service = device::DeviceClient::Get()->GetHidService();
DCHECK(hid_service);
base::ListValue* api_devices = new base::ListValue();
for (ResourceIdToDeviceIdMap::const_iterator device_iter =
@@ -106,7 +108,7 @@ scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices(
bool HidDeviceManager::GetDeviceInfo(int resource_id,
device::HidDeviceInfo* device_info) {
UpdateDevices();
- HidService* hid_service = ExtensionsAPIClient::Get()->GetHidService();
+ HidService* hid_service = device::DeviceClient::Get()->GetHidService();
DCHECK(hid_service);
ResourceIdToDeviceIdMap::const_iterator device_iter =
@@ -142,7 +144,7 @@ bool HidDeviceManager::HasPermission(const Extension* extension,
void HidDeviceManager::UpdateDevices() {
thread_checker_.CalledOnValidThread();
- HidService* hid_service = ExtensionsAPIClient::Get()->GetHidService();
+ HidService* hid_service = device::DeviceClient::Get()->GetHidService();
DCHECK(hid_service);
std::vector<device::HidDeviceInfo> devices;
diff --git a/extensions/browser/api/hid/hid_device_manager.h b/extensions/browser/api/hid/hid_device_manager.h
index a258be4..f204269 100644
--- a/extensions/browser/api/hid/hid_device_manager.h
+++ b/extensions/browser/api/hid/hid_device_manager.h
@@ -10,6 +10,7 @@
#include <map>
#include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/threading/thread_checker.h"
#include "device/hid/hid_device_info.h"
diff --git a/extensions/shell/app_shell.gyp b/extensions/shell/app_shell.gyp
index 0eeb392..a1e00fa 100644
--- a/extensions/shell/app_shell.gyp
+++ b/extensions/shell/app_shell.gyp
@@ -50,8 +50,6 @@
'app/shell_main_delegate.h',
'browser/api/shell/shell_api.cc',
'browser/api/shell/shell_api.h',
- 'browser/api/shell_extensions_api_client.cc',
- 'browser/api/shell_extensions_api_client.h',
'browser/default_shell_browser_main_delegate.cc',
'browser/default_shell_browser_main_delegate.h',
'browser/desktop_controller.cc',
diff --git a/extensions/shell/browser/api/shell_extensions_api_client.cc b/extensions/shell/browser/api/shell_extensions_api_client.cc
deleted file mode 100644
index a8e7d11..0000000
--- a/extensions/shell/browser/api/shell_extensions_api_client.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "extensions/shell/browser/api/shell_extensions_api_client.h"
-
-#include "content/public/browser/browser_thread.h"
-#include "device/hid/hid_service.h"
-
-namespace extensions {
-
-ShellExtensionsAPIClient::ShellExtensionsAPIClient() {
-}
-
-ShellExtensionsAPIClient::~ShellExtensionsAPIClient() {
-}
-
-device::HidService* ShellExtensionsAPIClient::GetHidService() {
- if (!hid_service_) {
- hid_service_.reset(device::HidService::Create(
- content::BrowserThread::GetMessageLoopProxyForThread(
- content::BrowserThread::UI)));
- }
- return hid_service_.get();
-}
-
-} // namespace extensions
diff --git a/extensions/shell/browser/api/shell_extensions_api_client.h b/extensions/shell/browser/api/shell_extensions_api_client.h
deleted file mode 100644
index 41f548f..0000000
--- a/extensions/shell/browser/api/shell_extensions_api_client.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef EXTENSIONS_SHELL_BROWSER_API_SHELL_EXTENSIONS_API_CLIENT_H_
-#define EXTENSIONS_SHELL_BROWSER_API_SHELL_EXTENSIONS_API_CLIENT_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "extensions/browser/api/extensions_api_client.h"
-
-namespace extensions {
-
-// Extra support for Chrome extensions APIs in app_shell.
-class ShellExtensionsAPIClient : public ExtensionsAPIClient {
- public:
- ShellExtensionsAPIClient();
- virtual ~ShellExtensionsAPIClient();
-
- // ExtensionsAPIClient implementation.
- virtual device::HidService* GetHidService() OVERRIDE;
-
- private:
- scoped_ptr<device::HidService> hid_service_;
-};
-
-} // namespace extensions
-
-#endif // EXTENSIONS_SHELL_BROWSER_API_SHELL_EXTENSIONS_API_CLIENT_H_
diff --git a/extensions/shell/browser/shell_device_client.cc b/extensions/shell/browser/shell_device_client.cc
index b3c8168..55b277b 100644
--- a/extensions/shell/browser/shell_device_client.cc
+++ b/extensions/shell/browser/shell_device_client.cc
@@ -6,6 +6,7 @@
#include "base/logging.h"
#include "content/public/browser/browser_thread.h"
+#include "device/hid/hid_service.h"
#include "device/usb/usb_service.h"
namespace extensions {
@@ -20,4 +21,10 @@ device::UsbService* ShellDeviceClient::GetUsbService() {
content::BrowserThread::UI));
}
+device::HidService* ShellDeviceClient::GetHidService() {
+ return device::HidService::GetInstance(
+ content::BrowserThread::GetMessageLoopProxyForThread(
+ content::BrowserThread::UI));
+}
+
}
diff --git a/extensions/shell/browser/shell_device_client.h b/extensions/shell/browser/shell_device_client.h
index 862d609..c1ede48 100644
--- a/extensions/shell/browser/shell_device_client.h
+++ b/extensions/shell/browser/shell_device_client.h
@@ -21,6 +21,7 @@ class ShellDeviceClient : device::DeviceClient {
// device::DeviceClient implementation
virtual device::UsbService* GetUsbService() OVERRIDE;
+ virtual device::HidService* GetHidService() OVERRIDE;
private:
DISALLOW_COPY_AND_ASSIGN(ShellDeviceClient);
diff --git a/extensions/shell/browser/shell_extensions_browser_client.cc b/extensions/shell/browser/shell_extensions_browser_client.cc
index 84e757c..659f88f 100644
--- a/extensions/shell/browser/shell_extensions_browser_client.cc
+++ b/extensions/shell/browser/shell_extensions_browser_client.cc
@@ -9,12 +9,12 @@
#include "base/prefs/testing_pref_store.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/user_prefs/user_prefs.h"
+#include "extensions/browser/api/extensions_api_client.h"
#include "extensions/browser/api/generated_api_registration.h"
#include "extensions/browser/app_sorting.h"
#include "extensions/browser/extension_function_registry.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/shell/browser/api/generated_api_registration.h"
-#include "extensions/shell/browser/api/shell_extensions_api_client.h"
#include "extensions/shell/browser/shell_app_sorting.h"
#include "extensions/shell/browser/shell_extension_host_delegate.h"
#include "extensions/shell/browser/shell_extension_system_factory.h"
@@ -34,7 +34,7 @@ void RegisterPrefs(user_prefs::PrefRegistrySyncable* registry) {
ShellExtensionsBrowserClient::ShellExtensionsBrowserClient(
BrowserContext* context)
- : browser_context_(context), api_client_(new ShellExtensionsAPIClient) {
+ : browser_context_(context), api_client_(new ExtensionsAPIClient) {
// Set up the preferences service.
base::PrefServiceFactory factory;
factory.set_user_prefs(new TestingPrefStore);