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

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

Issue 273193006: Install Chrome OS apps to shared location (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: eliminate race condition between install and uninstall Created 6 years, 7 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"
11 #include "base/file_util.h" 11 #include "base/file_util.h"
12 #include "base/files/scoped_temp_dir.h" 12 #include "base/files/scoped_temp_dir.h"
13 #include "base/lazy_instance.h" 13 #include "base/lazy_instance.h"
14 #include "base/metrics/histogram.h" 14 #include "base/metrics/histogram.h"
15 #include "base/path_service.h" 15 #include "base/path_service.h"
16 #include "base/sequenced_task_runner.h" 16 #include "base/sequenced_task_runner.h"
17 #include "base/strings/string_util.h" 17 #include "base/strings/string_util.h"
18 #include "base/strings/stringprintf.h" 18 #include "base/strings/stringprintf.h"
19 #include "base/strings/utf_string_conversions.h" 19 #include "base/strings/utf_string_conversions.h"
20 #include "base/threading/sequenced_worker_pool.h" 20 #include "base/threading/sequenced_worker_pool.h"
21 #include "base/threading/thread_restrictions.h" 21 #include "base/threading/thread_restrictions.h"
22 #include "base/time/time.h" 22 #include "base/time/time.h"
23 #include "base/version.h" 23 #include "base/version.h"
24 #include "chrome/browser/chrome_notification_types.h" 24 #include "chrome/browser/chrome_notification_types.h"
25 #include "chrome/browser/extensions/convert_user_script.h" 25 #include "chrome/browser/extensions/convert_user_script.h"
26 #include "chrome/browser/extensions/convert_web_app.h" 26 #include "chrome/browser/extensions/convert_web_app.h"
27 #include "chrome/browser/extensions/crx_installer_error.h" 27 #include "chrome/browser/extensions/crx_installer_error.h"
28 #include "chrome/browser/extensions/extension_assets_manager.h"
28 #include "chrome/browser/extensions/extension_error_reporter.h" 29 #include "chrome/browser/extensions/extension_error_reporter.h"
29 #include "chrome/browser/extensions/extension_install_ui.h" 30 #include "chrome/browser/extensions/extension_install_ui.h"
30 #include "chrome/browser/extensions/extension_service.h" 31 #include "chrome/browser/extensions/extension_service.h"
31 #include "chrome/browser/extensions/install_tracker.h" 32 #include "chrome/browser/extensions/install_tracker.h"
32 #include "chrome/browser/extensions/install_tracker_factory.h" 33 #include "chrome/browser/extensions/install_tracker_factory.h"
33 #include "chrome/browser/extensions/permissions_updater.h" 34 #include "chrome/browser/extensions/permissions_updater.h"
34 #include "chrome/browser/extensions/webstore_installer.h" 35 #include "chrome/browser/extensions/webstore_installer.h"
35 #include "chrome/browser/profiles/profile.h" 36 #include "chrome/browser/profiles/profile.h"
36 #include "chrome/browser/web_applications/web_app.h" 37 #include "chrome/browser/web_applications/web_app.h"
37 #include "chrome/common/chrome_paths.h" 38 #include "chrome/common/chrome_paths.h"
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 } 689 }
689 } 690 }
690 691
691 // See how long extension install paths are. This is important on 692 // See how long extension install paths are. This is important on
692 // windows, because file operations may fail if the path to a file 693 // windows, because file operations may fail if the path to a file
693 // exceeds a small constant. See crbug.com/69693 . 694 // exceeds a small constant. See crbug.com/69693 .
694 UMA_HISTOGRAM_CUSTOM_COUNTS( 695 UMA_HISTOGRAM_CUSTOM_COUNTS(
695 "Extensions.CrxInstallDirPathLength", 696 "Extensions.CrxInstallDirPathLength",
696 install_directory_.value().length(), 0, 500, 100); 697 install_directory_.value().length(), 0, 500, 100);
697 698
698 base::FilePath version_dir = 699 ExtensionAssetsManager* assets_manager =
699 file_util::InstallExtension(unpacked_extension_root_, 700 ExtensionAssetsManager::GetInstance();
700 extension()->id(), 701 assets_manager->InstallExtension(
701 extension()->VersionString(), 702 extension(),
702 install_directory_); 703 unpacked_extension_root_,
704 install_directory_,
705 profile(),
706 base::Bind(&CrxInstaller::ReloadExtensionAfterInstall, this));
707 }
708
709 void CrxInstaller::ReloadExtensionAfterInstall(
710 const base::FilePath& version_dir) {
711 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread());
712
703 if (version_dir.empty()) { 713 if (version_dir.empty()) {
704 ReportFailureFromFileThread( 714 ReportFailureFromFileThread(
705 CrxInstallerError( 715 CrxInstallerError(
706 l10n_util::GetStringUTF16( 716 l10n_util::GetStringUTF16(
707 IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED))); 717 IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED)));
708 return; 718 return;
709 } 719 }
710 720
711 // This is lame, but we must reload the extension because absolute paths 721 // This is lame, but we must reload the extension because absolute paths
712 // inside the content scripts are established inside InitFromValue() and we 722 // inside the content scripts are established inside InitFromValue() and we
(...skipping 10 matching lines...) Expand all
723 install_source_, 733 install_source_,
724 extension()->creation_flags() | Extension::REQUIRE_KEY, 734 extension()->creation_flags() | Extension::REQUIRE_KEY,
725 &error).get()); 735 &error).get());
726 736
727 if (extension()) { 737 if (extension()) {
728 ReportSuccessFromFileThread(); 738 ReportSuccessFromFileThread();
729 } else { 739 } else {
730 LOG(ERROR) << error << " " << extension_id << " " << download_url_; 740 LOG(ERROR) << error << " " << extension_id << " " << download_url_;
731 ReportFailureFromFileThread(CrxInstallerError(base::UTF8ToUTF16(error))); 741 ReportFailureFromFileThread(CrxInstallerError(base::UTF8ToUTF16(error)));
732 } 742 }
733
734 } 743 }
735 744
736 void CrxInstaller::ReportFailureFromFileThread(const CrxInstallerError& error) { 745 void CrxInstaller::ReportFailureFromFileThread(const CrxInstallerError& error) {
737 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread()); 746 DCHECK(installer_task_runner_->RunsTasksOnCurrentThread());
738 if (!BrowserThread::PostTask( 747 if (!BrowserThread::PostTask(
739 BrowserThread::UI, FROM_HERE, 748 BrowserThread::UI, FROM_HERE,
740 base::Bind(&CrxInstaller::ReportFailureFromUIThread, this, error))) { 749 base::Bind(&CrxInstaller::ReportFailureFromUIThread, this, error))) {
741 NOTREACHED(); 750 NOTREACHED();
742 } 751 }
743 } 752 }
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 if (!prefs->DidExtensionEscalatePermissions(extension()->id())) 906 if (!prefs->DidExtensionEscalatePermissions(extension()->id()))
898 return; 907 return;
899 908
900 if (client_) { 909 if (client_) {
901 AddRef(); // Balanced in InstallUIProceed() and InstallUIAbort(). 910 AddRef(); // Balanced in InstallUIProceed() and InstallUIAbort().
902 client_->ConfirmReEnable(this, extension()); 911 client_->ConfirmReEnable(this, extension());
903 } 912 }
904 } 913 }
905 914
906 } // namespace extensions 915 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698