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

Side by Side Diff: components/component_updater/default_component_installer.cc

Issue 2483513002: Revert of Makes the component installers return a Result instead of a bool. (Closed)
Patch Set: Created 4 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/component_updater/default_component_installer.h" 5 #include "components/component_updater/default_component_installer.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/files/file_enumerator.h" 11 #include "base/files/file_enumerator.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/files/file_util.h" 13 #include "base/files/file_util.h"
14 #include "base/location.h" 14 #include "base/location.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/single_thread_task_runner.h" 17 #include "base/single_thread_task_runner.h"
18 #include "base/threading/thread_task_runner_handle.h" 18 #include "base/threading/thread_task_runner_handle.h"
19 #include "base/values.h" 19 #include "base/values.h"
20 #include "base/version.h" 20 #include "base/version.h"
21 #include "components/component_updater/component_updater_paths.h" 21 #include "components/component_updater/component_updater_paths.h"
22 // TODO(ddorwin): Find a better place for ReadManifest. 22 // TODO(ddorwin): Find a better place for ReadManifest.
23 #include "components/component_updater/component_updater_service.h" 23 #include "components/component_updater/component_updater_service.h"
24 #include "components/update_client/component_unpacker.h" 24 #include "components/update_client/component_unpacker.h"
25 #include "components/update_client/update_client.h"
26 #include "components/update_client/update_client_errors.h"
27 #include "components/update_client/utils.h" 25 #include "components/update_client/utils.h"
28 26
27 using update_client::CrxComponent;
28
29 namespace component_updater { 29 namespace component_updater {
30 30
31 namespace { 31 namespace {
32 32
33 // Version "0" corresponds to no installed version. By the server's conventions, 33 // Version "0" corresponds to no installed version. By the server's conventions,
34 // we represent it as a dotted quad. 34 // we represent it as a dotted quad.
35 const char kNullVersion[] = "0.0.0.0"; 35 const char kNullVersion[] = "0.0.0.0";
36 36
37 using Result = update_client::CrxInstaller::Result;
38 using InstallError = update_client::InstallError;
39
40 } // namespace 37 } // namespace
41 38
42 ComponentInstallerTraits::~ComponentInstallerTraits() { 39 ComponentInstallerTraits::~ComponentInstallerTraits() {
43 } 40 }
44 41
45 DefaultComponentInstaller::DefaultComponentInstaller( 42 DefaultComponentInstaller::DefaultComponentInstaller(
46 std::unique_ptr<ComponentInstallerTraits> installer_traits) 43 std::unique_ptr<ComponentInstallerTraits> installer_traits)
47 : current_version_(kNullVersion), 44 : current_version_(kNullVersion),
48 main_task_runner_(base::ThreadTaskRunnerHandle::Get()) { 45 main_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
49 installer_traits_ = std::move(installer_traits); 46 installer_traits_ = std::move(installer_traits);
(...skipping 18 matching lines...) Expand all
68 base::Bind(&DefaultComponentInstaller::StartRegistration, 65 base::Bind(&DefaultComponentInstaller::StartRegistration,
69 this, cus), 66 this, cus),
70 base::Bind(&DefaultComponentInstaller::FinishRegistration, 67 base::Bind(&DefaultComponentInstaller::FinishRegistration,
71 this, cus, callback)); 68 this, cus, callback));
72 } 69 }
73 70
74 void DefaultComponentInstaller::OnUpdateError(int error) { 71 void DefaultComponentInstaller::OnUpdateError(int error) {
75 LOG(ERROR) << "Component update error: " << error; 72 LOG(ERROR) << "Component update error: " << error;
76 } 73 }
77 74
78 Result DefaultComponentInstaller::InstallHelper( 75 bool DefaultComponentInstaller::InstallHelper(
79 const base::DictionaryValue& manifest, 76 const base::DictionaryValue& manifest,
80 const base::FilePath& unpack_path, 77 const base::FilePath& unpack_path,
81 const base::FilePath& install_path) { 78 const base::FilePath& install_path) {
82 VLOG(1) << "InstallHelper: unpack_path=" << unpack_path.AsUTF8Unsafe() 79 VLOG(1) << "InstallHelper: unpack_path=" << unpack_path.AsUTF8Unsafe()
83 << " install_path=" << install_path.AsUTF8Unsafe(); 80 << " install_path=" << install_path.AsUTF8Unsafe();
84 81
85 if (!base::Move(unpack_path, install_path)) { 82 if (!base::Move(unpack_path, install_path)) {
86 PLOG(ERROR) << "Move failed."; 83 PLOG(ERROR) << "Move failed.";
87 return Result(InstallError::GENERIC_ERROR); 84 return false;
88 } 85 }
89 const auto result = 86 if (!installer_traits_->OnCustomInstall(manifest, install_path)) {
90 installer_traits_->OnCustomInstall(manifest, install_path);
91 if (result.error) {
92 PLOG(ERROR) << "CustomInstall failed."; 87 PLOG(ERROR) << "CustomInstall failed.";
93 return result; 88 return false;
94 } 89 }
95 if (!installer_traits_->VerifyInstallation(manifest, install_path)) { 90 if (!installer_traits_->VerifyInstallation(manifest, install_path)) {
96 PLOG(ERROR) << "VerifyInstallation failed."; 91 PLOG(ERROR) << "VerifyInstallation failed.";
97 return Result(InstallError::GENERIC_ERROR); 92 return false;
98 } 93 }
99 94
100 return Result(InstallError::NONE); 95 return true;
101 } 96 }
102 97
103 Result DefaultComponentInstaller::Install(const base::DictionaryValue& manifest, 98 bool DefaultComponentInstaller::Install(const base::DictionaryValue& manifest,
104 const base::FilePath& unpack_path) { 99 const base::FilePath& unpack_path) {
105 std::string manifest_version; 100 std::string manifest_version;
106 manifest.GetStringASCII("version", &manifest_version); 101 manifest.GetStringASCII("version", &manifest_version);
107 base::Version version(manifest_version); 102 base::Version version(manifest_version);
108 103
109 VLOG(1) << "Install: version=" << version.GetString() 104 VLOG(1) << "Install: version=" << version.GetString()
110 << " current version=" << current_version_.GetString(); 105 << " current version=" << current_version_.GetString();
111 106
112 if (!version.IsValid()) 107 if (!version.IsValid())
113 return Result(InstallError::GENERIC_ERROR); 108 return false;
114 if (current_version_.CompareTo(version) > 0) 109 if (current_version_.CompareTo(version) > 0)
115 return Result(InstallError::GENERIC_ERROR); 110 return false;
116 base::FilePath install_path; 111 base::FilePath install_path;
117 if (!PathService::Get(DIR_COMPONENT_USER, &install_path)) 112 if (!PathService::Get(DIR_COMPONENT_USER, &install_path))
118 return Result(InstallError::GENERIC_ERROR); 113 return false;
119 install_path = install_path.Append(installer_traits_->GetRelativeInstallDir()) 114 install_path = install_path.Append(installer_traits_->GetRelativeInstallDir())
120 .AppendASCII(version.GetString()); 115 .AppendASCII(version.GetString());
121 if (base::PathExists(install_path)) { 116 if (base::PathExists(install_path)) {
122 if (!base::DeleteFile(install_path, true)) 117 if (!base::DeleteFile(install_path, true))
123 return Result(InstallError::GENERIC_ERROR); 118 return false;
124 } 119 }
125 const auto result = InstallHelper(manifest, unpack_path, install_path); 120 if (!InstallHelper(manifest, unpack_path, install_path)) {
126 if (result.error) {
127 base::DeleteFile(install_path, true); 121 base::DeleteFile(install_path, true);
128 return result; 122 return false;
129 } 123 }
130 current_version_ = version; 124 current_version_ = version;
131 current_install_dir_ = install_path; 125 current_install_dir_ = install_path;
132 // TODO(ddorwin): Change parameter to std::unique_ptr<base::DictionaryValue> 126 // TODO(ddorwin): Change parameter to std::unique_ptr<base::DictionaryValue>
133 // so we can avoid this DeepCopy. 127 // so we can avoid this DeepCopy.
134 current_manifest_.reset(manifest.DeepCopy()); 128 current_manifest_.reset(manifest.DeepCopy());
135 std::unique_ptr<base::DictionaryValue> manifest_copy( 129 std::unique_ptr<base::DictionaryValue> manifest_copy(
136 current_manifest_->DeepCopy()); 130 current_manifest_->DeepCopy());
137 main_task_runner_->PostTask( 131 main_task_runner_->PostTask(
138 FROM_HERE, 132 FROM_HERE,
139 base::Bind(&DefaultComponentInstaller::ComponentReady, 133 base::Bind(&DefaultComponentInstaller::ComponentReady,
140 this, base::Passed(&manifest_copy))); 134 this, base::Passed(&manifest_copy)));
141 return result; 135 return true;
142 } 136 }
143 137
144 bool DefaultComponentInstaller::GetInstalledFile( 138 bool DefaultComponentInstaller::GetInstalledFile(
145 const std::string& file, 139 const std::string& file,
146 base::FilePath* installed_file) { 140 base::FilePath* installed_file) {
147 if (current_version_ == base::Version(kNullVersion)) 141 if (current_version_ == base::Version(kNullVersion))
148 return false; // No component has been installed yet. 142 return false; // No component has been installed yet.
149 *installed_file = current_install_dir_.AppendASCII(file); 143 *installed_file = current_install_dir_.AppendASCII(file);
150 return true; 144 return true;
151 } 145 }
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 DLOG(ERROR) << "Couldn't delete " << base_dir.value(); 318 DLOG(ERROR) << "Couldn't delete " << base_dir.value();
325 } 319 }
326 } 320 }
327 321
328 void DefaultComponentInstaller::FinishRegistration( 322 void DefaultComponentInstaller::FinishRegistration(
329 ComponentUpdateService* cus, 323 ComponentUpdateService* cus,
330 const base::Closure& callback) { 324 const base::Closure& callback) {
331 VLOG(1) << __func__ << " for " << installer_traits_->GetName(); 325 VLOG(1) << __func__ << " for " << installer_traits_->GetName();
332 DCHECK(thread_checker_.CalledOnValidThread()); 326 DCHECK(thread_checker_.CalledOnValidThread());
333 327
334 update_client::CrxComponent crx; 328 CrxComponent crx;
335 installer_traits_->GetHash(&crx.pk_hash); 329 installer_traits_->GetHash(&crx.pk_hash);
336 crx.installer = this; 330 crx.installer = this;
337 crx.version = current_version_; 331 crx.version = current_version_;
338 crx.fingerprint = current_fingerprint_; 332 crx.fingerprint = current_fingerprint_;
339 crx.name = installer_traits_->GetName(); 333 crx.name = installer_traits_->GetName();
340 crx.installer_attributes = installer_traits_->GetInstallerAttributes(); 334 crx.installer_attributes = installer_traits_->GetInstallerAttributes();
341 crx.requires_network_encryption = 335 crx.requires_network_encryption =
342 installer_traits_->RequiresNetworkEncryption(); 336 installer_traits_->RequiresNetworkEncryption();
343 crx.handled_mime_types = installer_traits_->GetMimeTypes(); 337 crx.handled_mime_types = installer_traits_->GetMimeTypes();
344 crx.supports_group_policy_enable_component_updates = 338 crx.supports_group_policy_enable_component_updates =
(...skipping 20 matching lines...) Expand all
365 359
366 void DefaultComponentInstaller::ComponentReady( 360 void DefaultComponentInstaller::ComponentReady(
367 std::unique_ptr<base::DictionaryValue> manifest) { 361 std::unique_ptr<base::DictionaryValue> manifest) {
368 VLOG(1) << "Component ready, version " << current_version_.GetString() 362 VLOG(1) << "Component ready, version " << current_version_.GetString()
369 << " in " << current_install_dir_.value(); 363 << " in " << current_install_dir_.value();
370 installer_traits_->ComponentReady(current_version_, current_install_dir_, 364 installer_traits_->ComponentReady(current_version_, current_install_dir_,
371 std::move(manifest)); 365 std::move(manifest));
372 } 366 }
373 367
374 } // namespace component_updater 368 } // namespace component_updater
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698