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 |