Commit b731e532 authored by Makoto Shimazu's avatar Makoto Shimazu Committed by Commit Bot

Revise browser test using fetch_from_*_worker.(html|js)

This CL is to use EvalJs() instead of waiting for an expected title and checking
the body.innerText. This will generate more verbose errors especially in the
case where the previous test times out.

TBR=kinuko@chromium.org

Bug: 884007
Change-Id: I8cbde52efc2da69784b4c1ca06a17c7d262a80d3
Reviewed-on: https://chromium-review.googlesource.com/1237794
Commit-Queue: Makoto Shimazu <shimazu@chromium.org>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593109}
parent 254369a5
......@@ -212,15 +212,12 @@ IN_PROC_BROWSER_TEST_F(DoNotTrackTest, FetchFromWorker) {
if (!EnableDoNotTrack())
return;
const GURL fetch_url = embedded_test_server()->GetURL("/echoheader?DNT");
const GURL url = embedded_test_server()->GetURL(
std::string("/workers/fetch_from_worker.html?url=") + fetch_url.spec());
NavigateToURL(shell(), url);
const base::string16 title = base::ASCIIToUTF16("DONE");
TitleWatcher watcher(shell()->web_contents(), title);
EXPECT_EQ(title, watcher.WaitAndGetTitle());
const GURL page_url =
embedded_test_server()->GetURL("/workers/fetch_from_worker.html");
NavigateToURL(shell(), page_url);
ExpectPageTextEq("1");
EXPECT_EQ("1",
EvalJs(shell(), "fetch_from_worker('" + fetch_url.spec() + "');"));
}
// Checks that the DNT header is preserved when fetching from a shared worker.
......@@ -237,16 +234,12 @@ IN_PROC_BROWSER_TEST_F(DoNotTrackTest, MAYBE_FetchFromSharedWorker) {
if (!EnableDoNotTrack())
return;
const GURL fetch_url = embedded_test_server()->GetURL("/echoheader?DNT");
const GURL url = embedded_test_server()->GetURL(
std::string("/workers/fetch_from_shared_worker.html?url=") +
fetch_url.spec());
NavigateToURL(shell(), url);
const GURL page_url =
embedded_test_server()->GetURL("/workers/fetch_from_shared_worker.html");
NavigateToURL(shell(), page_url);
const base::string16 title = base::ASCIIToUTF16("DONE");
TitleWatcher watcher(shell()->web_contents(), title);
EXPECT_EQ(title, watcher.WaitAndGetTitle());
ExpectPageTextEq("1");
EXPECT_EQ("1", EvalJs(shell(), "fetch_from_shared_worker('" +
fetch_url.spec() + "');"));
}
// Checks that the DNT header is preserved when fetching from a service worker.
......@@ -255,16 +248,13 @@ IN_PROC_BROWSER_TEST_F(DoNotTrackTest, FetchFromServiceWorker) {
if (!EnableDoNotTrack())
return;
const GURL fetch_url = embedded_test_server()->GetURL("/echoheader?DNT");
const GURL url = embedded_test_server()->GetURL(
std::string("/service_worker/fetch_from_service_worker.html?url=") +
fetch_url.spec());
NavigateToURL(shell(), url);
const base::string16 title = base::ASCIIToUTF16("DONE");
TitleWatcher watcher(shell()->web_contents(), title);
EXPECT_EQ(title, watcher.WaitAndGetTitle());
const GURL page_url = embedded_test_server()->GetURL(
"/service_worker/fetch_from_service_worker.html");
NavigateToURL(shell(), page_url);
ExpectPageTextEq("1");
EXPECT_EQ("ready", EvalJs(shell(), "setup();"));
EXPECT_EQ("1", EvalJs(shell(), "fetch_from_service_worker('" +
fetch_url.spec() + "');"));
}
// Checks that the DNT header is preserved when fetching from a page controlled
......
<script>
async function run() {
const params = new URLSearchParams(location.search);
let reg = navigator.serviceWorker.register('fetch_from_service_worker.js');
if (!reg) {
document.body.innerText = 'Registration failed';
document.title = 'DONE';
return;
}
reg = await navigator.serviceWorker.ready;
const channel = new MessageChannel();
channel.port1.onmessage = e => {
document.body.innerText += e.data;
document.title = 'DONE';
};
reg.active.postMessage({url: params.get('url')}, [channel.port2]);
async function setup() {
await navigator.serviceWorker.register('fetch_from_service_worker.js');
await navigator.serviceWorker.ready;
return 'ready';
}
self.onload = run;
function fetch_from_service_worker(url) {
return new Promise(async resolve => {
const registration = await navigator.serviceWorker.ready;
const channel = new MessageChannel();
channel.port1.onmessage = e => { resolve(e.data); };
registration.active.postMessage({url}, [channel.port2]);
});
}
</script>
......@@ -2,16 +2,20 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
async function MessageHandler(e) {
const response = await fetch(e.data.url);
if (!response.ok) {
e.ports[0].postMessage('bad response');
return;
async function handleMessage(e) {
try {
const response = await fetch(e.data.url);
if (!response.ok) {
e.ports[0].postMessage('bad response');
return;
}
const text = await response.text();
e.ports[0].postMessage(text);
} catch (error) {
e.ports[0].postMessage(`${error}`);
}
const text = await response.text();
e.ports[0].postMessage(text);
}
self.addEventListener('message', e => {
e.waitUntil(MessageHandler(e));
e.waitUntil(handleMessage(e));
});
<script>
const params = new URLSearchParams(location.search);
const worker = new SharedWorker(
`fetch_from_shared_worker.js?url=${params.get('url')}`);
worker.port.onmessage = e => {
document.body.innerText += e.data;
document.title = 'DONE';
};
const worker = new SharedWorker('fetch_from_shared_worker.js');
let resolve;
worker.port.onmessage = e => { resolve(e.data); };
worker.port.start();
function fetch_from_shared_worker(url) {
let p = new Promise(r => { resolve = r; });
worker.port.postMessage({url});
return p;
}
</script>
......@@ -3,12 +3,18 @@
// found in the LICENSE file.
self.onconnect = async e => {
const params = new URLSearchParams(location.search);
const response = await fetch(params.get('url'));
if (!response.ok) {
e.ports[0].postMessage(`Bad response: ${responses.statusText}`);
return;
const port = e.ports[0];
port.onmessage = async e => {
try {
const response = await fetch(e.data.url);
if (!response.ok) {
port.postMessage(`Bad response: ${response.statusText}`);
return;
}
const text = await response.text();
port.postMessage(text);
} catch (error) {
port.postMessage(`${error}`);
}
}
const text = await response.text();
e.ports[0].postMessage(text);
};
<script>
const params = new URLSearchParams(location.search);
const worker = new Worker(`fetch_from_worker.js?url=${params.get('url')}`);
worker.onmessage = e => {
document.body.innerText += e.data;
document.title = 'DONE';
};
const worker = new Worker(`fetch_from_worker.js`);
let resolve;
worker.onmessage = e => { resolve(e.data); };
function fetch_from_worker(url) {
let p = new Promise(r => { resolve = r; });
worker.postMessage({url});
return p;
}
</script>
......@@ -2,16 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
const params = new URLSearchParams(location.search);
async function run() {
const response = await fetch(params.get('url'));
if (!response.ok) {
self.postMessage('bad response');
return;
self.onmessage = async e => {
try {
const response = await fetch(e.data.url);
if (!response.ok) {
self.postMessage('bad response');
return;
}
const text = await response.text();
self.postMessage(text);
} catch (error) {
self.postMessage(`${error}`);
}
const text = await response.text();
self.postMessage(text);
};
run();
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment