summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-29 23:14:02 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-29 23:14:02 +0000
commit9adb9693e8a90bb63be325dbb5d3391f47f839ba (patch)
tree555765afd7bc851de6f3a2bf4a35151435d58d77 /chrome/browser/automation
parent5b5a5c976aead85a87ced0847c068012d3979cae (diff)
downloadchromium_src-9adb9693e8a90bb63be325dbb5d3391f47f839ba.zip
chromium_src-9adb9693e8a90bb63be325dbb5d3391f47f839ba.tar.gz
chromium_src-9adb9693e8a90bb63be325dbb5d3391f47f839ba.tar.bz2
Part 3 of immutable Extension refactor.
Make ExtensionsService hold const Extension pointers only. This ensures that extensions can't be modified after they're created, and lets us share them between threads. BUG=56558 TEST=no functional change Review URL: http://codereview.chromium.org/4138006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64517 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/automation')
-rw-r--r--chrome/browser/automation/automation_extension_tracker.cc8
-rw-r--r--chrome/browser/automation/automation_extension_tracker.h6
-rw-r--r--chrome/browser/automation/automation_provider.cc29
-rw-r--r--chrome/browser/automation/automation_provider.h8
-rw-r--r--chrome/browser/automation/automation_provider_observers.cc2
-rw-r--r--chrome/browser/automation/automation_provider_observers.h2
-rw-r--r--chrome/browser/automation/automation_resource_tracker.cc13
-rw-r--r--chrome/browser/automation/automation_resource_tracker.h32
-rw-r--r--chrome/browser/automation/testing_automation_provider.cc2
9 files changed, 54 insertions, 48 deletions
diff --git a/chrome/browser/automation/automation_extension_tracker.cc b/chrome/browser/automation/automation_extension_tracker.cc
index cd816d3..8ab734d 100644
--- a/chrome/browser/automation/automation_extension_tracker.cc
+++ b/chrome/browser/automation/automation_extension_tracker.cc
@@ -10,7 +10,7 @@
AutomationExtensionTracker::AutomationExtensionTracker(
IPC::Message::Sender* automation)
- : AutomationResourceTracker<Extension*>(automation) {
+ : AutomationResourceTracker<const Extension*>(automation) {
registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
NotificationService::AllSources());
registrar_.Add(this, NotificationType::EXTENSION_UNLOADED_DISABLED,
@@ -20,9 +20,9 @@ AutomationExtensionTracker::AutomationExtensionTracker(
AutomationExtensionTracker::~AutomationExtensionTracker() {
}
-void AutomationExtensionTracker::AddObserver(Extension* resource) {}
+void AutomationExtensionTracker::AddObserver(const Extension* resource) {}
-void AutomationExtensionTracker::RemoveObserver(Extension* resource) {}
+void AutomationExtensionTracker::RemoveObserver(const Extension* resource) {}
void AutomationExtensionTracker::Observe(NotificationType type,
const NotificationSource& source,
@@ -31,7 +31,7 @@ void AutomationExtensionTracker::Observe(NotificationType type,
type != NotificationType::EXTENSION_UNLOADED_DISABLED)
return;
- Extension* extension = Details<Extension>(details).ptr();
+ const Extension* extension = Details<const Extension>(details).ptr();
Profile* profile = Source<Profile>(source).ptr();
if (profile) {
ExtensionsService* service = profile->GetExtensionsService();
diff --git a/chrome/browser/automation/automation_extension_tracker.h b/chrome/browser/automation/automation_extension_tracker.h
index c1b7ed7..05f16b5 100644
--- a/chrome/browser/automation/automation_extension_tracker.h
+++ b/chrome/browser/automation/automation_extension_tracker.h
@@ -12,7 +12,7 @@ class Extension;
// Tracks an Extension. An Extension is removed on uninstall, not on disable.
class AutomationExtensionTracker
- : public AutomationResourceTracker<Extension*> {
+ : public AutomationResourceTracker<const Extension*> {
public:
explicit AutomationExtensionTracker(IPC::Message::Sender* automation);
@@ -23,10 +23,10 @@ class AutomationExtensionTracker
// extension, is the one who sends the notification about extension
// uninstalls. Instead of using this method, one observer is added for all
// extensions in the constructor.
- virtual void AddObserver(Extension* resource);
+ virtual void AddObserver(const Extension* resource);
// See related comment above as to why this method is empty.
- virtual void RemoveObserver(Extension* resource);
+ virtual void RemoveObserver(const Extension* resource);
// Overriding AutomationResourceTracker Observe. AutomationResourceTracker's
// Observe expects the NotificationSource to be the object that is closing.
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc
index db4ad51..60ed6ef 100644
--- a/chrome/browser/automation/automation_provider.cc
+++ b/chrome/browser/automation/automation_provider.cc
@@ -258,7 +258,7 @@ int AutomationProvider::GetIndexForNavigationController(
return parent->GetIndexOfController(controller);
}
-int AutomationProvider::AddExtension(Extension* extension) {
+int AutomationProvider::AddExtension(const Extension* extension) {
DCHECK(extension);
return extension_tracker_->Add(extension);
}
@@ -299,12 +299,13 @@ DictionaryValue* AutomationProvider::GetDictionaryFromDownloadItem(
return dl_item_value;
}
-Extension* AutomationProvider::GetExtension(int extension_handle) {
+const Extension* AutomationProvider::GetExtension(int extension_handle) {
return extension_tracker_->GetResource(extension_handle);
}
-Extension* AutomationProvider::GetEnabledExtension(int extension_handle) {
- Extension* extension = extension_tracker_->GetResource(extension_handle);
+const Extension* AutomationProvider::GetEnabledExtension(int extension_handle) {
+ const Extension* extension =
+ extension_tracker_->GetResource(extension_handle);
ExtensionsService* service = profile_->GetExtensionsService();
if (extension && service &&
service->GetExtensionById(extension->id(), false))
@@ -312,8 +313,10 @@ Extension* AutomationProvider::GetEnabledExtension(int extension_handle) {
return NULL;
}
-Extension* AutomationProvider::GetDisabledExtension(int extension_handle) {
- Extension* extension = extension_tracker_->GetResource(extension_handle);
+const Extension* AutomationProvider::GetDisabledExtension(
+ int extension_handle) {
+ const Extension* extension =
+ extension_tracker_->GetResource(extension_handle);
ExtensionsService* service = profile_->GetExtensionsService();
if (extension && service &&
service->GetExtensionById(extension->id(), true) &&
@@ -799,7 +802,7 @@ void AutomationProvider::GetEnabledExtensions(
const ExtensionList* extensions = service->extensions();
DCHECK(extensions);
for (size_t i = 0; i < extensions->size(); ++i) {
- Extension* extension = (*extensions)[i];
+ const Extension* extension = (*extensions)[i];
DCHECK(extension);
if (extension->location() == Extension::INTERNAL ||
extension->location() == Extension::LOAD) {
@@ -848,7 +851,7 @@ void AutomationProvider::InstallExtensionAndGetHandle(
void AutomationProvider::UninstallExtension(int extension_handle,
bool* success) {
*success = false;
- Extension* extension = GetExtension(extension_handle);
+ const Extension* extension = GetExtension(extension_handle);
ExtensionsService* service = profile_->GetExtensionsService();
if (extension && service) {
ExtensionUnloadNotificationObserver observer;
@@ -861,7 +864,7 @@ void AutomationProvider::UninstallExtension(int extension_handle,
void AutomationProvider::EnableExtension(int extension_handle,
IPC::Message* reply_message) {
- Extension* extension = GetDisabledExtension(extension_handle);
+ const Extension* extension = GetDisabledExtension(extension_handle);
ExtensionsService* service = profile_->GetExtensionsService();
ExtensionProcessManager* manager = profile_->GetExtensionProcessManager();
// Only enable if this extension is disabled.
@@ -882,7 +885,7 @@ void AutomationProvider::EnableExtension(int extension_handle,
void AutomationProvider::DisableExtension(int extension_handle,
bool* success) {
*success = false;
- Extension* extension = GetEnabledExtension(extension_handle);
+ const Extension* extension = GetEnabledExtension(extension_handle);
ExtensionsService* service = profile_->GetExtensionsService();
if (extension && service) {
ExtensionUnloadNotificationObserver observer;
@@ -897,7 +900,7 @@ void AutomationProvider::ExecuteExtensionActionInActiveTabAsync(
int extension_handle, int browser_handle,
IPC::Message* reply_message) {
bool success = false;
- Extension* extension = GetEnabledExtension(extension_handle);
+ const Extension* extension = GetEnabledExtension(extension_handle);
ExtensionsService* service = profile_->GetExtensionsService();
ExtensionMessageService* message_service =
profile_->GetExtensionMessageService();
@@ -922,7 +925,7 @@ void AutomationProvider::ExecuteExtensionActionInActiveTabAsync(
void AutomationProvider::MoveExtensionBrowserAction(
int extension_handle, int index, bool* success) {
*success = false;
- Extension* extension = GetEnabledExtension(extension_handle);
+ const Extension* extension = GetEnabledExtension(extension_handle);
ExtensionsService* service = profile_->GetExtensionsService();
if (extension && service) {
ExtensionToolbarModel* toolbar = service->toolbar_model();
@@ -943,7 +946,7 @@ void AutomationProvider::GetExtensionProperty(
bool* success,
std::string* value) {
*success = false;
- Extension* extension = GetExtension(extension_handle);
+ const Extension* extension = GetExtension(extension_handle);
ExtensionsService* service = profile_->GetExtensionsService();
if (extension && service) {
ExtensionToolbarModel* toolbar = service->toolbar_model();
diff --git a/chrome/browser/automation/automation_provider.h b/chrome/browser/automation/automation_provider.h
index 5a29b04..66d084a 100644
--- a/chrome/browser/automation/automation_provider.h
+++ b/chrome/browser/automation/automation_provider.h
@@ -150,7 +150,7 @@ class AutomationProvider : public base::RefCounted<AutomationProvider>,
// Adds the extension passed in to the extension tracker, and returns
// the associated handle. If the tracker already contains the extension,
// the handle is simply returned.
- int AddExtension(Extension* extension);
+ int AddExtension(const Extension* extension);
#if defined(OS_WIN)
// Adds the external tab passed in to the tab tracker.
@@ -323,15 +323,15 @@ class AutomationProvider : public base::RefCounted<AutomationProvider>,
// Returns the extension for the given handle. Returns NULL if there is
// no extension for the handle.
- Extension* GetExtension(int extension_handle);
+ const Extension* GetExtension(int extension_handle);
// Returns the extension for the given handle, if the handle is valid and
// the associated extension is enabled. Returns NULL otherwise.
- Extension* GetEnabledExtension(int extension_handle);
+ const Extension* GetEnabledExtension(int extension_handle);
// Returns the extension for the given handle, if the handle is valid and
// the associated extension is disabled. Returns NULL otherwise.
- Extension* GetDisabledExtension(int extension_handle);
+ const Extension* GetDisabledExtension(int extension_handle);
// Method called by the popup menu tracker when a popup menu is opened.
void NotifyPopupMenuOpened();
diff --git a/chrome/browser/automation/automation_provider_observers.cc b/chrome/browser/automation/automation_provider_observers.cc
index aeabd00..7cfa96f 100644
--- a/chrome/browser/automation/automation_provider_observers.cc
+++ b/chrome/browser/automation/automation_provider_observers.cc
@@ -494,7 +494,7 @@ void ExtensionReadyNotificationObserver::Observe(
success = true;
break;
case NotificationType::EXTENSION_LOADED:
- extension_ = Details<Extension>(details).ptr();
+ extension_ = Details<const Extension>(details).ptr();
if (!DidExtensionHostsStopLoading(manager_))
return;
success = true;
diff --git a/chrome/browser/automation/automation_provider_observers.h b/chrome/browser/automation/automation_provider_observers.h
index de20990..7b76638 100644
--- a/chrome/browser/automation/automation_provider_observers.h
+++ b/chrome/browser/automation/automation_provider_observers.h
@@ -273,7 +273,7 @@ class ExtensionReadyNotificationObserver : public NotificationObserver {
scoped_refptr<AutomationProvider> automation_;
int id_;
IPC::Message* reply_message_;
- Extension* extension_;
+ const Extension* extension_;
DISALLOW_COPY_AND_ASSIGN(ExtensionReadyNotificationObserver);
};
diff --git a/chrome/browser/automation/automation_resource_tracker.cc b/chrome/browser/automation/automation_resource_tracker.cc
index c233b41..a82265d 100644
--- a/chrome/browser/automation/automation_resource_tracker.cc
+++ b/chrome/browser/automation/automation_resource_tracker.cc
@@ -15,7 +15,7 @@ AutomationResourceTrackerImpl::AutomationResourceTrackerImpl(
AutomationResourceTrackerImpl::~AutomationResourceTrackerImpl() {
}
-int AutomationResourceTrackerImpl::AddImpl(void* resource) {
+int AutomationResourceTrackerImpl::AddImpl(const void* resource) {
if (ContainsResourceImpl(resource))
return resource_to_handle_[resource];
@@ -30,7 +30,7 @@ int AutomationResourceTrackerImpl::AddImpl(void* resource) {
return handle;
}
-void AutomationResourceTrackerImpl::RemoveImpl(void* resource) {
+void AutomationResourceTrackerImpl::RemoveImpl(const void* resource) {
if (!ContainsResourceImpl(resource))
return;
@@ -48,7 +48,7 @@ int AutomationResourceTrackerImpl::GenerateHandle() {
return ++handle;
}
-bool AutomationResourceTrackerImpl::ContainsResourceImpl(void* resource) {
+bool AutomationResourceTrackerImpl::ContainsResourceImpl(const void* resource) {
return resource_to_handle_.find(resource) != resource_to_handle_.end();
}
@@ -56,7 +56,7 @@ bool AutomationResourceTrackerImpl::ContainsHandleImpl(int handle) {
return handle_to_resource_.find(handle) != handle_to_resource_.end();
}
-void* AutomationResourceTrackerImpl::GetResourceImpl(int handle) {
+const void* AutomationResourceTrackerImpl::GetResourceImpl(int handle) {
HandleToResourceMap::const_iterator iter = handle_to_resource_.find(handle);
if (iter == handle_to_resource_.end())
return NULL;
@@ -64,7 +64,7 @@ void* AutomationResourceTrackerImpl::GetResourceImpl(int handle) {
return iter->second;
}
-int AutomationResourceTrackerImpl::GetHandleImpl(void* resource) {
+int AutomationResourceTrackerImpl::GetHandleImpl(const void* resource) {
ResourceToHandleMap::const_iterator iter =
resource_to_handle_.find(resource);
if (iter == resource_to_handle_.end())
@@ -73,7 +73,8 @@ int AutomationResourceTrackerImpl::GetHandleImpl(void* resource) {
return iter->second;
}
-void AutomationResourceTrackerImpl::HandleCloseNotification(void* resource) {
+void AutomationResourceTrackerImpl::HandleCloseNotification(
+ const void* resource) {
if (!ContainsResourceImpl(resource))
return;
diff --git a/chrome/browser/automation/automation_resource_tracker.h b/chrome/browser/automation/automation_resource_tracker.h
index 671f72b..2d6b0cd 100644
--- a/chrome/browser/automation/automation_resource_tracker.h
+++ b/chrome/browser/automation/automation_resource_tracker.h
@@ -38,21 +38,21 @@ class AutomationResourceTrackerImpl {
// These need to be implemented in AutomationResourceTracker,
// since it needs to call the subclass's type-specific notification
// registration functions.
- virtual void AddObserverTypeProxy(void* resource) = 0;
- virtual void RemoveObserverTypeProxy(void* resource) = 0;
+ virtual void AddObserverTypeProxy(const void* resource) = 0;
+ virtual void RemoveObserverTypeProxy(const void* resource) = 0;
- int AddImpl(void* resource);
- void RemoveImpl(void* resource);
+ int AddImpl(const void* resource);
+ void RemoveImpl(const void* resource);
int GenerateHandle();
- bool ContainsResourceImpl(void* resource);
+ bool ContainsResourceImpl(const void* resource);
bool ContainsHandleImpl(int handle);
- void* GetResourceImpl(int handle);
- int GetHandleImpl(void* resource);
- void HandleCloseNotification(void* resource);
+ const void* GetResourceImpl(int handle);
+ int GetHandleImpl(const void* resource);
+ void HandleCloseNotification(const void* resource);
protected:
- typedef std::map<void*, int> ResourceToHandleMap;
- typedef std::map<int, void*> HandleToResourceMap;
+ typedef std::map<const void*, int> ResourceToHandleMap;
+ typedef std::map<int, const void*> HandleToResourceMap;
ResourceToHandleMap resource_to_handle_;
HandleToResourceMap handle_to_resource_;
@@ -109,8 +109,9 @@ class AutomationResourceTracker : public NotificationObserver,
// Returns the resource pointer associated with a given handle, or NULL
// if that handle is not present in the mapping.
+ // The casts here allow this to compile with both T = Foo and T = const Foo.
T GetResource(int handle) {
- return static_cast<T>(GetResourceImpl(handle));
+ return static_cast<T>(const_cast<void*>(GetResourceImpl(handle)));
}
// Returns the handle associated with a given resource pointer, or 0 if
@@ -144,11 +145,12 @@ class AutomationResourceTracker : public NotificationObserver,
private:
// These proxy calls from the base Impl class to the template's subclss.
- virtual void AddObserverTypeProxy(void* resource) {
- AddObserver(static_cast<T>(resource));
+ // The casts here allow this to compile with both T = Foo and T = const Foo.
+ virtual void AddObserverTypeProxy(const void* resource) {
+ AddObserver(static_cast<T>(const_cast<void*>(resource)));
}
- virtual void RemoveObserverTypeProxy(void* resource) {
- RemoveObserver(static_cast<T>(resource));
+ virtual void RemoveObserverTypeProxy(const void* resource) {
+ RemoveObserver(static_cast<T>(const_cast<void*>(resource)));
}
DISALLOW_COPY_AND_ASSIGN(AutomationResourceTracker);
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc
index 8f648d0..ec10dfa 100644
--- a/chrome/browser/automation/testing_automation_provider.cc
+++ b/chrome/browser/automation/testing_automation_provider.cc
@@ -3672,7 +3672,7 @@ void TestingAutomationProvider::GetThemeInfo(
DictionaryValue* args,
IPC::Message* reply_message) {
scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
- Extension* theme = browser->profile()->GetTheme();
+ const Extension* theme = browser->profile()->GetTheme();
if (theme) {
return_value->SetString("name", theme->name());
return_value->Set("images", theme->GetThemeImages()->DeepCopy());