OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "webkit/common/appcache/appcache_interfaces.h" | |
6 | |
7 #include <set> | |
8 | |
9 #include "base/strings/string_util.h" | |
10 #include "net/url_request/url_request.h" | |
11 #include "url/gurl.h" | |
12 | |
13 namespace appcache { | |
14 | |
15 const char kHttpScheme[] = "http"; | |
16 const char kHttpsScheme[] = "https"; | |
17 const char kDevToolsScheme[] = "chrome-devtools"; | |
18 const char kHttpGETMethod[] = "GET"; | |
19 const char kHttpHEADMethod[] = "HEAD"; | |
20 | |
21 const char kEnableExecutableHandlers[] = "enable-appcache-executable-handlers"; | |
22 | |
23 const base::FilePath::CharType kAppCacheDatabaseName[] = | |
24 FILE_PATH_LITERAL("Index"); | |
25 | |
26 AppCacheInfo::AppCacheInfo() | |
27 : cache_id(kAppCacheNoCacheId), | |
28 group_id(0), | |
29 status(APPCACHE_STATUS_UNCACHED), | |
30 size(0), | |
31 is_complete(false) { | |
32 } | |
33 | |
34 AppCacheInfo::~AppCacheInfo() { | |
35 } | |
36 | |
37 AppCacheResourceInfo::AppCacheResourceInfo() | |
38 : url(), | |
39 size(0), | |
40 is_master(false), | |
41 is_manifest(false), | |
42 is_intercept(false), | |
43 is_fallback(false), | |
44 is_foreign(false), | |
45 is_explicit(false), | |
46 response_id(kAppCacheNoResponseId) { | |
47 } | |
48 | |
49 AppCacheResourceInfo::~AppCacheResourceInfo() { | |
50 } | |
51 | |
52 AppCacheErrorDetails::AppCacheErrorDetails() | |
53 : message(), | |
54 reason(APPCACHE_UNKNOWN_ERROR), | |
55 url(), | |
56 status(0), | |
57 is_cross_origin(false) {} | |
58 | |
59 AppCacheErrorDetails::AppCacheErrorDetails( | |
60 std::string in_message, | |
61 AppCacheErrorReason in_reason, | |
62 GURL in_url, | |
63 int in_status, | |
64 bool in_is_cross_origin) | |
65 : message(in_message), | |
66 reason(in_reason), | |
67 url(in_url), | |
68 status(in_status), | |
69 is_cross_origin(in_is_cross_origin) {} | |
70 | |
71 AppCacheErrorDetails::~AppCacheErrorDetails() {} | |
72 | |
73 Namespace::Namespace() | |
74 : type(APPCACHE_FALLBACK_NAMESPACE), | |
75 is_pattern(false), | |
76 is_executable(false) { | |
77 } | |
78 | |
79 Namespace::Namespace( | |
80 AppCacheNamespaceType type, const GURL& url, const GURL& target, | |
81 bool is_pattern) | |
82 : type(type), | |
83 namespace_url(url), | |
84 target_url(target), | |
85 is_pattern(is_pattern), | |
86 is_executable(false) { | |
87 } | |
88 | |
89 Namespace::Namespace( | |
90 AppCacheNamespaceType type, const GURL& url, const GURL& target, | |
91 bool is_pattern, bool is_executable) | |
92 : type(type), | |
93 namespace_url(url), | |
94 target_url(target), | |
95 is_pattern(is_pattern), | |
96 is_executable(is_executable) { | |
97 } | |
98 | |
99 Namespace::~Namespace() { | |
100 } | |
101 | |
102 bool Namespace::IsMatch(const GURL& url) const { | |
103 if (is_pattern) { | |
104 // We have to escape '?' characters since MatchPattern also treats those | |
105 // as wildcards which we don't want here, we only do '*'s. | |
106 std::string pattern = namespace_url.spec(); | |
107 if (namespace_url.has_query()) | |
108 ReplaceSubstringsAfterOffset(&pattern, 0, "?", "\\?"); | |
109 return MatchPattern(url.spec(), pattern); | |
110 } | |
111 return StartsWithASCII(url.spec(), namespace_url.spec(), true); | |
112 } | |
113 | |
114 bool IsSchemeSupported(const GURL& url) { | |
115 bool supported = url.SchemeIs(kHttpScheme) || url.SchemeIs(kHttpsScheme) || | |
116 url.SchemeIs(kDevToolsScheme); | |
117 | |
118 #ifndef NDEBUG | |
119 // TODO(michaeln): It would be really nice if this could optionally work for | |
120 // file and filesystem urls too to help web developers experiment and test | |
121 // their apps, perhaps enabled via a cmd line flag or some other developer | |
122 // tool setting. Unfortunately file scheme net::URLRequests don't produce the | |
123 // same signalling (200 response codes, headers) as http URLRequests, so this | |
124 // doesn't work just yet. | |
125 // supported |= url.SchemeIsFile(); | |
126 #endif | |
127 return supported; | |
128 } | |
129 | |
130 bool IsMethodSupported(const std::string& method) { | |
131 return (method == kHttpGETMethod) || (method == kHttpHEADMethod); | |
132 } | |
133 | |
134 bool IsSchemeAndMethodSupported(const net::URLRequest* request) { | |
135 return IsSchemeSupported(request->url()) && | |
136 IsMethodSupported(request->method()); | |
137 } | |
138 | |
139 } // namespace appcache | |
OLD | NEW |