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

Side by Side Diff: net/url_request/url_request_job.h

Issue 155897: Add support to URLRequest for deferring redirects.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 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
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NET_URL_REQUEST_URL_REQUEST_JOB_H_ 5 #ifndef NET_URL_REQUEST_URL_REQUEST_JOB_H_
6 #define NET_URL_REQUEST_URL_REQUEST_JOB_H_ 6 #define NET_URL_REQUEST_URL_REQUEST_JOB_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/ref_counted.h" 11 #include "base/ref_counted.h"
12 #include "base/scoped_ptr.h" 12 #include "base/scoped_ptr.h"
13 #include "base/time.h" 13 #include "base/time.h"
14 #include "googleurl/src/gurl.h"
14 #include "net/base/filter.h" 15 #include "net/base/filter.h"
15 #include "net/base/load_states.h" 16 #include "net/base/load_states.h"
16 17
17 namespace net { 18 namespace net {
18 class AuthChallengeInfo; 19 class AuthChallengeInfo;
19 class HttpResponseInfo; 20 class HttpResponseInfo;
20 class IOBuffer; 21 class IOBuffer;
21 class UploadData; 22 class UploadData;
22 class X509Certificate; 23 class X509Certificate;
23 } 24 }
24 25
25 class GURL;
26 class URLRequest; 26 class URLRequest;
27 class URLRequestStatus; 27 class URLRequestStatus;
28 class URLRequestJobMetrics; 28 class URLRequestJobMetrics;
29 29
30 // The URLRequestJob is using RefCounterThreadSafe because some sub classes 30 // The URLRequestJob is using RefCounterThreadSafe because some sub classes
31 // can be destroyed on multiple threads. This is the case of the 31 // can be destroyed on multiple threads. This is the case of the
32 // UrlRequestFileJob. 32 // UrlRequestFileJob.
33 class URLRequestJob : public base::RefCountedThreadSafe<URLRequestJob>, 33 class URLRequestJob : public base::RefCountedThreadSafe<URLRequestJob>,
34 public FilterContext { 34 public FilterContext {
35 public: 35 public:
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 const std::wstring& password); 175 const std::wstring& password);
176 176
177 // Display the error page without asking for credentials again. 177 // Display the error page without asking for credentials again.
178 virtual void CancelAuth(); 178 virtual void CancelAuth();
179 179
180 virtual void ContinueWithCertificate(net::X509Certificate* client_cert); 180 virtual void ContinueWithCertificate(net::X509Certificate* client_cert);
181 181
182 // Continue processing the request ignoring the last error. 182 // Continue processing the request ignoring the last error.
183 virtual void ContinueDespiteLastError(); 183 virtual void ContinueDespiteLastError();
184 184
185 void FollowDeferredRedirect();
186
185 // Returns true if the Job is done producing response data and has called 187 // Returns true if the Job is done producing response data and has called
186 // NotifyDone on the request. 188 // NotifyDone on the request.
187 bool is_done() const { return done_; } 189 bool is_done() const { return done_; }
188 190
189 // Returns true if the job is doing performance profiling 191 // Returns true if the job is doing performance profiling
190 bool is_profiling() const { return is_profiling_; } 192 bool is_profiling() const { return is_profiling_; }
191 193
192 // Retrieve the performance measurement of the job. The data is encapsulated 194 // Retrieve the performance measurement of the job. The data is encapsulated
193 // with a URLRequestJobMetrics object. The caller owns this object from now 195 // with a URLRequestJobMetrics object. The caller owns this object from now
194 // on. 196 // on.
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 298
297 private: 299 private:
298 // Size of filter input buffers used by this class. 300 // Size of filter input buffers used by this class.
299 static const int kFilterBufSize; 301 static const int kFilterBufSize;
300 302
301 // When data filtering is enabled, this function is used to read data 303 // When data filtering is enabled, this function is used to read data
302 // for the filter. Returns true if raw data was read. Returns false if 304 // for the filter. Returns true if raw data was read. Returns false if
303 // an error occurred (or we are waiting for IO to complete). 305 // an error occurred (or we are waiting for IO to complete).
304 bool ReadRawDataForFilter(int *bytes_read); 306 bool ReadRawDataForFilter(int *bytes_read);
305 307
306 // Called in response to a redirect that was not canceled to follow the
307 // redirect. The current job will be replaced with a new job loading the
308 // given redirect destination.
309 void FollowRedirect(const GURL& location, int http_status_code);
310
311 // Updates the profiling info and notifies observers that bytes_read bytes 308 // Updates the profiling info and notifies observers that bytes_read bytes
312 // have been read. 309 // have been read.
313 void RecordBytesRead(int bytes_read); 310 void RecordBytesRead(int bytes_read);
314 311
315 // Called to query whether there is data available in the filter to be read 312 // Called to query whether there is data available in the filter to be read
316 // out. 313 // out.
317 bool FilterHasData(); 314 bool FilterHasData();
318 315
319 // Record packet arrival times for possible use in histograms. 316 // Record packet arrival times for possible use in histograms.
320 void UpdatePacketReadTimes(); 317 void UpdatePacketReadTimes();
321 318
319 // Called in response to a redirect that was not canceled to follow the
320 // redirect. The current job will be replaced with a new job loading the
321 // given redirect destination.
322 void FollowRedirect(const GURL& location, int http_status_code);
wtc 2009/07/23 00:30:12 Nit: move this method back to its original locatio
darin (slow to review) 2009/07/23 01:27:29 Done.
323
322 // Indicates that the job is done producing data, either it has completed 324 // Indicates that the job is done producing data, either it has completed
323 // all the data or an error has been encountered. Set exclusively by 325 // all the data or an error has been encountered. Set exclusively by
324 // NotifyDone so that it is kept in sync with the request. 326 // NotifyDone so that it is kept in sync with the request.
325 bool done_; 327 bool done_;
326 328
327 // Cache the load flags from request_ because it might go away. 329 // Cache the load flags from request_ because it might go away.
328 int load_flags_; 330 int load_flags_;
329 331
330 // The data stream filter which is enabled on demand. 332 // The data stream filter which is enabled on demand.
331 scoped_ptr<Filter> filter_; 333 scoped_ptr<Filter> filter_;
332 334
333 // If the filter filled its output buffer, then there is a change that it 335 // If the filter filled its output buffer, then there is a change that it
334 // still has internal data to emit, and this flag is set. 336 // still has internal data to emit, and this flag is set.
335 bool filter_needs_more_output_space_; 337 bool filter_needs_more_output_space_;
336 338
337 // When we filter data, we receive data into the filter buffers. After 339 // When we filter data, we receive data into the filter buffers. After
338 // processing the filtered data, we return the data in the caller's buffer. 340 // processing the filtered data, we return the data in the caller's buffer.
339 // While the async IO is in progress, we save the user buffer here, and 341 // While the async IO is in progress, we save the user buffer here, and
340 // when the IO completes, we fill this in. 342 // when the IO completes, we fill this in.
341 net::IOBuffer *read_buffer_; 343 net::IOBuffer *read_buffer_;
342 int read_buffer_len_; 344 int read_buffer_len_;
343 345
344 // Used by HandleResponseIfNecessary to track whether we've sent the 346 // Used by HandleResponseIfNecessary to track whether we've sent the
345 // OnResponseStarted callback and potentially redirect callbacks as well. 347 // OnResponseStarted callback and potentially redirect callbacks as well.
346 bool has_handled_response_; 348 bool has_handled_response_;
347 349
348 // Expected content size 350 // Expected content size
349 int64 expected_content_size_; 351 int64 expected_content_size_;
350 352
353 // Set when a redirect is deferred.
354 GURL deferred_redirect_url_;
355 int deferred_redirect_status_code_;
356
351 //---------------------------------------------------------------------------- 357 //----------------------------------------------------------------------------
352 // Data used for statistics gathering in some instances. This data is only 358 // Data used for statistics gathering in some instances. This data is only
353 // used for histograms etc., and is not required. It is optionally gathered 359 // used for histograms etc., and is not required. It is optionally gathered
354 // based on the settings of several control variables. 360 // based on the settings of several control variables.
355 361
356 // Enable recording of packet arrival times for histogramming. 362 // Enable recording of packet arrival times for histogramming.
357 bool packet_timing_enabled_; 363 bool packet_timing_enabled_;
358 364
359 // TODO(jar): improve the quality of the gathered info by gathering most times 365 // TODO(jar): improve the quality of the gathered info by gathering most times
360 // at a lower point in the network stack, assuring we have actual packet 366 // at a lower point in the network stack, assuring we have actual packet
(...skipping 26 matching lines...) Expand all
387 base::Time final_packet_time_; 393 base::Time final_packet_time_;
388 394
389 // The count of the number of packets, some of which may not have been timed. 395 // The count of the number of packets, some of which may not have been timed.
390 // We're ignoring overflow, as 1430 x 2^31 is a LOT of bytes. 396 // We're ignoring overflow, as 1430 x 2^31 is a LOT of bytes.
391 int observed_packet_count_; 397 int observed_packet_count_;
392 398
393 DISALLOW_COPY_AND_ASSIGN(URLRequestJob); 399 DISALLOW_COPY_AND_ASSIGN(URLRequestJob);
394 }; 400 };
395 401
396 #endif // NET_URL_REQUEST_URL_REQUEST_JOB_H_ 402 #endif // NET_URL_REQUEST_URL_REQUEST_JOB_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698