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

Side by Side Diff: chrome/browser/extensions/crx_installer.cc

Issue 8423003: Enable experimental permissions for extensions from the store. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Windows compile warning Created 9 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 } 114 }
115 return false; 115 return false;
116 } 116 }
117 117
118 CrxInstaller::CrxInstaller(base::WeakPtr<ExtensionService> frontend_weak, 118 CrxInstaller::CrxInstaller(base::WeakPtr<ExtensionService> frontend_weak,
119 ExtensionInstallUI* client) 119 ExtensionInstallUI* client)
120 : install_directory_(frontend_weak->install_directory()), 120 : install_directory_(frontend_weak->install_directory()),
121 install_source_(Extension::INTERNAL), 121 install_source_(Extension::INTERNAL),
122 extensions_enabled_(frontend_weak->extensions_enabled()), 122 extensions_enabled_(frontend_weak->extensions_enabled()),
123 delete_source_(false), 123 delete_source_(false),
124 is_gallery_install_(false),
125 create_app_shortcut_(false), 124 create_app_shortcut_(false),
126 page_index_(-1), 125 page_index_(-1),
127 frontend_weak_(frontend_weak), 126 frontend_weak_(frontend_weak),
128 profile_(frontend_weak->profile()), 127 profile_(frontend_weak->profile()),
129 client_(client), 128 client_(client),
130 apps_require_extension_mime_type_(false), 129 apps_require_extension_mime_type_(false),
131 allow_silent_install_(false), 130 allow_silent_install_(false),
132 install_cause_(extension_misc::INSTALL_CAUSE_UNSET), 131 install_cause_(extension_misc::INSTALL_CAUSE_UNSET),
133 creation_flags_(Extension::NO_FLAGS) { 132 creation_flags_(Extension::NO_FLAGS) {
134 } 133 }
(...skipping 23 matching lines...) Expand all
158 client_ = NULL; 157 client_ = NULL;
159 } 158 }
160 159
161 void CrxInstaller::InstallCrx(const FilePath& source_file) { 160 void CrxInstaller::InstallCrx(const FilePath& source_file) {
162 source_file_ = source_file; 161 source_file_ = source_file;
163 162
164 scoped_refptr<SandboxedExtensionUnpacker> unpacker( 163 scoped_refptr<SandboxedExtensionUnpacker> unpacker(
165 new SandboxedExtensionUnpacker( 164 new SandboxedExtensionUnpacker(
166 source_file, 165 source_file,
167 g_browser_process->resource_dispatcher_host(), 166 g_browser_process->resource_dispatcher_host(),
167 install_source_,
168 creation_flags_, 168 creation_flags_,
169 this)); 169 this));
170 170
171 if (!BrowserThread::PostTask( 171 if (!BrowserThread::PostTask(
172 BrowserThread::FILE, FROM_HERE, 172 BrowserThread::FILE, FROM_HERE,
173 base::Bind( 173 base::Bind(
174 &SandboxedExtensionUnpacker::Start, unpacker.get()))) 174 &SandboxedExtensionUnpacker::Start, unpacker.get())))
175 NOTREACHED(); 175 NOTREACHED();
176 } 176 }
177 177
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 original_mime_type_ != Extension::kMimeType) { 267 original_mime_type_ != Extension::kMimeType) {
268 *error = base::StringPrintf( 268 *error = base::StringPrintf(
269 "Apps must be served with content type %s.", 269 "Apps must be served with content type %s.",
270 Extension::kMimeType); 270 Extension::kMimeType);
271 return false; 271 return false;
272 } 272 }
273 273
274 // If the client_ is NULL, then the app is either being installed via 274 // If the client_ is NULL, then the app is either being installed via
275 // an internal mechanism like sync, external_extensions, or default apps. 275 // an internal mechanism like sync, external_extensions, or default apps.
276 // In that case, we don't want to enforce things like the install origin. 276 // In that case, we don't want to enforce things like the install origin.
277 if (!is_gallery_install_ && client_) { 277 if (!is_gallery_install() && client_) {
278 // For apps with a gallery update URL, require that they be installed 278 // For apps with a gallery update URL, require that they be installed
279 // from the gallery. 279 // from the gallery.
280 // TODO(erikkay) Apply this rule for paid extensions and themes as well. 280 // TODO(erikkay) Apply this rule for paid extensions and themes as well.
281 if (extension->UpdatesFromGallery()) { 281 if (extension->UpdatesFromGallery()) {
282 *error = l10n_util::GetStringFUTF8( 282 *error = l10n_util::GetStringFUTF8(
283 IDS_EXTENSION_DISALLOW_NON_DOWNLOADED_GALLERY_INSTALLS, 283 IDS_EXTENSION_DISALLOW_NON_DOWNLOADED_GALLERY_INSTALLS,
284 l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE)); 284 l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE));
285 return false; 285 return false;
286 } 286 }
287 287
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 398
399 current_version_ = 399 current_version_ =
400 frontend_weak_->extension_prefs()->GetVersionString(extension_->id()); 400 frontend_weak_->extension_prefs()->GetVersionString(extension_->id());
401 401
402 // TODO(asargent) - remove this when we fully deprecate the old install api. 402 // TODO(asargent) - remove this when we fully deprecate the old install api.
403 ClearWhitelistedInstallId(extension_->id()); 403 ClearWhitelistedInstallId(extension_->id());
404 404
405 bool whitelisted = false; 405 bool whitelisted = false;
406 scoped_ptr<CrxInstaller::WhitelistEntry> entry( 406 scoped_ptr<CrxInstaller::WhitelistEntry> entry(
407 RemoveWhitelistEntry(extension_->id())); 407 RemoveWhitelistEntry(extension_->id()));
408 if (is_gallery_install_ && entry.get() && original_manifest_.get()) { 408 if (is_gallery_install() && entry.get() && original_manifest_.get()) {
409 if (!(original_manifest_->Equals(entry->parsed_manifest.get()))) { 409 if (!(original_manifest_->Equals(entry->parsed_manifest.get()))) {
410 ReportFailureFromUIThread( 410 ReportFailureFromUIThread(
411 l10n_util::GetStringUTF8(IDS_EXTENSION_MANIFEST_INVALID)); 411 l10n_util::GetStringUTF8(IDS_EXTENSION_MANIFEST_INVALID));
412 return; 412 return;
413 } 413 }
414 whitelisted = true; 414 whitelisted = true;
415 if (entry->use_app_installed_bubble) 415 if (entry->use_app_installed_bubble)
416 client_->set_use_app_installed_bubble(true); 416 client_->set_use_app_installed_bubble(true);
417 } 417 }
418 418
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED)); 490 IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED));
491 return; 491 return;
492 } 492 }
493 493
494 // This is lame, but we must reload the extension because absolute paths 494 // This is lame, but we must reload the extension because absolute paths
495 // inside the content scripts are established inside InitFromValue() and we 495 // inside the content scripts are established inside InitFromValue() and we
496 // just moved the extension. 496 // just moved the extension.
497 // TODO(aa): All paths to resources inside extensions should be created 497 // TODO(aa): All paths to resources inside extensions should be created
498 // lazily and based on the Extension's root path at that moment. 498 // lazily and based on the Extension's root path at that moment.
499 std::string error; 499 std::string error;
500 int flags = extension_->creation_flags() | Extension::REQUIRE_KEY;
501 if (is_gallery_install())
502 flags |= Extension::FROM_WEBSTORE;
503 extension_ = extension_file_util::LoadExtension( 500 extension_ = extension_file_util::LoadExtension(
504 version_dir, 501 version_dir,
505 install_source_, 502 install_source_,
506 flags, 503 extension_->creation_flags() | Extension::REQUIRE_KEY,
507 &error); 504 &error);
508 CHECK(error.empty()) << error; 505 CHECK(error.empty()) << error;
509 506
510 ReportSuccessFromFileThread(); 507 ReportSuccessFromFileThread();
511 } 508 }
512 509
513 void CrxInstaller::ReportFailureFromFileThread(const std::string& error) { 510 void CrxInstaller::ReportFailureFromFileThread(const std::string& error) {
514 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 511 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
515 if (!BrowserThread::PostTask( 512 if (!BrowserThread::PostTask(
516 BrowserThread::UI, FROM_HERE, 513 BrowserThread::UI, FROM_HERE,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 // Some users (such as the download shelf) need to know when a 593 // Some users (such as the download shelf) need to know when a
597 // CRXInstaller is done. Listening for the EXTENSION_* events 594 // CRXInstaller is done. Listening for the EXTENSION_* events
598 // is problematic because they don't know anything about the 595 // is problematic because they don't know anything about the
599 // extension before it is unpacked, so they can not filter based 596 // extension before it is unpacked, so they can not filter based
600 // on the extension. 597 // on the extension.
601 content::NotificationService::current()->Notify( 598 content::NotificationService::current()->Notify(
602 chrome::NOTIFICATION_CRX_INSTALLER_DONE, 599 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
603 content::Source<CrxInstaller>(this), 600 content::Source<CrxInstaller>(this),
604 content::NotificationService::NoDetails()); 601 content::NotificationService::NoDetails());
605 } 602 }
OLDNEW
« 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