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