mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-10 05:08:36 +02:00
221 lines
6.9 KiB
JavaScript
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];
|
|
}
|