gecko-dev/remote/test/browser/page/browser_navigate.js

221 lines
6.9 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const pageEmptyURL =
"http://example.com/browser/remote/test/browser/page/doc_empty.html";
add_task(async function testBasicNavigation({ client }) {
const { Page } = client;
await Page.enable();
const loadEventFired = Page.loadEventFired();
const { frameId, loaderId, errorText } = await Page.navigate({
url: pageEmptyURL,
});
todo(!!loaderId, "Page.navigate returns loaderId");
is(errorText, undefined, "No errorText on a successful navigation");
await loadEventFired;
const currentFrame = await getCurrentFrame();
is(frameId, currentFrame.id, "Page.navigate returns expected frameId");
is(
gBrowser.selectedBrowser.currentURI.spec,
pageEmptyURL,
"Expected URL loaded"
);
});
add_task(async function testTwoNavigations({ client }) {
const { Page } = client;
await Page.enable();
let loadEventFired = Page.loadEventFired();
const { frameId, loaderId, errorText } = await Page.navigate({
url: pageEmptyURL,
});
await loadEventFired;
is(
gBrowser.selectedBrowser.currentURI.spec,
pageEmptyURL,
"Expected URL loaded"
);
loadEventFired = Page.loadEventFired();
const {
frameId: frameId2,
loaderId: loaderId2,
errorText: errorText2,
} = await Page.navigate({
url: pageEmptyURL,
});
todo(loaderId !== loaderId2, "Page.navigate returns different loaderIds");
is(errorText, undefined, "No errorText on a successful navigation");
is(errorText2, undefined, "No errorText on a successful navigation");
is(frameId, frameId2, "Page.navigate return same frameId");
await loadEventFired;
is(
gBrowser.selectedBrowser.currentURI.spec,
pageEmptyURL,
"Expected URL loaded"
);
});
add_task(async function testRedirect({ client }) {
const { Page } = client;
const sjsURL =
"http://example.com/browser/remote/test/browser/page/sjs_redirect.sjs";
const redirectURL = `${sjsURL}?${pageEmptyURL}`;
await Page.enable();
const loadEventFired = Page.loadEventFired();
const { frameId, loaderId, errorText } = await Page.navigate({
url: redirectURL,
});
todo(!!loaderId, "Page.navigate returns loaderId");
is(errorText, undefined, "No errorText on a successful navigation");
ok(!!frameId, "Page.navigate returns frameId");
await loadEventFired;
is(
gBrowser.selectedBrowser.currentURI.spec,
pageEmptyURL,
"Expected URL loaded"
);
});
add_task(async function testUnknownHost({ client }) {
const { Page } = client;
const { frameId, loaderId, errorText } = await Page.navigate({
url: "http://example-does-not-exist.com",
});
ok(!!frameId, "Page.navigate returns frameId");
todo(!!loaderId, "Page.navigate returns loaderId");
is(errorText, "NS_ERROR_UNKNOWN_HOST", "Failed navigation returns errorText");
});
add_task(async function testExpiredCertificate({ client }) {
const { Page } = client;
const { frameId, loaderId, errorText } = await Page.navigate({
url: "https://expired.example.com",
});
ok(!!frameId, "Page.navigate returns frameId");
todo(!!loaderId, "Page.navigate returns loaderId");
is(
errorText,
"SEC_ERROR_EXPIRED_CERTIFICATE",
"Failed navigation returns errorText"
);
});
add_task(async function testUnknownCertificate({ client }) {
const { Page } = client;
const { frameId, loaderId, errorText } = await Page.navigate({
url: "https://self-signed.example.com",
});
ok(!!frameId, "Page.navigate returns frameId");
todo(!!loaderId, "Page.navigate returns loaderId");
is(errorText, "SSL_ERROR_UNKNOWN", "Failed navigation returns errorText");
});
add_task(async function testNotFound({ client }) {
const { Page } = client;
const { frameId, loaderId, errorText } = await Page.navigate({
url: "http://example.com/browser/remote/doesnotexist.html",
});
ok(!!frameId, "Page.navigate returns frameId");
todo(!!loaderId, "Page.navigate returns loaderId");
is(errorText, undefined, "No errorText on a 404");
});
add_task(async function testInvalidURL({ client }) {
const { Page } = client;
let message = "";
for (let url of ["blah.com", "foo", "https\n//", "http", ""]) {
message = "";
try {
await Page.navigate({ url });
} catch (e) {
message = e.response.message;
}
ok(message.includes("invalid URL"), `Invalid url ${url} causes error`);
}
for (let url of [2, {}, true]) {
message = "";
try {
await Page.navigate({ url });
} catch (e) {
message = e.response.message;
}
ok(
message.includes("string value expected"),
`Invalid url ${url} causes error`
);
}
});
add_task(async function testDataURL({ client }) {
const { Page } = client;
const url = toDataURL("first");
await Page.enable();
const loadEventFired = Page.loadEventFired();
const { frameId, loaderId, errorText } = await Page.navigate({ url });
is(errorText, undefined, "No errorText on a successful navigation");
todo(!!loaderId, "Page.navigate returns loaderId");
await loadEventFired;
const currentFrame = await getCurrentFrame();
is(frameId, currentFrame.id, "Page.navigate returns expected frameId");
is(gBrowser.selectedBrowser.currentURI.spec, url, "Expected URL loaded");
});
add_task(async function testFileURL({ client }) {
const { Page } = client;
const dir = getChromeDir(getResolvedURI(gTestPath));
dir.append("doc_empty.html");
// The file can be a symbolic link on local build. Normalize it to make sure
// the path matches to the actual URI opened in the new tab.
dir.normalize();
const url = Services.io.newFileURI(dir).spec;
const browser = gBrowser.selectedTab.linkedBrowser;
const loaded = BrowserTestUtils.browserLoaded(browser, false, url);
const { frameId, loaderId, errorText } = await Page.navigate({ url });
is(errorText, undefined, "No errorText on a successful navigation");
todo(!!loaderId, "Page.navigate returns loaderId");
// Bug 1634693 Page.loadEventFired isn't emitted after file: navigation
await loaded;
is(browser.currentURI.spec, url, "Expected URL loaded");
const currentFrame = await getCurrentFrame();
// Bug 1634695 Navigating to file: returns wrong frame id
todo(frameId === currentFrame.id, "Page.navigate returns expected frameId");
});
add_task(async function testAbout({ client }) {
const { Page } = client;
await Page.enable();
let loadEventFired = Page.loadEventFired();
const { frameId, loaderId, errorText } = await Page.navigate({
url: "about:blank",
});
todo(!!loaderId, "Page.navigate returns loaderId");
is(errorText, undefined, "No errorText on a successful navigation");
await loadEventFired;
const currentFrame = await getCurrentFrame();
is(frameId, currentFrame.id, "Page.navigate returns expected frameId");
is(
gBrowser.selectedBrowser.currentURI.spec,
"about:blank",
"Expected URL loaded"
);
});
async function getCurrentFrame() {
const frames = await getFlattendFrameList();
return Array.from(frames.values())[0];
}