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 |