| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/update_client/component.h" | 5 #include "components/update_client/component.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 using InstallOnBlockingTaskRunnerCompleteCallback = | 62 using InstallOnBlockingTaskRunnerCompleteCallback = |
| 63 base::Callback<void(int error_category, int error_code, int extra_code1)>; | 63 base::Callback<void(int error_category, int error_code, int extra_code1)>; |
| 64 | 64 |
| 65 CrxInstaller::Result DoInstallOnBlockingTaskRunner( | 65 CrxInstaller::Result DoInstallOnBlockingTaskRunner( |
| 66 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 66 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 67 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, | 67 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, |
| 68 const base::FilePath& unpack_path, | 68 const base::FilePath& unpack_path, |
| 69 const std::string& fingerprint, | 69 const std::string& fingerprint, |
| 70 const scoped_refptr<CrxInstaller>& installer, | 70 const scoped_refptr<CrxInstaller>& installer, |
| 71 InstallOnBlockingTaskRunnerCompleteCallback callback) { | 71 InstallOnBlockingTaskRunnerCompleteCallback callback) { |
| 72 DCHECK(blocking_task_runner->RunsTasksOnCurrentThread()); | 72 DCHECK(blocking_task_runner->RunsTasksInCurrentSequence()); |
| 73 | 73 |
| 74 if (static_cast<int>(fingerprint.size()) != | 74 if (static_cast<int>(fingerprint.size()) != |
| 75 base::WriteFile( | 75 base::WriteFile( |
| 76 unpack_path.Append(FILE_PATH_LITERAL("manifest.fingerprint")), | 76 unpack_path.Append(FILE_PATH_LITERAL("manifest.fingerprint")), |
| 77 fingerprint.c_str(), base::checked_cast<int>(fingerprint.size()))) { | 77 fingerprint.c_str(), base::checked_cast<int>(fingerprint.size()))) { |
| 78 return CrxInstaller::Result(InstallError::FINGERPRINT_WRITE_FAILED); | 78 return CrxInstaller::Result(InstallError::FINGERPRINT_WRITE_FAILED); |
| 79 } | 79 } |
| 80 | 80 |
| 81 std::unique_ptr<base::DictionaryValue> manifest = ReadManifest(unpack_path); | 81 std::unique_ptr<base::DictionaryValue> manifest = ReadManifest(unpack_path); |
| 82 if (!manifest) | 82 if (!manifest) |
| 83 return CrxInstaller::Result(InstallError::BAD_MANIFEST); | 83 return CrxInstaller::Result(InstallError::BAD_MANIFEST); |
| 84 | 84 |
| 85 return installer->Install(*manifest, unpack_path); | 85 return installer->Install(*manifest, unpack_path); |
| 86 } | 86 } |
| 87 | 87 |
| 88 void InstallOnBlockingTaskRunner( | 88 void InstallOnBlockingTaskRunner( |
| 89 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 89 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 90 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, | 90 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, |
| 91 const base::FilePath& unpack_path, | 91 const base::FilePath& unpack_path, |
| 92 const std::string& fingerprint, | 92 const std::string& fingerprint, |
| 93 const scoped_refptr<CrxInstaller>& installer, | 93 const scoped_refptr<CrxInstaller>& installer, |
| 94 InstallOnBlockingTaskRunnerCompleteCallback callback) { | 94 InstallOnBlockingTaskRunnerCompleteCallback callback) { |
| 95 DCHECK(blocking_task_runner->RunsTasksOnCurrentThread()); | 95 DCHECK(blocking_task_runner->RunsTasksInCurrentSequence()); |
| 96 | 96 |
| 97 const auto result = DoInstallOnBlockingTaskRunner( | 97 const auto result = DoInstallOnBlockingTaskRunner( |
| 98 main_task_runner, blocking_task_runner, unpack_path, fingerprint, | 98 main_task_runner, blocking_task_runner, unpack_path, fingerprint, |
| 99 installer, callback); | 99 installer, callback); |
| 100 | 100 |
| 101 const ErrorCategory error_category = | 101 const ErrorCategory error_category = |
| 102 result.error ? ErrorCategory::kInstallError : ErrorCategory::kErrorNone; | 102 result.error ? ErrorCategory::kInstallError : ErrorCategory::kErrorNone; |
| 103 main_task_runner->PostTask( | 103 main_task_runner->PostTask( |
| 104 FROM_HERE, | 104 FROM_HERE, |
| 105 base::Bind(callback, static_cast<int>(error_category), | 105 base::Bind(callback, static_cast<int>(error_category), |
| 106 static_cast<int>(result.error), result.extended_error)); | 106 static_cast<int>(result.error), result.extended_error)); |
| 107 } | 107 } |
| 108 | 108 |
| 109 void UnpackCompleteOnBlockingTaskRunner( | 109 void UnpackCompleteOnBlockingTaskRunner( |
| 110 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 110 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 111 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, | 111 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, |
| 112 const base::FilePath& crx_path, | 112 const base::FilePath& crx_path, |
| 113 const std::string& fingerprint, | 113 const std::string& fingerprint, |
| 114 const scoped_refptr<CrxInstaller>& installer, | 114 const scoped_refptr<CrxInstaller>& installer, |
| 115 InstallOnBlockingTaskRunnerCompleteCallback callback, | 115 InstallOnBlockingTaskRunnerCompleteCallback callback, |
| 116 const ComponentUnpacker::Result& result) { | 116 const ComponentUnpacker::Result& result) { |
| 117 DCHECK(blocking_task_runner->RunsTasksOnCurrentThread()); | 117 DCHECK(blocking_task_runner->RunsTasksInCurrentSequence()); |
| 118 | 118 |
| 119 update_client::DeleteFileAndEmptyParentDirectory(crx_path); | 119 update_client::DeleteFileAndEmptyParentDirectory(crx_path); |
| 120 | 120 |
| 121 if (result.error != UnpackerError::kNone) { | 121 if (result.error != UnpackerError::kNone) { |
| 122 main_task_runner->PostTask( | 122 main_task_runner->PostTask( |
| 123 FROM_HERE, | 123 FROM_HERE, |
| 124 base::Bind(callback, static_cast<int>(ErrorCategory::kUnpackError), | 124 base::Bind(callback, static_cast<int>(ErrorCategory::kUnpackError), |
| 125 static_cast<int>(result.error), result.extended_error)); | 125 static_cast<int>(result.error), result.extended_error)); |
| 126 return; | 126 return; |
| 127 } | 127 } |
| 128 | 128 |
| 129 blocking_task_runner->PostTask( | 129 blocking_task_runner->PostTask( |
| 130 FROM_HERE, base::Bind(&InstallOnBlockingTaskRunner, main_task_runner, | 130 FROM_HERE, base::Bind(&InstallOnBlockingTaskRunner, main_task_runner, |
| 131 blocking_task_runner, result.unpack_path, | 131 blocking_task_runner, result.unpack_path, |
| 132 fingerprint, installer, callback)); | 132 fingerprint, installer, callback)); |
| 133 } | 133 } |
| 134 | 134 |
| 135 void StartInstallOnBlockingTaskRunner( | 135 void StartInstallOnBlockingTaskRunner( |
| 136 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 136 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 137 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, | 137 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, |
| 138 const std::vector<uint8_t>& pk_hash, | 138 const std::vector<uint8_t>& pk_hash, |
| 139 const base::FilePath& crx_path, | 139 const base::FilePath& crx_path, |
| 140 const std::string& fingerprint, | 140 const std::string& fingerprint, |
| 141 const scoped_refptr<CrxInstaller>& installer, | 141 const scoped_refptr<CrxInstaller>& installer, |
| 142 const scoped_refptr<OutOfProcessPatcher>& oop_patcher, | 142 const scoped_refptr<OutOfProcessPatcher>& oop_patcher, |
| 143 InstallOnBlockingTaskRunnerCompleteCallback callback) { | 143 InstallOnBlockingTaskRunnerCompleteCallback callback) { |
| 144 DCHECK(blocking_task_runner->RunsTasksOnCurrentThread()); | 144 DCHECK(blocking_task_runner->RunsTasksInCurrentSequence()); |
| 145 | 145 |
| 146 auto unpacker = base::MakeShared<ComponentUnpacker>( | 146 auto unpacker = base::MakeShared<ComponentUnpacker>( |
| 147 pk_hash, crx_path, installer, oop_patcher, blocking_task_runner); | 147 pk_hash, crx_path, installer, oop_patcher, blocking_task_runner); |
| 148 | 148 |
| 149 unpacker->Unpack(base::Bind(&UnpackCompleteOnBlockingTaskRunner, | 149 unpacker->Unpack(base::Bind(&UnpackCompleteOnBlockingTaskRunner, |
| 150 main_task_runner, blocking_task_runner, crx_path, | 150 main_task_runner, blocking_task_runner, crx_path, |
| 151 fingerprint, installer, callback)); | 151 fingerprint, installer, callback)); |
| 152 } | 152 } |
| 153 | 153 |
| 154 } // namespace | 154 } // namespace |
| (...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 693 Component::StateUninstalled::~StateUninstalled() { | 693 Component::StateUninstalled::~StateUninstalled() { |
| 694 DCHECK(thread_checker_.CalledOnValidThread()); | 694 DCHECK(thread_checker_.CalledOnValidThread()); |
| 695 } | 695 } |
| 696 | 696 |
| 697 void Component::StateUninstalled::DoHandle() { | 697 void Component::StateUninstalled::DoHandle() { |
| 698 DCHECK(thread_checker_.CalledOnValidThread()); | 698 DCHECK(thread_checker_.CalledOnValidThread()); |
| 699 TransitionState(nullptr); | 699 TransitionState(nullptr); |
| 700 } | 700 } |
| 701 | 701 |
| 702 } // namespace update_client | 702 } // namespace update_client |
| OLD | NEW |