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

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

Issue 2204873002: ServiceWorker: Run functions in the browsertest on appropriate thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add DCHECK Created 4 years, 4 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 | no next file » | 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <map> 8 #include <map>
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 scoped_refptr<ServiceWorkerContextWrapper> wrapper_; 376 scoped_refptr<ServiceWorkerContextWrapper> wrapper_;
377 }; 377 };
378 378
379 class ConsoleListener : public EmbeddedWorkerInstance::Listener { 379 class ConsoleListener : public EmbeddedWorkerInstance::Listener {
380 public: 380 public:
381 void OnReportConsoleMessage(int source_identifier, 381 void OnReportConsoleMessage(int source_identifier,
382 int message_level, 382 int message_level,
383 const base::string16& message, 383 const base::string16& message,
384 int line_number, 384 int line_number,
385 const GURL& source_url) override { 385 const GURL& source_url) override {
386 messages_.push_back(message); 386 DCHECK_CURRENTLY_ON(BrowserThread::IO);
387 if (!quit_.is_null() && messages_.size() == expected_message_count_) { 387 BrowserThread::PostTask(
388 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit_); 388 BrowserThread::UI, FROM_HERE,
389 quit_.Reset(); 389 base::Bind(&ConsoleListener::OnReportCOnsoleMessageOnUI,
390 } 390 base::Unretained(this), message));
391 } 391 }
392 392
393 void WaitForConsoleMessages(size_t expected_message_count) { 393 void WaitForConsoleMessages(size_t expected_message_count) {
394 DCHECK_CURRENTLY_ON(BrowserThread::UI);
394 if (messages_.size() >= expected_message_count) 395 if (messages_.size() >= expected_message_count)
395 return; 396 return;
396 397
397 expected_message_count_ = expected_message_count; 398 expected_message_count_ = expected_message_count;
398 base::RunLoop console_run_loop; 399 base::RunLoop console_run_loop;
399 quit_ = console_run_loop.QuitClosure(); 400 quit_ = console_run_loop.QuitClosure();
400 console_run_loop.Run(); 401 console_run_loop.Run();
401 402
402 ASSERT_EQ(messages_.size(), expected_message_count); 403 ASSERT_EQ(messages_.size(), expected_message_count);
403 } 404 }
404 405
405 bool OnMessageReceived(const IPC::Message& message) override { return false; } 406 bool OnMessageReceived(const IPC::Message& message) override { return false; }
406 const std::vector<base::string16>& messages() const { return messages_; } 407 const std::vector<base::string16>& messages() const { return messages_; }
407 408
408 private: 409 private:
410 void OnReportCOnsoleMessageOnUI(const base::string16& message) {
nhiroki 2016/08/03 00:00:58 s/COnsole/Console/
shimazu 2016/08/03 00:15:58 Done.
411 DCHECK_CURRENTLY_ON(BrowserThread::UI);
412 messages_.push_back(message);
413 if (!quit_.is_null() && messages_.size() == expected_message_count_) {
414 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit_);
nhiroki 2016/08/03 00:00:58 This PostTask wouldn't be necessary because we're
shimazu 2016/08/03 00:15:58 Done, and also removed unnecessary check (messages
415 quit_.Reset();
416 }
417 }
418
419 // These parameters must be accessed on the UI thread.
409 std::vector<base::string16> messages_; 420 std::vector<base::string16> messages_;
410 size_t expected_message_count_; 421 size_t expected_message_count_;
411 base::Closure quit_; 422 base::Closure quit_;
412 }; 423 };
413 424
414 class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { 425 class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest {
415 public: 426 public:
416 using self = ServiceWorkerVersionBrowserTest; 427 using self = ServiceWorkerVersionBrowserTest;
417 428
418 ~ServiceWorkerVersionBrowserTest() override {} 429 ~ServiceWorkerVersionBrowserTest() override {}
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 ActivateTestHelper("/service_worker/worker_activate_rejected.js", 934 ActivateTestHelper("/service_worker/worker_activate_rejected.js",
924 SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED); 935 SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED);
925 } 936 }
926 937
927 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, 938 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
928 InstallWithWaitUntil_Rejected) { 939 InstallWithWaitUntil_Rejected) {
929 InstallTestHelper("/service_worker/worker_install_rejected.js", 940 InstallTestHelper("/service_worker/worker_install_rejected.js",
930 SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED); 941 SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED);
931 } 942 }
932 943
933 // Has errors under TSan. See https://crbug.com/631323.
934 #if defined(THREAD_SANITIZER)
935 #define MAYBE_InstallWithWaitUntil_RejectConsoleMessage \
936 DISABLED_InstallWithWaitUntil_RejectConsoleMessage
937 #else
938 #define MAYBE_InstallWithWaitUntil_RejectConsoleMessage \
939 InstallWithWaitUntil_RejectConsoleMessage
940 #endif
941 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, 944 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
942 MAYBE_InstallWithWaitUntil_RejectConsoleMessage) { 945 InstallWithWaitUntil_RejectConsoleMessage) {
943 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this, 946 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this,
944 "/service_worker/worker_install_rejected.js")); 947 "/service_worker/worker_install_rejected.js"));
945 948
946 ConsoleListener console_listener; 949 ConsoleListener console_listener;
947 version_->embedded_worker()->AddListener(&console_listener); 950 RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::AddListener,
951 base::Unretained(version_->embedded_worker()),
952 &console_listener));
948 953
949 // Dispatch install on a worker. 954 // Dispatch install on a worker.
950 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 955 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
951 base::RunLoop install_run_loop; 956 base::RunLoop install_run_loop;
952 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 957 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
953 base::Bind(&self::InstallOnIOThread, this, 958 base::Bind(&self::InstallOnIOThread, this,
954 install_run_loop.QuitClosure(), &status)); 959 install_run_loop.QuitClosure(), &status));
955 install_run_loop.Run(); 960 install_run_loop.Run();
956 ASSERT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); 961 ASSERT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status);
957 962
958 const base::string16 expected = 963 const base::string16 expected =
959 base::ASCIIToUTF16("Rejecting oninstall event"); 964 base::ASCIIToUTF16("Rejecting oninstall event");
960 console_listener.WaitForConsoleMessages(1); 965 console_listener.WaitForConsoleMessages(1);
961 ASSERT_NE(base::string16::npos, 966 ASSERT_NE(base::string16::npos,
962 console_listener.messages()[0].find(expected)); 967 console_listener.messages()[0].find(expected));
963 version_->embedded_worker()->RemoveListener(&console_listener); 968 RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::RemoveListener,
969 base::Unretained(version_->embedded_worker()),
970 &console_listener));
964 } 971 }
965 972
966 class WaitForLoaded : public EmbeddedWorkerInstance::Listener { 973 class WaitForLoaded : public EmbeddedWorkerInstance::Listener {
967 public: 974 public:
968 explicit WaitForLoaded(const base::Closure& quit) : quit_(quit) {} 975 explicit WaitForLoaded(const base::Closure& quit) : quit_(quit) {}
969 976
970 void OnThreadStarted() override { 977 void OnThreadStarted() override {
978 DCHECK_CURRENTLY_ON(BrowserThread::IO);
971 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit_); 979 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit_);
972 } 980 }
973 bool OnMessageReceived(const IPC::Message& message) override { return false; } 981 bool OnMessageReceived(const IPC::Message& message) override { return false; }
974 982
975 private: 983 private:
976 base::Closure quit_; 984 base::Closure quit_;
977 }; 985 };
978 986
979 // Has errors under TSan. See https://crbug.com/631323. 987 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, TimeoutStartingWorker) {
980 #if defined(THREAD_SANITIZER)
981 #define MAYBE_TimeoutStartingWorker DISABLED_TimeoutStartingWorker
982 #else
983 #define MAYBE_TimeoutStartingWorker TimeoutStartingWorker
984 #endif
985 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
986 MAYBE_TimeoutStartingWorker) {
987 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this, 988 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this,
988 "/service_worker/while_true_worker.js")); 989 "/service_worker/while_true_worker.js"));
989 990
990 // Start a worker, waiting until the script is loaded. 991 // Start a worker, waiting until the script is loaded.
991 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 992 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
992 base::RunLoop start_run_loop; 993 base::RunLoop start_run_loop;
993 base::RunLoop load_run_loop; 994 base::RunLoop load_run_loop;
994 WaitForLoaded wait_for_load(load_run_loop.QuitClosure()); 995 WaitForLoaded wait_for_load(load_run_loop.QuitClosure());
995 version_->embedded_worker()->AddListener(&wait_for_load); 996 RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::AddListener,
997 base::Unretained(version_->embedded_worker()),
998 &wait_for_load));
996 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 999 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
997 base::Bind(&self::StartOnIOThread, this, 1000 base::Bind(&self::StartOnIOThread, this,
998 start_run_loop.QuitClosure(), &status)); 1001 start_run_loop.QuitClosure(), &status));
999 load_run_loop.Run(); 1002 load_run_loop.Run();
1000 version_->embedded_worker()->RemoveListener(&wait_for_load); 1003 RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::RemoveListener,
1004 base::Unretained(version_->embedded_worker()),
1005 &wait_for_load));
1001 1006
1002 // The script has loaded but start has not completed yet. 1007 // The script has loaded but start has not completed yet.
1003 ASSERT_EQ(SERVICE_WORKER_ERROR_FAILED, status); 1008 ASSERT_EQ(SERVICE_WORKER_ERROR_FAILED, status);
1004 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); 1009 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status());
1005 1010
1006 // Simulate execution timeout. Use a delay to prevent killing the worker 1011 // Simulate execution timeout. Use a delay to prevent killing the worker
1007 // before it's started execution. 1012 // before it's started execution.
1008 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 1013 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
1009 RunOnIOThreadWithDelay(base::Bind(&self::TimeoutWorkerOnIOThread, this), 1014 RunOnIOThreadWithDelay(base::Bind(&self::TimeoutWorkerOnIOThread, this),
1010 base::TimeDelta::FromMilliseconds(100)); 1015 base::TimeDelta::FromMilliseconds(100));
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 1092
1088 FetchOnRegisteredWorker(&result, &response2, &blob_data_handle); 1093 FetchOnRegisteredWorker(&result, &response2, &blob_data_handle);
1089 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); 1094 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result);
1090 EXPECT_EQ(200, response2.status_code); 1095 EXPECT_EQ(200, response2.status_code);
1091 EXPECT_EQ("OK", response2.status_text); 1096 EXPECT_EQ("OK", response2.status_text);
1092 EXPECT_EQ(response1.response_time, response2.response_time); 1097 EXPECT_EQ(response1.response_time, response2.response_time);
1093 EXPECT_TRUE(response2.is_in_cache_storage); 1098 EXPECT_TRUE(response2.is_in_cache_storage);
1094 EXPECT_EQ("cache_name", response2.cache_storage_cache_name); 1099 EXPECT_EQ("cache_name", response2.cache_storage_cache_name);
1095 } 1100 }
1096 1101
1097 // Has errors under TSan. See https://crbug.com/631323.
1098 #if defined(THREAD_SANITIZER)
1099 #define MAYBE_FetchEvent_respondWithRejection \
1100 DISABLED_FetchEvent_respondWithRejection
1101 #else
1102 #define MAYBE_FetchEvent_respondWithRejection FetchEvent_respondWithRejection
1103 #endif
1104 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, 1102 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
1105 MAYBE_FetchEvent_respondWithRejection) { 1103 FetchEvent_respondWithRejection) {
1106 ServiceWorkerFetchEventResult result; 1104 ServiceWorkerFetchEventResult result;
1107 ServiceWorkerResponse response; 1105 ServiceWorkerResponse response;
1108 std::unique_ptr<storage::BlobDataHandle> blob_data_handle; 1106 std::unique_ptr<storage::BlobDataHandle> blob_data_handle;
1109 1107
1110 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this, 1108 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this,
1111 "/service_worker/fetch_event_rejected.js")); 1109 "/service_worker/fetch_event_rejected.js"));
1112 1110
1113 ConsoleListener console_listener; 1111 ConsoleListener console_listener;
1114 version_->embedded_worker()->AddListener(&console_listener); 1112 RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::AddListener,
1113 base::Unretained(version_->embedded_worker()),
1114 &console_listener));
1115 1115
1116 FetchOnRegisteredWorker(&result, &response, &blob_data_handle); 1116 FetchOnRegisteredWorker(&result, &response, &blob_data_handle);
1117 const base::string16 expected1 = base::ASCIIToUTF16( 1117 const base::string16 expected1 = base::ASCIIToUTF16(
1118 "resulted in a network error response: the promise was rejected."); 1118 "resulted in a network error response: the promise was rejected.");
1119 const base::string16 expected2 = 1119 const base::string16 expected2 =
1120 base::ASCIIToUTF16("Uncaught (in promise) Rejecting respondWith promise"); 1120 base::ASCIIToUTF16("Uncaught (in promise) Rejecting respondWith promise");
1121 console_listener.WaitForConsoleMessages(2); 1121 console_listener.WaitForConsoleMessages(2);
1122 ASSERT_NE(base::string16::npos, 1122 ASSERT_NE(base::string16::npos,
1123 console_listener.messages()[0].find(expected1)); 1123 console_listener.messages()[0].find(expected1));
1124 ASSERT_EQ(0u, console_listener.messages()[1].find(expected2)); 1124 ASSERT_EQ(0u, console_listener.messages()[1].find(expected2));
1125 version_->embedded_worker()->RemoveListener(&console_listener); 1125 RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::RemoveListener,
1126 base::Unretained(version_->embedded_worker()),
1127 &console_listener));
1126 1128
1127 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); 1129 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result);
1128 EXPECT_EQ(0, response.status_code); 1130 EXPECT_EQ(0, response.status_code);
1129 1131
1130 ASSERT_FALSE(blob_data_handle); 1132 ASSERT_FALSE(blob_data_handle);
1131 } 1133 }
1132 1134
1133 class MockContentBrowserClient : public TestContentBrowserClient { 1135 class MockContentBrowserClient : public TestContentBrowserClient {
1134 public: 1136 public:
1135 MockContentBrowserClient() 1137 MockContentBrowserClient()
(...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after
1988 1990
1989 IN_PROC_BROWSER_TEST_F(ServiceWorkerDisableWebSecurityTest, UpdateNoCrash) { 1991 IN_PROC_BROWSER_TEST_F(ServiceWorkerDisableWebSecurityTest, UpdateNoCrash) {
1990 const char kPageUrl[] = "/service_worker/disable_web_security_update.html"; 1992 const char kPageUrl[] = "/service_worker/disable_web_security_update.html";
1991 const char kScopeUrl[] = "/service_worker/scope/"; 1993 const char kScopeUrl[] = "/service_worker/scope/";
1992 const char kWorkerUrl[] = "/service_worker/fetch_event_blob.js"; 1994 const char kWorkerUrl[] = "/service_worker/fetch_event_blob.js";
1993 RegisterServiceWorkerOnCrossOriginServer(kScopeUrl, kWorkerUrl); 1995 RegisterServiceWorkerOnCrossOriginServer(kScopeUrl, kWorkerUrl);
1994 RunTestWithCrossOriginURL(kPageUrl, kScopeUrl); 1996 RunTestWithCrossOriginURL(kPageUrl, kScopeUrl);
1995 } 1997 }
1996 1998
1997 } // namespace content 1999 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698