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

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

Issue 10581043: Merge 142921 - Use an infobar instead of alert box for extension install (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1180/src/
Patch Set: Created 8 years, 6 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
« no previous file with comments | « chrome/browser/extensions/crx_installer.h ('k') | chrome/browser/extensions/crx_installer_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/crx_installer.cc
===================================================================
--- chrome/browser/extensions/crx_installer.cc (revision 143212)
+++ chrome/browser/extensions/crx_installer.cc (working copy)
@@ -172,7 +172,7 @@
scoped_refptr<Extension> extension =
ConvertUserScriptToExtension(source_file_, download_url_, &error);
if (!extension) {
- ReportFailureFromFileThread(error);
+ ReportFailureFromFileThread(CrxInstallerError(error));
return;
}
@@ -202,36 +202,34 @@
OnUnpackSuccess(extension->path(), extension->path(), NULL, extension);
}
-bool CrxInstaller::AllowInstall(const Extension* extension,
- string16* error) {
+CrxInstallerError CrxInstaller::AllowInstall(const Extension* extension) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- DCHECK(error);
// Make sure the expected ID matches if one was supplied or if we want to
// bypass the prompt.
if ((approved_ || !expected_id_.empty()) &&
expected_id_ != extension->id()) {
- *error = l10n_util::GetStringFUTF16(IDS_EXTENSION_INSTALL_UNEXPECTED_ID,
- ASCIIToUTF16(expected_id_),
- ASCIIToUTF16(extension->id()));
- return false;
+ return CrxInstallerError(
+ l10n_util::GetStringFUTF16(IDS_EXTENSION_INSTALL_UNEXPECTED_ID,
+ ASCIIToUTF16(expected_id_),
+ ASCIIToUTF16(extension->id())));
}
if (expected_version_.get() &&
!expected_version_->Equals(*extension->version())) {
- *error = l10n_util::GetStringFUTF16(
- IDS_EXTENSION_INSTALL_UNEXPECTED_VERSION,
- ASCIIToUTF16(expected_version_->GetString()),
- ASCIIToUTF16(extension->version()->GetString()));
- return false;
+ return CrxInstallerError(
+ l10n_util::GetStringFUTF16(
+ IDS_EXTENSION_INSTALL_UNEXPECTED_VERSION,
+ ASCIIToUTF16(expected_version_->GetString()),
+ ASCIIToUTF16(extension->version()->GetString())));
}
// Make sure the manifests match if we want to bypass the prompt.
if (approved_ &&
(!expected_manifest_.get() ||
!expected_manifest_->Equals(original_manifest_.get()))) {
- *error = l10n_util::GetStringUTF16(IDS_EXTENSION_MANIFEST_INVALID);
- return false;
+ return CrxInstallerError(
+ l10n_util::GetStringUTF16(IDS_EXTENSION_MANIFEST_INVALID));
}
// The checks below are skipped for themes and external installs.
@@ -239,11 +237,11 @@
// and other uses of install_source_ that are no longer needed now that the
// SandboxedExtensionUnpacker sets extension->location.
if (extension->is_theme() || Extension::IsExternalLocation(install_source_))
- return true;
+ return CrxInstallerError();
if (!extensions_enabled_) {
- *error = l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALL_NOT_ENABLED);
- return false;
+ return CrxInstallerError(
+ l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALL_NOT_ENABLED));
}
if (install_cause_ == extension_misc::INSTALL_CAUSE_USER_DOWNLOAD) {
@@ -270,13 +268,15 @@
} else {
UMA_HISTOGRAM_ENUMERATION(kHistogramName, OffStoreInstallDisallowed,
NumOffStoreInstallDecision);
- *error = l10n_util::GetStringUTF16(
- IDS_EXTENSION_INSTALL_DISALLOWED_ON_SITE);
// Don't delete source in this case so that the user can install
// manually if they want.
delete_source_ = false;
did_handle_successfully_ = false;
- return false;
+
+ return CrxInstallerError(
+ CrxInstallerError::ERROR_OFF_STORE,
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_INSTALL_DISALLOWED_ON_SITE));
}
}
}
@@ -289,10 +289,10 @@
if (!download_url_.SchemeIsFile() &&
apps_require_extension_mime_type_ &&
original_mime_type_ != Extension::kMimeType) {
- *error = l10n_util::GetStringFUTF16(
- IDS_EXTENSION_INSTALL_INCORRECT_APP_CONTENT_TYPE,
- ASCIIToUTF16(Extension::kMimeType));
- return false;
+ return CrxInstallerError(
+ l10n_util::GetStringFUTF16(
+ IDS_EXTENSION_INSTALL_INCORRECT_APP_CONTENT_TYPE,
+ ASCIIToUTF16(Extension::kMimeType)));
}
// If the client_ is NULL, then the app is either being installed via
@@ -303,10 +303,10 @@
// from the gallery.
// TODO(erikkay) Apply this rule for paid extensions and themes as well.
if (extension->UpdatesFromGallery()) {
- *error = l10n_util::GetStringFUTF16(
- IDS_EXTENSION_DISALLOW_NON_DOWNLOADED_GALLERY_INSTALLS,
- l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE));
- return false;
+ return CrxInstallerError(
+ l10n_util::GetStringFUTF16(
+ IDS_EXTENSION_DISALLOW_NON_DOWNLOADED_GALLERY_INSTALLS,
+ l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE)));
}
// For self-hosted apps, verify that the entire extent is on the same
@@ -320,15 +320,15 @@
for (URLPatternSet::const_iterator i = patterns.begin();
i != patterns.end(); ++i) {
if (!pattern.MatchesHost(i->host())) {
- *error = l10n_util::GetStringUTF16(
- IDS_EXTENSION_INSTALL_INCORRECT_INSTALL_HOST);
- return false;
+ return CrxInstallerError(
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_INSTALL_INCORRECT_INSTALL_HOST));
}
}
}
}
- return true;
+ return CrxInstallerError();
}
void CrxInstaller::OnUnpackFailure(const string16& error_message) {
@@ -341,7 +341,7 @@
install_cause(),
extension_misc::NUM_INSTALL_CAUSES);
- ReportFailureFromFileThread(error_message);
+ ReportFailureFromFileThread(CrxInstallerError(error_message));
}
void CrxInstaller::OnUnpackSuccess(const FilePath& temp_dir,
@@ -369,8 +369,8 @@
// the temp dir.
unpacked_extension_root_ = extension_dir;
- string16 error;
- if (!AllowInstall(extension, &error)) {
+ CrxInstallerError error = AllowInstall(extension);
+ if (error.type() != CrxInstallerError::ERROR_NONE) {
ReportFailureFromFileThread(error);
return;
}
@@ -398,14 +398,15 @@
VLOG(1) << "This extension: " << extension_->id()
<< " is blacklisted. Install failed.";
ReportFailureFromUIThread(
- l10n_util::GetStringUTF16(IDS_EXTENSION_CANT_INSTALL_BLACKLISTED));
+ CrxInstallerError(
+ l10n_util::GetStringUTF16(IDS_EXTENSION_CANT_INSTALL_BLACKLISTED)));
return;
}
string16 error;
if (!ExtensionSystem::Get(profile_)->management_policy()->UserMayLoad(
extension_, &error)) {
- ReportFailureFromUIThread(error);
+ ReportFailureFromUIThread(CrxInstallerError(error));
return;
}
@@ -415,9 +416,11 @@
GetHostedAppByOverlappingWebExtent(extension_->web_extent());
if (overlapping_extension &&
overlapping_extension->id() != extension_->id()) {
- ReportFailureFromUIThread(l10n_util::GetStringFUTF16(
- IDS_EXTENSION_OVERLAPPING_WEB_EXTENT,
- UTF8ToUTF16(overlapping_extension->name())));
+ ReportFailureFromUIThread(
+ CrxInstallerError(
+ l10n_util::GetStringFUTF16(
+ IDS_EXTENSION_OVERLAPPING_WEB_EXTENT,
+ UTF8ToUTF16(overlapping_extension->name()))));
return;
}
@@ -474,7 +477,8 @@
Version::GetVersionFromString(current_version_));
if (current_version->CompareTo(*(extension_->version())) > 0) {
ReportFailureFromFileThread(
- l10n_util::GetStringUTF16(IDS_EXTENSION_CANT_DOWNGRADE_VERSION));
+ CrxInstallerError(
+ l10n_util::GetStringUTF16(IDS_EXTENSION_CANT_DOWNGRADE_VERSION)));
return;
}
}
@@ -493,8 +497,9 @@
install_directory_);
if (version_dir.empty()) {
ReportFailureFromFileThread(
- l10n_util::GetStringUTF16(
- IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED));
+ CrxInstallerError(
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED)));
return;
}
@@ -516,29 +521,31 @@
ReportSuccessFromFileThread();
}
-void CrxInstaller::ReportFailureFromFileThread(const string16& error) {
+void CrxInstaller::ReportFailureFromFileThread(const CrxInstallerError& error) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
if (!BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
- base::Bind(&CrxInstaller::ReportFailureFromUIThread, this, error)))
+ base::Bind(&CrxInstaller::ReportFailureFromUIThread, this, error))) {
NOTREACHED();
+ }
}
-void CrxInstaller::ReportFailureFromUIThread(const string16& error) {
+void CrxInstaller::ReportFailureFromUIThread(const CrxInstallerError& error) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
content::NotificationService* service =
content::NotificationService::current();
service->Notify(chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR,
content::Source<CrxInstaller>(this),
- content::Details<const string16>(&error));
+ content::Details<const string16>(&error.message()));
// This isn't really necessary, it is only used because unit tests expect to
// see errors get reported via this interface.
//
// TODO(aa): Need to go through unit tests and clean them up too, probably get
// rid of this line.
- ExtensionErrorReporter::GetInstance()->ReportError(error, false); // quiet
+ ExtensionErrorReporter::GetInstance()->ReportError(
+ error.message(), false); // quiet
if (client_)
client_->OnInstallFailure(error);
« no previous file with comments | « chrome/browser/extensions/crx_installer.h ('k') | chrome/browser/extensions/crx_installer_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698