| OLD | NEW |
| 1 // Copyright (c) 2010 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 #include "base/callback.h" | |
| 6 #include "media/base/filters.h" | 5 #include "media/base/filters.h" |
| 6 #include "media/base/mock_callback.h" |
| 7 #include "media/base/mock_filter_host.h" | 7 #include "media/base/mock_filter_host.h" |
| 8 #include "media/base/mock_filters.h" | 8 #include "media/base/mock_filters.h" |
| 9 #include "net/base/net_errors.h" | 9 #include "net/base/net_errors.h" |
| 10 #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" | 10 #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" |
| 11 #include "third_party/WebKit/WebKit/chromium/public/WebURLError.h" | 11 #include "third_party/WebKit/WebKit/chromium/public/WebURLError.h" |
| 12 #include "third_party/WebKit/WebKit/chromium/public/WebURLLoader.h" | 12 #include "third_party/WebKit/WebKit/chromium/public/WebURLLoader.h" |
| 13 #include "third_party/WebKit/WebKit/chromium/public/WebURLRequest.h" | 13 #include "third_party/WebKit/WebKit/chromium/public/WebURLRequest.h" |
| 14 #include "third_party/WebKit/WebKit/chromium/public/WebURLResponse.h" | 14 #include "third_party/WebKit/WebKit/chromium/public/WebURLResponse.h" |
| 15 #include "webkit/glue/media/simple_data_source.h" | 15 #include "webkit/glue/media/simple_data_source.h" |
| 16 #include "webkit/mocks/mock_webframe.h" | 16 #include "webkit/mocks/mock_webframe.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 SimpleDataSourceTest() { | 52 SimpleDataSourceTest() { |
| 53 for (int i = 0; i < kDataSize; ++i) { | 53 for (int i = 0; i < kDataSize; ++i) { |
| 54 data_[i] = i; | 54 data_[i] = i; |
| 55 } | 55 } |
| 56 } | 56 } |
| 57 | 57 |
| 58 virtual ~SimpleDataSourceTest() { | 58 virtual ~SimpleDataSourceTest() { |
| 59 ignore_result(frame_.release()); | 59 ignore_result(frame_.release()); |
| 60 } | 60 } |
| 61 | 61 |
| 62 void InitializeDataSource(const char* url) { | 62 void InitializeDataSource(const char* url, |
| 63 media::MockCallback* callback) { |
| 63 gurl_ = GURL(url); | 64 gurl_ = GURL(url); |
| 64 | 65 |
| 65 frame_.reset(new NiceMock<MockWebFrame>()); | 66 frame_.reset(new NiceMock<MockWebFrame>()); |
| 66 url_loader_ = new NiceMock<MockWebURLLoader>(); | 67 url_loader_ = new NiceMock<MockWebURLLoader>(); |
| 67 | 68 |
| 68 data_source_ = new SimpleDataSource(MessageLoop::current(), | 69 data_source_ = new SimpleDataSource(MessageLoop::current(), |
| 69 frame_.get()); | 70 frame_.get()); |
| 70 | 71 |
| 71 // There is no need to provide a message loop to data source. | 72 // There is no need to provide a message loop to data source. |
| 72 data_source_->set_host(&host_); | 73 data_source_->set_host(&host_); |
| 73 data_source_->SetURLLoaderForTest(url_loader_); | 74 data_source_->SetURLLoaderForTest(url_loader_); |
| 74 | 75 |
| 75 InSequence s; | 76 data_source_->Initialize(url, callback); |
| 76 | |
| 77 data_source_->Initialize(url, callback_.NewCallback()); | |
| 78 MessageLoop::current()->RunAllPending(); | 77 MessageLoop::current()->RunAllPending(); |
| 79 } | 78 } |
| 80 | 79 |
| 81 void RequestSucceeded(bool is_loaded) { | 80 void RequestSucceeded(bool is_loaded) { |
| 82 WebURLResponse response(gurl_); | 81 WebURLResponse response(gurl_); |
| 83 response.setExpectedContentLength(kDataSize); | 82 response.setExpectedContentLength(kDataSize); |
| 84 | 83 |
| 85 data_source_->didReceiveResponse(NULL, response); | 84 data_source_->didReceiveResponse(NULL, response); |
| 86 int64 size; | 85 int64 size; |
| 87 EXPECT_TRUE(data_source_->GetSize(&size)); | 86 EXPECT_TRUE(data_source_->GetSize(&size)); |
| 88 EXPECT_EQ(kDataSize, size); | 87 EXPECT_EQ(kDataSize, size); |
| 89 | 88 |
| 90 for (int i = 0; i < kDataSize; ++i) { | 89 for (int i = 0; i < kDataSize; ++i) { |
| 91 data_source_->didReceiveData(NULL, data_ + i, 1); | 90 data_source_->didReceiveData(NULL, data_ + i, 1); |
| 92 } | 91 } |
| 93 | 92 |
| 94 EXPECT_CALL(host_, SetLoaded(is_loaded)); | 93 EXPECT_CALL(host_, SetLoaded(is_loaded)); |
| 95 | 94 |
| 96 InSequence s; | 95 InSequence s; |
| 97 EXPECT_CALL(host_, SetTotalBytes(kDataSize)); | 96 EXPECT_CALL(host_, SetTotalBytes(kDataSize)); |
| 98 EXPECT_CALL(host_, SetBufferedBytes(kDataSize)); | 97 EXPECT_CALL(host_, SetBufferedBytes(kDataSize)); |
| 99 EXPECT_CALL(callback_, OnFilterCallback()); | |
| 100 EXPECT_CALL(callback_, OnCallbackDestroyed()); | |
| 101 | 98 |
| 102 data_source_->didFinishLoading(NULL, 0); | 99 data_source_->didFinishLoading(NULL, 0); |
| 103 | 100 |
| 104 // Let the tasks to be executed. | 101 // Let the tasks to be executed. |
| 105 MessageLoop::current()->RunAllPending(); | 102 MessageLoop::current()->RunAllPending(); |
| 106 } | 103 } |
| 107 | 104 |
| 108 void RequestFailed() { | 105 void RequestFailed() { |
| 109 InSequence s; | 106 InSequence s; |
| 110 EXPECT_CALL(host_, SetError(media::PIPELINE_ERROR_NETWORK)); | 107 EXPECT_CALL(host_, SetError(media::PIPELINE_ERROR_NETWORK)); |
| 111 EXPECT_CALL(callback_, OnFilterCallback()); | |
| 112 EXPECT_CALL(callback_, OnCallbackDestroyed()); | |
| 113 | 108 |
| 114 WebURLError error; | 109 WebURLError error; |
| 115 error.reason = net::ERR_FAILED; | 110 error.reason = net::ERR_FAILED; |
| 116 data_source_->didFail(NULL, error); | 111 data_source_->didFail(NULL, error); |
| 117 | 112 |
| 118 // Let the tasks to be executed. | 113 // Let the tasks to be executed. |
| 119 MessageLoop::current()->RunAllPending(); | 114 MessageLoop::current()->RunAllPending(); |
| 120 } | 115 } |
| 121 | 116 |
| 122 void DestroyDataSource() { | 117 void DestroyDataSource() { |
| 123 StrictMock<media::MockFilterCallback> callback; | 118 data_source_->Stop(media::NewExpectedCallback()); |
| 124 EXPECT_CALL(callback, OnFilterCallback()); | |
| 125 EXPECT_CALL(callback, OnCallbackDestroyed()); | |
| 126 | |
| 127 data_source_->Stop(callback.NewCallback()); | |
| 128 MessageLoop::current()->RunAllPending(); | 119 MessageLoop::current()->RunAllPending(); |
| 129 | 120 |
| 130 data_source_ = NULL; | 121 data_source_ = NULL; |
| 131 } | 122 } |
| 132 | 123 |
| 133 void AsyncRead() { | 124 void AsyncRead() { |
| 134 for (int i = 0; i < kDataSize; ++i) { | 125 for (int i = 0; i < kDataSize; ++i) { |
| 135 uint8 buffer[1]; | 126 uint8 buffer[1]; |
| 136 | 127 |
| 137 EXPECT_CALL(*this, ReadCallback(1)); | 128 EXPECT_CALL(*this, ReadCallback(1)); |
| 138 data_source_->Read( | 129 data_source_->Read( |
| 139 i, 1, buffer, | 130 i, 1, buffer, |
| 140 NewCallback(this, &SimpleDataSourceTest::ReadCallback)); | 131 NewCallback(this, &SimpleDataSourceTest::ReadCallback)); |
| 141 EXPECT_EQ(static_cast<uint8>(data_[i]), buffer[0]); | 132 EXPECT_EQ(static_cast<uint8>(data_[i]), buffer[0]); |
| 142 } | 133 } |
| 143 } | 134 } |
| 144 | 135 |
| 145 MOCK_METHOD1(ReadCallback, void(size_t size)); | 136 MOCK_METHOD1(ReadCallback, void(size_t size)); |
| 146 | 137 |
| 147 protected: | 138 protected: |
| 148 GURL gurl_; | 139 GURL gurl_; |
| 149 scoped_ptr<MessageLoop> message_loop_; | 140 scoped_ptr<MessageLoop> message_loop_; |
| 150 NiceMock<MockWebURLLoader>* url_loader_; | 141 NiceMock<MockWebURLLoader>* url_loader_; |
| 151 scoped_refptr<SimpleDataSource> data_source_; | 142 scoped_refptr<SimpleDataSource> data_source_; |
| 152 StrictMock<media::MockFilterHost> host_; | 143 StrictMock<media::MockFilterHost> host_; |
| 153 StrictMock<media::MockFilterCallback> callback_; | |
| 154 scoped_ptr<NiceMock<MockWebFrame> > frame_; | 144 scoped_ptr<NiceMock<MockWebFrame> > frame_; |
| 155 | 145 |
| 156 char data_[kDataSize]; | 146 char data_[kDataSize]; |
| 157 | 147 |
| 158 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest); | 148 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest); |
| 159 }; | 149 }; |
| 160 | 150 |
| 161 TEST_F(SimpleDataSourceTest, InitializeHTTP) { | 151 TEST_F(SimpleDataSourceTest, InitializeHTTP) { |
| 162 InitializeDataSource(kHttpUrl); | 152 InitializeDataSource(kHttpUrl, media::NewExpectedCallback()); |
| 163 RequestSucceeded(false); | 153 RequestSucceeded(false); |
| 164 DestroyDataSource(); | 154 DestroyDataSource(); |
| 165 } | 155 } |
| 166 | 156 |
| 167 TEST_F(SimpleDataSourceTest, InitializeHTTPS) { | 157 TEST_F(SimpleDataSourceTest, InitializeHTTPS) { |
| 168 InitializeDataSource(kHttpsUrl); | 158 InitializeDataSource(kHttpsUrl, media::NewExpectedCallback()); |
| 169 RequestSucceeded(false); | 159 RequestSucceeded(false); |
| 170 DestroyDataSource(); | 160 DestroyDataSource(); |
| 171 } | 161 } |
| 172 | 162 |
| 173 TEST_F(SimpleDataSourceTest, InitializeFile) { | 163 TEST_F(SimpleDataSourceTest, InitializeFile) { |
| 174 InitializeDataSource(kFileUrl); | 164 InitializeDataSource(kFileUrl, media::NewExpectedCallback()); |
| 175 RequestSucceeded(true); | 165 RequestSucceeded(true); |
| 176 DestroyDataSource(); | 166 DestroyDataSource(); |
| 177 } | 167 } |
| 178 | 168 |
| 179 TEST_F(SimpleDataSourceTest, InitializeData) { | 169 TEST_F(SimpleDataSourceTest, InitializeData) { |
| 180 frame_.reset(new NiceMock<MockWebFrame>()); | 170 frame_.reset(new NiceMock<MockWebFrame>()); |
| 181 url_loader_ = new NiceMock<MockWebURLLoader>(); | 171 url_loader_ = new NiceMock<MockWebURLLoader>(); |
| 182 | 172 |
| 183 data_source_ = new SimpleDataSource(MessageLoop::current(), | 173 data_source_ = new SimpleDataSource(MessageLoop::current(), |
| 184 frame_.get()); | 174 frame_.get()); |
| 185 EXPECT_TRUE(data_source_->IsUrlSupported(kDataUrl)); | 175 EXPECT_TRUE(data_source_->IsUrlSupported(kDataUrl)); |
| 186 | 176 |
| 187 // There is no need to provide a message loop to data source. | 177 // There is no need to provide a message loop to data source. |
| 188 data_source_->set_host(&host_); | 178 data_source_->set_host(&host_); |
| 189 data_source_->SetURLLoaderForTest(url_loader_); | 179 data_source_->SetURLLoaderForTest(url_loader_); |
| 190 | 180 |
| 191 EXPECT_CALL(host_, SetLoaded(true)); | 181 EXPECT_CALL(host_, SetLoaded(true)); |
| 192 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); | 182 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); |
| 193 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); | 183 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); |
| 194 EXPECT_CALL(callback_, OnFilterCallback()); | |
| 195 EXPECT_CALL(callback_, OnCallbackDestroyed()); | |
| 196 | 184 |
| 197 data_source_->Initialize(kDataUrl, callback_.NewCallback()); | 185 data_source_->Initialize(kDataUrl, media::NewExpectedCallback()); |
| 198 MessageLoop::current()->RunAllPending(); | 186 MessageLoop::current()->RunAllPending(); |
| 199 | 187 |
| 200 DestroyDataSource(); | 188 DestroyDataSource(); |
| 201 } | 189 } |
| 202 | 190 |
| 203 TEST_F(SimpleDataSourceTest, RequestFailed) { | 191 TEST_F(SimpleDataSourceTest, RequestFailed) { |
| 204 InitializeDataSource(kHttpUrl); | 192 InitializeDataSource(kHttpUrl, media::NewExpectedCallback()); |
| 205 RequestFailed(); | 193 RequestFailed(); |
| 206 DestroyDataSource(); | 194 DestroyDataSource(); |
| 207 } | 195 } |
| 208 | 196 |
| 209 TEST_F(SimpleDataSourceTest, StopWhenDownloading) { | 197 TEST_F(SimpleDataSourceTest, StopWhenDownloading) { |
| 210 InitializeDataSource(kHttpUrl); | 198 // The callback should be deleted, but not executed. |
| 199 // TODO(scherkus): should this really be the behaviour? Seems strange... |
| 200 StrictMock<media::MockCallback>* callback = |
| 201 new StrictMock<media::MockCallback>(); |
| 202 EXPECT_CALL(*callback, Destructor()); |
| 203 |
| 204 InitializeDataSource(kHttpUrl, callback); |
| 211 | 205 |
| 212 EXPECT_CALL(*url_loader_, cancel()); | 206 EXPECT_CALL(*url_loader_, cancel()); |
| 213 EXPECT_CALL(callback_, OnCallbackDestroyed()); | |
| 214 DestroyDataSource(); | 207 DestroyDataSource(); |
| 215 } | 208 } |
| 216 | 209 |
| 217 TEST_F(SimpleDataSourceTest, AsyncRead) { | 210 TEST_F(SimpleDataSourceTest, AsyncRead) { |
| 218 InitializeDataSource(kFileUrl); | 211 InitializeDataSource(kFileUrl, media::NewExpectedCallback()); |
| 219 RequestSucceeded(true); | 212 RequestSucceeded(true); |
| 220 AsyncRead(); | 213 AsyncRead(); |
| 221 DestroyDataSource(); | 214 DestroyDataSource(); |
| 222 } | 215 } |
| 223 | 216 |
| 224 } // namespace webkit_glue | 217 } // namespace webkit_glue |
| OLD | NEW |