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

Unified Diff: chrome/browser/extensions/extensions_service.cc

Issue 3522015: Implement new strategy for default apps (Closed)
Patch Set: all done Created 10 years, 2 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/extensions_service.cc
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc
index 7568cc53ff7803fbc3404fca90795b90c5cebd9c..f5eebefdee233a686bb6873e2703ea44a349409d 100644
--- a/chrome/browser/extensions/extensions_service.cc
+++ b/chrome/browser/extensions/extensions_service.cc
@@ -23,6 +23,7 @@
#include "chrome/browser/chrome_thread.h"
#include "chrome/browser/debugger/devtools_manager.h"
#include "chrome/browser/extensions/crx_installer.h"
+#include "chrome/browser/extensions/default_apps.h"
#include "chrome/browser/extensions/extension_accessibility_api.h"
#include "chrome/browser/extensions/extension_bookmarks_module.h"
#include "chrome/browser/extensions/extension_browser_event_router.h"
@@ -129,13 +130,15 @@ PendingExtensionInfo::PendingExtensionInfo(
bool is_from_sync,
bool install_silently,
bool enable_on_install,
- bool enable_incognito_on_install)
+ bool enable_incognito_on_install,
+ Extension::Location location)
: update_url(update_url),
expected_crx_type(expected_crx_type),
is_from_sync(is_from_sync),
install_silently(install_silently),
enable_on_install(enable_on_install),
- enable_incognito_on_install(enable_incognito_on_install) {}
+ enable_incognito_on_install(enable_incognito_on_install),
+ install_source(location) {}
PendingExtensionInfo::PendingExtensionInfo()
: update_url(),
@@ -143,7 +146,8 @@ PendingExtensionInfo::PendingExtensionInfo()
is_from_sync(true),
install_silently(false),
enable_on_install(false),
- enable_incognito_on_install(false) {}
+ enable_incognito_on_install(false),
+ install_source(Extension::INVALID) {}
// ExtensionsService.
@@ -561,7 +565,8 @@ ExtensionsService::ExtensionsService(Profile* profile,
extensions_enabled_(true),
show_extensions_prompts_(true),
ready_(false),
- ALLOW_THIS_IN_INITIALIZER_LIST(toolbar_model_(this)) {
+ ALLOW_THIS_IN_INITIALIZER_LIST(toolbar_model_(this)),
+ default_apps_(profile->GetPrefs()) {
// Figure out if extension installation should be enabled.
if (command_line->HasSwitch(switches::kDisableExtensions)) {
extensions_enabled_ = false;
@@ -682,8 +687,7 @@ void ExtensionsService::UpdateExtension(const std::string& id,
this, // frontend
client));
installer->set_expected_id(id);
- if (is_pending_extension && !it->second.is_from_sync)
- installer->set_install_source(Extension::EXTERNAL_PREF_DOWNLOAD);
+ installer->set_install_source(it->second.install_source);
installer->set_delete_source(true);
installer->set_original_url(download_url);
installer->InstallCrx(extension_path);
@@ -699,15 +703,16 @@ void ExtensionsService::AddPendingExtensionFromSync(
<< " which already exists";
return;
}
- AddPendingExtensionInternal(
- id, update_url, expected_crx_type, true, install_silently,
- enable_on_install, enable_incognito_on_install);
+
+ AddPendingExtensionInternal(id, update_url, expected_crx_type, true,
+ install_silently, enable_on_install,
+ enable_incognito_on_install,
+ Extension::INTERNAL);
}
void ExtensionsService::AddPendingExtensionFromExternalUpdateUrl(
const std::string& id, const GURL& update_url) {
// Add the extension to this list of extensions to update.
- // We do not know if the id refers to a theme, so make is_theme unknown.
const PendingExtensionInfo::ExpectedCrxType kExpectedCrxType =
PendingExtensionInfo::UNKNOWN;
const bool kIsFromSync = false;
@@ -723,18 +728,41 @@ void ExtensionsService::AddPendingExtensionFromExternalUpdateUrl(
AddPendingExtensionInternal(id, update_url, kExpectedCrxType, kIsFromSync,
kInstallSilently, kEnableOnInstall,
- kEnableIncognitoOnInstall);
+ kEnableIncognitoOnInstall,
+ Extension::EXTERNAL_PREF_DOWNLOAD);
+}
+
+void ExtensionsService::AddPendingExtensionFromDefaultAppList(
+ const std::string& id) {
+ // Add the extension to this list of extensions to update.
+ const PendingExtensionInfo::ExpectedCrxType kExpectedCrxType =
+ PendingExtensionInfo::APP;
+ const bool kIsFromSync = false;
+ const bool kInstallSilently = true;
+ const bool kEnableOnInstall = true;
+ const bool kEnableIncognitoOnInstall = true;
+
+ // This can legitimately happen if the user manually installed one of the
+ // default apps before this code ran.
+ if (GetExtensionByIdInternal(id, true, true))
+ return;
+
+ AddPendingExtensionInternal(id, GURL(), kExpectedCrxType, kIsFromSync,
+ kInstallSilently, kEnableOnInstall,
+ kEnableIncognitoOnInstall,
+ Extension::INTERNAL);
}
void ExtensionsService::AddPendingExtensionInternal(
const std::string& id, const GURL& update_url,
PendingExtensionInfo::ExpectedCrxType expected_crx_type,
bool is_from_sync, bool install_silently,
- bool enable_on_install, bool enable_incognito_on_install) {
+ bool enable_on_install, bool enable_incognito_on_install,
+ Extension::Location install_source) {
pending_extensions_[id] =
PendingExtensionInfo(update_url, expected_crx_type, is_from_sync,
install_silently, enable_on_install,
- enable_incognito_on_install);
+ enable_incognito_on_install, install_source);
}
void ExtensionsService::ReloadExtension(const std::string& extension_id) {
@@ -1481,8 +1509,11 @@ void ExtensionsService::OnExtensionInstalled(Extension* extension,
// Set initial state from pending extension data.
PendingExtensionInfo::ExpectedCrxType actual_crx_type =
- (extension->is_theme() ? PendingExtensionInfo::THEME
- : PendingExtensionInfo::EXTENSION);
+ PendingExtensionInfo::EXTENSION;
+ if (extension->is_app())
+ actual_crx_type = PendingExtensionInfo::APP;
+ else if (extension->is_theme())
+ actual_crx_type = PendingExtensionInfo::THEME;
if (expected_crx_type != PendingExtensionInfo::UNKNOWN &&
expected_crx_type != actual_crx_type) {
@@ -1591,6 +1622,12 @@ void ExtensionsService::OnExtensionInstalled(Extension* extension,
Details<Extension>(extension));
}
+ if (extension->is_app()) {
+ ExtensionIdSet installed_ids = GetAppIds();
+ installed_ids.insert(extension->id());
+ default_apps_.DidInstallApp(installed_ids);
+ }
+
// Transfer ownership of |extension| to OnExtensionLoaded.
OnExtensionLoaded(scoped_extension.release(), allow_privilege_increase);
}
@@ -1790,15 +1827,17 @@ void ExtensionsService::Observe(NotificationType type,
}
}
-bool ExtensionsService::HasApps() {
- if (!extensions_enabled_)
- return false;
+bool ExtensionsService::HasApps() const {
+ return !GetAppIds().empty();
+}
+ExtensionIdSet ExtensionsService::GetAppIds() const {
+ ExtensionIdSet result;
for (ExtensionList::const_iterator it = extensions_.begin();
it != extensions_.end(); ++it) {
- if ((*it)->is_app())
- return true;
+ if ((*it)->is_app() && (*it)->location() != Extension::COMPONENT)
+ result.insert((*it)->id());
}
- return false;
+ return result;
}
« no previous file with comments | « chrome/browser/extensions/extensions_service.h ('k') | chrome/browser/extensions/extensions_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698