| Index: ppapi/native_client/src/trusted/plugin/pnacl_options.cc
|
| diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_options.cc b/ppapi/native_client/src/trusted/plugin/pnacl_options.cc
|
| index ad31e88cce18da5e95acdbd7da6fcd7c6a9cf23d..e1c6b4befd63b3fa5f72b74fbb59aead74916099 100644
|
| --- a/ppapi/native_client/src/trusted/plugin/pnacl_options.cc
|
| +++ b/ppapi/native_client/src/trusted/plugin/pnacl_options.cc
|
| @@ -9,6 +9,21 @@
|
|
|
| #include "native_client/src/include/nacl_string.h"
|
|
|
| +namespace {
|
| +
|
| +nacl::string ReplaceBadFSChars(nacl::string str,
|
| + const nacl::string& bad_chars,
|
| + const nacl::string& replacement) {
|
| + size_t replace_pos = str.find_first_of(bad_chars);
|
| + while (replace_pos != nacl::string::npos) {
|
| + str = str.replace(replace_pos, 1, replacement);
|
| + replace_pos = str.find_first_of(bad_chars);
|
| + }
|
| + return str;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| namespace plugin {
|
|
|
| // Default to -O0 for now.
|
| @@ -17,15 +32,24 @@ PnaclOptions::PnaclOptions() : translate_(false), opt_level_(0) { }
|
| PnaclOptions::~PnaclOptions() {
|
| }
|
|
|
| -nacl::string PnaclOptions::GetCacheKey() {
|
| +nacl::string PnaclOptions::GetCacheKey() const {
|
| // TODO(jvoung): We need to read the PNaCl translator's manifest
|
| // to grab the NaCl / PNaCl ABI version too.
|
| nacl::stringstream ss;
|
| // Cast opt_level_ as int so that it doesn't think it's a char.
|
| ss << "-O:" << static_cast<int>(opt_level_)
|
| << ";flags:" << experimental_flags_
|
| - << ";bitcode_hash:" << bitcode_hash_;
|
| - return ss.str();
|
| + << ";cache_validators:" << cache_validators_;
|
| + // HTML5 FileSystem-based cache does not allow some characters which
|
| + // may appear in URLs, ETags, or Last-Modified times. Once we move to
|
| + // our own cache-backend, it will be more tolerant of various cache
|
| + // key values.
|
| + // See: http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#naming-restrictions
|
| + nacl::string key = ss.str();
|
| + key = ReplaceBadFSChars(key, "/", "_FWDSLASH_");
|
| + key = ReplaceBadFSChars(key, "\\", "_BCKSLASH_");
|
| + key = ReplaceBadFSChars(key, "\0", "_NULL_");
|
| + return key;
|
| }
|
|
|
| void PnaclOptions::set_opt_level(int8_t l) {
|
| @@ -40,7 +64,7 @@ void PnaclOptions::set_opt_level(int8_t l) {
|
| opt_level_ = l;
|
| }
|
|
|
| -std::vector<char> PnaclOptions::GetOptCommandline() {
|
| +std::vector<char> PnaclOptions::GetOptCommandline() const {
|
| std::vector<char> result;
|
| std::vector<nacl::string> tokens;
|
|
|
|
|