Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(420)

Side by Side Diff: ppapi/native_client/src/trusted/plugin/json_manifest.cc

Issue 16569002: Use HTTP response headers for PNaCl caching instead of bitcode hash. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use RunAndClear Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 23 matching lines...) Expand all
34 const char* const kX8632Key = "x86-32"; 34 const char* const kX8632Key = "x86-32";
35 const char* const kX8664Key = "x86-64"; 35 const char* const kX8664Key = "x86-64";
36 const char* const kArmKey = "arm"; 36 const char* const kArmKey = "arm";
37 const char* const kPortableKey = "portable"; 37 const char* const kPortableKey = "portable";
38 38
39 // Url Resolution keys 39 // Url Resolution keys
40 const char* const kPnaclTranslateKey = "pnacl-translate"; 40 const char* const kPnaclTranslateKey = "pnacl-translate";
41 const char* const kUrlKey = "url"; 41 const char* const kUrlKey = "url";
42 42
43 // Pnacl keys 43 // Pnacl keys
44 const char* const kCacheIdentityKey = "sha256";
45 const char* const kOptLevelKey = "-O"; 44 const char* const kOptLevelKey = "-O";
46 const char* const kPnaclExperimentalFlags = "experimental_flags"; 45 const char* const kPnaclExperimentalFlags = "experimental_flags";
47 46
48 // Sample NaCL manifest file: 47 // Sample NaCL manifest file:
49 // { 48 // {
50 // "program": { 49 // "program": {
51 // "x86-32": {"url": "myprogram_x86-32.nexe"}, 50 // "x86-32": {"url": "myprogram_x86-32.nexe"},
52 // "x86-64": {"url": "myprogram_x86-64.nexe"}, 51 // "x86-64": {"url": "myprogram_x86-64.nexe"},
53 // "arm": {"url": "myprogram_arm.nexe"} 52 // "arm": {"url": "myprogram_arm.nexe"}
54 // }, 53 // },
(...skipping 15 matching lines...) Expand all
70 // } 69 // }
71 // } 70 // }
72 // } 71 // }
73 72
74 // Sample PNaCl manifest file: 73 // Sample PNaCl manifest file:
75 // { 74 // {
76 // "program": { 75 // "program": {
77 // "portable": { 76 // "portable": {
78 // "pnacl-translate": { 77 // "pnacl-translate": {
79 // "url": "myprogram.pexe", 78 // "url": "myprogram.pexe",
80 // "sha256": "...",
81 // "-O": 0 79 // "-O": 0
82 // } 80 // }
83 // } 81 // }
84 // }, 82 // },
85 // "files": { 83 // "files": {
86 // "foo.txt": { 84 // "foo.txt": {
87 // "portable": {"url": "foo.txt"} 85 // "portable": {"url": "foo.txt"}
88 // }, 86 // },
89 // "bar.txt": { 87 // "bar.txt": {
90 // "portable": {"url": "bar.txt"} 88 // "portable": {"url": "bar.txt"}
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 const nacl::string& sandbox_isa, 160 const nacl::string& sandbox_isa,
163 nacl::string* error_string) { 161 nacl::string* error_string) {
164 static const char* kManifestUrlSpecRequired[] = { 162 static const char* kManifestUrlSpecRequired[] = {
165 kUrlKey 163 kUrlKey
166 }; 164 };
167 const char** urlSpecPlusOptional; 165 const char** urlSpecPlusOptional;
168 size_t urlSpecPlusOptionalLength; 166 size_t urlSpecPlusOptionalLength;
169 if (sandbox_isa == kPortableKey) { 167 if (sandbox_isa == kPortableKey) {
170 static const char* kPnaclUrlSpecPlusOptional[] = { 168 static const char* kPnaclUrlSpecPlusOptional[] = {
171 kUrlKey, 169 kUrlKey,
172 kCacheIdentityKey,
173 kOptLevelKey, 170 kOptLevelKey,
174 }; 171 };
175 urlSpecPlusOptional = kPnaclUrlSpecPlusOptional; 172 urlSpecPlusOptional = kPnaclUrlSpecPlusOptional;
176 urlSpecPlusOptionalLength = NACL_ARRAY_SIZE(kPnaclUrlSpecPlusOptional); 173 urlSpecPlusOptionalLength = NACL_ARRAY_SIZE(kPnaclUrlSpecPlusOptional);
177 } else { 174 } else {
178 urlSpecPlusOptional = kManifestUrlSpecRequired; 175 urlSpecPlusOptional = kManifestUrlSpecRequired;
179 urlSpecPlusOptionalLength = NACL_ARRAY_SIZE(kManifestUrlSpecRequired); 176 urlSpecPlusOptionalLength = NACL_ARRAY_SIZE(kManifestUrlSpecRequired);
180 } 177 }
181 if (!IsValidDictionary(url_spec, container_key, parent_key, 178 if (!IsValidDictionary(url_spec, container_key, parent_key,
182 urlSpecPlusOptional, 179 urlSpecPlusOptional,
(...skipping 16 matching lines...) Expand all
199 // Verify the correct types of the fields if they exist. 196 // Verify the correct types of the fields if they exist.
200 Json::Value url = url_spec[kUrlKey]; 197 Json::Value url = url_spec[kUrlKey];
201 if (!url.isString()) { 198 if (!url.isString()) {
202 nacl::stringstream error_stream; 199 nacl::stringstream error_stream;
203 error_stream << parent_key << " property '" << container_key << 200 error_stream << parent_key << " property '" << container_key <<
204 "' has non-string value '" << url.toStyledString() << 201 "' has non-string value '" << url.toStyledString() <<
205 "' for key '" << kUrlKey << "'."; 202 "' for key '" << kUrlKey << "'.";
206 *error_string = error_stream.str(); 203 *error_string = error_stream.str();
207 return false; 204 return false;
208 } 205 }
209 Json::Value cache_identity = url_spec[kCacheIdentityKey];
210 if (!cache_identity.empty() && !cache_identity.isString()) {
211 nacl::stringstream error_stream;
212 error_stream << parent_key << " property '" << container_key <<
213 "' has non-string value '" << cache_identity.toStyledString() <<
214 "' for key '" << kCacheIdentityKey << "'.";
215 *error_string = error_stream.str();
216 return false;
217 }
218 Json::Value opt_level = url_spec[kOptLevelKey]; 206 Json::Value opt_level = url_spec[kOptLevelKey];
219 if (!opt_level.empty() && !opt_level.isNumeric()) { 207 if (!opt_level.empty() && !opt_level.isNumeric()) {
220 nacl::stringstream error_stream; 208 nacl::stringstream error_stream;
221 error_stream << parent_key << " property '" << container_key << 209 error_stream << parent_key << " property '" << container_key <<
222 "' has non-numeric value '" << opt_level.toStyledString() << 210 "' has non-numeric value '" << opt_level.toStyledString() <<
223 "' for key '" << kOptLevelKey << "'."; 211 "' for key '" << kOptLevelKey << "'.";
224 *error_string = error_stream.str(); 212 *error_string = error_stream.str();
225 return false; 213 return false;
226 } 214 }
227 return true; 215 return true;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 } 356 }
369 } 357 }
370 358
371 return true; 359 return true;
372 } 360 }
373 361
374 void GrabUrlAndPnaclOptions(const Json::Value& url_spec, 362 void GrabUrlAndPnaclOptions(const Json::Value& url_spec,
375 nacl::string* url, 363 nacl::string* url,
376 PnaclOptions* pnacl_options) { 364 PnaclOptions* pnacl_options) {
377 *url = url_spec[kUrlKey].asString(); 365 *url = url_spec[kUrlKey].asString();
378 if (url_spec.isMember(kCacheIdentityKey)) {
379 pnacl_options->set_bitcode_hash(url_spec[kCacheIdentityKey].asString());
380 }
381 if (url_spec.isMember(kOptLevelKey)) { 366 if (url_spec.isMember(kOptLevelKey)) {
382 uint32_t opt_raw = url_spec[kOptLevelKey].asUInt(); 367 uint32_t opt_raw = url_spec[kOptLevelKey].asUInt();
383 // Clamp the opt value to fit into an int8_t. 368 // Clamp the opt value to fit into an int8_t.
384 if (opt_raw > 3) 369 if (opt_raw > 3)
385 opt_raw = 3; 370 opt_raw = 3;
386 pnacl_options->set_opt_level(static_cast<int8_t>(opt_raw)); 371 pnacl_options->set_opt_level(static_cast<int8_t>(opt_raw));
387 } 372 }
388 if (url_spec.isMember(kPnaclExperimentalFlags)) { 373 if (url_spec.isMember(kPnaclExperimentalFlags)) {
389 pnacl_options->set_experimental_flags( 374 pnacl_options->set_experimental_flags(
390 url_spec[kPnaclExperimentalFlags].asString()); 375 url_spec[kPnaclExperimentalFlags].asString());
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 error_info->SetReport( 650 error_info->SetReport(
666 ERROR_MANIFEST_RESOLVE_URL, 651 ERROR_MANIFEST_RESOLVE_URL,
667 nacl::string("ResolveKey: no such \"files\" entry: ") + key); 652 nacl::string("ResolveKey: no such \"files\" entry: ") + key);
668 return false; 653 return false;
669 } 654 }
670 return GetKeyUrl(files, rest, sandbox_isa_, this, full_url, pnacl_options, 655 return GetKeyUrl(files, rest, sandbox_isa_, this, full_url, pnacl_options,
671 error_info); 656 error_info);
672 } 657 }
673 658
674 } // namespace plugin 659 } // namespace plugin
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698