• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef WEBKIT_COMMON_APPCACHE_APPCACHE_INTERFACES_H_
6 #define WEBKIT_COMMON_APPCACHE_APPCACHE_INTERFACES_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/basictypes.h"
12 #include "base/files/file_path.h"
13 #include "base/time/time.h"
14 #include "url/gurl.h"
15 #include "webkit/common/webkit_storage_common_export.h"
16 
17 namespace net {
18 class URLRequest;
19 }
20 
21 namespace appcache {
22 
23 // Defines constants, types, and abstract classes used in the main
24 // process and in child processes.
25 
26 static const int kAppCacheNoHostId = 0;
27 static const int64 kAppCacheNoCacheId = 0;
28 static const int64 kAppCacheNoResponseId = 0;
29 static const int64 kAppCacheUnknownCacheId = -1;
30 
31 enum AppCacheStatus {
32   APPCACHE_STATUS_UNCACHED,
33   APPCACHE_STATUS_IDLE,
34   APPCACHE_STATUS_CHECKING,
35   APPCACHE_STATUS_DOWNLOADING,
36   APPCACHE_STATUS_UPDATE_READY,
37   APPCACHE_STATUS_OBSOLETE,
38   APPCACHE_STATUS_LAST = APPCACHE_STATUS_OBSOLETE
39 };
40 
41 enum AppCacheEventID {
42   APPCACHE_CHECKING_EVENT,
43   APPCACHE_ERROR_EVENT,
44   APPCACHE_NO_UPDATE_EVENT,
45   APPCACHE_DOWNLOADING_EVENT,
46   APPCACHE_PROGRESS_EVENT,
47   APPCACHE_UPDATE_READY_EVENT,
48   APPCACHE_CACHED_EVENT,
49   APPCACHE_OBSOLETE_EVENT,
50   APPCACHE_EVENT_ID_LAST = APPCACHE_OBSOLETE_EVENT
51 };
52 
53 // Temporarily renumber them in wierd way, to help remove LOG_TIP from WebKit
54 enum AppCacheLogLevel {
55   APPCACHE_LOG_DEBUG = 4,
56   APPCACHE_LOG_INFO = 1,
57   APPCACHE_LOG_WARNING = 2,
58   APPCACHE_LOG_ERROR = 3,
59 };
60 
61 enum AppCacheNamespaceType {
62   APPCACHE_FALLBACK_NAMESPACE,
63   APPCACHE_INTERCEPT_NAMESPACE,
64   APPCACHE_NETWORK_NAMESPACE
65 };
66 
67 enum AppCacheErrorReason {
68   APPCACHE_MANIFEST_ERROR,
69   APPCACHE_SIGNATURE_ERROR,
70   APPCACHE_RESOURCE_ERROR,
71   APPCACHE_CHANGED_ERROR,
72   APPCACHE_ABORT_ERROR,
73   APPCACHE_QUOTA_ERROR,
74   APPCACHE_POLICY_ERROR,
75   APPCACHE_UNKNOWN_ERROR,
76   APPCACHE_ERROR_REASON_LAST = APPCACHE_UNKNOWN_ERROR
77 };
78 
79 struct WEBKIT_STORAGE_COMMON_EXPORT AppCacheInfo {
80   AppCacheInfo();
81   ~AppCacheInfo();
82 
83   GURL manifest_url;
84   base::Time creation_time;
85   base::Time last_update_time;
86   base::Time last_access_time;
87   int64 cache_id;
88   int64 group_id;
89   AppCacheStatus status;
90   int64 size;
91   bool is_complete;
92 };
93 
94 typedef std::vector<AppCacheInfo> AppCacheInfoVector;
95 
96 // Type to hold information about a single appcache resource.
97 struct WEBKIT_STORAGE_COMMON_EXPORT AppCacheResourceInfo {
98   AppCacheResourceInfo();
99   ~AppCacheResourceInfo();
100 
101   GURL url;
102   int64 size;
103   bool is_master;
104   bool is_manifest;
105   bool is_intercept;
106   bool is_fallback;
107   bool is_foreign;
108   bool is_explicit;
109   int64 response_id;
110 };
111 
112 struct WEBKIT_STORAGE_COMMON_EXPORT AppCacheErrorDetails {
113   AppCacheErrorDetails();
114   AppCacheErrorDetails(std::string message,
115                AppCacheErrorReason reason,
116                GURL url,
117                int status,
118                bool is_cross_origin);
119   ~AppCacheErrorDetails();
120 
121   std::string message;
122   AppCacheErrorReason reason;
123   GURL url;
124   int status;
125   bool is_cross_origin;
126 };
127 
128 typedef std::vector<AppCacheResourceInfo> AppCacheResourceInfoVector;
129 
130 struct WEBKIT_STORAGE_COMMON_EXPORT Namespace {
131   Namespace();  // Type is set to APPCACHE_FALLBACK_NAMESPACE by default.
132   Namespace(AppCacheNamespaceType type, const GURL& url, const GURL& target,
133             bool is_pattern);
134   Namespace(AppCacheNamespaceType type, const GURL& url, const GURL& target,
135             bool is_pattern, bool is_executable);
136   ~Namespace();
137 
138   bool IsMatch(const GURL& url) const;
139 
140   AppCacheNamespaceType type;
141   GURL namespace_url;
142   GURL target_url;
143   bool is_pattern;
144   bool is_executable;
145 };
146 
147 typedef std::vector<Namespace> NamespaceVector;
148 
149 // Interface used by backend (browser-process) to talk to frontend (renderer).
150 class WEBKIT_STORAGE_COMMON_EXPORT AppCacheFrontend {
151  public:
152   virtual void OnCacheSelected(
153       int host_id, const appcache::AppCacheInfo& info) = 0;
154   virtual void OnStatusChanged(const std::vector<int>& host_ids,
155                                AppCacheStatus status) = 0;
156   virtual void OnEventRaised(const std::vector<int>& host_ids,
157                              AppCacheEventID event_id) = 0;
158   virtual void OnProgressEventRaised(const std::vector<int>& host_ids,
159                                      const GURL& url,
160                                      int num_total, int num_complete) = 0;
161   virtual void OnErrorEventRaised(
162       const std::vector<int>& host_ids,
163       const appcache::AppCacheErrorDetails& details) = 0;
164   virtual void OnContentBlocked(int host_id,
165                                 const GURL& manifest_url) = 0;
166   virtual void OnLogMessage(int host_id, AppCacheLogLevel log_level,
167                             const std::string& message) = 0;
~AppCacheFrontend()168   virtual ~AppCacheFrontend() {}
169 };
170 
171 // Interface used by frontend (renderer) to talk to backend (browser-process).
172 class WEBKIT_STORAGE_COMMON_EXPORT AppCacheBackend {
173  public:
174   virtual void RegisterHost(int host_id) = 0;
175   virtual void UnregisterHost(int host_id) = 0;
176   virtual void SetSpawningHostId(int host_id, int spawning_host_id) = 0;
177   virtual void SelectCache(int host_id,
178                            const GURL& document_url,
179                            const int64 cache_document_was_loaded_from,
180                            const GURL& manifest_url) = 0;
181   virtual void SelectCacheForWorker(
182                            int host_id,
183                            int parent_process_id,
184                            int parent_host_id) = 0;
185   virtual void SelectCacheForSharedWorker(
186                            int host_id,
187                            int64 appcache_id) = 0;
188   virtual void MarkAsForeignEntry(int host_id, const GURL& document_url,
189                                   int64 cache_document_was_loaded_from) = 0;
190   virtual AppCacheStatus GetStatus(int host_id) = 0;
191   virtual bool StartUpdate(int host_id) = 0;
192   virtual bool SwapCache(int host_id) = 0;
193   virtual void GetResourceList(
194       int host_id, std::vector<AppCacheResourceInfo>* resource_infos) = 0;
195 
196  protected:
~AppCacheBackend()197   virtual ~AppCacheBackend() {}
198 };
199 
200 // Useful string constants.
201 // Note: These are also defined elsewhere in the chrome code base in
202 // url_contants.h .cc, however the appcache library doesn't not have
203 // any dependencies on the chrome library, so we can't use them in here.
204 WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpScheme[];
205 WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpsScheme[];
206 WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpGETMethod[];
207 WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpHEADMethod[];
208 
209 // CommandLine flag to turn this experimental feature on.
210 WEBKIT_STORAGE_COMMON_EXPORT extern const char kEnableExecutableHandlers[];
211 
212 WEBKIT_STORAGE_COMMON_EXPORT bool IsSchemeSupported(const GURL& url);
213 WEBKIT_STORAGE_COMMON_EXPORT bool IsMethodSupported(const std::string& method);
214 WEBKIT_STORAGE_COMMON_EXPORT bool IsSchemeAndMethodSupported(
215     const net::URLRequest* request);
216 
217 WEBKIT_STORAGE_COMMON_EXPORT extern const base::FilePath::CharType
218     kAppCacheDatabaseName[];
219 
220 }  // namespace
221 
222 #endif  // WEBKIT_COMMON_APPCACHE_APPCACHE_INTERFACES_H_
223