Index: content/renderer/media/buffered_resource_loader.h |
diff --git a/content/renderer/media/buffered_resource_loader.h b/content/renderer/media/buffered_resource_loader.h |
deleted file mode 100644 |
index 3bdf1388c7f6c00c7d0c88628aca4bb9e5b63b25..0000000000000000000000000000000000000000 |
--- a/content/renderer/media/buffered_resource_loader.h |
+++ /dev/null |
@@ -1,323 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CONTENT_RENDERER_MEDIA_BUFFERED_RESOURCE_LOADER_H_ |
-#define CONTENT_RENDERER_MEDIA_BUFFERED_RESOURCE_LOADER_H_ |
- |
-#include <string> |
- |
-#include "base/callback.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/timer/timer.h" |
-#include "content/common/content_export.h" |
-#include "content/renderer/media/active_loader.h" |
-#include "media/base/seekable_buffer.h" |
-#include "third_party/WebKit/public/platform/WebURLLoader.h" |
-#include "third_party/WebKit/public/platform/WebURLLoaderClient.h" |
-#include "third_party/WebKit/public/platform/WebURLRequest.h" |
-#include "third_party/WebKit/public/web/WebFrame.h" |
-#include "url/gurl.h" |
- |
-namespace media { |
-class MediaLog; |
-class SeekableBuffer; |
-} |
- |
-namespace content { |
- |
-const int64 kPositionNotSpecified = -1; |
- |
-// BufferedResourceLoader is single threaded and must be accessed on the |
-// render thread. It wraps a WebURLLoader and does in-memory buffering, |
-// pausing resource loading when the in-memory buffer is full and resuming |
-// resource loading when there is available capacity. |
-class CONTENT_EXPORT BufferedResourceLoader |
- : NON_EXPORTED_BASE(public blink::WebURLLoaderClient) { |
- public: |
- // kNeverDefer - Aggresively buffer; never defer loading while paused. |
- // kReadThenDefer - Request only enough data to fulfill read requests. |
- // kCapacityDefer - Try to keep amount of buffered data at capacity. |
- enum DeferStrategy { |
- kNeverDefer, |
- kReadThenDefer, |
- kCapacityDefer, |
- }; |
- |
- // Status codes for start/read operations on BufferedResourceLoader. |
- enum Status { |
- // Everything went as planned. |
- kOk, |
- |
- // The operation failed, which may have been due to: |
- // - Page navigation |
- // - Server replied 4xx/5xx |
- // - The response was invalid |
- // - Connection was terminated |
- // |
- // At this point you should delete the loader. |
- kFailed, |
- |
- // The loader will never be able to satisfy the read request. Please stop, |
- // delete, create a new loader, and try again. |
- kCacheMiss, |
- }; |
- |
- // Keep in sync with WebMediaPlayer::CORSMode. |
- enum CORSMode { kUnspecified, kAnonymous, kUseCredentials }; |
- |
- enum LoadingState { |
- kLoading, // Actively attempting to download data. |
- kLoadingDeferred, // Loading intentionally deferred. |
- kLoadingFinished, // Loading finished normally; no more data will arrive. |
- kLoadingFailed, // Loading finished abnormally; no more data will arrive. |
- }; |
- |
- // |url| - URL for the resource to be loaded. |
- // |cors_mode| - HTML media element's crossorigin attribute. |
- // |first_byte_position| - First byte to start loading from, |
- // |kPositionNotSpecified| for not specified. |
- // |last_byte_position| - Last byte to be loaded, |
- // |kPositionNotSpecified| for not specified. |
- // |strategy| is the initial loading strategy to use. |
- // |bitrate| is the bitrate of the media, 0 if unknown. |
- // |playback_rate| is the current playback rate of the media. |
- BufferedResourceLoader( |
- const GURL& url, |
- CORSMode cors_mode, |
- int64 first_byte_position, |
- int64 last_byte_position, |
- DeferStrategy strategy, |
- int bitrate, |
- float playback_rate, |
- media::MediaLog* media_log); |
- virtual ~BufferedResourceLoader(); |
- |
- // Start the resource loading with the specified URL and range. |
- // |
- // |loading_cb| is executed when the loading state has changed. |
- // |progress_cb| is executed when additional data has arrived. |
- typedef base::Callback<void(Status)> StartCB; |
- typedef base::Callback<void(LoadingState)> LoadingStateChangedCB; |
- typedef base::Callback<void(int64)> ProgressCB; |
- void Start(const StartCB& start_cb, |
- const LoadingStateChangedCB& loading_cb, |
- const ProgressCB& progress_cb, |
- blink::WebFrame* frame); |
- |
- // Stops everything associated with this loader, including active URL loads |
- // and pending callbacks. |
- // |
- // It is safe to delete a BufferedResourceLoader after calling Stop(). |
- void Stop(); |
- |
- // Copies |read_size| bytes from |position| into |buffer|, executing |read_cb| |
- // when the operation has completed. |
- // |
- // The callback will contain the number of bytes read iff the status is kOk, |
- // zero otherwise. |
- // |
- // If necessary will temporarily increase forward capacity of buffer to |
- // accomodate an unusually large read. |
- typedef base::Callback<void(Status, int)> ReadCB; |
- void Read(int64 position, int read_size, |
- uint8* buffer, const ReadCB& read_cb); |
- |
- // Gets the content length in bytes of the instance after this loader has been |
- // started. If this value is |kPositionNotSpecified|, then content length is |
- // unknown. |
- int64 content_length(); |
- |
- // Gets the original size of the file requested. If this value is |
- // |kPositionNotSpecified|, then the size is unknown. |
- int64 instance_size(); |
- |
- // Returns true if the server supports byte range requests. |
- bool range_supported(); |
- |
- // blink::WebURLLoaderClient implementation. |
- virtual void willSendRequest( |
- blink::WebURLLoader* loader, |
- blink::WebURLRequest& newRequest, |
- const blink::WebURLResponse& redirectResponse); |
- virtual void didSendData( |
- blink::WebURLLoader* loader, |
- unsigned long long bytesSent, |
- unsigned long long totalBytesToBeSent); |
- virtual void didReceiveResponse( |
- blink::WebURLLoader* loader, |
- const blink::WebURLResponse& response); |
- virtual void didDownloadData( |
- blink::WebURLLoader* loader, |
- int data_length, |
- int encoded_data_length); |
- virtual void didReceiveData( |
- blink::WebURLLoader* loader, |
- const char* data, |
- int data_length, |
- int encoded_data_length); |
- virtual void didReceiveCachedMetadata( |
- blink::WebURLLoader* loader, |
- const char* data, int dataLength); |
- virtual void didFinishLoading( |
- blink::WebURLLoader* loader, |
- double finishTime, |
- int64_t total_encoded_data_length); |
- virtual void didFail( |
- blink::WebURLLoader* loader, |
- const blink::WebURLError&); |
- |
- // Returns true if the media resource has a single origin, false otherwise. |
- // Only valid to call after Start() has completed. |
- bool HasSingleOrigin() const; |
- |
- // Returns true if the media resource passed a CORS access control check. |
- // Only valid to call after Start() has completed. |
- bool DidPassCORSAccessCheck() const; |
- |
- // Sets the defer strategy to the given value unless it seems unwise. |
- // Specifically downgrade kNeverDefer to kCapacityDefer if we know the |
- // current response will not be used to satisfy future requests (the cache |
- // won't help us). |
- void UpdateDeferStrategy(DeferStrategy strategy); |
- |
- // Sets the playback rate to the given value and updates buffer window |
- // accordingly. |
- void SetPlaybackRate(float playback_rate); |
- |
- // Sets the bitrate to the given value and updates buffer window |
- // accordingly. |
- void SetBitrate(int bitrate); |
- |
- // Return the |first_byte_position| passed into the ctor. |
- int64 first_byte_position() const; |
- |
- // Parse a Content-Range header into its component pieces and return true if |
- // each of the expected elements was found & parsed correctly. |
- // |*instance_size| may be set to kPositionNotSpecified if the range ends in |
- // "/*". |
- // NOTE: only public for testing! This is an implementation detail of |
- // VerifyPartialResponse (a private method). |
- static bool ParseContentRange( |
- const std::string& content_range_str, int64* first_byte_position, |
- int64* last_byte_position, int64* instance_size); |
- |
- private: |
- friend class BufferedDataSourceTest; |
- friend class BufferedResourceLoaderTest; |
- friend class MockBufferedDataSource; |
- |
- // Updates the |buffer_|'s forward and backward capacities. |
- void UpdateBufferWindow(); |
- |
- // Updates deferring behavior based on current buffering scheme. |
- void UpdateDeferBehavior(); |
- |
- // Sets |active_loader_|'s defer state and fires |loading_cb_| if the state |
- // changed. |
- void SetDeferred(bool deferred); |
- |
- // Returns true if we should defer resource loading based on the current |
- // buffering scheme. |
- bool ShouldDefer() const; |
- |
- // Returns true if the current read request can be fulfilled by what is in |
- // the buffer. |
- bool CanFulfillRead() const; |
- |
- // Returns true if the current read request will be fulfilled in the future. |
- bool WillFulfillRead() const; |
- |
- // Method that does the actual read and calls the |read_cb_|, assuming the |
- // request range is in |buffer_|. |
- void ReadInternal(); |
- |
- // If we have made a range request, verify the response from the server. |
- bool VerifyPartialResponse(const blink::WebURLResponse& response); |
- |
- // Done with read. Invokes the read callback and reset parameters for the |
- // read request. |
- void DoneRead(Status status, int bytes_read); |
- |
- // Done with start. Invokes the start callback and reset it. |
- void DoneStart(Status status); |
- |
- bool HasPendingRead() { return !read_cb_.is_null(); } |
- |
- // Helper function that returns true if a range request was specified. |
- bool IsRangeRequest() const; |
- |
- // Log everything interesting to |media_log_|. |
- void Log(); |
- |
- // A sliding window of buffer. |
- media::SeekableBuffer buffer_; |
- |
- // Keeps track of an active WebURLLoader and associated state. |
- scoped_ptr<ActiveLoader> active_loader_; |
- |
- // Tracks if |active_loader_| failed. If so, then all calls to Read() will |
- // fail. |
- bool loader_failed_; |
- |
- // Current buffering algorithm in place for resource loading. |
- DeferStrategy defer_strategy_; |
- |
- // True if the currently-reading response might be used to satisfy a future |
- // request from the cache. |
- bool might_be_reused_from_cache_in_future_; |
- |
- // True if Range header is supported. |
- bool range_supported_; |
- |
- // Forward capacity to reset to after an extension. |
- size_t saved_forward_capacity_; |
- |
- GURL url_; |
- CORSMode cors_mode_; |
- const int64 first_byte_position_; |
- const int64 last_byte_position_; |
- bool single_origin_; |
- |
- // Executed whenever the state of resource loading has changed. |
- LoadingStateChangedCB loading_cb_; |
- |
- // Executed whenever additional data has been downloaded and reports the |
- // zero-indexed file offset of the furthest buffered byte. |
- ProgressCB progress_cb_; |
- |
- // Members used during request start. |
- StartCB start_cb_; |
- int64 offset_; |
- int64 content_length_; |
- int64 instance_size_; |
- |
- // Members used during a read operation. They should be reset after each |
- // read has completed or failed. |
- ReadCB read_cb_; |
- int64 read_position_; |
- int read_size_; |
- uint8* read_buffer_; |
- |
- // Offsets of the requested first byte and last byte in |buffer_|. They are |
- // written by Read(). |
- int first_offset_; |
- int last_offset_; |
- |
- // Injected WebURLLoader instance for testing purposes. |
- scoped_ptr<blink::WebURLLoader> test_loader_; |
- |
- // Bitrate of the media. Set to 0 if unknown. |
- int bitrate_; |
- |
- // Playback rate of the media. |
- float playback_rate_; |
- |
- scoped_refptr<media::MediaLog> media_log_; |
- |
- DISALLOW_COPY_AND_ASSIGN(BufferedResourceLoader); |
-}; |
- |
-} // namespace content |
- |
-#endif // CONTENT_RENDERER_MEDIA_BUFFERED_RESOURCE_LOADER_H_ |