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

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

Issue 2703153002: ServiceWorker: ignore AddMessageToConsole before process allocation (Closed)
Patch Set: Use process_id() instead of switch statement Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/service_worker/embedded_worker_instance.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/embedded_worker_instance_unittest.cc
diff --git a/content/browser/service_worker/embedded_worker_instance_unittest.cc b/content/browser/service_worker/embedded_worker_instance_unittest.cc
index 55398ed91b2cec7e6c11e6d0a7df657fc17b12f7..f276f7cf669c7b120b71e6b63fabb9fbe3b59e43 100644
--- a/content/browser/service_worker/embedded_worker_instance_unittest.cc
+++ b/content/browser/service_worker/embedded_worker_instance_unittest.cc
@@ -746,4 +746,75 @@ TEST_F(EmbeddedWorkerInstanceTest, RemoveRemoteInterface) {
EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[2].status);
}
+class StoreMessageInstanceClient
+ : public EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient {
+ public:
+ explicit StoreMessageInstanceClient(
+ base::WeakPtr<EmbeddedWorkerTestHelper> helper)
+ : EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient(helper) {}
+
+ const std::vector<std::pair<blink::WebConsoleMessage::Level, std::string>>&
+ message() {
+ return messages_;
+ }
+
+ private:
+ void AddMessageToConsole(blink::WebConsoleMessage::Level level,
+ const std::string& message) override {
+ messages_.push_back(std::make_pair(level, message));
+ }
+
+ std::vector<std::pair<blink::WebConsoleMessage::Level, std::string>>
+ messages_;
+};
+
+TEST_F(EmbeddedWorkerInstanceTest, AddMessageToConsole) {
+ const int64_t version_id = 55L;
+ const GURL pattern("http://example.com/");
+ const GURL url("http://example.com/worker.js");
+ std::unique_ptr<StoreMessageInstanceClient> instance_client =
+ base::MakeUnique<StoreMessageInstanceClient>(helper_->AsWeakPtr());
+ StoreMessageInstanceClient* instance_client_rawptr = instance_client.get();
+ helper_->RegisterMockInstanceClient(std::move(instance_client));
+ ASSERT_EQ(mock_instance_clients()->size(), 1UL);
+
+ std::unique_ptr<EmbeddedWorkerInstance> worker =
+ embedded_worker_registry()->CreateWorker();
+ helper_->SimulateAddProcessToPattern(pattern,
+ helper_->mock_render_process_id());
+ worker->AddListener(this);
+
+ // Attempt to start the worker and immediate AddMessageToConsole should not
+ // cause a crash.
+ std::pair<blink::WebConsoleMessage::Level, std::string> test_message =
+ std::make_pair(blink::WebConsoleMessage::LevelVerbose, "");
+ std::unique_ptr<EmbeddedWorkerStartParams> params =
+ CreateStartParams(version_id, pattern, url);
+ worker->Start(std::move(params), CreateEventDispatcher(),
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
+ worker->AddMessageToConsole(test_message.first, test_message.second);
+ base::RunLoop().RunUntilIdle();
+
+ // Messages sent before sending StartWorker message won't be dispatched.
+ ASSERT_EQ(0UL, instance_client_rawptr->message().size());
+ ASSERT_EQ(3UL, events_.size());
+ EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type);
+ EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type);
+ EXPECT_EQ(STARTED, events_[2].type);
+ EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
+
+ worker->AddMessageToConsole(test_message.first, test_message.second);
+ base::RunLoop().RunUntilIdle();
+
+ // Messages sent after sending StartWorker message should be reached to
+ // the renderer.
+ ASSERT_EQ(1UL, instance_client_rawptr->message().size());
+ EXPECT_EQ(test_message, instance_client_rawptr->message()[0]);
+
+ // Ensure the worker is stopped.
+ worker->Stop();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
+}
+
} // namespace content
« no previous file with comments | « content/browser/service_worker/embedded_worker_instance.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698