Commit a5efefd4 authored by Carsten Schoenert's avatar Carsten Schoenert
Browse files

New upstream version 91.0.2

parent 5c87a00f
......@@ -636,6 +636,10 @@ AtkRole getRoleCB(AtkObject* aAtkObj) {
}
static AtkAttributeSet* ConvertToAtkAttributeSet(AccAttributes* aAttributes) {
if (!aAttributes) {
return nullptr;
}
AtkAttributeSet* objAttributeSet = nullptr;
for (auto iter : *aAttributes) {
......
......@@ -42,6 +42,11 @@
.tab-label {
white-space: nowrap;
line-height: 1.7; /* override 'normal' in case of fallback math fonts with huge metrics */
}
.tab-secondary-label {
margin: -.3em 0 .3em; /* adjust margins to compensate for line-height of .tab-label */
}
.tab-label-container {
......
......@@ -20,6 +20,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
PlacesUtils: "resource://gre/modules/PlacesUtils.jsm",
UrlbarPrefs: "resource:///modules/UrlbarPrefs.jsm",
UrlbarProvider: "resource:///modules/UrlbarUtils.jsm",
UrlbarProviderOpenTabs: "resource:///modules/UrlbarProviderOpenTabs.jsm",
UrlbarResult: "resource:///modules/UrlbarResult.jsm",
UrlbarUtils: "resource:///modules/UrlbarUtils.jsm",
});
......@@ -197,7 +198,10 @@ class ProviderInputHistory extends UrlbarProvider {
search_string: queryContext.searchString,
matchBehavior: Ci.mozIPlacesAutoComplete.MATCH_ANYWHERE,
searchBehavior: UrlbarPrefs.get("defaultBehavior"),
userContextId: queryContext.userContextId,
userContextId: UrlbarProviderOpenTabs.getUserContextIdForOpenPagesTable(
queryContext.userContextId,
queryContext.isPrivate
),
maxResults: queryContext.maxResults,
},
];
......
......@@ -242,10 +242,14 @@ class ProviderQuickSuggest extends UrlbarProvider {
sponsoredBlockId,
} = result.payload;
// impression
//
// Set `search_query` and `matched_keywords` to empty string, both of
// them are required fields for the impression, so we need to keep them
// in the payload. See bug 1725492 for more details.
PartnerLinkAttribution.sendContextualServicesPing(
{
search_query: details.searchString,
matched_keywords: details.searchString,
search_query: "",
matched_keywords: "",
advertiser: sponsoredAdvertiser,
block_id: sponsoredBlockId,
position: telemetryResultIndex,
......
......@@ -7,7 +7,15 @@
"use strict";
async function bumpScore(uri, searchString, counts, useMouseClick = false) {
let win;
async function bumpScore(
uri,
searchString,
counts,
useMouseClick = false,
needToLoad = false
) {
if (counts.visits) {
let visits = new Array(counts.visits).fill(uri);
await PlacesTestUtils.addVisits(visits);
......@@ -15,22 +23,24 @@ async function bumpScore(uri, searchString, counts, useMouseClick = false) {
if (counts.picks) {
for (let i = 0; i < counts.picks; ++i) {
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: searchString,
});
let promise = BrowserTestUtils.waitForDocLoadAndStopIt(
uri,
gBrowser.selectedBrowser
);
let promise = needToLoad
? BrowserTestUtils.browserLoaded(win.gBrowser.selectedBrowser)
: BrowserTestUtils.waitForDocLoadAndStopIt(
uri,
win.gBrowser.selectedBrowser
);
// Look for the expected uri.
while (gURLBar.untrimmedValue != uri) {
EventUtils.synthesizeKey("KEY_ArrowDown");
while (win.gURLBar.untrimmedValue != uri) {
EventUtils.synthesizeKey("KEY_ArrowDown", {}, win);
}
if (useMouseClick) {
let element = UrlbarTestUtils.getSelectedRow(window);
EventUtils.synthesizeMouseAtCenter(element, {});
let element = UrlbarTestUtils.getSelectedRow(win);
EventUtils.synthesizeMouseAtCenter(element, {}, win);
} else {
EventUtils.synthesizeKey("KEY_Enter");
EventUtils.synthesizeKey("KEY_Enter", {}, win);
}
await promise;
}
......@@ -44,6 +54,9 @@ async function decayInputHistory() {
}
add_task(async function setup() {
// Use new window to avoid timeout failure for autocomplete popup happens on Linux TV.
win = await BrowserTestUtils.openNewBrowserWindow();
await SpecialPowers.pushPrefEnv({
set: [
// We don't want autofill to influence this test.
......@@ -51,6 +64,9 @@ add_task(async function setup() {
],
});
registerCleanupFunction(async () => {
await BrowserTestUtils.closeWindow(win);
// Avoid memory leaking, need to set null explicitly.
win = null;
await PlacesUtils.history.clear();
await PlacesUtils.bookmarks.eraseEverything();
});
......@@ -65,12 +81,12 @@ add_task(async function test_adaptive_with_search_terms() {
await bumpScore(url1, "si", { visits: 3, picks: 3 });
await bumpScore(url2, "site", { visits: 3, picks: 3 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
let result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url1, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url2, "Check second result");
info(
......@@ -80,12 +96,12 @@ add_task(async function test_adaptive_with_search_terms() {
await bumpScore(url1, "site", { visits: 3, picks: 3 });
await bumpScore(url2, "si", { visits: 3, picks: 3 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url2, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url1, "Check second result");
info("Same visit count, different picks, both exact match");
......@@ -93,12 +109,12 @@ add_task(async function test_adaptive_with_search_terms() {
await bumpScore(url1, "si", { visits: 3, picks: 3 });
await bumpScore(url2, "si", { visits: 3, picks: 1 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url1, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url2, "Check second result");
info("Same visit count, different picks, both exact match, invert");
......@@ -106,12 +122,12 @@ add_task(async function test_adaptive_with_search_terms() {
await bumpScore(url1, "si", { visits: 3, picks: 1 });
await bumpScore(url2, "si", { visits: 3, picks: 3 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url2, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url1, "Check second result");
info("Same visit count, different picks, both partial match");
......@@ -119,12 +135,12 @@ add_task(async function test_adaptive_with_search_terms() {
await bumpScore(url1, "site", { visits: 3, picks: 3 });
await bumpScore(url2, "site", { visits: 3, picks: 1 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url1, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url2, "Check second result");
info("Same visit count, different picks, both partial match, invert");
......@@ -132,12 +148,12 @@ add_task(async function test_adaptive_with_search_terms() {
await bumpScore(url1, "site", { visits: 3, picks: 1 });
await bumpScore(url2, "site", { visits: 3, picks: 3 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url2, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url1, "Check second result");
});
......@@ -151,12 +167,12 @@ add_task(async function test_adaptive_with_decay() {
await decayInputHistory();
await bumpScore(url2, "si", { visits: 3, picks: 3 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
let result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url2, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url1, "Check second result");
info("Same visit count, same picks, both exact match, decay second");
......@@ -165,12 +181,12 @@ add_task(async function test_adaptive_with_decay() {
await decayInputHistory();
await bumpScore(url1, "si", { visits: 3, picks: 3 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url1, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url2, "Check second result");
});
......@@ -184,12 +200,12 @@ add_task(async function test_adaptive_limited() {
await decayInputHistory();
await bumpScore(url2, "si", { visits: 3, picks: 3 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
let result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url2, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url1, "Check second result");
info("Same visit count, same picks, both exact match, decay second");
......@@ -198,12 +214,12 @@ add_task(async function test_adaptive_limited() {
await decayInputHistory();
await bumpScore(url1, "si", { visits: 3, picks: 3 });
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url1, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url2, "Check second result");
});
......@@ -233,17 +249,17 @@ add_task(async function test_adaptive_limited() {
// After 1 heuristic and 3 input history results.
let expectedBookmarkIndex = 4;
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "site",
});
let result = await UrlbarTestUtils.getDetailsOfResultAt(
window,
win,
expectedBookmarkIndex
);
Assert.equal(result.url, url, "Check bookmarked result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, n - 1);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, n - 1);
Assert.equal(
UrlbarTestUtils.getResultCount(window),
UrlbarTestUtils.getResultCount(win),
n,
"Check all the results are filled"
);
......@@ -280,14 +296,14 @@ add_task(async function test_adaptive_behaviors() {
],
});
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "site",
});
let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
let result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url, "Check bookmarked result");
Assert.equal(
UrlbarTestUtils.getResultCount(window),
UrlbarTestUtils.getResultCount(win),
2,
"Check there are no unexpected results"
);
......@@ -308,12 +324,12 @@ add_task(async function test_adaptive_mouse() {
await bumpScore(url1, "site", { visits: 3, picks: 3 }, true);
await bumpScore(url2, "site", { visits: 3, picks: 1 }, true);
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
let result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url1, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url2, "Check second result");
info("Same visit count, different picks, invert");
......@@ -321,12 +337,12 @@ add_task(async function test_adaptive_mouse() {
await bumpScore(url1, "site", { visits: 3, picks: 1 }, true);
await bumpScore(url2, "site", { visits: 3, picks: 3 }, true);
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url2, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url1, "Check second result");
});
......@@ -345,17 +361,76 @@ add_task(async function test_adaptive_searchmode() {
await bumpScore(url1, "site", { visits: 3, picks: 3 }, true);
await bumpScore(url2, "site", { visits: 3, picks: 1 }, true);
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
window: win,
value: "si",
});
let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
let result = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(result.url, url1, "Check first result");
result = await UrlbarTestUtils.getDetailsOfResultAt(window, 2);
result = await UrlbarTestUtils.getDetailsOfResultAt(win, 2);
Assert.equal(result.url, url2, "Check second result");
info("Entering search mode.");
// enterSearchMode checks internally that our site.tld URLs are not shown.
await UrlbarTestUtils.enterSearchMode(window, {
await UrlbarTestUtils.enterSearchMode(win, {
engineName: suggestionsEngine.name,
});
await Services.search.removeEngine(suggestionsEngine);
});
add_task(async function test_adaptive_history_in_privatewindow() {
info(
"Check adaptive history is not shown in private window as tab switching candidate."
);
await PlacesUtils.history.clear();
info("Add a test url as an input history.");
const url = "http://example.com/";
// We need to wait for loading the page in order to register the url into
// moz_openpages_temp table.
await bumpScore(url, "exa", { visits: 1, picks: 1 }, false, true);
info("Check the url could be registered properly.");
const connection = await PlacesUtils.promiseLargeCacheDBConnection();
const rows = await connection.executeCached(
"SELECT userContextId FROM moz_openpages_temp WHERE url = :url",
{ url }
);
Assert.equal(rows.length, 1, "Length of rows for the url is 1.");
Assert.greaterOrEqual(
rows[0].getResultByName("userContextId"),
0,
"The url is registered as non-private-browsing context."
);
info("Open popup in private window.");
const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
private: true,
});
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window: privateWindow,
value: "ex",
});
info("Check the popup results.");
let hasResult = false;
for (let i = 0; i < UrlbarTestUtils.getResultCount(privateWindow); i++) {
const result = await UrlbarTestUtils.getDetailsOfResultAt(privateWindow, i);
if (result.url !== url) {
continue;
}
Assert.notEqual(
result.type,
UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
"Result type of the url is not for tab switch."
);
hasResult = true;
}
Assert.ok(hasResult, "Popup has a result for the url.");
await BrowserTestUtils.closeWindow(privateWindow);
});
......@@ -415,13 +415,13 @@ function assertCustomImpression(index) {
Assert.equal(payload.position, index + 1, "Should set the position");
Assert.equal(
payload.search_query,
TEST_SEARCH_STRING,
"Should set the search_query"
"",
"Should set the search_query to an empty string"
);
Assert.equal(
payload.matched_keywords,
TEST_SEARCH_STRING,
"Should set the matched_keywords"
"",
"Should set the matched_keywords to an empty string"
);
}
......
---
GECKO_BASE_REPOSITORY: https://hg.mozilla.org/mozilla-unified
GECKO_HEAD_REPOSITORY: https://hg.mozilla.org/releases/mozilla-esr91
GECKO_HEAD_REF: FIREFOX_91_0esr_BUILD2
GECKO_HEAD_REV: 42e1acb39affae65d50ced864d28672d67aa0181
GECKO_HEAD_REF: FIREFOX_91_0_1esr_RELEASE
GECKO_HEAD_REV: 8046f1ae74749dd164478750e0d7a0d529313403
### For comm-central
# GECKO_BASE_REPOSITORY: https://hg.mozilla.org/mozilla-unified
......
......@@ -571,7 +571,7 @@ function customizeMailToolbarForTabType() {
function initViewCalendarPaneMenu() {
let calSidebar = document.getElementById("calSidebar");
document.getElementById("calViewCalendarPane").checked = !calSidebar.collapsed;
document.getElementById("calViewCalendarPane").setAttribute("checked", !calSidebar.collapsed);
if (document.getElementById("appmenu_calViewCalendarPane")) {
document.getElementById("appmenu_calViewCalendarPane").checked = !calSidebar.collapsed;
......
......@@ -30,6 +30,12 @@ function launchBrowser(url, event) {
return;
}
if (/^mid:/i.test(url)) {
let { MailUtils } = ChromeUtils.import("resource:///modules/MailUtils.jsm");
MailUtils.openMessageByMessageId(url.slice(4));
return;
}
Cc["@mozilla.org/uriloader/external-protocol-service;1"]
.getService(Ci.nsIExternalProtocolService)
.loadURI(Services.io.newURI(url));
......
......@@ -119,10 +119,13 @@
/* iMIP notification bar */
.calendar-notification-bar {
background-color: #baeeff;
color: #000;
padding: 3px;
}
:root[lwt-tree-brighttext] .calendar-notification-bar {
background-color: #464cb9;
}
.calendar-notification-bar {
margin: 0 4px 4px;
border-radius: 4px;
......@@ -130,9 +133,7 @@
}
:root[lwt-tree] #imip-view-toolbar {
--imip-button-color: var(--toolbar-color);
--imip-button-background: var(--toolbar-bgcolor);
color: var(--lwt-text-color);
}
#imip-bar > img {
......
......@@ -60,6 +60,5 @@
}
#imip-view-toolbar {
--imip-button-color: WindowText;
--imip-button-background: AppWorkspace;
}
......@@ -20,7 +20,6 @@
}
#imip-view-toolbar {
--imip-button-color: -moz-DialogText;
--imip-button-background: #fff;
}
......
......@@ -66,7 +66,6 @@
}
#imip-view-toolbar {
--imip-button-color: WindowText;
--imip-button-background: ButtonFace;
}
......
......@@ -3,6 +3,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const EXPORTED_SYMBOLS = ["LDAPClient"];
var { setTimeout } = ChromeUtils.import("resource://gre/modules/Timer.jsm");
var {
AbandonRequest,
BindRequest,
......@@ -32,6 +34,8 @@ class LDAPClient {
maxLogLevel: "Warn",
maxLogLevelPref: "mailnews.ldap.loglevel",
});
this._dataEventsQueue = [];
}
connect() {
......@@ -132,10 +136,16 @@ class LDAPClient {
};
/**
* The data event handler.
* The data event handler. Server may send multiple data events after a
* search, we want to handle them asynchonosly and in sequence.
* @param {TCPSocketEvent} event - The data event.
*/
_onData = event => {
_onData = async event => {
if (this._processingData) {
this._dataEventsQueue.push(event);
return;
}
this._processingData = true;
let data = event.data;