OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // This is a port of ManifestParser.cc from WebKit/WebCore/loader/appcache. | 5 // This is a port of ManifestParser.cc from WebKit/WebCore/loader/appcache. |
6 | 6 |
7 /* | 7 /* |
8 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 8 * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
9 * | 9 * |
10 * Redistribution and use in source and binary forms, with or without | 10 * Redistribution and use in source and binary forms, with or without |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 RETURN, | 68 RETURN, |
69 EXECUTE, | 69 EXECUTE, |
70 UNKNOWN_VERB, | 70 UNKNOWN_VERB, |
71 }; | 71 }; |
72 | 72 |
73 Manifest::Manifest() : online_whitelist_all(false) {} | 73 Manifest::Manifest() : online_whitelist_all(false) {} |
74 | 74 |
75 Manifest::~Manifest() {} | 75 Manifest::~Manifest() {} |
76 | 76 |
77 bool ParseManifest(const GURL& manifest_url, const char* data, int length, | 77 bool ParseManifest(const GURL& manifest_url, const char* data, int length, |
78 Manifest& manifest) { | 78 bool allow_intercepts, Manifest& manifest) { |
79 // This is an implementation of the parsing algorithm specified in | 79 // This is an implementation of the parsing algorithm specified in |
80 // the HTML5 offline web application docs: | 80 // the HTML5 offline web application docs: |
81 // http://www.w3.org/TR/html5/offline.html | 81 // http://www.w3.org/TR/html5/offline.html |
82 // Do not modify it without consulting those docs. | 82 // Do not modify it without consulting those docs. |
83 // Though you might be tempted to convert these wstrings to UTF-8 or | 83 // Though you might be tempted to convert these wstrings to UTF-8 or |
84 // base::string16, this implementation seems simpler given the constraints. | 84 // base::string16, this implementation seems simpler given the constraints. |
85 | 85 |
86 const wchar_t kSignature[] = L"CACHE MANIFEST"; | 86 const wchar_t kSignature[] = L"CACHE MANIFEST"; |
87 const size_t kSignatureLength = arraysize(kSignature) - 1; | 87 const size_t kSignatureLength = arraysize(kSignature) - 1; |
88 const wchar_t kChromiumSignature[] = L"CHROMIUM CACHE MANIFEST"; | 88 const wchar_t kChromiumSignature[] = L"CHROMIUM CACHE MANIFEST"; |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 // condition is enforced in AppCacheUpdateJob. | 211 // condition is enforced in AppCacheUpdateJob. |
212 | 212 |
213 if (mode == EXPLICIT) { | 213 if (mode == EXPLICIT) { |
214 manifest.explicit_urls.insert(url.spec()); | 214 manifest.explicit_urls.insert(url.spec()); |
215 } else { | 215 } else { |
216 bool is_pattern = HasPatternMatchingAnnotation(line_p, line_end); | 216 bool is_pattern = HasPatternMatchingAnnotation(line_p, line_end); |
217 manifest.online_whitelist_namespaces.push_back( | 217 manifest.online_whitelist_namespaces.push_back( |
218 Namespace(NETWORK_NAMESPACE, url, GURL(), is_pattern)); | 218 Namespace(NETWORK_NAMESPACE, url, GURL(), is_pattern)); |
219 } | 219 } |
220 } else if (mode == INTERCEPT) { | 220 } else if (mode == INTERCEPT) { |
| 221 if (!allow_intercepts) |
| 222 continue; |
| 223 |
221 // Lines of the form, | 224 // Lines of the form, |
222 // <urlnamespace> <intercept_type> <targeturl> | 225 // <urlnamespace> <intercept_type> <targeturl> |
223 const wchar_t* line_p = line.c_str(); | 226 const wchar_t* line_p = line.c_str(); |
224 const wchar_t* line_end = line_p + line.length(); | 227 const wchar_t* line_end = line_p + line.length(); |
225 | 228 |
226 // Look for first whitespace separating the url namespace from | 229 // Look for first whitespace separating the url namespace from |
227 // the intercept type. | 230 // the intercept type. |
228 while (line_p < line_end && *line_p != '\t' && *line_p != ' ') | 231 while (line_p < line_end && *line_p != '\t' && *line_p != ' ') |
229 ++line_p; | 232 ++line_p; |
230 | 233 |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 fallback_url, is_pattern)); | 366 fallback_url, is_pattern)); |
364 } else { | 367 } else { |
365 NOTREACHED(); | 368 NOTREACHED(); |
366 } | 369 } |
367 } | 370 } |
368 | 371 |
369 return true; | 372 return true; |
370 } | 373 } |
371 | 374 |
372 } // namespace appcache | 375 } // namespace appcache |
OLD | NEW |