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

Side by Side Diff: third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp

Issue 1257343003: [LoaderTest] Add unit tests for Document/WorkerThreadableLoader (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 4 years, 9 months 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
OLDNEW
(Empty)
1 // Copyright 2016 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 #include "core/loader/ThreadableLoader.h"
6
7 #include "core/dom/CrossThreadTask.h"
8 #include "core/fetch/ResourceLoaderOptions.h"
9 #include "core/loader/DocumentThreadableLoader.h"
10 #include "core/loader/ThreadableLoaderClient.h"
11 #include "core/loader/WorkerThreadableLoader.h"
12 #include "core/testing/DummyPageHolder.h"
13 #include "core/workers/WorkerLoaderProxy.h"
14 #include "core/workers/WorkerThreadTestHelper.h"
15 #include "platform/WaitableEvent.h"
16 #include "platform/geometry/IntSize.h"
17 #include "platform/network/ResourceError.h"
18 #include "platform/network/ResourceRequest.h"
19 #include "platform/network/ResourceResponse.h"
20 #include "platform/network/ResourceTimingInfo.h"
21 #include "platform/testing/URLTestHelpers.h"
22 #include "platform/testing/UnitTestHelpers.h"
23 #include "platform/weborigin/KURL.h"
24 #include "platform/weborigin/SecurityOrigin.h"
25 #include "public/platform/Platform.h"
26 #include "public/platform/WebURLLoadTiming.h"
27 #include "public/platform/WebURLResponse.h"
28 #include "public/platform/WebUnitTestSupport.h"
29 #include "testing/gmock/include/gmock/gmock.h"
30 #include "testing/gtest/include/gtest/gtest.h"
31 #include "wtf/Assertions.h"
32 #include "wtf/OwnPtr.h"
33 #include "wtf/PassOwnPtr.h"
34 #include "wtf/RefPtr.h"
35
36 namespace blink {
37
38 namespace {
39
40 using ::testing::_;
41 using ::testing::InSequence;
42 using ::testing::InvokeWithoutArgs;
43 using ::testing::StrEq;
44 using ::testing::Truly;
45 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>;
46
47 class MockThreadableLoaderClient : public ThreadableLoaderClient {
48 public:
49 static PassOwnPtr<MockThreadableLoaderClient> create()
50 {
51 return adoptPtr(new ::testing::StrictMock<MockThreadableLoaderClient>);
52 }
53 MOCK_METHOD2(didSendData, void(unsigned long long, unsigned long long));
54 MOCK_METHOD3(didReceiveResponse, void(unsigned long, const ResourceResponse& , PassOwnPtr<WebDataConsumerHandle>));
55 MOCK_METHOD2(didReceiveData, void(const char*, unsigned));
56 MOCK_METHOD2(didReceiveCachedMetadata, void(const char*, int));
57 MOCK_METHOD2(didFinishLoading, void(unsigned long, double));
58 MOCK_METHOD1(didFail, void(const ResourceError&));
59 MOCK_METHOD1(didFailAccessControlCheck, void(const ResourceError&));
60 MOCK_METHOD0(didFailRedirectCheck, void());
61 MOCK_METHOD1(didReceiveResourceTiming, void(const ResourceTimingInfo&));
62 MOCK_METHOD1(didDownloadData, void(int));
63
64 protected:
65 MockThreadableLoaderClient() = default;
66 };
67
68 bool isCancellation(const ResourceError& error)
69 {
70 return error.isCancellation();
71 }
72
73 bool isNotCancellation(const ResourceError& error)
74 {
75 return !error.isCancellation();
76 }
77
78 KURL successURL() { return KURL(KURL(), "http://example.com/success"); }
79 KURL errorURL() { return KURL(KURL(), "http://example.com/error"); }
80 KURL redirectURL() { return KURL(KURL(), "http://example.com/redirect"); }
81 KURL redirectLoopURL() { return KURL(KURL(), "http://example.com/loop"); }
82
83 enum ThreadableLoaderToTest {
84 DocumentThreadableLoaderTest,
85 WorkerThreadableLoaderTest
86 };
87
88 class ThreadableLoaderTestHelper {
89 public:
90 virtual ~ThreadableLoaderTestHelper() { }
91
92 virtual void createLoader(ThreadableLoaderClient*, CrossOriginRequestPolicy) = 0;
93 virtual void startLoader(const ResourceRequest&) = 0;
94 virtual void cancelLoader() = 0;
95 virtual void clearLoader() = 0;
96 virtual Checkpoint& checkpoint() = 0;
97 virtual void callCheckpoint(int) = 0;
98 virtual void onSetUp() = 0;
99 virtual void onServeRequests() = 0;
100 virtual void onTearDown() = 0;
101 };
102
103 class DocumentThreadableLoaderTestHelper : public ThreadableLoaderTestHelper {
104 public:
105 DocumentThreadableLoaderTestHelper()
106 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1)))
107 {
108 }
109
110 void createLoader(ThreadableLoaderClient* client, CrossOriginRequestPolicy c rossOriginRequestPolicy) override
111 {
112 ThreadableLoaderOptions options;
113 options.crossOriginRequestPolicy = crossOriginRequestPolicy;
114 ResourceLoaderOptions resourceLoaderOptions;
115 m_loader = DocumentThreadableLoader::create(document(), client, options, resourceLoaderOptions);
116 }
117
118 void startLoader(const ResourceRequest& request) override
119 {
120 m_loader->start(request);
121 }
122
123 void cancelLoader() override { m_loader->cancel(); }
124 void clearLoader() override { m_loader.clear(); }
125 Checkpoint& checkpoint() override { return m_checkpoint; }
126 void callCheckpoint(int n) override { m_checkpoint.Call(n); }
127
128 void onSetUp() override
129 {
130 }
131
132 void onServeRequests() override
133 {
134 }
135
136 void onTearDown() override
137 {
138 m_loader.clear();
139 }
140
141 private:
142 Document& document() { return m_dummyPageHolder->document(); }
143
144 OwnPtr<DummyPageHolder> m_dummyPageHolder;
145 Checkpoint m_checkpoint;
146 OwnPtr<DocumentThreadableLoader> m_loader;
147 };
148
149 class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper, publ ic WorkerLoaderProxyProvider {
150 public:
151 WorkerThreadableLoaderTestHelper()
152 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1)))
153 {
154 }
155
156 void createLoader(ThreadableLoaderClient* client, CrossOriginRequestPolicy c rossOriginRequestPolicy) override
157 {
158 OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
159 postTaskToWorkerGlobalScope(createCrossThreadTask(
160 &WorkerThreadableLoaderTestHelper::workerCreateLoader,
161 AllowCrossThreadAccess(this),
162 AllowCrossThreadAccess(client),
163 AllowCrossThreadAccess(completionEvent.get()),
164 crossOriginRequestPolicy));
165 completionEvent->wait();
166 }
167
168 void startLoader(const ResourceRequest& request) override
169 {
170 OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
171 postTaskToWorkerGlobalScope(createCrossThreadTask(
172 &WorkerThreadableLoaderTestHelper::workerStartLoader,
173 AllowCrossThreadAccess(this),
174 AllowCrossThreadAccess(completionEvent.get()),
175 request));
176 completionEvent->wait();
177 }
178
179 // Must be called on the worker thread.
180 void cancelLoader() override
181 {
182 ASSERT(m_workerThread);
183 ASSERT(m_workerThread->isCurrentThread());
184 m_loader->cancel();
185 }
186
187 // Must be called on the worker thread.
188 void clearLoader() override
189 {
190 ASSERT(m_workerThread);
191 ASSERT(m_workerThread->isCurrentThread());
192 m_loader.clear();
193 }
194
195 Checkpoint& checkpoint() override
196 {
197 return m_checkpoint;
198 }
199
200 void callCheckpoint(int n) override
201 {
202 testing::runPendingTasks();
203
204 OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
205 postTaskToWorkerGlobalScope(createCrossThreadTask(
206 &WorkerThreadableLoaderTestHelper::workerCallCheckpoint,
207 AllowCrossThreadAccess(this),
208 AllowCrossThreadAccess(completionEvent.get()),
209 n));
210 completionEvent->wait();
211 }
212
213 void onSetUp() override
214 {
215 m_mockWorkerReportingProxy = adoptPtr(new MockWorkerReportingProxy());
216 m_securityOrigin = document().getSecurityOrigin();
217 m_workerThread = adoptPtr(new WorkerThreadForTest(
218 this,
219 *m_mockWorkerReportingProxy));
220
221 expectWorkerLifetimeReportingCalls();
222 m_workerThread->startWithSourceCode(m_securityOrigin.get(), "//fake sour ce code");
223 m_workerThread->waitForInit();
224 }
225
226 void onServeRequests() override
227 {
228 testing::runPendingTasks();
229 }
230
231 void onTearDown() override
232 {
233 postTaskToWorkerGlobalScope(createCrossThreadTask(&WorkerThreadableLoade rTestHelper::clearLoader, AllowCrossThreadAccess(this)));
234 m_workerThread->terminateAndWait();
235
236 // Needed to clean up the things on the main thread side and
237 // avoid Resource leaks.
238 testing::runPendingTasks();
239
240 m_workerThread->workerLoaderProxy()->detachProvider(this);
241 }
242
243 private:
244 Document& document() { return m_dummyPageHolder->document(); }
245
246 void expectWorkerLifetimeReportingCalls()
247 {
248 EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_)).Ti mes(1);
249 EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(true)). Times(1);
250 EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()).Times (1);
251 EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()) .Times(1);
252 }
253
254 void workerCreateLoader(ThreadableLoaderClient* client, WaitableEvent* event , CrossOriginRequestPolicy crossOriginRequestPolicy)
255 {
256 ASSERT(m_workerThread);
257 ASSERT(m_workerThread->isCurrentThread());
258
259 ThreadableLoaderOptions options;
260 options.crossOriginRequestPolicy = crossOriginRequestPolicy;
261 ResourceLoaderOptions resourceLoaderOptions;
262
263 // Ensure that WorkerThreadableLoader is created.
264 // ThreadableLoader::create() determines whether it should create
265 // a DocumentThreadableLoader or WorkerThreadableLoader based on
266 // isWorkerGlobalScope().
267 ASSERT(m_workerThread->workerGlobalScope()->isWorkerGlobalScope());
268
269 m_loader = ThreadableLoader::create(*m_workerThread->workerGlobalScope() , client, options, resourceLoaderOptions);
270 ASSERT(m_loader);
271 event->signal();
272 }
273
274 void workerStartLoader(WaitableEvent* event, PassOwnPtr<CrossThreadResourceR equestData> requestData)
275 {
276 ASSERT(m_workerThread);
277 ASSERT(m_workerThread->isCurrentThread());
278
279 ResourceRequest request(requestData.get());
280 m_loader->start(request);
281 event->signal();
282 }
283
284 void workerCallCheckpoint(WaitableEvent* event, int n)
285 {
286 ASSERT(m_workerThread);
287 ASSERT(m_workerThread->isCurrentThread());
288 m_checkpoint.Call(n);
289 event->signal();
290 }
291
292 // WorkerLoaderProxyProvider methods.
293 void postTaskToLoader(PassOwnPtr<ExecutionContextTask> task) override
294 {
295 ASSERT(m_workerThread);
296 ASSERT(m_workerThread->isCurrentThread());
297 document().postTask(BLINK_FROM_HERE, task);
298 }
299
300 bool postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask> task) over ride
301 {
302 ASSERT(m_workerThread);
303 m_workerThread->postTask(BLINK_FROM_HERE, task);
304 return true;
305 }
306
307 RefPtr<SecurityOrigin> m_securityOrigin;
308 OwnPtr<MockWorkerReportingProxy> m_mockWorkerReportingProxy;
309 OwnPtr<WorkerThreadForTest> m_workerThread;
310
311 OwnPtr<DummyPageHolder> m_dummyPageHolder;
312 Checkpoint m_checkpoint;
313 // |m_loader| must be touched only from the worker thread only.
314 OwnPtr<ThreadableLoader> m_loader;
315 };
316
317 class ThreadableLoaderTest : public ::testing::TestWithParam<ThreadableLoaderToT est> {
318 public:
319 ThreadableLoaderTest()
320 {
321 switch (GetParam()) {
322 case DocumentThreadableLoaderTest:
323 m_helper = adoptPtr(new DocumentThreadableLoaderTestHelper);
324 break;
325 case WorkerThreadableLoaderTest:
326 m_helper = adoptPtr(new WorkerThreadableLoaderTestHelper);
327 break;
328 }
329 }
330
331 void startLoader(const KURL& url)
332 {
333 ResourceRequest request(url);
334 request.setRequestContext(WebURLRequest::RequestContextInternal);
335 m_helper->startLoader(request);
336 }
337
338 void cancelLoader() { m_helper->cancelLoader(); }
339 void clearLoader() { m_helper->clearLoader(); }
340 Checkpoint& checkpoint() { return m_helper->checkpoint(); }
341 void callCheckpoint(int n) { m_helper->callCheckpoint(n); }
342
343 void serveRequests()
344 {
345 m_helper->onServeRequests();
346 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests( );
347 }
348
349 void createLoader(CrossOriginRequestPolicy crossOriginRequestPolicy = AllowC rossOriginRequests)
350 {
351 m_helper->createLoader(client(), crossOriginRequestPolicy);
352 }
353
354 MockThreadableLoaderClient* client() const { return m_client.get(); }
355
356 private:
357 void SetUp() override
358 {
359 setUpSuccessURL();
360 setUpErrorURL();
361 setUpRedirectURL();
362 setUpRedirectLoopURL();
363
364 m_client = MockThreadableLoaderClient::create();
365 m_helper->onSetUp();
366 }
367
368 void TearDown() override
369 {
370 m_helper->onTearDown();
371 Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
372 m_client.clear();
373 }
374
375 void setUpSuccessURL()
376 {
377 URLTestHelpers::registerMockedURLLoad(successURL(), "fox-null-terminated .html", "text/html");
378 }
379
380 void setUpErrorURL()
381 {
382 URLTestHelpers::registerMockedErrorURLLoad(errorURL());
383 }
384
385 void setUpRedirectURL()
386 {
387 KURL url = redirectURL();
388
389 WebURLLoadTiming timing;
390 timing.initialize();
391
392 WebURLResponse response;
393 response.initialize();
394 response.setURL(url);
395 response.setHTTPStatusCode(301);
396 response.setLoadTiming(timing);
397 response.addHTTPHeaderField("Location", successURL().getString());
398 response.addHTTPHeaderField("Access-Control-Allow-Origin", "null");
399
400 URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, "fox-null-t erminated.html", "", response);
401 }
402
403 void setUpRedirectLoopURL()
404 {
405 KURL url = redirectLoopURL();
406
407 WebURLLoadTiming timing;
408 timing.initialize();
409
410 WebURLResponse response;
411 response.initialize();
412 response.setURL(url);
413 response.setHTTPStatusCode(301);
414 response.setLoadTiming(timing);
415 response.addHTTPHeaderField("Location", redirectLoopURL().getString());
416 response.addHTTPHeaderField("Access-Control-Allow-Origin", "null");
417
418 URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, "fox-null-t erminated.html", "", response);
419 }
420
421 OwnPtr<MockThreadableLoaderClient> m_client;
422 OwnPtr<ThreadableLoaderTestHelper> m_helper;
423 };
424
425 INSTANTIATE_TEST_CASE_P(Document,
426 ThreadableLoaderTest,
427 ::testing::Values(DocumentThreadableLoaderTest));
428
429 INSTANTIATE_TEST_CASE_P(Worker,
430 ThreadableLoaderTest,
431 ::testing::Values(WorkerThreadableLoaderTest));
432
433 TEST_P(ThreadableLoaderTest, StartAndStop)
434 {
435 }
436
437 TEST_P(ThreadableLoaderTest, CancelAfterStart)
438 {
439 InSequence s;
440 EXPECT_CALL(checkpoint(), Call(1));
441 createLoader();
442 callCheckpoint(1);
443
444 EXPECT_CALL(checkpoint(), Call(2)).WillOnce(InvokeWithoutArgs(this, &Threada bleLoaderTest::cancelLoader));
445 EXPECT_CALL(*client(), didFail(Truly(isCancellation)));
446 EXPECT_CALL(checkpoint(), Call(3));
447
448 startLoader(successURL());
449 callCheckpoint(2);
450 callCheckpoint(3);
451 serveRequests();
452 }
453
454 TEST_P(ThreadableLoaderTest, ClearAfterStart)
455 {
456 InSequence s;
457 EXPECT_CALL(checkpoint(), Call(1));
458 createLoader();
459 callCheckpoint(1);
460
461 EXPECT_CALL(checkpoint(), Call(2)).WillOnce(InvokeWithoutArgs(this, &Threada bleLoaderTest::clearLoader));
462 EXPECT_CALL(checkpoint(), Call(3));
463
464 startLoader(successURL());
465 callCheckpoint(2);
466 callCheckpoint(3);
467 serveRequests();
468 }
469
470 TEST_P(ThreadableLoaderTest, CancelInDidReceiveResponse)
471 {
472 InSequence s;
473 EXPECT_CALL(checkpoint(), Call(1));
474 createLoader();
475 callCheckpoint(1);
476
477 EXPECT_CALL(checkpoint(), Call(2));
478 EXPECT_CALL(*client(), didReceiveResponse(_, _, _)).WillOnce(InvokeWithoutAr gs(this, &ThreadableLoaderTest::cancelLoader));
479 EXPECT_CALL(*client(), didFail(Truly(isCancellation)));
480
481 startLoader(successURL());
482 callCheckpoint(2);
483 serveRequests();
484 }
485
486 TEST_P(ThreadableLoaderTest, ClearInDidReceiveResponse)
487 {
488 InSequence s;
489 EXPECT_CALL(checkpoint(), Call(1));
490 createLoader();
491 callCheckpoint(1);
492
493 EXPECT_CALL(checkpoint(), Call(2));
494 EXPECT_CALL(*client(), didReceiveResponse(_, _, _)).WillOnce(InvokeWithoutAr gs(this, &ThreadableLoaderTest::clearLoader));
495
496 startLoader(successURL());
497 callCheckpoint(2);
498 serveRequests();
499 }
500
501 TEST_P(ThreadableLoaderTest, CancelInDidReceiveData)
502 {
503 InSequence s;
504 EXPECT_CALL(checkpoint(), Call(1));
505 createLoader();
506 callCheckpoint(1);
507
508 EXPECT_CALL(checkpoint(), Call(2));
509 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
510 EXPECT_CALL(*client(), didReceiveData(_, _)).WillOnce(InvokeWithoutArgs(this , &ThreadableLoaderTest::cancelLoader));
511 EXPECT_CALL(*client(), didFail(Truly(isCancellation)));
512
513 startLoader(successURL());
514 callCheckpoint(2);
515 serveRequests();
516 }
517
518 TEST_P(ThreadableLoaderTest, ClearInDidReceiveData)
519 {
520 InSequence s;
521 EXPECT_CALL(checkpoint(), Call(1));
522 createLoader();
523 callCheckpoint(1);
524
525 EXPECT_CALL(checkpoint(), Call(2));
526 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
527 EXPECT_CALL(*client(), didReceiveData(_, _)).WillOnce(InvokeWithoutArgs(this , &ThreadableLoaderTest::clearLoader));
528
529 startLoader(successURL());
530 callCheckpoint(2);
531 serveRequests();
532 }
533
534 TEST_P(ThreadableLoaderTest, DidFinishLoading)
535 {
536 InSequence s;
537 EXPECT_CALL(checkpoint(), Call(1));
538 createLoader();
539 callCheckpoint(1);
540
541 EXPECT_CALL(checkpoint(), Call(2));
542 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
543 EXPECT_CALL(*client(), didReceiveData(StrEq("fox"), 4));
544 // We expect didReceiveResourceTiming() calls in DocumentThreadableLoader;
545 // it's used to connect DocumentThreadableLoader to WorkerThreadableLoader,
546 // not to ThreadableLoaderClient.
547 if (GetParam() == DocumentThreadableLoaderTest)
548 EXPECT_CALL(*client(), didReceiveResourceTiming(_));
549 EXPECT_CALL(*client(), didFinishLoading(_, _));
550
551 startLoader(successURL());
552 callCheckpoint(2);
553 serveRequests();
554 }
555
556 TEST_P(ThreadableLoaderTest, CancelInDidFinishLoading)
557 {
558 InSequence s;
559 EXPECT_CALL(checkpoint(), Call(1));
560 createLoader();
561 callCheckpoint(1);
562
563 EXPECT_CALL(checkpoint(), Call(2));
564 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
565 EXPECT_CALL(*client(), didReceiveData(_, _));
566 if (GetParam() == DocumentThreadableLoaderTest)
567 EXPECT_CALL(*client(), didReceiveResourceTiming(_));
568 EXPECT_CALL(*client(), didFinishLoading(_, _)).WillOnce(InvokeWithoutArgs(th is, &ThreadableLoaderTest::cancelLoader));
569
570 startLoader(successURL());
571 callCheckpoint(2);
572 serveRequests();
573 }
574
575 TEST_P(ThreadableLoaderTest, ClearInDidFinishLoading)
576 {
577 InSequence s;
578 EXPECT_CALL(checkpoint(), Call(1));
579 createLoader();
580 callCheckpoint(1);
581
582 EXPECT_CALL(checkpoint(), Call(2));
583 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
584 EXPECT_CALL(*client(), didReceiveData(_, _));
585 if (GetParam() == DocumentThreadableLoaderTest)
586 EXPECT_CALL(*client(), didReceiveResourceTiming(_));
587 EXPECT_CALL(*client(), didFinishLoading(_, _)).WillOnce(InvokeWithoutArgs(th is, &ThreadableLoaderTest::clearLoader));
588
589 startLoader(successURL());
590 callCheckpoint(2);
591 serveRequests();
592 }
593
594 TEST_P(ThreadableLoaderTest, DidFail)
595 {
596 InSequence s;
597 EXPECT_CALL(checkpoint(), Call(1));
598 createLoader();
599 callCheckpoint(1);
600
601 EXPECT_CALL(checkpoint(), Call(2));
602 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
603 EXPECT_CALL(*client(), didFail(Truly(isNotCancellation)));
604
605 startLoader(errorURL());
606 callCheckpoint(2);
607 serveRequests();
608 }
609
610 TEST_P(ThreadableLoaderTest, CancelInDidFail)
611 {
612 InSequence s;
613 EXPECT_CALL(checkpoint(), Call(1));
614 createLoader();
615 callCheckpoint(1);
616
617 EXPECT_CALL(checkpoint(), Call(2));
618 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
619 EXPECT_CALL(*client(), didFail(_)).WillOnce(InvokeWithoutArgs(this, &Threada bleLoaderTest::cancelLoader));
620
621 startLoader(errorURL());
622 callCheckpoint(2);
623 serveRequests();
624 }
625
626 TEST_P(ThreadableLoaderTest, ClearInDidFail)
627 {
628 InSequence s;
629 EXPECT_CALL(checkpoint(), Call(1));
630 createLoader();
631 callCheckpoint(1);
632
633 EXPECT_CALL(checkpoint(), Call(2));
634 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
635 EXPECT_CALL(*client(), didFail(_)).WillOnce(InvokeWithoutArgs(this, &Threada bleLoaderTest::clearLoader));
636
637 startLoader(errorURL());
638 callCheckpoint(2);
639 serveRequests();
640 }
641
642 TEST_P(ThreadableLoaderTest, DidFailInStart)
643 {
644 InSequence s;
645 EXPECT_CALL(checkpoint(), Call(1));
646 createLoader(DenyCrossOriginRequests);
647 callCheckpoint(1);
648
649 EXPECT_CALL(*client(), didFail(ResourceError(errorDomainBlinkInternal, 0, er rorURL().getString(), "Cross origin requests are not supported.")));
650 EXPECT_CALL(checkpoint(), Call(2));
651
652 startLoader(errorURL());
653 callCheckpoint(2);
654 serveRequests();
655 }
656
657 TEST_P(ThreadableLoaderTest, CancelInDidFailInStart)
658 {
659 InSequence s;
660 EXPECT_CALL(checkpoint(), Call(1));
661 createLoader(DenyCrossOriginRequests);
662 callCheckpoint(1);
663
664 EXPECT_CALL(*client(), didFail(_)).WillOnce(InvokeWithoutArgs(this, &Threada bleLoaderTest::cancelLoader));
665 EXPECT_CALL(checkpoint(), Call(2));
666
667 startLoader(errorURL());
668 callCheckpoint(2);
669 serveRequests();
670 }
671
672 TEST_P(ThreadableLoaderTest, ClearInDidFailInStart)
673 {
674 InSequence s;
675 EXPECT_CALL(checkpoint(), Call(1));
676 createLoader(DenyCrossOriginRequests);
677 callCheckpoint(1);
678
679 EXPECT_CALL(*client(), didFail(_)).WillOnce(InvokeWithoutArgs(this, &Threada bleLoaderTest::clearLoader));
680 EXPECT_CALL(checkpoint(), Call(2));
681
682 startLoader(errorURL());
683 callCheckpoint(2);
684 serveRequests();
685 }
686
687 TEST_P(ThreadableLoaderTest, DidFailAccessControlCheck)
688 {
689 InSequence s;
690 EXPECT_CALL(checkpoint(), Call(1));
691 createLoader(UseAccessControl);
692 callCheckpoint(1);
693
694 EXPECT_CALL(checkpoint(), Call(2));
695 EXPECT_CALL(*client(), didFailAccessControlCheck(ResourceError(errorDomainBl inkInternal, 0, successURL().getString(), "No 'Access-Control-Allow-Origin' head er is present on the requested resource. Origin 'null' is therefore not allowed access.")));
696
697 startLoader(successURL());
698 callCheckpoint(2);
699 serveRequests();
700 }
701
702 TEST_P(ThreadableLoaderTest, CancelInDidFailAccessControlCheck)
703 {
704 InSequence s;
705 EXPECT_CALL(checkpoint(), Call(1));
706 createLoader(UseAccessControl);
707 callCheckpoint(1);
708
709 EXPECT_CALL(checkpoint(), Call(2));
710 EXPECT_CALL(*client(), didFailAccessControlCheck(_)).WillOnce(InvokeWithoutA rgs(this, &ThreadableLoaderTest::cancelLoader));
711
712 startLoader(successURL());
713 callCheckpoint(2);
714 serveRequests();
715 }
716
717 TEST_P(ThreadableLoaderTest, ClearInDidFailAccessControlCheck)
718 {
719 InSequence s;
720 EXPECT_CALL(checkpoint(), Call(1));
721 createLoader(UseAccessControl);
722 callCheckpoint(1);
723
724 EXPECT_CALL(checkpoint(), Call(2));
725 EXPECT_CALL(*client(), didFailAccessControlCheck(_)).WillOnce(InvokeWithoutA rgs(this, &ThreadableLoaderTest::clearLoader));
726
727 startLoader(successURL());
728 callCheckpoint(2);
729 serveRequests();
730 }
731
732 TEST_P(ThreadableLoaderTest, RedirectDidFinishLoading)
733 {
734 InSequence s;
735 EXPECT_CALL(checkpoint(), Call(1));
736 createLoader();
737 callCheckpoint(1);
738
739 EXPECT_CALL(checkpoint(), Call(2));
740 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
741 EXPECT_CALL(*client(), didReceiveData(StrEq("fox"), 4));
742 if (GetParam() == DocumentThreadableLoaderTest)
743 EXPECT_CALL(*client(), didReceiveResourceTiming(_));
744 EXPECT_CALL(*client(), didFinishLoading(_, _));
745
746 startLoader(redirectURL());
747 callCheckpoint(2);
748 serveRequests();
749 }
750
751 TEST_P(ThreadableLoaderTest, CancelInRedirectDidFinishLoading)
752 {
753 InSequence s;
754 EXPECT_CALL(checkpoint(), Call(1));
755 createLoader();
756 callCheckpoint(1);
757
758 EXPECT_CALL(checkpoint(), Call(2));
759 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
760 EXPECT_CALL(*client(), didReceiveData(StrEq("fox"), 4));
761 if (GetParam() == DocumentThreadableLoaderTest)
762 EXPECT_CALL(*client(), didReceiveResourceTiming(_));
763 EXPECT_CALL(*client(), didFinishLoading(_, _)).WillOnce(InvokeWithoutArgs(th is, &ThreadableLoaderTest::cancelLoader));
764
765 startLoader(redirectURL());
766 callCheckpoint(2);
767 serveRequests();
768 }
769
770 TEST_P(ThreadableLoaderTest, ClearInRedirectDidFinishLoading)
771 {
772 InSequence s;
773 EXPECT_CALL(checkpoint(), Call(1));
774 createLoader();
775 callCheckpoint(1);
776
777 EXPECT_CALL(checkpoint(), Call(2));
778 EXPECT_CALL(*client(), didReceiveResponse(_, _, _));
779 EXPECT_CALL(*client(), didReceiveData(StrEq("fox"), 4));
780 if (GetParam() == DocumentThreadableLoaderTest)
781 EXPECT_CALL(*client(), didReceiveResourceTiming(_));
782 EXPECT_CALL(*client(), didFinishLoading(_, _)).WillOnce(InvokeWithoutArgs(th is, &ThreadableLoaderTest::clearLoader));
783
784 startLoader(redirectURL());
785 callCheckpoint(2);
786 serveRequests();
787 }
788
789 TEST_P(ThreadableLoaderTest, DidFailRedirectCheck)
790 {
791 InSequence s;
792 EXPECT_CALL(checkpoint(), Call(1));
793 createLoader(UseAccessControl);
794 callCheckpoint(1);
795
796 EXPECT_CALL(checkpoint(), Call(2));
797 EXPECT_CALL(*client(), didFailRedirectCheck());
798
799 startLoader(redirectLoopURL());
800 callCheckpoint(2);
801 serveRequests();
802 }
803
804 TEST_P(ThreadableLoaderTest, CancelInDidFailRedirectCheck)
805 {
806 InSequence s;
807 EXPECT_CALL(checkpoint(), Call(1));
808 createLoader(UseAccessControl);
809 callCheckpoint(1);
810
811 EXPECT_CALL(checkpoint(), Call(2));
812 EXPECT_CALL(*client(), didFailRedirectCheck()).WillOnce(InvokeWithoutArgs(th is, &ThreadableLoaderTest::cancelLoader));
813
814 startLoader(redirectLoopURL());
815 callCheckpoint(2);
816 serveRequests();
817 }
818
819 TEST_P(ThreadableLoaderTest, ClearInDidFailRedirectCheck)
820 {
821 InSequence s;
822 EXPECT_CALL(checkpoint(), Call(1));
823 createLoader(UseAccessControl);
824 callCheckpoint(1);
825
826 EXPECT_CALL(checkpoint(), Call(2));
827 EXPECT_CALL(*client(), didFailRedirectCheck()).WillOnce(InvokeWithoutArgs(th is, &ThreadableLoaderTest::clearLoader));
828
829 startLoader(redirectLoopURL());
830 callCheckpoint(2);
831 serveRequests();
832 }
833
834 } // namespace
835
836 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/core.gypi ('k') | third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698