diff options
author | horo@chromium.org <horo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-25 10:17:18 +0000 |
---|---|---|
committer | horo@chromium.org <horo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-25 10:17:18 +0000 |
commit | a4780c63799e6a52464608f1b608e0aed570e6bf (patch) | |
tree | 0b56c7b160d007ec38b22945df214ad325c39339 | |
parent | 6b0b4bdff331405340345d8be91ffced34ea35f7 (diff) | |
download | chromium_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
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); +}; |