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

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

Issue 12211029: Sanity tweaks to the extension blacklist: check all extensions at once on (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ready for review Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 ExtensionService::RecordPermissionMessagesHistogram( 478 ExtensionService::RecordPermissionMessagesHistogram(
479 extension_, histogram_name.c_str()); 479 extension_, histogram_name.c_str());
480 480
481 // Kill the theme loading bubble. 481 // Kill the theme loading bubble.
482 content::NotificationService* service = 482 content::NotificationService* service =
483 content::NotificationService::current(); 483 content::NotificationService::current();
484 service->Notify(chrome::NOTIFICATION_NO_THEME_DETECTED, 484 service->Notify(chrome::NOTIFICATION_NO_THEME_DETECTED,
485 content::Source<CrxInstaller>(this), 485 content::Source<CrxInstaller>(this),
486 content::NotificationService::NoDetails()); 486 content::NotificationService::NoDetails());
487 487
488 NotifyCrxInstallComplete(NULL); 488 NotifyCrxInstallComplete(false);
489 489
490 Release(); // balanced in ConfirmInstall(). 490 Release(); // balanced in ConfirmInstall().
491 491
492 // We're done. Since we don't post any more tasks to ourself, our ref count 492 // We're done. Since we don't post any more tasks to ourself, our ref count
493 // should go to zero and we die. The destructor will clean up the temp dir. 493 // should go to zero and we die. The destructor will clean up the temp dir.
494 } 494 }
495 495
496 void CrxInstaller::CompleteInstall() { 496 void CrxInstaller::CompleteInstall() {
497 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); 497 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread());
498 498
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 // see errors get reported via this interface. 574 // see errors get reported via this interface.
575 // 575 //
576 // TODO(aa): Need to go through unit tests and clean them up too, probably get 576 // TODO(aa): Need to go through unit tests and clean them up too, probably get
577 // rid of this line. 577 // rid of this line.
578 ExtensionErrorReporter::GetInstance()->ReportError( 578 ExtensionErrorReporter::GetInstance()->ReportError(
579 error.message(), false); // quiet 579 error.message(), false); // quiet
580 580
581 if (client_) 581 if (client_)
582 client_->OnInstallFailure(error); 582 client_->OnInstallFailure(error);
583 583
584 NotifyCrxInstallComplete(NULL); 584 NotifyCrxInstallComplete(false);
585 585
586 // Delete temporary files. 586 // Delete temporary files.
587 CleanupTempFiles(); 587 CleanupTempFiles();
588 } 588 }
589 589
590 void CrxInstaller::ReportSuccessFromFileThread() { 590 void CrxInstaller::ReportSuccessFromFileThread() {
591 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); 591 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread());
592 592
593 // Tracking number of extensions installed by users 593 // Tracking number of extensions installed by users
594 if (install_cause() == extension_misc::INSTALL_CAUSE_USER_DOWNLOAD) 594 if (install_cause() == extension_misc::INSTALL_CAUSE_USER_DOWNLOAD)
(...skipping 25 matching lines...) Expand all
620 // We update the extension's granted permissions if the user already approved 620 // We update the extension's granted permissions if the user already approved
621 // the install (client_ is non NULL), or we are allowed to install this 621 // the install (client_ is non NULL), or we are allowed to install this
622 // silently. 622 // silently.
623 if (client_ || allow_silent_install_) { 623 if (client_ || allow_silent_install_) {
624 PermissionsUpdater perms_updater(profile()); 624 PermissionsUpdater perms_updater(profile());
625 perms_updater.GrantActivePermissions(extension_, record_oauth2_grant_); 625 perms_updater.GrantActivePermissions(extension_, record_oauth2_grant_);
626 } 626 }
627 627
628 // Tell the frontend about the installation and hand off ownership of 628 // Tell the frontend about the installation and hand off ownership of
629 // extension_ to it. 629 // extension_ to it.
630 frontend_weak_->OnExtensionInstalled(extension_, 630 frontend_weak_->InstallExtensionAsync(
631 page_ordinal_, 631 extension_,
632 has_requirement_errors_, 632 page_ordinal_,
633 install_wait_for_idle_); 633 has_requirement_errors_,
634 634 install_wait_for_idle_,
635 NotifyCrxInstallComplete(extension_.get()); 635 base::Bind(&CrxInstaller::NotifyCrxInstallComplete, this));
636
637 extension_ = NULL;
638
639 // We're done. We don't post any more tasks to ourselves so we are deleted
640 // soon.
641 } 636 }
642 637
643 void CrxInstaller::NotifyCrxInstallComplete(const Extension* extension) { 638 void CrxInstaller::NotifyCrxInstallComplete(bool success) {
644 // Some users (such as the download shelf) need to know when a 639 // Some users (such as the download shelf) need to know when a
645 // CRXInstaller is done. Listening for the EXTENSION_* events 640 // CRXInstaller is done. Listening for the EXTENSION_* events
646 // is problematic because they don't know anything about the 641 // is problematic because they don't know anything about the
647 // extension before it is unpacked, so they cannot filter based 642 // extension before it is unpacked, so they cannot filter based
648 // on the extension. 643 // on the extension.
649 content::NotificationService::current()->Notify( 644 content::NotificationService::current()->Notify(
650 chrome::NOTIFICATION_CRX_INSTALLER_DONE, 645 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
651 content::Source<CrxInstaller>(this), 646 content::Source<CrxInstaller>(this),
652 content::Details<const Extension>(extension)); 647 content::Details<const Extension>(success ? extension_.get() : NULL));
648
649 // We're done. We don't post any more tasks to ourselves so we are deleted
650 // soon.
651 extension_ = NULL;
653 } 652 }
654 653
655 void CrxInstaller::CleanupTempFiles() { 654 void CrxInstaller::CleanupTempFiles() {
656 if (!installer_task_runner_->RunsTasksOnCurrentThread()) { 655 if (!installer_task_runner_->RunsTasksOnCurrentThread()) {
657 if (!installer_task_runner_->PostTask( 656 if (!installer_task_runner_->PostTask(
658 FROM_HERE, 657 FROM_HERE,
659 base::Bind(&CrxInstaller::CleanupTempFiles, this))) { 658 base::Bind(&CrxInstaller::CleanupTempFiles, this))) {
660 NOTREACHED(); 659 NOTREACHED();
661 } 660 }
662 return; 661 return;
663 } 662 }
664 663
665 // Delete the temp directory and crx file as necessary. 664 // Delete the temp directory and crx file as necessary.
666 if (!temp_dir_.value().empty()) { 665 if (!temp_dir_.value().empty()) {
667 extension_file_util::DeleteFile(temp_dir_, true); 666 extension_file_util::DeleteFile(temp_dir_, true);
668 temp_dir_ = FilePath(); 667 temp_dir_ = FilePath();
669 } 668 }
670 669
671 if (delete_source_ && !source_file_.value().empty()) { 670 if (delete_source_ && !source_file_.value().empty()) {
672 extension_file_util::DeleteFile(source_file_, false); 671 extension_file_util::DeleteFile(source_file_, false);
673 source_file_ = FilePath(); 672 source_file_ = FilePath();
674 } 673 }
675 } 674 }
676 675
677 } // namespace extensions 676 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698