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

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

Issue 1027113002: Service Worker: Add a timeout for inflight requests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: dont use std::queue::swap Created 5 years, 9 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 2fba41ae758bdf4eaaa5de678cb786e135c9bb59..d131d5dc8b945dd979ce23d1043c3887b831bb25 100644
--- a/content/browser/service_worker/service_worker_version_unittest.cc
+++ b/content/browser/service_worker/service_worker_version_unittest.cc
@@ -9,6 +9,7 @@
#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/browser/service_worker/service_worker_registration.h"
#include "content/browser/service_worker/service_worker_test_utils.h"
+#include "content/browser/service_worker/service_worker_utils.h"
#include "content/browser/service_worker/service_worker_version.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -78,6 +79,13 @@ void ObserveStatusChanges(ServiceWorkerVersion* version,
base::Bind(&ObserveStatusChanges, base::Unretained(version), statuses));
}
+void ReceiveFetchResult(ServiceWorkerStatusCode* status,
+ ServiceWorkerStatusCode actual_status,
+ ServiceWorkerFetchEventResult actual_result,
+ const ServiceWorkerResponse& response) {
+ *status = actual_status;
+}
+
// A specialized listener class to receive test messages from a worker.
class MessageReceiverFromWorker : public EmbeddedWorkerInstance::Listener {
public:
@@ -198,6 +206,33 @@ class ServiceWorkerFailToStartTest : public ServiceWorkerVersionTest {
DISALLOW_COPY_AND_ASSIGN(ServiceWorkerFailToStartTest);
};
+class MessageReceiverDisallowFetch : public MessageReceiver {
+ public:
+ MessageReceiverDisallowFetch() : MessageReceiver() {}
+ ~MessageReceiverDisallowFetch() override {}
+
+ void OnFetchEvent(int embedded_worker_id,
+ int request_id,
+ const ServiceWorkerFetchRequest& request) override {
+ // Do nothing.
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MessageReceiverDisallowFetch);
+};
+
+class ServiceWorkerWaitForeverInFetchTest : public ServiceWorkerVersionTest {
+ protected:
+ ServiceWorkerWaitForeverInFetchTest() : ServiceWorkerVersionTest() {}
+
+ scoped_ptr<MessageReceiver> GetMessageReceiver() override {
+ return make_scoped_ptr(new MessageReceiverDisallowFetch());
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ServiceWorkerWaitForeverInFetchTest);
+};
+
TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) {
// Call StartWorker() multiple times.
ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED;
@@ -467,6 +502,31 @@ TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) {
EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
}
+TEST_F(ServiceWorkerWaitForeverInFetchTest, RequestTimeout) {
+ ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
+
+ version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
+ version_->DispatchFetchEvent(ServiceWorkerFetchRequest(),
+ base::Bind(&base::DoNothing),
+ base::Bind(&ReceiveFetchResult, &status));
+ base::RunLoop().RunUntilIdle();
+
+ // Callback has not completed yet.
+ EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status);
+ EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
+
+ // Simulate timeout.
+ EXPECT_TRUE(version_->timeout_timer_.IsRunning());
+ version_->SetAllRequestTimes(
+ base::TimeTicks::Now() -
+ base::TimeDelta::FromMinutes(
+ ServiceWorkerVersion::kRequestTimeoutMinutes + 1));
+ version_->timeout_timer_.user_task().Run();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
+ EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
+}
+
TEST_F(ServiceWorkerFailToStartTest, RendererCrash) {
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
version_->StartWorker(
« 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