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

Unified Diff: chrome/browser/extensions/api/api_resource_controller.cc

Issue 10777003: Refactor APIResourceController to ProfileKeyedService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge/antony/fix build. Created 8 years, 5 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/api_resource_controller.cc
diff --git a/chrome/browser/extensions/api/api_resource_controller.cc b/chrome/browser/extensions/api/api_resource_controller.cc
deleted file mode 100644
index ed7677b610b362886cb18ce33a2bd3eb93bc542e..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/api/api_resource_controller.cc
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/extensions/api/api_resource_controller.h"
-#include "chrome/browser/extensions/api/serial/serial_connection.h"
-#include "chrome/browser/extensions/api/socket/socket.h"
-#include "chrome/browser/extensions/api/usb/usb_device_resource.h"
-#include "content/public/browser/browser_thread.h"
-
-using content::BrowserThread;
-
-namespace extensions {
-
-APIResourceController::APIResourceController()
- : next_api_resource_id_(1),
- socket_resource_map_(new APIResourceMap),
- serial_connection_resource_map_(new APIResourceMap),
- usb_device_resource_map_(new APIResourceMap) {}
-
-APIResourceController::~APIResourceController() {
- // If this check failed, then a unit test was using an APIResource but
- // didn't provide the IO/FILE thread message loops needed for those resources
- // to do their job (including destroying themselves at shutdown).
- DCHECK(BrowserThread::IsMessageLoopValid(BrowserThread::IO));
- DCHECK(BrowserThread::IsMessageLoopValid(BrowserThread::FILE));
-
- BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE,
- socket_resource_map_);
- BrowserThread::DeleteSoon(BrowserThread::FILE, FROM_HERE,
- serial_connection_resource_map_);
- BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE,
- usb_device_resource_map_);
-}
-
-APIResourceController::APIResourceMap*
-APIResourceController::GetResourceMapForType(
- APIResource::APIResourceType api_resource_type) const {
- switch (api_resource_type) {
- case APIResource::SocketResource:
- return socket_resource_map_;
- case APIResource::SerialConnectionResource:
- return serial_connection_resource_map_;
- case APIResource::UsbDeviceResource:
- return usb_device_resource_map_;
- default:
- NOTREACHED();
- return NULL;
- }
-}
-
-APIResource* APIResourceController::GetAPIResource(
- APIResource::APIResourceType api_resource_type,
- int api_resource_id) const {
- // TODO(miket): verify that the extension asking for the APIResource is the
- // same one that created it.
- APIResourceMap* map = GetResourceMapForType(api_resource_type);
- APIResourceMap::const_iterator i = map->find(api_resource_id);
- if (i == map->end())
- return NULL;
-
- APIResource* resource = i->second.get();
-
- // This DCHECK is going to catch some legitimate application-developer
- // errors, where someone asks for resource of Type A with the wrong ID that
- // happens to belong to a resource of Type B. But in debug mode, it's more
- // likely to catch a silly copy/paste coding error while developing a new
- // resource type, and unfortunately we can't really tell the difference.
- // We'll choose the more informative outcome (loud explosion during debug)
- // rather than a mysterious empty resource returned to JavaScript.
- DCHECK(!resource || resource->api_resource_type() == api_resource_type);
-
- if (resource && resource->api_resource_type() != api_resource_type)
- resource = NULL;
-
- return resource;
-}
-
-int APIResourceController::AddAPIResource(APIResource* api_resource) {
- APIResourceMap* map = GetResourceMapForType(
- api_resource->api_resource_type());
- int id = GenerateAPIResourceId();
- if (id > 0) {
- linked_ptr<APIResource> resource_ptr(api_resource);
- (*map)[id] = resource_ptr;
- return id;
- }
- return 0;
-}
-
-bool APIResourceController::RemoveAPIResource(
- APIResource::APIResourceType api_resource_type, int api_resource_id) {
- APIResource* api_resource = GetAPIResource(api_resource_type,
- api_resource_id);
- if (!api_resource)
- return false;
- APIResourceMap* map = GetResourceMapForType(
- api_resource->api_resource_type());
- map->erase(api_resource_id);
- return true;
-}
-
-bool APIResourceController::RemoveSocket(int api_resource_id) {
- return RemoveAPIResource(APIResource::SocketResource, api_resource_id);
-}
-
-bool APIResourceController::RemoveSerialConnection(int api_resource_id) {
- return RemoveAPIResource(APIResource::SerialConnectionResource,
- api_resource_id);
-}
-
-bool APIResourceController::RemoveUsbDeviceResource(int api_resource_id) {
- return RemoveAPIResource(APIResource::UsbDeviceResource, api_resource_id);
-}
-
-// TODO(miket): consider partitioning the ID space by extension ID
-// to make it harder for extensions to peek into each others' resources.
-int APIResourceController::GenerateAPIResourceId() {
- return next_api_resource_id_++;
-}
-
-Socket* APIResourceController::GetSocket(int api_resource_id) const {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- return static_cast<Socket*>(GetAPIResource(APIResource::SocketResource,
- api_resource_id));
-}
-
-SerialConnection* APIResourceController::GetSerialConnection(
- int api_resource_id) const {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- return static_cast<SerialConnection*>(
- GetAPIResource(APIResource::SerialConnectionResource, api_resource_id));
-}
-
-UsbDeviceResource* APIResourceController::GetUsbDeviceResource(
- int api_resource_id) const {
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- return static_cast<UsbDeviceResource*>(GetAPIResource(
- APIResource::UsbDeviceResource, api_resource_id));
-}
-
-} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/api_resource_controller.h ('k') | chrome/browser/extensions/api/api_resource_event_notifier.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698