summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/autocomplete/autocomplete_popup_model.cc3
-rw-r--r--chrome/browser/autocomplete/keyword_provider.cc5
-rw-r--r--chrome/browser/automation/automation_provider.cc2
-rw-r--r--chrome/browser/extensions/extension_browsertest.cc2
-rw-r--r--chrome/browser/extensions/extension_event_router.cc5
-rw-r--r--chrome/browser/extensions/extension_module.cc4
-rw-r--r--chrome/browser/extensions/extension_process_manager.cc2
-rw-r--r--chrome/browser/extensions/extension_service.cc103
-rw-r--r--chrome/browser/extensions/extension_service.h35
-rw-r--r--chrome/browser/extensions/extension_service_unittest.cc10
-rw-r--r--chrome/browser/extensions/extension_toolbar_model.cc4
-rw-r--r--chrome/browser/extensions/extension_updater.cc50
-rw-r--r--chrome/browser/extensions/extension_updater.h12
-rw-r--r--chrome/browser/extensions/extension_updater_unittest.cc100
-rw-r--r--chrome/browser/extensions/extension_web_ui.cc2
-rw-r--r--chrome/browser/extensions/extensions_ui.cc5
-rw-r--r--chrome/browser/extensions/pending_extension_manager.cc2
-rw-r--r--chrome/browser/extensions/user_script_master.cc4
-rw-r--r--chrome/browser/sync/glue/extension_sync.cc28
-rw-r--r--chrome/browser/sync/glue/extension_util.cc21
-rw-r--r--chrome/browser/sync/glue/extension_util.h2
-rw-r--r--chrome/browser/sync/glue/theme_util.cc19
-rw-r--r--chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm5
-rw-r--r--chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc2
-rw-r--r--chrome/browser/ui/views/browser_actions_container.cc5
25 files changed, 237 insertions, 195 deletions
diff --git a/chrome/browser/autocomplete/autocomplete_popup_model.cc b/chrome/browser/autocomplete/autocomplete_popup_model.cc
index a48aae60a..baa8928 100644
--- a/chrome/browser/autocomplete/autocomplete_popup_model.cc
+++ b/chrome/browser/autocomplete/autocomplete_popup_model.cc
@@ -166,7 +166,8 @@ bool AutocompletePopupModel::GetKeywordForText(const string16& text,
GetExtensionById(template_url->GetExtensionId(), false);
if (!extension ||
(profile_->IsOffTheRecord() &&
- !profile_->GetExtensionService()->IsIncognitoEnabled(extension)))
+ !profile_->GetExtensionService()->
+ IsIncognitoEnabled(extension->id())))
return false;
}
diff --git a/chrome/browser/autocomplete/keyword_provider.cc b/chrome/browser/autocomplete/keyword_provider.cc
index 99ea49c..fab254f 100644
--- a/chrome/browser/autocomplete/keyword_provider.cc
+++ b/chrome/browser/autocomplete/keyword_provider.cc
@@ -190,8 +190,9 @@ void KeywordProvider::Start(const AutocompleteInput& input,
ExtensionService* service = profile_->GetExtensionService();
const Extension* extension = service->GetExtensionById(
template_url->GetExtensionId(), false);
- bool enabled = extension && (!profile_->IsOffTheRecord() ||
- service->IsIncognitoEnabled(extension));
+ bool enabled =
+ extension && (!profile_->IsOffTheRecord() ||
+ service->IsIncognitoEnabled(extension->id()));
if (!enabled) {
i = keyword_matches.erase(i);
continue;
diff --git a/chrome/browser/automation/automation_provider.cc b/chrome/browser/automation/automation_provider.cc
index 182d308..72448f0 100644
--- a/chrome/browser/automation/automation_provider.cc
+++ b/chrome/browser/automation/automation_provider.cc
@@ -936,7 +936,7 @@ void AutomationProvider::GetExtensionProperty(
// Skip this extension if we are in incognito mode
// and it is not incognito-enabled.
if (profile_->IsOffTheRecord() &&
- !service->IsIncognitoEnabled(*iter))
+ !service->IsIncognitoEnabled((*iter)->id()))
continue;
if (*iter == extension) {
found_index = index;
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index bbadbfa4..670789a 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -88,7 +88,7 @@ bool ExtensionBrowserTest::LoadExtensionImpl(const FilePath& path,
// are set up with the defaults.
service->extension_prefs()->OnExtensionInstalled(
extension, Extension::ENABLED, false);
- service->SetIsIncognitoEnabled(extension, incognito_enabled);
+ service->SetIsIncognitoEnabled(extension->id(), incognito_enabled);
service->SetAllowFileAccess(extension, fileaccess_enabled);
return WaitForExtensionHostsToLoad();
diff --git a/chrome/browser/extensions/extension_event_router.cc b/chrome/browser/extensions/extension_event_router.cc
index 257a7f2..a86bf1c 100644
--- a/chrome/browser/extensions/extension_event_router.cc
+++ b/chrome/browser/extensions/extension_event_router.cc
@@ -75,8 +75,9 @@ bool ExtensionEventRouter::CanCrossIncognito(Profile* profile,
// We allow the extension to see events and data from another profile iff it
// uses "spanning" behavior and it has incognito access. "split" mode
// extensions only see events for a matching profile.
- return (profile->GetExtensionService()->IsIncognitoEnabled(extension) &&
- !extension->incognito_split_mode());
+ return
+ (profile->GetExtensionService()->IsIncognitoEnabled(extension->id()) &&
+ !extension->incognito_split_mode());
}
ExtensionEventRouter::ExtensionEventRouter(Profile* profile)
diff --git a/chrome/browser/extensions/extension_module.cc b/chrome/browser/extensions/extension_module.cc
index bb13067..a1c884b 100644
--- a/chrome/browser/extensions/extension_module.cc
+++ b/chrome/browser/extensions/extension_module.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -27,7 +27,7 @@ bool IsAllowedIncognitoAccessFunction::RunImpl() {
const Extension* extension = GetExtension();
result_.reset(Value::CreateBooleanValue(
- ext_service->IsIncognitoEnabled(extension)));
+ ext_service->IsIncognitoEnabled(extension->id())));
return true;
}
diff --git a/chrome/browser/extensions/extension_process_manager.cc b/chrome/browser/extensions/extension_process_manager.cc
index 8ff58e6f..a9a7e81 100644
--- a/chrome/browser/extensions/extension_process_manager.cc
+++ b/chrome/browser/extensions/extension_process_manager.cc
@@ -439,7 +439,7 @@ bool IncognitoExtensionProcessManager::IsIncognitoEnabled(
const Extension* extension) {
ExtensionService* service =
browsing_instance_->profile()->GetExtensionService();
- return service && service->IsIncognitoEnabled(extension);
+ return service && service->IsIncognitoEnabled(extension->id());
}
void IncognitoExtensionProcessManager::Observe(
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index a45e2bb..361e165 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -428,7 +428,9 @@ ExtensionService::ExtensionService(Profile* profile,
&update_frequency);
}
updater_ = new ExtensionUpdater(this,
+ extension_prefs,
profile->GetPrefs(),
+ profile,
update_frequency);
}
@@ -673,6 +675,21 @@ void ExtensionService::ClearExtensionData(const GURL& extension_url) {
deleter->StartDeleting();
}
+bool ExtensionService::IsExtensionEnabled(
+ const std::string& extension_id) const {
+ // TODO(akalin): GetExtensionState() isn't very safe as it returns
+ // Extension::ENABLED by default; either change it to return
+ // something else by default or create a separate function that does
+ // so.
+ return
+ extension_prefs_->GetExtensionState(extension_id) == Extension::ENABLED;
+}
+
+bool ExtensionService::IsExternalExtensionUninstalled(
+ const std::string& extension_id) const {
+ return extension_prefs_->IsExternalExtensionUninstalled(extension_id);
+}
+
void ExtensionService::EnableExtension(const std::string& extension_id) {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -1089,10 +1106,6 @@ ExtensionPrefs* ExtensionService::extension_prefs() {
return extension_prefs_;
}
-const ExtensionPrefs& ExtensionService::const_extension_prefs() const {
- return *extension_prefs_;
-}
-
ExtensionUpdater* ExtensionService::updater() {
return updater_.get();
}
@@ -1113,30 +1126,44 @@ void ExtensionService::CheckAdminBlacklist() {
UnloadExtension(to_be_removed[i], UnloadedExtensionInfo::DISABLE);
}
-bool ExtensionService::IsIncognitoEnabled(const Extension* extension) {
- // If this is a component extension we always allow it to work in incognito
- // mode.
- if (extension->location() == Extension::COMPONENT)
+void ExtensionService::CheckForUpdates() {
+ if (updater()) {
+ updater()->CheckNow();
+ } else {
+ LOG(WARNING) << "CheckForUpdates() called with auto-update turned off";
+ }
+}
+
+bool ExtensionService::IsIncognitoEnabled(
+ const std::string& extension_id) const {
+ // If this is an existing component extension we always allow it to
+ // work in incognito mode.
+ const Extension* extension = GetExtensionById(extension_id, true);
+ if (extension && extension->location() == Extension::COMPONENT)
return true;
// Check the prefs.
- return extension_prefs_->IsIncognitoEnabled(extension->id());
+ return extension_prefs_->IsIncognitoEnabled(extension_id);
}
-void ExtensionService::SetIsIncognitoEnabled(const Extension* extension,
- bool enabled) {
+void ExtensionService::SetIsIncognitoEnabled(
+ const std::string& extension_id, bool enabled) {
+ const Extension* extension = GetExtensionById(extension_id, false);
+ if (extension && extension->location() == Extension::COMPONENT) {
+ // This shouldn't be called for component extensions.
+ NOTREACHED();
+ return;
+ }
+
// Broadcast unloaded and loaded events to update browser state. Only bother
// if the value changed and the extension is actually enabled, since there is
// no UI otherwise.
- bool old_enabled = extension_prefs_->IsIncognitoEnabled(extension->id());
+ bool old_enabled = extension_prefs_->IsIncognitoEnabled(extension_id);
if (enabled == old_enabled)
return;
- extension_prefs_->SetIsIncognitoEnabled(extension->id(), enabled);
-
- bool extension_is_enabled = std::find(extensions_.begin(), extensions_.end(),
- extension) != extensions_.end();
- if (extension_is_enabled) {
+ extension_prefs_->SetIsIncognitoEnabled(extension_id, enabled);
+ if (extension) {
NotifyExtensionUnloaded(extension, UnloadedExtensionInfo::DISABLE);
NotifyExtensionLoaded(extension);
}
@@ -1146,7 +1173,8 @@ bool ExtensionService::CanCrossIncognito(const Extension* extension) {
// We allow the extension to see events and data from another profile iff it
// uses "spanning" behavior and it has incognito access. "split" mode
// extensions only see events for a matching profile.
- return IsIncognitoEnabled(extension) && !extension->incognito_split_mode();
+ return IsIncognitoEnabled(extension->id()) &&
+ !extension->incognito_split_mode();
}
bool ExtensionService::AllowFileAccess(const Extension* extension) {
@@ -1516,18 +1544,18 @@ void ExtensionService::OnExtensionInstalled(const Extension* extension) {
// Ensure extension is deleted unless we transfer ownership.
scoped_refptr<const Extension> scoped_extension(extension);
- Extension::State initial_state = Extension::DISABLED;
+ const std::string& id = extension->id();
+ bool initial_enable = false;
bool initial_enable_incognito = false;
PendingExtensionInfo pending_extension_info;
- if (pending_extension_manager()->GetById(extension->id(),
- &pending_extension_info)) {
- pending_extension_manager()->Remove(extension->id());
+ if (pending_extension_manager()->GetById(id, &pending_extension_info)) {
+ pending_extension_manager()->Remove(id);
if (!pending_extension_info.ShouldAllowInstall(*extension)) {
LOG(WARNING)
<< "ShouldAllowInstall() returned false for "
- << extension->id() << " of type " << extension->GetType()
+ << id << " of type " << extension->GetType()
<< " and update URL " << extension->update_url().spec()
<< "; not installing";
@@ -1547,38 +1575,35 @@ void ExtensionService::OnExtensionInstalled(const Extension* extension) {
if (extension->is_theme()) {
DCHECK(pending_extension_info.enable_on_install());
- initial_state = Extension::ENABLED;
+ initial_enable = true;
DCHECK(!pending_extension_info.enable_incognito_on_install());
initial_enable_incognito = false;
} else {
- initial_state =
- pending_extension_info.enable_on_install() ?
- Extension::ENABLED : Extension::DISABLED;
+ initial_enable = pending_extension_info.enable_on_install();
initial_enable_incognito =
pending_extension_info.enable_incognito_on_install();
}
} else {
- // Make sure we preserve enabled/disabled states.
- Extension::State existing_state =
- extension_prefs_->GetExtensionState(extension->id());
- initial_state =
- (existing_state == Extension::DISABLED) ?
- Extension::DISABLED : Extension::ENABLED;
- initial_enable_incognito =
- extension_prefs_->IsIncognitoEnabled(extension->id());
+ // We explicitly want to re-enable an uninstalled external
+ // extension; if we're here, that means the user is manually
+ // installing the extension.
+ initial_enable =
+ IsExtensionEnabled(id) || IsExternalExtensionUninstalled(id);
+ initial_enable_incognito = IsIncognitoEnabled(id);
}
UMA_HISTOGRAM_ENUMERATION("Extensions.InstallType",
extension->GetType(), 100);
ShownSectionsHandler::OnExtensionInstalled(profile_->GetPrefs(), extension);
extension_prefs_->OnExtensionInstalled(
- extension, initial_state, initial_enable_incognito);
+ extension, initial_enable ? Extension::ENABLED : Extension::DISABLED,
+ initial_enable_incognito);
// Unpacked extensions default to allowing file access, but if that has been
// overridden, don't reset the value.
if (Extension::ShouldAlwaysAllowFileAccess(Extension::LOAD) &&
- !extension_prefs_->HasAllowFileAccessSetting(extension->id())) {
- extension_prefs_->SetAllowFileAccess(extension->id(), true);
+ !extension_prefs_->HasAllowFileAccessSetting(id)) {
+ extension_prefs_->SetAllowFileAccess(id, true);
}
// If the extension is a theme, tell the profile (and therefore ThemeProvider)
@@ -1597,7 +1622,7 @@ void ExtensionService::OnExtensionInstalled(const Extension* extension) {
if (extension->is_app()) {
ExtensionIdSet installed_ids = GetAppIds();
- installed_ids.insert(extension->id());
+ installed_ids.insert(id);
default_apps_.DidInstallApp(installed_ids);
}
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index a8f55ee..54f70d6 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -63,6 +63,9 @@ class ExtensionServiceInterface {
virtual void UninstallExtension(const std::string& extension_id,
bool external_uninstall) = 0;
+ virtual bool IsExtensionEnabled(const std::string& extension_id) const = 0;
+ virtual bool IsExternalExtensionUninstalled(
+ const std::string& extension_id) const = 0;
virtual void EnableExtension(const std::string& extension_id) = 0;
virtual void DisableExtension(const std::string& extension_id) = 0;
@@ -71,17 +74,11 @@ class ExtensionServiceInterface {
virtual void CheckAdminBlacklist() = 0;
virtual bool HasInstalledExtensions() = 0;
- virtual void SetIsIncognitoEnabled(const Extension* extension,
+ virtual bool IsIncognitoEnabled(const std::string& extension_id) const = 0;
+ virtual void SetIsIncognitoEnabled(const std::string& extension_id,
bool enabled) = 0;
- // TODO(skerner): Change to const ExtensionPrefs& extension_prefs() const,
- // ExtensionPrefs* mutable_extension_prefs().
- virtual ExtensionPrefs* extension_prefs() = 0;
- virtual const ExtensionPrefs& const_extension_prefs() const = 0;
-
- virtual ExtensionUpdater* updater() = 0;
-
- virtual Profile* profile() = 0;
+ virtual void CheckForUpdates() = 0;
};
// Manages installed and running Chromium extensions.
@@ -168,8 +165,9 @@ class ExtensionService
DefaultApps* default_apps() { return &default_apps_; }
// Whether this extension can run in an incognito window.
- bool IsIncognitoEnabled(const Extension* extension);
- virtual void SetIsIncognitoEnabled(const Extension* extension, bool enabled);
+ virtual bool IsIncognitoEnabled(const std::string& extension_id) const;
+ virtual void SetIsIncognitoEnabled(const std::string& extension_id,
+ bool enabled);
// Returns true if the given extension can see events and data from another
// sub-profile (incognito to original profile, or vice versa).
@@ -233,6 +231,10 @@ class ExtensionService
virtual void UninstallExtension(const std::string& extension_id,
bool external_uninstall);
+ virtual bool IsExtensionEnabled(const std::string& extension_id) const;
+ virtual bool IsExternalExtensionUninstalled(
+ const std::string& extension_id) const;
+
// Enable or disable an extension. No action if the extension is already
// enabled/disabled.
virtual void EnableExtension(const std::string& extension_id);
@@ -335,6 +337,8 @@ class ExtensionService
// set of extensions.
virtual void CheckAdminBlacklist();
+ virtual void CheckForUpdates();
+
void set_extensions_enabled(bool enabled) { extensions_enabled_ = enabled; }
bool extensions_enabled() { return extensions_enabled_; }
@@ -346,21 +350,22 @@ class ExtensionService
return show_extensions_prompts_;
}
- virtual Profile* profile();
+ Profile* profile();
// Profile calls this when it is being destroyed so that we know not to call
// it.
void DestroyingProfile();
- virtual ExtensionPrefs* extension_prefs();
- virtual const ExtensionPrefs& const_extension_prefs() const;
+ // TODO(skerner): Change to const ExtensionPrefs& extension_prefs() const,
+ // ExtensionPrefs* mutable_extension_prefs().
+ ExtensionPrefs* extension_prefs();
// Whether the extension service is ready.
// TODO(skerner): Get rid of this method. crbug.com/63756
bool is_ready() { return ready_; }
// Note that this may return NULL if autoupdate is not turned on.
- virtual ExtensionUpdater* updater();
+ ExtensionUpdater* updater();
ExtensionToolbarModel* toolbar_model() { return &toolbar_model_; }
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index aa64f1e..cae8b1b 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -2024,14 +2024,14 @@ TEST_F(ExtensionServiceTest, UpdateExtensionPreservesState) {
// Disable it and allow it to run in incognito. These settings should carry
// over to the updated version.
service_->DisableExtension(good->id());
- service_->SetIsIncognitoEnabled(good, true);
+ service_->SetIsIncognitoEnabled(good->id(), true);
path = extensions_path.AppendASCII("good2.crx");
UpdateExtension(good_crx, path, INSTALLED);
ASSERT_EQ(1u, service_->disabled_extensions()->size());
const Extension* good2 = service_->disabled_extensions()->at(0);
ASSERT_EQ("1.0.0.1", good2->version()->GetString());
- EXPECT_TRUE(service_->IsIncognitoEnabled(good2));
+ EXPECT_TRUE(service_->IsIncognitoEnabled(good2->id()));
}
// Tests that updating preserves extension location.
@@ -2168,7 +2168,7 @@ TEST_F(ExtensionServiceTest, UpdatePendingExtension) {
EXPECT_EQ(kGoodInitialState,
service_->extension_prefs()->GetExtensionState(extension->id()));
EXPECT_EQ(kGoodInitialIncognitoEnabled,
- service_->IsIncognitoEnabled(extension));
+ service_->IsIncognitoEnabled(extension->id()));
}
namespace {
@@ -2200,7 +2200,7 @@ TEST_F(ExtensionServiceTest, UpdatePendingTheme) {
EXPECT_EQ(Extension::ENABLED,
service_->extension_prefs()->GetExtensionState(extension->id()));
- EXPECT_FALSE(service_->IsIncognitoEnabled(extension));
+ EXPECT_FALSE(service_->IsIncognitoEnabled(extension->id()));
}
// Test updating a pending CRX as if the source is an external extension
@@ -2226,7 +2226,7 @@ TEST_F(ExtensionServiceTest, UpdatePendingExternalCrx) {
EXPECT_EQ(Extension::ENABLED,
service_->extension_prefs()->GetExtensionState(extension->id()));
- EXPECT_FALSE(service_->IsIncognitoEnabled(extension));
+ EXPECT_FALSE(service_->IsIncognitoEnabled(extension->id()));
}
// Test updating a pending CRX as if the source is an external extension
diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc
index 11bfeb7..1c3a403 100644
--- a/chrome/browser/extensions/extension_toolbar_model.cc
+++ b/chrome/browser/extensions/extension_toolbar_model.cc
@@ -238,7 +238,7 @@ int ExtensionToolbarModel::IncognitoIndexToOriginal(int incognito_index) {
int original_index = 0, i = 0;
for (ExtensionList::iterator iter = begin(); iter != end();
++iter, ++original_index) {
- if (service_->IsIncognitoEnabled(*iter)) {
+ if (service_->IsIncognitoEnabled((*iter)->id())) {
if (incognito_index == i)
break;
++i;
@@ -253,7 +253,7 @@ int ExtensionToolbarModel::OriginalIndexToIncognito(int original_index) {
++iter, ++i) {
if (original_index == i)
break;
- if (service_->IsIncognitoEnabled(*iter))
+ if (service_->IsIncognitoEnabled((*iter)->id()))
++incognito_index;
}
return incognito_index;
diff --git a/chrome/browser/extensions/extension_updater.cc b/chrome/browser/extensions/extension_updater.cc
index 22af3a1..e14ba2a 100644
--- a/chrome/browser/extensions/extension_updater.cc
+++ b/chrome/browser/extensions/extension_updater.cc
@@ -205,8 +205,11 @@ static int CalculateActivePingDays(const Time& last_active_ping_day,
} // namespace
ManifestFetchesBuilder::ManifestFetchesBuilder(
- ExtensionServiceInterface* service) : service_(service) {
+ ExtensionServiceInterface* service,
+ ExtensionPrefs* prefs)
+ : service_(service), prefs_(prefs) {
DCHECK(service_);
+ DCHECK(prefs_);
}
ManifestFetchesBuilder::~ManifestFetchesBuilder() {}
@@ -224,8 +227,7 @@ void ManifestFetchesBuilder::AddExtension(const Extension& extension) {
// communicate to the the gallery update servers.
std::string update_url_data;
if (!extension.UpdatesFromGallery())
- update_url_data = service_->extension_prefs()->
- GetUpdateUrlData(extension.id());
+ update_url_data = prefs_->GetUpdateUrlData(extension.id());
AddExtensionData(extension.location(),
extension.id(),
@@ -339,11 +341,11 @@ void ManifestFetchesBuilder::AddExtensionData(
fetches_.find(update_url);
// Find or create a ManifestFetchData to add this extension to.
- ExtensionPrefs* prefs = service_->extension_prefs();
ManifestFetchData::PingData ping_data;
- ping_data.rollcall_days = CalculatePingDays(prefs->LastPingDay(id));
- ping_data.active_days = CalculateActivePingDays(prefs->LastActivePingDay(id),
- prefs->GetActiveBit(id));
+ ping_data.rollcall_days = CalculatePingDays(prefs_->LastPingDay(id));
+ ping_data.active_days =
+ CalculateActivePingDays(prefs_->LastActivePingDay(id),
+ prefs_->GetActiveBit(id));
while (existing_iter != fetches_.end()) {
if (existing_iter->second->AddExtension(id, version.GetString(),
ping_data, update_url_data)) {
@@ -423,10 +425,13 @@ ExtensionUpdater::ExtensionFetch::ExtensionFetch(const std::string& i,
ExtensionUpdater::ExtensionFetch::~ExtensionFetch() {}
ExtensionUpdater::ExtensionUpdater(ExtensionServiceInterface* service,
+ ExtensionPrefs* extension_prefs,
PrefService* prefs,
+ Profile* profile,
int frequency_seconds)
: alive_(false), service_(service), frequency_seconds_(frequency_seconds),
- prefs_(prefs), file_handler_(new ExtensionUpdaterFileHandler()),
+ extension_prefs_(extension_prefs), prefs_(prefs), profile_(profile),
+ file_handler_(new ExtensionUpdaterFileHandler()),
blacklist_checks_enabled_(true) {
Init();
}
@@ -506,7 +511,9 @@ void ExtensionUpdater::Start() {
// If these are NULL, then that means we've been called after Stop()
// has been called.
DCHECK(service_);
+ DCHECK(extension_prefs_);
DCHECK(prefs_);
+ DCHECK(profile_);
alive_ = true;
// Make sure our prefs are registered, then schedule the first check.
EnsureInt64PrefRegistered(prefs_, kLastExtensionsUpdateCheck);
@@ -518,7 +525,9 @@ void ExtensionUpdater::Start() {
void ExtensionUpdater::Stop() {
alive_ = false;
service_ = NULL;
+ extension_prefs_ = NULL;
prefs_ = NULL;
+ profile_ = NULL;
timer_.Stop();
manifest_fetcher_.reset();
extension_fetcher_.reset();
@@ -689,18 +698,17 @@ void ExtensionUpdater::HandleManifestResults(
const std::set<std::string>& extension_ids = fetch_data.extension_ids();
std::set<std::string>::const_iterator i;
- ExtensionPrefs* prefs = service_->extension_prefs();
for (i = extension_ids.begin(); i != extension_ids.end(); i++) {
if (fetch_data.DidPing(*i, ManifestFetchData::ROLLCALL)) {
if (*i == kBlacklistAppID) {
- prefs->SetBlacklistLastPingDay(daystart);
+ extension_prefs_->SetBlacklistLastPingDay(daystart);
} else if (service_->GetExtensionById(*i, true) != NULL) {
- prefs->SetLastPingDay(*i, daystart);
+ extension_prefs_->SetLastPingDay(*i, daystart);
}
}
- if (prefs->GetActiveBit(*i)) {
- prefs->SetActiveBit(*i, false);
- prefs->SetLastActivePingDay(*i, daystart);
+ if (extension_prefs_->GetActiveBit(*i)) {
+ extension_prefs_->SetActiveBit(*i, false);
+ extension_prefs_->SetLastActivePingDay(*i, daystart);
}
}
}
@@ -839,7 +847,7 @@ void ExtensionUpdater::TimerFired() {
void ExtensionUpdater::CheckNow() {
DCHECK(alive_);
NotifyStarted();
- ManifestFetchesBuilder fetches_builder(service_);
+ ManifestFetchesBuilder fetches_builder(service_, extension_prefs_);
const ExtensionList* extensions = service_->extensions();
for (ExtensionList::const_iterator iter = extensions->begin();
@@ -875,7 +883,7 @@ void ExtensionUpdater::CheckNow() {
std::string version = prefs_->GetString(kExtensionBlacklistUpdateVersion);
ManifestFetchData::PingData ping_data;
ping_data.rollcall_days =
- CalculatePingDays(service_->extension_prefs()->BlacklistLastPingDay());
+ CalculatePingDays(extension_prefs_->BlacklistLastPingDay());
blacklist_fetch->AddExtension(kBlacklistAppID, version, ping_data, "");
StartUpdateCheck(blacklist_fetch);
}
@@ -1003,7 +1011,7 @@ void ExtensionUpdater::StartUpdateCheck(ManifestFetchData* fetch_data) {
URLFetcher::Create(kManifestFetcherId, fetch_data->full_url(),
URLFetcher::GET, this));
manifest_fetcher_->set_request_context(
- service_->profile()->GetRequestContext());
+ profile_->GetRequestContext());
manifest_fetcher_->set_load_flags(net::LOAD_DO_NOT_SEND_COOKIES |
net::LOAD_DO_NOT_SAVE_COOKIES |
net::LOAD_DISABLE_CACHE);
@@ -1031,7 +1039,7 @@ void ExtensionUpdater::FetchUpdatedExtension(const std::string& id,
extension_fetcher_.reset(
URLFetcher::Create(kExtensionFetcherId, url, URLFetcher::GET, this));
extension_fetcher_->set_request_context(
- service_->profile()->GetRequestContext());
+ profile_->GetRequestContext());
extension_fetcher_->set_load_flags(net::LOAD_DO_NOT_SEND_COOKIES |
net::LOAD_DO_NOT_SAVE_COOKIES |
net::LOAD_DISABLE_CACHE);
@@ -1043,14 +1051,14 @@ void ExtensionUpdater::FetchUpdatedExtension(const std::string& id,
void ExtensionUpdater::NotifyStarted() {
NotificationService::current()->Notify(
NotificationType::EXTENSION_UPDATING_STARTED,
- Source<Profile>(service_->profile()),
+ Source<Profile>(profile_),
NotificationService::NoDetails());
}
void ExtensionUpdater::NotifyUpdateFound(const std::string& extension_id) {
NotificationService::current()->Notify(
NotificationType::EXTENSION_UPDATE_FOUND,
- Source<Profile>(service_->profile()),
+ Source<Profile>(profile_),
Details<const std::string>(&extension_id));
}
@@ -1058,7 +1066,7 @@ void ExtensionUpdater::NotifyIfFinished() {
if (in_progress_ids_.empty()) {
NotificationService::current()->Notify(
NotificationType::EXTENSION_UPDATING_FINISHED,
- Source<Profile>(service_->profile()),
+ Source<Profile>(profile_),
NotificationService::NoDetails());
VLOG(1) << "Sending EXTENSION_UPDATING_FINISHED";
}
diff --git a/chrome/browser/extensions/extension_updater.h b/chrome/browser/extensions/extension_updater.h
index 328762b..e5be521 100644
--- a/chrome/browser/extensions/extension_updater.h
+++ b/chrome/browser/extensions/extension_updater.h
@@ -25,9 +25,11 @@
#include "googleurl/src/gurl.h"
class Extension;
+class ExtensionPrefs;
class ExtensionUpdaterTest;
class ExtensionUpdaterFileHandler;
class PrefService;
+class Profile;
// To save on server resources we can request updates for multiple extensions
// in one manifest check. This class helps us keep track of the id's for a
@@ -102,7 +104,8 @@ class ManifestFetchData {
// extensions and pending extensions.
class ManifestFetchesBuilder {
public:
- explicit ManifestFetchesBuilder(ExtensionServiceInterface* service);
+ ManifestFetchesBuilder(ExtensionServiceInterface* service,
+ ExtensionPrefs* prefs);
~ManifestFetchesBuilder();
void AddExtension(const Extension& extension);
@@ -138,7 +141,8 @@ class ManifestFetchesBuilder {
Extension::Type extension_type,
GURL update_url,
const std::string& update_url_data);
- ExtensionServiceInterface* service_;
+ ExtensionServiceInterface* const service_;
+ ExtensionPrefs* const prefs_;
// List of data on fetches we're going to do. We limit the number of
// extensions grouped together in one batch to avoid running into the limits
@@ -167,7 +171,9 @@ class ExtensionUpdater
// extensions and installing updated ones. The |frequency_seconds| parameter
// controls how often update checks are scheduled.
ExtensionUpdater(ExtensionServiceInterface* service,
+ ExtensionPrefs* extension_prefs,
PrefService* prefs,
+ Profile* profile,
int frequency_seconds);
// Starts the updater running. Should be called at most once.
@@ -322,7 +328,9 @@ class ExtensionUpdater
base::OneShotTimer<ExtensionUpdater> timer_;
int frequency_seconds_;
+ ExtensionPrefs* extension_prefs_;
PrefService* prefs_;
+ Profile* profile_;
scoped_refptr<ExtensionUpdaterFileHandler> file_handler_;
bool blacklist_checks_enabled_;
diff --git a/chrome/browser/extensions/extension_updater_unittest.cc b/chrome/browser/extensions/extension_updater_unittest.cc
index 5c93424..16de5b4 100644
--- a/chrome/browser/extensions/extension_updater_unittest.cc
+++ b/chrome/browser/extensions/extension_updater_unittest.cc
@@ -64,12 +64,6 @@ class MockService : public ExtensionServiceInterface {
return NULL;
}
- virtual PendingExtensionManager* pending_extension_manager() {
- ADD_FAILURE() << "Subclass should override this if it will "
- << "be accessed by a test.";
- return &pending_extension_manager_;
- }
-
virtual void UpdateExtension(const std::string& id,
const FilePath& path,
const GURL& download_url) {
@@ -87,6 +81,17 @@ class MockService : public ExtensionServiceInterface {
FAIL();
}
+ virtual bool IsExtensionEnabled(const std::string& extension_id) const {
+ ADD_FAILURE();
+ return false;
+ }
+
+ virtual bool IsExternalExtensionUninstalled(
+ const std::string& extension_id) const {
+ ADD_FAILURE();
+ return false;
+ }
+
virtual void EnableExtension(const std::string& extension_id) {
FAIL();
}
@@ -110,22 +115,29 @@ class MockService : public ExtensionServiceInterface {
return false;
}
- virtual void SetIsIncognitoEnabled(const Extension* extension,
+ virtual bool IsIncognitoEnabled(const std::string& id) const {
+ ADD_FAILURE();
+ return false;
+ }
+
+ virtual void SetIsIncognitoEnabled(const std::string& id,
bool enabled) {
FAIL();
}
- virtual ExtensionPrefs* extension_prefs() { return prefs_.prefs(); }
- virtual const ExtensionPrefs& const_extension_prefs() const {
- return prefs_.const_prefs();
+ virtual void CheckForUpdates() {
+ FAIL();
}
- virtual ExtensionUpdater* updater() {
- ADD_FAILURE();
- return NULL;
+ virtual PendingExtensionManager* pending_extension_manager() {
+ ADD_FAILURE() << "Subclass should override this if it will "
+ << "be accessed by a test.";
+ return &pending_extension_manager_;
}
- virtual Profile* profile() { return &profile_; }
+ Profile* profile() { return &profile_; }
+
+ ExtensionPrefs* extension_prefs() { return prefs_.prefs(); }
PrefService* pref_service() { return prefs_.pref_service(); }
@@ -375,7 +387,9 @@ class ExtensionUpdaterTest : public testing::Test {
TestURLFetcherFactory factory;
URLFetcher::set_factory(&factory);
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(), 60*60*24));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), 60*60*24));
updater->Start();
// Tell the update that it's time to do update checks.
@@ -423,7 +437,9 @@ class ExtensionUpdaterTest : public testing::Test {
TestURLFetcherFactory factory;
URLFetcher::set_factory(&factory);
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(), 60*60*24));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), 60*60*24));
updater->Start();
// Tell the updater that it's time to do update checks.
@@ -510,7 +526,7 @@ class ExtensionUpdaterTest : public testing::Test {
static void TestUpdateUrlDataFromGallery(const std::string& gallery_url) {
MockService service;
- ManifestFetchesBuilder builder(&service);
+ ManifestFetchesBuilder builder(&service, service.extension_prefs());
ExtensionList extensions;
std::string url(gallery_url);
@@ -541,8 +557,9 @@ class ExtensionUpdaterTest : public testing::Test {
service.set_extensions(tmp);
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(),
- kUpdateFrequencySecs));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), kUpdateFrequencySecs));
updater->Start();
// Check passing an empty list of parse results to DetermineUpdates
@@ -581,8 +598,9 @@ class ExtensionUpdaterTest : public testing::Test {
MessageLoop message_loop;
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(),
- kUpdateFrequencySecs));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), kUpdateFrequencySecs));
updater->Start();
ManifestFetchData fetch_data(GURL("http://localhost/foo"));
@@ -618,7 +636,9 @@ class ExtensionUpdaterTest : public testing::Test {
URLFetcher::set_factory(&factory);
scoped_ptr<ServiceForDownloadTests> service(new ServiceForDownloadTests);
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(service.get(), service->pref_service(),
+ new ExtensionUpdater(service.get(), service->extension_prefs(),
+ service->pref_service(),
+ service->profile(),
kUpdateFrequencySecs));
updater->Start();
@@ -690,7 +710,9 @@ class ExtensionUpdaterTest : public testing::Test {
URLFetcher::set_factory(&factory);
scoped_ptr<ServiceForDownloadTests> service(new ServiceForDownloadTests);
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(service.get(), service->pref_service(),
+ new ExtensionUpdater(service.get(), service->extension_prefs(),
+ service->pref_service(),
+ service->profile(),
kUpdateFrequencySecs));
updater->Start();
@@ -759,8 +781,9 @@ class ExtensionUpdaterTest : public testing::Test {
URLFetcher::set_factory(&factory);
ServiceForBlacklistTests service;
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(),
- kUpdateFrequencySecs));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), kUpdateFrequencySecs));
updater->Start();
GURL test_url("http://localhost/extension.crx");
@@ -805,8 +828,9 @@ class ExtensionUpdaterTest : public testing::Test {
URLFetcher::set_factory(&factory);
ServiceForDownloadTests service;
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(),
- kUpdateFrequencySecs));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), kUpdateFrequencySecs));
updater->Start();
GURL url1("http://localhost/extension1.crx");
@@ -917,8 +941,9 @@ class ExtensionUpdaterTest : public testing::Test {
prefs->SetActiveBit(id, true);
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(),
- kUpdateFrequencySecs));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), kUpdateFrequencySecs));
updater->Start();
updater->set_blacklist_checks_enabled(false);
@@ -982,8 +1007,9 @@ class ExtensionUpdaterTest : public testing::Test {
ServiceForManifestTests service;
MessageLoop message_loop;
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(),
- kUpdateFrequencySecs));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), kUpdateFrequencySecs));
updater->Start();
GURL update_url("http://www.google.com/manifest");
@@ -1106,7 +1132,7 @@ TEST(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) {
BrowserThread file_thread(BrowserThread::FILE, &message_loop);
MockService service;
- ManifestFetchesBuilder builder(&service);
+ ManifestFetchesBuilder builder(&service, service.extension_prefs());
// Non-internal non-external extensions should be rejected.
{
@@ -1158,8 +1184,9 @@ TEST(ExtensionUpdaterTest, TestStartUpdateCheckMemory) {
TestURLFetcherFactory factory;
URLFetcher::set_factory(&factory);
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(),
- kUpdateFrequencySecs));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), kUpdateFrequencySecs));
updater->Start();
updater->StartUpdateCheck(new ManifestFetchData(GURL()));
// This should delete the newly-created ManifestFetchData.
@@ -1177,8 +1204,9 @@ TEST(ExtensionUpdaterTest, TestAfterStopBehavior) {
ServiceForManifestTests service;
scoped_refptr<ExtensionUpdater> updater(
- new ExtensionUpdater(&service, service.pref_service(),
- kUpdateFrequencySecs));
+ new ExtensionUpdater(
+ &service, service.extension_prefs(), service.pref_service(),
+ service.profile(), kUpdateFrequencySecs));
updater->Start();
updater->Stop();
// All the below functions should do nothing.
diff --git a/chrome/browser/extensions/extension_web_ui.cc b/chrome/browser/extensions/extension_web_ui.cc
index 6ec373d..b7a7caf 100644
--- a/chrome/browser/extensions/extension_web_ui.cc
+++ b/chrome/browser/extensions/extension_web_ui.cc
@@ -284,7 +284,7 @@ bool ExtensionWebUI::HandleChromeURLOverride(GURL* url, Profile* profile) {
// extension uses split mode.
bool incognito_override_allowed =
extension->incognito_split_mode() &&
- service->IsIncognitoEnabled(extension);
+ service->IsIncognitoEnabled(extension->id());
if (profile->IsOffTheRecord() && !incognito_override_allowed) {
++i;
continue;
diff --git a/chrome/browser/extensions/extensions_ui.cc b/chrome/browser/extensions/extensions_ui.cc
index e9adb7b..166c80c 100644
--- a/chrome/browser/extensions/extensions_ui.cc
+++ b/chrome/browser/extensions/extensions_ui.cc
@@ -411,7 +411,8 @@ void ExtensionsDOMHandler::HandleEnableIncognitoMessage(const ListValue* args) {
//
// Bug: http://crbug.com/41384
ignore_notifications_ = true;
- extensions_service_->SetIsIncognitoEnabled(extension, enable_str == "true");
+ extensions_service_->SetIsIncognitoEnabled(extension_id,
+ enable_str == "true");
ignore_notifications_ = false;
}
@@ -699,7 +700,7 @@ DictionaryValue* ExtensionsDOMHandler::CreateExtensionDetailValue(
extension_data->SetBoolean("enabled", enabled);
extension_data->SetBoolean("terminated", terminated);
extension_data->SetBoolean("enabledIncognito",
- service ? service->IsIncognitoEnabled(extension) : false);
+ service ? service->IsIncognitoEnabled(extension->id()) : false);
extension_data->SetBoolean("wantsFileAccess", extension->wants_file_access());
extension_data->SetBoolean("allowFileAccess",
service ? service->AllowFileAccess(extension) : false);
diff --git a/chrome/browser/extensions/pending_extension_manager.cc b/chrome/browser/extensions/pending_extension_manager.cc
index 268df59..5b8e829 100644
--- a/chrome/browser/extensions/pending_extension_manager.cc
+++ b/chrome/browser/extensions/pending_extension_manager.cc
@@ -81,7 +81,7 @@ void PendingExtensionManager::AddFromExternalUpdateUrl(
const bool kEnableOnInstall = true;
const bool kEnableIncognitoOnInstall = false;
- if (service_.const_extension_prefs().IsExternalExtensionUninstalled(id))
+ if (service_.IsExternalExtensionUninstalled(id))
return;
if (service_.GetExtensionById(id, true)) {
diff --git a/chrome/browser/extensions/user_script_master.cc b/chrome/browser/extensions/user_script_master.cc
index f038ffc..88903d8 100644
--- a/chrome/browser/extensions/user_script_master.cc
+++ b/chrome/browser/extensions/user_script_master.cc
@@ -344,7 +344,7 @@ void UserScriptMaster::Observe(NotificationType type,
// Add any content scripts inside the extension.
const Extension* extension = Details<const Extension>(details).ptr();
bool incognito_enabled = profile_->GetExtensionService()->
- IsIncognitoEnabled(extension);
+ IsIncognitoEnabled(extension->id());
const UserScriptList& scripts = extension->content_scripts();
for (UserScriptList::const_iterator iter = scripts.begin();
iter != scripts.end(); ++iter) {
@@ -377,7 +377,7 @@ void UserScriptMaster::Observe(NotificationType type,
const Extension* extension = Details<const Extension>(details).ptr();
UserScriptList new_lone_scripts;
bool incognito_enabled = profile_->GetExtensionService()->
- IsIncognitoEnabled(extension);
+ IsIncognitoEnabled(extension->id());
for (UserScriptList::iterator iter = lone_scripts_.begin();
iter != lone_scripts_.end(); ++iter) {
if (iter->extension_id() == extension->id()) {
diff --git a/chrome/browser/sync/glue/extension_sync.cc b/chrome/browser/sync/glue/extension_sync.cc
index a5d2172..bef56cb 100644
--- a/chrome/browser/sync/glue/extension_sync.cc
+++ b/chrome/browser/sync/glue/extension_sync.cc
@@ -90,7 +90,7 @@ void ReadClientDataFromExtensionList(
const Extension& extension = **it;
if (is_valid_and_syncable(extension)) {
sync_pb::ExtensionSpecifics client_specifics;
- GetExtensionSpecifics(extension, extensions_service->extension_prefs(),
+ GetExtensionSpecifics(extension, extensions_service,
&client_specifics);
DcheckIsExtensionSpecificsValid(client_specifics);
const ExtensionData& extension_data =
@@ -277,7 +277,7 @@ void TryUpdateClient(
SetExtensionProperties(specifics, extensions_service, extension);
{
sync_pb::ExtensionSpecifics extension_specifics;
- GetExtensionSpecifics(*extension, extensions_service->extension_prefs(),
+ GetExtensionSpecifics(*extension, extensions_service,
&extension_specifics);
DCHECK(AreExtensionSpecificsUserPropertiesEqual(
specifics, extension_specifics))
@@ -302,22 +302,6 @@ void TryUpdateClient(
DCHECK(!extension_data->NeedsUpdate(ExtensionData::SERVER));
}
-// Kick off a run of the extension updater.
-//
-// TODO(akalin): Combine this with the similar function in
-// theme_util.cc.
-void NudgeExtensionUpdater(ExtensionServiceInterface* extensions_service) {
- ExtensionUpdater* extension_updater = extensions_service->updater();
- // Auto-updates should now be on always (see the construction of the
- // ExtensionService in ProfileImpl::InitExtensions()).
- if (extension_updater) {
- extension_updater->CheckNow();
- } else {
- LOG(DFATAL) << "Extension updater unexpectedly NULL; "
- << "auto-updates may be turned off";
- }
-}
-
} // namespace
bool FlushExtensionData(const ExtensionSyncTraits& traits,
@@ -358,7 +342,7 @@ bool FlushExtensionData(const ExtensionSyncTraits& traits,
}
if (should_nudge_extension_updater) {
- NudgeExtensionUpdater(extensions_service);
+ extensions_service->CheckForUpdates();
}
return true;
@@ -380,7 +364,7 @@ bool UpdateServerData(const ExtensionSyncTraits& traits,
ExtensionServiceInterface* extensions_service =
GetExtensionServiceFromProfileSyncService(sync_service);
sync_pb::ExtensionSpecifics client_data;
- GetExtensionSpecifics(extension, extensions_service->extension_prefs(),
+ GetExtensionSpecifics(extension, extensions_service,
&client_data);
DcheckIsExtensionSpecificsValid(client_data);
ExtensionData extension_data =
@@ -449,7 +433,7 @@ void UpdateClient(const ExtensionSyncTraits& traits,
return;
}
sync_pb::ExtensionSpecifics client_data;
- GetExtensionSpecifics(*extension, extensions_service->extension_prefs(),
+ GetExtensionSpecifics(*extension, extensions_service,
&client_data);
DcheckIsExtensionSpecificsValid(client_data);
extension_data =
@@ -461,7 +445,7 @@ void UpdateClient(const ExtensionSyncTraits& traits,
TryUpdateClient(traits.is_valid_and_syncable,
extensions_service, &extension_data);
if (extension_data.NeedsUpdate(ExtensionData::CLIENT)) {
- NudgeExtensionUpdater(extensions_service);
+ extensions_service->CheckForUpdates();
}
}
DCHECK(!extension_data.NeedsUpdate(ExtensionData::SERVER));
diff --git a/chrome/browser/sync/glue/extension_util.cc b/chrome/browser/sync/glue/extension_util.cc
index e94ba11..67b5856 100644
--- a/chrome/browser/sync/glue/extension_util.cc
+++ b/chrome/browser/sync/glue/extension_util.cc
@@ -143,12 +143,11 @@ bool AreExtensionSpecificsNonUserPropertiesEqual(
}
void GetExtensionSpecifics(const Extension& extension,
- ExtensionPrefs* extension_prefs,
+ ExtensionServiceInterface* extension_service,
sync_pb::ExtensionSpecifics* specifics) {
const std::string& id = extension.id();
- bool enabled =
- extension_prefs->GetExtensionState(id) == Extension::ENABLED;
- bool incognito_enabled = extension_prefs->IsIncognitoEnabled(id);
+ bool enabled = extension_service->IsExtensionEnabled(id);
+ bool incognito_enabled = extension_service->IsIncognitoEnabled(id);
GetExtensionSpecificsHelper(extension, enabled, incognito_enabled,
specifics);
}
@@ -195,18 +194,12 @@ void SetExtensionProperties(
<< "has a different update URL than the extension: "
<< update_url.spec() << " vs. " << extension->update_url();
}
- ExtensionPrefs* extension_prefs = extensions_service->extension_prefs();
- bool enabled = extension_prefs->GetExtensionState(id) == Extension::ENABLED;
- if (enabled && !specifics.enabled()) {
- extensions_service->DisableExtension(id);
- } else if (!enabled && specifics.enabled()) {
+ if (specifics.enabled()) {
extensions_service->EnableExtension(id);
+ } else {
+ extensions_service->DisableExtension(id);
}
- bool incognito_enabled = extension_prefs->IsIncognitoEnabled(id);
- if (incognito_enabled != specifics.incognito_enabled()) {
- extensions_service->SetIsIncognitoEnabled(
- extension, specifics.incognito_enabled());
- }
+ extensions_service->SetIsIncognitoEnabled(id, specifics.incognito_enabled());
if (specifics.name() != extension->name()) {
LOG(WARNING) << "specifics for extension " << id
<< "has a different name than the extension: "
diff --git a/chrome/browser/sync/glue/extension_util.h b/chrome/browser/sync/glue/extension_util.h
index a68a066..ddd6c1b 100644
--- a/chrome/browser/sync/glue/extension_util.h
+++ b/chrome/browser/sync/glue/extension_util.h
@@ -81,7 +81,7 @@ bool AreExtensionSpecificsNonUserPropertiesEqual(
// must be a syncable extension. |specifics| will be valid after this
// function is called.
void GetExtensionSpecifics(const Extension& extension,
- ExtensionPrefs* extension_prefs,
+ ExtensionServiceInterface* extension_service,
sync_pb::ExtensionSpecifics* specifics);
// Exposed only for testing. Pre- and post-conditions are the same as
diff --git a/chrome/browser/sync/glue/theme_util.cc b/chrome/browser/sync/glue/theme_util.cc
index 3d700da..f4d0181 100644
--- a/chrome/browser/sync/glue/theme_util.cc
+++ b/chrome/browser/sync/glue/theme_util.cc
@@ -102,14 +102,7 @@ void SetCurrentThemeFromThemeSpecifics(
VLOG(1) << "Extension " << id << " is not a theme; aborting";
return;
}
- ExtensionPrefs* extension_prefs = extensions_service->extension_prefs();
- CHECK(extension_prefs);
- // TODO(akalin): GetExtensionState() isn't very safe as it
- // returns Extension::ENABLED by default; either change it to
- // return something else by default or create a separate
- // function that does so.
- if (extension_prefs->GetExtensionState(extension->id()) !=
- Extension::ENABLED) {
+ if (!extensions_service->IsExtensionEnabled(id)) {
VLOG(1) << "Theme " << id << " is not enabled; aborting";
return;
}
@@ -144,15 +137,7 @@ void SetCurrentThemeFromThemeSpecifics(
extensions_service->pending_extension_manager()->AddFromSync(
id, update_url, &IsTheme,
kInstallSilently, kEnableOnInstall, kEnableIncognitoOnInstall);
- ExtensionUpdater* extension_updater = extensions_service->updater();
- // Auto-updates should now be on always (see the construction of
- // the ExtensionService in ProfileImpl::InitExtensions()).
- if (!extension_updater) {
- LOG(DFATAL) << "Extension updater unexpectedly NULL; "
- << "auto-updates may be turned off";
- return;
- }
- extension_updater->CheckNow();
+ extensions_service->CheckForUpdates();
}
} else if (theme_specifics.use_system_theme_by_default()) {
ThemeServiceFactory::GetForProfile(profile)->SetNativeTheme();
diff --git a/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm b/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm
index 3871084..e8d899e 100644
--- a/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm
+++ b/chrome/browser/ui/cocoa/extensions/browser_actions_controller.mm
@@ -749,8 +749,9 @@ class ExtensionServiceObserverBridge : public NotificationObserver,
- (BOOL)shouldDisplayBrowserAction:(const Extension*)extension {
// Only display incognito-enabled extensions while in incognito mode.
- return (!profile_->IsOffTheRecord() ||
- profile_->GetExtensionService()->IsIncognitoEnabled(extension));
+ return
+ (!profile_->IsOffTheRecord() ||
+ profile_->GetExtensionService()->IsIncognitoEnabled(extension->id()));
}
- (void)showChevronIfNecessaryInFrame:(NSRect)frame animate:(BOOL)animate {
diff --git a/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc b/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc
index 511dee1..c89f3c8 100644
--- a/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc
+++ b/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc
@@ -573,7 +573,7 @@ bool BrowserActionsToolbarGtk::ShouldDisplayBrowserAction(
const Extension* extension) {
// Only display incognito-enabled extensions while in incognito mode.
return (!profile_->IsOffTheRecord() ||
- profile_->GetExtensionService()->IsIncognitoEnabled(extension));
+ profile_->GetExtensionService()->IsIncognitoEnabled(extension->id()));
}
void BrowserActionsToolbarGtk::HidePopup() {
diff --git a/chrome/browser/ui/views/browser_actions_container.cc b/chrome/browser/ui/views/browser_actions_container.cc
index cc90cc1..26c40d1 100644
--- a/chrome/browser/ui/views/browser_actions_container.cc
+++ b/chrome/browser/ui/views/browser_actions_container.cc
@@ -1096,6 +1096,7 @@ void BrowserActionsContainer::SaveDesiredSizeAndAnimate(
bool BrowserActionsContainer::ShouldDisplayBrowserAction(
const Extension* extension) {
// Only display incognito-enabled extensions while in incognito mode.
- return (!profile_->IsOffTheRecord() ||
- profile_->GetExtensionService()->IsIncognitoEnabled(extension));
+ return
+ (!profile_->IsOffTheRecord() ||
+ profile_->GetExtensionService()->IsIncognitoEnabled(extension->id()));
}