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

Side by Side Diff: webkit/media/buffered_resource_loader.h

Issue 8667002: Split a portion of BufferedResourceLoader into a separate class ActiveLoader. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: Created 9 years 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 WEBKIT_MEDIA_BUFFERED_RESOURCE_LOADER_H_ 5 #ifndef WEBKIT_MEDIA_BUFFERED_RESOURCE_LOADER_H_
6 #define WEBKIT_MEDIA_BUFFERED_RESOURCE_LOADER_H_ 6 #define WEBKIT_MEDIA_BUFFERED_RESOURCE_LOADER_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/timer.h" 12 #include "base/timer.h"
13 #include "googleurl/src/gurl.h" 13 #include "googleurl/src/gurl.h"
14 #include "media/base/seekable_buffer.h" 14 #include "media/base/seekable_buffer.h"
15 #include "net/base/file_stream.h" 15 #include "net/base/file_stream.h"
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h"
18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoaderClient.h" 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoaderClient.h"
19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" 19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h"
20 #include "webkit/media/active_loader.h"
20 #include "webkit/media/web_data_source.h" 21 #include "webkit/media/web_data_source.h"
21 #include "webkit/media/webmediaplayer_impl.h" 22 #include "webkit/media/webmediaplayer_impl.h"
22 23
23 namespace media { 24 namespace media {
24 class MediaLog; 25 class MediaLog;
25 } 26 }
26 27
27 namespace webkit_media { 28 namespace webkit_media {
28 29
29 const int64 kPositionNotSpecified = -1; 30 const int64 kPositionNotSpecified = -1;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 // - net::ERR_INVALID_RESPONSE 77 // - net::ERR_INVALID_RESPONSE
77 // An invalid response is received from the server. 78 // An invalid response is received from the server.
78 // - (Anything else) 79 // - (Anything else)
79 // An error code that indicates the request has failed. 80 // An error code that indicates the request has failed.
80 // |event_callback| is called when the response is completed, data is 81 // |event_callback| is called when the response is completed, data is
81 // received, the request is suspended or resumed. 82 // received, the request is suspended or resumed.
82 virtual void Start(net::OldCompletionCallback* callback, 83 virtual void Start(net::OldCompletionCallback* callback,
83 const base::Closure& event_callback, 84 const base::Closure& event_callback,
84 WebKit::WebFrame* frame); 85 WebKit::WebFrame* frame);
85 86
86 // Stop this loader, cancels and request and release internal buffer. 87 // Stops everything associated with this loader, including active loaders
Ami GONE FROM CHROMIUM 2011/11/29 18:55:49 "loaders", plural? What?
scherkus (not reviewing) 2011/11/29 21:43:51 Done.
88 // and any pending callbacks.
89 //
90 // It is safe to delete a BufferedResourceLoader after calling Stop().
87 virtual void Stop(); 91 virtual void Stop();
88 92
89 // Reads the specified |read_size| from |position| into |buffer| and when 93 // Reads the specified |read_size| from |position| into |buffer| and when
90 // the operation is done invoke |callback| with number of bytes read or an 94 // the operation is done invoke |callback| with number of bytes read or an
91 // error code. If necessary, will temporarily increase forward capacity of 95 // error code. If necessary, will temporarily increase forward capacity of
92 // buffer to accomodate an unusually large read. 96 // buffer to accomodate an unusually large read.
93 // |callback| is called with the following values: 97 // |callback| is called with the following values:
94 // - (Anything greater than or equal 0) 98 // - (Anything greater than or equal 0)
95 // Read was successful with the indicated number of bytes read. 99 // Read was successful with the indicated number of bytes read.
96 // - net::ERR_FAILED 100 // - net::ERR_FAILED
(...skipping 18 matching lines...) Expand all
115 119
116 // Returns true if the server supports byte range requests. 120 // Returns true if the server supports byte range requests.
117 virtual bool range_supported(); 121 virtual bool range_supported();
118 122
119 // Returns true if the resource loader is currently downloading data. 123 // Returns true if the resource loader is currently downloading data.
120 virtual bool is_downloading_data(); 124 virtual bool is_downloading_data();
121 125
122 // Returns resulting URL. 126 // Returns resulting URL.
123 virtual const GURL& url(); 127 virtual const GURL& url();
124 128
125 // Used to inject a mock used for unittests. 129 // Used to inject a mock used for unittests.
Ami GONE FROM CHROMIUM 2011/11/29 18:55:49 IWBN to doco ownership transfer. Except AFAICT ow
scherkus (not reviewing) 2011/11/29 21:43:51 Going to make test_loader_ a scoped_ptr<> that get
126 virtual void SetURLLoaderForTest(WebKit::WebURLLoader* mock_loader); 130 virtual void SetURLLoaderForTest(WebKit::WebURLLoader* test_loader);
127 131
128 // WebKit::WebURLLoaderClient implementation. 132 // WebKit::WebURLLoaderClient implementation.
129 virtual void willSendRequest( 133 virtual void willSendRequest(
130 WebKit::WebURLLoader* loader, 134 WebKit::WebURLLoader* loader,
131 WebKit::WebURLRequest& newRequest, 135 WebKit::WebURLRequest& newRequest,
132 const WebKit::WebURLResponse& redirectResponse); 136 const WebKit::WebURLResponse& redirectResponse);
133 virtual void didSendData( 137 virtual void didSendData(
134 WebKit::WebURLLoader* loader, 138 WebKit::WebURLLoader* loader,
135 unsigned long long bytesSent, 139 unsigned long long bytesSent,
136 unsigned long long totalBytesToBeSent); 140 unsigned long long totalBytesToBeSent);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 178
175 private: 179 private:
176 friend class BufferedDataSourceTest; 180 friend class BufferedDataSourceTest;
177 friend class BufferedResourceLoaderTest; 181 friend class BufferedResourceLoaderTest;
178 182
179 // Updates the |buffer_|'s forward and backward capacities. 183 // Updates the |buffer_|'s forward and backward capacities.
180 void UpdateBufferWindow(); 184 void UpdateBufferWindow();
181 185
182 // Returns true if we should defer resource loading, based 186 // Returns true if we should defer resource loading, based
183 // on current buffering scheme. 187 // on current buffering scheme.
184 bool ShouldEnableDefer(); 188 bool ShouldEnableDefer() const;
185 189
186 // Returns true if we should enable resource loading, based 190 // Returns true if we should enable resource loading, based
187 // on current buffering scheme. 191 // on current buffering scheme.
188 bool ShouldDisableDefer(); 192 bool ShouldDisableDefer() const;
189 193
190 // Updates deferring behavior based on current buffering scheme. 194 // Updates deferring behavior based on current buffering scheme.
191 void UpdateDeferBehavior(); 195 void UpdateDeferBehavior();
192 196
193 // Set defer state to |deferred| and cease/continue downloading data 197 // Set defer state to |deferred| and cease/continue downloading data
194 // accordingly. 198 // accordingly.
195 void SetDeferred(bool deferred); 199 void SetDeferred(bool deferred);
196 200
197 // Returns true if the current read request can be fulfilled by what is in 201 // Returns true if the current read request can be fulfilled by what is in
198 // the buffer. 202 // the buffer.
199 bool CanFulfillRead(); 203 bool CanFulfillRead() const;
200 204
201 // Returns true if the current read request will be fulfilled in the future. 205 // Returns true if the current read request will be fulfilled in the future.
202 bool WillFulfillRead(); 206 bool WillFulfillRead() const;
203 207
204 // Method that does the actual read and calls the |read_callback_|, assuming 208 // Method that does the actual read and calls the |read_callback_|, assuming
205 // the request range is in |buffer_|. 209 // the request range is in |buffer_|.
206 void ReadInternal(); 210 void ReadInternal();
207 211
208 // If we have made a range request, verify the response from the server. 212 // If we have made a range request, verify the response from the server.
209 bool VerifyPartialResponse(const WebKit::WebURLResponse& response); 213 bool VerifyPartialResponse(const WebKit::WebURLResponse& response);
210 214
211 // Returns the value for a range request header using parameters 215 // Returns the value for a range request header using parameters
212 // |first_byte_position| and |last_byte_position|. Negative numbers other 216 // |first_byte_position| and |last_byte_position|. Negative numbers other
(...skipping 18 matching lines...) Expand all
231 235
232 // Helper function that returns true if a range request was specified. 236 // Helper function that returns true if a range request was specified.
233 bool IsRangeRequest() const; 237 bool IsRangeRequest() const;
234 238
235 // Log everything interesting to |media_log_|. 239 // Log everything interesting to |media_log_|.
236 void Log(); 240 void Log();
237 241
238 // A sliding window of buffer. 242 // A sliding window of buffer.
239 scoped_ptr<media::SeekableBuffer> buffer_; 243 scoped_ptr<media::SeekableBuffer> buffer_;
240 244
241 // True if resource loading was deferred. 245 // Keeps track of an active WebURLLoader and associated state.
242 bool deferred_; 246 scoped_ptr<ActiveLoader> active_loader_;
243 247
244 // Current buffering algorithm in place for resource loading. 248 // Current buffering algorithm in place for resource loading.
245 DeferStrategy defer_strategy_; 249 DeferStrategy defer_strategy_;
246 250
247 // True if resource loading has completed.
248 bool completed_;
249
250 // True if a range request was made. 251 // True if a range request was made.
251 bool range_requested_; 252 bool range_requested_;
252 253
253 // True if Range header is supported. 254 // True if Range header is supported.
254 bool range_supported_; 255 bool range_supported_;
255 256
256 // Forward capacity to reset to after an extension. 257 // Forward capacity to reset to after an extension.
257 size_t saved_forward_capacity_; 258 size_t saved_forward_capacity_;
258 259
259 // Does the work of loading and sends data back to this client.
260 scoped_ptr<WebKit::WebURLLoader> url_loader_;
261
262 GURL url_; 260 GURL url_;
263 int64 first_byte_position_; 261 int64 first_byte_position_;
264 int64 last_byte_position_; 262 int64 last_byte_position_;
265 bool single_origin_; 263 bool single_origin_;
266 264
267 // Callback method that listens to network events. 265 // Callback method that listens to network events.
268 base::Closure event_callback_; 266 base::Closure event_callback_;
269 267
270 // Members used during request start. 268 // Members used during request start.
271 scoped_ptr<net::OldCompletionCallback> start_callback_; 269 scoped_ptr<net::OldCompletionCallback> start_callback_;
272 int64 offset_; 270 int64 offset_;
273 int64 content_length_; 271 int64 content_length_;
274 int64 instance_size_; 272 int64 instance_size_;
275 273
276 // Members used during a read operation. They should be reset after each 274 // Members used during a read operation. They should be reset after each
277 // read has completed or failed. 275 // read has completed or failed.
278 scoped_ptr<net::OldCompletionCallback> read_callback_; 276 scoped_ptr<net::OldCompletionCallback> read_callback_;
279 int64 read_position_; 277 int64 read_position_;
280 size_t read_size_; 278 size_t read_size_;
281 uint8* read_buffer_; 279 uint8* read_buffer_;
282 280
283 // Offsets of the requested first byte and last byte in |buffer_|. They are 281 // Offsets of the requested first byte and last byte in |buffer_|. They are
284 // written by Read(). 282 // written by Read().
285 int first_offset_; 283 int first_offset_;
286 int last_offset_; 284 int last_offset_;
287 285
288 // Used to ensure mocks for unittests are used instead of reset in Start(). 286 // Used to inject a mocks WebURLLoader for tests during Start().
289 bool keep_test_loader_; 287 WebKit::WebURLLoader* test_loader_;
290 288
291 // Bitrate of the media. Set to 0 if unknown. 289 // Bitrate of the media. Set to 0 if unknown.
292 int bitrate_; 290 int bitrate_;
293 291
294 // Playback rate of the media. 292 // Playback rate of the media.
295 float playback_rate_; 293 float playback_rate_;
296 294
297 scoped_refptr<media::MediaLog> media_log_; 295 scoped_refptr<media::MediaLog> media_log_;
298 296
299 DISALLOW_COPY_AND_ASSIGN(BufferedResourceLoader); 297 DISALLOW_COPY_AND_ASSIGN(BufferedResourceLoader);
300 }; 298 };
301 299
302 } // namespace webkit_media 300 } // namespace webkit_media
303 301
304 #endif // WEBKIT_MEDIA_BUFFERED_RESOURCE_LOADER_H_ 302 #endif // WEBKIT_MEDIA_BUFFERED_RESOURCE_LOADER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698