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
17namespace net {
18class URLRequest;
19}
20
21namespace appcache {
22
23// Defines constants, types, and abstract classes used in the main
24// process and in child processes.
25
26static const int kNoHostId = 0;
27static const int64 kNoCacheId = 0;
28static const int64 kNoResponseId = 0;
29static const int64 kUnknownCacheId = -1;
30
31enum Status {
32  UNCACHED,
33  IDLE,
34  CHECKING,
35  DOWNLOADING,
36  UPDATE_READY,
37  OBSOLETE
38};
39
40enum EventID {
41  CHECKING_EVENT,
42  ERROR_EVENT,
43  NO_UPDATE_EVENT,
44  DOWNLOADING_EVENT,
45  PROGRESS_EVENT,
46  UPDATE_READY_EVENT,
47  CACHED_EVENT,
48  OBSOLETE_EVENT
49};
50
51// Temporarily renumber them in wierd way, to help remove LOG_TIP from WebKit
52enum LogLevel {
53  LOG_DEBUG = 4,
54  LOG_INFO = 1,
55  LOG_WARNING = 2,
56  LOG_ERROR = 3,
57};
58
59enum NamespaceType {
60  FALLBACK_NAMESPACE,
61  INTERCEPT_NAMESPACE,
62  NETWORK_NAMESPACE
63};
64
65struct WEBKIT_STORAGE_COMMON_EXPORT AppCacheInfo {
66  AppCacheInfo();
67  ~AppCacheInfo();
68
69  GURL manifest_url;
70  base::Time creation_time;
71  base::Time last_update_time;
72  base::Time last_access_time;
73  int64 cache_id;
74  int64 group_id;
75  Status status;
76  int64 size;
77  bool is_complete;
78};
79
80typedef std::vector<AppCacheInfo> AppCacheInfoVector;
81
82// Type to hold information about a single appcache resource.
83struct WEBKIT_STORAGE_COMMON_EXPORT AppCacheResourceInfo {
84  AppCacheResourceInfo();
85  ~AppCacheResourceInfo();
86
87  GURL url;
88  int64 size;
89  bool is_master;
90  bool is_manifest;
91  bool is_intercept;
92  bool is_fallback;
93  bool is_foreign;
94  bool is_explicit;
95  int64 response_id;
96};
97
98typedef std::vector<AppCacheResourceInfo> AppCacheResourceInfoVector;
99
100struct WEBKIT_STORAGE_COMMON_EXPORT Namespace {
101  Namespace();  // Type is set to FALLBACK_NAMESPACE by default.
102  Namespace(NamespaceType type, const GURL& url, const GURL& target,
103            bool is_pattern);
104  Namespace(NamespaceType type, const GURL& url, const GURL& target,
105            bool is_pattern, bool is_executable);
106  ~Namespace();
107
108  bool IsMatch(const GURL& url) const;
109
110  NamespaceType type;
111  GURL namespace_url;
112  GURL target_url;
113  bool is_pattern;
114  bool is_executable;
115};
116
117typedef std::vector<Namespace> NamespaceVector;
118
119// Interface used by backend (browser-process) to talk to frontend (renderer).
120class WEBKIT_STORAGE_COMMON_EXPORT AppCacheFrontend {
121 public:
122  virtual void OnCacheSelected(
123      int host_id, const appcache::AppCacheInfo& info) = 0;
124  virtual void OnStatusChanged(const std::vector<int>& host_ids,
125                               Status status) = 0;
126  virtual void OnEventRaised(const std::vector<int>& host_ids,
127                             EventID event_id) = 0;
128  virtual void OnProgressEventRaised(const std::vector<int>& host_ids,
129                                     const GURL& url,
130                                     int num_total, int num_complete) = 0;
131  virtual void OnErrorEventRaised(const std::vector<int>& host_ids,
132                                  const std::string& message) = 0;
133  virtual void OnContentBlocked(int host_id,
134                                const GURL& manifest_url) = 0;
135  virtual void OnLogMessage(int host_id, LogLevel log_level,
136                            const std::string& message) = 0;
137  virtual ~AppCacheFrontend() {}
138};
139
140// Interface used by frontend (renderer) to talk to backend (browser-process).
141class WEBKIT_STORAGE_COMMON_EXPORT AppCacheBackend {
142 public:
143  virtual void RegisterHost(int host_id) = 0;
144  virtual void UnregisterHost(int host_id) = 0;
145  virtual void SetSpawningHostId(int host_id, int spawning_host_id) = 0;
146  virtual void SelectCache(int host_id,
147                           const GURL& document_url,
148                           const int64 cache_document_was_loaded_from,
149                           const GURL& manifest_url) = 0;
150  virtual void SelectCacheForWorker(
151                           int host_id,
152                           int parent_process_id,
153                           int parent_host_id) = 0;
154  virtual void SelectCacheForSharedWorker(
155                           int host_id,
156                           int64 appcache_id) = 0;
157  virtual void MarkAsForeignEntry(int host_id, const GURL& document_url,
158                                  int64 cache_document_was_loaded_from) = 0;
159  virtual Status GetStatus(int host_id) = 0;
160  virtual bool StartUpdate(int host_id) = 0;
161  virtual bool SwapCache(int host_id) = 0;
162  virtual void GetResourceList(
163      int host_id, std::vector<AppCacheResourceInfo>* resource_infos) = 0;
164
165 protected:
166  virtual ~AppCacheBackend() {}
167};
168
169// Useful string constants.
170// Note: These are also defined elsewhere in the chrome code base in
171// url_contants.h .cc, however the appcache library doesn't not have
172// any dependencies on the chrome library, so we can't use them in here.
173WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpScheme[];
174WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpsScheme[];
175WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpGETMethod[];
176WEBKIT_STORAGE_COMMON_EXPORT extern const char kHttpHEADMethod[];
177
178// CommandLine flag to turn this experimental feature on.
179WEBKIT_STORAGE_COMMON_EXPORT extern const char kEnableExecutableHandlers[];
180
181WEBKIT_STORAGE_COMMON_EXPORT void AddSupportedScheme(const char* scheme);
182
183WEBKIT_STORAGE_COMMON_EXPORT bool IsSchemeSupported(const GURL& url);
184WEBKIT_STORAGE_COMMON_EXPORT bool IsMethodSupported(const std::string& method);
185WEBKIT_STORAGE_COMMON_EXPORT bool IsSchemeAndMethodSupported(
186    const net::URLRequest* request);
187
188WEBKIT_STORAGE_COMMON_EXPORT extern const base::FilePath::CharType
189    kAppCacheDatabaseName[];
190
191}  // namespace
192
193#endif  // WEBKIT_COMMON_APPCACHE_APPCACHE_INTERFACES_H_
194