OLD | NEW |
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 "extensions/browser/content_verifier.h" | 5 #include "extensions/browser/content_verifier.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) { | 122 if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) { |
123 content::BrowserThread::PostTask( | 123 content::BrowserThread::PostTask( |
124 content::BrowserThread::UI, | 124 content::BrowserThread::UI, |
125 FROM_HERE, | 125 FROM_HERE, |
126 base::Bind(&ContentVerifier::VerifyFailed, this, extension_id, reason)); | 126 base::Bind(&ContentVerifier::VerifyFailed, this, extension_id, reason)); |
127 return; | 127 return; |
128 } | 128 } |
129 if (shutdown_) | 129 if (shutdown_) |
130 return; | 130 return; |
131 | 131 |
132 VLOG(1) << "VerifyFailed " << extension_id << " reason:" << reason; | 132 LOG(WARNING) << "VerifyFailed " << extension_id << " reason:" << reason; |
133 | 133 |
134 ExtensionRegistry* registry = ExtensionRegistry::Get(context_); | 134 ExtensionRegistry* registry = ExtensionRegistry::Get(context_); |
135 const Extension* extension = | 135 const Extension* extension = |
136 registry->GetExtensionById(extension_id, ExtensionRegistry::EVERYTHING); | 136 registry->GetExtensionById(extension_id, ExtensionRegistry::EVERYTHING); |
137 | 137 |
138 if (!extension) | 138 if (!extension) |
139 return; | 139 return; |
140 | 140 |
141 if (reason == ContentVerifyJob::MISSING_ALL_HASHES) { | 141 if (reason == ContentVerifyJob::MISSING_ALL_HASHES) { |
142 // If we failed because there were no hashes yet for this extension, just | 142 // If we failed because there were no hashes yet for this extension, just |
143 // request some. | 143 // request some. |
144 fetcher_->DoFetch(extension, true /* force */); | 144 fetcher_->DoFetch(extension, true /* force */); |
145 } else { | 145 } else { |
146 delegate_->VerifyFailed(extension_id, reason); | 146 delegate_->VerifyFailed(extension_id, reason); |
147 } | 147 } |
148 } | 148 } |
149 | 149 |
150 void ContentVerifier::OnExtensionLoaded( | 150 void ContentVerifier::OnExtensionLoaded( |
151 content::BrowserContext* browser_context, | 151 content::BrowserContext* browser_context, |
152 const Extension* extension) { | 152 const Extension* extension) { |
153 if (shutdown_) | 153 if (shutdown_) |
154 return; | 154 return; |
155 | 155 |
| 156 LOG(WARNING) << "ContentVerifier::OnExtensionLoaded " << extension->id(); |
| 157 |
156 ContentVerifierDelegate::Mode mode = delegate_->ShouldBeVerified(*extension); | 158 ContentVerifierDelegate::Mode mode = delegate_->ShouldBeVerified(*extension); |
157 if (mode != ContentVerifierDelegate::NONE) { | 159 if (mode != ContentVerifierDelegate::NONE) { |
158 // The browser image paths from the extension may not be relative (eg | 160 // The browser image paths from the extension may not be relative (eg |
159 // they might have leading '/' or './'), so we strip those to make | 161 // they might have leading '/' or './'), so we strip those to make |
160 // comparing to actual relative paths work later on. | 162 // comparing to actual relative paths work later on. |
161 std::set<base::FilePath> original_image_paths = | 163 std::set<base::FilePath> original_image_paths = |
162 delegate_->GetBrowserImagePaths(extension); | 164 delegate_->GetBrowserImagePaths(extension); |
163 | 165 |
164 std::unique_ptr<std::set<base::FilePath>> image_paths( | 166 std::unique_ptr<std::set<base::FilePath>> image_paths( |
165 new std::set<base::FilePath>); | 167 new std::set<base::FilePath>); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 const std::string& extension_id, | 208 const std::string& extension_id, |
207 bool success, | 209 bool success, |
208 bool was_force_check, | 210 bool was_force_check, |
209 const std::set<base::FilePath>& hash_mismatch_paths) { | 211 const std::set<base::FilePath>& hash_mismatch_paths) { |
210 if (g_test_observer) | 212 if (g_test_observer) |
211 g_test_observer->OnFetchComplete(extension_id, success); | 213 g_test_observer->OnFetchComplete(extension_id, success); |
212 | 214 |
213 if (shutdown_) | 215 if (shutdown_) |
214 return; | 216 return; |
215 | 217 |
216 VLOG(1) << "OnFetchComplete " << extension_id << " success:" << success; | 218 LOG(WARNING) << "OnFetchComplete " << extension_id << " success:" << success; |
217 | 219 |
218 ExtensionRegistry* registry = ExtensionRegistry::Get(context_); | 220 ExtensionRegistry* registry = ExtensionRegistry::Get(context_); |
219 const Extension* extension = | 221 const Extension* extension = |
220 registry->GetExtensionById(extension_id, ExtensionRegistry::EVERYTHING); | 222 registry->GetExtensionById(extension_id, ExtensionRegistry::EVERYTHING); |
221 if (!delegate_ || !extension) | 223 if (!delegate_ || !extension) |
222 return; | 224 return; |
223 | 225 |
224 ContentVerifierDelegate::Mode mode = delegate_->ShouldBeVerified(*extension); | 226 ContentVerifierDelegate::Mode mode = delegate_->ShouldBeVerified(*extension); |
225 if (was_force_check && !success && | 227 if (was_force_check && !success && |
226 mode == ContentVerifierDelegate::ENFORCE_STRICT) { | 228 mode == ContentVerifierDelegate::ENFORCE_STRICT) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 if (!all_locales) { | 274 if (!all_locales) { |
273 // TODO(asargent) - see if we can cache this list longer to avoid | 275 // TODO(asargent) - see if we can cache this list longer to avoid |
274 // having to fetch it more than once for a given run of the | 276 // having to fetch it more than once for a given run of the |
275 // browser. Maybe it can never change at runtime? (Or if it can, maybe | 277 // browser. Maybe it can never change at runtime? (Or if it can, maybe |
276 // there is an event we can listen for to know to drop our cache). | 278 // there is an event we can listen for to know to drop our cache). |
277 all_locales.reset(new std::set<std::string>); | 279 all_locales.reset(new std::set<std::string>); |
278 extension_l10n_util::GetAllLocales(all_locales.get()); | 280 extension_l10n_util::GetAllLocales(all_locales.get()); |
279 } | 281 } |
280 | 282 |
281 // Since message catalogs get transcoded during installation, we want | 283 // Since message catalogs get transcoded during installation, we want |
282 // to skip those paths. | 284 // to skip those paths. See if this path looks like |
| 285 // _locales/<some locale>/messages.json - if so then skip it. |
283 if (full_path.DirName().DirName() == locales_dir && | 286 if (full_path.DirName().DirName() == locales_dir && |
284 !extension_l10n_util::ShouldSkipValidation( | 287 base::ContainsKey(*all_locales, |
285 locales_dir, full_path.DirName(), *all_locales)) | 288 full_path.DirName().BaseName().MaybeAsASCII()) && |
| 289 full_path == full_path.DirName().Append(kMessagesFilename)) |
286 continue; | 290 continue; |
287 } | 291 } |
288 return true; | 292 return true; |
289 } | 293 } |
290 return false; | 294 return false; |
291 } | 295 } |
292 | 296 |
293 } // namespace extensions | 297 } // namespace extensions |
OLD | NEW |