Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(908)

Side by Side Diff: webkit/browser/appcache/appcache_url_request_job.h

Issue 344493002: Move all remaining appcache-related code to content namespace (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 #ifndef WEBKIT_BROWSER_APPCACHE_APPCACHE_URL_REQUEST_JOB_H_
6 #define WEBKIT_BROWSER_APPCACHE_APPCACHE_URL_REQUEST_JOB_H_
7
8 #include <string>
9
10 #include "base/memory/weak_ptr.h"
11 #include "net/http/http_byte_range.h"
12 #include "net/url_request/url_request_job.h"
13 #include "webkit/browser/appcache/appcache_entry.h"
14 #include "webkit/browser/appcache/appcache_executable_handler.h"
15 #include "webkit/browser/appcache/appcache_response.h"
16 #include "webkit/browser/appcache/appcache_storage.h"
17 #include "webkit/browser/webkit_storage_browser_export.h"
18
19 namespace content {
20 class AppCacheRequestHandlerTest;
21 class AppCacheURLRequestJobTest;
22 }
23
24 namespace net {
25 class GrowableIOBuffer;
26 };
27
28 namespace appcache {
29
30 class AppCacheHost;
31
32 // A net::URLRequestJob derivative that knows how to return a response stored
33 // in the appcache.
34 class WEBKIT_STORAGE_BROWSER_EXPORT AppCacheURLRequestJob
35 : public net::URLRequestJob,
36 public AppCacheStorage::Delegate {
37 public:
38 AppCacheURLRequestJob(net::URLRequest* request,
39 net::NetworkDelegate* network_delegate,
40 AppCacheStorage* storage,
41 AppCacheHost* host,
42 bool is_main_resource);
43
44 // Informs the job of what response it should deliver. Only one of these
45 // methods should be called, and only once per job. A job will sit idle and
46 // wait indefinitely until one of the deliver methods is called.
47 void DeliverAppCachedResponse(const GURL& manifest_url, int64 group_id,
48 int64 cache_id, const AppCacheEntry& entry,
49 bool is_fallback);
50 void DeliverNetworkResponse();
51 void DeliverErrorResponse();
52
53 bool is_waiting() const {
54 return delivery_type_ == AWAITING_DELIVERY_ORDERS;
55 }
56
57 bool is_delivering_appcache_response() const {
58 return delivery_type_ == APPCACHED_DELIVERY;
59 }
60
61 bool is_delivering_network_response() const {
62 return delivery_type_ == NETWORK_DELIVERY;
63 }
64
65 bool is_delivering_error_response() const {
66 return delivery_type_ == ERROR_DELIVERY;
67 }
68
69 // Accessors for the info about the appcached response, if any,
70 // that this job has been instructed to deliver. These are only
71 // valid to call if is_delivering_appcache_response.
72 const GURL& manifest_url() const { return manifest_url_; }
73 int64 group_id() const { return group_id_; }
74 int64 cache_id() const { return cache_id_; }
75 const AppCacheEntry& entry() const { return entry_; }
76
77 // net::URLRequestJob's Kill method is made public so the users of this
78 // class in the appcache namespace can call it.
79 virtual void Kill() OVERRIDE;
80
81 // Returns true if the job has been started by the net library.
82 bool has_been_started() const {
83 return has_been_started_;
84 }
85
86 // Returns true if the job has been killed.
87 bool has_been_killed() const {
88 return has_been_killed_;
89 }
90
91 // Returns true if the cache entry was not found in the disk cache.
92 bool cache_entry_not_found() const {
93 return cache_entry_not_found_;
94 }
95
96 protected:
97 virtual ~AppCacheURLRequestJob();
98
99 private:
100 friend class content::AppCacheRequestHandlerTest;
101 friend class content::AppCacheURLRequestJobTest;
102
103 enum DeliveryType {
104 AWAITING_DELIVERY_ORDERS,
105 APPCACHED_DELIVERY,
106 NETWORK_DELIVERY,
107 ERROR_DELIVERY
108 };
109
110 // Returns true if one of the Deliver methods has been called.
111 bool has_delivery_orders() const {
112 return !is_waiting();
113 }
114
115 void MaybeBeginDelivery();
116 void BeginDelivery();
117
118 // For executable response handling.
119 void BeginExecutableHandlerDelivery();
120 void OnExecutableSourceLoaded(int result);
121 void InvokeExecutableHandler(AppCacheExecutableHandler* handler);
122 void OnExecutableResponseCallback(
123 const AppCacheExecutableHandler::Response& response);
124 void BeginErrorDelivery(const char* message);
125
126 // AppCacheStorage::Delegate methods
127 virtual void OnResponseInfoLoaded(
128 AppCacheResponseInfo* response_info, int64 response_id) OVERRIDE;
129 virtual void OnCacheLoaded(AppCache* cache, int64 cache_id) OVERRIDE;
130
131 const net::HttpResponseInfo* http_info() const;
132 bool is_range_request() const { return range_requested_.IsValid(); }
133 void SetupRangeResponse();
134
135 // AppCacheResponseReader completion callback
136 void OnReadComplete(int result);
137
138 // net::URLRequestJob methods, see url_request_job.h for doc comments
139 virtual void Start() OVERRIDE;
140 virtual net::LoadState GetLoadState() const OVERRIDE;
141 virtual bool GetCharset(std::string* charset) OVERRIDE;
142 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE;
143 virtual bool ReadRawData(net::IOBuffer* buf,
144 int buf_size,
145 int *bytes_read) OVERRIDE;
146
147 // Sets extra request headers for Job types that support request headers.
148 // This is how we get informed of range-requests.
149 virtual void SetExtraRequestHeaders(
150 const net::HttpRequestHeaders& headers) OVERRIDE;
151
152 // FilterContext methods
153 virtual bool GetMimeType(std::string* mime_type) const OVERRIDE;
154 virtual int GetResponseCode() const OVERRIDE;
155
156 AppCacheHost* host_;
157 AppCacheStorage* storage_;
158 base::TimeTicks start_time_tick_;
159 bool has_been_started_;
160 bool has_been_killed_;
161 DeliveryType delivery_type_;
162 GURL manifest_url_;
163 int64 group_id_;
164 int64 cache_id_;
165 AppCacheEntry entry_;
166 bool is_fallback_;
167 bool is_main_resource_; // Used for histogram logging.
168 bool cache_entry_not_found_;
169 scoped_refptr<AppCacheResponseInfo> info_;
170 scoped_refptr<net::GrowableIOBuffer> handler_source_buffer_;
171 scoped_ptr<AppCacheResponseReader> handler_source_reader_;
172 net::HttpByteRange range_requested_;
173 scoped_ptr<net::HttpResponseInfo> range_response_info_;
174 scoped_ptr<AppCacheResponseReader> reader_;
175 scoped_refptr<AppCache> cache_;
176 scoped_refptr<AppCacheGroup> group_;
177 base::WeakPtrFactory<AppCacheURLRequestJob> weak_factory_;
178 };
179
180 } // namespace appcache
181
182 #endif // WEBKIT_BROWSER_APPCACHE_APPCACHE_REQUEST_HANDLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698