Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: browser/components/urlbar/tests/unit/xpcshell.toml
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
"use strict";
const HEURISTIC_FALLBACK_PROVIDERNAME = "HeuristicFallback";
const PLACES_PROVIDERNAME = "Places";
testEngine_setup();
registerCleanupFunction(async () => {
Services.prefs.clearUserPref("browser.urlbar.suggest.quickactions");
});
Services.prefs.setBoolPref("browser.urlbar.suggest.quickactions", false);
add_task(async function multipleSlashes() {
await PlacesTestUtils.addVisits([
{
},
]);
let context = createContext("example.com/foo/", { isPrivate: false });
await check_results({
context,
autofilled: "example.com/foo/",
matches: [
makeVisitResult(context, {
heuristic: true,
}),
],
});
await cleanupPlaces();
});
add_task(async function port() {
await PlacesTestUtils.addVisits([
{
},
]);
let context = createContext("example.com:8888/f", { isPrivate: false });
await check_results({
context,
autofilled: "example.com:8888/foo",
matches: [
makeVisitResult(context, {
heuristic: true,
}),
],
});
await cleanupPlaces();
});
add_task(async function portNoMatch() {
await PlacesTestUtils.addVisits([
{
},
]);
let context = createContext("example.com:8999/f", { isPrivate: false });
await check_results({
context,
matches: [
makeVisitResult(context, {
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
fallbackTitle: "example.com:8999/f",
heuristic: true,
providerName: HEURISTIC_FALLBACK_PROVIDERNAME,
}),
],
});
await cleanupPlaces();
});
// autofill to the next slash
add_task(async function port() {
await PlacesTestUtils.addVisits([
{
},
]);
let context = createContext("example.com:8888/foo/b", { isPrivate: false });
await check_results({
context,
autofilled: "example.com:8888/foo/bar/",
matches: [
makeVisitResult(context, {
fallbackTitle: UrlbarTestUtils.trimURL(
),
heuristic: true,
}),
makeVisitResult(context, {
tags: [],
providerName: PLACES_PROVIDERNAME,
}),
],
});
await cleanupPlaces();
});
// autofill to the next slash, end of url
add_task(async function port() {
await PlacesTestUtils.addVisits([
{
},
]);
let context = createContext("example.com:8888/foo/bar/b", {
isPrivate: false,
});
await check_results({
context,
autofilled: "example.com:8888/foo/bar/baz",
matches: [
makeVisitResult(context, {
heuristic: true,
}),
],
});
await cleanupPlaces();
});
// autofill with case insensitive from history and bookmark.
add_task(async function caseInsensitiveFromHistoryAndBookmark() {
Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", true);
Services.prefs.setBoolPref("browser.urlbar.suggest.history", true);
await PlacesTestUtils.addVisits([
{
},
]);
await testCaseInsensitive();
Services.prefs.clearUserPref("browser.urlbar.suggest.bookmark");
Services.prefs.clearUserPref("browser.urlbar.suggest.history");
await cleanupPlaces();
});
// autofill with case insensitive from history.
add_task(async function caseInsensitiveFromHistory() {
Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", false);
Services.prefs.setBoolPref("browser.urlbar.suggest.history", true);
await PlacesTestUtils.addVisits([
{
},
]);
await testCaseInsensitive();
Services.prefs.clearUserPref("browser.urlbar.suggest.bookmark");
Services.prefs.clearUserPref("browser.urlbar.suggest.history");
await cleanupPlaces();
});
// autofill with case insensitive from bookmark.
add_task(async function caseInsensitiveFromBookmark() {
Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", true);
Services.prefs.setBoolPref("browser.urlbar.suggest.history", false);
await PlacesTestUtils.addBookmarkWithDetails({
});
await testCaseInsensitive(true);
Services.prefs.clearUserPref("browser.urlbar.suggest.bookmark");
Services.prefs.clearUserPref("browser.urlbar.suggest.history");
await cleanupPlaces();
});
// should *not* autofill if the URI fragment does not match with case-sensitive.
add_task(async function uriFragmentCaseSensitiveNoMatch() {
await PlacesTestUtils.addVisits([
{
},
]);
await check_results({
context,
matches: [
makeVisitResult(context, {
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
heuristic: true,
}),
makeVisitResult(context, {
source: UrlbarUtils.RESULT_SOURCE.HISTORY,
tags: [],
}),
],
});
await cleanupPlaces();
});
// should autofill if the URI fragment matches with case-sensitive.
add_task(async function uriFragmentCaseSensitive() {
await PlacesTestUtils.addVisits([
{
},
]);
await check_results({
context,
matches: [
makeVisitResult(context, {
source: UrlbarUtils.RESULT_SOURCE.HISTORY,
heuristic: true,
}),
],
});
await cleanupPlaces();
});
add_task(async function uriCase() {
await PlacesTestUtils.addVisits([
{
},
]);
const testData = [
{
input: "example.COM",
expected: {
autofilled: "example.COM/",
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
input: "example.COM/",
expected: {
autofilled: "example.COM/",
results: [
context =>
makeVisitResult(context, {
removeSingleTrailingSlash: false,
}),
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
input: "example.COM/a",
expected: {
autofilled: "example.COM/aBC/",
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
input: "example.com/ab",
expected: {
autofilled: "example.com/abC/",
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
input: "example.com/abc",
expected: {
autofilled: "example.com/abc/",
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
input: "example.com/abc/",
expected: {
autofilled: "example.com/abc/",
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
input: "example.com/abc/d",
expected: {
autofilled: "example.com/abc/dEF",
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
],
},
},
{
input: "example.com/abc/de",
expected: {
autofilled: "example.com/abc/deF",
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
],
},
},
{
input: "example.com/abc/def",
expected: {
autofilled: "example.com/abc/def",
results: [
context =>
makeVisitResult(context, {
fallbackTitle: UrlbarTestUtils.trimURL(
),
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
expected: {
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
expected: {
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
expected: {
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
],
},
},
{
expected: {
results: [
context =>
makeVisitResult(context, {
fallbackTitle: UrlbarTestUtils.trimURL(
),
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
{
expected: {
results: [
context =>
makeVisitResult(context, {
heuristic: true,
}),
],
},
},
{
expected: {
results: [
context =>
makeVisitResult(context, {
fallbackTitle: UrlbarTestUtils.trimURL(
),
heuristic: true,
}),
context =>
makeVisitResult(context, {
}),
],
},
},
];
for (const { input, expected } of testData) {
const context = createContext(input, {
isPrivate: false,
});
await check_results({
context,
autofilled: expected.autofilled,
completed: expected.completed,
matches: expected.results.map(f => f(context)),
});
}
await cleanupPlaces();
});
async function testCaseInsensitive(isBookmark = false) {
const testData = [
{
input: "example.com/F",
expectedAutofill: "example.com/Foo",
},
{
// Test with prefix.
},
];
for (const { input, expectedAutofill } of testData) {
const context = createContext(input, {
isPrivate: false,
});
await check_results({
context,
autofilled: expectedAutofill,
matches: [
makeVisitResult(context, {
title: isBookmark
? "A bookmark"
heuristic: true,
}),
],
});
}
await cleanupPlaces();
}
// Checks a URL with an origin that looks like a prefix: a scheme with no dots +
// a port.
add_task(async function originLooksLikePrefix1() {
await PlacesTestUtils.addVisits([
{
},
]);
const context = createContext("localhost:8888/f", { isPrivate: false });
await check_results({
context,
autofilled: "localhost:8888/foo",
matches: [
makeVisitResult(context, {
heuristic: true,
}),
],
});
await cleanupPlaces();
});
// Same as previous (originLooksLikePrefix1) but uses a URL whose path has two
// slashes, not one.
add_task(async function originLooksLikePrefix2() {
await PlacesTestUtils.addVisits([
{
},
]);
let context = createContext("localhost:8888/f", { isPrivate: false });
await check_results({
context,
autofilled: "localhost:8888/foo/",
matches: [
makeVisitResult(context, {
heuristic: true,
}),
makeVisitResult(context, {
providerName: PLACES_PROVIDERNAME,
tags: [],
}),
],
});
context = createContext("localhost:8888/foo/b", { isPrivate: false });
await check_results({
context,
autofilled: "localhost:8888/foo/bar",
matches: [
makeVisitResult(context, {
heuristic: true,
}),
],
});
await cleanupPlaces();
});
// Checks view-source pages as a prefix
// Uses bookmark because addVisits does not allow non-http uri's
add_task(async function viewSourceAsPrefix() {
let title = "A view source bookmark";
await PlacesTestUtils.addBookmarkWithDetails({
uri: address,
title,
});
let testData = [
{
input: "view-source:h",
completed: "view-source:https:/",
autofilled: "view-source:https:/",
},
{
input: "view-source:http",
completed: "view-source:https:/",
autofilled: "view-source:https:/",
},
{
input: "VIEW-SOURCE:http",
completed: "view-source:https:/",
autofilled: "VIEW-SOURCE:https:/",
},
];
// Only autofills from view-source:h to view-source:https:/
for (let { input, completed, autofilled } of testData) {
let context = createContext(input, { isPrivate: false });
await check_results({
context,
completed,
autofilled,
matches: [
{
heuristic: true,
type: UrlbarUtils.RESULT_TYPE.URL,
source: UrlbarUtils.RESULT_SOURCE.HISTORY,
},
makeBookmarkResult(context, {
uri: address,
iconUri: "chrome://global/skin/icons/defaultFavicon.svg",
title,
}),
],
});
}
await cleanupPlaces();
});
// Checks data url prefixes
// Uses bookmark because addVisits does not allow non-http uri's
add_task(async function dataAsPrefix() {
let address = "data:text/html,%3Ch1%3EHello%2C World!%3C%2Fh1%3E";
let title = "A data url bookmark";
await PlacesTestUtils.addBookmarkWithDetails({
uri: address,
title,
});
let testData = [
{
input: "data:t",
completed: "data:text/",
autofilled: "data:text/",
},
{
input: "data:text",
completed: "data:text/",
autofilled: "data:text/",
},
{
input: "DATA:text",
completed: "data:text/",
autofilled: "DATA:text/",
},
];
for (let { input, completed, autofilled } of testData) {
let context = createContext(input, { isPrivate: false });
await check_results({
context,
completed,
autofilled,
matches: [
{
heuristic: true,
type: UrlbarUtils.RESULT_TYPE.URL,
source: UrlbarUtils.RESULT_SOURCE.HISTORY,
},
makeBookmarkResult(context, {
uri: address,
iconUri: "chrome://global/skin/icons/defaultFavicon.svg",
title,
}),
],
});
}
await cleanupPlaces();
});
// Checks about prefixes
add_task(async function aboutAsPrefix() {
let testData = [
{
input: "about:abou",
completed: "about:about",
autofilled: "about:about",
},
{
input: "ABOUT:abou",
completed: "about:about",
autofilled: "ABOUT:about",
},
];
for (let { input, completed, autofilled } of testData) {
let context = createContext(input, { isPrivate: false });
await check_results({
context,
completed,
autofilled,
matches: [
{
heuristic: true,
type: UrlbarUtils.RESULT_TYPE.URL,
source: UrlbarUtils.RESULT_SOURCE.HISTORY,
},
],
});
}
await cleanupPlaces();
});
// Checks a URL that has www name in history.
add_task(async function wwwHistory() {
const testData = [
{
input: "example.com/",
expected: {
autofilled: "example.com/",
results: [
context =>
makeVisitResult(context, {
title: "Example",
heuristic: true,
}),
],
},
},
{
expected: {
results: [
context =>
makeVisitResult(context, {
title: "Example",
heuristic: true,
}),
],
},
},
{
expected: {
results: [
context =>
makeVisitResult(context, {
title: "Example",
heuristic: true,
}),
],
},
},
{
expected: {
results: [
context =>
makeVisitResult(context, {
fallbackTitle: UrlbarTestUtils.trimURL(
),
heuristic: true,
}),
context =>
makeVisitResult(context, {
title: "Example",
}),
],
},
},
];
for (const { input, visitHistory, expected } of testData) {
await PlacesTestUtils.addVisits(visitHistory);
const context = createContext(input, { isPrivate: false });
await check_results({
context,
completed: expected.completed,
autofilled: expected.autofilled,
matches: expected.results.map(f => f(context)),
});
await cleanupPlaces();
}
});
add_task(async function formatPunycodeResultCorrectly() {
await PlacesTestUtils.addVisits([
{
},
]);
let context = createContext("test", { isPrivate: false });
await check_results({
context,
autofilled: "test.xn--e1afmkfd.com/",
matches: [
makeVisitResult(context, {
heuristic: true,
}),
],
});
await cleanupPlaces();
});