OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "native_client/src/trusted/plugin/json_manifest.h" | 9 #include "native_client/src/trusted/plugin/json_manifest.h" |
10 | 10 |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
245 if (!IsValidUrlSpec(property_value, property_name, parent_key, | 245 if (!IsValidUrlSpec(property_value, property_name, parent_key, |
246 &error_string) && | 246 &error_string) && |
247 !IsValidPnaclTranslateSpec(property_value, property_name, | 247 !IsValidPnaclTranslateSpec(property_value, property_name, |
248 parent_key, &error_string)) { | 248 parent_key, &error_string)) { |
249 error_info->SetReport(ERROR_MANIFEST_SCHEMA_VALIDATE, | 249 error_info->SetReport(ERROR_MANIFEST_SCHEMA_VALIDATE, |
250 nacl::string("manifiest: ") + error_string); | 250 nacl::string("manifiest: ") + error_string); |
251 return false; | 251 return false; |
252 } | 252 } |
253 } | 253 } |
254 | 254 |
255 // TODO(elijahtaylor) add ISA resolver here if we expand ISAs to include | 255 if (!sandbox_isa.empty()) { |
Mark Seaborn
2013/04/18 01:17:46
Why not remove this whole block?
AFAICS, this blo
halyavin
2013/04/18 07:33:27
Once we remove the whole block, absence of URL wil
| |
256 // micro-architectures that can resolve to multiple valid sandboxes. | 256 // TODO(elijahtaylor) add ISA resolver here if we expand ISAs to include |
257 bool has_isa = dictionary.isMember(sandbox_isa); | 257 // micro-architectures that can resolve to multiple valid sandboxes. |
258 bool has_portable = dictionary.isMember(kPortableKey); | 258 bool has_isa = dictionary.isMember(sandbox_isa); |
259 bool has_portable = dictionary.isMember(kPortableKey); | |
259 | 260 |
260 if (!has_isa && !has_portable) { | 261 if (!has_isa && !has_portable) { |
261 error_info->SetReport( | 262 error_info->SetReport( |
262 ERROR_MANIFEST_PROGRAM_MISSING_ARCH, | 263 ERROR_MANIFEST_PROGRAM_MISSING_ARCH, |
263 nacl::string("manifest: no version of ") + parent_key + | 264 nacl::string("manifest: no version of ") + parent_key + |
264 " given for current arch and no portable version found."); | 265 " given for current arch and no portable version found."); |
265 return false; | 266 return false; |
267 } | |
266 } | 268 } |
267 | 269 |
268 return true; | 270 return true; |
269 } | 271 } |
270 | 272 |
271 void GrabUrlAndPnaclOptions(const Json::Value& url_spec, | 273 void GrabUrlAndPnaclOptions(const Json::Value& url_spec, |
272 nacl::string* url, | 274 nacl::string* url, |
273 PnaclOptions* pnacl_options) { | 275 PnaclOptions* pnacl_options) { |
274 *url = url_spec[kUrlKey].asString(); | 276 *url = url_spec[kUrlKey].asString(); |
275 if (url_spec.isMember(kCacheIdentityKey)) { | 277 if (url_spec.isMember(kCacheIdentityKey)) { |
(...skipping 15 matching lines...) Expand all Loading... | |
291 bool GetURLFromISADictionary(const Json::Value& dictionary, | 293 bool GetURLFromISADictionary(const Json::Value& dictionary, |
292 const nacl::string& parent_key, | 294 const nacl::string& parent_key, |
293 const nacl::string& sandbox_isa, | 295 const nacl::string& sandbox_isa, |
294 bool prefer_portable, | 296 bool prefer_portable, |
295 nacl::string* url, | 297 nacl::string* url, |
296 PnaclOptions* pnacl_options, | 298 PnaclOptions* pnacl_options, |
297 ErrorInfo* error_info) { | 299 ErrorInfo* error_info) { |
298 if (url == NULL || pnacl_options == NULL || error_info == NULL) | 300 if (url == NULL || pnacl_options == NULL || error_info == NULL) |
299 return false; | 301 return false; |
300 | 302 |
301 if (!IsValidISADictionary(dictionary, parent_key, sandbox_isa, error_info)) | 303 if (!IsValidISADictionary(dictionary, parent_key, sandbox_isa, error_info)) { |
304 error_info->SetReport(ERROR_MANIFEST_RESOLVE_URL, | |
305 "architecture " + sandbox_isa + | |
306 " is not found for file " + parent_key); | |
302 return false; | 307 return false; |
308 } | |
303 | 309 |
304 *url = ""; | 310 *url = ""; |
305 | 311 |
306 // The call to IsValidISADictionary() above guarantees that either | 312 // The call to IsValidISADictionary() above guarantees that either |
307 // sandbox_isa or kPortableKey is present in the dictionary. | 313 // sandbox_isa or kPortableKey is present in the dictionary. |
308 bool has_portable = dictionary.isMember(kPortableKey); | 314 bool has_portable = dictionary.isMember(kPortableKey); |
309 bool has_isa = dictionary.isMember(sandbox_isa); | 315 bool has_isa = dictionary.isMember(sandbox_isa); |
310 nacl::string chosen_isa; | 316 nacl::string chosen_isa; |
311 if ((has_portable && prefer_portable) || !has_isa) { | 317 if ((has_portable && prefer_portable) || !has_isa) { |
312 chosen_isa = kPortableKey; | 318 chosen_isa = kPortableKey; |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
427 if (!files.isObject()) { | 433 if (!files.isObject()) { |
428 error_info->SetReport( | 434 error_info->SetReport( |
429 ERROR_MANIFEST_SCHEMA_VALIDATE, | 435 ERROR_MANIFEST_SCHEMA_VALIDATE, |
430 nacl::string("manifest: '") + kFilesKey + "' is not a dictionary."); | 436 nacl::string("manifest: '") + kFilesKey + "' is not a dictionary."); |
431 } | 437 } |
432 Json::Value::Members members = files.getMemberNames(); | 438 Json::Value::Members members = files.getMemberNames(); |
433 for (size_t i = 0; i < members.size(); ++i) { | 439 for (size_t i = 0; i < members.size(); ++i) { |
434 nacl::string file_name = members[i]; | 440 nacl::string file_name = members[i]; |
435 if (!IsValidISADictionary(files[file_name], | 441 if (!IsValidISADictionary(files[file_name], |
436 file_name, | 442 file_name, |
437 sandbox_isa_, | 443 nacl::string(), |
438 error_info)) { | 444 error_info)) { |
439 return false; | 445 return false; |
440 } | 446 } |
441 } | 447 } |
442 } | 448 } |
443 | 449 |
444 return true; | 450 return true; |
445 } | 451 } |
446 | 452 |
447 bool JsonManifest::ResolveURL(const nacl::string& relative_url, | 453 bool JsonManifest::ResolveURL(const nacl::string& relative_url, |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
546 error_info->SetReport( | 552 error_info->SetReport( |
547 ERROR_MANIFEST_RESOLVE_URL, | 553 ERROR_MANIFEST_RESOLVE_URL, |
548 nacl::string("ResolveKey: no such \"files\" entry: ") + key); | 554 nacl::string("ResolveKey: no such \"files\" entry: ") + key); |
549 return false; | 555 return false; |
550 } | 556 } |
551 return GetKeyUrl(files, rest, sandbox_isa_, this, prefer_portable_, | 557 return GetKeyUrl(files, rest, sandbox_isa_, this, prefer_portable_, |
552 full_url, pnacl_options, error_info); | 558 full_url, pnacl_options, error_info); |
553 } | 559 } |
554 | 560 |
555 } // namespace plugin | 561 } // namespace plugin |
OLD | NEW |