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

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

Issue 2218943002: Introduce ServiceWorker.EventDispatchingDelay UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: incorporated mpearson@'s comment Created 4 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
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 "content/browser/service_worker/service_worker_version.h" 5 #include "content/browser/service_worker/service_worker_version.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <tuple> 8 #include <tuple>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "base/test/histogram_tester.h" 13 #include "base/test/histogram_tester.h"
14 #include "base/time/time.h"
14 #include "content/browser/service_worker/embedded_worker_registry.h" 15 #include "content/browser/service_worker/embedded_worker_registry.h"
15 #include "content/browser/service_worker/embedded_worker_status.h" 16 #include "content/browser/service_worker/embedded_worker_status.h"
16 #include "content/browser/service_worker/embedded_worker_test_helper.h" 17 #include "content/browser/service_worker/embedded_worker_test_helper.h"
17 #include "content/browser/service_worker/service_worker_context_core.h" 18 #include "content/browser/service_worker/service_worker_context_core.h"
18 #include "content/browser/service_worker/service_worker_registration.h" 19 #include "content/browser/service_worker/service_worker_registration.h"
19 #include "content/browser/service_worker/service_worker_test_utils.h" 20 #include "content/browser/service_worker/service_worker_test_utils.h"
20 #include "content/common/service_worker/service_worker_utils.h" 21 #include "content/common/service_worker/service_worker_utils.h"
21 #include "content/public/test/mock_render_process_host.h" 22 #include "content/public/test/mock_render_process_host.h"
22 #include "content/public/test/test_browser_thread_bundle.h" 23 #include "content/public/test/test_browser_thread_bundle.h"
23 #include "content/public/test/test_mojo_service.mojom.h" 24 #include "content/public/test/test_mojo_service.mojom.h"
24 #include "content/public/test/test_utils.h" 25 #include "content/public/test/test_utils.h"
25 #include "mojo/public/cpp/bindings/strong_binding.h" 26 #include "mojo/public/cpp/bindings/strong_binding.h"
26 #include "services/shell/public/cpp/interface_registry.h" 27 #include "services/shell/public/cpp/interface_registry.h"
27 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
28 29
29 // IPC messages for testing --------------------------------------------------- 30 // IPC messages for testing ---------------------------------------------------
30 31
31 #define IPC_MESSAGE_IMPL 32 #define IPC_MESSAGE_IMPL
32 #include "ipc/ipc_message_macros.h" 33 #include "ipc/ipc_message_macros.h"
33 34
34 #define IPC_MESSAGE_START TestMsgStart 35 #define IPC_MESSAGE_START TestMsgStart
35 36
36 IPC_MESSAGE_CONTROL0(TestMsg_Message) 37 IPC_MESSAGE_CONTROL0(TestMsg_Message)
37 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int) 38 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int)
38 39
39 IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int) 40 IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int)
40 IPC_MESSAGE_CONTROL2(TestMsg_TestEvent_Multiple, int, int) 41 IPC_MESSAGE_CONTROL2(TestMsg_TestEvent_Multiple, int, int)
41 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string) 42 IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string)
42 IPC_MESSAGE_ROUTED2(TestMsg_TestSimpleEventResult, 43 IPC_MESSAGE_ROUTED3(TestMsg_TestSimpleEventResult,
43 int, 44 int,
44 blink::WebServiceWorkerEventResult) 45 blink::WebServiceWorkerEventResult,
46 base::Time)
45 47
46 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerEventResult, 48 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerEventResult,
47 blink::WebServiceWorkerEventResultLast) 49 blink::WebServiceWorkerEventResultLast)
48 50
49 // --------------------------------------------------------------------------- 51 // ---------------------------------------------------------------------------
50 52
51 namespace content { 53 namespace content {
52 54
53 namespace { 55 namespace {
54 56
(...skipping 26 matching lines...) Expand all
81 83
82 void SimulateSendEventResult(int embedded_worker_id, 84 void SimulateSendEventResult(int embedded_worker_id,
83 int request_id, 85 int request_id,
84 const std::string& reply) { 86 const std::string& reply) {
85 SimulateSend( 87 SimulateSend(
86 new TestMsg_TestEventResult(embedded_worker_id, request_id, reply)); 88 new TestMsg_TestEventResult(embedded_worker_id, request_id, reply));
87 } 89 }
88 90
89 void SimulateSendSimpleEventResult(int embedded_worker_id, 91 void SimulateSendSimpleEventResult(int embedded_worker_id,
90 int request_id, 92 int request_id,
91 blink::WebServiceWorkerEventResult reply) { 93 blink::WebServiceWorkerEventResult reply,
92 SimulateSend(new TestMsg_TestSimpleEventResult(embedded_worker_id, 94 base::Time dispatch_event_time) {
93 request_id, reply)); 95 SimulateSend(new TestMsg_TestSimpleEventResult(
96 embedded_worker_id, request_id, reply, dispatch_event_time));
94 } 97 }
95 98
96 private: 99 private:
97 void OnMessage() { 100 void OnMessage() {
98 // Do nothing. 101 // Do nothing.
99 } 102 }
100 103
101 int current_embedded_worker_id_; 104 int current_embedded_worker_id_;
102 DISALLOW_COPY_AND_ASSIGN(MessageReceiver); 105 DISALLOW_COPY_AND_ASSIGN(MessageReceiver);
103 }; 106 };
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 runner->Run(); 266 runner->Run();
264 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); 267 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status);
265 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 268 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
266 269
267 // Start request, as if an event is being dispatched. 270 // Start request, as if an event is being dispatched.
268 int request_id = version_->StartRequest( 271 int request_id = version_->StartRequest(
269 event_type, CreateReceiverOnCurrentThread(&status)); 272 event_type, CreateReceiverOnCurrentThread(&status));
270 base::RunLoop().RunUntilIdle(); 273 base::RunLoop().RunUntilIdle();
271 274
272 // And finish request, as if a response to the event was received. 275 // And finish request, as if a response to the event was received.
273 EXPECT_TRUE(version_->FinishRequest(request_id, true)); 276 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */,
277 base::Time::Now()));
274 base::RunLoop().RunUntilIdle(); 278 base::RunLoop().RunUntilIdle();
275 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); 279 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status);
276 } 280 }
277 281
278 TestBrowserThreadBundle thread_bundle_; 282 TestBrowserThreadBundle thread_bundle_;
279 std::unique_ptr<MessageReceiver> helper_; 283 std::unique_ptr<MessageReceiver> helper_;
280 scoped_refptr<ServiceWorkerRegistration> registration_; 284 scoped_refptr<ServiceWorkerRegistration> registration_;
281 scoped_refptr<ServiceWorkerVersion> version_; 285 scoped_refptr<ServiceWorkerVersion> version_;
282 GURL pattern_; 286 GURL pattern_;
283 287
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 idle_time = version_->idle_time_; 649 idle_time = version_->idle_time_;
646 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME); 650 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME);
647 EXPECT_LT(idle_time, version_->idle_time_); 651 EXPECT_LT(idle_time, version_->idle_time_);
648 652
649 // Starting and finishing a request resets the idle time. 653 // Starting and finishing a request resets the idle time.
650 version_->idle_time_ -= kOneSecond; 654 version_->idle_time_ -= kOneSecond;
651 idle_time = version_->idle_time_; 655 idle_time = version_->idle_time_;
652 int request_id = 656 int request_id =
653 version_->StartRequest(ServiceWorkerMetrics::EventType::SYNC, 657 version_->StartRequest(ServiceWorkerMetrics::EventType::SYNC,
654 CreateReceiverOnCurrentThread(&status)); 658 CreateReceiverOnCurrentThread(&status));
655 EXPECT_TRUE(version_->FinishRequest(request_id, true)); 659 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */,
660 base::Time::Now()));
656 661
657 EXPECT_EQ(SERVICE_WORKER_OK, status); 662 EXPECT_EQ(SERVICE_WORKER_OK, status);
658 EXPECT_LT(idle_time, version_->idle_time_); 663 EXPECT_LT(idle_time, version_->idle_time_);
659 } 664 }
660 665
661 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) { 666 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) {
662 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 667 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
663 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 668 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
664 CreateReceiverOnCurrentThread(&status)); 669 CreateReceiverOnCurrentThread(&status));
665 670
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); 832 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status);
828 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 833 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
829 834
830 // Simulate timeout. 835 // Simulate timeout.
831 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 836 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
832 version_->SetAllRequestExpirations(base::TimeTicks::Now()); 837 version_->SetAllRequestExpirations(base::TimeTicks::Now());
833 version_->timeout_timer_.user_task().Run(); 838 version_->timeout_timer_.user_task().Run();
834 base::RunLoop().RunUntilIdle(); 839 base::RunLoop().RunUntilIdle();
835 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 840 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
836 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 841 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
837 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 842 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
843 base::Time::Now()));
838 } 844 }
839 845
840 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeout) { 846 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeout) {
841 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 847 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
842 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 848 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
843 849
844 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 850 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
845 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 851 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
846 base::RunLoop().RunUntilIdle(); 852 base::RunLoop().RunUntilIdle();
847 853
848 // Create a request that should expire Now(). 854 // Create a request that should expire Now().
849 int request_id = version_->StartRequestWithCustomTimeout( 855 int request_id = version_->StartRequestWithCustomTimeout(
850 ServiceWorkerMetrics::EventType::SYNC, 856 ServiceWorkerMetrics::EventType::SYNC,
851 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), 857 CreateReceiverOnCurrentThread(&status), base::TimeDelta(),
852 ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); 858 ServiceWorkerVersion::CONTINUE_ON_TIMEOUT);
853 859
854 base::RunLoop().RunUntilIdle(); 860 base::RunLoop().RunUntilIdle();
855 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 861 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
856 version_->timeout_timer_.user_task().Run(); 862 version_->timeout_timer_.user_task().Run();
857 base::RunLoop().RunUntilIdle(); 863 base::RunLoop().RunUntilIdle();
858 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 864 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
859 865
860 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 866 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
867 base::Time::Now()));
861 868
862 // CONTINUE_ON_TIMEOUT timeouts don't stop the service worker. 869 // CONTINUE_ON_TIMEOUT timeouts don't stop the service worker.
863 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 870 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
864 } 871 }
865 872
866 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeoutKill) { 873 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeoutKill) {
867 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 874 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
868 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 875 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
869 876
870 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 877 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
871 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 878 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
872 base::RunLoop().RunUntilIdle(); 879 base::RunLoop().RunUntilIdle();
873 880
874 // Create a request that should expire Now(). 881 // Create a request that should expire Now().
875 int request_id = version_->StartRequestWithCustomTimeout( 882 int request_id = version_->StartRequestWithCustomTimeout(
876 ServiceWorkerMetrics::EventType::SYNC, 883 ServiceWorkerMetrics::EventType::SYNC,
877 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), 884 CreateReceiverOnCurrentThread(&status), base::TimeDelta(),
878 ServiceWorkerVersion::KILL_ON_TIMEOUT); 885 ServiceWorkerVersion::KILL_ON_TIMEOUT);
879 886
880 base::RunLoop().RunUntilIdle(); 887 base::RunLoop().RunUntilIdle();
881 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 888 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
882 version_->timeout_timer_.user_task().Run(); 889 version_->timeout_timer_.user_task().Run();
883 base::RunLoop().RunUntilIdle(); 890 base::RunLoop().RunUntilIdle();
884 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 891 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
885 892
886 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 893 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
894 base::Time::Now()));
887 895
888 // KILL_ON_TIMEOUT timeouts should stop the service worker. 896 // KILL_ON_TIMEOUT timeouts should stop the service worker.
889 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 897 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
890 } 898 }
891 899
892 TEST_F(ServiceWorkerVersionTest, MixedRequestTimeouts) { 900 TEST_F(ServiceWorkerVersionTest, MixedRequestTimeouts) {
893 ServiceWorkerStatusCode sync_status = 901 ServiceWorkerStatusCode sync_status =
894 SERVICE_WORKER_ERROR_NETWORK; // dummy value 902 SERVICE_WORKER_ERROR_NETWORK; // dummy value
895 ServiceWorkerStatusCode fetch_status = 903 ServiceWorkerStatusCode fetch_status =
896 SERVICE_WORKER_ERROR_NETWORK; // dummy value 904 SERVICE_WORKER_ERROR_NETWORK; // dummy value
(...skipping 19 matching lines...) Expand all
916 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 924 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
917 version_->timeout_timer_.user_task().Run(); 925 version_->timeout_timer_.user_task().Run();
918 base::RunLoop().RunUntilIdle(); 926 base::RunLoop().RunUntilIdle();
919 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, sync_status); 927 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, sync_status);
920 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, fetch_status); 928 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, fetch_status);
921 929
922 // Background sync timeouts don't stop the service worker. 930 // Background sync timeouts don't stop the service worker.
923 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 931 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
924 932
925 // Gracefully handle the sync event finishing after the timeout. 933 // Gracefully handle the sync event finishing after the timeout.
926 EXPECT_FALSE(version_->FinishRequest(sync_request_id, true)); 934 EXPECT_FALSE(version_->FinishRequest(sync_request_id, true /* was_handled */,
935 base::Time::Now()));
927 936
928 // Verify that the fetch times out later. 937 // Verify that the fetch times out later.
929 version_->SetAllRequestExpirations(base::TimeTicks::Now()); 938 version_->SetAllRequestExpirations(base::TimeTicks::Now());
930 version_->timeout_timer_.user_task().Run(); 939 version_->timeout_timer_.user_task().Run();
931 base::RunLoop().RunUntilIdle(); 940 base::RunLoop().RunUntilIdle();
932 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, fetch_status); 941 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, fetch_status);
933 942
934 // Fetch request should no longer exist. 943 // Fetch request should no longer exist.
935 EXPECT_FALSE(version_->FinishRequest(fetch_request_id, true)); 944 EXPECT_FALSE(version_->FinishRequest(fetch_request_id, true /* was_handled */,
945 base::Time::Now()));
936 946
937 // Other timeouts do stop the service worker. 947 // Other timeouts do stop the service worker.
938 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 948 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
939 } 949 }
940 950
941 TEST_F(ServiceWorkerFailToStartTest, RendererCrash) { 951 TEST_F(ServiceWorkerFailToStartTest, RendererCrash) {
942 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 952 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
943 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 953 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
944 CreateReceiverOnCurrentThread(&status)); 954 CreateReceiverOnCurrentThread(&status));
945 base::RunLoop().RunUntilIdle(); 955 base::RunLoop().RunUntilIdle();
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
1167 helper_->context()->RemoveAllProviderHostsForProcess(process_id); 1177 helper_->context()->RemoveAllProviderHostsForProcess(process_id);
1168 helper_->context()->embedded_worker_registry()->RemoveChildProcessSender( 1178 helper_->context()->embedded_worker_registry()->RemoveChildProcessSender(
1169 process_id); 1179 process_id);
1170 base::RunLoop().RunUntilIdle(); 1180 base::RunLoop().RunUntilIdle();
1171 1181
1172 // Callback completed. 1182 // Callback completed.
1173 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); 1183 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status);
1174 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 1184 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
1175 1185
1176 // Request already failed, calling finsh should return false. 1186 // Request already failed, calling finsh should return false.
1177 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 1187 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
1188 base::Time::Now()));
1178 } 1189 }
1179 1190
1180 TEST_F(ServiceWorkerVersionWithMojoTest, MojoService) { 1191 TEST_F(ServiceWorkerVersionWithMojoTest, MojoService) {
1181 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1192 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1182 1193
1183 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1194 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1184 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1195 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1185 CreateReceiverOnCurrentThread(&status)); 1196 CreateReceiverOnCurrentThread(&status));
1186 base::RunLoop().RunUntilIdle(); 1197 base::RunLoop().RunUntilIdle();
1187 EXPECT_EQ(SERVICE_WORKER_OK, status); 1198 EXPECT_EQ(SERVICE_WORKER_OK, status);
1188 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1199 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1189 1200
1190 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1201 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1191 int request_id = version_->StartRequest( 1202 int request_id = version_->StartRequest(
1192 ServiceWorkerMetrics::EventType::SYNC, 1203 ServiceWorkerMetrics::EventType::SYNC,
1193 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1204 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1194 base::WeakPtr<mojom::TestMojoService> service = 1205 base::WeakPtr<mojom::TestMojoService> service =
1195 version_->GetMojoServiceForRequest<mojom::TestMojoService>(request_id); 1206 version_->GetMojoServiceForRequest<mojom::TestMojoService>(request_id);
1196 service->DoSomething(runner->QuitClosure()); 1207 service->DoSomething(runner->QuitClosure());
1197 runner->Run(); 1208 runner->Run();
1198 1209
1199 // Mojo service does exist in worker, so error callback should not have been 1210 // Mojo service does exist in worker, so error callback should not have been
1200 // called and FinishRequest should return true. 1211 // called and FinishRequest should return true.
1201 EXPECT_EQ(SERVICE_WORKER_OK, status); 1212 EXPECT_EQ(SERVICE_WORKER_OK, status);
1202 EXPECT_TRUE(version_->FinishRequest(request_id, true)); 1213 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */,
1214 base::Time::Now()));
1203 } 1215 }
1204 1216
1205 TEST_F(ServiceWorkerVersionTest, NonExistentMojoService) { 1217 TEST_F(ServiceWorkerVersionTest, NonExistentMojoService) {
1206 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1218 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1207 1219
1208 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1220 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1209 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1221 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1210 CreateReceiverOnCurrentThread(&status)); 1222 CreateReceiverOnCurrentThread(&status));
1211 base::RunLoop().RunUntilIdle(); 1223 base::RunLoop().RunUntilIdle();
1212 EXPECT_EQ(SERVICE_WORKER_OK, status); 1224 EXPECT_EQ(SERVICE_WORKER_OK, status);
1213 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1225 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1214 1226
1215 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1227 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1216 int request_id = version_->StartRequest( 1228 int request_id = version_->StartRequest(
1217 ServiceWorkerMetrics::EventType::SYNC, 1229 ServiceWorkerMetrics::EventType::SYNC,
1218 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1230 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1219 base::WeakPtr<mojom::TestMojoService> service = 1231 base::WeakPtr<mojom::TestMojoService> service =
1220 version_->GetMojoServiceForRequest<mojom::TestMojoService>(request_id); 1232 version_->GetMojoServiceForRequest<mojom::TestMojoService>(request_id);
1221 service->DoSomething(runner->QuitClosure()); 1233 service->DoSomething(runner->QuitClosure());
1222 runner->Run(); 1234 runner->Run();
1223 1235
1224 // Mojo service doesn't exist in worker, so error callback should have been 1236 // Mojo service doesn't exist in worker, so error callback should have been
1225 // called and FinishRequest should return false. 1237 // called and FinishRequest should return false.
1226 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); 1238 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status);
1227 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 1239 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
1240 base::Time::Now()));
1228 } 1241 }
1229 1242
1230 TEST_F(ServiceWorkerVersionTest, DispatchEvent) { 1243 TEST_F(ServiceWorkerVersionTest, DispatchEvent) {
1231 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1244 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1232 1245
1233 // Activate and start worker. 1246 // Activate and start worker.
1234 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1247 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1235 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1248 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1236 CreateReceiverOnCurrentThread(&status)); 1249 CreateReceiverOnCurrentThread(&status));
1237 base::RunLoop().RunUntilIdle(); 1250 base::RunLoop().RunUntilIdle();
(...skipping 24 matching lines...) Expand all
1262 version_->embedded_worker()->embedded_worker_id(), request_id, reply); 1275 version_->embedded_worker()->embedded_worker_id(), request_id, reply);
1263 runner->Run(); 1276 runner->Run();
1264 1277
1265 // Verify message callback got called with correct reply. 1278 // Verify message callback got called with correct reply.
1266 EXPECT_EQ(request_id, received_request_id); 1279 EXPECT_EQ(request_id, received_request_id);
1267 EXPECT_EQ(reply, received_data); 1280 EXPECT_EQ(reply, received_data);
1268 1281
1269 // Should not have timed out, so error callback should not have been 1282 // Should not have timed out, so error callback should not have been
1270 // called and FinishRequest should return true. 1283 // called and FinishRequest should return true.
1271 EXPECT_EQ(SERVICE_WORKER_OK, status); 1284 EXPECT_EQ(SERVICE_WORKER_OK, status);
1272 EXPECT_TRUE(version_->FinishRequest(request_id, true)); 1285 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */,
1286 base::Time::Now()));
1273 } 1287 }
1274 1288
1275 TEST_F(ServiceWorkerFailToStartTest, FailingWorkerUsesNewRendererProcess) { 1289 TEST_F(ServiceWorkerFailToStartTest, FailingWorkerUsesNewRendererProcess) {
1276 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 1290 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1277 1291
1278 helper_->SimulateAddProcessToPattern(pattern_, 1292 helper_->SimulateAddProcessToPattern(pattern_,
1279 helper_->new_render_process_id()); 1293 helper_->new_render_process_id());
1280 ServiceWorkerContextCore* context = helper_->context(); 1294 ServiceWorkerContextCore* context = helper_->context();
1281 int64_t id = version_->version_id(); 1295 int64_t id = version_->version_id();
1282 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1296 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1408 std::string reply2("foobar"); 1422 std::string reply2("foobar");
1409 helper_->SimulateSendEventResult( 1423 helper_->SimulateSendEventResult(
1410 version_->embedded_worker()->embedded_worker_id(), request_id2, reply2); 1424 version_->embedded_worker()->embedded_worker_id(), request_id2, reply2);
1411 runner2->Run(); 1425 runner2->Run();
1412 1426
1413 // Verify correct message callback got called with correct reply. 1427 // Verify correct message callback got called with correct reply.
1414 EXPECT_EQ(0, received_request_id1); 1428 EXPECT_EQ(0, received_request_id1);
1415 EXPECT_EQ(request_id2, received_request_id2); 1429 EXPECT_EQ(request_id2, received_request_id2);
1416 EXPECT_EQ(reply2, received_data2); 1430 EXPECT_EQ(reply2, received_data2);
1417 EXPECT_EQ(SERVICE_WORKER_OK, status2); 1431 EXPECT_EQ(SERVICE_WORKER_OK, status2);
1418 EXPECT_TRUE(version_->FinishRequest(request_id2, true)); 1432 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */,
1433 base::Time::Now()));
1419 1434
1420 // Reply to first event. 1435 // Reply to first event.
1421 std::string reply1("hello world"); 1436 std::string reply1("hello world");
1422 helper_->SimulateSendEventResult( 1437 helper_->SimulateSendEventResult(
1423 version_->embedded_worker()->embedded_worker_id(), request_id1, reply1); 1438 version_->embedded_worker()->embedded_worker_id(), request_id1, reply1);
1424 runner1->Run(); 1439 runner1->Run();
1425 1440
1426 // Verify correct response was received. 1441 // Verify correct response was received.
1427 EXPECT_EQ(request_id1, received_request_id1); 1442 EXPECT_EQ(request_id1, received_request_id1);
1428 EXPECT_EQ(request_id2, received_request_id2); 1443 EXPECT_EQ(request_id2, received_request_id2);
1429 EXPECT_EQ(reply1, received_data1); 1444 EXPECT_EQ(reply1, received_data1);
1430 EXPECT_EQ(SERVICE_WORKER_OK, status1); 1445 EXPECT_EQ(SERVICE_WORKER_OK, status1);
1431 EXPECT_TRUE(version_->FinishRequest(request_id1, true)); 1446 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */,
1447 base::Time::Now()));
1432 } 1448 }
1433 1449
1434 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Completed) { 1450 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Completed) {
1435 ServiceWorkerStatusCode status = 1451 ServiceWorkerStatusCode status =
1436 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value 1452 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
1437 1453
1438 // Activate and start worker. 1454 // Activate and start worker.
1439 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1455 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1440 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1456 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1441 CreateReceiverOnCurrentThread(&status)); 1457 CreateReceiverOnCurrentThread(&status));
(...skipping 12 matching lines...) Expand all
1454 1470
1455 // Verify event got dispatched to worker. 1471 // Verify event got dispatched to worker.
1456 base::RunLoop().RunUntilIdle(); 1472 base::RunLoop().RunUntilIdle();
1457 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); 1473 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
1458 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); 1474 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1459 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type()); 1475 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type());
1460 1476
1461 // Simulate sending reply to event. 1477 // Simulate sending reply to event.
1462 helper_->SimulateSendSimpleEventResult( 1478 helper_->SimulateSendSimpleEventResult(
1463 version_->embedded_worker()->embedded_worker_id(), request_id, 1479 version_->embedded_worker()->embedded_worker_id(), request_id,
1464 blink::WebServiceWorkerEventResultCompleted); 1480 blink::WebServiceWorkerEventResultCompleted, base::Time::Now());
1465 runner->Run(); 1481 runner->Run();
1466 1482
1467 // Verify callback was called with correct status. 1483 // Verify callback was called with correct status.
1468 EXPECT_EQ(SERVICE_WORKER_OK, status); 1484 EXPECT_EQ(SERVICE_WORKER_OK, status);
1469 } 1485 }
1470 1486
1471 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Rejected) { 1487 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Rejected) {
1472 ServiceWorkerStatusCode status = 1488 ServiceWorkerStatusCode status =
1473 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value 1489 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
1474 1490
(...skipping 16 matching lines...) Expand all
1491 1507
1492 // Verify event got dispatched to worker. 1508 // Verify event got dispatched to worker.
1493 base::RunLoop().RunUntilIdle(); 1509 base::RunLoop().RunUntilIdle();
1494 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count()); 1510 ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
1495 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0); 1511 const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
1496 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type()); 1512 EXPECT_EQ(TestMsg_TestEvent::ID, msg->type());
1497 1513
1498 // Simulate sending reply to event. 1514 // Simulate sending reply to event.
1499 helper_->SimulateSendSimpleEventResult( 1515 helper_->SimulateSendSimpleEventResult(
1500 version_->embedded_worker()->embedded_worker_id(), request_id, 1516 version_->embedded_worker()->embedded_worker_id(), request_id,
1501 blink::WebServiceWorkerEventResultRejected); 1517 blink::WebServiceWorkerEventResultRejected, base::Time::Now());
1502 runner->Run(); 1518 runner->Run();
1503 1519
1504 // Verify callback was called with correct status. 1520 // Verify callback was called with correct status.
1505 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); 1521 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status);
1506 } 1522 }
1507 1523
1508 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) { 1524 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) {
1509 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 1525 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1510 1526
1511 // Activate and start worker. 1527 // Activate and start worker.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 version_->embedded_worker()->embedded_worker_id(), request_id2, reply2); 1577 version_->embedded_worker()->embedded_worker_id(), request_id2, reply2);
1562 runner->Run(); 1578 runner->Run();
1563 1579
1564 // Verify message callback got called with correct reply. 1580 // Verify message callback got called with correct reply.
1565 EXPECT_EQ(request_id2, received_request_id2); 1581 EXPECT_EQ(request_id2, received_request_id2);
1566 EXPECT_EQ(reply2, received_data2); 1582 EXPECT_EQ(reply2, received_data2);
1567 1583
1568 // Should not have timed out, so error callback should not have been 1584 // Should not have timed out, so error callback should not have been
1569 // called and FinishRequest should return true. 1585 // called and FinishRequest should return true.
1570 EXPECT_EQ(SERVICE_WORKER_OK, status); 1586 EXPECT_EQ(SERVICE_WORKER_OK, status);
1571 EXPECT_TRUE(version_->FinishRequest(request_id1, true)); 1587 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */,
1572 EXPECT_TRUE(version_->FinishRequest(request_id2, true)); 1588 base::Time::Now()));
1589 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */,
1590 base::Time::Now()));
1573 } 1591 }
1574 1592
1575 class ServiceWorkerNavigationHintUMATest : public ServiceWorkerVersionTest { 1593 class ServiceWorkerNavigationHintUMATest : public ServiceWorkerVersionTest {
1576 protected: 1594 protected:
1577 ServiceWorkerNavigationHintUMATest() : ServiceWorkerVersionTest() {} 1595 ServiceWorkerNavigationHintUMATest() : ServiceWorkerVersionTest() {}
1578 1596
1579 void StartWorker(ServiceWorkerMetrics::EventType purpose) { 1597 void StartWorker(ServiceWorkerMetrics::EventType purpose) {
1580 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 1598 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1581 version_->StartWorker(purpose, CreateReceiverOnCurrentThread(&status)); 1599 version_->StartWorker(purpose, CreateReceiverOnCurrentThread(&status));
1582 base::RunLoop().RunUntilIdle(); 1600 base::RunLoop().RunUntilIdle();
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1719 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); 1737 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1);
1720 histogram_tester_.ExpectTotalCount(kLinkTapDown, 0); 1738 histogram_tester_.ExpectTotalCount(kLinkTapDown, 0);
1721 EXPECT_EQ(SERVICE_WORKER_OK, status); 1739 EXPECT_EQ(SERVICE_WORKER_OK, status);
1722 StopWorker(); 1740 StopWorker();
1723 // The UMA for kLinkMouseDown must be recorded when the worker stopped. 1741 // The UMA for kLinkMouseDown must be recorded when the worker stopped.
1724 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); 1742 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1);
1725 histogram_tester_.ExpectTotalCount(kLinkTapDown, 1); 1743 histogram_tester_.ExpectTotalCount(kLinkTapDown, 1);
1726 } 1744 }
1727 1745
1728 } // namespace content 1746 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_version.cc ('k') | content/common/service_worker/service_worker_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698