| 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_
|
|
|