Update On Wed Mar 5 19:56:10 CET 2025
This commit is contained in:
parent
eaefe60938
commit
897718f7a3
4909 changed files with 515741 additions and 517059 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -2266,6 +2266,7 @@ dependencies = [
|
|||
"mozbuild",
|
||||
"profiler-macros",
|
||||
"serde",
|
||||
"smallvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
@ -134,7 +134,7 @@ ifeq ($(MOZ_BUILD_APP),mobile/android)
|
|||
recurse_android-stage-package: stage-package
|
||||
|
||||
recurse_android-archive-geckoview:
|
||||
GRADLE_INVOKED_WITHIN_MACH_BUILD=1 $(topsrcdir)/mach --log-no-times android archive-geckoview
|
||||
GRADLE_INVOKED_WITHIN_MACH_BUILD=1 $(topsrcdir)/mach --log-no-times android archive-geckoview $(if $(MOZ_AUTOMATION),--no-configuration-cache)
|
||||
endif
|
||||
|
||||
ifdef MOZ_WIDGET_TOOLKIT
|
||||
|
|
|
@ -1660,7 +1660,14 @@ addUiaTask(
|
|||
* Test the TextRange pattern's GetEnclosingElement method.
|
||||
*/
|
||||
addUiaTask(
|
||||
`<div id="editable" contenteditable role="textbox">ab <mark id="cdef"><span>cd</span> <a id="ef" href="/">ef</a></mark> <img id="g" src="https://example.com/a11y/accessible/tests/mochitest/moz.png" alt="g"></div>`,
|
||||
`
|
||||
<div id="editable" contenteditable role="textbox">
|
||||
ab
|
||||
<mark id="cdef"><span>cd</span> <a id="ef" href="/">ef</a></mark>
|
||||
<a href="/"><img id="g" src="https://example.com/a11y/accessible/tests/mochitest/moz.png" alt="g"></a>
|
||||
<p><button id="h">h</button></p>
|
||||
</div>
|
||||
`,
|
||||
async function testTextRangeGetEnclosingElement() {
|
||||
info("Getting editable DocumentRange");
|
||||
await runPython(`
|
||||
|
@ -1723,23 +1730,34 @@ addUiaTask(
|
|||
await runPython(
|
||||
`range.MoveEndpointByUnit(TextPatternRangeEndpoint_End, TextUnit_Character, -1)`
|
||||
);
|
||||
// Range is now "ef".
|
||||
// Range is now "ef". The innermost element is the text leaf, but "ef" is a
|
||||
// link and that's what Narrator wants.
|
||||
is(
|
||||
await runPython(`range.GetEnclosingElement().CurrentName`),
|
||||
await runPython(`range.GetEnclosingElement().CurrentAutomationId`),
|
||||
"ef",
|
||||
"EnclosingElement is ef text leaf"
|
||||
"EnclosingElement is ef"
|
||||
);
|
||||
// The IA2 -> UIA proxy gets the rest of this wrong.
|
||||
if (!gIsUiaEnabled) {
|
||||
return;
|
||||
}
|
||||
info("Moving 1 word");
|
||||
await runPython(`range.Move(TextUnit_Word, 1)`);
|
||||
// Range is now the embedded object character for the img (g).
|
||||
// The IA2 -> UIA proxy gets this wrong.
|
||||
if (gIsUiaEnabled) {
|
||||
is(
|
||||
await runPython(`range.GetEnclosingElement().CurrentAutomationId`),
|
||||
"g",
|
||||
"EnclosingElement is g"
|
||||
);
|
||||
}
|
||||
is(
|
||||
await runPython(`range.GetEnclosingElement().CurrentAutomationId`),
|
||||
"g",
|
||||
"EnclosingElement is g"
|
||||
);
|
||||
info("Moving 1 word");
|
||||
await runPython(`range.Move(TextUnit_Word, 1)`);
|
||||
// Range is now "h". "h" is a button and buttons prune their children, so
|
||||
// UIA doesn't see the text leaf.
|
||||
is(
|
||||
await runPython(`range.GetEnclosingElement().CurrentAutomationId`),
|
||||
"h",
|
||||
"EnclosingElement is h"
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
@ -746,12 +746,25 @@ UiaTextRange::GetEnclosingElement(
|
|||
return CO_E_OBJNOTCONNECTED;
|
||||
}
|
||||
RemoveExcludedAccessiblesFromRange(range);
|
||||
if (Accessible* enclosing =
|
||||
range.Start().mAcc->GetClosestCommonInclusiveAncestor(
|
||||
range.End().mAcc)) {
|
||||
RefPtr<IRawElementProviderSimple> uia = MsaaAccessible::GetFrom(enclosing);
|
||||
uia.forget(aRetVal);
|
||||
Accessible* enclosing =
|
||||
range.Start().mAcc->GetClosestCommonInclusiveAncestor(range.End().mAcc);
|
||||
if (!enclosing) {
|
||||
return S_OK;
|
||||
}
|
||||
for (Accessible* acc = enclosing; acc && !acc->IsDoc(); acc = acc->Parent()) {
|
||||
if (nsAccUtils::MustPrune(acc) ||
|
||||
// Bug 1950535: Narrator won't report a link correctly when navigating
|
||||
// by character or word if we return a child text leaf. However, if
|
||||
// there is more than a single text leaf, we need to return the child
|
||||
// because it might have semantic significance; e.g. an embedded image.
|
||||
(acc->Role() == roles::LINK && acc->ChildCount() == 1 &&
|
||||
acc->FirstChild()->IsText())) {
|
||||
enclosing = acc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
RefPtr<IRawElementProviderSimple> uia = MsaaAccessible::GetFrom(enclosing);
|
||||
uia.forget(aRetVal);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
AboutReader: "resource://gre/modules/AboutReader.sys.mjs",
|
||||
ReaderMode: "resource://gre/modules/ReaderMode.sys.mjs",
|
||||
AboutReader: "moz-src:///toolkit/components/reader/AboutReader.sys.mjs",
|
||||
ReaderMode: "moz-src:///toolkit/components/reader/ReaderMode.sys.mjs",
|
||||
Readerable: "resource://gre/modules/Readerable.sys.mjs",
|
||||
});
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ const lazy = {};
|
|||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
PageActions: "resource:///modules/PageActions.sys.mjs",
|
||||
PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
|
||||
ReaderMode: "resource://gre/modules/ReaderMode.sys.mjs",
|
||||
ReaderMode: "moz-src:///toolkit/components/reader/ReaderMode.sys.mjs",
|
||||
});
|
||||
|
||||
// A set of all of the AboutReaderParent actors that exist.
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserSearchTelemetry:
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs",
|
||||
FormHistory: "resource://gre/modules/FormHistory.sys.mjs",
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
|
|
|
@ -112,7 +112,7 @@ export class ContextMenuChild extends JSWindowActorChild {
|
|||
media.requestFullscreen();
|
||||
}
|
||||
break;
|
||||
case "pictureinpicture":
|
||||
case "pictureinpicture": {
|
||||
let event = new this.contentWindow.CustomEvent(
|
||||
"MozTogglePictureInPicture",
|
||||
{
|
||||
|
@ -123,6 +123,7 @@ export class ContextMenuChild extends JSWindowActorChild {
|
|||
);
|
||||
media.dispatchEvent(event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -219,6 +220,37 @@ export class ContextMenuChild extends JSWindowActorChild {
|
|||
return Promise.resolve({ spec, title, postData, charset });
|
||||
}
|
||||
|
||||
case "ContextMenu:SearchFieldEngineData": {
|
||||
let node = lazy.ContentDOMReference.resolve(
|
||||
message.data.targetIdentifier
|
||||
);
|
||||
let charset = node.ownerDocument.characterSet;
|
||||
let formBaseURI = Services.io.newURI(node.form.baseURI, charset);
|
||||
let method = node.form.method.toUpperCase();
|
||||
|
||||
let formData = new FormData(node.form);
|
||||
formData.set(node.name, "{searchTerms}");
|
||||
|
||||
let url = Services.io.newURI(
|
||||
node.form.getAttribute("action"),
|
||||
charset,
|
||||
formBaseURI
|
||||
).spec;
|
||||
|
||||
if (
|
||||
!node.name ||
|
||||
(method != "POST" && method != "GET") ||
|
||||
node.form.enctype != "application/x-www-form-urlencoded" ||
|
||||
formData.entries().some(([k, v]) => !k && typeof v != "string")
|
||||
) {
|
||||
// This should never happen since these conditions are checked in
|
||||
// `isTargetASearchEngineField`.
|
||||
return Promise.reject("Cannot create search engine from this form.");
|
||||
}
|
||||
|
||||
return Promise.resolve({ url, formData, charset, method });
|
||||
}
|
||||
|
||||
case "ContextMenu:SaveVideoFrameAsImage": {
|
||||
let video = lazy.ContentDOMReference.resolve(
|
||||
message.data.targetIdentifier
|
||||
|
@ -1105,6 +1137,7 @@ export class ContextMenuChild extends JSWindowActorChild {
|
|||
}
|
||||
|
||||
context.onKeywordField = editFlags & lazy.SpellCheckHelper.KEYWORD;
|
||||
context.onSearchField = editFlags & lazy.SpellCheckHelper.SEARCHENGINE;
|
||||
} else if (this.contentWindow.HTMLHtmlElement.isInstance(context.target)) {
|
||||
const bodyElt = context.target.ownerDocument.body;
|
||||
|
||||
|
|
|
@ -123,6 +123,12 @@ export class ContextMenuParent extends JSWindowActorParent {
|
|||
});
|
||||
}
|
||||
|
||||
getSearchFieldEngineData(targetIdentifier) {
|
||||
return this.sendQuery("ContextMenu:SearchFieldEngineData", {
|
||||
targetIdentifier,
|
||||
});
|
||||
}
|
||||
|
||||
getTextDirective() {
|
||||
return this.sendQuery("ContextMenu:GetTextDirective");
|
||||
}
|
||||
|
|
|
@ -6,7 +6,8 @@ const lazy = {};
|
|||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
|
||||
OpenSearchManager: "resource:///modules/OpenSearchManager.sys.mjs",
|
||||
OpenSearchManager:
|
||||
"moz-src:///browser/components/search/OpenSearchManager.sys.mjs",
|
||||
});
|
||||
|
||||
let gTestListeners = new Set();
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
});
|
||||
|
||||
export class SearchSERPTelemetryParent extends JSWindowActorParent {
|
||||
|
|
|
@ -2362,7 +2362,7 @@ pref("browser.contentblocking.reject-and-isolate-cookies.preferences.ui.enabled"
|
|||
// "btp": BTP enabled
|
||||
// "-btp": BTP disabled
|
||||
// One value from each section must be included in the browser.contentblocking.features.strict pref.
|
||||
pref("browser.contentblocking.features.strict", "tp,tpPrivate,cookieBehavior5,cookieBehaviorPBM5,cm,fp,stp,emailTP,emailTPPrivate,lvl2,rp,rpTop,ocsp,qps,qpsPBM,fpp,fppPrivate,3pcd,btp");
|
||||
pref("browser.contentblocking.features.strict", "tp,tpPrivate,cookieBehavior5,cookieBehaviorPBM5,cm,fp,stp,emailTP,emailTPPrivate,lvl2,rp,rpTop,ocsp,qps,qpsPBM,fpp,fppPrivate,btp");
|
||||
|
||||
// Hide the "Change Block List" link for trackers/tracking content in the custom
|
||||
// Content Blocking/ETP panel. By default, it will not be visible. There is also
|
||||
|
|
|
@ -353,6 +353,8 @@
|
|||
<menuseparator id="context-sep-screenshots"/>
|
||||
<menuitem id="context-keywordfield"
|
||||
data-l10n-id="main-context-menu-keyword"/>
|
||||
<menuitem id="context-add-engine"
|
||||
data-l10n-id="main-context-menu-add-engine"/>
|
||||
<menuitem id="context-searchselect"/>
|
||||
<menuitem id="context-searchselect-private"/>
|
||||
<menuitem id="context-translate-selection"
|
||||
|
|
|
@ -213,7 +213,16 @@ document.addEventListener(
|
|||
gContextMenu.takeScreenshot();
|
||||
break;
|
||||
case "context-keywordfield":
|
||||
AddKeywordForSearchField();
|
||||
if (!gContextMenu) {
|
||||
throw new Error("Context menu doesn't seem to be open.");
|
||||
}
|
||||
gContextMenu.addKeywordForSearchField();
|
||||
break;
|
||||
case "context-add-engine":
|
||||
if (!gContextMenu) {
|
||||
throw new Error("Context menu doesn't seem to be open.");
|
||||
}
|
||||
gContextMenu.addSearchFieldAsEngine();
|
||||
break;
|
||||
case "context-searchselect": {
|
||||
let { searchTerms, usePrivate, principal, csp } = event.target;
|
||||
|
|
|
@ -53,7 +53,8 @@ ChromeUtils.defineESModuleGetters(this, {
|
|||
nsContextMenu: "chrome://browser/content/nsContextMenu.sys.mjs",
|
||||
OpenInTabsUtils:
|
||||
"moz-src:///browser/components/tabbrowser/OpenInTabsUtils.sys.mjs",
|
||||
OpenSearchManager: "resource:///modules/OpenSearchManager.sys.mjs",
|
||||
OpenSearchManager:
|
||||
"moz-src:///browser/components/search/OpenSearchManager.sys.mjs",
|
||||
PageActions: "resource:///modules/PageActions.sys.mjs",
|
||||
PageThumbs: "resource://gre/modules/PageThumbs.sys.mjs",
|
||||
PanelMultiView: "resource:///modules/PanelMultiView.sys.mjs",
|
||||
|
@ -67,13 +68,13 @@ ChromeUtils.defineESModuleGetters(this, {
|
|||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
ProcessHangMonitor: "resource:///modules/ProcessHangMonitor.sys.mjs",
|
||||
PromptUtils: "resource://gre/modules/PromptUtils.sys.mjs",
|
||||
ReaderMode: "resource://gre/modules/ReaderMode.sys.mjs",
|
||||
ReaderMode: "moz-src:///toolkit/components/reader/ReaderMode.sys.mjs",
|
||||
ResetPBMPanel: "resource:///modules/ResetPBMPanel.sys.mjs",
|
||||
SafeBrowsing: "resource://gre/modules/SafeBrowsing.sys.mjs",
|
||||
Sanitizer: "resource:///modules/Sanitizer.sys.mjs",
|
||||
SaveToPocket: "chrome://pocket/content/SaveToPocket.sys.mjs",
|
||||
ScreenshotsUtils: "resource:///modules/ScreenshotsUtils.sys.mjs",
|
||||
SearchUIUtils: "resource:///modules/SearchUIUtils.sys.mjs",
|
||||
SearchUIUtils: "moz-src:///browser/components/search/SearchUIUtils.sys.mjs",
|
||||
SessionStartup: "resource:///modules/sessionstore/SessionStartup.sys.mjs",
|
||||
SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs",
|
||||
ShoppingSidebarParent: "resource:///actors/ShoppingSidebarParent.sys.mjs",
|
||||
|
@ -4821,14 +4822,6 @@ var MailIntegration = {
|
|||
},
|
||||
};
|
||||
|
||||
function AddKeywordForSearchField() {
|
||||
if (!gContextMenu) {
|
||||
throw new Error("Context menu doesn't seem to be open.");
|
||||
}
|
||||
|
||||
gContextMenu.addKeywordForSearchField();
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies only to the cmd|ctrl + shift + T keyboard shortcut
|
||||
* Undo the last action that was taken - either closing the last tab or closing the last window;
|
||||
|
|
|
@ -82,7 +82,6 @@
|
|||
"WindowIsClosing",
|
||||
"warnAboutClosingWindow",
|
||||
"MailIntegration",
|
||||
"AddKeywordForSearchField",
|
||||
"restoreLastClosedTabOrWindowOrSession",
|
||||
"undoCloseTab",
|
||||
"undoCloseWindow",
|
||||
|
|
|
@ -20,7 +20,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||
NetUtil: "resource://gre/modules/NetUtil.sys.mjs",
|
||||
PlacesUIUtils: "resource:///modules/PlacesUIUtils.sys.mjs",
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
ReaderMode: "resource://gre/modules/ReaderMode.sys.mjs",
|
||||
ReaderMode: "moz-src:///toolkit/components/reader/ReaderMode.sys.mjs",
|
||||
ShortcutUtils: "resource://gre/modules/ShortcutUtils.sys.mjs",
|
||||
TranslationsParent: "resource://gre/actors/TranslationsParent.sys.mjs",
|
||||
WebsiteFilter: "resource:///modules/policies/WebsiteFilter.sys.mjs",
|
||||
|
@ -218,6 +218,7 @@ export class nsContextMenu {
|
|||
this.onEditable = context.onEditable;
|
||||
this.onImage = context.onImage;
|
||||
this.onKeywordField = context.onKeywordField;
|
||||
this.onSearchField = context.onSearchField;
|
||||
this.onLink = context.onLink;
|
||||
this.onLoadedImage = context.onLoadedImage;
|
||||
this.onMailtoLink = context.onMailtoLink;
|
||||
|
@ -899,6 +900,7 @@ export class nsContextMenu {
|
|||
!this.onMozExtLink) ||
|
||||
this.onPlainTextLink
|
||||
);
|
||||
this.showItem("context-add-engine", this.shouldShowAddEngine());
|
||||
this.showItem("context-keywordfield", this.shouldShowAddKeyword());
|
||||
this.showItem("frame", this.inFrame);
|
||||
|
||||
|
@ -2344,6 +2346,20 @@ export class nsContextMenu {
|
|||
});
|
||||
}
|
||||
|
||||
addSearchFieldAsEngine() {
|
||||
this.actor
|
||||
.getSearchFieldEngineData(this.targetIdentifier)
|
||||
.then(async ({ url, formData, charset, method }) => {
|
||||
let icon = this.browser.mIconURL;
|
||||
let uri = Services.io.newURI(url);
|
||||
await this.window.gDialogBox.open(
|
||||
"chrome://browser/content/search/addEngine.xhtml",
|
||||
{ uri, formData, charset, method, icon }
|
||||
);
|
||||
})
|
||||
.catch(console.error);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utilities
|
||||
*/
|
||||
|
@ -2488,7 +2504,27 @@ export class nsContextMenu {
|
|||
}
|
||||
|
||||
shouldShowAddKeyword() {
|
||||
return this.onTextInput && this.onKeywordField && !this.isLoginForm();
|
||||
return (
|
||||
this.onTextInput &&
|
||||
this.onKeywordField &&
|
||||
!this.isLoginForm() &&
|
||||
!Services.prefs.getBoolPref(
|
||||
"browser.urlbar.update2.engineAliasRefresh",
|
||||
false
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
shouldShowAddEngine() {
|
||||
return (
|
||||
this.onTextInput &&
|
||||
this.onSearchField &&
|
||||
!this.isLoginForm() &&
|
||||
Services.prefs.getBoolPref(
|
||||
"browser.urlbar.update2.engineAliasRefresh",
|
||||
false
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
addDictionaries() {
|
||||
|
|
|
@ -73,6 +73,11 @@ support-files = [
|
|||
"csp_iframe.sjs",
|
||||
]
|
||||
|
||||
["browser_aboutNetError_invalid_header.js"]
|
||||
support-files = [
|
||||
"invalid_header.sjs",
|
||||
]
|
||||
|
||||
["browser_aboutNetError_server_error.js"]
|
||||
support-files = [
|
||||
"server_error.sjs",
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
const INVALID_HEADER =
|
||||
"https://example.com/browser/browser/base/content/test/about/invalid_header.sjs";
|
||||
|
||||
// From appstrings.properties
|
||||
const EXPECTED_SHORT_DESC =
|
||||
INVALID_HEADER +
|
||||
" sent back a header with empty characters not allowed by web security standards.";
|
||||
|
||||
add_task(async function test_invalidHeaderValue() {
|
||||
let browser;
|
||||
let pageLoaded;
|
||||
|
||||
await BrowserTestUtils.openNewForegroundTab(
|
||||
gBrowser,
|
||||
() => {
|
||||
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, INVALID_HEADER);
|
||||
browser = gBrowser.selectedBrowser;
|
||||
pageLoaded = BrowserTestUtils.waitForErrorPage(browser);
|
||||
},
|
||||
false
|
||||
);
|
||||
|
||||
await pageLoaded;
|
||||
|
||||
await SpecialPowers.spawn(
|
||||
browser,
|
||||
[EXPECTED_SHORT_DESC],
|
||||
function (expectedShortDesc) {
|
||||
const doc = content.document;
|
||||
ok(
|
||||
doc.documentURI.startsWith("about:neterror"),
|
||||
"Should be showing error page"
|
||||
);
|
||||
|
||||
const titleEl = doc.querySelector(".title-text");
|
||||
const actualDataL10nID = titleEl.getAttribute("data-l10n-id");
|
||||
is(
|
||||
actualDataL10nID,
|
||||
"problem-with-this-site-title",
|
||||
"Correct error link title is set"
|
||||
);
|
||||
const shortDesc = doc.getElementById("errorShortDesc");
|
||||
ok(
|
||||
shortDesc.textContent.startsWith(expectedShortDesc),
|
||||
"Correct error page title is set"
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
});
|
11
browser/base/content/test/about/invalid_header.sjs
Normal file
11
browser/base/content/test/about/invalid_header.sjs
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
function handleRequest(request, response) {
|
||||
response.setStatusLine(request.httpVersion, 200);
|
||||
|
||||
// x-invalid-header permits invalid chars in httpd.sys.mjs
|
||||
response.setHeader("x-invalid-header-value", "Foo\x00Bar", false);
|
||||
}
|
|
@ -2,7 +2,8 @@
|
|||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
OpenSearchManager: "resource:///modules/OpenSearchManager.sys.mjs",
|
||||
OpenSearchManager:
|
||||
"moz-src:///browser/components/search/OpenSearchManager.sys.mjs",
|
||||
});
|
||||
|
||||
function test() {
|
||||
|
|
|
@ -369,6 +369,10 @@ add_task(async function testCookiesSubViewAllowedHeuristic() {
|
|||
TPC_PREF,
|
||||
Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER
|
||||
);
|
||||
Services.prefs.setBoolPref(
|
||||
"privacy.restrict3rdpartystorage.heuristic.exclude_third_party_trackers",
|
||||
false
|
||||
);
|
||||
let principal =
|
||||
Services.scriptSecurityManager.createContentPrincipalFromOrigin(
|
||||
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
||||
|
@ -474,6 +478,9 @@ add_task(async function testCookiesSubViewAllowedHeuristic() {
|
|||
BrowserTestUtils.removeTab(tab);
|
||||
|
||||
Services.prefs.clearUserPref(TPC_PREF);
|
||||
Services.prefs.clearUserPref(
|
||||
"privacy.restrict3rdpartystorage.heuristic.exclude_third_party_trackers"
|
||||
);
|
||||
});
|
||||
|
||||
add_task(async function testCookiesSubViewBlockedDoublyNested() {
|
||||
|
|
|
@ -28,7 +28,7 @@ category browser-window-domcontentloaded resource:///modules/CustomizableUI.sys.
|
|||
category browser-window-delayed-startup resource:///modules/ContentAnalysis.sys.mjs ContentAnalysis.initialize
|
||||
category browser-window-delayed-startup resource:///modules/HomePage.sys.mjs HomePage.delayedStartup
|
||||
category browser-window-delayed-startup resource:///modules/ReportBrokenSite.sys.mjs ReportBrokenSite.init
|
||||
category browser-window-delayed-startup resource:///modules/SearchUIUtils.sys.mjs SearchUIUtils.init
|
||||
category browser-window-delayed-startup moz-src:///browser/components/search/SearchUIUtils.sys.mjs SearchUIUtils.init
|
||||
|
||||
category browser-window-unload resource:///modules/BrowserDOMWindow.sys.mjs BrowserDOMWindow.teardownInWindow
|
||||
category browser-window-unload moz-src:///browser/components/tabbrowser/NewTabPagePreloading.sys.mjs NewTabPagePreloading.removePreloadedBrowser
|
||||
|
@ -43,7 +43,7 @@ category browser-idle-startup resource:///modules/GenAI.sys.mjs GenAI.init
|
|||
category browser-idle-startup resource:///modules/QuickSuggest.sys.mjs QuickSuggest.init
|
||||
category browser-idle-startup resource:///modules/UrlbarSearchTermsPersistence.sys.mjs UrlbarSearchTermsPersistence.init
|
||||
category browser-idle-startup resource:///modules/ShoppingUtils.sys.mjs ShoppingUtils.init
|
||||
category browser-idle-startup resource:///modules/SERPCategorization.sys.mjs SERPCategorization.init
|
||||
category browser-idle-startup moz-src:///browser/components/search/SERPCategorization.sys.mjs SERPCategorization.init
|
||||
category browser-idle-startup resource://gre/modules/ContentRelevancyManager.sys.mjs ContentRelevancyManager.init
|
||||
#ifdef MOZ_UPDATER
|
||||
category browser-idle-startup resource://gre/modules/UpdateListener.sys.mjs UpdateListener.maybeShowUnsupportedNotification
|
||||
|
@ -62,11 +62,11 @@ category browser-quit-application-granted resource://normandy/Normandy.sys.mjs N
|
|||
category browser-quit-application-granted resource://gre/modules/RFPHelper.sys.mjs RFPHelper.uninit
|
||||
category browser-quit-application-granted resource:///modules/ShoppingUtils.sys.mjs ShoppingUtils.uninit
|
||||
category browser-quit-application-granted resource:///modules/asrouter/ASRouterNewTabHook.sys.mjs ASRouterNewTabHook.destroy
|
||||
category browser-quit-application-granted resource:///modules/SERPCategorization.sys.mjs SERPCategorization.uninit
|
||||
category browser-quit-application-granted resource:///modules/SearchSERPTelemetry.sys.mjs SearchSERPTelemetry.uninit
|
||||
category browser-quit-application-granted moz-src:///browser/components/search/SERPCategorization.sys.mjs SERPCategorization.uninit
|
||||
category browser-quit-application-granted moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs SearchSERPTelemetry.uninit
|
||||
#ifdef MOZ_UPDATER
|
||||
category browser-quit-application-granted resource://gre/modules/UpdateListener.sys.mjs UpdateListener.reset
|
||||
#endif
|
||||
category browser-quit-application-granted resource:///modules/UrlbarSearchTermsPersistence.sys.mjs UrlbarSearchTermsPersistence.uninit
|
||||
|
||||
category search-service-notification resource:///modules/SearchUIUtils.sys.mjs SearchUIUtils.showSearchServiceNotification
|
||||
category search-service-notification moz-src:///browser/components/search/SearchUIUtils.sys.mjs SearchUIUtils.showSearchServiceNotification
|
||||
|
|
|
@ -16,7 +16,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||
LaterRun: "resource:///modules/LaterRun.sys.mjs",
|
||||
NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
SearchUIUtils: "resource:///modules/SearchUIUtils.sys.mjs",
|
||||
SearchUIUtils: "moz-src:///browser/components/search/SearchUIUtils.sys.mjs",
|
||||
SessionStartup: "resource:///modules/sessionstore/SessionStartup.sys.mjs",
|
||||
ShellService: "resource:///modules/ShellService.sys.mjs",
|
||||
SpecialMessageActions:
|
||||
|
|
|
@ -21,7 +21,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||
BackupService: "resource:///modules/backup/BackupService.sys.mjs",
|
||||
BookmarkHTMLUtils: "resource://gre/modules/BookmarkHTMLUtils.sys.mjs",
|
||||
BookmarkJSONUtils: "resource://gre/modules/BookmarkJSONUtils.sys.mjs",
|
||||
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserSearchTelemetry:
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs",
|
||||
BrowserUsageTelemetry: "resource:///modules/BrowserUsageTelemetry.sys.mjs",
|
||||
BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs",
|
||||
|
@ -74,7 +75,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||
Sanitizer: "resource:///modules/Sanitizer.sys.mjs",
|
||||
SandboxUtils: "resource://gre/modules/SandboxUtils.sys.mjs",
|
||||
ScreenshotsUtils: "resource:///modules/ScreenshotsUtils.sys.mjs",
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
SelectableProfileService:
|
||||
"resource:///modules/profiles/SelectableProfileService.sys.mjs",
|
||||
SessionStartup: "resource:///modules/sessionstore/SessionStartup.sys.mjs",
|
||||
|
@ -2271,25 +2273,6 @@ BrowserGlue.prototype = {
|
|||
});
|
||||
},
|
||||
|
||||
async _setupSearchDetection() {
|
||||
// There is no pref for this add-on because it shouldn't be disabled.
|
||||
const ID = "addons-search-detection@mozilla.com";
|
||||
|
||||
let addon = await lazy.AddonManager.getAddonByID(ID);
|
||||
|
||||
// first time install of addon and install on firefox update
|
||||
addon =
|
||||
(await lazy.AddonManager.maybeInstallBuiltinAddon(
|
||||
ID,
|
||||
"2.0.0",
|
||||
"resource://builtin-addons/search-detection/"
|
||||
)) || addon;
|
||||
|
||||
if (!addon.isActive) {
|
||||
addon.enable();
|
||||
}
|
||||
},
|
||||
|
||||
_monitorHTTPSOnlyPref() {
|
||||
const PREF_ENABLED = "dom.security.https_only_mode";
|
||||
const PREF_WAS_ENABLED = "dom.security.https_only_mode_ever_enabled";
|
||||
|
@ -2434,7 +2417,6 @@ BrowserGlue.prototype = {
|
|||
|
||||
this._monitorWebcompatReporterPref();
|
||||
this._monitorHTTPSOnlyPref();
|
||||
this._setupSearchDetection();
|
||||
|
||||
this._monitorGPCPref();
|
||||
|
||||
|
@ -3802,11 +3784,7 @@ BrowserGlue.prototype = {
|
|||
"resource://devtools/client/performance-new/popup/menu-button.sys.mjs"
|
||||
);
|
||||
if (!ProfilerMenuButton.isInNavbar()) {
|
||||
// The profiler menu button is not enabled. Turn it on now.
|
||||
const win = lazy.BrowserWindowTracker.getTopWindow();
|
||||
if (win && win.document) {
|
||||
ProfilerMenuButton.addToNavbar(win.document);
|
||||
}
|
||||
ProfilerMenuButton.addToNavbar();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,3 +9,677 @@
|
|||
$schema: moz://mozilla.org/schemas/glean/metrics/2-0-0
|
||||
$tags:
|
||||
- 'Firefox :: Messaging System'
|
||||
|
||||
messaging_system:
|
||||
event_context_parse_error:
|
||||
type: counter
|
||||
lifetime: ping
|
||||
description: |
|
||||
How often we failed to parse event_context as JSON.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_reason:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
The event_context's `reason`. Likely something like
|
||||
"welcome-window-closed" or "app-shut-down",.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_page:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
The event_context's `page`. Almost always "about:welcome".
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_source:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
The event_context's `source`. Likely something like "primary_button".
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_context:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
The stringified JSON of `event_context`.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_screen_family:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
A string identifier of the message family derived from the message id
|
||||
(e.g. MR_WELCOME_DEFAULT).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1867627
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
- nsauermann@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_screen_id:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
A string identifier of the message screen id
|
||||
(e.g. AW_MOBILE_DOWNLOAD).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1867627
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
- nsauermann@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_screen_initials:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
A string identifier of the message screen initials
|
||||
(e.g. 'EMAG' for EASY_SETUP, MOBILE_DOWNLOADS, AMO, GRATITUDE).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1867627
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
- nsauermann@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_screen_index:
|
||||
type: quantity
|
||||
unit: integer
|
||||
lifetime: ping
|
||||
description: |
|
||||
A number identifier of the screen index in a sequence of screens
|
||||
(e.g. 0 for first message).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
- nsauermann@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
message_id:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
A string identifier of the message in Activity Stream Router.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event:
|
||||
type: string
|
||||
description: >
|
||||
The type of event. Any user defined string
|
||||
(e.g. “IMPRESSION”, “CLICK_BUTTON”, "INDEXEDDB_OPEN_FAILED", “SESSION_END”)
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
ping_type:
|
||||
type: string
|
||||
description: >
|
||||
Type of event the ping is capturing.
|
||||
e.g. "cfr", "onboarding"
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
source:
|
||||
type: string
|
||||
description: >
|
||||
The source of the interaction described by the other metrics.
|
||||
e.g. "frecent_links", "newtab", "CFR"
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
client_id:
|
||||
type: uuid
|
||||
lifetime: ping
|
||||
description: |
|
||||
The client_id according to Telemetry.
|
||||
Might not always have a value due to policy around specific types of
|
||||
ping being sent. Value may be the canary client id
|
||||
`c0ffeec0-ffee-c0ff-eec0-ffeec0ffeec0`
|
||||
in pings near when the data upload pref is disabled (if Telemetry gets
|
||||
to go first), or between when a client_id has been removed and when it
|
||||
has been regenerated.
|
||||
Present only in some circumstances (see
|
||||
[bug 1484035]https://bugzilla.mozilla.org/show_bug.cgi?id=1484035)).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1755549
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1484035
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1755549
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
locale:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: >
|
||||
The locale as supplied to the messaging system by
|
||||
`Services.locale.appLocaleAsBCP47`.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
browser_session_id:
|
||||
type: uuid
|
||||
lifetime: ping
|
||||
# Disable yamllint for long lines.
|
||||
# yamllint disable
|
||||
description: >
|
||||
The Legacy Telemetry browser "session id".
|
||||
Identifies a specific period from application start to shutdown.
|
||||
See [the "main" ping docs](https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/data/main-ping.html)
|
||||
for details.
|
||||
# yamllint enable
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
impression_id:
|
||||
type: uuid
|
||||
lifetime: ping
|
||||
description: >
|
||||
The unique impression identifier for a specific client.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
bucket_id:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: >
|
||||
A name shared between multiple messages that may individually be too
|
||||
targetted.
|
||||
e.g. a message that gets shown on specific websites or a message asking
|
||||
about personal information.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
addon_version:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: >
|
||||
Used to hold the system addon's version,
|
||||
now is almost certainly an echo of the app's build id.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
unknown_key_count:
|
||||
type: counter
|
||||
description: |
|
||||
The sum of all unknown keys counted.
|
||||
Useful for testing.
|
||||
Can be removed after bug 1600008 is resolved.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- chutten@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
unknown_keys:
|
||||
type: labeled_counter
|
||||
description: |
|
||||
Ping keys supplied to the messaging system for which
|
||||
we did not have a corresponding metric mapped to how often they attempted
|
||||
to be recorded.
|
||||
You may have forgotten to define an appropriate metric in
|
||||
`browser/components/newtab/metrics.yaml`.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
glean_ping_for_ping_failures:
|
||||
type: counter
|
||||
description: |
|
||||
How often something went awry within
|
||||
`AboutWelcome.submitGleanPingForPing`, preventing ping submission.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
- chutten@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- metrics
|
||||
|
||||
invalid_nested_data:
|
||||
type: labeled_counter
|
||||
description: |
|
||||
We received a ping with non-scalar data on a field of this name.
|
||||
If this is existing pre-PingCentre-replacement data, you may need to
|
||||
augment the logic in
|
||||
`AboutWelcome.submitGleanPingForPing` like the other `handledKeys`.
|
||||
If this is for new, post-PingCentre-replacement data, you should
|
||||
probably prefer a flat structure.
|
||||
If you're unsure, please ask in
|
||||
[the #glean channel](https://chat.mozilla.org/#/room/#glean:mozilla.org).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
- chutten@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
|
||||
messaging_system.attribution:
|
||||
source:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's source, possibly derived from the utm parameter of the same
|
||||
name.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
medium:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's medium, possibly derived from the utm parameter of the same
|
||||
name.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
campaign:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's campaign, possibly derived from the utm parameter of the
|
||||
same name.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
content:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's content, possibly derived from the utm parameter of the
|
||||
same name.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
experiment:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's experiment key.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
variation:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's variation key.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
ua:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's ua key.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
dltoken:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
String representation of the dltoken identifying the particular
|
||||
installer used to install this Firefox.
|
||||
Likely a UUID, if present.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
msstoresignedin:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Either the string "true" or the string "false" to indicate whether the
|
||||
attributed install came from the Microsoft store and, if so, whether the
|
||||
user was signed in at the time.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1756209
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1756209
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
dlsource:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Mozilla-specific download "source" name. Could be something like
|
||||
"mozillaci" to identify that the installer came from
|
||||
`{archive|ftp}.mozilla.org`.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1819997
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1819997
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
unknown_keys:
|
||||
type: labeled_counter
|
||||
description: |
|
||||
Attribution keys supplied to the messaging system for which
|
||||
we did not have a corresponding metric, and the count of how
|
||||
often that happened.
|
||||
Either add this key to a list of known attribution keys in
|
||||
`AboutWelcomeTelemetry` to suppress or define an appropriate metric in
|
||||
`browser/components/newtab/metrics.yaml` to collect.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
|
|
@ -1365,6 +1365,45 @@ const BASE_MESSAGES = () => [
|
|||
id: "defaultBrowserCheck",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: "INFOBAR_DEFAULT_AND_PIN_87",
|
||||
groups: ["cfr"],
|
||||
content: {
|
||||
text: {
|
||||
string_id: "default-browser-notification-message",
|
||||
},
|
||||
type: "global",
|
||||
buttons: [
|
||||
{
|
||||
label: {
|
||||
string_id: "default-browser-notification-button",
|
||||
},
|
||||
action: {
|
||||
type: "PIN_AND_DEFAULT",
|
||||
},
|
||||
primary: true,
|
||||
accessKey: "P",
|
||||
},
|
||||
],
|
||||
category: "cfrFeatures",
|
||||
bucket_id: "INFOBAR_DEFAULT_AND_PIN_87",
|
||||
},
|
||||
trigger: {
|
||||
id: "defaultBrowserCheck",
|
||||
},
|
||||
template: "infobar",
|
||||
frequency: {
|
||||
custom: [
|
||||
{
|
||||
cap: 1,
|
||||
period: 3024000000,
|
||||
},
|
||||
],
|
||||
lifetime: 2,
|
||||
},
|
||||
targeting:
|
||||
"(firefoxVersion >= 138 && source == 'startup' && !isDefaultBrowser && !'browser.shell.checkDefaultBrowser'|preferenceValue && currentDate|date - 'browser.shell.userDisabledDefaultCheck'|preferenceValue * 1000 >= 604800000 && isMajorUpgrade != true && platformName != 'linux' && ((currentDate|date - profileAgeCreated) / 604800000) >= 5 && !activeNotifications && 'browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features'|preferenceValue && ((currentDate|date - profileAgeCreated) / 604800000) < 15",
|
||||
},
|
||||
];
|
||||
|
||||
const PREONBOARDING_MESSAGES = () => [
|
||||
|
|
|
@ -4,3 +4,17 @@
|
|||
|
||||
---
|
||||
$schema: moz://mozilla.org/schemas/glean/pings/2-0-0
|
||||
|
||||
messaging-system:
|
||||
description: |
|
||||
This is a ping representing single events triggered by the messaging system
|
||||
and captures some pings from About:Welcome, ASRouter, and other corners.
|
||||
include_client_id: false
|
||||
send_if_empty: false
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"use strict";
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
SearchUIUtils: "resource:///modules/SearchUIUtils.sys.mjs",
|
||||
SearchUIUtils: "moz-src:///browser/components/search/SearchUIUtils.sys.mjs",
|
||||
});
|
||||
|
||||
var { ExtensionError } = ExtensionUtils;
|
||||
|
|
|
@ -58,13 +58,14 @@
|
|||
"audio",
|
||||
"launcher",
|
||||
"bookmark",
|
||||
"page_action",
|
||||
"tab",
|
||||
"tools_menu"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"enum": ["browser_action", "page_action"],
|
||||
"enum": ["browser_action"],
|
||||
"max_manifest_version": 2
|
||||
},
|
||||
{
|
||||
|
|
|
@ -329,6 +329,35 @@ add_task(async function test_show_hide_pageAction() {
|
|||
});
|
||||
});
|
||||
|
||||
add_task(async function test_show_hide_pageAction_v3() {
|
||||
await testShowHideEvent({
|
||||
manifest_version: 3,
|
||||
id: "page-action@mochitest",
|
||||
menuCreateParams: {
|
||||
id: "page_action_item",
|
||||
title: "pageAction item",
|
||||
contexts: ["page_action"],
|
||||
},
|
||||
expectedShownEvent: {
|
||||
contexts: ["page_action", "all"],
|
||||
viewType: undefined,
|
||||
editable: false,
|
||||
},
|
||||
expectedShownEventWithPermissions: {
|
||||
contexts: ["page_action", "all"],
|
||||
viewType: undefined,
|
||||
editable: false,
|
||||
pageUrl: PAGE,
|
||||
},
|
||||
async doOpenMenu(extension) {
|
||||
await openActionContextMenu(extension, "page");
|
||||
},
|
||||
async doCloseMenu() {
|
||||
await closeActionContextMenu(null, "page");
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
add_task(async function test_show_hide_browserAction() {
|
||||
await testShowHideEvent({
|
||||
menuCreateParams: {
|
||||
|
|
|
@ -1732,680 +1732,6 @@ pocket:
|
|||
send_in_pings:
|
||||
- newtab
|
||||
|
||||
messaging_system:
|
||||
event_context_parse_error:
|
||||
type: counter
|
||||
lifetime: ping
|
||||
description: |
|
||||
How often we failed to parse event_context as JSON.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_reason:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
The event_context's `reason`. Likely something like
|
||||
"welcome-window-closed" or "app-shut-down",.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_page:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
The event_context's `page`. Almost always "about:welcome".
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_source:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
The event_context's `source`. Likely something like "primary_button".
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_context:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
The stringified JSON of `event_context`.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_screen_family:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
A string identifier of the message family derived from the message id
|
||||
(e.g. MR_WELCOME_DEFAULT).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1867627
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
- nsauermann@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_screen_id:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
A string identifier of the message screen id
|
||||
(e.g. AW_MOBILE_DOWNLOAD).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1867627
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
- nsauermann@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_screen_initials:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
A string identifier of the message screen initials
|
||||
(e.g. 'EMAG' for EASY_SETUP, MOBILE_DOWNLOADS, AMO, GRATITUDE).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1867627
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
- nsauermann@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event_screen_index:
|
||||
type: quantity
|
||||
unit: integer
|
||||
lifetime: ping
|
||||
description: |
|
||||
A number identifier of the screen index in a sequence of screens
|
||||
(e.g. 0 for first message).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
- nsauermann@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
message_id:
|
||||
type: text
|
||||
lifetime: ping
|
||||
description: |
|
||||
A string identifier of the message in Activity Stream Router.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- web_activity
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
event:
|
||||
type: string
|
||||
description: >
|
||||
The type of event. Any user defined string
|
||||
(e.g. “IMPRESSION”, “CLICK_BUTTON”, "INDEXEDDB_OPEN_FAILED", “SESSION_END”)
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
ping_type:
|
||||
type: string
|
||||
description: >
|
||||
Type of event the ping is capturing.
|
||||
e.g. "cfr", "onboarding"
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
source:
|
||||
type: string
|
||||
description: >
|
||||
The source of the interaction described by the other metrics.
|
||||
e.g. "frecent_links", "newtab", "CFR"
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
client_id:
|
||||
type: uuid
|
||||
lifetime: ping
|
||||
description: |
|
||||
The client_id according to Telemetry.
|
||||
Might not always have a value due to policy around specific types of
|
||||
ping being sent. Value may be the canary client id
|
||||
`c0ffeec0-ffee-c0ff-eec0-ffeec0ffeec0`
|
||||
in pings near when the data upload pref is disabled (if Telemetry gets
|
||||
to go first), or between when a client_id has been removed and when it
|
||||
has been regenerated.
|
||||
Present only in some circumstances (see
|
||||
[bug 1484035]https://bugzilla.mozilla.org/show_bug.cgi?id=1484035)).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1755549
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1484035
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1755549
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
locale:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: >
|
||||
The locale as supplied to the messaging system by
|
||||
`Services.locale.appLocaleAsBCP47`.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
browser_session_id:
|
||||
type: uuid
|
||||
lifetime: ping
|
||||
# Disable yamllint for long lines.
|
||||
# yamllint disable
|
||||
description: >
|
||||
The Legacy Telemetry browser "session id".
|
||||
Identifies a specific period from application start to shutdown.
|
||||
See [the "main" ping docs](https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/data/main-ping.html)
|
||||
for details.
|
||||
# yamllint enable
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
impression_id:
|
||||
type: uuid
|
||||
lifetime: ping
|
||||
description: >
|
||||
The unique impression identifier for a specific client.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
bucket_id:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: >
|
||||
A name shared between multiple messages that may individually be too
|
||||
targetted.
|
||||
e.g. a message that gets shown on specific websites or a message asking
|
||||
about personal information.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
addon_version:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: >
|
||||
Used to hold the system addon's version,
|
||||
now is almost certainly an echo of the app's build id.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
unknown_key_count:
|
||||
type: counter
|
||||
description: |
|
||||
The sum of all unknown keys counted.
|
||||
Useful for testing.
|
||||
Can be removed after bug 1600008 is resolved.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- chutten@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
unknown_keys:
|
||||
type: labeled_counter
|
||||
description: |
|
||||
Ping keys supplied to the messaging system for which
|
||||
we did not have a corresponding metric mapped to how often they attempted
|
||||
to be recorded.
|
||||
You may have forgotten to define an appropriate metric in
|
||||
`browser/components/newtab/metrics.yaml`.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
glean_ping_for_ping_failures:
|
||||
type: counter
|
||||
description: |
|
||||
How often something went awry within
|
||||
`AboutWelcome.submitGleanPingForPing`, preventing ping submission.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
- chutten@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- metrics
|
||||
|
||||
invalid_nested_data:
|
||||
type: labeled_counter
|
||||
description: |
|
||||
We received a ping with non-scalar data on a field of this name.
|
||||
If this is existing pre-PingCentre-replacement data, you may need to
|
||||
augment the logic in
|
||||
`AboutWelcome.submitGleanPingForPing` like the other `handledKeys`.
|
||||
If this is for new, post-PingCentre-replacement data, you should
|
||||
probably prefer a flat structure.
|
||||
If you're unsure, please ask in
|
||||
[the #glean channel](https://chat.mozilla.org/#/room/#glean:mozilla.org).
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
- chutten@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
|
||||
messaging_system.attribution:
|
||||
source:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's source, possibly derived from the utm parameter of the same
|
||||
name.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
medium:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's medium, possibly derived from the utm parameter of the same
|
||||
name.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
campaign:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's campaign, possibly derived from the utm parameter of the
|
||||
same name.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
content:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's content, possibly derived from the utm parameter of the
|
||||
same name.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
experiment:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's experiment key.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
variation:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's variation key.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
ua:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Attribution's ua key.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
dltoken:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
String representation of the dltoken identifying the particular
|
||||
installer used to install this Firefox.
|
||||
Likely a UUID, if present.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
msstoresignedin:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Either the string "true" or the string "false" to indicate whether the
|
||||
attributed install came from the Microsoft store and, if so, whether the
|
||||
user was signed in at the time.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1756209
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1756209
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
dlsource:
|
||||
type: string
|
||||
lifetime: ping
|
||||
description: |
|
||||
Mozilla-specific download "source" name. Could be something like
|
||||
"mozillaci" to identify that the installer came from
|
||||
`{archive|ftp}.mozilla.org`.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1819997
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1819997
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
unknown_keys:
|
||||
type: labeled_counter
|
||||
description: |
|
||||
Attribution keys supplied to the messaging system for which
|
||||
we did not have a corresponding metric, and the count of how
|
||||
often that happened.
|
||||
Either add this key to a list of known attribution keys in
|
||||
`AboutWelcomeTelemetry` to suppress or define an appropriate metric in
|
||||
`browser/components/newtab/metrics.yaml` to collect.
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_sensitivity:
|
||||
- technical
|
||||
notification_emails:
|
||||
- dmosedale@mozilla.com
|
||||
- pmcmanis@mozilla.com
|
||||
expires: never
|
||||
send_in_pings:
|
||||
- messaging-system
|
||||
|
||||
top_sites: # Replacement for PingCentre "topsites-impression|click" pings.
|
||||
ping_type:
|
||||
type: string
|
||||
|
|
|
@ -30,20 +30,6 @@ newtab:
|
|||
- anicholson@mozilla.com
|
||||
- najiang@mozilla.com
|
||||
|
||||
messaging-system:
|
||||
description: |
|
||||
This is a ping representing single events triggered by the messaging system
|
||||
and captures some pings from About:Welcome, ASRouter, and other corners.
|
||||
include_client_id: false
|
||||
send_if_empty: false
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1825863
|
||||
notification_emails:
|
||||
- pmcmanis@mozilla.com
|
||||
- dmosedale@mozilla.com
|
||||
|
||||
top-sites:
|
||||
description: |
|
||||
A ping representing a single event happening with or to a TopSite.
|
||||
|
|
|
@ -21,7 +21,7 @@ add_task(async function add_keyword() {
|
|||
await withBookmarksDialog(
|
||||
false,
|
||||
function () {
|
||||
AddKeywordForSearchField();
|
||||
gContextMenu.addKeywordForSearchField();
|
||||
contentAreaContextMenu.hidePopup();
|
||||
},
|
||||
async function (dialogWin) {
|
||||
|
@ -113,7 +113,7 @@ add_task(async function reopen_same_field() {
|
|||
await withBookmarksDialog(
|
||||
true,
|
||||
function () {
|
||||
AddKeywordForSearchField();
|
||||
gContextMenu.addKeywordForSearchField();
|
||||
contentAreaContextMenu.hidePopup();
|
||||
},
|
||||
async function (dialogWin) {
|
||||
|
@ -159,7 +159,7 @@ add_task(async function open_other_field() {
|
|||
await withBookmarksDialog(
|
||||
true,
|
||||
function () {
|
||||
AddKeywordForSearchField();
|
||||
gContextMenu.addKeywordForSearchField();
|
||||
contentAreaContextMenu.hidePopup();
|
||||
},
|
||||
function (dialogWin) {
|
||||
|
|
|
@ -49,7 +49,7 @@ ChromeUtils.defineESModuleGetters(this, {
|
|||
pktApi: "chrome://pocket/content/pktApi.sys.mjs",
|
||||
pktTelemetry: "chrome://pocket/content/pktTelemetry.sys.mjs",
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
ReaderMode: "resource://gre/modules/ReaderMode.sys.mjs",
|
||||
ReaderMode: "moz-src:///toolkit/components/reader/ReaderMode.sys.mjs",
|
||||
SaveToPocket: "chrome://pocket/content/SaveToPocket.sys.mjs",
|
||||
});
|
||||
|
||||
|
|
|
@ -3,9 +3,6 @@
|
|||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
browser.jar:
|
||||
content/browser/preferences/dialogs/addEngine.xhtml
|
||||
content/browser/preferences/dialogs/addEngine.js
|
||||
content/browser/preferences/dialogs/addEngine.css
|
||||
content/browser/preferences/dialogs/applicationManager.xhtml
|
||||
content/browser/preferences/dialogs/applicationManager.js
|
||||
content/browser/preferences/dialogs/blocklists.xhtml
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
<!-- Links below are only used for search-l10n-ids into subdialogs -->
|
||||
<link rel="localization" href="browser/aboutDialog.ftl"/>
|
||||
<link rel="localization" href="browser/genai.ftl"/>
|
||||
<link rel="localization" href="browser/preferences/addEngine.ftl"/>
|
||||
<link rel="localization" href="browser/search.ftl"/>
|
||||
<link rel="localization" href="browser/preferences/blocklists.ftl"/>
|
||||
<link rel="localization" href="browser/preferences/clearSiteData.ftl"/>
|
||||
<link rel="localization" href="browser/preferences/colors.ftl"/>
|
||||
|
|
|
@ -180,7 +180,7 @@
|
|||
search-l10n-ids="
|
||||
add-engine-button,
|
||||
add-engine-name,
|
||||
add-engine-alias,
|
||||
add-engine-keyword,
|
||||
add-engine-url,
|
||||
add-engine-dialog.buttonlabelaccept,
|
||||
"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
SearchUIUtils: "resource:///modules/SearchUIUtils.sys.mjs",
|
||||
SearchUIUtils: "moz-src:///browser/components/search/SearchUIUtils.sys.mjs",
|
||||
SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
|
||||
CustomizableUI: "resource:///modules/CustomizableUI.sys.mjs",
|
||||
});
|
||||
|
@ -1022,10 +1022,9 @@ class EngineView {
|
|||
Services.search.removeEngine(this.selectedEngine.originalEngine);
|
||||
break;
|
||||
case "addEngineButton":
|
||||
gSubDialog.open(
|
||||
"chrome://browser/content/preferences/dialogs/addEngine.xhtml",
|
||||
{ features: "resizable=no, modal=yes" }
|
||||
);
|
||||
gSubDialog.open("chrome://browser/content/search/addEngine.xhtml", {
|
||||
features: "resizable=no, modal=yes",
|
||||
});
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -200,11 +200,6 @@ export class ProfilesParent extends JSWindowActorParent {
|
|||
} else if (source === "about:deleteprofile") {
|
||||
Glean.profilesDelete.confirm.record();
|
||||
}
|
||||
let profiles = await SelectableProfileService.getAllProfiles();
|
||||
|
||||
if (profiles.length <= 1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Notify windows that a quit has been requested.
|
||||
let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].createInstance(
|
||||
|
|
|
@ -926,7 +926,7 @@ class SelectableProfileServiceClass extends EventEmitter {
|
|||
*
|
||||
* @param {boolean} shouldShow Whether or not we should show the profile selector
|
||||
*/
|
||||
async showProfileSelectorWindow(shouldShow) {
|
||||
async setShowProfileSelectorWindow(shouldShow) {
|
||||
this.groupToolkitProfile.showProfileSelector = shouldShow;
|
||||
await this.#attemptFlushProfileService();
|
||||
}
|
||||
|
@ -1128,7 +1128,7 @@ class SelectableProfileServiceClass extends EventEmitter {
|
|||
this.#currentProfile = await this.#createProfile(path);
|
||||
|
||||
// And also set the profile selector window to show at startup (bug 1933911).
|
||||
this.showProfileSelectorWindow(true);
|
||||
this.setShowProfileSelectorWindow(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1217,20 +1217,17 @@ class SelectableProfileServiceClass extends EventEmitter {
|
|||
this.#notifyTask.arm();
|
||||
}
|
||||
|
||||
/**
|
||||
* Close all active instances running the current profile
|
||||
*/
|
||||
closeActiveProfileInstances() {}
|
||||
|
||||
/**
|
||||
* Schedule deletion of the current SelectableProfile as a background task.
|
||||
*/
|
||||
async deleteCurrentProfile() {
|
||||
let profiles = await this.getAllProfiles();
|
||||
|
||||
// Refuse to delete the last profile.
|
||||
if (profiles.length <= 1) {
|
||||
return;
|
||||
await this.createNewProfile();
|
||||
await this.setShowProfileSelectorWindow(false);
|
||||
|
||||
profiles = await this.getAllProfiles();
|
||||
}
|
||||
|
||||
// TODO: (Bug 1923980) How should we choose the new default profile?
|
||||
|
|
|
@ -95,7 +95,7 @@ export class ProfileSelector extends MozLitElement {
|
|||
this.profiles = await this.selectableProfileService.getAllProfiles();
|
||||
|
||||
if (!this.profiles.length) {
|
||||
this.selectableProfileService.showProfileSelectorWindow(false);
|
||||
this.selectableProfileService.setShowProfileSelectorWindow(false);
|
||||
}
|
||||
|
||||
this.initialized = true;
|
||||
|
@ -112,7 +112,7 @@ export class ProfileSelector extends MozLitElement {
|
|||
handleCheckboxToggle() {
|
||||
let state = this.checkbox.checked ? "enabled" : "disabled";
|
||||
Glean.profilesSelectorWindow.showAtStartup.record({ value: state });
|
||||
this.selectableProfileService.showProfileSelectorWindow(
|
||||
this.selectableProfileService.setShowProfileSelectorWindow(
|
||||
this.checkbox.checked
|
||||
);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
https://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
add_setup(initSelectableProfileService);
|
||||
|
||||
add_task(async function test_delete_last_profile() {
|
||||
// mock() returns an object with a fake `runw` method that, when
|
||||
// called, records its arguments.
|
||||
let input = [];
|
||||
let mock = () => {
|
||||
return {
|
||||
runw: (...args) => {
|
||||
input = args;
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
const SelectableProfileService = getSelectableProfileService();
|
||||
SelectableProfileService.getExecutableProcess = mock;
|
||||
|
||||
let profiles = await SelectableProfileService.getAllProfiles();
|
||||
Assert.equal(profiles.length, 1, "Only 1 profile exists before deleting");
|
||||
|
||||
let profile = profiles[0];
|
||||
Assert.equal(
|
||||
SelectableProfileService.groupToolkitProfile.rootDir.path,
|
||||
profile.path,
|
||||
"The group toolkit profile path should be the path of the original profile"
|
||||
);
|
||||
|
||||
await SelectableProfileService.setShowProfileSelectorWindow(true);
|
||||
Assert.ok(
|
||||
SelectableProfileService.groupToolkitProfile.showProfileSelector,
|
||||
"Show profile selector is enabled"
|
||||
);
|
||||
|
||||
await SelectableProfileService.deleteCurrentProfile();
|
||||
await updateNotified();
|
||||
|
||||
profiles = await SelectableProfileService.getAllProfiles();
|
||||
Assert.equal(profiles.length, 1, "Only 1 profile exists after deleting");
|
||||
|
||||
profile = profiles[0];
|
||||
|
||||
let expectedRunwArgs;
|
||||
if (Services.appinfo.OS == "Darwin") {
|
||||
expectedRunwArgs = [
|
||||
"-foreground",
|
||||
"--profile",
|
||||
profile.path,
|
||||
"-url",
|
||||
"about:newprofile",
|
||||
];
|
||||
} else {
|
||||
expectedRunwArgs = ["--profile", profile.path, "-url", "about:newprofile"];
|
||||
}
|
||||
Assert.deepEqual(expectedRunwArgs, input[1], "Expected runw arguments");
|
||||
|
||||
Assert.equal(
|
||||
SelectableProfileService.groupToolkitProfile.rootDir.path,
|
||||
profile.path,
|
||||
"The group toolkit profile path should be the path of the newly created profile"
|
||||
);
|
||||
|
||||
Assert.ok(
|
||||
!SelectableProfileService.groupToolkitProfile.showProfileSelector,
|
||||
"Show profile selector is disabled"
|
||||
);
|
||||
});
|
|
@ -6,6 +6,8 @@ prefs = [
|
|||
"browser.profiles.enabled=true",
|
||||
]
|
||||
|
||||
["test_delete_last_profile.js"]
|
||||
|
||||
["test_fail_recover_storeID.js"]
|
||||
|
||||
["test_recover_storeID.js"]
|
||||
|
|
|
@ -6,7 +6,8 @@ const lazy = {};
|
|||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
UrlbarSearchUtils: "resource:///modules/UrlbarSearchUtils.sys.mjs",
|
||||
});
|
||||
|
||||
|
|
|
@ -5,9 +5,10 @@
|
|||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
OpenSearchManager: "resource:///modules/OpenSearchManager.sys.mjs",
|
||||
OpenSearchManager:
|
||||
"moz-src:///browser/components/search/OpenSearchManager.sys.mjs",
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
SearchUIUtils: "resource:///modules/SearchUIUtils.sys.mjs",
|
||||
SearchUIUtils: "moz-src:///browser/components/search/SearchUIUtils.sys.mjs",
|
||||
});
|
||||
|
||||
/**
|
||||
|
|
|
@ -5,15 +5,18 @@
|
|||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserSearchTelemetry:
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs",
|
||||
Region: "resource://gre/modules/Region.sys.mjs",
|
||||
RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
|
||||
SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
|
||||
SERPCategorization: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPCategorizationRecorder: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPCategorization:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
SERPCategorizationRecorder:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
SERPCategorizationEventScheduler:
|
||||
"resource:///modules/SERPCategorization.sys.mjs",
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
// Exported for tests.
|
||||
|
|
|
@ -15,7 +15,8 @@ ChromeUtils.defineLazyGetter(lazy, "SearchUIUtilsL10n", () => {
|
|||
});
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserSearchTelemetry:
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs",
|
||||
BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs",
|
||||
CustomizableUI: "resource:///modules/CustomizableUI.sys.mjs",
|
||||
|
|
|
@ -2,23 +2,45 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/* import-globals-from ../main.js */
|
||||
|
||||
let gAddEngineDialog = {
|
||||
_form: null,
|
||||
_name: null,
|
||||
_alias: null,
|
||||
loadedResolvers: Promise.withResolvers(),
|
||||
|
||||
onLoad() {
|
||||
document.mozSubdialogReady = this.init();
|
||||
try {
|
||||
this.init();
|
||||
} finally {
|
||||
this.loadedResolvers.resolve();
|
||||
}
|
||||
},
|
||||
|
||||
async init() {
|
||||
init() {
|
||||
this._dialog = document.querySelector("dialog");
|
||||
this._form = document.getElementById("addEngineForm");
|
||||
this._name = document.getElementById("engineName");
|
||||
this._alias = document.getElementById("engineAlias");
|
||||
|
||||
// These arguments only exist if this dialog was opened via
|
||||
// "Add Search Engine" in the context menu.
|
||||
if (window.arguments?.[0]) {
|
||||
let { uri, formData, charset, method, icon } = window.arguments[0];
|
||||
this._formData = formData;
|
||||
this._charset = charset;
|
||||
this._method = method;
|
||||
this._icon = icon;
|
||||
this._uri = uri.spec;
|
||||
|
||||
this._name.value = uri.host;
|
||||
this.onFormInput();
|
||||
|
||||
document.getElementById("engineUrlLabel").remove();
|
||||
document.getElementById("engineUrl").remove();
|
||||
document.getElementById("suggestUrlLabel").remove();
|
||||
document.getElementById("suggestUrl").remove();
|
||||
}
|
||||
|
||||
this._name.addEventListener("input", this.onNameInput.bind(this));
|
||||
this._alias.addEventListener("input", this.onAliasInput.bind(this));
|
||||
this._form.addEventListener("input", this.onFormInput.bind(this));
|
||||
|
@ -26,22 +48,29 @@ let gAddEngineDialog = {
|
|||
document.addEventListener("dialogaccept", this.onAddEngine.bind(this));
|
||||
},
|
||||
|
||||
async onAddEngine() {
|
||||
let url = document
|
||||
.getElementById("engineUrl")
|
||||
.value.replace(/%s/, "{searchTerms}");
|
||||
onAddEngine() {
|
||||
let url =
|
||||
this._uri ||
|
||||
document.getElementById("engineUrl").value.replace(/%s/, "{searchTerms}");
|
||||
|
||||
let suggestUrl = document
|
||||
.getElementById("suggestUrl")
|
||||
.value.replace(/%s/, "{searchTerms}");
|
||||
await Services.search.addUserEngine({
|
||||
name: this._name.value,
|
||||
?.value.replace(/%s/, "{searchTerms}");
|
||||
|
||||
Services.search.addUserEngine({
|
||||
url,
|
||||
name: this._name.value,
|
||||
alias: this._alias.value,
|
||||
// The values below may be undefined.
|
||||
formData: this._formData,
|
||||
charset: this._charset,
|
||||
method: this._method,
|
||||
icon: this._icon,
|
||||
suggestUrl,
|
||||
});
|
||||
},
|
||||
|
||||
async onNameInput() {
|
||||
onNameInput() {
|
||||
if (this._name.value) {
|
||||
let engine = Services.search.getEngineByName(this._name.value);
|
||||
let validity = engine
|
||||
|
@ -56,13 +85,13 @@ let gAddEngineDialog = {
|
|||
if (this._alias.value) {
|
||||
let engine = await Services.search.getEngineByAlias(this._alias.value);
|
||||
if (engine) {
|
||||
engine = document.getElementById("engineAliasExists").textContent;
|
||||
validity = document.getElementById("engineAliasExists").textContent;
|
||||
}
|
||||
}
|
||||
this._alias.setCustomValidity(validity);
|
||||
},
|
||||
|
||||
async onFormInput() {
|
||||
onFormInput() {
|
||||
this._dialog.setAttribute(
|
||||
"buttondisabledaccept",
|
||||
!this._form.checkValidity()
|
||||
|
@ -70,4 +99,6 @@ let gAddEngineDialog = {
|
|||
},
|
||||
};
|
||||
|
||||
document.mozSubdialogReady = gAddEngineDialog.loadedResolvers.promise;
|
||||
|
||||
window.addEventListener("load", () => gAddEngineDialog.onLoad());
|
|
@ -8,7 +8,7 @@
|
|||
<window
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
data-l10n-id="add-engine-window2"
|
||||
data-l10n-id="add-engine-window"
|
||||
data-l10n-attrs="title, style"
|
||||
persist="width height"
|
||||
>
|
||||
|
@ -22,20 +22,14 @@
|
|||
<html:link rel="stylesheet" href="chrome://global/skin/global.css" />
|
||||
<html:link
|
||||
rel="stylesheet"
|
||||
href="chrome://browser/content/preferences/dialogs/addEngine.css"
|
||||
/>
|
||||
<html:link
|
||||
rel="stylesheet"
|
||||
href="chrome://browser/skin/preferences/preferences.css"
|
||||
href="chrome://browser/content/search/addEngine.css"
|
||||
/>
|
||||
|
||||
<html:link rel="localization" href="browser/preferences/addEngine.ftl" />
|
||||
<html:link rel="localization" href="preview/enUS-searchFeatures.ftl" />
|
||||
<html:link rel="localization" href="browser/search.ftl" />
|
||||
</linkset>
|
||||
|
||||
<script src="chrome://browser/content/preferences/dialogs/addEngine.js" />
|
||||
<script src="chrome://global/content/globalOverlay.js" />
|
||||
<script src="chrome://browser/content/utilityOverlay.js" />
|
||||
<script src="chrome://browser/content/search/addEngine.js" />
|
||||
|
||||
<separator class="thin" />
|
||||
|
||||
|
@ -64,7 +58,7 @@
|
|||
id="engineUrl"
|
||||
type="url"
|
||||
required="required"
|
||||
pattern=".*%s.*"
|
||||
pattern="https?:.*%s.*"
|
||||
/>
|
||||
</hbox>
|
||||
|
||||
|
@ -74,18 +68,18 @@
|
|||
data-l10n-id="add-engine-suggest-url"
|
||||
/>
|
||||
<hbox>
|
||||
<html:input id="suggestUrl" type="url" pattern=".*%s.*" />
|
||||
<html:input id="suggestUrl" type="url" pattern="https?:.*%s.*" />
|
||||
</hbox>
|
||||
|
||||
<html:span
|
||||
id="engineAliasExists"
|
||||
hidden="hidden"
|
||||
data-l10n-id="engine-alias-exists"
|
||||
data-l10n-id="engine-keyword-exists"
|
||||
/>
|
||||
<html:label
|
||||
id="engineAliasLabel"
|
||||
for="engineAlias"
|
||||
data-l10n-id="add-engine-alias"
|
||||
data-l10n-id="add-engine-keyword"
|
||||
/>
|
||||
<hbox>
|
||||
<html:input id="engineAlias" type="text" />
|
|
@ -8,9 +8,9 @@
|
|||
{
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
BrowserSearchTelemetry:
|
||||
"resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs",
|
||||
SearchOneOffs: "resource:///modules/SearchOneOffs.sys.mjs",
|
||||
SearchOneOffs: "moz-src:///browser/components/search/SearchOneOffs.sys.mjs",
|
||||
});
|
||||
|
||||
/**
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
BrowserSearchTelemetry:
|
||||
"resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs",
|
||||
FormHistory: "resource://gre/modules/FormHistory.sys.mjs",
|
||||
SearchSuggestionController:
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
browser.jar:
|
||||
content/browser/search/addEngine.css (content/addEngine.css)
|
||||
content/browser/search/addEngine.js (content/addEngine.js)
|
||||
content/browser/search/addEngine.xhtml (content/addEngine.xhtml)
|
||||
content/browser/search/autocomplete-popup.js (content/autocomplete-popup.js)
|
||||
content/browser/search/searchbar.js (content/searchbar.js)
|
||||
content/browser/contentSearchUI.js (content/contentSearchUI.js)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
EXTRA_JS_MODULES += [
|
||||
MOZ_SRC_FILES += [
|
||||
"BrowserSearchTelemetry.sys.mjs",
|
||||
"OpenSearchManager.sys.mjs",
|
||||
"SearchOneOffs.sys.mjs",
|
||||
|
|
|
@ -6,6 +6,7 @@ support-files = [
|
|||
"discovery.html",
|
||||
"head.js",
|
||||
"opensearch.html",
|
||||
"test_windows1252.html",
|
||||
"test.html",
|
||||
"testEngine.xml",
|
||||
"testEngine_diacritics.xml",
|
||||
|
@ -20,6 +21,9 @@ support-files = ["test.html", "discovery.html", "426329.xml"]
|
|||
|
||||
["browser_addKeywordSearch.js"]
|
||||
|
||||
["browser_addSearchEngineFromForm.js"]
|
||||
support-files = ["test.html", "test_windows1252.html"]
|
||||
|
||||
["browser_contentContextMenu.js"]
|
||||
support-files = ["browser_contentContextMenu.xhtml"]
|
||||
|
||||
|
|
|
@ -0,0 +1,202 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
https://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
const TESTS = [
|
||||
{
|
||||
action: "/search",
|
||||
method: "GET",
|
||||
charset: "UTF-8",
|
||||
fields: [
|
||||
{ name: "q", value: "Some initial value", main: true },
|
||||
{ name: "utf8✓", value: "✓", hidden: true },
|
||||
],
|
||||
submission: "kitten",
|
||||
expected: "https://example.org/search?q=kitten&utf8%E2%9C%93=%E2%9C%93",
|
||||
},
|
||||
{
|
||||
action: "/search",
|
||||
method: "POST",
|
||||
charset: "UTF-8",
|
||||
fields: [
|
||||
{ name: "q", value: "Some initial value", main: true },
|
||||
{ name: "utf8✓", value: "✓", hidden: true },
|
||||
],
|
||||
submission: "kitten",
|
||||
expected: "https://example.org/search",
|
||||
expectedPost: "q=kitten&utf8%E2%9C%93=%E2%9C%93",
|
||||
},
|
||||
{
|
||||
action: "/search",
|
||||
method: "GET",
|
||||
charset: "windows-1252",
|
||||
fields: [
|
||||
{ name: "q", main: true },
|
||||
{ name: "cb", checked: true, value: "true", type: "checkbox" },
|
||||
{ name: "cb2", checked: false, value: "true", type: "checkbox" },
|
||||
],
|
||||
submission: "caff\u00E8+",
|
||||
expected: "https://example.org/search?q=caff%E8%2B&cb=true",
|
||||
},
|
||||
{
|
||||
action: "/search",
|
||||
method: "POST",
|
||||
charset: "windows-1252",
|
||||
fields: [
|
||||
{ name: "q", main: true },
|
||||
{ name: "foo", value: "bar" },
|
||||
],
|
||||
submission: "caff\u00E8+",
|
||||
expected: "https://example.org/search",
|
||||
expectedPost: "q=caff%E8%2B&foo=bar",
|
||||
},
|
||||
];
|
||||
|
||||
const URL_UTF_8 =
|
||||
"https://example.org/browser/browser/components/search/test/browser/test.html";
|
||||
const URL_WINDOWS1252 =
|
||||
"https://example.org/browser/browser/components/search/test/browser/test_windows1252.html";
|
||||
|
||||
add_setup(async function () {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [["browser.urlbar.update2.engineAliasRefresh", true]],
|
||||
});
|
||||
});
|
||||
|
||||
async function addEngine(browser, selector, name, alias) {
|
||||
let contextMenu = document.getElementById("contentAreaContextMenu");
|
||||
let addEngineItem = document.getElementById("context-add-engine");
|
||||
|
||||
let contextMenuPromise = BrowserTestUtils.waitForEvent(
|
||||
contextMenu,
|
||||
"popupshown"
|
||||
);
|
||||
info("Opening context menu.");
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter(
|
||||
selector,
|
||||
{ type: "contextmenu", button: 2 },
|
||||
browser
|
||||
);
|
||||
await contextMenuPromise;
|
||||
let dialogLoaded = TestUtils.topicObserved("subdialog-loaded");
|
||||
info("Clicking add engine.");
|
||||
contextMenu.activateItem(addEngineItem);
|
||||
let [dialogWin] = await dialogLoaded;
|
||||
await window.gDialogBox.dialog._dialogReady;
|
||||
info("Dialog opened.");
|
||||
|
||||
fillTextField("engineName", name, dialogWin);
|
||||
fillTextField("engineAlias", alias, dialogWin);
|
||||
|
||||
info("Saving engine.");
|
||||
let promiseAdded = SearchTestUtils.promiseSearchNotification(
|
||||
SearchUtils.MODIFIED_TYPE.ADDED,
|
||||
SearchUtils.TOPIC_ENGINE_MODIFIED
|
||||
);
|
||||
EventUtils.synthesizeKey("VK_RETURN", {}, dialogWin);
|
||||
await window.gDialogBox.dialog._closingPromise;
|
||||
await promiseAdded;
|
||||
return Services.search.getEngineByName(name);
|
||||
}
|
||||
|
||||
async function createForm({ action, method, fields }) {
|
||||
let doc = content.document;
|
||||
doc.querySelector("form")?.remove();
|
||||
let form = doc.createElement("form");
|
||||
form.method = method;
|
||||
form.action = action;
|
||||
|
||||
for (let fieldInfo of fields) {
|
||||
let input = doc.createElement("input");
|
||||
input.value = fieldInfo.value ?? "";
|
||||
input.type = fieldInfo.type ?? "text";
|
||||
|
||||
if (fieldInfo.checked) {
|
||||
input.checked = "true";
|
||||
}
|
||||
|
||||
input.name = fieldInfo.name;
|
||||
if (fieldInfo.main) {
|
||||
input.id = "mainInput";
|
||||
}
|
||||
if (fieldInfo.hidden) {
|
||||
input.hidden = true;
|
||||
}
|
||||
form.appendChild(input);
|
||||
}
|
||||
|
||||
doc.body.appendChild(form);
|
||||
}
|
||||
|
||||
async function navigateToCharset(charset) {
|
||||
if (charset.toUpperCase() == "UTF-8") {
|
||||
let browserLoadedPromise = BrowserTestUtils.browserLoaded(
|
||||
gBrowser,
|
||||
false,
|
||||
URL_UTF_8
|
||||
);
|
||||
BrowserTestUtils.startLoadingURIString(gBrowser, URL_UTF_8);
|
||||
await browserLoadedPromise;
|
||||
} else if (charset.toLowerCase() == "windows-1252") {
|
||||
let browserLoadedPromise = BrowserTestUtils.browserLoaded(
|
||||
gBrowser,
|
||||
false,
|
||||
URL_WINDOWS1252
|
||||
);
|
||||
BrowserTestUtils.startLoadingURIString(gBrowser, URL_WINDOWS1252);
|
||||
await browserLoadedPromise;
|
||||
} else {
|
||||
throw new Error();
|
||||
}
|
||||
}
|
||||
|
||||
add_task(async function () {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
let browser = tab.linkedBrowser;
|
||||
|
||||
for (let args of TESTS) {
|
||||
await navigateToCharset(args.charset);
|
||||
await SpecialPowers.spawn(browser, [args], createForm);
|
||||
let engine = await addEngine(browser, "#mainInput", "My Engine", "alias");
|
||||
Assert.ok(!!engine, "Engine was installed.");
|
||||
Assert.equal(
|
||||
engine.id,
|
||||
(await Services.search.getEngineByAlias("alias"))?.id,
|
||||
"Engine has correct alias."
|
||||
);
|
||||
|
||||
Assert.equal(engine.wrappedJSObject.queryCharset, args.charset);
|
||||
let submission = engine.getSubmission(args.submission);
|
||||
Assert.equal(
|
||||
submission.uri.spec,
|
||||
args.expected,
|
||||
"Submission URI is correct"
|
||||
);
|
||||
Assert.equal(
|
||||
decodePostData(submission.postData, args.charset),
|
||||
args.expectedPost,
|
||||
"Submission post data is correct."
|
||||
);
|
||||
|
||||
await Services.search.removeEngine(engine);
|
||||
}
|
||||
|
||||
// Let the dialog fully close.
|
||||
await new Promise(r => setTimeout(r));
|
||||
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
});
|
||||
|
||||
function decodePostData(postData, charset) {
|
||||
if (!postData) {
|
||||
return undefined;
|
||||
}
|
||||
const binaryStream = Cc["@mozilla.org/binaryinputstream;1"].createInstance(
|
||||
Ci.nsIBinaryInputStream
|
||||
);
|
||||
binaryStream.setInputStream(postData);
|
||||
const available = binaryStream.available();
|
||||
const buffer = new ArrayBuffer(available);
|
||||
binaryStream.readArrayBuffer(available, buffer);
|
||||
return new TextDecoder(charset).decode(buffer);
|
||||
}
|
|
@ -4,7 +4,8 @@
|
|||
/* eslint-disable mozilla/no-arbitrary-setTimeout */
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
OpenSearchManager: "resource:///modules/OpenSearchManager.sys.mjs",
|
||||
OpenSearchManager:
|
||||
"moz-src:///browser/components/search/OpenSearchManager.sys.mjs",
|
||||
});
|
||||
|
||||
// Bug 1588193 - BrowserTestUtils.waitForContentEvent now resolves slightly
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
// a limited number of add-engine items will be shown in the searchbar.
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
OpenSearchManager: "resource:///modules/OpenSearchManager.sys.mjs",
|
||||
OpenSearchManager:
|
||||
"moz-src:///browser/components/search/OpenSearchManager.sys.mjs",
|
||||
});
|
||||
|
||||
const searchPopup = document.getElementById("PopupSearchAutoComplete");
|
||||
|
|
|
@ -131,3 +131,25 @@ function clearSearchbarHistory() {
|
|||
registerCleanupFunction(async () => {
|
||||
await PlacesUtils.history.clear();
|
||||
});
|
||||
|
||||
/**
|
||||
* Fills a text field ensuring to cause expected edit events.
|
||||
*
|
||||
* @param {string} id
|
||||
* id of the text field
|
||||
* @param {string} text
|
||||
* text to fill in
|
||||
* @param {object} win
|
||||
* dialog window
|
||||
*/
|
||||
function fillTextField(id, text, win) {
|
||||
let elt = win.document.getElementById(id);
|
||||
elt.focus();
|
||||
elt.select();
|
||||
EventUtils.synthesizeKey("a", { metaKey: true }, win);
|
||||
EventUtils.synthesizeKey("KEY_Backspace", {}, win);
|
||||
|
||||
for (let c of text.split("")) {
|
||||
EventUtils.synthesizeKey(c, {}, win);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,8 @@ const TELEMETRY_PREF =
|
|||
"browser.search.serpEventTelemetryCategorization.enabled";
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
SERPDomainToCategoriesMap: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
|
|
|
@ -10,11 +10,14 @@
|
|||
*/
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
CATEGORIZATION_SETTINGS: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
CATEGORIZATION_SETTINGS:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
ExperimentAPI: "resource://nimbus/ExperimentAPI.sys.mjs",
|
||||
ExperimentFakes: "resource://testing-common/NimbusTestUtils.sys.mjs",
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SERPCategorizationRecorder: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
SERPCategorizationRecorder:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
const TEST_PROVIDER_INFO = [
|
||||
|
|
|
@ -11,8 +11,9 @@
|
|||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
TELEMETRY_CATEGORIZATION_DOWNLOAD_SETTINGS:
|
||||
"resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
|
||||
});
|
||||
|
||||
|
|
|
@ -13,13 +13,17 @@
|
|||
requestLongerTimeout(2);
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
CATEGORIZATION_SETTINGS: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
DomainToCategoriesStore: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
CATEGORIZATION_SETTINGS:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
DomainToCategoriesStore:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SERPCategorizationRecorder: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
SERPCategorizationRecorder:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
TELEMETRY_CATEGORIZATION_KEY:
|
||||
"resource:///modules/SERPCategorization.sys.mjs",
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
const TEST_PROVIDER_INFO = [
|
||||
|
|
|
@ -8,8 +8,10 @@
|
|||
*/
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
CATEGORIZATION_SETTINGS: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
CATEGORIZATION_SETTINGS:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
const TEST_PROVIDER_INFO = [
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
SERPCategorizationEventScheduler:
|
||||
"resource:///modules/SERPCategorization.sys.mjs",
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
const TEST_PROVIDER_INFO = [
|
||||
|
|
|
@ -9,11 +9,12 @@
|
|||
*/
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
CATEGORIZATION_SETTINGS: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
CATEGORIZATION_SETTINGS:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
SERPCategorizationEventScheduler:
|
||||
"resource:///modules/SERPCategorization.sys.mjs",
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
TELEMETRY_CATEGORIZATION_KEY:
|
||||
"resource:///modules/SERPCategorization.sys.mjs",
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
const TEST_PROVIDER_INFO = [
|
||||
|
|
|
@ -12,15 +12,18 @@
|
|||
requestLongerTimeout(5);
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
ADLINK_CHECK_TIMEOUT_MS: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
ADLINK_CHECK_TIMEOUT_MS:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
|
||||
SEARCH_TELEMETRY_SHARED: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SEARCH_TELEMETRY_SHARED:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPCategorization:
|
||||
"resource:///modules/SearchSERPCategorization.sys.mjs",
|
||||
SearchSERPDomainToCategoriesMap:
|
||||
"resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
|
||||
TELEMETRY_SETTINGS_KEY: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
TELEMETRY_SETTINGS_KEY:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
});
|
||||
|
||||
const TEST_PROVIDER_INFO = [
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
"use strict";
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
SearchUIUtils: "resource:///modules/SearchUIUtils.sys.mjs",
|
||||
SearchUIUtils: "moz-src:///browser/components/search/SearchUIUtils.sys.mjs",
|
||||
});
|
||||
|
||||
const TEST_PROVIDER_INFO = [
|
||||
|
|
|
@ -4,24 +4,31 @@
|
|||
ChromeUtils.defineESModuleGetters(this, {
|
||||
ADLINK_CHECK_TIMEOUT_MS:
|
||||
"resource:///actors/SearchSERPTelemetryChild.sys.mjs",
|
||||
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
CATEGORIZATION_SETTINGS: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
BrowserSearchTelemetry:
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
CATEGORIZATION_SETTINGS:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
CustomizableUITestUtils:
|
||||
"resource://testing-common/CustomizableUITestUtils.sys.mjs",
|
||||
Region: "resource://gre/modules/Region.sys.mjs",
|
||||
RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
|
||||
SEARCH_TELEMETRY_SHARED: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetryUtils: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SEARCH_TELEMETRY_SHARED:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetryUtils:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
SearchTestUtils: "resource://testing-common/SearchTestUtils.sys.mjs",
|
||||
SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
|
||||
SERPCategorizationRecorder: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPCategorizationRecorder:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
sinon: "resource://testing-common/Sinon.sys.mjs",
|
||||
SPA_ADLINK_CHECK_TIMEOUT_MS:
|
||||
"resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
TELEMETRY_CATEGORIZATION_KEY:
|
||||
"resource:///modules/SERPCategorization.sys.mjs",
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
|
||||
VISIBILITY_THRESHOLD: "resource:///actors/SearchSERPTelemetryChild.sys.mjs",
|
||||
});
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="windows-1252" />
|
||||
<title>An Interesting Website</title>
|
||||
</head>
|
||||
<body></body>
|
||||
</html>
|
|
@ -46,7 +46,7 @@ class TestPingSubmitted(MarionetteTestCase):
|
|||
# Record an event for the ping to eventually submit.
|
||||
self.marionette.execute_script(
|
||||
"""
|
||||
const { SERPCategorizationRecorder } = ChromeUtils.importESModule("resource:///modules/SERPCategorization.sys.mjs");
|
||||
const { SERPCategorizationRecorder } = ChromeUtils.importESModule("moz-src:///browser/components/search/SERPCategorization.sys.mjs");
|
||||
SERPCategorizationRecorder.recordCategorizationTelemetry({
|
||||
organic_category: "3",
|
||||
organic_num_domains: "1",
|
||||
|
|
|
@ -7,8 +7,10 @@
|
|||
*/
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
CATEGORIZATION_SETTINGS: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
DomainToCategoriesStore: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
CATEGORIZATION_SETTINGS:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
DomainToCategoriesStore:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
sinon: "resource://testing-common/Sinon.sys.mjs",
|
||||
Sqlite: "resource://gre/modules/Sqlite.sys.mjs",
|
||||
});
|
||||
|
|
|
@ -9,9 +9,12 @@
|
|||
"use strict";
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
SERPCategorization: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
CATEGORIZATION_SETTINGS: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPCategorization:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
CATEGORIZATION_SETTINGS:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
ChromeUtils.defineLazyGetter(this, "gCryptoHash", () => {
|
||||
|
|
|
@ -8,7 +8,8 @@
|
|||
"use strict";
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
SERPDomainToCategoriesMap: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
add_task(async function record_matches_region() {
|
||||
|
|
|
@ -10,10 +10,12 @@
|
|||
ChromeUtils.defineESModuleGetters(this, {
|
||||
RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
|
||||
Region: "resource://gre/modules/Region.sys.mjs",
|
||||
SERPCategorization: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPCategorization:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
TELEMETRY_CATEGORIZATION_KEY:
|
||||
"resource:///modules/SERPCategorization.sys.mjs",
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
TestUtils: "resource://testing-common/TestUtils.sys.mjs",
|
||||
});
|
||||
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
Region: "resource://gre/modules/Region.sys.mjs",
|
||||
SERPDomainToCategoriesMap: "resource:///modules/SERPCategorization.sys.mjs",
|
||||
SERPDomainToCategoriesMap:
|
||||
"moz-src:///browser/components/search/SERPCategorization.sys.mjs",
|
||||
});
|
||||
|
||||
// For the tests, domains aren't checked, but add at least one value so the
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
*/
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
});
|
||||
|
||||
const TESTS = [
|
||||
|
|
|
@ -6,7 +6,8 @@
|
|||
ChromeUtils.defineESModuleGetters(this, {
|
||||
AppConstants: "resource://gre/modules/AppConstants.sys.mjs",
|
||||
RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
|
||||
TELEMETRY_SETTINGS_KEY: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
TELEMETRY_SETTINGS_KEY:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
JsonSchema: "resource://gre/modules/JsonSchema.sys.mjs",
|
||||
SearchEngineSelector: "resource://gre/modules/SearchEngineSelector.sys.mjs",
|
||||
});
|
||||
|
|
|
@ -2,9 +2,11 @@
|
|||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserSearchTelemetry:
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
NetUtil: "resource://gre/modules/NetUtil.sys.mjs",
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
|
||||
sinon: "resource://testing-common/Sinon.sys.mjs",
|
||||
});
|
||||
|
|
|
@ -2,10 +2,13 @@
|
|||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserSearchTelemetry:
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
NetUtil: "resource://gre/modules/NetUtil.sys.mjs",
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetryUtils: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetryUtils:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
|
||||
sinon: "resource://testing-common/Sinon.sys.mjs",
|
||||
});
|
||||
|
|
|
@ -48,7 +48,7 @@ export const SUGGEST_OTHER_TABS_METHODS = {
|
|||
|
||||
export const DIM_REDUCTION_METHODS = {};
|
||||
const MISSING_ANCHOR_IN_CLUSTER_PENALTY = 0.2;
|
||||
const NEAREST_NEIGHBOR_DEFAULT_THRESHOLD = 0.225;
|
||||
const NEAREST_NEIGHBOR_DEFAULT_THRESHOLD = 0.2;
|
||||
const DISSIMILAR_TAB_LABEL = "None";
|
||||
const MAX_NN_GROUPED_TABS = 4;
|
||||
|
||||
|
|
|
@ -2919,8 +2919,14 @@
|
|||
* An optional argument that accepts a single tab, which, if passed, will
|
||||
* cause the group to be inserted just before this tab in the tab strip. By
|
||||
* default, the group will be created at the end of the tab strip.
|
||||
* @param {boolean} [options.showCreateUI]
|
||||
* Set this to true to show the post-creation group edtior.
|
||||
* @param {boolean} [options.isUserCreated]
|
||||
* Should be true if this group is being created in response to an
|
||||
* explicit request from the user (as opposed to a group being created
|
||||
* for technical reasons, such as when an already existing group
|
||||
* switches windows).
|
||||
* Causes the group create UI to be displayed and telemetry events to be fired.
|
||||
* @param {string} [options.telemetryUserCreateSource]
|
||||
* The means by which the tab group was created. Defaults to "unknown".
|
||||
*/
|
||||
addTabGroup(
|
||||
tabs,
|
||||
|
@ -2929,7 +2935,8 @@
|
|||
color = null,
|
||||
label = "",
|
||||
insertBefore = null,
|
||||
showCreateUI = false,
|
||||
isUserCreated = false,
|
||||
telemetryUserCreateSource = "unknown",
|
||||
} = {}
|
||||
) {
|
||||
if (!tabs?.length) {
|
||||
|
@ -2975,10 +2982,19 @@
|
|||
group.dispatchEvent(
|
||||
new CustomEvent("TabGroupCreate", {
|
||||
bubbles: true,
|
||||
detail: { showCreateUI },
|
||||
detail: { isUserCreated },
|
||||
})
|
||||
);
|
||||
|
||||
if (isUserCreated) {
|
||||
Glean.browserEngagement.tabGroupCreate.record({
|
||||
id,
|
||||
layout: this.tabContainer.verticalMode ? "vertical" : "horizontal",
|
||||
source: telemetryUserCreateSource,
|
||||
tabs: group.tabs.length,
|
||||
});
|
||||
}
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
|
@ -6704,7 +6720,7 @@
|
|||
break;
|
||||
}
|
||||
case "TabGroupCreate":
|
||||
if (aEvent.detail.showCreateUI) {
|
||||
if (aEvent.detail.isUserCreated) {
|
||||
this.tabGroupMenu.openCreateModal(aEvent.target);
|
||||
}
|
||||
break;
|
||||
|
@ -8449,7 +8465,7 @@ var TabContextMenu = {
|
|||
if (gBrowser._tabGroupsEnabled) {
|
||||
let groupableTabs = this.contextTabs.filter(t => !t.pinned);
|
||||
let selectedGroupCount = new Set(
|
||||
// the filter is necessary to remove the "null" group
|
||||
// The filter removes the "null" group for ungrouped tabs.
|
||||
groupableTabs.map(t => t.group).filter(g => g)
|
||||
).size;
|
||||
|
||||
|
@ -8461,14 +8477,13 @@ var TabContextMenu = {
|
|||
|
||||
// Determine whether or not the "current" tab group should appear in the
|
||||
// "move tab to group" context menu.
|
||||
let groupToFilter;
|
||||
if (selectedGroupCount == 1) {
|
||||
groupToFilter = groupableTabs[0].group;
|
||||
}
|
||||
if (groupToFilter) {
|
||||
availableGroupsToMoveTo = availableGroupsToMoveTo.filter(
|
||||
group => group !== groupToFilter
|
||||
);
|
||||
let groupToFilter = groupableTabs[0].group;
|
||||
if (groupToFilter && groupableTabs.every(t => t.group)) {
|
||||
availableGroupsToMoveTo = availableGroupsToMoveTo.filter(
|
||||
group => group !== groupToFilter
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
contextMoveTabToGroup.disabled = !groupableTabs.length;
|
||||
|
@ -8845,7 +8860,8 @@ var TabContextMenu = {
|
|||
moveTabsToNewGroup() {
|
||||
gBrowser.addTabGroup(this.contextTabs, {
|
||||
insertBefore: this.contextTab,
|
||||
showCreateUI: true,
|
||||
isUserCreated: true,
|
||||
telemetryUserCreateSource: "tab_menu",
|
||||
});
|
||||
|
||||
// When using the tab context menu to create a group from the all tabs
|
||||
|
|
|
@ -7,13 +7,6 @@
|
|||
// This is loaded into chrome windows with the subscript loader. Wrap in
|
||||
// a block to prevent accidentally leaking globals onto `window`.
|
||||
{
|
||||
const lazy = {};
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazy,
|
||||
"smartTabGroupsEnabled",
|
||||
"browser.tabs.groups.smart.enabled"
|
||||
);
|
||||
|
||||
const { TabStateFlusher } = ChromeUtils.importESModule(
|
||||
"resource:///modules/sessionstore/TabStateFlusher.sys.mjs"
|
||||
);
|
||||
|
@ -31,6 +24,8 @@
|
|||
"red",
|
||||
];
|
||||
|
||||
static AI_ICON = "chrome://global/skin/icons/highlights.svg";
|
||||
|
||||
static headerSection = /*html*/ `
|
||||
<html:div class="panel-header">
|
||||
<html:h1
|
||||
|
@ -304,6 +299,14 @@
|
|||
|
||||
constructor() {
|
||||
super();
|
||||
this.smartTabGroupsEnabled = false;
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
this,
|
||||
"smartTabGroupsEnabled",
|
||||
"browser.tabs.groups.smart.enabled",
|
||||
false,
|
||||
this.#onSmartTabGroupsPrefChange.bind(this)
|
||||
);
|
||||
}
|
||||
|
||||
connectedCallback() {
|
||||
|
@ -403,10 +406,14 @@
|
|||
this.#swatchesContainer.addEventListener("change", this);
|
||||
}
|
||||
|
||||
#onSmartTabGroupsPrefChange(_preName, _prev, latest) {
|
||||
const icon = latest ? MozTabbrowserTabGroupMenu.AI_ICON : "";
|
||||
|
||||
this.#suggestionButton.iconSrc = icon;
|
||||
this.#suggestionsMessage.iconSrc = icon;
|
||||
}
|
||||
|
||||
#initSuggestions() {
|
||||
const AI_ICON = lazy.smartTabGroupsEnabled
|
||||
? "chrome://global/skin/icons/highlights.svg"
|
||||
: "";
|
||||
const { SmartTabGroupingManager } = ChromeUtils.importESModule(
|
||||
"moz-src:///browser/components/tabbrowser/SmartTabGrouping.sys.mjs"
|
||||
);
|
||||
|
@ -416,7 +423,9 @@
|
|||
this.#suggestionButton = this.querySelector(
|
||||
"#tab-group-suggestion-button"
|
||||
);
|
||||
this.#suggestionButton.iconSrc = AI_ICON;
|
||||
this.#suggestionButton.iconSrc = this.smartTabGroupsEnabled
|
||||
? MozTabbrowserTabGroupMenu.AI_ICON
|
||||
: "";
|
||||
this.#suggestionButton.addEventListener("click", () => {
|
||||
this.#handleSmartSuggest();
|
||||
});
|
||||
|
@ -441,7 +450,9 @@
|
|||
this.#suggestionsMessage = this.querySelector(
|
||||
"#tab-group-suggestions-message"
|
||||
);
|
||||
this.#suggestionsMessage.iconSrc = AI_ICON;
|
||||
this.#suggestionsMessage.iconSrc = this.smartTabGroupsEnabled
|
||||
? MozTabbrowserTabGroupMenu.AI_ICON
|
||||
: "";
|
||||
this.#suggestionsDisclaimer = this.querySelector(
|
||||
"#tab-group-suggestions-disclaimer"
|
||||
);
|
||||
|
@ -580,7 +591,7 @@
|
|||
openCreateModal(group) {
|
||||
this.activeGroup = group;
|
||||
this.createMode = true;
|
||||
this.suggestionState = lazy.smartTabGroupsEnabled
|
||||
this.suggestionState = this.smartTabGroupsEnabled
|
||||
? MozTabbrowserTabGroupMenu.State.CREATE_AI_INITIAL
|
||||
: MozTabbrowserTabGroupMenu.State.CREATE_STANDARD_INITIAL;
|
||||
|
||||
|
@ -614,7 +625,7 @@
|
|||
openEditModal(group) {
|
||||
this.activeGroup = group;
|
||||
this.createMode = false;
|
||||
this.suggestionState = lazy.smartTabGroupsEnabled
|
||||
this.suggestionState = this.smartTabGroupsEnabled
|
||||
? MozTabbrowserTabGroupMenu.State.EDIT_AI_INITIAL
|
||||
: MozTabbrowserTabGroupMenu.State.EDIT_STANDARD_INITIAL;
|
||||
|
||||
|
@ -810,7 +821,7 @@
|
|||
* @param {string} action "save" or "cancel"
|
||||
*/
|
||||
#handleMlTelemetry(action) {
|
||||
if (!lazy.smartTabGroupsEnabled) {
|
||||
if (!this.smartTabGroupsEnabled) {
|
||||
return;
|
||||
}
|
||||
if (this.#suggestedMlLabel) {
|
||||
|
|
|
@ -1154,8 +1154,9 @@
|
|||
: [dropElement, ...movingTabs];
|
||||
gBrowser.addTabGroup(tabsInGroup, {
|
||||
insertBefore: dropElement,
|
||||
showCreateUI: true,
|
||||
isUserCreated: true,
|
||||
color: draggedTab._dragData.tabGroupCreationColor,
|
||||
telemetryUserCreateSource: "drag",
|
||||
});
|
||||
} else {
|
||||
moveTabs();
|
||||
|
@ -2241,7 +2242,11 @@
|
|||
newIndex++;
|
||||
}
|
||||
|
||||
if (newIndex < 0 || newIndex == oldIndex) {
|
||||
if (newIndex < 0) {
|
||||
newIndex = oldIndex;
|
||||
}
|
||||
|
||||
if (newIndex == dragData.animDropIndex) {
|
||||
return;
|
||||
}
|
||||
dragData.animDropIndex = newIndex;
|
||||
|
|
|
@ -79,6 +79,35 @@ browser.engagement:
|
|||
type: quantity
|
||||
expires: never
|
||||
|
||||
tab_group_create:
|
||||
type: event
|
||||
description: >
|
||||
Recorded when the user creates a new tab group via
|
||||
the tab context menu or through drag and drop.
|
||||
notification_emails:
|
||||
- dao@mozilla.com
|
||||
- jswinarton@mozilla.com
|
||||
bugs:
|
||||
- https://bugzil.la/1938423
|
||||
data_reviews:
|
||||
- https://bugzil.la/1938423
|
||||
data_sensitivity:
|
||||
- interaction
|
||||
extra_keys:
|
||||
source:
|
||||
description: The means by which the tab group was created
|
||||
type: string
|
||||
tabs:
|
||||
description: The number of tabs in the group when it was created
|
||||
type: quantity
|
||||
layout:
|
||||
description: The layout of the tab strip when the group was created (either "horizontal" or "vertical")
|
||||
type: string
|
||||
id:
|
||||
description: The ID of the created tab group
|
||||
type: string
|
||||
expires: never
|
||||
|
||||
browser.ui.interaction:
|
||||
all_tabs_panel_dragstart_tab_event_count:
|
||||
type: counter
|
||||
|
|
|
@ -10,7 +10,7 @@ async function openCreatePanel(tabgroupPanel, tab) {
|
|||
let panelShown = BrowserTestUtils.waitForPopupEvent(tabgroupPanel, "shown");
|
||||
gBrowser.addTabGroup([tab], {
|
||||
color: "cyan",
|
||||
showCreateUI: true,
|
||||
isUserCreated: true,
|
||||
});
|
||||
await panelShown;
|
||||
}
|
||||
|
|
|
@ -1326,8 +1326,32 @@ add_task(
|
|||
);
|
||||
});
|
||||
|
||||
let ungroupedTab = BrowserTestUtils.addTab(gBrowser, "about:blank", {
|
||||
skipAnimation: true,
|
||||
});
|
||||
EventUtils.synthesizeMouseAtCenter(
|
||||
ungroupedTab,
|
||||
{ ctrlKey: true, metaKey: true },
|
||||
window
|
||||
);
|
||||
await withTabMenu(tabsToSelect[2], async (_, moveTabToGroupItem) => {
|
||||
const submenu = moveTabToGroupItem.querySelector(
|
||||
"#context_moveTabToGroupPopupMenu"
|
||||
).children;
|
||||
|
||||
const tabGroupIds = Array.from(submenu).map(item =>
|
||||
item.getAttribute("tab-group-id")
|
||||
);
|
||||
|
||||
Assert.ok(
|
||||
tabGroupIds.includes(selectedTabGroup.getAttribute("id")),
|
||||
"group with selected tabs is in context menu list since one of the selected tabs is ungrouped"
|
||||
);
|
||||
});
|
||||
|
||||
await removeTabGroup(selectedTabGroup);
|
||||
await removeTabGroup(otherGroup);
|
||||
BrowserTestUtils.removeTab(ungroupedTab);
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -1645,7 +1669,7 @@ add_task(async function test_tabGroupCreatePanel() {
|
|||
group = gBrowser.addTabGroup([tab], {
|
||||
color: "cyan",
|
||||
label: "Food",
|
||||
showCreateUI: true,
|
||||
isUserCreated: true,
|
||||
});
|
||||
await panelShown;
|
||||
};
|
||||
|
|
|
@ -222,16 +222,16 @@ add_task(async function promptStoresImpressionAndDisableTimestamps() {
|
|||
);
|
||||
|
||||
const now = Math.floor(Date.now() / 1000);
|
||||
const oneHourInMs = 60 * 60 * 1000;
|
||||
const oneHourInS = 60 * 60;
|
||||
|
||||
Assert.ok(
|
||||
impressionTimestamp &&
|
||||
now - parseInt(impressionTimestamp, 10) <= oneHourInMs,
|
||||
now - parseInt(impressionTimestamp, 10) <= oneHourInS,
|
||||
"Prompt impression timestamp is stored"
|
||||
);
|
||||
|
||||
Assert.ok(
|
||||
disabledTimestamp && now - parseInt(disabledTimestamp, 10) <= oneHourInMs,
|
||||
disabledTimestamp && now - parseInt(disabledTimestamp, 10) <= oneHourInS,
|
||||
"Selecting checkbox stores timestamp of when user disabled the prompt"
|
||||
);
|
||||
});
|
||||
|
|
|
@ -14,7 +14,8 @@ const lazy = {};
|
|||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs",
|
||||
OpenSearchEngine: "resource://gre/modules/OpenSearchEngine.sys.mjs",
|
||||
OpenSearchManager: "resource:///modules/OpenSearchManager.sys.mjs",
|
||||
OpenSearchManager:
|
||||
"moz-src:///browser/components/search/OpenSearchManager.sys.mjs",
|
||||
loadAndParseOpenSearchEngine:
|
||||
"resource://gre/modules/OpenSearchLoader.sys.mjs",
|
||||
PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
|
||||
|
|
|
@ -5,10 +5,11 @@
|
|||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
OpenSearchManager: "resource:///modules/OpenSearchManager.sys.mjs",
|
||||
OpenSearchManager:
|
||||
"moz-src:///browser/components/search/OpenSearchManager.sys.mjs",
|
||||
PanelMultiView: "resource:///modules/PanelMultiView.sys.mjs",
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
SearchUIUtils: "resource:///modules/SearchUIUtils.sys.mjs",
|
||||
SearchUIUtils: "moz-src:///browser/components/search/SearchUIUtils.sys.mjs",
|
||||
UrlbarPrefs: "resource:///modules/UrlbarPrefs.sys.mjs",
|
||||
UrlbarSearchUtils: "resource:///modules/UrlbarSearchUtils.sys.mjs",
|
||||
UrlbarUtils: "resource:///modules/UrlbarUtils.sys.mjs",
|
||||
|
|
|
@ -7,7 +7,8 @@ import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs";
|
|||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserSearchTelemetry:
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
UrlbarPrefs: "resource:///modules/UrlbarPrefs.sys.mjs",
|
||||
UrlbarProvidersManager: "resource:///modules/UrlbarProvidersManager.sys.mjs",
|
||||
UrlbarTokenizer: "resource:///modules/UrlbarTokenizer.sys.mjs",
|
||||
|
|
|
@ -10,7 +10,8 @@ const lazy = {};
|
|||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
ASRouter: "resource:///modules/asrouter/ASRouter.sys.mjs",
|
||||
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserSearchTelemetry:
|
||||
"moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs",
|
||||
BrowserUIUtils: "resource:///modules/BrowserUIUtils.sys.mjs",
|
||||
BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs",
|
||||
CustomizableUI: "resource:///modules/CustomizableUI.sys.mjs",
|
||||
|
@ -19,9 +20,9 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||
ObjectUtils: "resource://gre/modules/ObjectUtils.sys.mjs",
|
||||
PartnerLinkAttribution: "resource:///modules/PartnerLinkAttribution.sys.mjs",
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
ReaderMode: "resource://gre/modules/ReaderMode.sys.mjs",
|
||||
ReaderMode: "moz-src:///toolkit/components/reader/ReaderMode.sys.mjs",
|
||||
SearchModeSwitcher: "resource:///modules/SearchModeSwitcher.sys.mjs",
|
||||
SearchUIUtils: "resource:///modules/SearchUIUtils.sys.mjs",
|
||||
SearchUIUtils: "moz-src:///browser/components/search/SearchUIUtils.sys.mjs",
|
||||
SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
|
||||
UrlbarController: "resource:///modules/UrlbarController.sys.mjs",
|
||||
UrlbarEventBufferer: "resource:///modules/UrlbarEventBufferer.sys.mjs",
|
||||
|
@ -2125,12 +2126,9 @@ export class UrlbarInput {
|
|||
}
|
||||
|
||||
startLayoutExtend() {
|
||||
// Do not expand if:
|
||||
// The Urlbar does not support being expanded or it is already expanded
|
||||
if (
|
||||
!this.hasAttribute("breakout") ||
|
||||
this.hasAttribute("breakout-extend")
|
||||
) {
|
||||
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
|
||||
// Do not expand if the Urlbar does not support being expanded or it is
|
||||
// already expanded.
|
||||
return;
|
||||
}
|
||||
if (!this.view.isOpen) {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
import { SearchOneOffs } from "resource:///modules/SearchOneOffs.sys.mjs";
|
||||
import { SearchOneOffs } from "moz-src:///browser/components/search/SearchOneOffs.sys.mjs";
|
||||
|
||||
const lazy = {};
|
||||
|
||||
|
|
|
@ -15,7 +15,8 @@ const SCALAR_SEARCHMODE = "browser.engagement.navigation.urlbar_searchmode";
|
|||
const SUGGEST_URLBAR_PREF = "browser.urlbar.suggest.searches";
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
|
||||
SearchSERPTelemetry:
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs",
|
||||
});
|
||||
|
||||
function searchInAwesomebar(value, win = window) {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"use strict";
|
||||
|
||||
const { SearchSERPTelemetry } = ChromeUtils.importESModule(
|
||||
"resource:///modules/SearchSERPTelemetry.sys.mjs"
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs"
|
||||
);
|
||||
|
||||
const TEST_PROVIDER_INFO = [
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
"use strict";
|
||||
|
||||
const { SearchSERPTelemetry } = ChromeUtils.importESModule(
|
||||
"resource:///modules/SearchSERPTelemetry.sys.mjs"
|
||||
"moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs"
|
||||
);
|
||||
|
||||
const SCALAR_URLBAR_PERSISTED =
|
||||
|
|
|
@ -16,8 +16,6 @@ add_task(async function () {
|
|||
variables: {
|
||||
pagesNumSampledVisits:
|
||||
"places.frecency.pages.alternative.numSampledVisits",
|
||||
pagesNumInteractions:
|
||||
"places.frecency.pages.alternative.interactions.numInteractions",
|
||||
pagesMaxVisitGap:
|
||||
"places.frecency.pages.alternative.interactions.maxVisitGapSeconds",
|
||||
pagesViewTimeSeconds:
|
||||
|
|
25
browser/extensions/newtab/addon-jar.mn
Normal file
25
browser/extensions/newtab/addon-jar.mn
Normal file
|
@ -0,0 +1,25 @@
|
|||
# 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
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
browser.jar:
|
||||
% resource newtab %builtin-addons contentaccessible=yes
|
||||
% content newtab %content/builtin-addons contentaccessible=yes
|
||||
builtin-addons/newtab/manifest.json (./manifest.json)
|
||||
builtin-addons/newtab/chrome.manifest (./chrome.manifest)
|
||||
builtin-addons/newtab/webext-glue/background.js (./webext-glue/background.js)
|
||||
builtin-addons/newtab/webext-glue/schema.json (./webext-glue/schema.json)
|
||||
builtin-addons/newtab/webext-glue/resource-mapping.js (./webext-glue/resource-mapping.js)
|
||||
builtin-addons/newtab/lib/ (./lib/*)
|
||||
builtin-addons/newtab/common/ (./common/*)
|
||||
* builtin-addons/newtab/data/content/abouthomecache/page.html.template (./data/content/abouthomecache/page.html.template)
|
||||
* builtin-addons/newtab/data/content/abouthomecache/script.js.template (./data/content/abouthomecache/script.js.template)
|
||||
builtin-addons/newtab/data/data/content/assets/ (./data/content/assets/*)
|
||||
builtin-addons/newtab/data/content/activity-stream.bundle.js (./data/content/activity-stream.bundle.js)
|
||||
builtin-addons/newtab/data/content/newtab-render.js (./data/content/newtab-render.js)
|
||||
builtin-addons/newtab/data/css/activity-stream.css (./css/activity-stream.css)
|
||||
builtin-addons/newtab/prerendered/activity-stream.html (./prerendered/activity-stream.html)
|
||||
#ifndef RELEASE_OR_BETA
|
||||
builtin-addons/newtab/prerendered/activity-stream-debug.html (./prerendered/activity-stream-debug.html)
|
||||
#endif
|
||||
builtin-addons/newtab/prerendered/activity-stream-noscripts.html (./prerendered/activity-stream-noscripts.html)
|
1
browser/extensions/newtab/chrome.manifest
Normal file
1
browser/extensions/newtab/chrome.manifest
Normal file
|
@ -0,0 +1 @@
|
|||
content newtab data/content contentaccessible=yes
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue