summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhoro@chromium.org <horo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-25 10:17:18 +0000
committerhoro@chromium.org <horo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-25 10:17:18 +0000
commita4780c63799e6a52464608f1b608e0aed570e6bf (patch)
tree0b56c7b160d007ec38b22945df214ad325c39339
parent6b0b4bdff331405340345d8be91ffced34ea35f7 (diff)
downloadchromium_src-a4780c63799e6a52464608f1b608e0aed570e6bf.zip
chromium_src-a4780c63799e6a52464608f1b608e0aed570e6bf.tar.gz
chromium_src-a4780c63799e6a52464608f1b608e0aed570e6bf.tar.bz2
Add browser test for FetchEvent.isReload.
BUG=386507 Review URL: https://codereview.chromium.org/345983003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@279663 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/browser/service_worker/service_worker_browsertest.cc99
-rw-r--r--content/public/test/content_browser_test_utils.cc10
-rw-r--r--content/public/test/content_browser_test_utils.h4
-rw-r--r--content/test/data/service_worker/fetch_event_reload.js11
4 files changed, 102 insertions, 22 deletions
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 649040b0..6bd5562 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -6,10 +6,12 @@
#include "base/callback.h"
#include "base/command_line.h"
#include "base/run_loop.h"
+#include "base/strings/utf_string_conversions.h"
#include "content/browser/fileapi/chrome_blob_storage_context.h"
#include "content/browser/service_worker/embedded_worker_instance.h"
#include "content/browser/service_worker/embedded_worker_registry.h"
#include "content/browser/service_worker/service_worker_context_core.h"
+#include "content/browser/service_worker/service_worker_context_observer.h"
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/service_worker/service_worker_registration.h"
#include "content/browser/service_worker/service_worker_test_utils.h"
@@ -112,6 +114,47 @@ void ReadResponseBody(std::string* body,
blob_data_handle->data()->items()[0].length());
}
+void ExpectResultAndRun(bool expected,
+ const base::Closure& continuation,
+ bool actual) {
+ EXPECT_EQ(expected, actual);
+ continuation.Run();
+}
+
+class WorkerActivatedObserver
+ : public ServiceWorkerContextObserver,
+ public base::RefCountedThreadSafe<WorkerActivatedObserver> {
+ public:
+ explicit WorkerActivatedObserver(ServiceWorkerContextWrapper* context)
+ : context_(context) {}
+ void Init() {
+ RunOnIOThread(base::Bind(&WorkerActivatedObserver::InitOnIOThread, this));
+ }
+ // ServiceWorkerContextObserver overrides.
+ virtual void OnVersionStateChanged(int64 version_id) OVERRIDE {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ const ServiceWorkerVersion* version =
+ context_->context()->GetLiveVersion(version_id);
+ if (version->status() == ServiceWorkerVersion::ACTIVE) {
+ context_->RemoveObserver(this);
+ BrowserThread::PostTask(BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&WorkerActivatedObserver::Quit, this));
+ }
+ }
+ void Wait() { run_loop_.Run(); }
+
+ private:
+ friend class base::RefCountedThreadSafe<WorkerActivatedObserver>;
+ virtual ~WorkerActivatedObserver() {}
+ void InitOnIOThread() { context_->AddObserver(this); }
+ void Quit() { run_loop_.Quit(); }
+
+ base::RunLoop run_loop_;
+ ServiceWorkerContextWrapper* context_;
+ DISALLOW_COPY_AND_ASSIGN(WorkerActivatedObserver);
+};
+
} // namespace
class ServiceWorkerBrowserTest : public ContentBrowserTest {
@@ -602,17 +645,39 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, SyncEventHandled) {
EXPECT_EQ(200, response.status_code);
}
+IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, Reload) {
+ const std::string kPageUrl = "/service_worker/reload.html";
+ const std::string kWorkerUrl = "/service_worker/fetch_event_reload.js";
+ {
+ scoped_refptr<WorkerActivatedObserver> observer =
+ new WorkerActivatedObserver(wrapper());
+ observer->Init();
+ public_context()->RegisterServiceWorker(
+ embedded_test_server()->GetURL(kPageUrl),
+ embedded_test_server()->GetURL(kWorkerUrl),
+ base::Bind(&ExpectResultAndRun, true, base::Bind(&base::DoNothing)));
+ observer->Wait();
+ }
+ NavigateToURL(shell(), embedded_test_server()->GetURL(kPageUrl));
+ EXPECT_EQ(base::UTF8ToUTF16("reload=false"),
+ shell()->web_contents()->GetTitle());
+ ReloadBlockUntilNavigationsComplete(shell(), 1);
+ EXPECT_EQ(base::UTF8ToUTF16("reload=true"),
+ shell()->web_contents()->GetTitle());
+ shell()->Close();
+ {
+ base::RunLoop run_loop;
+ public_context()->UnregisterServiceWorker(
+ embedded_test_server()->GetURL(kPageUrl),
+ base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure()));
+ run_loop.Run();
+ }
+}
+
class ServiceWorkerBlackBoxBrowserTest : public ServiceWorkerBrowserTest {
public:
typedef ServiceWorkerBlackBoxBrowserTest self;
- static void ExpectResultAndRun(bool expected,
- const base::Closure& continuation,
- bool actual) {
- EXPECT_EQ(expected, actual);
- continuation.Run();
- }
-
void FindRegistrationOnIO(const GURL& document_url,
ServiceWorkerStatusCode* status,
GURL* script_url,
@@ -670,9 +735,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, MAYBE_Registration) {
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL("/*"),
- base::Bind(&ServiceWorkerBlackBoxBrowserTest::ExpectResultAndRun,
- true,
- run_loop.QuitClosure()));
+ base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure()));
run_loop.Run();
}
@@ -682,9 +745,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, MAYBE_Registration) {
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL("/*"),
embedded_test_server()->GetURL("/does/not/exist"),
- base::Bind(&ServiceWorkerBlackBoxBrowserTest::ExpectResultAndRun,
- false,
- run_loop.QuitClosure()));
+ base::Bind(&ExpectResultAndRun, false, run_loop.QuitClosure()));
run_loop.Run();
}
EXPECT_EQ(0, CountRenderProcessHosts());
@@ -695,9 +756,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, MAYBE_Registration) {
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL("/*"),
embedded_test_server()->GetURL(kWorkerUrl),
- base::Bind(&ServiceWorkerBlackBoxBrowserTest::ExpectResultAndRun,
- true,
- run_loop.QuitClosure()));
+ base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure()));
run_loop.Run();
}
EXPECT_EQ(1, CountRenderProcessHosts());
@@ -709,9 +768,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, MAYBE_Registration) {
public_context()->RegisterServiceWorker(
embedded_test_server()->GetURL("/*"),
embedded_test_server()->GetURL(kWorkerUrl),
- base::Bind(&ServiceWorkerBlackBoxBrowserTest::ExpectResultAndRun,
- true,
- run_loop.QuitClosure()));
+ base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure()));
run_loop.Run();
}
@@ -724,9 +781,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, MAYBE_Registration) {
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL("/*"),
- base::Bind(&ServiceWorkerBlackBoxBrowserTest::ExpectResultAndRun,
- true,
- run_loop.QuitClosure()));
+ base::Bind(&ExpectResultAndRun, true, run_loop.QuitClosure()));
run_loop.Run();
}
EXPECT_GE(1, CountRenderProcessHosts()) << "Unregistering doesn't stop the "
diff --git a/content/public/test/content_browser_test_utils.cc b/content/public/test/content_browser_test_utils.cc
index fce7aa1..a83c3a6 100644
--- a/content/public/test/content_browser_test_utils.cc
+++ b/content/public/test/content_browser_test_utils.cc
@@ -44,6 +44,16 @@ void NavigateToURLBlockUntilNavigationsComplete(Shell* window,
same_tab_observer.Wait();
}
+void ReloadBlockUntilNavigationsComplete(Shell* window,
+ int number_of_navigations) {
+ WaitForLoadStop(window->web_contents());
+ TestNavigationObserver same_tab_observer(window->web_contents(),
+ number_of_navigations);
+
+ window->Reload();
+ same_tab_observer.Wait();
+}
+
void LoadDataWithBaseURL(Shell* window, const GURL& url,
const std::string data, const GURL& base_url) {
WaitForLoadStop(window->web_contents());
diff --git a/content/public/test/content_browser_test_utils.h b/content/public/test/content_browser_test_utils.h
index e0b0690..87e7e1c 100644
--- a/content/public/test/content_browser_test_utils.h
+++ b/content/public/test/content_browser_test_utils.h
@@ -55,6 +55,10 @@ void LoadDataWithBaseURL(Shell* window,
void NavigateToURLBlockUntilNavigationsComplete(Shell* window,
const GURL& url,
int number_of_navigations);
+// Reloads the selected tab of |window|, blocking until the given number of
+// navigations finishes.
+void ReloadBlockUntilNavigationsComplete(Shell* window,
+ int number_of_navigations);
// Wait until an application modal dialog is requested.
void WaitForAppModalDialog(Shell* window);
diff --git a/content/test/data/service_worker/fetch_event_reload.js b/content/test/data/service_worker/fetch_event_reload.js
new file mode 100644
index 0000000..fb4f067
--- /dev/null
+++ b/content/test/data/service_worker/fetch_event_reload.js
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+this.onfetch = function(event) {
+ var headers = new HeaderMap;
+ headers.set('Content-Type', 'text/html; charset=UTF-8');
+ var blob = new Blob(['<title>reload='+ event.isReload + '</title>']);
+ var response = new Response(blob);
+ event.respondWith(response);
+};