| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/crx_installer.h" | 5 #include "chrome/browser/extensions/crx_installer.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 CrxInstaller::CrxInstaller(const FilePath& install_directory, | 39 CrxInstaller::CrxInstaller(const FilePath& install_directory, |
| 40 ExtensionsService* frontend, | 40 ExtensionsService* frontend, |
| 41 ExtensionInstallUI* client) | 41 ExtensionInstallUI* client) |
| 42 : install_directory_(install_directory), | 42 : install_directory_(install_directory), |
| 43 install_source_(Extension::INTERNAL), | 43 install_source_(Extension::INTERNAL), |
| 44 delete_source_(false), | 44 delete_source_(false), |
| 45 allow_privilege_increase_(false), | 45 allow_privilege_increase_(false), |
| 46 limit_web_extent_to_download_host_(false), | 46 limit_web_extent_to_download_host_(false), |
| 47 create_app_shortcut_(false), | 47 create_app_shortcut_(false), |
| 48 frontend_(frontend), | 48 frontend_(frontend), |
| 49 client_(client) { | 49 client_(client), |
| 50 apps_require_extension_mime_type_(false) { |
| 50 extensions_enabled_ = frontend_->extensions_enabled(); | 51 extensions_enabled_ = frontend_->extensions_enabled(); |
| 51 } | 52 } |
| 52 | 53 |
| 53 CrxInstaller::~CrxInstaller() { | 54 CrxInstaller::~CrxInstaller() { |
| 54 // Delete the temp directory and crx file as necessary. Note that the | 55 // Delete the temp directory and crx file as necessary. Note that the |
| 55 // destructor might be called on any thread, so we post a task to the file | 56 // destructor might be called on any thread, so we post a task to the file |
| 56 // thread to make sure the delete happens there. | 57 // thread to make sure the delete happens there. |
| 57 if (!temp_dir_.value().empty()) { | 58 if (!temp_dir_.value().empty()) { |
| 58 ChromeThread::PostTask( | 59 ChromeThread::PostTask( |
| 59 ChromeThread::FILE, FROM_HERE, | 60 ChromeThread::FILE, FROM_HERE, |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 | 122 |
| 122 void CrxInstaller::OnUnpackSuccess(const FilePath& temp_dir, | 123 void CrxInstaller::OnUnpackSuccess(const FilePath& temp_dir, |
| 123 const FilePath& extension_dir, | 124 const FilePath& extension_dir, |
| 124 Extension* extension) { | 125 Extension* extension) { |
| 125 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); | 126 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); |
| 126 | 127 |
| 127 // Note: We take ownership of |extension| and |temp_dir|. | 128 // Note: We take ownership of |extension| and |temp_dir|. |
| 128 extension_.reset(extension); | 129 extension_.reset(extension); |
| 129 temp_dir_ = temp_dir; | 130 temp_dir_ = temp_dir; |
| 130 | 131 |
| 132 // If the extension was downloaded, apps_require_extension_mime_type_ |
| 133 // will be set. In this case, check that if the extension is an app, |
| 134 // it was served with the right mime type. Make an exception for file |
| 135 // URLs, which come from the users computer and have no headers. |
| 136 if (extension->is_app() && |
| 137 !original_url_.SchemeIsFile() && |
| 138 apps_require_extension_mime_type_ && |
| 139 original_mime_type_ != Extension::kMimeType) { |
| 140 ReportFailureFromFileThread(StringPrintf( |
| 141 "Applications must be served with content type %s.", |
| 142 Extension::kMimeType)); |
| 143 return; |
| 144 } |
| 145 |
| 131 // The unpack dir we don't have to delete explicity since it is a child of | 146 // The unpack dir we don't have to delete explicity since it is a child of |
| 132 // the temp dir. | 147 // the temp dir. |
| 133 unpacked_extension_root_ = extension_dir; | 148 unpacked_extension_root_ = extension_dir; |
| 134 | 149 |
| 135 // Only allow extensions with a gallery update url to be installed after | 150 // Only allow extensions with a gallery update url to be installed after |
| 136 // having been directly downloaded from the gallery. | 151 // having been directly downloaded from the gallery. |
| 137 if (extension->update_url() == GURL(extension_urls::kGalleryUpdateURL) && | 152 if (extension->update_url() == GURL(extension_urls::kGalleryUpdateURL) && |
| 138 !ExtensionsService::IsGalleryDownloadURL(original_url_)) { | 153 !ExtensionsService::IsGalleryDownloadURL(original_url_)) { |
| 139 ReportFailureFromFileThread(l10n_util::GetStringFUTF8( | 154 ReportFailureFromFileThread(l10n_util::GetStringFUTF8( |
| 140 IDS_EXTENSION_DISALLOW_NON_DOWNLOADED_GALLERY_INSTALLS, | 155 IDS_EXTENSION_DISALLOW_NON_DOWNLOADED_GALLERY_INSTALLS, |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 client_->OnInstallSuccess(extension_.get()); | 357 client_->OnInstallSuccess(extension_.get()); |
| 343 | 358 |
| 344 // Tell the frontend about the installation and hand off ownership of | 359 // Tell the frontend about the installation and hand off ownership of |
| 345 // extension_ to it. | 360 // extension_ to it. |
| 346 frontend_->OnExtensionInstalled(extension_.release(), | 361 frontend_->OnExtensionInstalled(extension_.release(), |
| 347 allow_privilege_increase_); | 362 allow_privilege_increase_); |
| 348 | 363 |
| 349 // We're done. We don't post any more tasks to ourselves so we are deleted | 364 // We're done. We don't post any more tasks to ourselves so we are deleted |
| 350 // soon. | 365 // soon. |
| 351 } | 366 } |
| OLD | NEW |