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

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

Issue 945413005: Add browser test for V8 code caching for ServiceWorker scripts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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_version.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 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 worker_.reset(); 328 worker_.reset();
329 } 329 }
330 } 330 }
331 331
332 void StartOnIOThread() { 332 void StartOnIOThread() {
333 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); 333 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
334 worker_ = wrapper()->context()->embedded_worker_registry()->CreateWorker(); 334 worker_ = wrapper()->context()->embedded_worker_registry()->CreateWorker();
335 EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker_->status()); 335 EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker_->status());
336 worker_->AddListener(this); 336 worker_->AddListener(this);
337 337
338
339 const int64 service_worker_version_id = 33L; 338 const int64 service_worker_version_id = 33L;
340 const GURL pattern = embedded_test_server()->GetURL("/"); 339 const GURL pattern = embedded_test_server()->GetURL("/");
341 const GURL script_url = embedded_test_server()->GetURL( 340 const GURL script_url = embedded_test_server()->GetURL(
342 "/service_worker/worker.js"); 341 "/service_worker/worker.js");
343 AssociateRendererProcessToPattern(pattern); 342 AssociateRendererProcessToPattern(pattern);
344 int process_id = shell()->web_contents()->GetRenderProcessHost()->GetID(); 343 int process_id = shell()->web_contents()->GetRenderProcessHost()->GetID();
345 wrapper()->process_manager()->AddProcessReferenceToPattern( 344 wrapper()->process_manager()->AddProcessReferenceToPattern(
346 pattern, process_id); 345 pattern, process_id);
347 worker_->Start( 346 worker_->Start(
348 service_worker_version_id, 347 service_worker_version_id,
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 wrapper()->context()->storage()->NewRegistrationId(), 514 wrapper()->context()->storage()->NewRegistrationId(),
516 wrapper()->context()->AsWeakPtr()); 515 wrapper()->context()->AsWeakPtr());
517 version_ = new ServiceWorkerVersion( 516 version_ = new ServiceWorkerVersion(
518 registration_.get(), 517 registration_.get(),
519 embedded_test_server()->GetURL(worker_url), 518 embedded_test_server()->GetURL(worker_url),
520 wrapper()->context()->storage()->NewVersionId(), 519 wrapper()->context()->storage()->NewVersionId(),
521 wrapper()->context()->AsWeakPtr()); 520 wrapper()->context()->AsWeakPtr());
522 AssociateRendererProcessToPattern(pattern); 521 AssociateRendererProcessToPattern(pattern);
523 } 522 }
524 523
524 void StartWorker(ServiceWorkerStatusCode expected_status) {
525 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI));
526 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
527 base::RunLoop start_run_loop;
528 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
529 base::Bind(&self::StartOnIOThread, this,
530 start_run_loop.QuitClosure(),
531 &status));
532 start_run_loop.Run();
533 ASSERT_EQ(expected_status, status);
534 }
535
536 void StopWorker(ServiceWorkerStatusCode expected_status) {
537 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI));
538 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
539 base::RunLoop stop_run_loop;
540 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
541 base::Bind(&self::StopOnIOThread, this,
542 stop_run_loop.QuitClosure(),
543 &status));
544 stop_run_loop.Run();
545 ASSERT_EQ(expected_status, status);
546 }
547
525 void StartOnIOThread(const base::Closure& done, 548 void StartOnIOThread(const base::Closure& done,
526 ServiceWorkerStatusCode* result) { 549 ServiceWorkerStatusCode* result) {
527 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); 550 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
528 version_->StartWorker(CreateReceiver(BrowserThread::UI, done, result)); 551 version_->StartWorker(CreateReceiver(BrowserThread::UI, done, result));
529 } 552 }
530 553
531 void InstallOnIOThread(const base::Closure& done, 554 void InstallOnIOThread(const base::Closure& done,
532 ServiceWorkerStatusCode* result) { 555 ServiceWorkerStatusCode* result) {
533 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); 556 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
534 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 557 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 &status)); 669 &status));
647 stop_run_loop.Run(); 670 stop_run_loop.Run();
648 ASSERT_EQ(SERVICE_WORKER_OK, status); 671 ASSERT_EQ(SERVICE_WORKER_OK, status);
649 } 672 }
650 673
651 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, StartNotFound) { 674 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, StartNotFound) {
652 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this, 675 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this,
653 "/service_worker/nonexistent.js")); 676 "/service_worker/nonexistent.js"));
654 677
655 // Start a worker for nonexistent URL. 678 // Start a worker for nonexistent URL.
656 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 679 StartWorker(SERVICE_WORKER_ERROR_START_WORKER_FAILED);
657 base::RunLoop start_run_loop;
658 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
659 base::Bind(&self::StartOnIOThread, this,
660 start_run_loop.QuitClosure(),
661 &status));
662 start_run_loop.Run();
663 ASSERT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status);
664 } 680 }
665 681
666 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, Install) { 682 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, Install) {
667 InstallTestHelper("/service_worker/worker.js", SERVICE_WORKER_OK); 683 InstallTestHelper("/service_worker/worker.js", SERVICE_WORKER_OK);
668 } 684 }
669 685
670 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, 686 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
671 InstallWithWaitUntil_Fulfilled) { 687 InstallWithWaitUntil_Fulfilled) {
672 InstallTestHelper("/service_worker/worker_install_fulfilled.js", 688 InstallTestHelper("/service_worker/worker_install_fulfilled.js",
673 SERVICE_WORKER_OK); 689 SERVICE_WORKER_OK);
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
1039 "cross_site_xfer_confirm_via_serviceworker.html"; 1055 "cross_site_xfer_confirm_via_serviceworker.html";
1040 const base::string16 kOKTitle2(base::ASCIIToUTF16("OK_2")); 1056 const base::string16 kOKTitle2(base::ASCIIToUTF16("OK_2"));
1041 const base::string16 kFailTitle2(base::ASCIIToUTF16("FAIL_2")); 1057 const base::string16 kFailTitle2(base::ASCIIToUTF16("FAIL_2"));
1042 content::TitleWatcher title_watcher2(shell()->web_contents(), kOKTitle2); 1058 content::TitleWatcher title_watcher2(shell()->web_contents(), kOKTitle2);
1043 title_watcher2.AlsoWaitForTitle(kFailTitle2); 1059 title_watcher2.AlsoWaitForTitle(kFailTitle2);
1044 1060
1045 NavigateToURL(shell(), embedded_test_server()->GetURL(kConfirmPageUrl)); 1061 NavigateToURL(shell(), embedded_test_server()->GetURL(kConfirmPageUrl));
1046 EXPECT_EQ(kOKTitle2, title_watcher2.WaitAndGetTitle()); 1062 EXPECT_EQ(kOKTitle2, title_watcher2.WaitAndGetTitle());
1047 } 1063 }
1048 1064
1065 class ServiceWorkerVersionBrowserV8CacheTest
1066 : public ServiceWorkerVersionBrowserTest,
1067 public ServiceWorkerVersion::Listener {
1068 public:
1069 typedef ServiceWorkerVersionBrowserV8CacheTest self;
kinuko 2015/02/24 05:21:39 nit: typedef -> using in new code?
horo 2015/02/24 06:15:52 Done.
1070 ~ServiceWorkerVersionBrowserV8CacheTest() override {
1071 if (version_)
1072 version_->RemoveListener(this);
1073 }
1074 void SetUpCommandLine(base::CommandLine* command_line) override {
1075 ServiceWorkerBrowserTest::SetUpCommandLine(command_line);
1076 command_line->AppendSwitchASCII(switches::kV8CacheOptions, "code");
1077 }
1078 void SetUpRegistrationAndListenerOnIOThread(const std::string& worker_url) {
1079 SetUpRegistrationOnIOThread(worker_url);
1080 version_->AddListener(this);
1081 }
1082
1083 protected:
1084 // ServiceWorkerVersion::Listener overrides
1085 void OnCachedMetadataUpdated(ServiceWorkerVersion* version) override {
1086 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
1087 cache_updated_closure_);
1088 }
1089
1090 base::Closure cache_updated_closure_;
1091 };
1092
1093 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserV8CacheTest, Restart) {
1094 RunOnIOThread(base::Bind(&self::SetUpRegistrationAndListenerOnIOThread, this,
1095 "/service_worker/worker.js"));
1096
1097 base::RunLoop cached_metadata_run_loop;
1098 cache_updated_closure_ = cached_metadata_run_loop.QuitClosure();
1099
1100 // Start a worker.
1101 StartWorker(SERVICE_WORKER_OK);
1102 // Wait for the matadata is stored.
1103 cached_metadata_run_loop.Run();
kinuko 2015/02/24 05:21:39 nit: please insert an empty line here, and add a c
horo 2015/02/24 06:15:53 Done.
1104 // Activate the worker.
1105 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
1106 base::RunLoop acrivate_run_loop;
1107 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
1108 base::Bind(&self::ActivateOnIOThread, this,
1109 acrivate_run_loop.QuitClosure(), &status));
1110 acrivate_run_loop.Run();
1111 ASSERT_EQ(SERVICE_WORKER_OK, status);
1112 // Stop the worker.
1113 StopWorker(SERVICE_WORKER_OK);
1114 // Restart the worker.
1115 StartWorker(SERVICE_WORKER_OK);
1116 // Stop the worker.
1117 StopWorker(SERVICE_WORKER_OK);
1118 }
1119
1049 } // namespace content 1120 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_version.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698