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

Side by Side Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 493373002: ServiceWorker: Add prepare_callback in DispatchFetchEvent to notify the end of SW preparation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix the test failure and rebase Created 6 years, 3 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
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_fetch_dispatcher.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/bind.h" 5 #include "base/bind.h"
6 #include "base/callback.h" 6 #include "base/callback.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "content/browser/fileapi/chrome_blob_storage_context.h" 10 #include "content/browser/fileapi/chrome_blob_storage_context.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 base::Bind(base::IgnoreResult(&base::MessageLoopProxy::PostTask), 73 base::Bind(base::IgnoreResult(&base::MessageLoopProxy::PostTask),
74 base::MessageLoopProxy::current().get(), 74 base::MessageLoopProxy::current().get(),
75 FROM_HERE, 75 FROM_HERE,
76 run_loop.QuitClosure()); 76 run_loop.QuitClosure());
77 BrowserThread::PostTask(BrowserThread::IO, 77 BrowserThread::PostTask(BrowserThread::IO,
78 FROM_HERE, 78 FROM_HERE,
79 base::Bind(closure, quit_on_original_thread)); 79 base::Bind(closure, quit_on_original_thread));
80 run_loop.Run(); 80 run_loop.Run();
81 } 81 }
82 82
83 void ReceivePrepareResult(bool* is_prepared) {
84 *is_prepared = true;
85 }
86
87 base::Closure CreatePrepareReceiver(bool* is_prepared) {
88 return base::Bind(&ReceivePrepareResult, is_prepared);
89 }
90
83 // Contrary to the style guide, the output parameter of this function comes 91 // Contrary to the style guide, the output parameter of this function comes
84 // before input parameters so Bind can be used on it to create a FetchCallback 92 // before input parameters so Bind can be used on it to create a FetchCallback
85 // to pass to DispatchFetchEvent. 93 // to pass to DispatchFetchEvent.
86 void ReceiveFetchResult(BrowserThread::ID run_quit_thread, 94 void ReceiveFetchResult(BrowserThread::ID run_quit_thread,
87 const base::Closure& quit, 95 const base::Closure& quit,
88 ChromeBlobStorageContext* blob_context, 96 ChromeBlobStorageContext* blob_context,
89 FetchResult* out_result, 97 FetchResult* out_result,
90 ServiceWorkerStatusCode actual_status, 98 ServiceWorkerStatusCode actual_status,
91 ServiceWorkerFetchEventResult actual_result, 99 ServiceWorkerFetchEventResult actual_result,
92 const ServiceWorkerResponse& actual_response) { 100 const ServiceWorkerResponse& actual_response) {
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 run_loop.Run(); 467 run_loop.Run();
460 ASSERT_EQ(expected_status, status); 468 ASSERT_EQ(expected_status, status);
461 } 469 }
462 470
463 void FetchOnRegisteredWorker( 471 void FetchOnRegisteredWorker(
464 ServiceWorkerFetchEventResult* result, 472 ServiceWorkerFetchEventResult* result,
465 ServiceWorkerResponse* response, 473 ServiceWorkerResponse* response,
466 scoped_ptr<storage::BlobDataHandle>* blob_data_handle) { 474 scoped_ptr<storage::BlobDataHandle>* blob_data_handle) {
467 blob_context_ = ChromeBlobStorageContext::GetFor( 475 blob_context_ = ChromeBlobStorageContext::GetFor(
468 shell()->web_contents()->GetBrowserContext()); 476 shell()->web_contents()->GetBrowserContext());
477 bool prepare_result = false;
469 FetchResult fetch_result; 478 FetchResult fetch_result;
470 fetch_result.status = SERVICE_WORKER_ERROR_FAILED; 479 fetch_result.status = SERVICE_WORKER_ERROR_FAILED;
471 base::RunLoop fetch_run_loop; 480 base::RunLoop fetch_run_loop;
472 BrowserThread::PostTask(BrowserThread::IO, 481 BrowserThread::PostTask(BrowserThread::IO,
473 FROM_HERE, 482 FROM_HERE,
474 base::Bind(&self::FetchOnIOThread, 483 base::Bind(&self::FetchOnIOThread,
475 this, 484 this,
476 fetch_run_loop.QuitClosure(), 485 fetch_run_loop.QuitClosure(),
486 &prepare_result,
477 &fetch_result)); 487 &fetch_result));
478 fetch_run_loop.Run(); 488 fetch_run_loop.Run();
489 ASSERT_TRUE(prepare_result);
479 *result = fetch_result.result; 490 *result = fetch_result.result;
480 *response = fetch_result.response; 491 *response = fetch_result.response;
481 *blob_data_handle = fetch_result.blob_data_handle.Pass(); 492 *blob_data_handle = fetch_result.blob_data_handle.Pass();
482 ASSERT_EQ(SERVICE_WORKER_OK, fetch_result.status); 493 ASSERT_EQ(SERVICE_WORKER_OK, fetch_result.status);
483 } 494 }
484 495
485 void FetchTestHelper(const std::string& worker_url, 496 void FetchTestHelper(const std::string& worker_url,
486 ServiceWorkerFetchEventResult* result, 497 ServiceWorkerFetchEventResult* result,
487 ServiceWorkerResponse* response, 498 ServiceWorkerResponse* response,
488 scoped_ptr<storage::BlobDataHandle>* blob_data_handle) { 499 scoped_ptr<storage::BlobDataHandle>* blob_data_handle) {
(...skipping 30 matching lines...) Expand all
519 } 530 }
520 531
521 void ActivateOnIOThread(const base::Closure& done, 532 void ActivateOnIOThread(const base::Closure& done,
522 ServiceWorkerStatusCode* result) { 533 ServiceWorkerStatusCode* result) {
523 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); 534 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
524 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); 535 version_->SetStatus(ServiceWorkerVersion::ACTIVATING);
525 version_->DispatchActivateEvent( 536 version_->DispatchActivateEvent(
526 CreateReceiver(BrowserThread::UI, done, result)); 537 CreateReceiver(BrowserThread::UI, done, result));
527 } 538 }
528 539
529 void FetchOnIOThread(const base::Closure& done, FetchResult* result) { 540 void FetchOnIOThread(const base::Closure& done,
541 bool* prepare_result,
542 FetchResult* result) {
530 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); 543 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
531 ServiceWorkerFetchRequest request( 544 ServiceWorkerFetchRequest request(
532 embedded_test_server()->GetURL("/service_worker/empty.html"), 545 embedded_test_server()->GetURL("/service_worker/empty.html"),
533 "GET", 546 "GET",
534 std::map<std::string, std::string>(), 547 std::map<std::string, std::string>(),
535 GURL(""), 548 GURL(""),
536 false); 549 false);
537 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 550 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
538 version_->DispatchFetchEvent( 551 version_->DispatchFetchEvent(
539 request, 552 request,
553 CreatePrepareReceiver(prepare_result),
nhiroki 2014/08/27 05:05:38 nit: I think we don't have to use this indirect ca
540 CreateResponseReceiver( 554 CreateResponseReceiver(
541 BrowserThread::UI, done, blob_context_.get(), result)); 555 BrowserThread::UI, done, blob_context_.get(), result));
542 } 556 }
543 557
544 void StopOnIOThread(const base::Closure& done, 558 void StopOnIOThread(const base::Closure& done,
545 ServiceWorkerStatusCode* result) { 559 ServiceWorkerStatusCode* result) {
546 ASSERT_TRUE(version_.get()); 560 ASSERT_TRUE(version_.get());
547 version_->StopWorker(CreateReceiver(BrowserThread::UI, done, result)); 561 version_->StopWorker(CreateReceiver(BrowserThread::UI, done, result));
548 } 562 }
549 563
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 RunOnIOThread( 946 RunOnIOThread(
933 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO, 947 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO,
934 this, 948 this,
935 embedded_test_server()->GetURL("/service_worker/empty.html"), 949 embedded_test_server()->GetURL("/service_worker/empty.html"),
936 &status)); 950 &status));
937 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status); 951 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status);
938 } 952 }
939 } 953 }
940 954
941 } // namespace content 955 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_fetch_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698