OLD | NEW |
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 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 return; | 240 return; |
241 } | 241 } |
242 | 242 |
243 // TODO(aa): conversion data gets lost here :( | 243 // TODO(aa): conversion data gets lost here :( |
244 | 244 |
245 OnUnpackSuccess(extension->path(), extension->path(), nullptr, | 245 OnUnpackSuccess(extension->path(), extension->path(), nullptr, |
246 extension.get(), SkBitmap()); | 246 extension.get(), SkBitmap()); |
247 } | 247 } |
248 | 248 |
249 CrxInstallError CrxInstaller::AllowInstall(const Extension* extension) { | 249 CrxInstallError CrxInstaller::AllowInstall(const Extension* extension) { |
250 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); | 250 DCHECK(installer_task_runner_->RunsTasksInCurrentSequence()); |
251 | 251 |
252 // Make sure the expected ID matches if one was supplied or if we want to | 252 // Make sure the expected ID matches if one was supplied or if we want to |
253 // bypass the prompt. | 253 // bypass the prompt. |
254 if ((approved_ || !expected_id_.empty()) && | 254 if ((approved_ || !expected_id_.empty()) && |
255 expected_id_ != extension->id()) { | 255 expected_id_ != extension->id()) { |
256 return CrxInstallError(l10n_util::GetStringFUTF16( | 256 return CrxInstallError(l10n_util::GetStringFUTF16( |
257 IDS_EXTENSION_INSTALL_UNEXPECTED_ID, base::ASCIIToUTF16(expected_id_), | 257 IDS_EXTENSION_INSTALL_UNEXPECTED_ID, base::ASCIIToUTF16(expected_id_), |
258 base::ASCIIToUTF16(extension->id()))); | 258 base::ASCIIToUTF16(extension->id()))); |
259 } | 259 } |
260 | 260 |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 IDS_EXTENSION_INSTALL_INCORRECT_INSTALL_HOST)); | 398 IDS_EXTENSION_INSTALL_INCORRECT_INSTALL_HOST)); |
399 } | 399 } |
400 } | 400 } |
401 } | 401 } |
402 } | 402 } |
403 | 403 |
404 return CrxInstallError(); | 404 return CrxInstallError(); |
405 } | 405 } |
406 | 406 |
407 void CrxInstaller::OnUnpackFailure(const CrxInstallError& error) { | 407 void CrxInstaller::OnUnpackFailure(const CrxInstallError& error) { |
408 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); | 408 DCHECK(installer_task_runner_->RunsTasksInCurrentSequence()); |
409 | 409 |
410 UMA_HISTOGRAM_ENUMERATION("Extensions.UnpackFailureInstallSource", | 410 UMA_HISTOGRAM_ENUMERATION("Extensions.UnpackFailureInstallSource", |
411 install_source(), Manifest::NUM_LOCATIONS); | 411 install_source(), Manifest::NUM_LOCATIONS); |
412 | 412 |
413 UMA_HISTOGRAM_ENUMERATION("Extensions.UnpackFailureInstallCause", | 413 UMA_HISTOGRAM_ENUMERATION("Extensions.UnpackFailureInstallCause", |
414 install_cause(), | 414 install_cause(), |
415 extension_misc::NUM_INSTALL_CAUSES); | 415 extension_misc::NUM_INSTALL_CAUSES); |
416 | 416 |
417 ReportFailureFromFileThread(error); | 417 ReportFailureFromFileThread(error); |
418 } | 418 } |
419 | 419 |
420 void CrxInstaller::OnUnpackSuccess( | 420 void CrxInstaller::OnUnpackSuccess( |
421 const base::FilePath& temp_dir, | 421 const base::FilePath& temp_dir, |
422 const base::FilePath& extension_dir, | 422 const base::FilePath& extension_dir, |
423 std::unique_ptr<base::DictionaryValue> original_manifest, | 423 std::unique_ptr<base::DictionaryValue> original_manifest, |
424 const Extension* extension, | 424 const Extension* extension, |
425 const SkBitmap& install_icon) { | 425 const SkBitmap& install_icon) { |
426 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); | 426 DCHECK(installer_task_runner_->RunsTasksInCurrentSequence()); |
427 | 427 |
428 UMA_HISTOGRAM_ENUMERATION("Extensions.UnpackSuccessInstallSource", | 428 UMA_HISTOGRAM_ENUMERATION("Extensions.UnpackSuccessInstallSource", |
429 install_source(), Manifest::NUM_LOCATIONS); | 429 install_source(), Manifest::NUM_LOCATIONS); |
430 | 430 |
431 | 431 |
432 UMA_HISTOGRAM_ENUMERATION("Extensions.UnpackSuccessInstallCause", | 432 UMA_HISTOGRAM_ENUMERATION("Extensions.UnpackSuccessInstallCause", |
433 install_cause(), | 433 install_cause(), |
434 extension_misc::NUM_INSTALL_CAUSES); | 434 extension_misc::NUM_INSTALL_CAUSES); |
435 | 435 |
436 extension_ = extension; | 436 extension_ = extension; |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
681 if (ExtensionPrefs::Get(profile())->AllowFileAccess(extension()->id())) | 681 if (ExtensionPrefs::Get(profile())->AllowFileAccess(extension()->id())) |
682 creation_flags_ |= Extension::ALLOW_FILE_ACCESS; | 682 creation_flags_ |= Extension::ALLOW_FILE_ACCESS; |
683 | 683 |
684 if (!installer_task_runner_->PostTask( | 684 if (!installer_task_runner_->PostTask( |
685 FROM_HERE, base::BindOnce(&CrxInstaller::CompleteInstall, this))) { | 685 FROM_HERE, base::BindOnce(&CrxInstaller::CompleteInstall, this))) { |
686 NOTREACHED(); | 686 NOTREACHED(); |
687 } | 687 } |
688 } | 688 } |
689 | 689 |
690 void CrxInstaller::CompleteInstall() { | 690 void CrxInstaller::CompleteInstall() { |
691 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); | 691 DCHECK(installer_task_runner_->RunsTasksInCurrentSequence()); |
692 | 692 |
693 if (current_version_.IsValid() && | 693 if (current_version_.IsValid() && |
694 current_version_.CompareTo(*(extension()->version())) > 0) { | 694 current_version_.CompareTo(*(extension()->version())) > 0) { |
695 ReportFailureFromFileThread(CrxInstallError( | 695 ReportFailureFromFileThread(CrxInstallError( |
696 CrxInstallError::ERROR_DECLINED, | 696 CrxInstallError::ERROR_DECLINED, |
697 l10n_util::GetStringUTF16( | 697 l10n_util::GetStringUTF16( |
698 extension()->is_app() ? IDS_APP_CANT_DOWNGRADE_VERSION | 698 extension()->is_app() ? IDS_APP_CANT_DOWNGRADE_VERSION |
699 : IDS_EXTENSION_CANT_DOWNGRADE_VERSION))); | 699 : IDS_EXTENSION_CANT_DOWNGRADE_VERSION))); |
700 return; | 700 return; |
701 } | 701 } |
(...skipping 10 matching lines...) Expand all Loading... |
712 assets_manager->InstallExtension( | 712 assets_manager->InstallExtension( |
713 extension(), | 713 extension(), |
714 unpacked_extension_root_, | 714 unpacked_extension_root_, |
715 install_directory_, | 715 install_directory_, |
716 profile(), | 716 profile(), |
717 base::Bind(&CrxInstaller::ReloadExtensionAfterInstall, this)); | 717 base::Bind(&CrxInstaller::ReloadExtensionAfterInstall, this)); |
718 } | 718 } |
719 | 719 |
720 void CrxInstaller::ReloadExtensionAfterInstall( | 720 void CrxInstaller::ReloadExtensionAfterInstall( |
721 const base::FilePath& version_dir) { | 721 const base::FilePath& version_dir) { |
722 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); | 722 DCHECK(installer_task_runner_->RunsTasksInCurrentSequence()); |
723 | 723 |
724 if (version_dir.empty()) { | 724 if (version_dir.empty()) { |
725 ReportFailureFromFileThread(CrxInstallError(l10n_util::GetStringUTF16( | 725 ReportFailureFromFileThread(CrxInstallError(l10n_util::GetStringUTF16( |
726 IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED))); | 726 IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED))); |
727 return; | 727 return; |
728 } | 728 } |
729 | 729 |
730 // This is lame, but we must reload the extension because absolute paths | 730 // This is lame, but we must reload the extension because absolute paths |
731 // inside the content scripts are established inside InitFromValue() and we | 731 // inside the content scripts are established inside InitFromValue() and we |
732 // just moved the extension. | 732 // just moved the extension. |
(...skipping 10 matching lines...) Expand all Loading... |
743 | 743 |
744 if (extension()) { | 744 if (extension()) { |
745 ReportSuccessFromFileThread(); | 745 ReportSuccessFromFileThread(); |
746 } else { | 746 } else { |
747 LOG(ERROR) << error << " " << extension_id << " " << download_url_; | 747 LOG(ERROR) << error << " " << extension_id << " " << download_url_; |
748 ReportFailureFromFileThread(CrxInstallError(base::UTF8ToUTF16(error))); | 748 ReportFailureFromFileThread(CrxInstallError(base::UTF8ToUTF16(error))); |
749 } | 749 } |
750 } | 750 } |
751 | 751 |
752 void CrxInstaller::ReportFailureFromFileThread(const CrxInstallError& error) { | 752 void CrxInstaller::ReportFailureFromFileThread(const CrxInstallError& error) { |
753 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); | 753 DCHECK(installer_task_runner_->RunsTasksInCurrentSequence()); |
754 if (!BrowserThread::PostTask( | 754 if (!BrowserThread::PostTask( |
755 BrowserThread::UI, FROM_HERE, | 755 BrowserThread::UI, FROM_HERE, |
756 base::BindOnce(&CrxInstaller::ReportFailureFromUIThread, this, | 756 base::BindOnce(&CrxInstaller::ReportFailureFromUIThread, this, |
757 error))) { | 757 error))) { |
758 NOTREACHED(); | 758 NOTREACHED(); |
759 } | 759 } |
760 } | 760 } |
761 | 761 |
762 void CrxInstaller::ReportFailureFromUIThread(const CrxInstallError& error) { | 762 void CrxInstaller::ReportFailureFromUIThread(const CrxInstallError& error) { |
763 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 763 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
(...skipping 19 matching lines...) Expand all Loading... |
783 if (client_) | 783 if (client_) |
784 client_->OnInstallFailure(error); | 784 client_->OnInstallFailure(error); |
785 | 785 |
786 NotifyCrxInstallComplete(false); | 786 NotifyCrxInstallComplete(false); |
787 | 787 |
788 // Delete temporary files. | 788 // Delete temporary files. |
789 CleanupTempFiles(); | 789 CleanupTempFiles(); |
790 } | 790 } |
791 | 791 |
792 void CrxInstaller::ReportSuccessFromFileThread() { | 792 void CrxInstaller::ReportSuccessFromFileThread() { |
793 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); | 793 DCHECK(installer_task_runner_->RunsTasksInCurrentSequence()); |
794 | 794 |
795 // Tracking number of extensions installed by users | 795 // Tracking number of extensions installed by users |
796 if (install_cause() == extension_misc::INSTALL_CAUSE_USER_DOWNLOAD) | 796 if (install_cause() == extension_misc::INSTALL_CAUSE_USER_DOWNLOAD) |
797 UMA_HISTOGRAM_ENUMERATION("Extensions.ExtensionInstalled", 1, 2); | 797 UMA_HISTOGRAM_ENUMERATION("Extensions.ExtensionInstalled", 1, 2); |
798 | 798 |
799 if (!BrowserThread::PostTask( | 799 if (!BrowserThread::PostTask( |
800 BrowserThread::UI, FROM_HERE, | 800 BrowserThread::UI, FROM_HERE, |
801 base::BindOnce(&CrxInstaller::ReportSuccessFromUIThread, this))) | 801 base::BindOnce(&CrxInstaller::ReportSuccessFromUIThread, this))) |
802 NOTREACHED(); | 802 NOTREACHED(); |
803 | 803 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 content::Details<const Extension>(success ? extension() : NULL)); | 852 content::Details<const Extension>(success ? extension() : NULL)); |
853 | 853 |
854 InstallTrackerFactory::GetForBrowserContext(profile()) | 854 InstallTrackerFactory::GetForBrowserContext(profile()) |
855 ->OnFinishCrxInstall(success ? extension()->id() : expected_id_, success); | 855 ->OnFinishCrxInstall(success ? extension()->id() : expected_id_, success); |
856 | 856 |
857 if (success) | 857 if (success) |
858 ConfirmReEnable(); | 858 ConfirmReEnable(); |
859 } | 859 } |
860 | 860 |
861 void CrxInstaller::CleanupTempFiles() { | 861 void CrxInstaller::CleanupTempFiles() { |
862 if (!installer_task_runner_->RunsTasksOnCurrentThread()) { | 862 if (!installer_task_runner_->RunsTasksInCurrentSequence()) { |
863 if (!installer_task_runner_->PostTask( | 863 if (!installer_task_runner_->PostTask( |
864 FROM_HERE, base::BindOnce(&CrxInstaller::CleanupTempFiles, this))) { | 864 FROM_HERE, base::BindOnce(&CrxInstaller::CleanupTempFiles, this))) { |
865 NOTREACHED(); | 865 NOTREACHED(); |
866 } | 866 } |
867 return; | 867 return; |
868 } | 868 } |
869 | 869 |
870 // Delete the temp directory and crx file as necessary. | 870 // Delete the temp directory and crx file as necessary. |
871 if (!temp_dir_.value().empty()) { | 871 if (!temp_dir_.value().empty()) { |
872 file_util::DeleteFile(temp_dir_, true); | 872 file_util::DeleteFile(temp_dir_, true); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
920 ExtensionInstallPrompt::GetReEnablePromptTypeForExtension( | 920 ExtensionInstallPrompt::GetReEnablePromptTypeForExtension( |
921 service->profile(), extension()); | 921 service->profile(), extension()); |
922 client_->ShowDialog(base::Bind(&CrxInstaller::OnInstallPromptDone, this), | 922 client_->ShowDialog(base::Bind(&CrxInstaller::OnInstallPromptDone, this), |
923 extension(), nullptr, | 923 extension(), nullptr, |
924 base::MakeUnique<ExtensionInstallPrompt::Prompt>(type), | 924 base::MakeUnique<ExtensionInstallPrompt::Prompt>(type), |
925 ExtensionInstallPrompt::GetDefaultShowDialogCallback()); | 925 ExtensionInstallPrompt::GetDefaultShowDialogCallback()); |
926 } | 926 } |
927 } | 927 } |
928 | 928 |
929 } // namespace extensions | 929 } // namespace extensions |
OLD | NEW |