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

Side by Side Diff: webkit/glue/resource_loader_bridge.h

Issue 20003004: reland crrev.com/212927 Move webkitplatformsupport_impl and related from glue to child (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase & allocator dep for components_unittests in shared_library2 Created 7 years, 5 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 // The intent of this file is to provide a type-neutral abstraction between
6 // Chrome and WebKit for resource loading. This pure-virtual interface is
7 // implemented by the embedder.
8 //
9 // One of these objects will be created by WebKit for each request. WebKit
10 // will own the pointer to the bridge, and will delete it when the request is
11 // no longer needed.
12 //
13 // In turn, the bridge's owner on the WebKit end will implement the Peer
14 // interface, which we will use to communicate notifications back.
15
16 #ifndef WEBKIT_GLUE_RESOURCE_LOADER_BRIDGE_H_
17 #define WEBKIT_GLUE_RESOURCE_LOADER_BRIDGE_H_
18
19 #include <utility>
20
21 #include "build/build_config.h"
22 #if defined(OS_POSIX)
23 #include "base/file_descriptor_posix.h"
24 #endif
25 #include "base/memory/ref_counted.h"
26 #include "base/platform_file.h"
27 #include "base/values.h"
28 #include "net/base/request_priority.h"
29 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
30 #include "third_party/WebKit/public/platform/WebURLRequest.h"
31 #include "url/gurl.h"
32 #include "webkit/common/resource_response_info.h"
33 #include "webkit/glue/resource_type.h"
34 #include "webkit/glue/webkit_glue_export.h"
35
36 namespace webkit_glue {
37 class ResourceRequestBody;
38
39 class ResourceLoaderBridge {
40 public:
41 // Structure used when calling
42 // WebKitPlatformSupportImpl::CreateResourceLoader().
43 struct WEBKIT_GLUE_EXPORT RequestInfo {
44 RequestInfo();
45 ~RequestInfo();
46
47 // HTTP-style method name (e.g., "GET" or "POST").
48 std::string method;
49
50 // Absolute URL encoded in ASCII per the rules of RFC-2396.
51 GURL url;
52
53 // URL of the document in the top-level window, which may be checked by the
54 // third-party cookie blocking policy.
55 GURL first_party_for_cookies;
56
57 // Optional parameter, a URL with similar constraints in how it must be
58 // encoded as the url member.
59 GURL referrer;
60
61 // The referrer policy that applies to the referrer.
62 WebKit::WebReferrerPolicy referrer_policy;
63
64 // For HTTP(S) requests, the headers parameter can be a \r\n-delimited and
65 // \r\n-terminated list of MIME headers. They should be ASCII-encoded using
66 // the standard MIME header encoding rules. The headers parameter can also
67 // be null if no extra request headers need to be set.
68 std::string headers;
69
70 // Composed of the values defined in url_request_load_flags.h.
71 int load_flags;
72
73 // Process id of the process making the request.
74 int requestor_pid;
75
76 // Indicates if the current request is the main frame load, a sub-frame
77 // load, or a sub objects load.
78 ResourceType::Type request_type;
79
80 // Indicates the priority of this request, as determined by WebKit.
81 net::RequestPriority priority;
82
83 // Used for plugin to browser requests.
84 uint32 request_context;
85
86 // Identifies what appcache host this request is associated with.
87 int appcache_host_id;
88
89 // Used to associated the bridge with a frame's network context.
90 int routing_id;
91
92 // If true, then the response body will be downloaded to a file and the
93 // path to that file will be provided in ResponseInfo::download_file_path.
94 bool download_to_file;
95
96 // True if the request was user initiated.
97 bool has_user_gesture;
98
99 // Extra data associated with this request. We do not own this pointer.
100 WebKit::WebURLRequest::ExtraData* extra_data;
101
102 private:
103 DISALLOW_COPY_AND_ASSIGN(RequestInfo);
104 };
105
106 // See the SyncLoad method declared below. (The name of this struct is not
107 // suffixed with "Info" because it also contains the response data.)
108 struct SyncLoadResponse : ResourceResponseInfo {
109 SyncLoadResponse();
110 ~SyncLoadResponse();
111
112 // The response error code.
113 int error_code;
114
115 // The final URL of the response. This may differ from the request URL in
116 // the case of a server redirect.
117 GURL url;
118
119 // The response data.
120 std::string data;
121 };
122
123 // Generated by the bridge. This is implemented by our custom resource loader
124 // within webkit. The Peer and it's bridge should have identical lifetimes
125 // as they represent each end of a communication channel.
126 //
127 // These callbacks mirror net::URLRequest::Delegate and the order and
128 // conditions in which they will be called are identical. See url_request.h
129 // for more information.
130 class Peer {
131 public:
132 // Called as upload progress is made.
133 // note: only for requests with LOAD_ENABLE_UPLOAD_PROGRESS set
134 virtual void OnUploadProgress(uint64 position, uint64 size) = 0;
135
136 // Called when a redirect occurs. The implementation may return false to
137 // suppress the redirect. The given ResponseInfo provides complete
138 // information about the redirect, and new_url is the URL that will be
139 // loaded if this method returns true. If this method returns true, the
140 // output parameter *has_new_first_party_for_cookies indicates whether the
141 // output parameter *new_first_party_for_cookies contains the new URL that
142 // should be consulted for the third-party cookie blocking policy.
143 virtual bool OnReceivedRedirect(const GURL& new_url,
144 const ResourceResponseInfo& info,
145 bool* has_new_first_party_for_cookies,
146 GURL* new_first_party_for_cookies) = 0;
147
148 // Called when response headers are available (after all redirects have
149 // been followed).
150 virtual void OnReceivedResponse(const ResourceResponseInfo& info) = 0;
151
152 // Called when a chunk of response data is downloaded. This method may be
153 // called multiple times or not at all if an error occurs. This method is
154 // only called if RequestInfo::download_to_file was set to true, and in
155 // that case, OnReceivedData will not be called.
156 virtual void OnDownloadedData(int len) = 0;
157
158 // Called when a chunk of response data is available. This method may
159 // be called multiple times or not at all if an error occurs.
160 // The encoded_data_length is the length of the encoded data transferred
161 // over the network, which could be different from data length (e.g. for
162 // gzipped content), or -1 if if unknown.
163 virtual void OnReceivedData(const char* data,
164 int data_length,
165 int encoded_data_length) = 0;
166
167 // Called when metadata generated by the renderer is retrieved from the
168 // cache. This method may be called zero or one times.
169 virtual void OnReceivedCachedMetadata(const char* data, int len) { }
170
171 // Called when the response is complete. This method signals completion of
172 // the resource load.
173 virtual void OnCompletedRequest(
174 int error_code,
175 bool was_ignored_by_handler,
176 const std::string& security_info,
177 const base::TimeTicks& completion_time) = 0;
178
179 protected:
180 virtual ~Peer() {}
181 };
182
183 // use WebKitPlatformSupportImpl::CreateResourceLoader() for construction, but
184 // anybody can delete at any time, INCLUDING during processing of callbacks.
185 WEBKIT_GLUE_EXPORT virtual ~ResourceLoaderBridge();
186
187 // Call this method before calling Start() to set the request body.
188 // May only be used with HTTP(S) POST requests.
189 virtual void SetRequestBody(ResourceRequestBody* request_body) = 0;
190
191 // Call this method to initiate the request. If this method succeeds, then
192 // the peer's methods will be called asynchronously to report various events.
193 virtual bool Start(Peer* peer) = 0;
194
195 // Call this method to cancel a request that is in progress. This method
196 // causes the request to immediately transition into the 'done' state. The
197 // OnCompletedRequest method will be called asynchronously; this assumes
198 // the peer is still valid.
199 virtual void Cancel() = 0;
200
201 // Call this method to suspend or resume a load that is in progress. This
202 // method may only be called after a successful call to the Start method.
203 virtual void SetDefersLoading(bool value) = 0;
204
205 // Call this method when the priority of the requested resource changes after
206 // Start() has been called. This method may only be called after a successful
207 // call to the Start method.
208 virtual void DidChangePriority(net::RequestPriority new_priority) = 0;
209
210 // Call this method to load the resource synchronously (i.e., in one shot).
211 // This is an alternative to the Start method. Be warned that this method
212 // will block the calling thread until the resource is fully downloaded or an
213 // error occurs. It could block the calling thread for a long time, so only
214 // use this if you really need it! There is also no way for the caller to
215 // interrupt this method. Errors are reported via the status field of the
216 // response parameter.
217 virtual void SyncLoad(SyncLoadResponse* response) = 0;
218
219 protected:
220 // Construction must go through
221 // WebKitPlatformSupportImpl::CreateResourceLoader()
222 // For HTTP(S) POST requests, the AppendDataToUpload and AppendFileToUpload
223 // methods may be called to construct the body of the request.
224 WEBKIT_GLUE_EXPORT ResourceLoaderBridge();
225
226 private:
227 DISALLOW_COPY_AND_ASSIGN(ResourceLoaderBridge);
228 };
229
230 } // namespace webkit_glue
231
232 #endif // WEBKIT_GLUE_RESOURCE_LOADER_BRIDGE_H_
OLDNEW
« no previous file with comments | « webkit/glue/multipart_response_delegate_unittest.cc ('k') | webkit/glue/resource_loader_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698