| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // An extremely simple implementation of DataSource that downloads the entire | |
| 6 // media resource into memory before signaling that initialization has finished. | |
| 7 // Primarily used to test <audio> and <video> with buffering/caching removed | |
| 8 // from the equation. | |
| 9 | |
| 10 #ifndef WEBKIT_GLUE_MEDIA_SIMPLE_DATA_SOURCE_H_ | |
| 11 #define WEBKIT_GLUE_MEDIA_SIMPLE_DATA_SOURCE_H_ | |
| 12 | |
| 13 #include <algorithm> | |
| 14 #include <string> | |
| 15 | |
| 16 #include "base/memory/scoped_ptr.h" | |
| 17 #include "base/message_loop.h" | |
| 18 #include "media/base/filter_factories.h" | |
| 19 #include "media/base/filters.h" | |
| 20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | |
| 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" | |
| 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoaderClient.h" | |
| 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" | |
| 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLResponse.h" | |
| 25 #include "webkit/glue/media/web_data_source.h" | |
| 26 | |
| 27 class MessageLoop; | |
| 28 class WebMediaPlayerDelegateImpl; | |
| 29 | |
| 30 namespace media { | |
| 31 class MediaLog; | |
| 32 } | |
| 33 | |
| 34 namespace webkit_glue { | |
| 35 | |
| 36 class SimpleDataSource | |
| 37 : public WebDataSource, | |
| 38 public WebKit::WebURLLoaderClient { | |
| 39 public: | |
| 40 // Creates a DataSourceFactory for building SimpleDataSource objects. | |
| 41 static media::DataSourceFactory* CreateFactory( | |
| 42 MessageLoop* render_loop, | |
| 43 WebKit::WebFrame* frame, | |
| 44 media::MediaLog* media_log, | |
| 45 const WebDataSourceBuildObserverHack& build_observer); | |
| 46 | |
| 47 SimpleDataSource(MessageLoop* render_loop, WebKit::WebFrame* frame); | |
| 48 virtual ~SimpleDataSource(); | |
| 49 | |
| 50 // media::Filter implementation. | |
| 51 virtual void set_host(media::FilterHost* host); | |
| 52 virtual void Stop(const base::Closure& callback); | |
| 53 | |
| 54 // media::DataSource implementation. | |
| 55 virtual void Read(int64 position, size_t size, | |
| 56 uint8* data, const DataSource::ReadCallback& read_callback); | |
| 57 virtual bool GetSize(int64* size_out); | |
| 58 virtual bool IsStreaming(); | |
| 59 virtual void SetPreload(media::Preload preload); | |
| 60 virtual void SetBitrate(int bitrate); | |
| 61 | |
| 62 // Used to inject a mock used for unittests. | |
| 63 virtual void SetURLLoaderForTest(WebKit::WebURLLoader* mock_loader); | |
| 64 | |
| 65 // WebKit::WebURLLoaderClient implementations. | |
| 66 virtual void willSendRequest( | |
| 67 WebKit::WebURLLoader* loader, | |
| 68 WebKit::WebURLRequest& newRequest, | |
| 69 const WebKit::WebURLResponse& redirectResponse); | |
| 70 virtual void didSendData( | |
| 71 WebKit::WebURLLoader* loader, | |
| 72 unsigned long long bytesSent, | |
| 73 unsigned long long totalBytesToBeSent); | |
| 74 virtual void didReceiveResponse( | |
| 75 WebKit::WebURLLoader* loader, | |
| 76 const WebKit::WebURLResponse& response); | |
| 77 virtual void didDownloadData( | |
| 78 WebKit::WebURLLoader* loader, | |
| 79 int dataLength); | |
| 80 virtual void didReceiveData( | |
| 81 WebKit::WebURLLoader* loader, | |
| 82 const char* data, | |
| 83 int dataLength, | |
| 84 int encodedDataLength); | |
| 85 virtual void didReceiveCachedMetadata( | |
| 86 WebKit::WebURLLoader* loader, | |
| 87 const char* data, int dataLength); | |
| 88 virtual void didFinishLoading( | |
| 89 WebKit::WebURLLoader* loader, | |
| 90 double finishTime); | |
| 91 virtual void didFail( | |
| 92 WebKit::WebURLLoader* loader, | |
| 93 const WebKit::WebURLError&); | |
| 94 | |
| 95 // webkit_glue::WebDataSource implementation. | |
| 96 virtual void Initialize(const std::string& url, | |
| 97 const media::PipelineStatusCB& callback); | |
| 98 virtual void CancelInitialize(); | |
| 99 virtual bool HasSingleOrigin(); | |
| 100 virtual void Abort(); | |
| 101 | |
| 102 private: | |
| 103 // Creates and starts the resource loading on the render thread. | |
| 104 void StartTask(); | |
| 105 | |
| 106 // Cancels and deletes the resource loading on the render thread. | |
| 107 void CancelTask(); | |
| 108 | |
| 109 // Perform initialization completion tasks under a lock. | |
| 110 void DoneInitialization_Locked(bool success); | |
| 111 | |
| 112 // Update host() stats like total bytes & buffered bytes. | |
| 113 void UpdateHostState(); | |
| 114 | |
| 115 // Primarily used for asserting the bridge is loading on the render thread. | |
| 116 MessageLoop* render_loop_; | |
| 117 | |
| 118 // A webframe for loading. | |
| 119 WebKit::WebFrame* frame_; | |
| 120 | |
| 121 // Does the work of loading and sends data back to this client. | |
| 122 scoped_ptr<WebKit::WebURLLoader> url_loader_; | |
| 123 | |
| 124 GURL url_; | |
| 125 std::string data_; | |
| 126 int64 size_; | |
| 127 bool single_origin_; | |
| 128 | |
| 129 // Simple state tracking variable. | |
| 130 enum State { | |
| 131 UNINITIALIZED, | |
| 132 INITIALIZING, | |
| 133 INITIALIZED, | |
| 134 STOPPED, | |
| 135 }; | |
| 136 State state_; | |
| 137 | |
| 138 // Used for accessing |state_|. | |
| 139 base::Lock lock_; | |
| 140 | |
| 141 // Filter callbacks. | |
| 142 media::PipelineStatusCB initialize_cb_; | |
| 143 | |
| 144 // Used to ensure mocks for unittests are used instead of reset in Start(). | |
| 145 bool keep_test_loader_; | |
| 146 | |
| 147 DISALLOW_COPY_AND_ASSIGN(SimpleDataSource); | |
| 148 }; | |
| 149 | |
| 150 } // namespace webkit_glue | |
| 151 | |
| 152 #endif // WEBKIT_GLUE_MEDIA_SIMPLE_DATA_SOURCE_H_ | |
| OLD | NEW |