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

Unified Diff: content/browser/service_worker/service_worker_version_unittest.cc

Issue 1579413004: Move push event dispatching out of ServiceWorkerVersion. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix DispatchSimpleEvent comment Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/service_worker/service_worker_version.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/service_worker/service_worker_version_unittest.cc
diff --git a/content/browser/service_worker/service_worker_version_unittest.cc b/content/browser/service_worker/service_worker_version_unittest.cc
index 58900045587880b0ede966c8967fc055363bba8f..b8c93234a8dee96936820e7e38b68c48d78f0992 100644
--- a/content/browser/service_worker/service_worker_version_unittest.cc
+++ b/content/browser/service_worker/service_worker_version_unittest.cc
@@ -33,6 +33,12 @@ IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int)
IPC_MESSAGE_CONTROL1(TestMsg_TestEvent, int)
IPC_MESSAGE_ROUTED2(TestMsg_TestEventResult, int, std::string)
+IPC_MESSAGE_ROUTED2(TestMsg_TestSimpleEventResult,
+ int,
+ blink::WebServiceWorkerEventResult)
+
+IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerEventResult,
+ blink::WebServiceWorkerEventResultLast)
// ---------------------------------------------------------------------------
@@ -74,6 +80,13 @@ class MessageReceiver : public EmbeddedWorkerTestHelper {
new TestMsg_TestEventResult(embedded_worker_id, request_id, reply));
}
+ void SimulateSendSimpleEventResult(int embedded_worker_id,
+ int request_id,
+ blink::WebServiceWorkerEventResult reply) {
+ SimulateSend(new TestMsg_TestSimpleEventResult(embedded_worker_id,
+ request_id, reply));
+ }
+
private:
void OnMessage() {
// Do nothing.
@@ -240,6 +253,30 @@ class ServiceWorkerVersionTest : public testing::Test {
helper_.reset();
}
+ void SimulateDispatchEvent() {
+ ServiceWorkerStatusCode status =
+ SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
+
+ // Make sure worker is running.
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
+ version_->RunAfterStartWorker(runner->QuitClosure(),
+ CreateReceiverOnCurrentThread(&status));
+ runner->Run();
+ EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status);
+ EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
+
+ // Start request, as if an event is being dispatched.
+ int request_id =
+ version_->StartRequest(ServiceWorkerMetrics::EventType::PUSH,
+ CreateReceiverOnCurrentThread(&status));
+ base::RunLoop().RunUntilIdle();
+
+ // And finish request, as if a response to the event was received.
+ EXPECT_TRUE(version_->FinishRequest(request_id));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status);
+ }
+
TestBrowserThreadBundle thread_bundle_;
scoped_ptr<MessageReceiver> helper_;
scoped_refptr<ServiceWorkerRegistration> registration_;
@@ -723,16 +760,11 @@ TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) {
// Test that update isn't triggered for a non-stale worker.
TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) {
- ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
-
version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
registration_->SetActiveVersion(version_);
registration_->set_last_update_check(base::Time::Now());
- version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status),
- std::string());
- base::RunLoop().RunUntilIdle();
+ SimulateDispatchEvent();
- EXPECT_EQ(SERVICE_WORKER_OK, status);
EXPECT_TRUE(version_->stale_time_.is_null());
EXPECT_FALSE(version_->update_timer_.IsRunning());
}
@@ -760,10 +792,7 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) {
version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
registration_->SetActiveVersion(version_);
registration_->set_last_update_check(GetYesterday());
- version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status),
- std::string());
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ(SERVICE_WORKER_OK, status);
+ SimulateDispatchEvent();
EXPECT_FALSE(version_->stale_time_.is_null());
EXPECT_FALSE(version_->update_timer_.IsRunning());
@@ -777,16 +806,11 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) {
// Test that staleness is detected on a running worker.
TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) {
- ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
-
// Start a fresh worker.
version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
registration_->SetActiveVersion(version_);
registration_->set_last_update_check(base::Time::Now());
- version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status),
- std::string());
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ(SERVICE_WORKER_OK, status);
+ SimulateDispatchEvent();
EXPECT_TRUE(version_->stale_time_.is_null());
// Simulate it running for a day. It will be marked stale.
@@ -819,10 +843,13 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_DoNotDeferTimer) {
version_->stale_time_ = stale_time;
// Stale time is not deferred.
- version_->DispatchPushEvent(
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string());
- version_->DispatchPushEvent(
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string());
+ version_->RunAfterStartWorker(
+ base::Bind(&base::DoNothing),
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
+ version_->RunAfterStartWorker(
+ base::Bind(&base::DoNothing),
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(stale_time, version_->stale_time_);
// Timeout triggers the update.
@@ -832,12 +859,9 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_DoNotDeferTimer) {
// Update timer is not deferred.
base::TimeTicks run_time = version_->update_timer_.desired_run_time();
- version_->DispatchPushEvent(
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string());
- version_->DispatchPushEvent(
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string());
- version_->DispatchPushEvent(
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string());
+ SimulateDispatchEvent();
+ SimulateDispatchEvent();
+ SimulateDispatchEvent();
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(version_->stale_time_.is_null());
EXPECT_EQ(run_time, version_->update_timer_.desired_run_time());
@@ -1425,4 +1449,76 @@ TEST_F(ServiceWorkerVersionTest, DispatchConcurrentEvent) {
EXPECT_TRUE(version_->FinishRequest(request_id1));
}
+TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Completed) {
+ ServiceWorkerStatusCode status =
+ SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
+
+ // Activate and start worker.
+ version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
+ version_->StartWorker(CreateReceiverOnCurrentThread(&status));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(SERVICE_WORKER_OK, status);
+ EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
+
+ // Start request and dispatch test event.
+ status = SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
+ int request_id = version_->StartRequest(
+ ServiceWorkerMetrics::EventType::SYNC,
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ version_->DispatchSimpleEvent<TestMsg_TestSimpleEventResult>(
+ request_id, TestMsg_TestEvent(request_id));
+
+ // Verify event got dispatched to worker.
+ base::RunLoop().RunUntilIdle();
+ ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
+ const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
+ EXPECT_EQ(TestMsg_TestEvent::ID, msg->type());
+
+ // Simulate sending reply to event.
+ helper_->SimulateSendSimpleEventResult(
+ version_->embedded_worker()->embedded_worker_id(), request_id,
+ blink::WebServiceWorkerEventResultCompleted);
+ runner->Run();
+
+ // Verify callback was called with correct status.
+ EXPECT_EQ(SERVICE_WORKER_OK, status);
+}
+
+TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Rejected) {
+ ServiceWorkerStatusCode status =
+ SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
+
+ // Activate and start worker.
+ version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
+ version_->StartWorker(CreateReceiverOnCurrentThread(&status));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(SERVICE_WORKER_OK, status);
+ EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
+
+ // Start request and dispatch test event.
+ status = SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
+ int request_id = version_->StartRequest(
+ ServiceWorkerMetrics::EventType::SYNC,
+ CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
+ version_->DispatchSimpleEvent<TestMsg_TestSimpleEventResult>(
+ request_id, TestMsg_TestEvent(request_id));
+
+ // Verify event got dispatched to worker.
+ base::RunLoop().RunUntilIdle();
+ ASSERT_EQ(1u, helper_->inner_ipc_sink()->message_count());
+ const IPC::Message* msg = helper_->inner_ipc_sink()->GetMessageAt(0);
+ EXPECT_EQ(TestMsg_TestEvent::ID, msg->type());
+
+ // Simulate sending reply to event.
+ helper_->SimulateSendSimpleEventResult(
+ version_->embedded_worker()->embedded_worker_id(), request_id,
+ blink::WebServiceWorkerEventResultRejected);
+ runner->Run();
+
+ // Verify callback was called with correct status.
+ EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status);
+}
+
} // namespace content
« no previous file with comments | « content/browser/service_worker/service_worker_version.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698