| 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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 using InstallOnBlockingTaskRunnerCompleteCallback = | 63 using InstallOnBlockingTaskRunnerCompleteCallback = |
| 64 base::Callback<void(int error_category, int error_code, int extra_code1)>; | 64 base::Callback<void(int error_category, int error_code, int extra_code1)>; |
| 65 | 65 |
| 66 CrxInstaller::Result DoInstallOnBlockingTaskRunner( | 66 CrxInstaller::Result DoInstallOnBlockingTaskRunner( |
| 67 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 67 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 68 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, | 68 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, |
| 69 const base::FilePath& unpack_path, | 69 const base::FilePath& unpack_path, |
| 70 const std::string& fingerprint, | 70 const std::string& fingerprint, |
| 71 const scoped_refptr<CrxInstaller>& installer, | 71 const scoped_refptr<CrxInstaller>& installer, |
| 72 InstallOnBlockingTaskRunnerCompleteCallback callback) { | 72 InstallOnBlockingTaskRunnerCompleteCallback callback) { |
| 73 DCHECK(blocking_task_runner->RunsTasksOnCurrentThread()); | 73 DCHECK(blocking_task_runner->RunsTasksInCurrentSequence()); |
| 74 | 74 |
| 75 if (static_cast<int>(fingerprint.size()) != | 75 if (static_cast<int>(fingerprint.size()) != |
| 76 base::WriteFile( | 76 base::WriteFile( |
| 77 unpack_path.Append(FILE_PATH_LITERAL("manifest.fingerprint")), | 77 unpack_path.Append(FILE_PATH_LITERAL("manifest.fingerprint")), |
| 78 fingerprint.c_str(), base::checked_cast<int>(fingerprint.size()))) { | 78 fingerprint.c_str(), base::checked_cast<int>(fingerprint.size()))) { |
| 79 return CrxInstaller::Result(InstallError::FINGERPRINT_WRITE_FAILED); | 79 return CrxInstaller::Result(InstallError::FINGERPRINT_WRITE_FAILED); |
| 80 } | 80 } |
| 81 | 81 |
| 82 std::unique_ptr<base::DictionaryValue> manifest = ReadManifest(unpack_path); | 82 std::unique_ptr<base::DictionaryValue> manifest = ReadManifest(unpack_path); |
| 83 if (!manifest) | 83 if (!manifest) |
| 84 return CrxInstaller::Result(InstallError::BAD_MANIFEST); | 84 return CrxInstaller::Result(InstallError::BAD_MANIFEST); |
| 85 | 85 |
| 86 return installer->Install(std::move(manifest), unpack_path); | 86 return installer->Install(std::move(manifest), unpack_path); |
| 87 } | 87 } |
| 88 | 88 |
| 89 void InstallOnBlockingTaskRunner( | 89 void InstallOnBlockingTaskRunner( |
| 90 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 90 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 91 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, | 91 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, |
| 92 const base::FilePath& unpack_path, | 92 const base::FilePath& unpack_path, |
| 93 const std::string& fingerprint, | 93 const std::string& fingerprint, |
| 94 const scoped_refptr<CrxInstaller>& installer, | 94 const scoped_refptr<CrxInstaller>& installer, |
| 95 InstallOnBlockingTaskRunnerCompleteCallback callback) { | 95 InstallOnBlockingTaskRunnerCompleteCallback callback) { |
| 96 DCHECK(blocking_task_runner->RunsTasksOnCurrentThread()); | 96 DCHECK(blocking_task_runner->RunsTasksInCurrentSequence()); |
| 97 | 97 |
| 98 DCHECK(base::DirectoryExists(unpack_path)); | 98 DCHECK(base::DirectoryExists(unpack_path)); |
| 99 const auto result = DoInstallOnBlockingTaskRunner( | 99 const auto result = DoInstallOnBlockingTaskRunner( |
| 100 main_task_runner, blocking_task_runner, unpack_path, fingerprint, | 100 main_task_runner, blocking_task_runner, unpack_path, fingerprint, |
| 101 installer, callback); | 101 installer, callback); |
| 102 base::DeleteFile(unpack_path, true); | 102 base::DeleteFile(unpack_path, true); |
| 103 | 103 |
| 104 const ErrorCategory error_category = | 104 const ErrorCategory error_category = |
| 105 result.error ? ErrorCategory::kInstallError : ErrorCategory::kErrorNone; | 105 result.error ? ErrorCategory::kInstallError : ErrorCategory::kErrorNone; |
| 106 main_task_runner->PostTask( | 106 main_task_runner->PostTask( |
| 107 FROM_HERE, | 107 FROM_HERE, |
| 108 base::Bind(callback, static_cast<int>(error_category), | 108 base::Bind(callback, static_cast<int>(error_category), |
| 109 static_cast<int>(result.error), result.extended_error)); | 109 static_cast<int>(result.error), result.extended_error)); |
| 110 } | 110 } |
| 111 | 111 |
| 112 void UnpackCompleteOnBlockingTaskRunner( | 112 void UnpackCompleteOnBlockingTaskRunner( |
| 113 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 113 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 114 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, | 114 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, |
| 115 const base::FilePath& crx_path, | 115 const base::FilePath& crx_path, |
| 116 const std::string& fingerprint, | 116 const std::string& fingerprint, |
| 117 const scoped_refptr<CrxInstaller>& installer, | 117 const scoped_refptr<CrxInstaller>& installer, |
| 118 InstallOnBlockingTaskRunnerCompleteCallback callback, | 118 InstallOnBlockingTaskRunnerCompleteCallback callback, |
| 119 const ComponentUnpacker::Result& result) { | 119 const ComponentUnpacker::Result& result) { |
| 120 DCHECK(blocking_task_runner->RunsTasksOnCurrentThread()); | 120 DCHECK(blocking_task_runner->RunsTasksInCurrentSequence()); |
| 121 | 121 |
| 122 update_client::DeleteFileAndEmptyParentDirectory(crx_path); | 122 update_client::DeleteFileAndEmptyParentDirectory(crx_path); |
| 123 | 123 |
| 124 if (result.error != UnpackerError::kNone) { | 124 if (result.error != UnpackerError::kNone) { |
| 125 main_task_runner->PostTask( | 125 main_task_runner->PostTask( |
| 126 FROM_HERE, | 126 FROM_HERE, |
| 127 base::Bind(callback, static_cast<int>(ErrorCategory::kUnpackError), | 127 base::Bind(callback, static_cast<int>(ErrorCategory::kUnpackError), |
| 128 static_cast<int>(result.error), result.extended_error)); | 128 static_cast<int>(result.error), result.extended_error)); |
| 129 return; | 129 return; |
| 130 } | 130 } |
| 131 | 131 |
| 132 blocking_task_runner->PostTask( | 132 blocking_task_runner->PostTask( |
| 133 FROM_HERE, base::Bind(&InstallOnBlockingTaskRunner, main_task_runner, | 133 FROM_HERE, base::Bind(&InstallOnBlockingTaskRunner, main_task_runner, |
| 134 blocking_task_runner, result.unpack_path, | 134 blocking_task_runner, result.unpack_path, |
| 135 fingerprint, installer, callback)); | 135 fingerprint, installer, callback)); |
| 136 } | 136 } |
| 137 | 137 |
| 138 void StartInstallOnBlockingTaskRunner( | 138 void StartInstallOnBlockingTaskRunner( |
| 139 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 139 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 140 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, | 140 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, |
| 141 const std::vector<uint8_t>& pk_hash, | 141 const std::vector<uint8_t>& pk_hash, |
| 142 const base::FilePath& crx_path, | 142 const base::FilePath& crx_path, |
| 143 const std::string& fingerprint, | 143 const std::string& fingerprint, |
| 144 const scoped_refptr<CrxInstaller>& installer, | 144 const scoped_refptr<CrxInstaller>& installer, |
| 145 const scoped_refptr<OutOfProcessPatcher>& oop_patcher, | 145 const scoped_refptr<OutOfProcessPatcher>& oop_patcher, |
| 146 InstallOnBlockingTaskRunnerCompleteCallback callback) { | 146 InstallOnBlockingTaskRunnerCompleteCallback callback) { |
| 147 DCHECK(blocking_task_runner->RunsTasksOnCurrentThread()); | 147 DCHECK(blocking_task_runner->RunsTasksInCurrentSequence()); |
| 148 | 148 |
| 149 auto unpacker = base::MakeRefCounted<ComponentUnpacker>( | 149 auto unpacker = base::MakeRefCounted<ComponentUnpacker>( |
| 150 pk_hash, crx_path, installer, oop_patcher, blocking_task_runner); | 150 pk_hash, crx_path, installer, oop_patcher, blocking_task_runner); |
| 151 | 151 |
| 152 unpacker->Unpack(base::Bind(&UnpackCompleteOnBlockingTaskRunner, | 152 unpacker->Unpack(base::Bind(&UnpackCompleteOnBlockingTaskRunner, |
| 153 main_task_runner, blocking_task_runner, crx_path, | 153 main_task_runner, blocking_task_runner, crx_path, |
| 154 fingerprint, installer, callback)); | 154 fingerprint, installer, callback)); |
| 155 } | 155 } |
| 156 | 156 |
| 157 } // namespace | 157 } // namespace |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 759 case ComponentState::kUpdatingDiff: | 759 case ComponentState::kUpdatingDiff: |
| 760 TransitionState(base::MakeUnique<StateUpdated>(&component)); | 760 TransitionState(base::MakeUnique<StateUpdated>(&component)); |
| 761 return; | 761 return; |
| 762 default: | 762 default: |
| 763 break; | 763 break; |
| 764 } | 764 } |
| 765 NOTREACHED(); | 765 NOTREACHED(); |
| 766 } | 766 } |
| 767 | 767 |
| 768 } // namespace update_client | 768 } // namespace update_client |
| OLD | NEW |