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

Unified Diff: extensions/browser/api/device_permissions_manager.cc

Issue 980023002: Move device/usb classes from the FILE thread to UI thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add more thread assertions. Created 5 years, 8 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: extensions/browser/api/device_permissions_manager.cc
diff --git a/extensions/browser/api/device_permissions_manager.cc b/extensions/browser/api/device_permissions_manager.cc
index 17e3eab44c01b0f9d5209fb4ee7988a7ce8173a0..d64c0271c43742c30a0fb3a96245e7739a4fa93d 100644
--- a/extensions/browser/api/device_permissions_manager.cc
+++ b/extensions/browser/api/device_permissions_manager.cc
@@ -233,16 +233,13 @@ std::set<scoped_refptr<DevicePermissionEntry>> GetDevicePermissionEntries(
} // namespace
DevicePermissionEntry::DevicePermissionEntry(
- scoped_refptr<device::UsbDevice> device,
- const base::string16& serial_number,
- const base::string16& manufacturer_string,
- const base::string16& product_string)
+ scoped_refptr<device::UsbDevice> device)
: device_(device),
vendor_id_(device->vendor_id()),
product_id_(device->product_id()),
- serial_number_(serial_number),
- manufacturer_string_(manufacturer_string),
- product_string_(product_string) {
+ serial_number_(device->serial_number()),
+ manufacturer_string_(device->manufacturer_string()),
+ product_string_(device->product_string()) {
}
DevicePermissionEntry::DevicePermissionEntry(
@@ -341,14 +338,13 @@ DevicePermissions::~DevicePermissions() {
}
scoped_refptr<DevicePermissionEntry> DevicePermissions::FindEntry(
- scoped_refptr<device::UsbDevice> device,
- const base::string16& serial_number) const {
+ scoped_refptr<device::UsbDevice> device) const {
const auto& ephemeral_device_entry = ephemeral_devices_.find(device);
if (ephemeral_device_entry != ephemeral_devices_.end()) {
return ephemeral_device_entry->second;
}
- if (serial_number.empty()) {
+ if (device->serial_number().empty()) {
return nullptr;
}
@@ -362,7 +358,7 @@ scoped_refptr<DevicePermissionEntry> DevicePermissions::FindEntry(
if (entry->product_id() != device->product_id()) {
continue;
}
- if (entry->serial_number() != serial_number) {
+ if (entry->serial_number() != device->serial_number()) {
continue;
}
return entry;
@@ -376,50 +372,22 @@ DevicePermissions::DevicePermissions(BrowserContext* context,
entries_ = GetDevicePermissionEntries(prefs, extension_id);
}
-DevicePermissions::DevicePermissions(const DevicePermissions* original)
- : entries_(original->entries_),
- ephemeral_devices_(original->ephemeral_devices_) {
-}
-
-class DevicePermissionsManager::FileThreadHelper : public UsbService::Observer {
- public:
- FileThreadHelper(
- base::WeakPtr<DevicePermissionsManager> device_permissions_manager)
- : device_permissions_manager_(device_permissions_manager),
- observer_(this) {}
- virtual ~FileThreadHelper() {}
-
- void Start() {
- DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- UsbService* service = device::DeviceClient::Get()->GetUsbService();
- if (service) {
- observer_.Add(service);
- }
- }
-
- private:
- void OnDeviceRemovedCleanup(scoped_refptr<UsbDevice> device) override {
- DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&DevicePermissionsManager::OnDeviceRemoved,
- device_permissions_manager_, device));
- }
-
- base::WeakPtr<DevicePermissionsManager> device_permissions_manager_;
- ScopedObserver<UsbService, UsbService::Observer> observer_;
-};
-
// static
DevicePermissionsManager* DevicePermissionsManager::Get(
BrowserContext* context) {
return DevicePermissionsManagerFactory::GetForBrowserContext(context);
}
-scoped_ptr<DevicePermissions> DevicePermissionsManager::GetForExtension(
+DevicePermissions* DevicePermissionsManager::GetForExtension(
const std::string& extension_id) {
DCHECK(CalledOnValidThread());
- return make_scoped_ptr(new DevicePermissions(GetOrInsert(extension_id)));
+ DevicePermissions* device_permissions = GetInternal(extension_id);
+ if (!device_permissions) {
+ device_permissions = new DevicePermissions(context_, extension_id);
+ extension_id_to_device_permissions_[extension_id] = device_permissions;
+ }
+
+ return device_permissions;
}
std::vector<base::string16>
@@ -427,7 +395,7 @@ DevicePermissionsManager::GetPermissionMessageStrings(
const std::string& extension_id) const {
DCHECK(CalledOnValidThread());
std::vector<base::string16> messages;
- const DevicePermissions* device_permissions = Get(extension_id);
+ const DevicePermissions* device_permissions = GetInternal(extension_id);
if (device_permissions) {
for (const scoped_refptr<DevicePermissionEntry>& entry :
device_permissions->entries()) {
@@ -439,15 +407,12 @@ DevicePermissionsManager::GetPermissionMessageStrings(
void DevicePermissionsManager::AllowUsbDevice(
const std::string& extension_id,
- scoped_refptr<device::UsbDevice> device,
- const base::string16& product_string,
- const base::string16& manufacturer_string,
- const base::string16& serial_number) {
+ scoped_refptr<device::UsbDevice> device) {
DCHECK(CalledOnValidThread());
- DevicePermissions* device_permissions = GetOrInsert(extension_id);
+ DevicePermissions* device_permissions = GetForExtension(extension_id);
- scoped_refptr<DevicePermissionEntry> device_entry(new DevicePermissionEntry(
- device, serial_number, manufacturer_string, product_string));
+ scoped_refptr<DevicePermissionEntry> device_entry(
+ new DevicePermissionEntry(device));
if (device_entry->IsPersistent()) {
for (const auto& entry : device_permissions->entries()) {
@@ -474,13 +439,9 @@ void DevicePermissionsManager::AllowUsbDevice(
// Only start observing when an ephemeral device has been added so that
// UsbService is not automatically initialized on profile creation (which it
// would be if this call were in the constructor).
- if (!helper_) {
- helper_ = new FileThreadHelper(weak_factory_.GetWeakPtr());
- // base::Unretained is safe because any task to delete helper_ will be
- // executed after this call.
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&FileThreadHelper::Start, base::Unretained(helper_)));
+ UsbService* usb_service = device::DeviceClient::Get()->GetUsbService();
+ if (!usb_service_observer_.IsObserving(usb_service)) {
+ usb_service_observer_.Add(usb_service);
}
}
}
@@ -499,7 +460,7 @@ void DevicePermissionsManager::RemoveEntry(
const std::string& extension_id,
scoped_refptr<DevicePermissionEntry> entry) {
DCHECK(CalledOnValidThread());
- DevicePermissions* device_permissions = Get(extension_id);
+ DevicePermissions* device_permissions = GetInternal(extension_id);
DCHECK(device_permissions);
DCHECK(ContainsKey(device_permissions->entries_, entry));
device_permissions->entries_.erase(entry);
@@ -514,7 +475,7 @@ void DevicePermissionsManager::Clear(const std::string& extension_id) {
DCHECK(CalledOnValidThread());
ClearDevicePermissionEntries(ExtensionPrefs::Get(context_), extension_id);
- DevicePermissions* device_permissions = Get(extension_id);
+ DevicePermissions* device_permissions = GetInternal(extension_id);
if (device_permissions) {
extension_id_to_device_permissions_.erase(extension_id);
delete device_permissions;
@@ -525,8 +486,7 @@ DevicePermissionsManager::DevicePermissionsManager(
content::BrowserContext* context)
: context_(context),
process_manager_observer_(this),
- helper_(nullptr),
- weak_factory_(this) {
+ usb_service_observer_(this) {
process_manager_observer_.Add(ProcessManager::Get(context));
}
@@ -535,13 +495,9 @@ DevicePermissionsManager::~DevicePermissionsManager() {
DevicePermissions* device_permissions = map_entry.second;
delete device_permissions;
}
- if (helper_) {
- BrowserThread::DeleteSoon(BrowserThread::FILE, FROM_HERE, helper_);
- helper_ = nullptr;
- }
}
-DevicePermissions* DevicePermissionsManager::Get(
+DevicePermissions* DevicePermissionsManager::GetInternal(
const std::string& extension_id) const {
std::map<std::string, DevicePermissions*>::const_iterator it =
extension_id_to_device_permissions_.find(extension_id);
@@ -552,22 +508,11 @@ DevicePermissions* DevicePermissionsManager::Get(
return NULL;
}
-DevicePermissions* DevicePermissionsManager::GetOrInsert(
- const std::string& extension_id) {
- DevicePermissions* device_permissions = Get(extension_id);
- if (!device_permissions) {
- device_permissions = new DevicePermissions(context_, extension_id);
- extension_id_to_device_permissions_[extension_id] = device_permissions;
- }
-
- return device_permissions;
-}
-
void DevicePermissionsManager::OnBackgroundHostClose(
const std::string& extension_id) {
DCHECK(CalledOnValidThread());
- DevicePermissions* device_permissions = Get(extension_id);
+ DevicePermissions* device_permissions = GetInternal(extension_id);
if (device_permissions) {
// When all of the app's windows are closed and the background page is
// suspended all ephemeral device permissions are cleared.
@@ -578,7 +523,7 @@ void DevicePermissionsManager::OnBackgroundHostClose(
}
}
-void DevicePermissionsManager::OnDeviceRemoved(
+void DevicePermissionsManager::OnDeviceRemovedCleanup(
scoped_refptr<UsbDevice> device) {
DCHECK(CalledOnValidThread());
for (const auto& map_entry : extension_id_to_device_permissions_) {
« no previous file with comments | « extensions/browser/api/device_permissions_manager.h ('k') | extensions/browser/api/device_permissions_prompt.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698