Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: webkit/glue/media/buffered_data_source_unittest.cc

Issue 3863002: Refactoring BufferedDataSource to work with WebURLLoader instead of a MediaResourceLoaderBridge. (Closed) Base URL: http://git.chromium.org/git/chromium.git
Patch Set: Removed unnecessary WebURLLoaders in the two unittests because windows compilation complains. Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 <algorithm> 5 #include <algorithm>
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/format_macros.h" 8 #include "base/format_macros.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "base/stringprintf.h" 11 #include "base/stringprintf.h"
12 #include "media/base/filters.h" 12 #include "media/base/filters.h"
13 #include "media/base/mock_filter_host.h" 13 #include "media/base/mock_filter_host.h"
14 #include "media/base/mock_filters.h" 14 #include "media/base/mock_filters.h"
15 #include "net/base/net_errors.h" 15 #include "net/base/net_errors.h"
16 #include "net/http/http_response_headers.h" 16 #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
17 #include "third_party/WebKit/WebKit/chromium/public/WebFrameClient.h"
18 #include "third_party/WebKit/WebKit/chromium/public/WebString.h"
19 #include "third_party/WebKit/WebKit/chromium/public/WebURLError.h"
20 #include "third_party/WebKit/WebKit/chromium/public/WebURLLoader.h"
21 #include "third_party/WebKit/WebKit/chromium/public/WebURLRequest.h"
22 #include "third_party/WebKit/WebKit/chromium/public/WebURLResponse.h"
23 #include "third_party/WebKit/WebKit/chromium/public/WebView.h"
17 #include "webkit/glue/media/buffered_data_source.h" 24 #include "webkit/glue/media/buffered_data_source.h"
18 #include "webkit/glue/media/mock_media_resource_loader_bridge_factory.h" 25 #include "webkit/glue/media/mock_webframe.h"
19 #include "webkit/glue/mock_resource_loader_bridge.h" 26 #include "webkit/glue/mock_weburlloader_impl.h"
20 27
21 using ::testing::_; 28 using ::testing::_;
22 using ::testing::Assign; 29 using ::testing::Assign;
30 using ::testing::AtLeast;
23 using ::testing::DeleteArg; 31 using ::testing::DeleteArg;
24 using ::testing::DoAll; 32 using ::testing::DoAll;
25 using ::testing::InSequence; 33 using ::testing::InSequence;
26 using ::testing::Invoke; 34 using ::testing::Invoke;
27 using ::testing::InvokeWithoutArgs; 35 using ::testing::InvokeWithoutArgs;
28 using ::testing::NotNull; 36 using ::testing::NotNull;
29 using ::testing::Return; 37 using ::testing::Return;
30 using ::testing::ReturnRef; 38 using ::testing::ReturnRef;
31 using ::testing::SetArgumentPointee; 39 using ::testing::SetArgumentPointee;
32 using ::testing::StrictMock; 40 using ::testing::StrictMock;
33 using ::testing::NiceMock; 41 using ::testing::NiceMock;
34 using ::testing::WithArgs; 42 using ::testing::WithArgs;
35 43
44 using WebKit::WebURLError;
45 using WebKit::WebFrame;
46 using WebKit::WebFrameClient;
47 using WebKit::WebString;
48 using WebKit::WebURLLoader;
49 using WebKit::WebURLRequest;
50 using WebKit::WebURLResponse;
51 using WebKit::WebView;
52
36 namespace { 53 namespace {
37 54
38 const char* kHttpUrl = "http://test"; 55 const char* kHttpUrl = "http://test";
39 const char* kFileUrl = "file://test"; 56 const char* kFileUrl = "file://test";
40 const int kDataSize = 1024; 57 const int kDataSize = 1024;
58 const int kHttpOK = 200;
59 const int kHttpPartialContent = 206;
41 60
42 enum NetworkState { 61 enum NetworkState {
43 NONE, 62 NONE,
44 LOADED, 63 LOADED,
45 LOADING 64 LOADING
46 }; 65 };
47 66
67 class TestWebFrameClient : public WebFrameClient {
68 };
69
48 } // namespace 70 } // namespace
49 71
50 namespace webkit_glue { 72 namespace webkit_glue {
51 73
52 // Submit a request completed event to the resource loader due to request 74 // Submit a request completed event to the resource loader due to request
53 // being canceled. Pretending the event is from external. 75 // being canceled. Pretending the event is from external.
54 ACTION_P(RequestCanceled, loader) { 76 ACTION_P(RequestCanceled, loader) {
55 URLRequestStatus status; 77 WebURLError error;
56 status.set_status(URLRequestStatus::CANCELED); 78 error.reason = net::ERR_ABORTED;
57 status.set_os_error(net::ERR_ABORTED); 79 error.domain = WebString::fromUTF8(net::kErrorDomain);
58 loader->OnCompletedRequest(status, "", base::Time()); 80 loader->didFail(NULL, error);
59 } 81 }
60 82
61 class BufferedResourceLoaderTest : public testing::Test { 83 class BufferedResourceLoaderTest : public testing::Test {
62 public: 84 public:
63 BufferedResourceLoaderTest() { 85 BufferedResourceLoaderTest() {
64 bridge_.reset(new StrictMock<MockResourceLoaderBridge>()); 86 url_loader_ = new NiceMock<MockWebURLLoader>();
65 87
66 for (int i = 0; i < kDataSize; ++i) 88 for (int i = 0; i < kDataSize; ++i)
67 data_[i] = i; 89 data_[i] = i;
68 } 90 }
69 91
70 ~BufferedResourceLoaderTest() { 92 ~BufferedResourceLoaderTest() {
71 if (bridge_.get()) 93 if (frame_.get()) {
72 EXPECT_CALL(*bridge_, OnDestroy()); 94 EXPECT_CALL(*frame_, OnFrameDestroy())
73 EXPECT_CALL(bridge_factory_, OnDestroy()); 95 .WillOnce(Invoke(this, &BufferedResourceLoaderTest::ReleaseWebFrame));
96 }
74 } 97 }
75 98
76 void Initialize(const char* url, int first_position, int last_position) { 99 void Initialize(const char* url, int first_position, int last_position) {
77 gurl_ = GURL(url); 100 gurl_ = GURL(url);
78 first_position_ = first_position; 101 first_position_ = first_position;
79 last_position_ = last_position; 102 last_position_ = last_position;
80 103
81 loader_ = new BufferedResourceLoader(&bridge_factory_, gurl_, 104 frame_.reset(new NiceMock<MockWebFrame>());
105
106 loader_ = new BufferedResourceLoader(gurl_,
82 first_position_, last_position_); 107 first_position_, last_position_);
108 loader_->SetURLLoaderForTest(url_loader_);
83 } 109 }
84 110
85 void SetLoaderBuffer(size_t forward_capacity, size_t backward_capacity) { 111 void SetLoaderBuffer(size_t forward_capacity, size_t backward_capacity) {
86 loader_->buffer_.reset( 112 loader_->buffer_.reset(
87 new media::SeekableBuffer(backward_capacity, forward_capacity)); 113 new media::SeekableBuffer(backward_capacity, forward_capacity));
88 } 114 }
89 115
90 void Start() { 116 void Start() {
91 InSequence s; 117 InSequence s;
92 EXPECT_CALL(bridge_factory_, 118 EXPECT_CALL(*url_loader_, loadAsynchronously(_, loader_.get()));
93 CreateBridge(gurl_, _, first_position_, last_position_))
94 .WillOnce(Return(bridge_.get()));
95 EXPECT_CALL(*bridge_, Start(loader_.get()));
96 loader_->Start( 119 loader_->Start(
97 NewCallback(this, &BufferedResourceLoaderTest::StartCallback), 120 NewCallback(this, &BufferedResourceLoaderTest::StartCallback),
98 NewCallback(this, &BufferedResourceLoaderTest::NetworkCallback)); 121 NewCallback(this, &BufferedResourceLoaderTest::NetworkCallback),
122 frame_.get());
99 } 123 }
100 124
101 void FullResponse(int64 instance_size) { 125 void FullResponse(int64 instance_size) {
102 EXPECT_CALL(*this, StartCallback(net::OK)); 126 EXPECT_CALL(*this, StartCallback(net::OK));
103 ResourceResponseInfo info; 127
104 std::string header = base::StringPrintf("HTTP/1.1 200 OK\n" 128 WebURLResponse response(gurl_);
105 "Content-Length: %" PRId64, 129 response.setHTTPHeaderField(WebString::fromUTF8("Content-Length"),
106 instance_size); 130 WebString::fromUTF8(base::StringPrintf("%"
107 replace(header.begin(), header.end(), '\n', '\0'); 131 PRId64, instance_size)));
108 info.headers = new net::HttpResponseHeaders(header); 132 response.setExpectedContentLength(instance_size);
109 info.content_length = instance_size; 133 response.setHTTPStatusCode(kHttpOK);
110 loader_->OnReceivedResponse(info, false); 134 loader_->didReceiveResponse(url_loader_, response);
111 EXPECT_EQ(instance_size, loader_->content_length()); 135 EXPECT_EQ(instance_size, loader_->content_length());
112 EXPECT_EQ(instance_size, loader_->instance_size()); 136 EXPECT_EQ(instance_size, loader_->instance_size());
113 EXPECT_FALSE(loader_->partial_response()); 137 EXPECT_FALSE(loader_->partial_response());
114 } 138 }
115 139
116 void PartialResponse(int64 first_position, int64 last_position, 140 void PartialResponse(int64 first_position, int64 last_position,
117 int64 instance_size) { 141 int64 instance_size) {
118 EXPECT_CALL(*this, StartCallback(net::OK)); 142 EXPECT_CALL(*this, StartCallback(net::OK));
119 int64 content_length = last_position - first_position + 1; 143 int64 content_length = last_position - first_position + 1;
120 ResourceResponseInfo info; 144
121 std::string header = base::StringPrintf("HTTP/1.1 206 Partial Content\n" 145 WebURLResponse response(gurl_);
122 "Content-Range: bytes " 146 response.setHTTPHeaderField(WebString::fromUTF8("Content-Range"),
147 WebString::fromUTF8(base::StringPrintf("bytes "
Alpha Left Google 2010/11/19 22:53:42 nit: indentation
123 "%" PRId64 "-%" PRId64 "/%" PRId64, 148 "%" PRId64 "-%" PRId64 "/%" PRId64,
124 first_position, 149 first_position,
125 last_position, 150 last_position,
126 instance_size); 151 instance_size)));
127 replace(header.begin(), header.end(), '\n', '\0'); 152 response.setExpectedContentLength(content_length);
128 info.headers = new net::HttpResponseHeaders(header); 153 response.setHTTPStatusCode(kHttpPartialContent);
129 info.content_length = content_length; 154 loader_->didReceiveResponse(url_loader_, response);
130 loader_->OnReceivedResponse(info, false);
131 EXPECT_EQ(content_length, loader_->content_length()); 155 EXPECT_EQ(content_length, loader_->content_length());
132 EXPECT_EQ(instance_size, loader_->instance_size()); 156 EXPECT_EQ(instance_size, loader_->instance_size());
133 EXPECT_TRUE(loader_->partial_response()); 157 EXPECT_TRUE(loader_->partial_response());
134 } 158 }
135 159
136 void StopWhenLoad() { 160 void StopWhenLoad() {
137 InSequence s; 161 InSequence s;
138 EXPECT_CALL(*bridge_, Cancel()) 162 EXPECT_CALL(*url_loader_, cancel())
139 .WillOnce(RequestCanceled(loader_)); 163 .WillOnce(RequestCanceled(loader_));
140 EXPECT_CALL(*bridge_, OnDestroy()) 164 EXPECT_CALL(*url_loader_, OnURLDestroy());
141 .WillOnce(Invoke(this, &BufferedResourceLoaderTest::ReleaseBridge));
142 loader_->Stop(); 165 loader_->Stop();
143 } 166 }
144 167
145 void ReleaseBridge() { 168 void ReleaseWebFrame() {
146 ignore_result(bridge_.release()); 169 ignore_result(frame_.release());
147 } 170 }
148 171
149 // Helper method to write to |loader_| from |data_|. 172 // Helper method to write to |loader_| from |data_|.
150 void WriteLoader(int position, int size) { 173 void WriteLoader(int position, int size) {
151 EXPECT_CALL(*this, NetworkCallback()) 174 EXPECT_CALL(*this, NetworkCallback())
152 .RetiresOnSaturation(); 175 .RetiresOnSaturation();
153 loader_->OnReceivedData(reinterpret_cast<char*>(data_ + position), size); 176 loader_->didReceiveData(url_loader_,
177 reinterpret_cast<char*>(data_ + position), size);
154 } 178 }
155 179
156 // Helper method to read from |loader_|. 180 // Helper method to read from |loader_|.
157 void ReadLoader(int64 position, int size, uint8* buffer) { 181 void ReadLoader(int64 position, int size, uint8* buffer) {
158 loader_->Read(position, size, buffer, 182 loader_->Read(position, size, buffer,
159 NewCallback(this, &BufferedResourceLoaderTest::ReadCallback)); 183 NewCallback(this, &BufferedResourceLoaderTest::ReadCallback));
160 } 184 }
161 185
162 // Verifis that data in buffer[0...size] is equal to data_[pos...pos+size]. 186 // Verifis that data in buffer[0...size] is equal to data_[pos...pos+size].
163 void VerifyBuffer(uint8* buffer, int pos, int size) { 187 void VerifyBuffer(uint8* buffer, int pos, int size) {
164 EXPECT_EQ(0, memcmp(buffer, data_ + pos, size)); 188 EXPECT_EQ(0, memcmp(buffer, data_ + pos, size));
165 } 189 }
166 190
167 // Helper method to disallow deferring in |loader_|. 191 // Helper method to disallow deferring in |loader_|.
168 void DisallowLoaderDefer() { 192 void DisallowLoaderDefer() {
169 if (loader_->deferred_) { 193 if (loader_->deferred_) {
170 EXPECT_CALL(*bridge_, SetDefersLoading(false)); 194 EXPECT_CALL(*url_loader_, setDefersLoading(false));
171 EXPECT_CALL(*this, NetworkCallback()); 195 EXPECT_CALL(*this, NetworkCallback());
172 } 196 }
173 loader_->SetAllowDefer(false); 197 loader_->SetAllowDefer(false);
174 } 198 }
175 199
176 // Helper method to allow deferring in |loader_|. 200 // Helper method to allow deferring in |loader_|.
177 void AllowLoaderDefer() { 201 void AllowLoaderDefer() {
178 loader_->SetAllowDefer(true); 202 loader_->SetAllowDefer(true);
179 } 203 }
180 204
181 MOCK_METHOD1(StartCallback, void(int error)); 205 MOCK_METHOD1(StartCallback, void(int error));
182 MOCK_METHOD1(ReadCallback, void(int error)); 206 MOCK_METHOD1(ReadCallback, void(int error));
183 MOCK_METHOD0(NetworkCallback, void()); 207 MOCK_METHOD0(NetworkCallback, void());
184 208
185 protected: 209 protected:
186 GURL gurl_; 210 GURL gurl_;
187 int64 first_position_; 211 int64 first_position_;
188 int64 last_position_; 212 int64 last_position_;
189 213
190 scoped_refptr<BufferedResourceLoader> loader_; 214 scoped_refptr<BufferedResourceLoader> loader_;
191 StrictMock<MockMediaResourceLoaderBridgeFactory> bridge_factory_; 215 NiceMock<MockWebURLLoader>* url_loader_;
192 scoped_ptr<StrictMock<MockResourceLoaderBridge> > bridge_; 216 scoped_ptr<NiceMock<MockWebFrame> > frame_;
193 217
194 uint8 data_[kDataSize]; 218 uint8 data_[kDataSize];
195 219
196 private: 220 private:
197 DISALLOW_COPY_AND_ASSIGN(BufferedResourceLoaderTest); 221 DISALLOW_COPY_AND_ASSIGN(BufferedResourceLoaderTest);
198 }; 222 };
199 223
200 TEST_F(BufferedResourceLoaderTest, StartStop) { 224 TEST_F(BufferedResourceLoaderTest, StartStop) {
201 Initialize(kHttpUrl, -1, -1); 225 Initialize(kHttpUrl, -1, -1);
202 Start(); 226 Start();
203 StopWhenLoad(); 227 StopWhenLoad();
204 } 228 }
205 229
206 // Tests that HTTP header is missing in the response.
207 TEST_F(BufferedResourceLoaderTest, MissingHttpHeader) {
208 Initialize(kHttpUrl, -1, -1);
209 Start();
210
211 EXPECT_CALL(*this, StartCallback(net::ERR_INVALID_RESPONSE));
212 EXPECT_CALL(*bridge_, Cancel())
213 .WillOnce(RequestCanceled(loader_));
214 EXPECT_CALL(*bridge_, OnDestroy())
215 .WillOnce(Invoke(this, &BufferedResourceLoaderTest::ReleaseBridge));
216
217 ResourceResponseInfo info;
218 loader_->OnReceivedResponse(info, false);
219 }
220
221 // Tests that a bad HTTP response is recived, e.g. file not found. 230 // Tests that a bad HTTP response is recived, e.g. file not found.
222 TEST_F(BufferedResourceLoaderTest, BadHttpResponse) { 231 TEST_F(BufferedResourceLoaderTest, BadHttpResponse) {
223 Initialize(kHttpUrl, -1, -1); 232 Initialize(kHttpUrl, -1, -1);
224 Start(); 233 Start();
225 234
226 EXPECT_CALL(*this, StartCallback(net::ERR_FAILED)); 235 EXPECT_CALL(*this, StartCallback(net::ERR_FAILED));
227 EXPECT_CALL(*bridge_, Cancel()) 236 EXPECT_CALL(*url_loader_, cancel())
228 .WillOnce(RequestCanceled(loader_)); 237 .WillOnce(RequestCanceled(loader_));
229 EXPECT_CALL(*bridge_, OnDestroy()) 238 EXPECT_CALL(*url_loader_, OnURLDestroy());
230 .WillOnce(Invoke(this, &BufferedResourceLoaderTest::ReleaseBridge));
231 239
232 ResourceResponseInfo info; 240 WebURLResponse response(gurl_);
233 info.headers = new net::HttpResponseHeaders("HTTP/1.1 404 Not Found\n"); 241 response.setHTTPStatusCode(404);
234 loader_->OnReceivedResponse(info, false); 242 response.setHTTPStatusText("Not Found\n");
243 loader_->didReceiveResponse(url_loader_, response);
235 } 244 }
236 245
237 // Tests that partial content is requested but not fulfilled. 246 // Tests that partial content is requested but not fulfilled.
238 TEST_F(BufferedResourceLoaderTest, NotPartialResponse) { 247 TEST_F(BufferedResourceLoaderTest, NotPartialResponse) {
239 Initialize(kHttpUrl, 100, -1); 248 Initialize(kHttpUrl, 100, -1);
240 Start(); 249 Start();
241 FullResponse(1024); 250 FullResponse(1024);
242 StopWhenLoad(); 251 StopWhenLoad();
243 } 252 }
244 253
(...skipping 12 matching lines...) Expand all
257 PartialResponse(100, 200, 1024); 266 PartialResponse(100, 200, 1024);
258 StopWhenLoad(); 267 StopWhenLoad();
259 } 268 }
260 269
261 // Tests that an invalid partial response is received. 270 // Tests that an invalid partial response is received.
262 TEST_F(BufferedResourceLoaderTest, InvalidPartialResponse) { 271 TEST_F(BufferedResourceLoaderTest, InvalidPartialResponse) {
263 Initialize(kHttpUrl, 0, 10); 272 Initialize(kHttpUrl, 0, 10);
264 Start(); 273 Start();
265 274
266 EXPECT_CALL(*this, StartCallback(net::ERR_INVALID_RESPONSE)); 275 EXPECT_CALL(*this, StartCallback(net::ERR_INVALID_RESPONSE));
267 EXPECT_CALL(*bridge_, Cancel()) 276 EXPECT_CALL(*url_loader_, cancel())
268 .WillOnce(RequestCanceled(loader_)); 277 .WillOnce(RequestCanceled(loader_));
269 EXPECT_CALL(*bridge_, OnDestroy()) 278 EXPECT_CALL(*url_loader_, OnURLDestroy());
270 .WillOnce(Invoke(this, &BufferedResourceLoaderTest::ReleaseBridge));
271 279
272 ResourceResponseInfo info; 280 WebURLResponse response(gurl_);
273 std::string header = base::StringPrintf("HTTP/1.1 206 Partial Content\n" 281 response.setHTTPHeaderField(WebString::fromUTF8("Content-Range"),
274 "Content-Range: bytes %d-%d/%d", 282 WebString::fromUTF8(base::StringPrintf("bytes "
275 1, 10, 1024); 283 "%d-%d/%d", 1, 10, 1024)));
Alpha Left Google 2010/11/19 22:53:42 nit: indentation
276 replace(header.begin(), header.end(), '\n', '\0'); 284 response.setExpectedContentLength(10);
277 info.headers = new net::HttpResponseHeaders(header); 285 response.setHTTPStatusCode(kHttpPartialContent);
278 info.content_length = 10; 286 loader_->didReceiveResponse(url_loader_, response);
279 loader_->OnReceivedResponse(info, false);
280 } 287 }
281 288
282 // Tests the logic of sliding window for data buffering and reading. 289 // Tests the logic of sliding window for data buffering and reading.
283 TEST_F(BufferedResourceLoaderTest, BufferAndRead) { 290 TEST_F(BufferedResourceLoaderTest, BufferAndRead) {
284 Initialize(kHttpUrl, 10, 29); 291 Initialize(kHttpUrl, 10, 29);
285 Start(); 292 Start();
286 PartialResponse(10, 29, 30); 293 PartialResponse(10, 29, 30);
287 294
295 EXPECT_CALL(*url_loader_, OnURLDestroy())
296 .Times(AtLeast(0));
297
288 uint8 buffer[10]; 298 uint8 buffer[10];
289 InSequence s; 299 InSequence s;
290 300
291 // Writes 10 bytes and read them back. 301 // Writes 10 bytes and read them back.
292 WriteLoader(10, 10); 302 WriteLoader(10, 10);
293 EXPECT_CALL(*this, ReadCallback(10)); 303 EXPECT_CALL(*this, ReadCallback(10));
294 ReadLoader(10, 10, buffer); 304 ReadLoader(10, 10, buffer);
295 VerifyBuffer(buffer, 10, 10); 305 VerifyBuffer(buffer, 10, 10);
296 306
297 // Writes 10 bytes and read 2 times. 307 // Writes 10 bytes and read 2 times.
298 WriteLoader(20, 10); 308 WriteLoader(20, 10);
299 EXPECT_CALL(*this, ReadCallback(5)); 309 EXPECT_CALL(*this, ReadCallback(5));
300 ReadLoader(20, 5, buffer); 310 ReadLoader(20, 5, buffer);
301 VerifyBuffer(buffer, 20, 5); 311 VerifyBuffer(buffer, 20, 5);
302 EXPECT_CALL(*this, ReadCallback(5)); 312 EXPECT_CALL(*this, ReadCallback(5));
303 ReadLoader(25, 5, buffer); 313 ReadLoader(25, 5, buffer);
304 VerifyBuffer(buffer, 25, 5); 314 VerifyBuffer(buffer, 25, 5);
305 315
306 // Read backward within buffer. 316 // Read backward within buffer.
307 EXPECT_CALL(*this, ReadCallback(10)); 317 EXPECT_CALL(*this, ReadCallback(10));
308 ReadLoader(10, 10, buffer); 318 ReadLoader(10, 10, buffer);
309 VerifyBuffer(buffer, 10, 10); 319 VerifyBuffer(buffer, 10, 10);
310 320
311 // Read backward outside buffer. 321 // Read backward outside buffer.
312 EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS)); 322 EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS));
313 ReadLoader(9, 10, buffer); 323 ReadLoader(9, 10, buffer);
314 324
315 // Response has completed. 325 // Response has completed.
316 EXPECT_CALL(*this, NetworkCallback()); 326 EXPECT_CALL(*this, NetworkCallback());
317 EXPECT_CALL(*bridge_, OnDestroy()) 327 loader_->didFinishLoading(url_loader_, 0);
318 .WillOnce(Invoke(this, &BufferedResourceLoaderTest::ReleaseBridge));
319 URLRequestStatus status;
320 status.set_status(URLRequestStatus::SUCCESS);
321 loader_->OnCompletedRequest(status, "", base::Time());
322 328
323 // Try to read 10 from position 25 will just return with 5 bytes. 329 // Try to read 10 from position 25 will just return with 5 bytes.
324 EXPECT_CALL(*this, ReadCallback(5)); 330 EXPECT_CALL(*this, ReadCallback(5));
325 ReadLoader(25, 10, buffer); 331 ReadLoader(25, 10, buffer);
326 VerifyBuffer(buffer, 25, 5); 332 VerifyBuffer(buffer, 25, 5);
327 333
328 // Try to read outside buffered range after request has completed. 334 // Try to read outside buffered range after request has completed.
329 EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS)); 335 EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS));
330 ReadLoader(5, 10, buffer); 336 ReadLoader(5, 10, buffer);
331 337
(...skipping 21 matching lines...) Expand all
353 // Writing to loader will fulfill the read request. 359 // Writing to loader will fulfill the read request.
354 EXPECT_CALL(*this, ReadCallback(10)); 360 EXPECT_CALL(*this, ReadCallback(10));
355 WriteLoader(10, 20); 361 WriteLoader(10, 20);
356 VerifyBuffer(buffer, 10, 10); 362 VerifyBuffer(buffer, 10, 10);
357 363
358 // The following call cannot be fulfilled now. 364 // The following call cannot be fulfilled now.
359 ReadLoader(25, 10, buffer); 365 ReadLoader(25, 10, buffer);
360 366
361 EXPECT_CALL(*this, ReadCallback(5)); 367 EXPECT_CALL(*this, ReadCallback(5));
362 EXPECT_CALL(*this, NetworkCallback()); 368 EXPECT_CALL(*this, NetworkCallback());
363 EXPECT_CALL(*bridge_, OnDestroy()) 369 EXPECT_CALL(*url_loader_, OnURLDestroy());
364 .WillOnce(Invoke(this, &BufferedResourceLoaderTest::ReleaseBridge)); 370 loader_->didFinishLoading(url_loader_, 0);
365 URLRequestStatus status;
366 status.set_status(URLRequestStatus::SUCCESS);
367 loader_->OnCompletedRequest(status, "", base::Time());
368 } 371 }
369 372
370 TEST_F(BufferedResourceLoaderTest, RequestFailedWhenRead) { 373 TEST_F(BufferedResourceLoaderTest, RequestFailedWhenRead) {
371 Initialize(kHttpUrl, 10, 29); 374 Initialize(kHttpUrl, 10, 29);
372 Start(); 375 Start();
373 PartialResponse(10, 29, 30); 376 PartialResponse(10, 29, 30);
374 377
375 uint8 buffer[10]; 378 uint8 buffer[10];
376 InSequence s; 379 InSequence s;
377 380
378 ReadLoader(10, 10, buffer); 381 ReadLoader(10, 10, buffer);
379 EXPECT_CALL(*this, ReadCallback(net::ERR_FAILED)); 382 EXPECT_CALL(*this, ReadCallback(net::ERR_FAILED));
380 EXPECT_CALL(*this, NetworkCallback()); 383 EXPECT_CALL(*this, NetworkCallback());
381 EXPECT_CALL(*bridge_, OnDestroy()) 384 WebURLError error;
382 .WillOnce(Invoke(this, &BufferedResourceLoaderTest::ReleaseBridge)); 385 error.reason = net::ERR_FAILED;
383 URLRequestStatus status; 386 EXPECT_CALL(*url_loader_, OnURLDestroy());
384 status.set_status(URLRequestStatus::FAILED); 387 loader_->didFail(url_loader_, error);
385 loader_->OnCompletedRequest(status, "", base::Time());
386 } 388 }
387 389
388 // Tests the logic of caching data to disk when media is paused. 390 // Tests the logic of caching data to disk when media is paused.
389 TEST_F(BufferedResourceLoaderTest, AllowDefer_NoDataReceived) { 391 TEST_F(BufferedResourceLoaderTest, AllowDefer_NoDataReceived) {
390 Initialize(kHttpUrl, 10, 99); 392 Initialize(kHttpUrl, 10, 99);
391 SetLoaderBuffer(10, 20); 393 SetLoaderBuffer(10, 20);
392 Start(); 394 Start();
393 PartialResponse(10, 99, 100); 395 PartialResponse(10, 99, 100);
394 396
395 // Start in undeferred state, then disallow defer, then allow defer 397 // Start in undeferred state, then disallow defer, then allow defer
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredNoDataReceived) { 444 TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredNoDataReceived) {
443 Initialize(kHttpUrl, 10, 99); 445 Initialize(kHttpUrl, 10, 99);
444 SetLoaderBuffer(10, 20); 446 SetLoaderBuffer(10, 20);
445 Start(); 447 Start();
446 PartialResponse(10, 99, 100); 448 PartialResponse(10, 99, 100);
447 449
448 uint8 buffer[10]; 450 uint8 buffer[10];
449 451
450 // Start in deferred state, then disallow defer, receive no data, and 452 // Start in deferred state, then disallow defer, receive no data, and
451 // allow defer and read. 453 // allow defer and read.
452 EXPECT_CALL(*bridge_, SetDefersLoading(true)); 454 EXPECT_CALL(*url_loader_, setDefersLoading(true));
453 EXPECT_CALL(*this, NetworkCallback()); 455 EXPECT_CALL(*this, NetworkCallback());
454 WriteLoader(10, 40); 456 WriteLoader(10, 40);
455 457
456 DisallowLoaderDefer(); 458 DisallowLoaderDefer();
457 AllowLoaderDefer(); 459 AllowLoaderDefer();
458 460
459 EXPECT_CALL(*this, ReadCallback(10)); 461 EXPECT_CALL(*this, ReadCallback(10));
460 ReadLoader(20, 10, buffer); 462 ReadLoader(20, 10, buffer);
461 VerifyBuffer(buffer, 20, 10); 463 VerifyBuffer(buffer, 20, 10);
462 StopWhenLoad(); 464 StopWhenLoad();
463 } 465 }
464 466
465 TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredReadSameWindow) { 467 TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredReadSameWindow) {
466 Initialize(kHttpUrl, 10, 99); 468 Initialize(kHttpUrl, 10, 99);
467 SetLoaderBuffer(10, 20); 469 SetLoaderBuffer(10, 20);
468 Start(); 470 Start();
469 PartialResponse(10, 99, 100); 471 PartialResponse(10, 99, 100);
470 472
471 uint8 buffer[10]; 473 uint8 buffer[10];
472 474
473 // Start in deferred state, disallow defer, receive data and shift buffer 475 // Start in deferred state, disallow defer, receive data and shift buffer
474 // window, allow defer, and read in a place that's still in the window. 476 // window, allow defer, and read in a place that's still in the window.
475 EXPECT_CALL(*bridge_, SetDefersLoading(true)); 477 EXPECT_CALL(*url_loader_, setDefersLoading(true));
476 EXPECT_CALL(*this, NetworkCallback()); 478 EXPECT_CALL(*this, NetworkCallback());
477 WriteLoader(10, 30); 479 WriteLoader(10, 30);
478 480
479 DisallowLoaderDefer(); 481 DisallowLoaderDefer();
480 WriteLoader(40, 5); 482 WriteLoader(40, 5);
481 AllowLoaderDefer(); 483 AllowLoaderDefer();
482 484
483 EXPECT_CALL(*this, ReadCallback(10)); 485 EXPECT_CALL(*this, ReadCallback(10));
484 ReadLoader(20, 10, buffer); 486 ReadLoader(20, 10, buffer);
485 VerifyBuffer(buffer, 20, 10); 487 VerifyBuffer(buffer, 20, 10);
486 StopWhenLoad(); 488 StopWhenLoad();
487 } 489 }
488 490
489 TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredReadPastWindow) { 491 TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredReadPastWindow) {
490 Initialize(kHttpUrl, 10, 99); 492 Initialize(kHttpUrl, 10, 99);
491 SetLoaderBuffer(10, 20); 493 SetLoaderBuffer(10, 20);
492 Start(); 494 Start();
493 PartialResponse(10, 99, 100); 495 PartialResponse(10, 99, 100);
494 496
495 uint8 buffer[10]; 497 uint8 buffer[10];
496 498
497 // Start in deferred state, disallow defer, receive data and shift buffer 499 // Start in deferred state, disallow defer, receive data and shift buffer
498 // window, allow defer, and read outside of the buffer window. 500 // window, allow defer, and read outside of the buffer window.
499 EXPECT_CALL(*bridge_, SetDefersLoading(true)); 501 EXPECT_CALL(*url_loader_, setDefersLoading(true));
500 EXPECT_CALL(*this, NetworkCallback()); 502 EXPECT_CALL(*this, NetworkCallback());
501 WriteLoader(10, 40); 503 WriteLoader(10, 40);
502 504
503 DisallowLoaderDefer(); 505 DisallowLoaderDefer();
504 WriteLoader(50, 20); 506 WriteLoader(50, 20);
505 WriteLoader(70, 40); 507 WriteLoader(70, 40);
506 AllowLoaderDefer(); 508 AllowLoaderDefer();
507 509
508 EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS)); 510 EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS));
509 ReadLoader(20, 5, buffer); 511 ReadLoader(20, 5, buffer);
510 StopWhenLoad(); 512 StopWhenLoad();
511 } 513 }
512
513 // TODO(hclam): add unit test for defer loading. 514 // TODO(hclam): add unit test for defer loading.
514 515
515 class MockBufferedResourceLoader : public BufferedResourceLoader { 516 class MockBufferedResourceLoader : public BufferedResourceLoader {
516 public: 517 public:
517 MockBufferedResourceLoader() : BufferedResourceLoader(NULL, GURL(), 0, 0) { 518 MockBufferedResourceLoader() : BufferedResourceLoader(GURL(), 0, 0) {
518 } 519 }
519 520
520 MOCK_METHOD2(Start, void(net::CompletionCallback* read_callback, 521 MOCK_METHOD3(Start, void(net::CompletionCallback* read_callback,
521 NetworkEventCallback* network_callback)); 522 NetworkEventCallback* network_callback,
523 WebFrame* frame));
522 MOCK_METHOD0(Stop, void()); 524 MOCK_METHOD0(Stop, void());
523 MOCK_METHOD4(Read, void(int64 position, int read_size, uint8* buffer, 525 MOCK_METHOD4(Read, void(int64 position, int read_size, uint8* buffer,
524 net::CompletionCallback* callback)); 526 net::CompletionCallback* callback));
525 MOCK_METHOD0(content_length, int64()); 527 MOCK_METHOD0(content_length, int64());
526 MOCK_METHOD0(instance_size, int64()); 528 MOCK_METHOD0(instance_size, int64());
527 MOCK_METHOD0(partial_response, bool()); 529 MOCK_METHOD0(partial_response, bool());
528 MOCK_METHOD0(network_activity, bool()); 530 MOCK_METHOD0(network_activity, bool());
529 MOCK_METHOD0(url, const GURL&()); 531 MOCK_METHOD0(url, const GURL&());
530 MOCK_METHOD0(GetBufferedFirstBytePosition, int64()); 532 MOCK_METHOD0(GetBufferedFirstBytePosition, int64());
531 MOCK_METHOD0(GetBufferedLastBytePosition, int64()); 533 MOCK_METHOD0(GetBufferedLastBytePosition, int64());
532 534
533 protected: 535 protected:
534 ~MockBufferedResourceLoader() {} 536 ~MockBufferedResourceLoader() {}
535 537
536 DISALLOW_COPY_AND_ASSIGN(MockBufferedResourceLoader); 538 DISALLOW_COPY_AND_ASSIGN(MockBufferedResourceLoader);
537 }; 539 };
538 540
539 // A mock BufferedDataSource to inject mock BufferedResourceLoader through 541 // A mock BufferedDataSource to inject mock BufferedResourceLoader through
540 // CreateResourceLoader() method. 542 // CreateResourceLoader() method.
541 class MockBufferedDataSource : public BufferedDataSource { 543 class MockBufferedDataSource : public BufferedDataSource {
542 public: 544 public:
543 MockBufferedDataSource( 545 MockBufferedDataSource(
544 MessageLoop* message_loop, MediaResourceLoaderBridgeFactory* factory) 546 MessageLoop* message_loop, WebFrame* frame)
545 : BufferedDataSource(message_loop, factory) { 547 : BufferedDataSource(message_loop, frame) {
546 } 548 }
547 549
548 virtual base::TimeDelta GetTimeoutMilliseconds() { 550 virtual base::TimeDelta GetTimeoutMilliseconds() {
549 // It is 100 ms because we don't want the test to run too long. 551 // It is 100 ms because we don't want the test to run too long.
550 return base::TimeDelta::FromMilliseconds(100); 552 return base::TimeDelta::FromMilliseconds(100);
551 } 553 }
552 554
553 MOCK_METHOD2(CreateResourceLoader, BufferedResourceLoader*( 555 MOCK_METHOD2(CreateResourceLoader, BufferedResourceLoader*(
554 int64 first_position, int64 last_position)); 556 int64 first_position, int64 last_position));
555 557
556 private: 558 private:
557 DISALLOW_COPY_AND_ASSIGN(MockBufferedDataSource); 559 DISALLOW_COPY_AND_ASSIGN(MockBufferedDataSource);
558 }; 560 };
559 561
560 class BufferedDataSourceTest : public testing::Test { 562 class BufferedDataSourceTest : public testing::Test {
561 public: 563 public:
562 BufferedDataSourceTest() { 564 BufferedDataSourceTest() {
563 message_loop_ = MessageLoop::current(); 565 message_loop_ = MessageLoop::current();
564 bridge_factory_.reset(
565 new StrictMock<MockMediaResourceLoaderBridgeFactory>());
566 566
567 // Prepare test data. 567 // Prepare test data.
568 for (size_t i = 0; i < sizeof(data_); ++i) { 568 for (size_t i = 0; i < sizeof(data_); ++i) {
569 data_[i] = i; 569 data_[i] = i;
570 } 570 }
571 } 571 }
572 572
573 virtual ~BufferedDataSourceTest() { 573 virtual ~BufferedDataSourceTest() {
574 if (data_source_) { 574 if (data_source_ && frame_.get()) {
575 // Release the bridge factory because we don't own it. 575 EXPECT_CALL(*frame_, OnFrameDestroy())
576 // Expects bridge factory to be destroyed along with data source.
577 EXPECT_CALL(*bridge_factory_, OnDestroy())
578 .WillOnce(Invoke(this, 576 .WillOnce(Invoke(this,
579 &BufferedDataSourceTest::ReleaseBridgeFactory)); 577 &BufferedDataSourceTest::ReleaseWebFrame));
580 } 578 }
581 } 579 }
582 580
583 void ExpectCreateAndStartResourceLoader(int start_error) { 581 void ExpectCreateAndStartResourceLoader(int start_error) {
584 EXPECT_CALL(*data_source_, CreateResourceLoader(_, _)) 582 EXPECT_CALL(*data_source_, CreateResourceLoader(_, _))
585 .WillOnce(Return(loader_.get())); 583 .WillOnce(Return(loader_.get()));
586 584
587 EXPECT_CALL(*loader_, Start(NotNull(), NotNull())) 585 EXPECT_CALL(*loader_, Start(NotNull(), NotNull(), NotNull()))
588 .WillOnce( 586 .WillOnce(
589 DoAll(Assign(&error_, start_error), 587 DoAll(Assign(&error_, start_error),
590 Invoke(this, 588 Invoke(this,
591 &BufferedDataSourceTest::InvokeStartCallback))); 589 &BufferedDataSourceTest::InvokeStartCallback)));
592 } 590 }
593 591
594 void InitializeDataSource(const char* url, int error, 592 void InitializeDataSource(const char* url, int error,
595 bool partial_response, int64 instance_size, 593 bool partial_response, int64 instance_size,
596 NetworkState networkState) { 594 NetworkState networkState) {
597 // Saves the url first. 595 // Saves the url first.
598 gurl_ = GURL(url); 596 gurl_ = GURL(url);
599 597
600 media::MediaFormat url_format; 598 frame_.reset(new NiceMock<MockWebFrame>());
601 url_format.SetAsString(media::MediaFormat::kMimeType, 599
602 media::mime_type::kURL);
603 url_format.SetAsString(media::MediaFormat::kURL, url);
604 data_source_ = new MockBufferedDataSource(MessageLoop::current(), 600 data_source_ = new MockBufferedDataSource(MessageLoop::current(),
605 bridge_factory_.get()); 601 frame_.get());
606 CHECK(data_source_);
607
608 // There is no need to provide a message loop to data source.
609 data_source_->set_host(&host_); 602 data_source_->set_host(&host_);
610 603
611 scoped_refptr<NiceMock<MockBufferedResourceLoader> > first_loader( 604 scoped_refptr<NiceMock<MockBufferedResourceLoader> > first_loader(
612 new NiceMock<MockBufferedResourceLoader>()); 605 new NiceMock<MockBufferedResourceLoader>());
613 606
614 // Creates the mock loader to be injected. 607 // Creates the mock loader to be injected.
615 loader_ = first_loader; 608 loader_ = first_loader;
616 609
617 bool initialized_ok = (error == net::OK); 610 bool initialized_ok = (error == net::OK);
618 bool loaded = networkState == LOADED; 611 bool loaded = networkState == LOADED;
619 { 612 {
620 InSequence s; 613 InSequence s;
621 ExpectCreateAndStartResourceLoader(error); 614 ExpectCreateAndStartResourceLoader(error);
622 615
623 // In the case of an invalid partial response we expect a second loader 616 // In the case of an invalid partial response we expect a second loader
624 // to be created. 617 // to be created.
625 if (partial_response && (error == net::ERR_INVALID_RESPONSE)) { 618 if (partial_response && (error == net::ERR_INVALID_RESPONSE)) {
626 // Verify that the initial loader is stopped. 619 // Verify that the initial loader is stopped.
627 EXPECT_CALL(*loader_, url()) 620 EXPECT_CALL(*loader_, url())
628 .WillRepeatedly(ReturnRef(gurl_)); 621 .WillRepeatedly(ReturnRef(gurl_));
629 EXPECT_CALL(*loader_, Stop()); 622 EXPECT_CALL(*loader_, Stop());
630 623
631 // Replace loader_ with a new instance. 624 // Replace loader_ with a new instance.
632 loader_ = new NiceMock<MockBufferedResourceLoader>(); 625 loader_ = new NiceMock<MockBufferedResourceLoader>();
633 626
634 // Create and start Make sure Start() is called the new loader. 627 // Create and start. Make sure Start() is called on the new loader.
635 ExpectCreateAndStartResourceLoader(net::OK); 628 ExpectCreateAndStartResourceLoader(net::OK);
636 629
637 // Update initialization variable since we know the second loader will 630 // Update initialization variable since we know the second loader will
638 // return OK. 631 // return OK.
639 initialized_ok = true; 632 initialized_ok = true;
640 } 633 }
641 } 634 }
642 635
643 // Attach a static function that deletes the memory referred by the 636 // Attach a static function that deletes the memory referred by the
644 // "callback" parameter. 637 // "callback" parameter.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 EXPECT_CALL(*loader_, Stop()); 691 EXPECT_CALL(*loader_, Stop());
699 } 692 }
700 693
701 StrictMock<media::MockFilterCallback> callback; 694 StrictMock<media::MockFilterCallback> callback;
702 EXPECT_CALL(callback, OnFilterCallback()); 695 EXPECT_CALL(callback, OnFilterCallback());
703 EXPECT_CALL(callback, OnCallbackDestroyed()); 696 EXPECT_CALL(callback, OnCallbackDestroyed());
704 data_source_->Stop(callback.NewCallback()); 697 data_source_->Stop(callback.NewCallback());
705 message_loop_->RunAllPending(); 698 message_loop_->RunAllPending();
706 } 699 }
707 700
708 void ReleaseBridgeFactory() { 701 void ReleaseWebFrame() {
709 ignore_result(bridge_factory_.release()); 702 ignore_result(frame_.release());
710 } 703 }
711 704
712 void InvokeStartCallback( 705 void InvokeStartCallback(
713 net::CompletionCallback* callback, 706 net::CompletionCallback* callback,
714 BufferedResourceLoader::NetworkEventCallback* network_callback) { 707 BufferedResourceLoader::NetworkEventCallback* network_callback,
708 WebFrame* frame) {
715 callback->RunWithParams(Tuple1<int>(error_)); 709 callback->RunWithParams(Tuple1<int>(error_));
716 delete callback; 710 delete callback;
717 // TODO(hclam): Save this callback. 711 // TODO(hclam): Save this callback.
718 delete network_callback; 712 delete network_callback;
719 } 713 }
720 714
721 void InvokeReadCallback(int64 position, int size, uint8* buffer, 715 void InvokeReadCallback(int64 position, int size, uint8* buffer,
722 net::CompletionCallback* callback) { 716 net::CompletionCallback* callback) {
723 if (error_ > 0) 717 if (error_ > 0)
724 memcpy(buffer, data_ + static_cast<int>(position), error_); 718 memcpy(buffer, data_ + static_cast<int>(position), error_);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 EXPECT_CALL(*loader_, Stop()); 777 EXPECT_CALL(*loader_, Stop());
784 } 778 }
785 779
786 // 2. Then the current loader will be stop and destroyed. 780 // 2. Then the current loader will be stop and destroyed.
787 NiceMock<MockBufferedResourceLoader> *new_loader = 781 NiceMock<MockBufferedResourceLoader> *new_loader =
788 new NiceMock<MockBufferedResourceLoader>(); 782 new NiceMock<MockBufferedResourceLoader>();
789 EXPECT_CALL(*data_source_, CreateResourceLoader(position, -1)) 783 EXPECT_CALL(*data_source_, CreateResourceLoader(position, -1))
790 .WillOnce(Return(new_loader)); 784 .WillOnce(Return(new_loader));
791 785
792 // 3. Then the new loader will be started. 786 // 3. Then the new loader will be started.
793 EXPECT_CALL(*new_loader, Start(NotNull(), NotNull())) 787 EXPECT_CALL(*new_loader, Start(NotNull(), NotNull(), NotNull()))
794 .WillOnce(DoAll(Assign(&error_, net::OK), 788 .WillOnce(DoAll(Assign(&error_, net::OK),
795 Invoke(this, 789 Invoke(this,
796 &BufferedDataSourceTest::InvokeStartCallback))); 790 &BufferedDataSourceTest::InvokeStartCallback)));
797 EXPECT_CALL(*new_loader, partial_response()) 791 EXPECT_CALL(*new_loader, partial_response())
798 .WillRepeatedly(Return(loader_->partial_response())); 792 .WillRepeatedly(Return(loader_->partial_response()));
799 793
800 // 4. Then again a read request is made to the new loader. 794 // 4. Then again a read request is made to the new loader.
801 EXPECT_CALL(*new_loader, Read(position, size, NotNull(), NotNull())) 795 EXPECT_CALL(*new_loader, Read(position, size, NotNull(), NotNull()))
802 .WillOnce(DoAll(Assign(&error_, size), 796 .WillOnce(DoAll(Assign(&error_, size),
803 Invoke(this, 797 Invoke(this,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 843
850 // 2. Then the current loader will be stop and destroyed. 844 // 2. Then the current loader will be stop and destroyed.
851 NiceMock<MockBufferedResourceLoader> *new_loader = 845 NiceMock<MockBufferedResourceLoader> *new_loader =
852 new NiceMock<MockBufferedResourceLoader>(); 846 new NiceMock<MockBufferedResourceLoader>();
853 EXPECT_CALL(*data_source_, CreateResourceLoader(position, -1)) 847 EXPECT_CALL(*data_source_, CreateResourceLoader(position, -1))
854 .WillOnce(Return(new_loader)); 848 .WillOnce(Return(new_loader));
855 849
856 // 3. Then the new loader will be started and respond to queries about 850 // 3. Then the new loader will be started and respond to queries about
857 // whether this is a partial response using the value of the previous 851 // whether this is a partial response using the value of the previous
858 // loader. 852 // loader.
859 EXPECT_CALL(*new_loader, Start(NotNull(), NotNull())) 853 EXPECT_CALL(*new_loader, Start(NotNull(), NotNull(), NotNull()))
860 .WillOnce(DoAll(Assign(&error_, net::OK), 854 .WillOnce(DoAll(Assign(&error_, net::OK),
861 Invoke(this, 855 Invoke(this,
862 &BufferedDataSourceTest::InvokeStartCallback))); 856 &BufferedDataSourceTest::InvokeStartCallback)));
863 EXPECT_CALL(*new_loader, partial_response()) 857 EXPECT_CALL(*new_loader, partial_response())
864 .WillRepeatedly(Return(loader_->partial_response())); 858 .WillRepeatedly(Return(loader_->partial_response()));
865 859
866 // 4. Then again a read request is made to the new loader. 860 // 4. Then again a read request is made to the new loader.
867 EXPECT_CALL(*new_loader, Read(position, size, NotNull(), NotNull())) 861 EXPECT_CALL(*new_loader, Read(position, size, NotNull(), NotNull()))
868 .WillOnce(DoAll(Assign(&error_, size), 862 .WillOnce(DoAll(Assign(&error_, size),
869 Invoke(this, 863 Invoke(this,
(...skipping 12 matching lines...) Expand all
882 message_loop_->Run(); 876 message_loop_->Run();
883 877
884 // Make sure data is correct. 878 // Make sure data is correct.
885 EXPECT_EQ(0, memcmp(buffer_, data_ + static_cast<int>(position), size)); 879 EXPECT_EQ(0, memcmp(buffer_, data_ + static_cast<int>(position), size));
886 880
887 loader_ = new_loader; 881 loader_ = new_loader;
888 } 882 }
889 883
890 MOCK_METHOD1(ReadCallback, void(size_t size)); 884 MOCK_METHOD1(ReadCallback, void(size_t size));
891 885
892 scoped_ptr<StrictMock<MockMediaResourceLoaderBridgeFactory> >
893 bridge_factory_;
894 scoped_refptr<NiceMock<MockBufferedResourceLoader> > loader_; 886 scoped_refptr<NiceMock<MockBufferedResourceLoader> > loader_;
895 scoped_refptr<MockBufferedDataSource> data_source_; 887 scoped_refptr<MockBufferedDataSource> data_source_;
888 scoped_ptr<NiceMock<MockWebFrame> > frame_;
896 889
897 StrictMock<media::MockFilterHost> host_; 890 StrictMock<media::MockFilterHost> host_;
898 GURL gurl_; 891 GURL gurl_;
899 MessageLoop* message_loop_; 892 MessageLoop* message_loop_;
900 893
901 int error_; 894 int error_;
902 uint8 buffer_[1024]; 895 uint8 buffer_[1024];
903 uint8 data_[1024]; 896 uint8 data_[1024];
904 897
905 private: 898 private:
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 StopDataSource(); 970 StopDataSource();
978 } 971 }
979 972
980 TEST_F(BufferedDataSourceTest, FileHasLoadedState) { 973 TEST_F(BufferedDataSourceTest, FileHasLoadedState) {
981 InitializeDataSource(kFileUrl, net::OK, true, 1024, LOADED); 974 InitializeDataSource(kFileUrl, net::OK, true, 1024, LOADED);
982 ReadDataSourceTimesOut(20, 10); 975 ReadDataSourceTimesOut(20, 10);
983 StopDataSource(); 976 StopDataSource();
984 } 977 }
985 978
986 } // namespace webkit_glue 979 } // namespace webkit_glue
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698