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 |