| Index: chrome/renderer/media/data_source_impl.h
|
| ===================================================================
|
| --- chrome/renderer/media/data_source_impl.h (revision 16720)
|
| +++ chrome/renderer/media/data_source_impl.h (working copy)
|
| @@ -1,196 +0,0 @@
|
| -// Copyright (c) 2009 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.
|
| -//
|
| -// A Chrome specific data source for video stack pipeline. The actual resource
|
| -// loading would happen in the browser process. This class is given a file
|
| -// handle and will ask for progress of downloading from RenderView which
|
| -// delegates requests to browser process through IPC. Asynchronous IO will be
|
| -// performed on the file handle.
|
| -//
|
| -// This class is access by 4 different threads during it's lifetime, namely:
|
| -// 1. Render thread
|
| -// Thread that runs WebKit objects and construct this class. Updates about
|
| -// progress for resource loading also happens in this thread.
|
| -// 2. Pipeline thread
|
| -// Closing thread of the video stack pipeline, it initialized this class
|
| -// and performs stopping in an orderly fashion.
|
| -// 3. Demuxer thread
|
| -// Thread created by the pipeline and ask for data from this class.
|
| -// media::DataSource methods are called from this thread.
|
| -// 4. IO thread
|
| -// Performs file stream construction and callback of read completion also
|
| -// comes from this thread.
|
| -//
|
| -// Methods in the class categorized by the thread(s) they are running on:
|
| -//
|
| -// Render thread
|
| -// +-- DataSourceImpl()
|
| -// | Perform construction of this class.
|
| -// |-- static CreateFactory()
|
| -// | Called during construction of this class.
|
| -// |-- OnInitialize()
|
| -// | Task posted by Initialize() to kick start resource loading.
|
| -// |-- OnCancel()
|
| -// | Cancel the resource loading.
|
| -// |-- OnDownloadProgress()
|
| -// | Receives download progress information for the response data file.
|
| -// |-- OnUploadProgress()
|
| -// |-- OnReceivedRedirect()
|
| -// |-- OnReceivedResponse()
|
| -// |-- OnReceivedData()
|
| -// |-- OnCompletedRequest()
|
| -// |-- GetURLForDebugging()
|
| -// \-- OnDestroy()
|
| -//
|
| -// Pipeline thread
|
| -// +-- Initialize()
|
| -// | Performs initialization of data source in the pipeline.
|
| -// \-- Stop()
|
| -// Cease all activities during pipeline tear down.
|
| -//
|
| -// Demuxer thread
|
| -// +-- Read()
|
| -// | Called to read from the media file.
|
| -// |-- GetPosition()
|
| -// | Called to obtain current position in the file.
|
| -// |-- SetPosition()
|
| -// | Performs a seek operation.
|
| -// |-- GetSize()
|
| -// | Retrieve the size of the resource.
|
| -// \-- IsSeekable()
|
| -// Returns true if URL is file:/// or else false.
|
| -//
|
| -// IO thread
|
| -// +-- OnCreateFileStream()
|
| -// | Callback for construction of net::FileStream in an IO message loop.
|
| -// |-- OnReadFileStream()
|
| -// | Actual read operation on FileStream performs here.
|
| -// |-- OnSeekFileStream()
|
| -// | Actual seek operation happens here.
|
| -// \-- OnDidFileStreamRead()
|
| -// Callback for asynchronous file read completion.
|
| -
|
| -
|
| -#ifndef CHROME_RENDERER_MEDIA_DATA_SOURCE_IMPL_H_
|
| -#define CHROME_RENDERER_MEDIA_DATA_SOURCE_IMPL_H_
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/lock.h"
|
| -#include "base/platform_file.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "base/waitable_event.h"
|
| -#include "media/base/factory.h"
|
| -#include "media/base/filters.h"
|
| -#include "media/base/media_format.h"
|
| -#include "media/base/pipeline.h"
|
| -#include "net/base/completion_callback.h"
|
| -#include "net/base/file_stream.h"
|
| -#include "webkit/glue/resource_loader_bridge.h"
|
| -
|
| -class WebMediaPlayerDelegateImpl;
|
| -
|
| -class DataSourceImpl : public media::DataSource,
|
| - public webkit_glue::ResourceLoaderBridge::Peer {
|
| - public:
|
| - // Methods called from render thread ----------------------------------------
|
| - // Static methods for creating this class.
|
| - static media::FilterFactory* CreateFactory(
|
| - WebMediaPlayerDelegateImpl* delegate) {
|
| - return new media::FilterFactoryImpl1<DataSourceImpl,
|
| - WebMediaPlayerDelegateImpl*>(delegate);
|
| - }
|
| -
|
| - // webkit_glue::ResourceLoaderBridge::Peer implementations, receive events
|
| - // for resource loading.
|
| - virtual void OnDownloadProgress(uint64 position, uint64 size);
|
| - virtual void OnUploadProgress(uint64 position, uint64 size);
|
| - virtual void OnReceivedRedirect(const GURL& new_url);
|
| - virtual void OnReceivedResponse(
|
| - const webkit_glue::ResourceLoaderBridge::ResponseInfo& info,
|
| - bool content_filtered);
|
| - virtual void OnReceivedData(const char* data, int len);
|
| - virtual void OnCompletedRequest(const URLRequestStatus& status,
|
| - const std::string& security_info);
|
| - virtual std::string GetURLForDebugging();
|
| -
|
| - // Methods called from pipeline thread --------------------------------------
|
| - virtual bool Initialize(const std::string& url);
|
| - // media::MediaFilter implementation.
|
| - virtual void Stop();
|
| -
|
| - // Methods called from demuxer thread ---------------------------------------
|
| - // media::DataSource implementation.
|
| - virtual size_t Read(uint8* data, size_t size);
|
| - virtual bool GetPosition(int64* position_out);
|
| - virtual bool SetPosition(int64 position);
|
| - virtual bool GetSize(int64* size_out);
|
| - virtual bool IsSeekable();
|
| -
|
| - const media::MediaFormat& media_format();
|
| -
|
| - private:
|
| - friend class media::FilterFactoryImpl1<DataSourceImpl,
|
| - WebMediaPlayerDelegateImpl*>;
|
| - // Call to filter host to trigger an error, be sure not to call this method
|
| - // while the lock is acquired.
|
| - void HandleError(media::PipelineError error);
|
| -
|
| - // Methods called from render thread ----------------------------------------
|
| - explicit DataSourceImpl(WebMediaPlayerDelegateImpl* delegate);
|
| - virtual ~DataSourceImpl();
|
| -
|
| - // Tasks to be posted on render thread.
|
| - void OnInitialize(std::string uri);
|
| - void OnCancel();
|
| - void OnDestroy();
|
| -
|
| - // Methods called from IO thread --------------------------------------------
|
| - // Handlers for file reading.
|
| - void OnCreateFileStream(base::PlatformFile file);
|
| - void OnReadFileStream(uint8* data, size_t size);
|
| - void OnSeekFileStream(net::Whence whence, int64 position);
|
| - void OnDidFileStreamRead(int size);
|
| -
|
| - media::MediaFormat media_format_;
|
| -
|
| - // Pointer to the delegate which provides access to RenderView, this is set
|
| - // in construction and can be accessed in all threads safely.
|
| - WebMediaPlayerDelegateImpl* delegate_;
|
| -
|
| - // Message loop of render thread.
|
| - MessageLoop* render_loop_;
|
| -
|
| - // A common lock for protecting members accessed by multiple threads.
|
| - Lock lock_;
|
| - bool stopped_;
|
| -
|
| - // URI to the resource being downloaded.
|
| - std::string uri_;
|
| -
|
| - // Members for keeping track of downloading progress.
|
| - base::WaitableEvent download_event_;
|
| - int64 downloaded_bytes_;
|
| - int64 total_bytes_;
|
| - bool total_bytes_known_;
|
| - bool download_completed_;
|
| -
|
| - // Members related to resource loading with RenderView.
|
| - scoped_ptr<webkit_glue::ResourceLoaderBridge> resource_loader_bridge_;
|
| -
|
| - // Members used for reading.
|
| - base::WaitableEvent read_event_;
|
| - net::CompletionCallbackImpl<DataSourceImpl> read_callback_;
|
| - scoped_ptr<net::FileStream> stream_;
|
| - size_t last_read_size_;
|
| - int64 position_;
|
| - MessageLoop* io_loop_;
|
| -
|
| - // Events for other operations on stream_.
|
| - base::WaitableEvent seek_event_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(DataSourceImpl);
|
| -};
|
| -
|
| -#endif // CHROME_RENDERER_MEDIA_DATA_SOURCE_IMPL_H_
|
|
|