Merge autoland to mozilla-central. a=merge

This commit is contained in:
Andreea Pavel 2019-09-20 12:45:02 +03:00
commit 8923abebee
165 changed files with 2486 additions and 2504 deletions

View File

@ -1,41 +0,0 @@
# This file contains vendoring instructions for cargo.
# It was generated by `mach vendor rust`.
# Please do not edit.
[source."https://github.com/hsivonen/packed_simd"]
branch = "rust_1_32"
git = "https://github.com/hsivonen/packed_simd"
replace-with = "vendored-sources"
[source."https://github.com/froydnj/winapi-rs"]
branch = "aarch64"
git = "https://github.com/froydnj/winapi-rs"
replace-with = "vendored-sources"
[source."https://github.com/alexcrichton/mio-named-pipes"]
branch = "master"
git = "https://github.com/alexcrichton/mio-named-pipes"
replace-with = "vendored-sources"
[source."https://github.com/NikVolf/tokio-named-pipes"]
branch = "stable"
git = "https://github.com/NikVolf/tokio-named-pipes"
replace-with = "vendored-sources"
[source."https://github.com/CraneStation/Cranelift"]
git = "https://github.com/CraneStation/Cranelift"
replace-with = "vendored-sources"
rev = "9c6f8feb0f28f50434c0cf67f3f7c07486a42b7e"
[source.crates-io]
replace-with = "vendored-sources"
# Take advantage of the fact that cargo will treat lines starting with #
# as comments to add preprocessing directives for when this file is included
# from .cargo/config.in.
#define REPLACE_NAME vendored-sources
#define VENDORED_DIRECTORY third_party/rust
#ifndef top_srcdir
[source.vendored-sources]
directory = "third_party/rust"
#endif

View File

@ -1,10 +1,52 @@
# Please do not edit this file.
# This file contains vendoring instructions for cargo.
# It was generated by `mach vendor rust`.
# Please do not edit.
# Note: this file is only really needed when objdir is not a subdirectory of
# the top source directory.
[source."https://github.com/hsivonen/packed_simd"]
branch = "rust_1_32"
git = "https://github.com/hsivonen/packed_simd"
replace-with = "vendored-sources"
#include config
[source."https://github.com/froydnj/winapi-rs"]
branch = "aarch64"
git = "https://github.com/froydnj/winapi-rs"
replace-with = "vendored-sources"
[source."https://github.com/alexcrichton/mio-named-pipes"]
branch = "master"
git = "https://github.com/alexcrichton/mio-named-pipes"
replace-with = "vendored-sources"
[source."https://github.com/NikVolf/tokio-named-pipes"]
branch = "stable"
git = "https://github.com/NikVolf/tokio-named-pipes"
replace-with = "vendored-sources"
[source."https://github.com/CraneStation/Cranelift"]
git = "https://github.com/CraneStation/Cranelift"
replace-with = "vendored-sources"
rev = "9c6f8feb0f28f50434c0cf67f3f7c07486a42b7e"
[source.crates-io]
replace-with = "vendored-sources"
# Take advantage of the fact that cargo will treat lines starting with #
# as comments to add preprocessing directives. This file can thus by copied
# as-is to $topsrcdir/.cargo/config with no preprocessing to be used there
# (for e.g. independent tasks building rust code), or be preprocessed by
# the build system to produce a .cargo/config with the right content.
#define REPLACE_NAME vendored-sources
#define VENDORED_DIRECTORY third_party/rust
# We explicitly exclude the following section when preprocessing because
# it would overlap with the preprocessed [source."@REPLACE_NAME@"], and
# cargo would fail.
#ifndef REPLACE_NAME
[source.vendored-sources]
directory = "third_party/rust"
#endif
# Thankfully, @REPLACE_NAME@ is unlikely to be a legitimate source, so
# cargo will ignore it when it's here verbatim.
#filter substitution
[source.@REPLACE_NAME@]
[source."@REPLACE_NAME@"]
directory = "@top_srcdir@/@VENDORED_DIRECTORY@"

View File

@ -90,6 +90,7 @@ devtools/client/debugger/bin/
devtools/client/debugger/packages/**/fixtures/
devtools/client/debugger/node_modules
devtools/client/debugger/out
devtools/client/webreplay/mochitest/examples/
# Ignore devtools debugger files which aren't intended for linting, and also
# aren't included in any .eslintignore or .prettierignore file.

View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1568285711403">
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1568816392824">
<emItems>
<emItem blockID="i334" id="{0F827075-B026-42F3-885D-98981EE7B1AE}">
<prefs/>
@ -3413,6 +3413,22 @@
<prefs/>
<versionRange minVersion="0" maxVersion="*" severity="3"/>
</emItem>
<emItem blockID="13056233-543d-4c51-b89a-2a6b96ee324e" id="{23db2a76-49ca-4af2-af50-fccedd607e12}">
<prefs/>
<versionRange minVersion="0" maxVersion="*" severity="3"/>
</emItem>
<emItem blockID="e22dbf2b-70c8-41ed-b17a-32f53a22055b" id="{91c43d32-3a20-40cb-933b-47fd7c4b5a4e}">
<prefs/>
<versionRange minVersion="0" maxVersion="*" severity="3"/>
</emItem>
<emItem blockID="73cae2b8-f60e-47b3-afca-a1ff555f4ec5" id="/^((@yvd-addon)|(ydh@downloader\.youtube\.com)|(tomp3@youtube\.com))$/">
<prefs/>
<versionRange minVersion="0" maxVersion="*" severity="3"/>
</emItem>
<emItem blockID="1e56fd0a-77b6-477d-bada-78a5c18a37dd" id="/^((\{d81c0c7d-7420-4737-a3b9-dd9edeb4412f\})|(\{2bc89af7-d0ff-4b22-b7f6-ec87d15d999e\})|(\{3ee12352-a9db-4370-aa27-7e1d9acb628a\}))$/">
<prefs/>
<versionRange minVersion="0" maxVersion="*" severity="3"/>
</emItem>
</emItems>
<pluginItems>
<pluginItem blockID="p332">

View File

@ -1012,7 +1012,6 @@ toolbarpaletteitem[place="palette"] > #downloads-button[indicator] > .toolbarbut
/* Give this menupopup an arrow panel styling */
#BMB_bookmarksPopup {
-moz-appearance: none;
-moz-binding: none;
background: transparent;
border: none;
/* The popup inherits -moz-image-region from the button, must reset it */

View File

@ -75,16 +75,13 @@ add_task(async function muteTabs_usingButton() {
// Check mute state
ok(muted(tab0), "Tab0 is still muted");
ok(!muted(tab1) && !activeMediaBlocked(tab1), "Tab1 is not muted");
ok(!muted(tab1), "Tab1 is not muted");
ok(!activeMediaBlocked(tab1), "Tab1 is not activemedia-blocked");
ok(activeMediaBlocked(tab2), "Tab2 is media-blocked");
ok(
!muted(tab3) && !activeMediaBlocked(tab3),
"Tab3 is not muted and not activemedia-blocked"
);
ok(
!muted(tab4) && !activeMediaBlocked(tab4),
"Tab4 is not muted and not activemedia-blocked"
);
ok(!muted(tab3), "Tab3 is not muted");
ok(!activeMediaBlocked(tab3), "Tab3 is not activemedia-blocked");
ok(!muted(tab4), "Tab4 is not muted");
ok(!activeMediaBlocked(tab4), "Tab4 is not activemedia-blocked");
// Mute tab1 which is multiselected, thus other multiselected tabs should be affected too
// in the following way:
@ -100,10 +97,8 @@ add_task(async function muteTabs_usingButton() {
ok(muted(tab1), "Tab1 is muted");
ok(activeMediaBlocked(tab2), "Tab2 is still media-blocked");
ok(muted(tab3), "Tab3 is now muted");
ok(
!muted(tab4) && !activeMediaBlocked(tab4),
"Tab4 is not muted and not activemedia-blocked"
);
ok(!muted(tab4), "Tab4 is not muted");
ok(!activeMediaBlocked(tab4), "Tab4 is not activemedia-blocked");
for (let tab of tabs) {
BrowserTestUtils.removeTab(tab);
@ -138,10 +133,8 @@ add_task(async function unmuteTabs_usingButton() {
ok(!tab4.multiselected, "tab4 is not multiselected");
// Check tabs mute state
ok(
!muted(tab0) && !activeMediaBlocked(tab0),
"Tab0 is not muted and not media-blocked"
);
ok(!muted(tab0), "Tab0 is not muted");
ok(!activeMediaBlocked(tab0), "Tab0 is not activemedia-blocked");
ok(activeMediaBlocked(tab1), "Tab1 is media-blocked");
ok(activeMediaBlocked(tab2), "Tab2 is media-blocked");
ok(muted(tab3), "Tab3 is muted");
@ -157,22 +150,14 @@ add_task(async function unmuteTabs_usingButton() {
let tab3MuteAudioBtn = tab3.soundPlayingIcon;
await test_mute_tab(tab3, tab3MuteAudioBtn, false);
ok(
!muted(tab0) && !activeMediaBlocked(tab0),
"Tab0 is unmuted and not media-blocked"
);
ok(
!muted(tab1) && !activeMediaBlocked(tab1),
"Tab1 is unmuted and not media-blocked"
);
ok(
!muted(tab2) && !activeMediaBlocked(tab2),
"Tab2 is unmuted and not media-blocked"
);
ok(
!muted(tab3) && !activeMediaBlocked(tab3),
"Tab3 is unmuted and not media-blocked"
);
ok(!muted(tab0), "Tab0 is not muted");
ok(!activeMediaBlocked(tab0), "Tab0 is not activemedia-blocked");
ok(!muted(tab1), "Tab1 is not muted");
ok(!activeMediaBlocked(tab1), "Tab1 is not activemedia-blocked");
ok(!muted(tab2), "Tab2 is not muted");
ok(!activeMediaBlocked(tab2), "Tab2 is not activemedia-blocked");
ok(!muted(tab3), "Tab3 is not muted");
ok(!activeMediaBlocked(tab3), "Tab3 is not activemedia-blocked");
ok(muted(tab4), "Tab4 is muted");
is(gBrowser.selectedTab, tab0, "Tab0 is active");
@ -264,10 +249,8 @@ add_task(async function playTabs_usingButton() {
ok(muted(tab0), "Tab0 is muted");
ok(activeMediaBlocked(tab1), "Tab1 is media-blocked");
ok(activeMediaBlocked(tab2), "Tab2 is media-blocked");
ok(
!muted(tab3) && !activeMediaBlocked(tab3),
"Tab3 is not muted and not activemedia-blocked"
);
ok(!muted(tab3), "Tab3 is not muted");
ok(!activeMediaBlocked(tab3), "Tab3 is not activemedia-blocked");
ok(muted(tab4), "Tab4 is muted");
is(gBrowser.selectedTab, tab0, "Tab0 is active");
@ -280,22 +263,14 @@ add_task(async function playTabs_usingButton() {
let tab2MuteAudioBtn = tab2.soundPlayingIcon;
await test_mute_tab(tab2, tab2MuteAudioBtn, false);
ok(
!muted(tab0) && !activeMediaBlocked(tab0),
"Tab0 is unmuted and not activemedia-blocked"
);
ok(
!muted(tab1) && !activeMediaBlocked(tab1),
"Tab1 is unmuted and not activemedia-blocked"
);
ok(
!muted(tab2) && !activeMediaBlocked(tab2),
"Tab2 is unmuted and not activemedia-blocked"
);
ok(
!muted(tab3) && !activeMediaBlocked(tab3),
"Tab3 is unmuted and not activemedia-blocked"
);
ok(!muted(tab0), "Tab0 is not muted");
ok(!activeMediaBlocked(tab0), "Tab0 is not activemedia-blocked");
ok(!muted(tab1), "Tab1 is not muted");
ok(!activeMediaBlocked(tab1), "Tab1 is not activemedia-blocked");
ok(!muted(tab2), "Tab2 is not muted");
ok(!activeMediaBlocked(tab2), "Tab2 is not activemedia-blocked");
ok(!muted(tab3), "Tab3 is not muted");
ok(!activeMediaBlocked(tab3), "Tab3 is not activemedia-blocked");
ok(muted(tab4), "Tab4 is muted");
is(gBrowser.selectedTab, tab0, "Tab0 is active");
@ -333,10 +308,8 @@ add_task(async function checkTabContextMenu() {
ok(!tab3.multiselected, "Tab3 is not multiselected");
// Check mute state for tabs
ok(
!muted(tab0) && !activeMediaBlocked(tab0),
"Tab0 is not muted and not activemedia-blocked"
);
ok(!muted(tab0), "Tab0 is not muted");
ok(!activeMediaBlocked(tab0), "Tab0 is not activemedia-blocked");
ok(activeMediaBlocked(tab1), "Tab1 is media-blocked");
ok(muted(tab2), "Tab2 is muted");
ok(!muted(tab3, "Tab3 is not muted"));

View File

@ -12,6 +12,7 @@ footer {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: 20px;
}
footer > p {

View File

@ -11,6 +11,14 @@
--reveal-checkbox-opacity-hover: .6;
--reveal-checkbox-opacity-active: 1;
--success-color: #00c100;
--edit-delete-button-color: #4a4a4f;
}
/* Only overwrite the deemphasized text color in non-dark mode. */
@media not all and (prefers-color-scheme: dark) {
:host {
--in-content-deemphasized-text: #737373;
}
}
form {
@ -82,6 +90,7 @@ input[type="url"][readOnly] {
.delete-button,
.edit-button {
color: var(--edit-delete-button-color) !important;
background-repeat: no-repeat;
background-position: 8px;
-moz-context-properties: fill;
@ -190,7 +199,10 @@ input[type="url"][readOnly]:hover:active {
.meta-info {
font-size: smaller;
font-weight: 300;
color: var(--in-content-deemphasized-text);
margin-top: 0;
margin-bottom: 8px;
}
.meta-info:first-of-type::before {
@ -341,6 +353,7 @@ a.breach-alert-link {
--reveal-checkbox-opacity-hover: 1;
--reveal-checkbox-opacity-active: .6;
--success-color: #86DE74;
--edit-delete-button-color: #cfcfd1;
}
.breach-alert {

View File

@ -74,14 +74,14 @@
{
"id": "ResultType",
"type": "string",
"enum": ["remote_tab", "search", "tab", "url"],
"description": "Possible types of results. <code>remote_tab</code>: A synced tab from another device. <code>search</code>: A search suggestion from a search engine. <code>tab</code>: An open tab in the browser. <code>url</code>: A URL that's not one of the other types."
"enum": ["remote_tab", "search", "tab", "tip", "url"],
"description": "Possible types of results. <code>remote_tab</code>: A synced tab from another device. <code>search</code>: A search suggestion from a search engine. <code>tab</code>: An open tab in the browser. <code>tip</code>: An actionable message to help the user with their query. <code>url</code>: A URL that's not one of the other types."
},
{
"id": "SourceType",
"type": "string",
"enum": ["bookmarks", "history", "search", "tabs", "local", "network"],
"description": "Possible sources of results. <code>bookmarks</code>: The result comes from the user's bookmarks. <code>history</code>: The result comes from the user's history. <code>search</code>: The result comes from a search engine. <code>tabs</code>: The result is an open tab in the browser or a synced tab from another device. "
"enum": ["bookmarks", "history", "local", "network", "search", "tabs"],
"description": "Possible sources of results. <code>bookmarks</code>: The result comes from the user's bookmarks. <code>history</code>: The result comes from the user's history. <code>local</code>: The result comes from some local source not covered by another source type. <code>network</code>: The result comes from some network source not covered by another source type. <code>search</code>: The result comes from a search engine. <code>tabs</code>: The result is an open tab in the browser or a synced tab from another device."
}
],
"properties": {

View File

@ -209,6 +209,16 @@ add_task(async function test_onProviderResultsRequested() {
url: "http://example.com/tab-tabs",
},
},
{
type: "tip",
source: "local",
payload: {
text: "Test tip-local result text",
buttonText: "Test tip-local result button text",
buttonUrl: "http://example.com/tip-button",
helpUrl: "http://example.com/tip-help",
},
},
{
type: "url",
source: "history",
@ -256,6 +266,14 @@ add_task(async function test_onProviderResultsRequested() {
source: UrlbarUtils.RESULT_SOURCE.SEARCH,
title: "test",
heuristic: true,
payload: {
query: "test",
engine: "Test engine",
suggestion: undefined,
keyword: undefined,
icon: "",
keywordOffer: false,
},
},
// The second result should be our search suggestion result since the
// default muxer sorts search suggestion results before other types.
@ -264,6 +282,10 @@ add_task(async function test_onProviderResultsRequested() {
source: UrlbarUtils.RESULT_SOURCE.SEARCH,
title: "Test search-search result",
heuristic: false,
payload: {
engine: "Test engine",
suggestion: "Test search-search result",
},
},
// The rest of the results should appear in the order we returned them
// above.
@ -272,18 +294,45 @@ add_task(async function test_onProviderResultsRequested() {
source: UrlbarUtils.RESULT_SOURCE.TABS,
title: "Test remote_tab-tabs result",
heuristic: false,
payload: {
title: "Test remote_tab-tabs result",
url: "http://example.com/remote_tab-tabs",
displayUrl: "example.com/remote_tab-tabs",
},
},
{
type: UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
source: UrlbarUtils.RESULT_SOURCE.TABS,
title: "Test tab-tabs result",
heuristic: false,
payload: {
title: "Test tab-tabs result",
url: "http://example.com/tab-tabs",
displayUrl: "example.com/tab-tabs",
},
},
{
type: UrlbarUtils.RESULT_TYPE.TIP,
source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
title: "",
heuristic: false,
payload: {
text: "Test tip-local result text",
buttonText: "Test tip-local result button text",
buttonUrl: "http://example.com/tip-button",
helpUrl: "http://example.com/tip-help",
},
},
{
type: UrlbarUtils.RESULT_TYPE.URL,
source: UrlbarUtils.RESULT_SOURCE.HISTORY,
title: "Test url-history result",
heuristic: false,
payload: {
title: "Test url-history result",
url: "http://example.com/url-history",
displayUrl: "example.com/url-history",
},
},
];
@ -292,6 +341,7 @@ add_task(async function test_onProviderResultsRequested() {
source: r.source,
title: r.title,
heuristic: r.heuristic,
payload: r.payload,
}));
Assert.deepEqual(actualResults, expectedResults);

View File

@ -30,23 +30,6 @@
for (let event_name of event_names) {
this.addEventListener(event_name, ev => this[`on_${event_name}`](ev));
}
this.attachShadow({ mode: "open" });
this.shadowRoot.appendChild(this.fragment);
this._indicatorBar = this.shadowRoot.querySelector(
"[part=drop-indicator-bar]"
);
this._scrollBox = this.shadowRoot.querySelector(".popup-internal-box");
}
get fragment() {
if (!this.constructor.hasOwnProperty("_fragment")) {
this.constructor._fragment = MozXULElement.parseXULToFragment(
this.markup
);
}
return document.importNode(this.constructor._fragment, true);
}
get markup() {
@ -220,6 +203,15 @@
};
}
get _indicatorBar() {
if (!this.__indicatorBar) {
this.__indicatorBar = this.shadowRoot.querySelector(
"[part=drop-indicator-bar]"
);
}
return this.__indicatorBar;
}
/**
* This is the view that manages the popup.
*/
@ -495,7 +487,7 @@
scrollDir = 1;
}
if (scrollDir != 0) {
this._scrollBox.scrollByIndex(scrollDir, true);
this.scrollBox.scrollByIndex(scrollDir, true);
}
// Check if we should hide the drop indicator for this target.
@ -507,7 +499,7 @@
}
// We should display the drop indicator relative to the arrowscrollbox.
let scrollRect = this._scrollBox.getBoundingClientRect();
let scrollRect = this.scrollBox.getBoundingClientRect();
let newMarginTop = 0;
if (scrollDir == 0) {
let elt = this.firstElementChild;
@ -518,14 +510,14 @@
elt = elt.nextElementSibling;
}
newMarginTop = elt
? elt.screenY - this._scrollBox.screenY
? elt.screenY - this.scrollBox.screenY
: scrollRect.height;
} else if (scrollDir == 1) {
newMarginTop = scrollRect.height;
}
// Set the new marginTop based on arrowscrollbox.
newMarginTop += scrollRect.y - this._scrollBox.getBoundingClientRect().y;
newMarginTop += scrollRect.y - this.scrollBox.getBoundingClientRect().y;
this._indicatorBar.firstElementChild.style.marginTop =
newMarginTop + "px";
this._indicatorBar.hidden = false;

View File

@ -19,10 +19,6 @@ tree[is="places-tree"] > treechildren::-moz-tree-cell {
z-index: 1;
}
menupopup[placespopup="true"] {
-moz-binding: none;
}
/* Apply crisp rendering for favicons at exactly 2dppx resolution */
@media (resolution: 2dppx) {
#bookmarksChildren,

View File

@ -19,6 +19,7 @@
--tab-highlight: var(--social-color); /* start with social selected */
--column-width: 16px;
--graph-empty: #CECECF;
--graph-curve: cubic-bezier(.66,.75,.59,.91);
/* Colors for the loading indicator */
--protection-report-loader-color-stop: #AEAEAE3D;
@ -82,7 +83,6 @@ h2 {
#sign-up-for-monitor-link {
grid-area: 1 / 5 / 1 / -1;
margin: 0;
height: 38px;
font-size: 0.95em;
cursor: pointer;
padding: 10px;
@ -252,6 +252,8 @@ a.hidden,
align-self: flex-end;
width: var(--column-width);
position: relative;
height: 0;
transition: height 500ms var(--graph-curve);
}
.graph-wrapper-bar {
@ -323,6 +325,12 @@ a.hidden,
position: absolute;
top: -21px;
font-size: 0.8em;
opacity: 0;
transition: opacity 700ms;
}
.bar-count.animate {
opacity: 1;
}
/* Legend */
@ -662,6 +670,7 @@ label[for="tab-cryptominer"]:hover ~ #highlight-hover {
#get-proxy-extension-link {
-moz-appearance: button;
background-color: var(--blue-60);
border: 1px solid transparent;
border-radius: 2px;
text-decoration: none;
color: #fff;

View File

@ -121,12 +121,18 @@ document.addEventListener("DOMContentLoaded", e => {
count.id = "count" + i;
count.setAttribute("role", "cell");
count.textContent = content.total;
setTimeout(() => {
count.classList.add("animate");
}, 400);
bar.appendChild(count);
ariaOwnsString = count.id;
currentColumnCount += 1;
let barHeight = (content.total / largest) * 100;
weekCount += content.total;
bar.style.height = `${barHeight}%`;
// Add a short timeout to allow the elements to be added to the dom before triggering an animation.
setTimeout(() => {
bar.style.height = `${barHeight}%`;
}, 20);
for (let type of dataTypes) {
if (content[type]) {
let dataHeight = (content[type] / content.total) * 100;

View File

@ -316,6 +316,7 @@ UrlbarProviderExtension.RESULT_TYPES = {
remote_tab: UrlbarUtils.RESULT_TYPE.REMOTE_TAB,
search: UrlbarUtils.RESULT_TYPE.SEARCH,
tab: UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
tip: UrlbarUtils.RESULT_TYPE.TIP,
url: UrlbarUtils.RESULT_TYPE.URL,
};

View File

@ -91,7 +91,7 @@ var UrlbarUtils = {
// Payload: { url, icon, device, title }
REMOTE_TAB: 6,
// An actionable message to help the user with their query.
// Payload: { icon, text, buttonText, [buttonUrl], data, helpUrl }
// Payload: { text, buttonText, [buttonUrl], data, helpUrl }
TIP: 7,
},

View File

@ -256,12 +256,6 @@ unsignedAddonsDisabled.message=One or more installed add-ons cannot be verified
unsignedAddonsDisabled.learnMore.label=Learn More
unsignedAddonsDisabled.learnMore.accesskey=L
# LOCALIZATION NOTE (lwthemeInstallRequest.message2): %S will be replaced with
# the host name of the site.
lwthemeInstallRequest.message2=This site (%S) attempted to install a theme.
lwthemeInstallRequest.allowButton2=Allow
lwthemeInstallRequest.allowButton.accesskey2=a
# LOCALIZATION NOTE (popupWarning.message): Semicolon-separated list of plural forms.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
# #1 is brandShortName and #2 is the number of pop-ups blocked.
@ -288,11 +282,6 @@ popupShowBlockedPopupsIndicatorText=Show #1 blocked pop-up…;Show #1 blocked po
# LOCALIZATION NOTE (geolocationLastAccessIndicatorText): %S is the relative time of the most recent geolocation access (e.g. 5 min. ago)
geolocationLastAccessIndicatorText=Last access %S
# Bad Content Blocker Doorhanger Notification
# %S is brandShortName
badContentBlocked.blocked.message=%S is blocking content on this page.
badContentBlocked.notblocked.message=%S is not blocking any content on this page.
crashedpluginsMessage.title=The %S plugin has crashed.
crashedpluginsMessage.reloadButton.label=Reload page
crashedpluginsMessage.reloadButton.accesskey=R
@ -344,15 +333,9 @@ menuOpenAllInTabs.label=Open All in Tabs
# History menu
menuRestoreAllTabs.label=Restore All Tabs
# LOCALIZATION NOTE (menuRestoreAllTabsSubview.label): like menuRestoreAllTabs.label,
# but used in the history subview in the panel UI, so needs to mention these are *closed* tabs.
menuRestoreAllTabsSubview.label=Restore Closed Tabs
# LOCALIZATION NOTE (menuRestoreAllWindows, menuUndoCloseWindowLabel, menuUndoCloseWindowSingleTabLabel):
# see bug 394759
menuRestoreAllWindows.label=Restore All Windows
# LOCALIZATION NOTE (menuRestoreAllWindowsSubview.label): like menuRestoreAllWindows.label,
# but used in the history subview in the panel UI, so needs to mention these are *closed* windows.
menuRestoreAllWindowsSubview.label=Restore Closed Windows
# LOCALIZATION NOTE (menuUndoCloseWindowLabel): Semicolon-separated list of plural forms.
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
# #1 Window Title, #2 Number of tabs
@ -381,12 +364,6 @@ reader-mode-button.tooltip=Toggle reader view (%S)
# LOCALIZATION NOTE (urlbar.placeholder):
# %S is the name of the user's current search engine
urlbar.placeholder=Search with %S or enter address
# LOCALIZATION NOTE (urlbarSearchTip.onboarding):
# %S is the name of the user's current search engine
urlbarSearchTip.onboarding=Type less, find more: Search %S right from your address bar.
# LOCALIZATION NOTE (urlbarSearchTip.engineIsCurrentPage):
# %S is the name of the user's current search engine
urlbarSearchTip.engineIsCurrentPage=Start your search here to see suggestions from %S and your browsing history.
# LOCALIZATION NOTE(zoom-button.label): %S is the current page zoom level,
# %% will be displayed as a single % character (% is commonly used to define
@ -605,14 +582,6 @@ editBookmarkPanel.cancel.accesskey=C
editBookmark.removeBookmarks.label=Remove Bookmark;Remove #1 Bookmarks
editBookmark.removeBookmarks.accesskey=R
# Post Update Notifications
pu.notifyButton.label=Details…
pu.notifyButton.accesskey=D
# LOCALIZATION NOTE %S will be replaced by the short name of the application.
puNotifyText=%S has been updated
puAlertTitle=%S Updated
puAlertText=Click here for details
# Application menu
# LOCALIZATION NOTE(zoomReduce-button.tooltip): %S is the keyboard shortcut.
@ -877,18 +846,8 @@ flashHang.helpButton.accesskey = L
# LOCALIZATION NOTE (customizeMode.tabTitle): %S is brandShortName
customizeMode.tabTitle = Customize %S
# LOCALIZATION NOTE (e10s.accessibilityNotice.mainMessage,
# e10s.accessibilityNotice.enableAndRestart.label,
# e10s.accessibilityNotice.enableAndRestart.accesskey):
# These strings are related to the messages we display to offer e10s (Multi-process) to users
# on the pre-release channels. They won't be used in release but they will likely be used in
# beta starting from version 41, so it's still useful to have these strings properly localized.
# %S is brandShortName
e10s.accessibilityNotice.mainMessage2 = Accessibility support is partially disabled due to compatibility issues with new %S features.
e10s.accessibilityNotice.acceptButton.label = OK
e10s.accessibilityNotice.acceptButton.accesskey = O
e10s.accessibilityNotice.enableAndRestart.label = Enable (Requires Restart)
e10s.accessibilityNotice.enableAndRestart.accesskey = E
# LOCALIZATION NOTE (e10s.accessibilityNotice.jawsMessage): %S is brandShortName
e10s.accessibilityNotice.jawsMessage = Display of tab content is disabled due to incompatibility between %S and your accessibility software. Please update your screen reader or switch to Firefox Extended Support Release.
@ -965,7 +924,6 @@ pendingCrashReports.alwaysSend = Always Send
decoder.noCodecs.button = Learn how
decoder.noCodecs.accesskey = L
decoder.noCodecs.message = To play video, you may need to install Microsofts Media Feature Pack.
decoder.noCodecsLinux.message = To play video, you may need to install the required video codecs.
decoder.noHWAcceleration.message = To improve video quality, you may need to install Microsofts Media Feature Pack.
decoder.noPulseAudio.message = To play audio, you may need to install the required PulseAudio software.

View File

@ -5,9 +5,6 @@
# LOCALIZATION NOTE (stateStarting):
# Indicates that the download is starting.
stateStarting=Starting…
# LOCALIZATION NOTE (stateScanning):
# Indicates that an external program is scanning the download for viruses.
stateScanning=Scanning for viruses…
# LOCALIZATION NOTE (stateFailed):
# Indicates that the download failed because of an error.
stateFailed=Failed

View File

@ -17,8 +17,6 @@ bookmarksRestoreFilterName=JSON
bookmarksRestoreFormatError=Unsupported file type.
bookmarksRestoreParseError=Unable to process the backup file.
sortByName=Sort %S by Name
sortByNameGeneric=Sort by Name
# LOCALIZATION NOTE (view.sortBy.1.name.label): sortBy properties are versioned.
# When any of these changes, all of the properties must be bumped, and the
# change must be annotated here. Both label and accesskey must be updated.
@ -52,17 +50,6 @@ detailsPane.noItems=No items
# example: 111 items
detailsPane.itemsCountLabel=One item;#1 items
# LOCALIZATION NOTE (tagResultLabel, bookmarkResultLabel, switchtabResultLabel,
# keywordResultLabel, searchengineResultLabel)
# Noun used to describe the location bar autocomplete result type
# to users with screen readers
# See createResultLabel() in urlbarBindings.xml
tagResultLabel=Tag
bookmarkResultLabel=Bookmark
switchtabResultLabel=Tab
keywordResultLabel=Keyword
searchengineResultLabel=Search
# LOCALIZATION NOTE (lockPrompt.text)
# %S will be replaced with the application name.
lockPrompt.title=Browser Startup Error

View File

@ -4,12 +4,10 @@
addtags = Add Tags
alreadyhaveacct = Already a Pocket user?
continueff = Continue with Firefox
errorgeneric = There was an error when trying to save to Pocket.
learnmore = Learn More
loginnow = Log in
maxtaglength = Tags are limited to 25 characters
mustbeconnected = You must be connected to the Internet in order to save to Pocket. Please check your connection and try again.
onlylinkssaved = Only links can be saved
pagenotsaved = Page Not Saved
pageremoved = Page Removed
@ -28,6 +26,5 @@ taglinestory_two = View in Pocket on any device, any time.
tagssaved = Tags Added
tos = By continuing, you agree to Pockets <a href="%1$S" target="_blank">Terms of Service</a> and <a href="%2$S" target="_blank">Privacy Policy</a>
tryitnow = Try It Now
signinfirefox = Sign in with Firefox
signupfirefox = Sign up with Firefox
viewlist = View List

View File

@ -4,10 +4,6 @@
searchtip=Search using %S
# LOCALIZATION NOTE (searchPlaceholder): this is shown in the searchbox when
# the user hasn't typed anything yet.
searchPlaceholder=Search
# LOCALIZATION NOTE (searchHeader): this is displayed at the top of the panel
# showing search suggestions.
# %S is replaced with the name of the current default search engine.

View File

@ -16,7 +16,6 @@ state.current.allowedTemporarily = Allowed Temporarily
state.current.blockedTemporarily = Blocked Temporarily
state.current.blocked = Blocked
state.current.prompt = Always Ask
state.current.hide = Hide Prompt
# LOCALIZATION NOTE (state.multichoice.alwaysAsk,
# state.multichoice.allow,

View File

@ -68,14 +68,6 @@ tabs.closeWarningMultipleWindowsTabSnippet=;with #1 tabs
# single tab case in English, but can be used by other locales as necessary.
tabs.closeTabs.tooltip=Close tab;Close #1 tabs
# LOCALIZATION NOTE (tabs.closeSelectedTabs.tooltip):
# Semicolon-separated list of plural forms. See:
# http://developer.mozilla.org/en/docs/Localization_and_Plurals
# %S is the keyboard shortcut for closing the current tab.
# #1 is the number of tabs that will be closed. This is ignored for the
# single tab case in English, but can be used by other locales as necessary.
tabs.closeSelectedTabs.tooltip=Close tab (%S);Close #1 tabs (%S)
# LOCALIZATION NOTE (tabs.muteAudio2.tooltip):
# Semicolon-separated list of plural forms. See:
# http://developer.mozilla.org/en/docs/Localization_and_Plurals

View File

@ -53,9 +53,11 @@ add_task(async function test_uniqueDomainsVisitedInPast24Hours() {
"127.0.0.1 should not count as a unique visit"
);
// Set the expiry time to 1 second
// Set the expiry time to 4 seconds. The value should be reasonably short
// for testing, but long enough so that waiting for openNewForegroundTab
// does not cause the expiry timeout to run.
await SpecialPowers.pushPrefEnv({
set: [["browser.engagement.recent_visited_origins.expiry", 1]],
set: [["browser.engagement.recent_visited_origins.expiry", 4]],
});
// http://www.exämple.test
@ -71,13 +73,15 @@ add_task(async function test_uniqueDomainsVisitedInPast24Hours() {
let countBefore = URICountListener.uniqueDomainsVisitedInPast24Hours;
await new Promise(resolve => {
setTimeout(_ => {
let countAfter = URICountListener.uniqueDomainsVisitedInPast24Hours;
is(countAfter, countBefore - 1, "The expiry should work correctly");
resolve();
}, 1100);
});
// If expiration does not work correctly, the following will time out.
await BrowserTestUtils.waitForCondition(() => {
return (
URICountListener.uniqueDomainsVisitedInPast24Hours == countBefore - 1
);
}, 250);
let countAfter = URICountListener.uniqueDomainsVisitedInPast24Hours;
is(countAfter, countBefore - 1, "The expiry should work correctly");
BrowserTestUtils.removeTab(win.gBrowser.selectedTab);
BrowserTestUtils.removeTab(win.gBrowser.selectedTab);

View File

@ -176,6 +176,13 @@ add_task(async function() {
});
async function setupPreferences() {
if (SpecialPowers.isDebugBuild) {
// On debug builds, reducing the timings might lead to skip the "warning"
// state and will block the test execution.
// Do not change the timings in debug builds.
return;
}
await pushPref(
"devtools.aboutdebugging.test-connection-timing-out-delay",
CONNECTION_TIMING_OUT_DELAY

View File

@ -48,6 +48,6 @@
.why-paused .message.warning {
color: var(--theme-graphs-full-red);
font-family: var(--monospace-font-family);
font-size: 12px;
font-size: 10px;
font-style: normal;
}

View File

@ -112,10 +112,6 @@ pauseOnExceptionsItem2=Pause on exceptions
# when the debugger should pause on caught exceptions
pauseOnCaughtExceptionsItem=Pause on caught exceptions
# LOCALIZATION NOTE (workersHeader): The text to display in the events
# header.
workersHeader=Workers
# LOCALIZATION NOTE (threadsHeader): The text to describe the threads header
threadsHeader=Threads
@ -143,10 +139,6 @@ inspectorTool=Inspector
# the event search input bar
eventListenersHeader1.placeholder=Filter by event type
# LOCALIZATION NOTE (noDomMutationBreakpointsText): The text to display in the
# DOM Mutation Breakpoints pane when there are no events.
noDomMutationBreakpointsText=No breakpoints to display.
# LOCALIZATION NOTE (domMutationHeader): The text to display in the
# DOM Mutation Breakpoints header
domMutationHeader=DOM Mutation Breakpoints

View File

@ -11,13 +11,6 @@
# A good criteria is the language in which you'd find the best
# documentation on web development on the web.
breadcrumbs.siblings=Siblings
# LOCALIZATION NOTE (nodeMenu.tooltiptext)
# This menu appears in the Infobar (on top of the highlighted node) once
# the node is selected.
nodeMenu.tooltiptext=Node operations
inspector.panelLabel.markupView=Markup View
# LOCALIZATION NOTE (markupView.more.showing)
@ -172,15 +165,6 @@ inspectorRemoveAttribute.accesskey=R
inspectorCopyAttributeValue.label=Copy Attribute Value “%S”
inspectorCopyAttributeValue.accesskey=V
# LOCALIZATION NOTE (inspector.nodePreview.selectNodeLabel):
# This string is displayed in a tooltip that is shown when hovering over a DOM
# node preview (e.g. something like "div#foo.bar").
# DOM node previews can be displayed in places like the animation-inspector, the
# console or the object inspector.
# The tooltip invites the user to click on the node in order to select it in the
# inspector panel.
inspector.nodePreview.selectNodeLabel=Click to select this node in the Inspector
# LOCALIZATION NOTE (inspector.nodePreview.highlightNodeLabel):
# This string is displayed in a tooltip that is shown when hovering over a the
# inspector icon displayed next to a DOM node preview (e.g. next to something
@ -440,11 +424,6 @@ inspector.sidebar.computedViewTitle=Computed
# that corresponds to the tool displaying layout information defined in the page.
inspector.sidebar.layoutViewTitle2=Layout
# LOCALIZATION NOTE (inspector.sidebar.newBadge):
# This is the text of a promotion badge showed in the inspector sidebar, next to a panel
# name. Used to promote new/recent panels such as the layout panel.
inspector.sidebar.newBadge=new!
# LOCALIZATION NOTE (inspector.sidebar.animationInspectorTitle):
# This is the title shown in a tab in the side panel of the Inspector panel
# that corresponds to the tool displaying animations defined in the page.

View File

@ -39,14 +39,6 @@ jsonViewer.CollapseAll=Collapse All
# pretty print action button.
jsonViewer.PrettyPrint=Pretty Print
# LOCALIZATION NOTE (jsonViewer.reps.more): Label used in arrays
# that have more items than displayed.
jsonViewer.reps.more=more…
# LOCALIZATION NOTE (jsonViewer.filterJSON): Label used in search box
# at the top right cornder of the JSON Viewer.
jsonViewer.filterJSON=Filter JSON
# LOCALIZATION NOTE (jsonViewer.reps.reference): Label used for cycle
# references in an array.
jsonViewer.reps.reference=Cycle Reference

View File

@ -119,10 +119,6 @@ layout.gridDisplaySettings=Grid Display Settings
# containers to display.
layout.noGridsOnThisPage=CSS Grid is not in use on this page
# LOCALIZATION NOTE (layout.overlayMultipleGrids): The header for the list of grid
# container elements that can be highlighted in the CSS Grid panel.
layout.overlayMultipleGrids=Overlay Multiple Grids
# LOCALIZATION NOTE (layout.overlayGrid): Alternate header for the list of grid container
# elements if only one item can be selected.
layout.overlayGrid=Overlay Grid

View File

@ -136,38 +136,3 @@ marker.gcreason.label.USER_INACTIVE=User Inactive
# The name of a nursery collection.
marker.nurseryCollection=Nursery Collection
# LOCALIZATION NOTE (marker.gcreason.description.*):
# These strings are used to give an expanded description of why a GC occurred.
marker.gcreason.description.API=There was an API call to force garbage collection.
marker.gcreason.description.EAGER_ALLOC_TRIGGER=JavaScript returned to the event loop and there were enough bytes allocated since the last GC that a new GC cycle was triggered.
marker.gcreason.description.DESTROY_RUNTIME=Firefox destroyed a JavaScript runtime or context, and this was the final garbage collection before shutting down.
marker.gcreason.description.LAST_DITCH=JavaScript attempted to allocate, but there was no memory available. Doing a full compacting garbage collection as an attempt to free up memory for the allocation.
marker.gcreason.description.TOO_MUCH_MALLOC=JavaScript allocated too many bytes, and forced a garbage collection.
marker.gcreason.description.ALLOC_TRIGGER=JavaScript allocated too many times, and forced a garbage collection.
marker.gcreason.description.DEBUG_GC=GC due to Zeal debug settings.
marker.gcreason.description.COMPARTMENT_REVIVED=A global object that was thought to be dead at the start of the GC cycle was revived by the end of the GC cycle.
marker.gcreason.description.RESET=The active incremental GC cycle was forced to finish immediately.
marker.gcreason.description.OUT_OF_NURSERY=JavaScript allocated enough new objects in the nursery that it became full and triggered a minor GC.
marker.gcreason.description.EVICT_NURSERY=Work needed to be done on the tenured heap, requiring the nursery to be empty.
marker.gcreason.description.FULL_STORE_BUFFER=There were too many properties on tenured objects whose value was an object in the nursery.
marker.gcreason.description.SHARED_MEMORY_LIMIT=A large allocation was requested, but there was not enough memory.
marker.gcreason.description.PERIODIC_FULL_GC=JavaScript returned to the event loop, and it has been a relatively long time since Firefox performed a garbage collection.
marker.gcreason.description.INCREMENTAL_TOO_SLOW=A full, non-incremental garbage collection was triggered because there was a faster rate of allocations than the existing incremental garbage collection cycle could keep up with.
marker.gcreason.description.COMPONENT_UTILS=Components.utils.forceGC() was called to force a garbage collection.
marker.gcreason.description.MEM_PRESSURE=There was very low memory available.
marker.gcreason.description.CC_WAITING=The cycle collector required a garbage collection.
marker.gcreason.description.CC_FORCED=The cycle collector required a garbage collection.
marker.gcreason.description.LOAD_END=The document finished loading.
marker.gcreason.description.PAGE_HIDE=The tab or window was moved to the background.
marker.gcreason.description.NSJSCONTEXT_DESTROY=Firefox destroyed a JavaScript runtime or context, and this was the final garbage collection before shutting down.
marker.gcreason.description.SET_NEW_DOCUMENT=The page has been navigated to a new document.
marker.gcreason.description.SET_DOC_SHELL=The page has been navigated to a new document.
marker.gcreason.description.DOM_UTILS=There was an API call to force garbage collection.
marker.gcreason.description.DOM_IPC=Received an inter-process message that requested a garbage collection.
marker.gcreason.description.DOM_WORKER=The worker was idle for a relatively long time.
marker.gcreason.description.INTER_SLICE_GC=There has been a relatively long time since the last incremental GC slice.
marker.gcreason.description.FULL_GC_TIMER=JavaScript returned to the event loop, and it has been a relatively long time since we performed a garbage collection.
marker.gcreason.description.SHUTDOWN_CC=Firefox destroyed a JavaScript runtime or context, and this was the final garbage collection before shutting down.
marker.gcreason.description.DOM_WINDOW_UTILS=The user was inactive for a long time. Took the opportunity to perform GC when it was unlikely to be noticed.
marker.gcreason.description.USER_INACTIVE=The user was inactive for a long time. Firefox took the opportunity to perform GC when it was unlikely to be noticed.

View File

@ -80,18 +80,6 @@ censusDisplays.allocationStack.tooltip=Group items by the JavaScript stack recor
# tooltip for the "inverted call stack" display option.
censusDisplays.invertedAllocationStack.tooltip=Group items by the inverted JavaScript call stack recorded when the object was created
# LOCALIZATION NOTE (censusDisplays.treeMap.tooltip): The tooltip for the
# "tree map" display option.
censusDisplays.treeMap.tooltip=Visualize memory usage: larger blocks account for a larger percent of memory usage
# LOCALIZATION NOTE (censusDisplays.objectClass.tooltip): The tooltip for the
# "object class" display option.
censusDisplays.objectClass.tooltip=Group items by their JavaScript Object [[class]] name
# LOCALIZATION NOTE (censusDisplays.internalType.tooltip): The tooltip for the
# "internal type" display option.
censusDisplays.internalType.tooltip=Group items by their internal C++ type
# LOCALIZATION NOTE (toolbar.labelBy): The label describing the select menu
# options of the label options.
toolbar.labelBy=Label by:
@ -108,10 +96,6 @@ dominatorTreeDisplays.coarseType.tooltip=Label objects by the broad categories t
# tooltip for the "call stack" dominator tree display option.
dominatorTreeDisplays.allocationStack.tooltip=Label objects by the JavaScript stack recorded when it was allocated
# LOCALIZATION NOTE (dominatorTreeDisplays.internalType.tooltip): The
# tooltip for the "internal type" dominator tree display option.
dominatorTreeDisplays.internalType.tooltip=Label objects by their internal C++ type name
# LOCALIZATION NOTE (treeMapDisplays.coarseType.tooltip): The tooltip for
# the "coarse type" tree map display option.
treeMapDisplays.coarseType.tooltip=Label objects by the broad categories they fit in
@ -282,10 +266,6 @@ dominatorTree.state.error.full=There was an error while processing the dominator
# snapshot state SAVING, used in the main heap view.
snapshot.state.saving.full=Saving snapshot…
# LOCALIZATION NOTE (snapshot.state.importing.full): The label describing the
# snapshot state IMPORTING, used in the main heap view.
snapshot.state.importing.full=Importing…
# LOCALIZATION NOTE (snapshot.state.reading.full): The label describing the
# snapshot state READING, and SAVED, due to these states being combined
# visually, used in the main heap view.

View File

@ -265,11 +265,6 @@ networkMenu.sizeCached=cached
# by a service worker.
networkMenu.sizeServiceWorker=service worker
# LOCALIZATION NOTE (networkMenu.blockedBy): This is the label displayed
# in the network menu specifying the request was blocked by something.
# %S is replaced by the blocked reason, which could be "DevTools", "CORS", etc.
networkMenu.blockedBy=blocked by %S
# LOCALIZATION NOTE (networkMenu.blocked): This is a generic message for a
# URL that has been blocked for an unknown reason
networkMenu.blocked=blocked
@ -432,61 +427,6 @@ netRequest.originalFileURL.tooltip=Original: %S
# a request.
netRequest.decodedFileURL.tooltip=Decoded: %S
# LOCALIZATION NOTE (netRequest.headers): A label used for Headers tab
# This tab displays list of HTTP headers
netRequest.headers=Headers
# LOCALIZATION NOTE (netRequest.response): A label used for Response tab
# This tab displays HTTP response body
netRequest.response=Response
# LOCALIZATION NOTE (netRequest.rawData): A label used for a section
# in Response tab. This section displays raw response body as it's
# been received from the backend (debugger server)
netRequest.rawData=Raw Data
# LOCALIZATION NOTE (netRequest.xml): A label used for a section
# in Response tab. This section displays parsed XML response body.
netRequest.xml=XML
# LOCALIZATION NOTE (netRequest.image): A label used for a section
# in Response tab. This section displays images returned in response body.
netRequest.image=Image
# LOCALIZATION NOTE (netRequest.sizeLimitMessage): A label used
# in Response and Post tabs in case the body is bigger than given limit.
# It allows the user to click and fetch more from the backend.
# The {{link}} will be replace at run-time by an active link.
# String with ID 'netRequest.sizeLimitMessageLink' will be used as text
# for this link.
netRequest.sizeLimitMessage=Size limit has been reached. Click {{link}} to load more.
netRequest.sizeLimitMessageLink=here
# LOCALIZATION NOTE (netRequest.responseBodyDiscarded): A label used
# in Response tab if the response body is not available.
netRequest.responseBodyDiscarded=Response body was not stored.
# LOCALIZATION NOTE (netRequest.requestBodyDiscarded): A label used
# in Post tab if the post body is not available.
netRequest.requestBodyDiscarded=Request POST body was not stored.
# LOCALIZATION NOTE (netRequest.post): A label used for Post tab
# This tab displays HTTP post body
netRequest.post=POST
# LOCALIZATION NOTE (netRequest.cookies): A label used for Cookies tab
# This tab displays request and response cookies.
netRequest.cookies=Cookies
# LOCALIZATION NOTE (netRequest.params): A label used for URL parameters tab
# This tab displays data parsed from URL query string.
netRequest.params=Params
# LOCALIZATION NOTE (netRequest.callstack): A label used for request stacktrace tab
# This tab displays the request's JavaScript stack trace. Should be identical to
# debuggerUI.tabs.callstack
netRequest.callstack=Call Stack
# LOCALIZATION NOTE (certmgr.subjectinfo.label):
# A label used for a certificate section in security tab.
# This section displays Name and organization who has been assigned the fingerprints
@ -763,14 +703,6 @@ netmonitor.search.toolbar.clear=Clear Search Results
# displayed in the search toolbar to do a case sensitive search.
netmonitor.search.toolbar.caseSensitive=Case Sensitive
# LOCALIZATION NOTE (netmonitor.search.labels.responseHeaders): This is the label
# displayed in the search results as the label for the response headers
netmonitor.search.labels.responseHeaders=Response Header
# LOCALIZATION NOTE (netmonitor.search.labels.requestHeaders): This is the label
# displayed in the search results as the label for the request headers
netmonitor.search.labels.requestHeaders=Request Header
# LOCALIZATION NOTE (netmonitor.search.status.labels.fetching): This is the label
# displayed in the search results status bar when status is set to fetching.
netmonitor.search.status.labels.fetching=Searching…
@ -951,10 +883,6 @@ netmonitor.toolbar.toggleRecording=Pause/Resume recording network log
# in the network toolbar for the search button.
netmonitor.toolbar.search=Search
# LOCALIZATION NOTE (netmonitor.toolbar.perf): This is the label displayed
# in the network toolbar for the performance analysis button.
netmonitor.toolbar.perf=Toggle performance analysis…
# LOCALIZATION NOTE (netmonitor.toolbar.resetColumns): This is the label
# displayed in the network table header context menu.
netmonitor.toolbar.resetColumns=Reset Columns
@ -1010,18 +938,6 @@ netmonitor.summary.editAndResend=Edit and Resend
# from the currently displayed request
netmonitor.summary.rawHeaders=Raw headers
# LOCALIZATION NOTE (netmonitor.summary.rawHeaders.requestHeaders): This is the label displayed
# in the network details headers tab identifying the raw request headers textarea
netmonitor.summary.rawHeaders.requestHeaders=Request headers:
# LOCALIZATION NOTE (netmonitor.summary.rawHeaders.responseHeaders): This is the label displayed
# in the network details headers tab identifying the raw response headers textarea
netmonitor.summary.rawHeaders.responseHeaders=Response headers:
# LOCALIZATION NOTE (netmonitor.summary.size): This is the label displayed
# in the network details headers tab identifying the headers size.
netmonitor.summary.size=Headers size:
# LOCALIZATION NOTE (netmonitor.response.name): This is the label displayed
# in the network details response tab identifying an image's file name.
netmonitor.response.name=Name:
@ -1391,10 +1307,6 @@ netmonitor.custom.cancel=Cancel
# on the button which exists the performance statistics view
netmonitor.backButton=Back
# LOCALIZATION NOTE (netmonitor.headers.learnMore): This is the label displayed
# next to a header list item, with a link to external documentation
netmonitor.headers.learnMore=Learn More
# LOCALIZATION NOTE (netmonitor.status.tooltip.simple): This is the tooltip of the
# column status code, when request is not being cached or is not from a service worker
# %1$S is the status code, %2$S is the status text.

View File

@ -21,9 +21,6 @@ responsive.exit=Close Responsive Design Mode
# LOCALIZATION NOTE (responsive.rotate): Tooltip text of the rotate button.
responsive.rotate=Rotate viewport
# LOCALIZATION NOTE (responsive.done): Button text in the device list modal
responsive.done=Done
# LOCALIZATION NOTE (responsive.responsiveMode): Placeholder text for the
# device selector.
responsive.responsiveMode=Responsive

View File

@ -15,10 +15,6 @@
# the user attempts to save to an already existing file.
export.fileOverwriteConfirmation=File exists. Overwrite?
# LOCALIZATION NOTE (browserWindow.unavailable): This error message is shown
# when Scratchpad does not find any recently active main browser window.
browserWindow.unavailable=Scratchpad cannot find any browser window to execute the code in.
# LOCALIZATION NOTE (scratchpadContext.invalid): This error message is shown
# when user tries to run an operation in Scratchpad in an unsupported context.
scratchpadContext.invalid=Scratchpad cannot run this operation in the current mode.

View File

@ -13,11 +13,6 @@
# A good criteria is the language in which you'd find the best documentation
# on web development on the web.
# LOCALIZATION NOTE (findCmd.promptTitle): This is the dialog title used
# when the user wants to search for a string in the code. You can
# access this feature by pressing Ctrl-F on Windows/Linux or Cmd-F on Mac.
findCmd.promptTitle=Find…
# LOCALIZATION NOTE (findCmd.promptMessage): This is the message shown when
# the user wants to search for a string in the code. You can
# access this feature by pressing Ctrl-F on Windows/Linux or Cmd-F on Mac.
@ -28,27 +23,6 @@ findCmd.promptMessage=Search for:
# access this feature by pressing Ctrl-J on Windows/Linux or Cmd-J on Mac.
gotoLineCmd.promptTitle=Go to line…
# LOCALIZATION NOTE (gotoLineCmd.promptMessage): This is the message shown when
# the user wants to jump to a specific line number in the code. You can
# access this feature by pressing Ctrl-J on Windows/Linux or Cmd-J on Mac.
gotoLineCmd.promptMessage=Jump to line number:
# LOCALIZATION NOTE (annotation.breakpoint.title): This is the text shown in
# front of any breakpoint annotation when it is displayed as a tooltip in one of
# the editor gutters. This feature is used in the JavaScript Debugger.
annotation.breakpoint.title=Breakpoint: %S
# LOCALIZATION NOTE (annotation.currentLine): This is the text shown in
# a tooltip displayed in any of the editor gutters when the user hovers the
# current line.
annotation.currentLine=Current line
# LOCALIZATION NOTE (annotation.debugLocation.title): This is the text shown in
# a tooltip displayed in any of the editor gutters when the user hovers the
# current debugger location. The debugger can pause the JavaScript execution at
# user-defined lines.
annotation.debugLocation.title=Current step: %S
# LOCALIZATION NOTE (autocompletion.docsLink): This is the text shown on
# the link inside of the documentation popup. If you type 'document' in Scratchpad
# then press Shift+Space you can see the popup.

View File

@ -279,8 +279,3 @@ toolbox.buttons.rulers = Toggle rulers for the page
# This is the tooltip of the button in the toolbox toolbar that toggles the
# measuring tools
toolbox.buttons.measure = Measure a portion of the page
# LOCALIZATION NOTE (toolbox.tab.newBadge):
# This is the text of a promotion badge showed in the toobox tab bar, next to a tab panel
# name. Used to promote new/recent panels such as the accessibility panel.
toolbox.tab.newBadge=New

View File

@ -13,11 +13,6 @@
# Key shortcut used to focus the filter box on top of the data view
storage.filter.key=CmdOrCtrl+F
# LOCALIZATION NOTE (tree.emptyText):
# This string is displayed when the Storage Tree is empty. This can happen when
# there are no websites on the current page (about:blank)
tree.emptyText=No hosts on the page
# LOCALIZATION NOTE (table.emptyText):
# This string is displayed when there are no rows in the Storage Table for the
# selected host.

View File

@ -27,11 +27,6 @@ toolbox.label=Developer Tools
# The name of the tool: %1$S.
options.toolNotSupportedMarker=%1$S *
# LOCALIZATION NOTE (scratchpad.keycode)
# Used for opening scratchpad from the detached toolbox window
# Needs to match scratchpad.keycode from browser.dtd
scratchpad.keycode=VK_F4
# LOCALIZATION NOTE (toolbox.pickButton.tooltip)
# This is the tooltip of the element picker button in the toolbox toolbar.
# %S is the keyboard shortcut that toggles the element picker.
@ -183,10 +178,6 @@ toolbox.meatballMenu.community.label=Community…
# the close button the developer tools toolbox.
toolbox.closebutton.tooltip=Close Developer Tools
# LOCALIZATION NOTE (toolbox.allToolsButton.tooltip): This is the tooltip for the
# "all tools" button displayed when some tools are hidden by overflow of the toolbar.
toolbox.allToolsButton.tooltip=Select another tool
# LOCALIZATION NOTE (toolbox.sourceMapFailure): This is shown in the web console
# when there is a failure to fetch or parse a source map.
# The text of the error: %1$S
@ -201,11 +192,6 @@ toolbox.sourceMapFailure=Source map error: %1$S\nResource URL: %2$S\nSource Map
# The URL of the source: %2$S
toolbox.sourceMapSourceFailure=Error while fetching an original source: %1$S\nSource URL: %2$S
# LOCALIZATION NOTE (toolbox.options.enableNewDebugger.label): Label of the options panel
# checkbox to enable the new debugger frontend. Displayed only in Nightly and local
# builds.
toolbox.options.enableNewDebugger.label=Enable new debugger frontend
# LOCALIZATION NOTE (toolbox.debugTargetInfo.runtimeLabel): This is displayed as a toolbox
# header in about:devtools-toolbox. about:devtools-toolbox is used for instance when
# inspecting tabs in about:debugging.
@ -221,15 +207,6 @@ toolbox.debugTargetInfo.runtimeLabel=%1$S (%2$S)
# The version of runtime: %S
toolbox.debugTargetInfo.runtimeLabel.thisFirefox=This Firefox (%S)
# LOCALIZATION NOTE (toolbox.debugTargetInfo.runtimeLabelWithDeviceName): This is displayed
# as a toolbox header in about:devtools-toolbox. about:devtools-toolbox is used for
# instance when inspecting tabs in about:debugging.
# e.g. Mozilla Fennec on Pixel 2 (65.0a1)
# The name of runtime: %1$S
# The version of runtime: %2$S
# The device name of runtime: %3$S
toolbox.debugTargetInfo.runtimeLabelWithDeviceName=%1$S on %3$S (%2$S)
# LOCALIZATION NOTE (toolbox.debugTargetInfo.tabTitleRemote):
# Used as the tab title for about:devtools-toolbox when connected to a remote target.
# The connection type (see toolbox.debugTargetInfo.connection.*): %1$S
@ -248,20 +225,6 @@ toolbox.debugTargetInfo.tabTitleLocal=Toolbox - %1$S / %2$S
# target.
toolbox.debugTargetInfo.tabTitleError=Toolbox - error occurred
# LOCALIZATION NOTE (toolbox.debugTargetInfo.targetLabel): This is displayed as a toolbox
# header in about:devtools-toolbox. about:devtools-toolbox is used for instance when
# inspecting tabs in about:debugging.
# e.g. Internet for people, not profit — Mozilla (tab)
# The name of debug target: %1$S
# The type of debug target: %2$S
toolbox.debugTargetInfo.targetLabel=%1$S (%2$S)
# LOCALIZATION NOTE (toolbox.debugTargetInfo.type.tab): This is displayed as a toolbox
# header in about:devtools-toolbox. about:devtools-toolbox is used for instance when
# inspecting tabs in about:debugging.
# Currently, we support only this type.
toolbox.debugTargetInfo.type.tab=tab
# LOCALIZATION NOTE (toolbox.debugTargetInfo.connection.*): This is displayed in the
# toolbox header in about:devtools-toolbox, to indicate how the connection to the
# runtime being inspected was made.

View File

@ -75,10 +75,6 @@ connectionTimeout=Connection timeout. Check the Error Console on both ends for p
# appears in the filter text box for the properties view container.
propertiesFilterPlaceholder=Filter properties
# LOCALIZATION NOTE (emptyPropertiesList): the text that is displayed in the
# properties pane when there are no properties to display.
emptyPropertiesList=No properties to display
# LOCALIZATION NOTE (messageRepeats.tooltip2): the tooltip text that is displayed
# when you hover the red bubble that shows how many times a message is repeated
# in the web console output.
@ -312,10 +308,6 @@ webconsole.filteredMessagesByText.label=#1 hidden;#1 hidden
# example: 345 items hidden by text filter.
webconsole.filteredMessagesByText.tooltip=#1 item hidden by text filter;#1 items hidden by text filter
# Label used as the text of the "Reset filters" button in the "filtered messages" bar.
# It resets the default filters of the console to their original values.
webconsole.resetFiltersButton.label=Reset filters
# LOCALIZATION NOTE (webconsole.enablePersistentLogs.label)
webconsole.enablePersistentLogs.label=Persist Logs
# LOCALIZATION NOTE (webconsole.enablePersistentLogs.tooltip)

View File

@ -6,7 +6,6 @@ title_noApp=Firefox WebIDE
title_app=Firefox WebIDE: %S
runtimeButton_label=Select Runtime
projectButton_label=Open App
mainProcess_label=Main Process
@ -33,7 +32,6 @@ project_tab_loading=Loading…
error_cantInstallNotFullyConnected=Cant install project. Not fully connected.
error_cantInstallValidationErrors=Cant install project. Validation errors.
error_listRunningApps=Cant get app list from device
# Variable: name of the operation (in english)
error_operationTimeout=Operation timed out: %1$S
@ -68,8 +66,6 @@ error_webIDEDeprecated2=WebIDE will be disabled in an upcoming release. Remote d
notification_openAboutDebugging.label=Open about:debugging
notification_openAboutDebugging.accesskey=O
addons_stable=stable
addons_unstable=unstable
addons_install_button=install
addons_uninstall_button=uninstall
addons_adb_warning=USB devices wont be detected without this add-on
@ -80,21 +76,10 @@ addons_status_preparing=preparing
addons_status_downloading=downloading
addons_status_installing=installing
runtimedetails_checkno=no
runtimedetails_checkyes=yes
runtimedetails_notUSBDevice=Not a USB device
# LOCALIZATION NOTE (runtimePanel_noadbextension): Displayed in the WebIDE right sidebar
# when the ADB Extension is not installed, %S will be replaced with the name of extension
# ("ADB Extension").
runtimePanel_noadbextension=Install %S
# Validation status
status_tooltip=Validation status: %1$S
status_valid=VALID
status_warning=WARNINGS
status_error=ERRORS
status_unknown=UNKNOWN
# Device preferences and settings
device_reset_default=Reset to default

View File

@ -28,6 +28,7 @@ support-files =
[browser_dbg_rr_stepping-02.js]
[browser_dbg_rr_stepping-03.js]
[browser_dbg_rr_stepping-04.js]
[browser_dbg_rr_stepping-05.js]
[browser_dbg_rr_replay-01.js]
[browser_dbg_rr_replay-02.js]
[browser_dbg_rr_replay-03.js]

View File

@ -6,8 +6,6 @@
// Test event logpoints when replaying.
add_task(async function() {
await pushPref("devtools.debugger.features.log-event-breakpoints", true);
const dbg = await attachRecordingDebugger("doc_events.html", {
waitForRecording: true,
});

View File

@ -0,0 +1,31 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-disable no-undef */
"use strict";
// Test stepping in pretty-printed code.
add_task(async function() {
const dbg = await attachRecordingDebugger("doc_minified.html", {
waitForRecording: true,
});
await selectSource(dbg, "minified.js");
await prettyPrint(dbg);
await dbg.actions.addEventListenerBreakpoints(["event.mouse.click"]);
await dbg.actions.toggleEventLogging();
const console = await getDebuggerSplitConsole(dbg);
const hud = console.hud;
await warpToMessage(hud, dbg, "click", 12);
await stepInToLine(dbg, 2);
await stepOutToLine(dbg, 12);
await stepInToLine(dbg, 9);
await stepOutToLine(dbg, 13);
await stepInToLine(dbg, 5);
await stepOutToLine(dbg, 14);
await shutdownDebugger(dbg);
});

View File

@ -0,0 +1,13 @@
<div id="divvy">Hello World!</div>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<script src="minified.js"></script>
<script>
const cpmm = SpecialPowers.Services.cpmm;
function recordingFinished() {
cpmm.sendAsyncMessage("RecordingFinished");
}
window.setTimeout(() => {
synthesizeMouseAtCenter(divvy, {});
window.setTimeout(recordingFinished);
});
</script>

View File

@ -0,0 +1 @@
const s={getWindow:()=>window};function f(){this.getElementById("divvy").innerHTML="Done!"}const nf=f.bind(document);function DOMEvent(n,e){console.log("DOMEvent",e)}function h(n){n=new DOMEvent(n,s.getWindow()),!1===nf.call(s,n)}document.getElementById("divvy").addEventListener("click",h);

View File

@ -148,7 +148,7 @@ async function waitForMessageCount(hud, text, length, selector = ".message") {
return messages;
}
async function warpToMessage(hud, dbg, text) {
async function warpToMessage(hud, dbg, text, maybeLine) {
let messages = await waitForMessages(hud, text);
ok(messages.length == 1, "Found one message");
const message = messages.pop();
@ -168,6 +168,11 @@ async function warpToMessage(hud, dbg, text) {
messages = findMessages(hud, "", ".paused");
ok(messages.length == 1, "Found one paused message");
if (maybeLine) {
const pauseLine = getVisibleSelectedFrameLine(dbg);
ok(pauseLine == maybeLine, `Paused at line ${maybeLine} after warp`);
}
return message;
async function openConsoleContextMenu(element) {

View File

@ -219,6 +219,9 @@ ChildProcess.prototype = {
if (response.memoryUsage) {
this.lastMemoryUsage = response.memoryUsage;
}
if (response.exception) {
ThrowError(response.exception);
}
}
this.paused = true;
this.manifest.onFinished(response);
@ -1546,7 +1549,16 @@ async function findEventFrameEntry(checkpoint, progress) {
scanCheckpoint: savedCheckpoint,
});
return gEventFrameEntryPoints.get(progress);
const enterFramePoint = gEventFrameEntryPoints.get(progress);
if (!enterFramePoint) {
return null;
}
// We want to stop at the first step in the frame, not at the EnterFrame.
const frameSteps = await findFrameSteps(enterFramePoint);
assert(pointEquals(frameSteps[0], enterFramePoint));
return frameSteps[1];
}
async function findEventLogpointHits(checkpoint, event, callback) {
@ -1687,12 +1699,11 @@ let gLastFlushTime = Date.now();
// If necessary, synchronously flush the recording to disk.
function ensureFlushed() {
assert(gActiveChild == gMainChild);
gMainChild.waitUntilPaused(true);
gLastFlushTime = Date.now();
if (gLastFlushCheckpoint == gActiveChild.pauseCheckpoint()) {
if (gLastFlushCheckpoint == gMainChild.pauseCheckpoint()) {
return;
}
@ -1884,6 +1895,7 @@ const gControl = {
// Add a breakpoint where the active child should pause while resuming.
addBreakpoint(position) {
dumpv(`AddBreakpoint ${JSON.stringify(position)}`);
gBreakpoints.push(position);
// Start searching for breakpoint hits in the recording immediately.
@ -1904,7 +1916,9 @@ const gControl = {
// Clear all installed breakpoints.
clearBreakpoints() {
dumpv(`ClearBreakpoints\n`);
gBreakpoints.length = 0;
if (gActiveChild == gMainChild) {
// As for addBreakpoint(), update the active breakpoints in the recording
// child immediately.

View File

@ -268,9 +268,6 @@ ReplayDebugger.prototype = {
_processResponse(request, response, divergeResponse) {
dumpv(`SendRequest: ${stringify(request)} -> ${stringify(response)}`);
if (response.exception) {
ThrowError(response.exception);
}
if (response.unhandledDivergence) {
if (divergeResponse) {
return divergeResponse;

View File

@ -1054,7 +1054,10 @@ function ManifestStart(manifest) {
dump(`Unknown manifest: ${JSON.stringify(manifest)}\n`);
}
} catch (e) {
printError("ManifestStart", e);
const msg = printError("ManifestStart", e);
RecordReplayControl.manifestFinished({
exception: `ManifestStart failed: ${msg}`,
});
}
}
@ -1184,7 +1187,10 @@ function HitCheckpoint(id) {
try {
processManifestAfterCheckpoint(point);
} catch (e) {
printError("AfterCheckpoint", e);
const msg = printError("AfterCheckpoint", e);
RecordReplayControl.manifestFinished({
exception: `AfterCheckpoint failed: ${msg}`,
});
}
}
@ -1356,17 +1362,21 @@ function getObjectData(id) {
rv.proxyTarget = convertValue(object.proxyTarget);
rv.proxyHandler = convertValue(object.proxyHandler);
}
if (object.errorMessageName) {
rv.errorMessageName = object.errorMessageName;
}
if (object.errorNotes) {
rv.errorNotes = object.errorNotes;
}
if (object.errorLineNumber) {
rv.errorLineNumber = object.errorLineNumber;
}
if (object.errorColumnNumber) {
rv.errorColumnNumber = object.errorColumnNumber;
try {
if (object.errorMessageName) {
rv.errorMessageName = object.errorMessageName;
}
if (object.errorNotes) {
rv.errorNotes = object.errorNotes;
}
if (object.errorLineNumber) {
rv.errorLineNumber = object.errorLineNumber;
}
if (object.errorColumnNumber) {
rv.errorColumnNumber = object.errorColumnNumber;
}
} catch (e) {
// Error getters can throw access denied errors.
}
if (CSSRule.isInstance(object.unsafeDereference())) {
rv.isInstance = "CSSRule";
@ -2048,15 +2058,10 @@ const gRequestHandlers = {
};
function processRequest(request) {
try {
if (gRequestHandlers[request.type]) {
return gRequestHandlers[request.type](request);
}
return { exception: "No handler for " + request.type };
} catch (e) {
printError("processRequest", e);
return { exception: `Request failed: ${request.type}` };
if (gRequestHandlers[request.type]) {
return gRequestHandlers[request.type](request);
}
throwError(`"No handler for ${request.type}`);
}
function printError(why, e) {
@ -2067,6 +2072,7 @@ function printError(why, e) {
msg = "Unknown";
}
dump(`Record/Replay Error: ${why}: ${msg}\n`);
return msg;
}
// eslint-disable-next-line no-unused-vars

View File

@ -16,7 +16,7 @@ function getNeighbors(frame, offset, rewinding) {
* return an array of all the step targets
* that could be reached next from startLocation.
*/
function findStepOffsets(frame, rewinding) {
function findStepOffsets(frame, rewinding, requireStepStart = true) {
const seen = [];
const result = [];
let worklist = getNeighbors(frame, frame.offset, rewinding);
@ -28,7 +28,7 @@ function findStepOffsets(frame, rewinding) {
}
seen.push(offset);
const meta = frame.script.getOffsetMetadata(offset);
if (meta.isStepStart) {
if (requireStepStart ? meta.isStepStart : meta.isBreakpoint) {
if (!result.includes(offset)) {
result.push(offset);
}

View File

@ -223,7 +223,6 @@ const SourceActor = ActorClassWithSpec(sourceSpec, {
// original recording. If we try to fetch it now it may have changed or
// may no longer exist.
if (this.dbg.replaying) {
assert(!this._contentType);
return this.dbg.replayingContent(this.url);
}

View File

@ -897,7 +897,11 @@ const ThreadActor = ActorClassWithSpec(threadSpec, {
});
if (thread.dbg.replaying) {
const offsets = findStepOffsets(parentFrame, rewinding);
const offsets = findStepOffsets(
parentFrame,
rewinding,
/* requireStepStart */ false
);
parentFrame.setReplayingOnStep(onStep, offsets);
} else {
parentFrame.onStep = onStep;

View File

@ -11,9 +11,6 @@
# documentation on web development on the web.
# LOCALIZATION NOTE (panelTitle): This is the panel title
panelTitle=Style Inspector
# LOCALIZATION NOTE (rule.status): For each style property the panel shows
# the rules which hold that specific property. For every rule, the rule status
# is also displayed: a rule can be the best match, a match, a parent match, or a

View File

@ -329,8 +329,6 @@ waitForAllPaints(() => {
add_task(
async function restyling_transform_animations_in_scrolled_out_element() {
await SpecialPowers.pushPrefEnv({ set: [["ui.showHideScrollbars", 1]] });
// Make sure we start from the state right after requestAnimationFrame.
await waitForFrame();
@ -1542,8 +1540,6 @@ waitForAllPaints(() => {
add_task(
async function no_overflow_transform_animations_in_scrollable_element() {
await SpecialPowers.pushPrefEnv({ set: [["ui.showHideScrollbars", 1]] });
const parentElement = addDiv(null,
{ style: 'overflow-y: scroll; height: 100px;' });
const div = addDiv(null);

View File

@ -12,6 +12,7 @@ SpecialPowers.pushPrefEnv(
set: [
['layout.reflow.synthMouseMove', false],
['privacy.reduceTimerPrecision', false],
["ui.showHideScrollbars", 1],
],
},
function() {

View File

@ -230,8 +230,26 @@ static BrowsingContextOrigin SimilarOrigin(const Element& aTarget,
: BrowsingContextOrigin::Different;
}
// NOTE: This returns nullptr if |aDocument| is in a cross process.
static Document* GetTopLevelDocument(const Document& aDocument) {
BrowsingContext* browsingContext = aDocument.GetBrowsingContext();
if (!browsingContext) {
return nullptr;
}
nsPIDOMWindowOuter* topWindow = browsingContext->Top()->GetDOMWindow();
if (!topWindow) {
// If we don't have a DOMWindow, We are not in same origin.
return nullptr;
}
return topWindow->GetExtantDoc();
}
void DOMIntersectionObserver::Update(Document* aDocument,
DOMHighResTimeStamp time) {
MOZ_ASSERT(aDocument);
nsRect rootRect;
nsIFrame* rootFrame = nullptr;
Element* root = mRoot;
@ -252,28 +270,14 @@ void DOMIntersectionObserver::Update(Document* aDocument,
rootRect = nsLayoutUtils::TransformFrameRectToAncestor(
rootFrame, rootRectRelativeToRootFrame, containingBlock);
}
} else if (PresShell* presShell = aDocument->GetPresShell()) {
// FIXME(emilio): This shouldn't probably go through the presShell and just
// through the document tree.
rootFrame = presShell->GetRootScrollFrame();
if (rootFrame) {
nsPresContext* presContext = rootFrame->PresContext();
while (!presContext->IsRootContentDocument()) {
presContext = presContext->GetParentPresContext();
if (!presContext) {
break;
}
nsIFrame* rootScrollFrame =
presContext->PresShell()->GetRootScrollFrame();
if (rootScrollFrame) {
rootFrame = rootScrollFrame;
} else {
break;
}
} else if (Document* topLevelDocument = GetTopLevelDocument(*aDocument)) {
if (PresShell* presShell = topLevelDocument->GetPresShell()) {
rootFrame = presShell->GetRootScrollFrame();
if (rootFrame) {
root = rootFrame->GetContent()->AsElement();
nsIScrollableFrame* scrollFrame = do_QueryFrame(rootFrame);
rootRect = scrollFrame->GetScrollPortRect();
}
root = rootFrame->GetContent()->AsElement();
nsIScrollableFrame* scrollFrame = do_QueryFrame(rootFrame);
rootRect = scrollFrame->GetScrollPortRect();
}
}
@ -401,12 +405,11 @@ void DOMIntersectionObserver::Update(Document* aDocument,
}
if (target->UpdateIntersectionObservation(this, threshold)) {
QueueIntersectionObserverEntry(target, time,
origin == BrowsingContextOrigin::Different
? Nothing()
: Some(rootIntersectionRect),
targetRect, intersectionRect,
intersectionRatio);
QueueIntersectionObserverEntry(
target, time,
origin == BrowsingContextOrigin::Similar ? Some(rootIntersectionRect)
: Nothing(),
targetRect, intersectionRect, intersectionRatio);
}
}
}

View File

@ -1302,6 +1302,7 @@ Document::Document(const char* aContentType)
mTooDeepWriteRecursion(false),
mPendingMaybeEditingStateChanged(false),
mHasBeenEditable(false),
mHasWarnedAboutZoom(false),
mPendingFullscreenRequests(0),
mXMLDeclarationBits(0),
mOnloadBlockCount(0),
@ -11214,56 +11215,57 @@ void Document::NotifyLoading(const bool& aCurrentParentIsLoading,
}
}
void Document::SetReadyStateInternal(ReadyState rs,
bool updateTimingInformation) {
if (rs == READYSTATE_UNINITIALIZED) {
void Document::SetReadyStateInternal(ReadyState aReadyState,
bool aUpdateTimingInformation) {
if (aReadyState == READYSTATE_UNINITIALIZED) {
// Transition back to uninitialized happens only to keep assertions happy
// right before readyState transitions to something else. Make this
// transition undetectable by Web content.
mReadyState = rs;
mReadyState = aReadyState;
return;
}
if (IsTopLevelContentDocument()) {
if (rs == READYSTATE_LOADING) {
if (aReadyState == READYSTATE_LOADING) {
AddToplevelLoadingDocument(this);
} else if (rs == READYSTATE_COMPLETE) {
} else if (aReadyState == READYSTATE_COMPLETE) {
RemoveToplevelLoadingDocument(this);
}
}
if (updateTimingInformation && READYSTATE_LOADING == rs) {
mLoadingTimeStamp = mozilla::TimeStamp::Now();
if (aUpdateTimingInformation && READYSTATE_LOADING == aReadyState) {
mLoadingTimeStamp = TimeStamp::Now();
}
NotifyLoading(mAncestorIsLoading, mAncestorIsLoading, mReadyState, rs);
mReadyState = rs;
if (updateTimingInformation && mTiming) {
switch (rs) {
NotifyLoading(mAncestorIsLoading, mAncestorIsLoading, mReadyState,
aReadyState);
mReadyState = aReadyState;
if (aUpdateTimingInformation && mTiming) {
switch (aReadyState) {
case READYSTATE_LOADING:
mTiming->NotifyDOMLoading(Document::GetDocumentURI());
mTiming->NotifyDOMLoading(GetDocumentURI());
break;
case READYSTATE_INTERACTIVE:
mTiming->NotifyDOMInteractive(Document::GetDocumentURI());
mTiming->NotifyDOMInteractive(GetDocumentURI());
break;
case READYSTATE_COMPLETE:
mTiming->NotifyDOMComplete(Document::GetDocumentURI());
mTiming->NotifyDOMComplete(GetDocumentURI());
break;
default:
NS_WARNING("Unexpected ReadyState value");
MOZ_ASSERT_UNREACHABLE("Unexpected ReadyState value");
break;
}
}
// At the time of loading start, we don't have timing object, record time.
if (READYSTATE_INTERACTIVE == rs) {
if (READYSTATE_INTERACTIVE == aReadyState) {
if (!mXULPersist && nsContentUtils::IsSystemPrincipal(NodePrincipal())) {
mXULPersist = new XULPersist(this);
mXULPersist->Init();
}
}
if (updateTimingInformation) {
RecordNavigationTiming(rs);
if (aUpdateTimingInformation) {
RecordNavigationTiming(aReadyState);
}
RefPtr<AsyncEventDispatcher> asyncDispatcher =
@ -12757,6 +12759,24 @@ already_AddRefed<nsINode> Document::GetTooltipNode() {
return nullptr;
}
void Document::MaybeWarnAboutZoom() {
if (mHasWarnedAboutZoom) {
return;
}
const bool usedZoom =
mStyleUseCounters &&
Servo_IsUnknownPropertyRecordedInUseCounter(mStyleUseCounters.get(),
CountedUnknownProperty::Zoom);
if (!usedZoom) {
return;
}
mHasWarnedAboutZoom = true;
nsContentUtils::ReportToConsole(
nsIScriptError::warningFlag, NS_LITERAL_CSTRING("Layout"), this,
nsContentUtils::eLAYOUT_PROPERTIES, "ZoomPropertyWarning");
}
nsIHTMLCollection* Document::Children() {
if (!mChildrenCollection) {
mChildrenCollection =

View File

@ -2309,12 +2309,11 @@ class Document : public nsINode,
READYSTATE_INTERACTIVE = 3,
READYSTATE_COMPLETE = 4
};
// Set the readystate of the document. If updateTimingInformation is true,
// Set the readystate of the document. If aUpdateTimingInformation is true,
// this will record relevant timestamps in the document's performance timing.
// Some consumers (document.open is the only one right now, actually) don't
// want to do that, though.
void SetReadyStateInternal(ReadyState rs,
bool updateTimingInformation = true);
void SetReadyStateInternal(ReadyState, bool aUpdateTimingInformation = true);
ReadyState GetReadyStateEnum() { return mReadyState; }
void SetAncestorLoading(bool aAncestorIsLoading);
@ -3788,6 +3787,8 @@ class Document : public nsINode,
aDontWarnAboutMutationEventsAndAllowSlowDOMMutations;
}
void MaybeWarnAboutZoom();
// ParentNode
nsIHTMLCollection* Children();
uint32_t ChildElementCount();
@ -4887,6 +4888,12 @@ class Document : public nsINode,
// eDesignMode or eContentEditable.
bool mHasBeenEditable : 1;
// Whether we've warned about the CSS zoom property.
//
// We don't use the general deprecated operation mechanism for this because we
// also record this as a `CountedUnknownProperty`.
bool mHasWarnedAboutZoom : 1;
uint8_t mPendingFullscreenRequests;
uint8_t mXMLDeclarationBits;

View File

@ -16,10 +16,16 @@ add_task(async function test_initialize() {
gOldParentCanRecord = Telemetry.canRecordExtended;
Telemetry.canRecordExtended = true;
// Because canRecordExtended is a per-process variable, we need to make sure
// that all of the pages load in the same content process. Limit the number
// of content processes to at most 1 (or 0 if e10s is off entirely).
await SpecialPowers.pushPrefEnv({ set: [["dom.ipc.processCount", 1]] });
await SpecialPowers.pushPrefEnv({
set: [
// Because canRecordExtended is a per-process variable, we need to make sure
// that all of the pages load in the same content process. Limit the number
// of content processes to at most 1 (or 0 if e10s is off entirely).
["dom.ipc.processCount", 1],
["layout.css.use-counters.enabled", true],
["layout.css.use-counters-unimplemented.enabled", true],
],
});
gOldContentCanRecord = await ContentTask.spawn(
gBrowser.selectedBrowser,

View File

@ -709,7 +709,6 @@ skip-if = (verify && debug && (os == 'linux'))
skip-if = (verify && (os == 'win' || os == 'mac'))
[test_integer_attr_with_leading_zero.html]
[test_intersectionobservers.html]
fail-if = fission
[test_link_prefetch.html]
skip-if = !e10s # Track Bug 1281415
[test_link_preload.html]

View File

@ -1684,14 +1684,19 @@ IMEContentObserver::IMENotificationSender::Run() {
// If a text change notification causes another text change again, we should
// notify IME of that before sending a selection change notification.
// Otherwise, even if the observer hasn't received selection change, let's
// try to send selection change notification to IME because selection
// start offset may be changed if the previous contents of selection start
// are changed. For example, when previous `<p>` element of another `<p>`
// element which contains caret is removed by a DOM mutation, selection
// change event won't be fired, but selection start offset should be
// decreased by the length of removed `<p>` element.
if (!observer->mNeedsToNotifyIMEOfTextChange) {
// Be aware, PuppetWidget depends on the order of this. A selection change
// notification should not be sent before a text change notification because
// PuppetWidget shouldn't query new text content every selection change.
if (observer->mNeedsToNotifyIMEOfSelectionChange) {
observer->mNeedsToNotifyIMEOfSelectionChange = false;
SendSelectionChange();
}
observer->mNeedsToNotifyIMEOfSelectionChange = false;
SendSelectionChange();
}
// If a text change notification causes another text change again or a

View File

@ -20,6 +20,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=450876
/** Test for Bug 450876 **/
function setTabFocus() {
// Override tab focus behavior on Mac */
SpecialPowers.pushPrefEnv({ set: [[ "accessibility.tabfocus", 7 ]] }, doTest);
}
function doTest() {
is(document.activeElement, document.body, "body element should be focused");
document.getElementById('a').focus();
@ -33,7 +38,7 @@ function doTest() {
}
SimpleTest.waitForExplicitFinish();
addLoadEvent(doTest);
addLoadEvent(setTabFocus);
</script>
</pre>

View File

@ -23,12 +23,6 @@ proxyResolveFailure=The proxy server you have configured could not be found. Ple
proxyConnectFailure=The connection was refused when attempting to contact the proxy server you have configured. Please check your proxy settings and try again.
contentEncodingError=The page you are trying to view cannot be shown because it uses an invalid or unsupported form of compression.
unsafeContentType=The page you are trying to view cannot be shown because it is contained in a file type that may not be safe to open. Please contact the website owners to inform them of this problem.
externalProtocolTitle=External Protocol Request
externalProtocolPrompt=An external application must be launched to handle %1$S: links.\n\n\nRequested link:\n\n%2$S\n\nApplication: %3$S\n\n\nIf you were not expecting this request it may be an attempt to exploit a weakness in that other program. Cancel this request unless you are sure it is not malicious.\n
#LOCALIZATION NOTE (externalProtocolUnknown): The following string is shown if the application name can't be determined
externalProtocolUnknown=<Unknown>
externalProtocolChkMsg=Remember my choice for all links of this type.
externalProtocolLaunchBtn=Launch application
malwareBlocked=The site at %S has been reported as an attack site and has been blocked based on your security preferences.
harmfulBlocked=The site at %S has been reported as a potentially harmful site and has been blocked based on your security preferences.
unwantedBlocked=The site at %S has been reported as serving unwanted software and has been blocked based on your security preferences.

View File

@ -17,16 +17,12 @@ StopScriptButton=Stop script
DebugScriptButton=Debug script
WaitForScriptButton=Continue
DontAskAgain=&Dont ask me again
JSURLLoadBlockedWarning=Attempt to load a javascript: URL from one host\nin a window displaying content from another host\nwas blocked by the security manager.
WindowCloseBlockedWarning=Scripts may not close windows that were not opened by script.
OnBeforeUnloadTitle=Are you sure?
OnBeforeUnloadMessage=This page is asking you to confirm that you want to leave - data you have entered may not be saved.
OnBeforeUnloadStayButton=Stay on Page
OnBeforeUnloadLeaveButton=Leave Page
UnexpectedCanvasVariantStyle=canvas: an attempt to set strokeStyle or fillStyle to a value that is neither a string, a CanvasGradient, or a CanvasPattern was ignored.
EmptyGetElementByIdParam=Empty string passed to getElementById().
LowMemoryTitle=Warning: Low memory
LowMemoryMessage=A script on this page has been stopped due to a low memory condition.
SpeculationFailed=An unbalanced tree was written using document.write() causing data from the network to be reparsed. For more information https://developer.mozilla.org/en/Optimizing_Your_Pages_for_Speculative_Parsing
DocumentWriteIgnored=A call to document.write() from an asynchronously-loaded external script was ignored.
# LOCALIZATION NOTE (EditorFileDropFailed): Do not translate contenteditable, %S is the error message explaining why the drop failed.
@ -57,7 +53,6 @@ FormValidationStepMismatch=Please select a valid value. The two nearest valid va
# LOCALIZATION NOTE (FormValidationStepMismatchOneValue): %S can be a number, a date or a time. This is called instead of FormValidationStepMismatch when the second value is the same as the first.
FormValidationStepMismatchOneValue=Please select a valid value. The nearest valid value is %S.
FormValidationBadInputNumber=Please enter a number.
EnablePrivilegeWarning=Use of enablePrivilege is deprecated. Please use code that runs with the system principal (e.g. an extension) instead.
FullscreenDeniedDisabled=Request for fullscreen was denied because Fullscreen API is disabled by user preference.
FullscreenDeniedFocusedPlugin=Request for fullscreen was denied because a windowed plugin is focused.
FullscreenDeniedHidden=Request for fullscreen was denied because the document is no longer visible.
@ -84,7 +79,6 @@ PointerLockDeniedMovedDocument=Request for pointer lock was denied because the r
PointerLockDeniedNotInputDriven=Request for pointer lock was denied because Element.requestPointerLock() was not called from inside a short running user-generated event handler, and the document is not in full screen.
PointerLockDeniedFailedToLock=Request for pointer lock was denied because the browser failed to lock the pointer.
HTMLSyncXHRWarning=HTML parsing in XMLHttpRequest is not supported in the synchronous mode.
InvalidRedirectChannelWarning=Unable to redirect to %S because the channel doesnt implement nsIWritablePropertyBag2.
# LOCALIZATION NOTE: %S is the name of the header in question
ForbiddenHeaderWarning=Attempt to set a forbidden header was denied: %S
ResponseTypeSyncXHRWarning=Use of XMLHttpRequests responseType attribute is no longer supported in the synchronous mode in window context.
@ -92,8 +86,6 @@ TimeoutSyncXHRWarning=Use of XMLHttpRequests timeout attribute is not support
# LOCALIZATION NOTE: Do not translate navigator.sendBeacon, unload, pagehide, or XMLHttpRequest.
UseSendBeaconDuringUnloadAndPagehideWarning=Use of navigator.sendBeacon instead of synchronous XMLHttpRequest during unload and pagehide improves user experience.
JSONCharsetWarning=An attempt was made to declare a non-UTF-8 encoding for JSON retrieved using XMLHttpRequest. Only UTF-8 is supported for decoding JSON.
# LOCALIZATION NOTE: Do not translate AudioBufferSourceNode
MediaBufferSourceNodeResampleOutOfMemory=Insufficient memory to resample the AudioBufferSourceNode for playback.
# LOCALIZATION NOTE: Do not translate decodeAudioData.
MediaDecodeAudioDataUnknownContentType=The buffer passed to decodeAudioData contains an unknown content type.
# LOCALIZATION NOTE: Do not translate decodeAudioData.
@ -113,8 +105,6 @@ MediaElementAudioCaptureOfMediaStreamError=The captured HTMLMediaElement is play
MediaLoadExhaustedCandidates=All candidate resources failed to load. Media load paused.
MediaLoadSourceMissingSrc=<source> element has no “src” attribute. Media resource load failed.
MediaStreamAudioSourceNodeDifferentRate=Connecting AudioNodes from AudioContexts with different sample-rate is currently not supported.
# LOCALIZATION NOTE: Do not translate ConvolverNode
ConvolverNodeAllocationError=Out-of-memory error when instantiating a ConvolverNode: the node will output silence.
# LOCALIZATION NOTE: %1$S is the Http error code the server returned (e.g. 404, 500, etc), %2$S is the URL of the media resource which failed to load.
MediaLoadHttpError=HTTP load failed with status %1$S. Load of media resource %2$S failed.
# LOCALIZATION NOTE: %S is the URL of the media resource which failed to load.
@ -122,8 +112,6 @@ MediaLoadInvalidURI=Invalid URI. Load of media resource %S failed.
# LOCALIZATION NOTE: %1$S is the media resource's format/codec type (basically equivalent to the file type, e.g. MP4,AVI,WMV,MOV etc), %2$S is the URL of the media resource which failed to load.
MediaLoadUnsupportedTypeAttribute=Specified “type” attribute of “%1$S” is not supported. Load of media resource %2$S failed.
MediaLoadUnsupportedTypeAttributeLoadingNextChild=Specified “type” attribute of “%1$S” is not supported. Load of media resource %2$S failed. Trying to load from next <source> element.
# LOCALIZATION NOTE: %1$S is the "media" attribute value of the <source> element. It is a media query. %2$S is the URL of the media resource which failed to load.
MediaLoadSourceMediaNotMatched=Specified “media” attribute of “%1$S” does not match the environment. Load of media resource %2$S failed.
# LOCALIZATION NOTE: %1$S is the MIME type HTTP header being sent by the web server, %2$S is the URL of the media resource which failed to load.
MediaLoadUnsupportedMimeType=HTTP “Content-Type” of “%1$S” is not supported. Load of media resource %2$S failed.
# LOCALIZATION NOTE: %S is the URL of the media resource which failed to load because of error in decoding.
@ -145,8 +133,6 @@ MediaNoDecoders=No decoders for some of the requested formats: %S
MediaCannotInitializePulseAudio=Unable to use PulseAudio
# LOCALIZATION NOTE: Do not translate "MediaRecorder".
MediaRecorderMultiTracksNotSupported=MediaRecorder does not support recording multiple tracks of the same type at this time.
# LOCALIZATION NOTE: %S is the ID of the MediaStreamTrack passed to MediaStream.addTrack(). Do not translate "MediaStreamTrack" and "AudioChannel".
MediaStreamAddTrackDifferentAudioChannel=MediaStreamTrack %S could not be added since it belongs to a different AudioChannel.
# LOCALIZATION NOTE: %S is the URL of the web page which is not served on HTTPS and thus is not encrypted and considered insecure.
MediaEMEInsecureContextDeprecatedWarning=Using Encrypted Media Extensions at %S on an insecure (i.e. non-HTTPS) context is deprecated and will soon be removed. You should consider switching to a secure origin such as HTTPS.
# LOCALIZATION NOTE: %S is the URL of the web page which is calling web APIs without passing data (either an audioCapabilities or a videoCapabilities) that will soon be required. See https://bugzilla.mozilla.org/show_bug.cgi?id=1368583#c21 for explanation of this string.
@ -179,7 +165,6 @@ UseOfDOM3LoadMethodWarning=Use of document.load() is deprecated. To upgrade your
ShowModalDialogWarning=Use of window.showModalDialog() is deprecated. Use window.open() instead. For more help https://developer.mozilla.org/en-US/docs/Web/API/Window.open
# LOCALIZATION NOTE: Do not translate "XMLHttpRequest"
SyncXMLHttpRequestWarning=Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end users experience. For more help http://xhr.spec.whatwg.org/
ImplicitMetaViewportTagFallback=No meta-viewport tag found. Please explicitly specify one to prevent unexpected behavioural changes in future versions. For more help https://developer.mozilla.org/en/docs/Mozilla/Mobile/Viewport_meta_tag
# LOCALIZATION NOTE: Do not translate "window.controllers/Controllers"
Window_Cc_ontrollersWarning=window.controllers/Controllers is deprecated. Do not use it for UA detection.
ImportXULIntoContentWarning=Importing XUL nodes into a content document is deprecated. This functionality may be removed soon.
@ -314,10 +299,6 @@ PreventDefaultFromPassiveListenerWarning=Ignoring preventDefault() call on
ImageBitmapRenderingContext_TransferImageBitmapWarning=ImageBitmapRenderingContext.transferImageBitmap is deprecated and will be removed soon. Use ImageBitmapRenderingContext.transferFromImageBitmap instead.
IIRFilterChannelCountChangeWarning=IIRFilterNode channel count changes may produce audio glitches.
BiquadFilterChannelCountChangeWarning=BiquadFilterNode channel count changes may produce audio glitches.
# LOCALIZATION NOTE: Do not translate ".jpeg"
GenericImageNameJPEG=image.jpeg
# LOCALIZATION NOTE: Do not translate ".gif"
GenericImageNameGIF=image.gif
# LOCALIZATION NOTE: Do not translate ".png"
GenericImageNamePNG=image.png
GenericFileName=file

View File

@ -5,179 +5,40 @@
MimeNotCss=The stylesheet %1$S was not loaded because its MIME type, “%2$S”, is not “text/css”.
MimeNotCssWarn=The stylesheet %1$S was loaded as CSS even though its MIME type, “%2$S”, is not “text/css”.
PEUnexpEOF2=Unexpected end of file while searching for %1$S.
PEParseRuleWSOnly=Whitespace-only string given to be parsed as rule.
PEDeclDropped=Declaration dropped.
PEDeclSkipped=Skipped to next declaration.
PEUnknownProperty=Unknown property %1$S.
PEValueParsingError=Error in parsing value for %1$S.
PEExpectEndValue=Expected end of value but found %1$S.
PERuleTrailing=Expected end of rule but found %1$S.
PESkipAtRuleEOF2=end of at-rule
PEUnknownAtRule=Unrecognized at-rule or error parsing at-rule %1$S.
PECharsetRuleEOF=charset string in @charset rule
PECharsetRuleNotString=Expected charset string but found %1$S.
PEGatherMediaEOF=end of media list in @import or @media rule
PEMQUnexpectedOperator=Unexpected operator in media list.
PEMQUnexpectedToken=Unexpected token %1$S in media list.
PEGatherMediaNotComma=Expected , in media list but found %1$S.
PEGatherMediaNotIdent=Expected identifier in media list but found %1$S.
PEGatherMediaReservedMediaType=Found reserved keyword %1$S when looking for media type.
PEParseSourceSizeListEOF=length value for matched media condition
PEParseSourceSizeListNotComma=Expected , after value but found %1$S
PEImportNotURI=Expected URI in @import rule but found %1$S.
PEImportBadURI=Invalid URI in @import rule: %1$S.
PEImportUnexpected=Found unexpected %1$S within @import.
PEGroupRuleEOF2=end of @media, @supports or @-moz-document rule
PEGroupRuleNestedAtRule=%1$S rule not allowed within @media or @-moz-document rule.
PEMozDocRuleBadFunc2=Expected url(), url-prefix(), domain() or regexp() in @-moz-document rule but found %1$S.
PEMozDocRuleNotURI=Expected URI in @-moz-document rule but found %1$S.
PEMozDocRuleNotString=Expected string in @-moz-document rule regexp() function but found %1$S.
PEMozDocRuleEOF=next URI in @-moz-document rule
PEAtNSPrefixEOF=namespace prefix in @namespace rule
PEAtNSURIEOF=namespace URI in @namespace rule
PEAtNSUnexpected=Unexpected token within @namespace: %1$S.
PEKeyframeNameEOF=name of @keyframes rule.
PEKeyframeBadName=Expected identifier for name of @keyframes rule.
PEKeyframeBrace=Expected opening { of @keyframes rule.
PESkipDeclBraceEOF=closing } of declaration block
PESkipRSBraceEOF=closing } of invalid rule set
PEBadSelectorRSIgnored=Ruleset ignored due to bad selector.
PEBadSelectorKeyframeRuleIgnored=Keyframe rule ignored due to bad selector.
PESelectorListExtraEOF=, or {
PESelectorListExtra=Expected , or { but found %1$S.
PESelectorGroupNoSelector=Selector expected.
PESelectorGroupExtraCombinator=Dangling combinator.
PECounterStyleNotIdent=Expected identifier for name of @counter-style rule.
PECounterStyleBadName=Name of @counter-style rule cant be %1$S.
PECounterStyleBadBlockStart=Expected { to begin @counter-style rule but found %1$S.
PECounterStyleEOF=closing } of @counter-style block
PECounterDescExpected=Expected counter descriptor but found %1$S.
PEUnknownCounterDesc=Unknown descriptor %1$S in @counter-style rule.
PECounterExtendsNotIdent=Expected identifier for extends system but found %1$S.
PECounterASWeight=Each weight in the additive-symbols descriptor must be smaller than the previous weight.
PEClassSelEOF=class name
PEClassSelNotIdent=Expected identifier for class selector but found %1$S.
PECoordinatePair=Expected coordinate pair but found %1$S.
PETypeSelEOF=element type
PETypeSelNotType=Expected element name or * but found %1$S.
PEUnknownNamespacePrefix=Unknown namespace prefix %1$S.
PEAttributeNameEOF=attribute name
PEAttributeNameExpected=Expected identifier for attribute name but found %1$S.
PEAttributeNameOrNamespaceExpected=Expected attribute name or namespace but found %1$S.
PEAttSelNoBar=Expected | but found %1$S.
PEAttSelInnerEOF=part of attribute selector
PEAttSelUnexpected=Unexpected token in attribute selector: %1$S.
PEAttSelValueEOF=attribute value
PEAttSelCloseEOF=] to end attribute selector
PEAttSelNoClose=Expected ] to terminate attribute selector but found %1$S.
PEAttSelBadValue=Expected identifier or string for value in attribute selector but found %1$S.
PEPseudoSelEOF=name of pseudo-class or pseudo-element
PEPseudoSelBadName=Expected identifier for pseudo-class or pseudo-element but found %1$S.
PEPseudoSelNonFunc=Function token for non-function pseudo-class or pseudo-element, or the other way around, when reading %1$S.
PEPseudoSelNotPE=Expected pseudo-element but found %1$S.
PEPseudoSelDoubleNot=Negation pseudo-class cant be negated %1$S.
PEPseudoSelPEInNot=Pseudo-elements cant be negated %1$S.
PEPseudoSelNewStyleOnly=This pseudo-element must use the “::” form: %1$S.
PEPseudoSelEndOrUserActionPC=Expected end of selector or a user action pseudo-class after pseudo-element but found %1$S.
PEPseudoSelNoUserActionPC=Expected end of selector after pseudo-element that does not support user action pseudo-classes but found %1$S.
PEPseudoSelMultiplePE=Extra pseudo-element %1$S.
PEPseudoSelUnknown=Unknown pseudo-class or pseudo-element %1$S.
PENegationEOF=selector within negation
PENegationBadInner=Malformed simple selector as negation pseudo-class argument %1$S.
PENegationNoClose=Missing closing ) in negation pseudo-class %1$S.
PENegationBadArg=Missing argument in negation pseudo-class %1$S.
PEPseudoClassArgEOF=argument to pseudo-class selector
PEPseudoClassArgNotIdent=Expected identifier for pseudo-class parameter but found %1$S.
PEPseudoClassArgNotNth=Expected part of argument to pseudo-class but found %1$S.
PEPseudoClassNoClose=Missing closing ) in pseudo-class, found %1$S instead.
PEPseudoClassNoArg=Missing argument in pseudo-class %1$S.
PEPseudoClassNotUserAction=Expected end of selector or a user action pseudo-class after pseudo-element but found pseudo-class %1$S.
PESelectorEOF=selector
PEBadDeclBlockStart=Expected { to begin declaration block but found %1$S.
PEColorEOF=color
PEColorNotColor=Expected color but found %1$S.
PEColorComponentEOF=color component
PEExpectedPercent=Expected a percentage but found %1$S.
PEExpectedInt=Expected an integer but found %1$S.
PEExpectedNumberOrAngle=Expected a number or an angle but found %1$S.
PEExpectedNumberOrPercent=Expected a number or a percentage but found %1$S.
PEColorBadRGBContents=Expected number or percentage in rgb() but found %1$S.
PEColorComponentBadTerm=Expected %2$S but found %1$S.
PEExpectedComma=Expected , but found %1$S.
PEColorSaturationEOF=saturation
PEColorLightnessEOF=lightness
PEColorOpacityEOF=opacity in color value
PEExpectedNumber=Expected a number but found %1$S.
PEPositionEOF=<position>
PEExpectedPosition=Expected <position> but found %1$S.
PEExpectedRadius=Expected radius but found %1$S.
PEExpectedCloseParen=Expected ) but found %1$S.
PEDeclEndEOF=; or } to end declaration
PEParseDeclarationNoColon=Expected : but found %1$S.
PEParseDeclarationDeclExpected=Expected declaration but found %1$S.
PEEndOfDeclEOF=end of declaration
PEImportantEOF=important
PEExpectedImportant=Expected important but found %1$S.
PEBadDeclEnd=Expected ; to terminate declaration but found %1$S.
PEBadDeclOrRuleEnd2=Expected ; or } to terminate declaration but found %1$S.
PEInaccessibleProperty2=Cannot specify value for internal property.
PECommentEOF=end of comment
SEUnterminatedString=Found unclosed string %1$S.
PEFontDescExpected=Expected font descriptor but found %1$S.
PEUnknownFontDesc=Unknown descriptor %1$S in @font-face rule.
PEMQExpectedExpressionStart=Expected ( to start media query expression but found %1$S.
PEMQExpressionEOF=contents of media query expression
PEMQExpectedFeatureName=Expected media feature name but found %1$S.
PEMQExpectedFeatureNameEnd=Expected : or ) after media feature name but found %1$S.
PEMQNoMinMaxWithoutValue=Media features with min- or max- must have a value.
PEMQExpectedFeatureValue=Found invalid value for media feature.
PEBadFontBlockStart=Expected { to begin @font-face rule but found %1$S.
PEBadFontBlockEnd=Expected } to end @font-face rule but found %1$S.
PEAnonBoxNotAlone=Did not expect anonymous box.
PEFFVUnexpectedEOF=Unexpected end of @font-feature-values rule.
PEFFVBlockStart=Expected opening { of @font-feature-values rule but found %1$S.
PEFFVValueSetStart=Expected opening { of feature value set but found %1$S.
PEFFVNoFamily=Expected font family list for @font-feature-values rule but found %1$S.
PEFFVUnexpectedBlockEnd=Expected } to end @font-feature-values rule but found %1$S.
PEFFVUnknownFontVariantPropValue=Unknown font-variant property value %1$S.
PEFFVExpectedIdent=Expected identifier but found %1$S.
PEFFVExpectedValue=Expected non-negative integer value but found %1$S.
PEFFVTooManyValues=Too many values for feature type %1$S.
PEFFVGenericInFamilyList=Family list cannot contain generic font family name.
PEFFVValueDefinitionTrailing=Expected end of value definition but found %1$S.
PEBadDirValue=Expected ltr or rtl in direction selector but found %1$S.
PESupportsConditionStartEOF2=not, (, or function
PESupportsConditionInParensEOF=)
PESupportsConditionNotEOF=not
PESupportsWhitespaceRequired=Expected whitespace after not, and, or or.
PESupportsConditionExpectedOpenParenOrFunction=Expected ( or function while parsing supports condition but found %1$S.
PESupportsConditionExpectedCloseParen=Expected ) while parsing supports condition but found %1$S.
PESupportsConditionExpectedStart2=Expected not, (, or function while parsing supports condition but found %1$S.
PESupportsConditionExpectedNot=Expected not while parsing supports condition but found %1$S.
PESupportsGroupRuleStart=Expected { to begin @supports rule but found %1$S.
PEFilterEOF=filter
PEExpectedNoneOrURL=Expected none or URL but found %1$S.
PEExpectedNoneOrURLOrFilterFunction=Expected none, URL, or filter function but found %1$S.
PEExpectedNonnegativeNP=Expected non-negative number or percentage.
PEFilterFunctionArgumentsParsingError=Error in parsing arguments for filter function.
PEVariableEOF=variable
PEVariableEmpty=Expected variable value but found %1$S.
# LOCALIZATION NOTE(PEValueWithVariablesParsingErrorInValue): %1$S is replaced
# with the property name and %2$S is replaced with the property value.
PEValueWithVariablesParsingErrorInValue=Error in parsing value for %1$S after substituting variables. Generated value was %2$S.
PEValueWithVariablesFallbackInherit=Falling back to inherit.
PEValueWithVariablesFallbackInitial=Falling back to initial.
PEInvalidVariableReference=Property contained reference to invalid variable.
PEInvalidVariableTokenFallback=Found invalid token %1$S at top level of variable reference fallback.
PEExpectedVariableNameEOF=identifier for variable name
PEExpectedVariableName=Expected identifier for variable name but found %1$S.
PEExpectedVariableFallback=Expected variable reference fallback after ,.
PEExpectedVariableCommaOrCloseParen=Expected , or ) after variable name in variable reference but found %1$S.
PESubgridNotSupported=Support for the subgrid keyword of CSS Grid is not enabled.
PEMoreThanOneGridRepeatAutoFillInNameList=Only one repeat(auto-fill, …) is allowed in a name list for a subgrid.
PEMoreThanOneGridRepeatAutoFillFitInTrackList=Only one repeat(auto-fill, …) or repeat(auto-fit, …) is allowed in a track list.
PEMoreThanOneGridRepeatTrackSize=Only one track size is allowed inside repeat(auto-fit/auto-fill, …).
TooLargeDashedRadius=Border radius is too large for dashed style (the limit is 100000px). Rendering as solid.
TooLargeDottedRadius=Border radius is too large for dotted style (the limit is 100000px). Rendering as solid.

View File

@ -39,3 +39,6 @@ CompositorAnimationWarningTransformFrameInactive=Animation cannot be run on the
CompositorAnimationWarningTransformIsBlockedByImportantRules=Transform animation cannot be run on the compositor because transform-related properties are overridden by !important rules
CompositorAnimationWarningOpacityFrameInactive=Animation cannot be run on the compositor because the frame was not marked active for opacity animation
CompositorAnimationWarningHasRenderingObserver=Animation cannot be run on the compositor because the element has rendering observers (-moz-element or SVG clipping/masking)
## LOCALIZATION NOTE: Do not translate zoom, calc(), "transform", "transform-origin: 0 0"
ZoomPropertyWarning=This page uses the non standard property “zoom”. Consider using calc() in the relevant property values, or using “transform” along with “transform-origin: 0 0”.

View File

@ -18,11 +18,7 @@ pagenumber=%1$d
# the second %ld will receive the total number of pages
pageofpages=%1$d of %2$d
noprinter=No printers available.
PrintToFile=Print To File
noPrintFilename.title=Filename is missing
noPrintFilename.alert=You have selected “Print To File”, and the filename is empty!
fileConfirm.exists=%S already exists.\nDo you want to replace it?
print_error_dialog_title=Printer Error
printpreview_error_dialog_title=Print Preview Error

View File

@ -11,5 +11,4 @@ CircularExtendsBinding=Extending the XBL binding “%S” with “%S” would le
# LOCALIZATION NOTE: do not localize <handler command="…">
CommandNotInChrome=Use of <handler command="…"> not allowed outside chrome.
MalformedXBL = An XBL file is malformed. Did you forget the XBL namespace on the bindings tag?
InvalidExtendsBinding=Extending “%S” is invalid. In general, do not extend tag names.
MissingIdAttr = An “id” attribute missing on the binding tag.

View File

@ -2,7 +2,6 @@
# 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/.
MissingOverlay=Failed to load overlay from %1$S.
PINotInProlog=<?%1$S?> processing instruction does not have any effect outside the prolog anymore (see bug 360119).
NeededToWrapXUL=XUL box for %1$S element contained an inline %2$S child, forcing all its children to be wrapped in a block.
NeededToWrapXULInlineBox=XUL box for %1$S element contained an inline %2$S child, forcing all its children to be wrapped in a block. This can often be fixed by replacing “display: -moz-inline-box” with “display: -moz-inline-box; display: inline-block”.

View File

@ -3,110 +3,7 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
CheckLoadURIError = Security Error: Content at %S may not load or link to %S.
CheckSameOriginError = Security Error: Content at %S may not load data from %S.
ExternalDataError = Security Error: Content at %S attempted to load %S, but may not load external data when being used as an image.
ExternalDataError = Security Error: Content at %S attempted to load %S, but may not load external data when being used as an image.
# LOCALIZATION NOTE (GetPropertyDeniedOrigins):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the property of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
GetPropertyDeniedOrigins = Permission denied for <%1$S> to get property %2$S.%3$S from <%4$S>.
# LOCALIZATION NOTE (GetPropertyDeniedOriginsSubjectDomain):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the property of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
# %5$S is the value of document.domain for the script which was denied access;
# don't translate "document.domain".
GetPropertyDeniedOriginsSubjectDomain = Permission denied for <%1$S> (document.domain=<%5$S>) to get property %2$S.%3$S from <%4$S> (document.domain has not been set).
# LOCALIZATION NOTE (GetPropertyDeniedOriginsObjectDomain):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the property of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
# %5$S is the value of document.domain for the object being accessed;
# don't translate "document.domain".
GetPropertyDeniedOriginsObjectDomain = Permission denied for <%1$S> (document.domain has not been set) to get property %2$S.%3$S from <%4$S> (document.domain=<%5$S>).
# LOCALIZATION NOTE (GetPropertyDeniedOriginsSubjectDomainObjectDomain):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the property of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
# %5$S is the value of document.domain for the script which was denied access;
# don't translate "document.domain"
# %6$S is the value of document.domain for the object being accessed;
# don't translate "document.domain".
GetPropertyDeniedOriginsSubjectDomainObjectDomain = Permission denied for <%1$S> (document.domain=<%5$S>) to get property %2$S.%3$S from <%4$S> (document.domain=<%6$S>).
# LOCALIZATION NOTE (SetPropertyDeniedOrigins):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the property of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
SetPropertyDeniedOrigins = Permission denied for <%1$S> to set property %2$S.%3$S on <%4$S>.
# LOCALIZATION NOTE (SetPropertyDeniedOriginsSubjectDomain):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the property of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
# %5$S is the value of document.domain for the script which was denied access;
# don't translate "document.domain".
SetPropertyDeniedOriginsSubjectDomain = Permission denied for <%1$S> (document.domain=<%5$S>) to set property %2$S.%3$S on <%4$S> (document.domain has not been set).
# LOCALIZATION NOTE (SetPropertyDeniedOriginsObjectDomain):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the property of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
# %5$S is the value of document.domain for the object being accessed;
# don't translate "document.domain".
SetPropertyDeniedOriginsObjectDomain = Permission denied for <%1$S> (document.domain has not been set) to set property %2$S.%3$S on <%4$S> (document.domain=<%5$S>).
# LOCALIZATION NOTE (SetPropertyDeniedOriginsSubjectDomainObjectDomain):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the property of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
# %5$S is the value of document.domain for the script which was denied access;
# don't translate "document.domain"
# %6$S is the value of document.domain for the object being accessed;
# don't translate "document.domain".
SetPropertyDeniedOriginsSubjectDomainObjectDomain = Permission denied for <%1$S> (document.domain=<%5$S>) to set property %2$S.%3$S on <%4$S> (document.domain=<%6$S>).
# LOCALIZATION NOTE (CallMethodDeniedOrigins):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the method of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
CallMethodDeniedOrigins = Permission denied for <%1$S> to call method %2$S.%3$S on <%4$S>.
# LOCALIZATION NOTE (CallMethodDeniedOriginsSubjectDomain):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the method of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
# %5$S is the value of document.domain for the script which was denied access;
# don't translate "document.domain".
CallMethodDeniedOriginsSubjectDomain = Permission denied for <%1$S> (document.domain=<%5$S>) to call method %2$S.%3$S on <%4$S> (document.domain has not been set).
# LOCALIZATION NOTE (CallMethodDeniedOriginsObjectDomain):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the method of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
# %5$S is the value of document.domain for the object being accessed;
# don't translate "document.domain".
CallMethodDeniedOriginsObjectDomain = Permission denied for <%1$S> (document.domain has not been set) to call method %2$S.%3$S on <%4$S> (document.domain=<%5$S>).
# LOCALIZATION NOTE (CallMethodDeniedOriginsSubjectDomainObjectDomain):
# %1$S is the origin of the script which was denied access.
# %2$S is the type of object it was.
# %3$S is the method of that object that access was denied for.
# %4$S is the origin of the object access was denied to.
# %5$S is the value of document.domain for the script which was denied access;
# don't translate "document.domain"
# %6$S is the value of document.domain for the object being accessed;
# don't translate "document.domain".
CallMethodDeniedOriginsSubjectDomainObjectDomain = Permission denied for <%1$S> (document.domain=<%5$S>) to call method %2$S.%3$S on <%4$S> (document.domain=<%6$S>).
GetPropertyDeniedOriginsOnlySubject = Permission denied for <%S> to get property %S.%S
SetPropertyDeniedOriginsOnlySubject = Permission denied for <%S> to set property %S.%S
CallMethodDeniedOriginsOnlySubject = Permission denied for <%S> to call method %S.%S
CreateWrapperDenied = Permission denied to create wrapper for object of class %S
CreateWrapperDeniedForOrigin = Permission denied for <%2$S> to create wrapper for object of class %1$S
ProtocolFlagError = Warning: Protocol handler for %S doesnt advertise a security policy. While loading of such protocols is allowed for now, this is deprecated. Please see the documentation in nsIProtocolHandler.idl.

View File

@ -59,15 +59,6 @@ reportURInotInReportOnlyHeader = This site (%1$S) has a Report-Only policy witho
# LOCALIZATION NOTE (failedToParseUnrecognizedSource):
# %1$S is the CSP Source that could not be parsed
failedToParseUnrecognizedSource = Failed to parse unrecognized source %1$S
# LOCALIZATION NOTE (inlineScriptBlocked):
# inline script refers to JavaScript code that is embedded into the HTML document.
inlineScriptBlocked = An attempt to execute inline scripts has been blocked
# LOCALIZATION NOTE (inlineStyleBlocked):
# inline style refers to CSS code that is embedded into the HTML document.
inlineStyleBlocked = An attempt to apply inline style sheets has been blocked
# LOCALIZATION NOTE (scriptFromStringBlocked):
# eval is a name and should not be localized.
scriptFromStringBlocked = An attempt to call JavaScript from a string (by calling a function like eval) has been blocked
# LOCALIZATION NOTE (upgradeInsecureRequest):
# %1$S is the URL of the upgraded request; %2$S is the upgraded scheme.
upgradeInsecureRequest = Upgrading insecure request %1$S to use %2$S
@ -88,9 +79,6 @@ ignoringDirectiveWithNoValues = Ignoring %1$S since it does not contain an
# LOCALIZATION NOTE (ignoringReportOnlyDirective):
# %1$S is the directive that is ignored in report-only mode.
ignoringReportOnlyDirective = Ignoring sandbox directive when delivered in a report-only policy %1$S
# LOCALIZATION NOTE (deprecatedReferrerDirective):
# %1$S is the value of the deprecated Referrer Directive.
deprecatedReferrerDirective = Referrer Directive %1$S has been deprecated. Please use the Referrer-Policy header instead.
# LOCALIZATION NOTE (IgnoringSrcBecauseOfDirective):
# %1$S is the name of the src that is ignored.
# %2$S is the name of the directive that causes the src to be ignored.
@ -107,9 +95,6 @@ couldntParseInvalidSource = Couldnt parse invalid source %1$S
# LOCALIZATION NOTE (couldntParseInvalidHost):
# %1$S is the host that's invalid
couldntParseInvalidHost = Couldnt parse invalid host %1$S
# LOCALIZATION NOTE (couldntParseScheme):
# %1$S is the string source
couldntParseScheme = Couldnt parse scheme in %1$S
# LOCALIZATION NOTE (couldntParsePort):
# %1$S is the string source
couldntParsePort = Couldnt parse port in %1$S

View File

@ -21,8 +21,8 @@ support-files =
file_redirect_handler.sjs
[test_main.html]
skip-if =
(toolkit == 'android') || webrender || (verify && !debug && (os == 'linux')) # Android: TIMED_OUT; bug 1402554
skip-if = (toolkit == 'android') || webrender || (verify && !debug && (os == 'linux')) # Android: TIMED_OUT; bug 1402554
fail-if = fission #Bug 1580771, object did not follow block_active_content pref
[test_bug803225.html]
skip-if = (os=='linux' && bits==32) || headless # Linux32:bug 1324870; Headless:bug 1405870
[test_frameNavigation.html]

View File

@ -560,6 +560,7 @@ void VRManager::EnumerateVRDisplays() {
mFrameStarted = false;
mBrowserState.Clear();
mLastSensorState.Clear();
mEnumerationCompleted = false;
mDisplayInfo.mGroupMask = kVRGroupContent;
// We must block until enumeration has completed in order
// to signal that the WebVR promise should be resolved at the

View File

@ -0,0 +1,66 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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/. */
#include "DCLayerTree.h"
#include "mozilla/gfx/DeviceManagerDx.h"
#undef NTDDI_VERSION
#define NTDDI_VERSION NTDDI_WIN8
#include <d3d11.h>
#include <dcomp.h>
#include <dxgi1_2.h>
namespace mozilla {
namespace wr {
/* static */
UniquePtr<DCLayerTree> DCLayerTree::Create(HWND aHwnd) {
RefPtr<IDCompositionDevice> dCompDevice =
gfx::DeviceManagerDx::Get()->GetDirectCompositionDevice();
if (!dCompDevice) {
return nullptr;
}
auto layerTree = MakeUnique<DCLayerTree>(dCompDevice);
if (!layerTree->Initialize(aHwnd)) {
return nullptr;
}
return layerTree;
}
DCLayerTree::DCLayerTree(IDCompositionDevice* aCompositionDevice)
: mCompositionDevice(aCompositionDevice) {}
DCLayerTree::~DCLayerTree() {}
bool DCLayerTree::Initialize(HWND aHwnd) {
HRESULT hr = mCompositionDevice->CreateTargetForHwnd(
aHwnd, TRUE, getter_AddRefs(mCompositionTarget));
if (FAILED(hr)) {
gfxCriticalNote << "Could not create DCompositionTarget: " << gfx::hexa(hr);
return false;
}
hr = mCompositionDevice->CreateVisual(getter_AddRefs(mRootVisual));
if (FAILED(hr)) {
gfxCriticalNote << "Could not create DCompositionVisualt: "
<< gfx::hexa(hr);
return false;
}
return true;
}
void DCLayerTree::SetDefaultSwapChain(IDXGISwapChain1* aSwapChain) {
mRootVisual->SetContent(aSwapChain);
mCompositionTarget->SetRoot(mRootVisual);
mCompositionDevice->Commit();
}
} // namespace wr
} // namespace mozilla

View File

@ -0,0 +1,47 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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/. */
#ifndef MOZILLA_GFX_DCLAYER_TREE_H
#define MOZILLA_GFX_DCLAYER_TREE_H
#include <windows.h>
#include "mozilla/RefPtr.h"
#include "mozilla/UniquePtr.h"
struct IDCompositionDevice;
struct IDCompositionTarget;
struct IDCompositionVisual;
struct IDXGISwapChain1;
namespace mozilla {
namespace wr {
/**
* DCLayerTree manages direct composition layers.
* It does not manage gecko's layers::Layer.
*/
class DCLayerTree {
public:
static UniquePtr<DCLayerTree> Create(HWND aHwnd);
explicit DCLayerTree(IDCompositionDevice* aCompositionDevice);
~DCLayerTree();
void SetDefaultSwapChain(IDXGISwapChain1* aSwapChain);
protected:
bool Initialize(HWND aHwnd);
RefPtr<IDCompositionDevice> mCompositionDevice;
RefPtr<IDCompositionTarget> mCompositionTarget;
RefPtr<IDCompositionVisual> mRootVisual;
};
} // namespace wr
} // namespace mozilla
#endif

View File

@ -14,6 +14,7 @@
#include "mozilla/gfx/Logging.h"
#include "mozilla/layers/HelpersD3D11.h"
#include "mozilla/layers/SyncObject.h"
#include "mozilla/webrender/DCLayerTree.h"
#include "mozilla/webrender/RenderThread.h"
#include "mozilla/widget/CompositorWidget.h"
#include "mozilla/widget/WinCompositorWidget.h"
@ -257,44 +258,19 @@ void RenderCompositorANGLE::CreateSwapChainForDCompIfPossible(
return;
}
RefPtr<IDCompositionDevice> dCompDevice =
gfx::DeviceManagerDx::Get()->GetDirectCompositionDevice();
if (!dCompDevice) {
return;
}
MOZ_ASSERT(XRE_IsGPUProcess());
RefPtr<IDXGIDevice> dxgiDevice;
mDevice->QueryInterface((IDXGIDevice**)getter_AddRefs(dxgiDevice));
RefPtr<IDXGIFactory> dxgiFactory;
{
RefPtr<IDXGIAdapter> adapter;
dxgiDevice->GetAdapter(getter_AddRefs(adapter));
adapter->GetParent(
IID_PPV_ARGS((IDXGIFactory**)getter_AddRefs(dxgiFactory)));
}
HWND hwnd = mWidget->AsWindows()->GetCompositorHwnd();
if (!hwnd) {
gfxCriticalNote << "Compositor window was not created ";
return;
}
HRESULT hr = dCompDevice->CreateTargetForHwnd(
hwnd, TRUE, getter_AddRefs(mCompositionTarget));
if (FAILED(hr)) {
gfxCriticalNote << "Could not create DCompositionTarget: " << gfx::hexa(hr);
return;
}
hr = dCompDevice->CreateVisual(getter_AddRefs(mVisual));
if (FAILED(hr)) {
gfxCriticalNote << "Could not create DCompositionVisualt: "
<< gfx::hexa(hr);
mDCLayerTree = DCLayerTree::Create(hwnd);
if (!mDCLayerTree) {
return;
}
MOZ_ASSERT(XRE_IsGPUProcess());
HRESULT hr;
RefPtr<IDXGISwapChain1> swapChain1;
bool useTripleBuffering = gfx::gfxVars::UseWebRenderTripleBufferingWin();
@ -326,11 +302,11 @@ void RenderCompositorANGLE::CreateSwapChainForDCompIfPossible(
DXGI_RGBA color = {1.0f, 1.0f, 1.0f, 1.0f};
swapChain1->SetBackgroundColor(&color);
mSwapChain = swapChain1;
mVisual->SetContent(swapChain1);
mCompositionTarget->SetRoot(mVisual);
mCompositionDevice = dCompDevice;
mCompositionDevice->Commit();
mDCLayerTree->SetDefaultSwapChain(swapChain1);
mUseTripleBuffering = useTripleBuffering;
} else {
// Clear CLayerTree on falire
mDCLayerTree = nullptr;
}
}

View File

@ -17,9 +17,6 @@
struct ID3D11DeviceContext;
struct ID3D11Device;
struct ID3D11Query;
struct IDCompositionDevice;
struct IDCompositionTarget;
struct IDCompositionVisual;
struct IDXGIFactory2;
struct IDXGISwapChain;
@ -30,6 +27,8 @@ class GLLibraryEGL;
namespace wr {
class DCLayerTree;
class RenderCompositorANGLE : public RenderCompositor {
public:
static UniquePtr<RenderCompositor> Create(
@ -51,7 +50,7 @@ class RenderCompositorANGLE : public RenderCompositor {
bool UseANGLE() const override { return true; }
bool UseDComp() const override { return !!mCompositionDevice; }
bool UseDComp() const override { return !!mDCLayerTree; }
bool UseTripleBuffering() const override { return mUseTripleBuffering; }
@ -79,9 +78,7 @@ class RenderCompositorANGLE : public RenderCompositor {
RefPtr<ID3D11DeviceContext> mCtx;
RefPtr<IDXGISwapChain> mSwapChain;
RefPtr<IDCompositionDevice> mCompositionDevice;
RefPtr<IDCompositionTarget> mCompositionTarget;
RefPtr<IDCompositionVisual> mVisual;
UniquePtr<DCLayerTree> mDCLayerTree;
std::queue<RefPtr<ID3D11Query>> mWaitForPresentQueries;
RefPtr<ID3D11Query> mRecycledQuery;

View File

@ -60,6 +60,7 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
if CONFIG['MOZ_ENABLE_D3D10_LAYER']:
DEFINES['MOZ_ENABLE_D3D10_LAYER'] = True
EXPORTS.mozilla.webrender += [
'DCLayerTree.h',
'RenderCompositorANGLE.h',
'RenderD3D11TextureHostOGL.h',
]
@ -67,6 +68,7 @@ if CONFIG['MOZ_ENABLE_D3D10_LAYER']:
'RenderD3D11TextureHostOGL.cpp',
]
SOURCES += [
'DCLayerTree.cpp',
'RenderCompositorANGLE.cpp',
]

View File

@ -134,6 +134,18 @@ class JS_PUBLIC_API RealmCreationOptions {
return *this;
}
bool getReadableByteStreamsEnabled() const { return readableByteStreams_; }
RealmCreationOptions& setReadableByteStreamsEnabled(bool flag) {
readableByteStreams_ = flag;
return *this;
}
bool getBYOBStreamReadersEnabled() const { return byobStreamReaders_; }
RealmCreationOptions& setBYOBStreamReadersEnabled(bool enabled) {
byobStreamReaders_ = enabled;
return *this;
}
bool getFieldsEnabled() const { return fields_; }
RealmCreationOptions& setFieldsEnabled(bool flag) {
fields_ = flag;
@ -175,6 +187,8 @@ class JS_PUBLIC_API RealmCreationOptions {
bool cloneSingletons_ = false;
bool sharedMemoryAndAtomics_ = false;
bool streams_ = false;
bool readableByteStreams_ = false;
bool byobStreamReaders_ = false;
bool fields_ = false;
bool awaitFix_ = false;
bool secureContext_ = false;

View File

@ -318,6 +318,15 @@ static bool GetBuildConfiguration(JSContext* cx, unsigned argc, Value* vp) {
return false;
}
#ifdef MOZ_UBSAN
value = BooleanValue(true);
#else
value = BooleanValue(false);
#endif
if (!JS_SetProperty(cx, info, "ubsan", value)) {
return false;
}
#ifdef JS_GC_ZEAL
value = BooleanValue(true);
#else

View File

@ -17,6 +17,7 @@
#include "builtin/Array.h" // js::NewDenseFullyAllocatedArray
#include "builtin/streams/ClassSpecMacro.h" // JS_STREAMS_CLASS_SPEC
#include "builtin/streams/MiscellaneousOperations.h" // js::MakeSizeAlgorithmFromSizeFunction, js::ValidateAndNormalizeHighWaterMark, js::ReturnPromiseRejectedWithPendingError
#include "builtin/streams/ReadableStreamController.h" // js::ReadableStream{,Default}Controller, js::ReadableByteStreamController
#include "builtin/streams/ReadableStreamDefaultControllerOperations.h" // js::SetUpReadableStreamDefaultControllerFromUnderlyingSource
#include "builtin/streams/ReadableStreamInternals.h" // js::ReadableStreamCancel
#include "builtin/streams/ReadableStreamOperations.h" // js::ReadableStreamTee
@ -25,7 +26,7 @@
#include "js/Class.h" // JSCLASS_PRIVATE_IS_NSISUPPORTS, JSCLASS_HAS_PRIVATE, JS_NULL_CLASS_OPS
#include "js/PropertySpec.h" // JS{Function,Property}Spec, JS_FN, JS_PSG, JS_{FS,PS}_END
#include "js/RootingAPI.h" // JS::Handle, JS::Rooted, js::CanGC
#include "js/Stream.h" // JS::ReadableStreamUnderlyingSource
#include "js/Stream.h" // JS::ReadableStream{Mode,UnderlyingSource}
#include "js/Value.h" // JS::Value
#include "vm/JSContext.h" // JSContext
#include "vm/JSObject.h" // js::GetPrototypeFromBuiltinConstructor
@ -62,6 +63,16 @@ using JS::Value;
/*** 3.2. Class ReadableStream **********************************************/
JS::ReadableStreamMode ReadableStream::mode() const {
ReadableStreamController* controller = this->controller();
if (controller->is<ReadableStreamDefaultController>()) {
return JS::ReadableStreamMode::Default;
}
return controller->as<ReadableByteStreamController>().hasExternalSource()
? JS::ReadableStreamMode::ExternalSource
: JS::ReadableStreamMode::Byte;
}
ReadableStream* ReadableStream::createExternalSourceStream(
JSContext* cx, JS::ReadableStreamUnderlyingSource* source,
void* nsISupportsObject_alreadyAddreffed /* = nullptr */,

View File

@ -51,16 +51,6 @@ using JS::Rooted;
using JS::UndefinedHandleValue;
using JS::Value;
JS::ReadableStreamMode ReadableStream::mode() const {
ReadableStreamController* controller = this->controller();
if (controller->is<ReadableStreamDefaultController>()) {
return JS::ReadableStreamMode::Default;
}
return controller->as<ReadableByteStreamController>().hasExternalSource()
? JS::ReadableStreamMode::ExternalSource
: JS::ReadableStreamMode::Byte;
}
/*** 3.5. The interface between readable streams and controllers ************/
/**

View File

@ -656,7 +656,8 @@ MSG_DEF(JSMSG_GET_ASYNC_ITER_RETURNED_PRIMITIVE, 0, JSEXN_TYPEERR, "[Symbol.asyn
// ReadableStream
MSG_DEF(JSMSG_READABLESTREAM_UNDERLYINGSOURCE_TYPE_WRONG,0, JSEXN_RANGEERR,"'underlyingSource.type' must be \"bytes\" or undefined.")
MSG_DEF(JSMSG_READABLESTREAM_BYTES_TYPE_NOT_IMPLEMENTED, 0, JSEXN_RANGEERR,"'underlyingSource.type' must be \"bytes\" or undefined.")
MSG_DEF(JSMSG_READABLESTREAM_BYTES_TYPE_NOT_IMPLEMENTED, 0, JSEXN_RANGEERR,"support for 'new ReadableStream({ type: \"bytes\" })' is not yet implemented")
MSG_DEF(JSMSG_READABLESTREAM_BYOB_READERS_NOT_IMPLEMENTED,0,JSEXN_RANGEERR,"support for 'readableStream.getReader({ mode: \"byob\" })' is not yet implemented")
MSG_DEF(JSMSG_READABLESTREAM_INVALID_READER_MODE, 0, JSEXN_RANGEERR,"'mode' must be \"byob\" or undefined.")
MSG_DEF(JSMSG_NUMBER_MUST_BE_FINITE_NON_NEGATIVE, 1, JSEXN_RANGEERR, "'{0}' must be a finite, non-negative number.")
MSG_DEF(JSMSG_READABLEBYTESTREAMCONTROLLER_INVALID_BYTESWRITTEN, 0, JSEXN_RANGEERR, "'bytesWritten' exceeds remaining length.")

View File

@ -129,7 +129,6 @@ case $cmd in
${MKDIR} -p ${tgtpath}/.cargo
cp -pPR \
${TOPSRCDIR}/.cargo/config \
${TOPSRCDIR}/.cargo/config.in \
${tgtpath}/.cargo/

View File

@ -486,6 +486,8 @@ static bool enableWasmVerbose = false;
static bool enableTestWasmAwaitTier2 = false;
static bool enableAsyncStacks = false;
static bool enableStreams = false;
static bool enableReadableByteStreams = false;
static bool enableBYOBStreamReaders = false;
static bool enableFields = false;
static bool enableAwaitFix = false;
#ifdef JS_GC_ZEAL
@ -3797,6 +3799,8 @@ static void SetStandardRealmOptions(JS::RealmOptions& options) {
options.creationOptions()
.setSharedMemoryAndAtomicsEnabled(enableSharedMemory)
.setStreamsEnabled(enableStreams)
.setReadableByteStreamsEnabled(enableReadableByteStreams)
.setBYOBStreamReadersEnabled(enableBYOBStreamReaders)
.setFieldsEnabled(enableFields)
.setAwaitFixEnabled(enableAwaitFix);
}
@ -10272,6 +10276,8 @@ static bool SetContextOptions(JSContext* cx, const OptionParser& op) {
enableTestWasmAwaitTier2 = op.getBoolOption("test-wasm-await-tier2");
enableAsyncStacks = !op.getBoolOption("no-async-stacks");
enableStreams = !op.getBoolOption("no-streams");
enableReadableByteStreams = op.getBoolOption("enable-readable-byte-streams");
enableBYOBStreamReaders = op.getBoolOption("enable-byob-stream-readers");
enableFields = !op.getBoolOption("disable-experimental-fields");
enableAwaitFix = op.getBoolOption("enable-experimental-await-fix");
@ -11033,6 +11039,12 @@ int main(int argc, char** argv, char** envp) {
!op.addBoolOption('\0', "enable-streams",
"Enable WHATWG Streams (default)") ||
!op.addBoolOption('\0', "no-streams", "Disable WHATWG Streams") ||
!op.addBoolOption('\0', "enable-readable-byte-streams",
"Enable support for WHATWG ReadableStreams of type "
"'bytes'") ||
!op.addBoolOption('\0', "enable-byob-stream-readers",
"Enable support for getting BYOB readers for WHATWG "
"ReadableStreams of type \"bytes\"") ||
!op.addBoolOption('\0', "disable-experimental-fields",
"Disable public fields in classes") ||
!op.addBoolOption('\0', "enable-experimental-await-fix",

View File

@ -0,0 +1,179 @@
// |reftest| skip-if(!xulRuntime.shell)
var BUGNUMBER = 1561567;
var summary = 'JS_EncodeStringToUTF8BufferPartial - Encode string as UTF-8 into a byte array';
print(BUGNUMBER + ": " + summary);
var concat = [
{
head: "a",
tail: "b",
expected: "ab",
name: "Latin1 and Latin1",
},
{
head: "α",
tail: "β",
expected: "αβ",
name: "UTF-16 and UTF-16",
},
{
head: "a",
tail: "β",
expected: "aβ",
name: "Latin1 and UTF-16",
},
{
head: "α",
tail: "b",
expected: "αb",
name: "UTF-16 and Latin1",
},
{
head: "\uD83D",
tail: "\uDE03",
expected: "\uD83D\uDE03",
name: "Surrogate pair",
},
{
head: "a\uD83D",
tail: "\uDE03b",
expected: "a\uD83D\uDE03b",
name: "Surrogate pair with prefix and suffix",
},
{
head: "\uD83D",
tail: "b",
expected: "\uFFFDb",
name: "Unpaired high surrogate and Latin1",
},
{
head: "a\uD83D",
tail: "b",
expected: "a\uFFFDb",
name: "Prefixed unpaired high surrogate and Latin1",
},
{
head: "\uD83D",
tail: "β",
expected: "\uFFFDβ",
name: "Unpaired high surrogate and UTF-16",
},
{
head: "a\uD83D",
tail: "β",
expected: "a\uFFFDβ",
name: "Prefixed unpaired high surrogate and UTF-16",
},
{
head: "\uDE03",
tail: "b",
expected: "\uFFFDb",
name: "Unpaired low surrogate and Latin1",
},
{
head: "a\uDE03",
tail: "b",
expected: "a\uFFFDb",
name: "Prefixed unpaired low surrogate and Latin1",
},
{
head: "\uDE03",
tail: "β",
expected: "\uFFFDβ",
name: "Unpaired low surrogate and UTF-16",
},
{
head: "a\uDE03",
tail: "β",
expected: "a\uFFFDβ",
name: "Prefixed unpaired low surrogate and UTF-16",
},
{
head: "a",
tail: "\uDE03",
expected: "a\uFFFD",
name: "Latin1 and unpaired low surrogate",
},
{
head: "a",
tail: "\uDE03b",
expected: "a\uFFFDb",
name: "Latin1 and suffixed unpaired low surrogate",
},
{
head: "α",
tail: "\uDE03",
expected: "α\uFFFD",
name: "UTF-16 and unpaired low surrogate",
},
{
head: "α",
tail: "\uDE03b",
expected: "α\uFFFDb",
name: "UTF-16 and suffixed unpaired low surrogate",
},
{
head: "a",
tail: "\uD83D",
expected: "a\uFFFD",
name: "Latin1 and unpaired high surrogate",
},
{
head: "a",
tail: "\uD83Db",
expected: "a\uFFFDb",
name: "Latin1 and suffixed unpaired high surrogate",
},
{
head: "α",
tail: "\uD83D",
expected: "α\uFFFD",
name: "UTF-16 and unpaired high surrogate",
},
{
head: "α",
tail: "\uD83Db",
expected: "α\uFFFDb",
name: "UTF-16 and suffixed unpaired high surrogate",
},
];
assertEq(isSameCompartment(newRope, this), true);
function checkUtf8Equal(first, second) {
var firstBuffer = new Uint8Array(first.length * 3);
var secondBuffer = new Uint8Array(second.length * 3);
var [firstRead, firstWritten] = encodeAsUtf8InBuffer(first, firstBuffer);
var [secondRead, secondWritten] = encodeAsUtf8InBuffer(second, secondBuffer);
assertEq(first.length, firstRead);
assertEq(second.length, secondRead);
assertEq(firstWritten, secondWritten);
for (var i = 0; i < firstWritten; ++i) {
assertEq(firstBuffer[i], secondBuffer[i]);
}
}
concat.forEach(function(t) {
var rope = newRope(t.head, t.tail);
checkUtf8Equal(rope, t.expected);
});
var ab = newRope("a", "b");
var abc = newRope(ab, "c");
var ef = newRope("e", "f");
var def = newRope("d", ef);
var abcdef = newRope(abc, def);
var abcdefab = newRope(abcdef, ab);
checkUtf8Equal(abcdefab, "abcdefab");
if (typeof reportCompare === "function")
reportCompare(true, true);

View File

@ -11,11 +11,8 @@ name = "baldrdash"
[dependencies]
# The build system redirects the versions of cranelift-codegen and
# cranelift-wasm to pinned commits. If you want to update Cranelift in Gecko,
# you should update the following files:
# - $TOP_LEVEL/Cargo.toml, look for the revision (rev) hashes of both cranelift
# dependencies (codegen and wasm).
# - $TOP_LEVEL/.cargo/config, look for the revision (rev) field of the
# Cranelift source.
# you should update the following $TOP_LEVEL/Cargo.toml file: look for the
# revision (rev) hashes of both cranelift dependencies (codegen and wasm).
cranelift-codegen = { version = "0.42", default-features = false }
cranelift-wasm = "0.42"
log = { version = "0.4.6", default-features = false, features = ["release_max_level_info"] }

View File

@ -1002,6 +1002,7 @@ void PresShell::Init(Document* aDocument, nsPresContext* aPresContext,
os->AddObserver(this, "sessionstore-one-or-no-tab-restored", false);
}
os->AddObserver(this, "font-info-updated", false);
os->AddObserver(this, "look-and-feel-pref-changed", false);
}
}
@ -1246,6 +1247,7 @@ void PresShell::Destroy() {
os->RemoveObserver(this, "sessionstore-one-or-no-tab-restored");
}
os->RemoveObserver(this, "font-info-updated");
os->RemoveObserver(this, "look-and-feel-pref-changed");
}
}
@ -9495,6 +9497,11 @@ PresShell::Observe(nsISupports* aSubject, const char* aTopic,
return NS_OK;
}
if (!nsCRT::strcmp(aTopic, "look-and-feel-pref-changed")) {
ThemeChanged();
return NS_OK;
}
NS_WARNING("unrecognized topic in PresShell::Observe");
return NS_ERROR_FAILURE;
}

View File

@ -37,7 +37,7 @@ load 331292.html
load 334105-1.xhtml
load 334107-1.xhtml
load 334147-1.xhtml
asserts(1-18) load 334148-1.xhtml # XBL interacts poorly with CSS counters.
load 334148-1.xhtml
load 334602-1.html
load 337412-1.html
load 337883-1.html

View File

@ -40,12 +40,55 @@
namespace mozilla {
//----------------------------------------------------------------------
ComputedStyle::ComputedStyle(PseudoStyleType aPseudoType,
ServoComputedDataForgotten aComputedValues)
: mSource(aComputedValues), mPseudoType(aPseudoType) {}
// If a struct returned nsChangeHint_UpdateContainingBlock, that means that one
// property's influence on whether we're a containing block for abs-pos or
// fixed-pos elements has changed.
//
// However, we only need to return the hint if the overall computation of
// whether we establish a containing block has really changed.
static bool ContainingBlockMayHaveChanged(const ComputedStyle& aOldStyle,
const ComputedStyle& aNewStyle) {
auto* oldDisp = aOldStyle.StyleDisplay();
auto* newDisp = aNewStyle.StyleDisplay();
if (oldDisp->IsAbsPosContainingBlockForNonSVGTextFrames() !=
newDisp->IsAbsPosContainingBlockForNonSVGTextFrames()) {
return true;
}
bool fixedCB =
oldDisp->IsFixedPosContainingBlockForNonSVGTextFrames(aOldStyle);
if (fixedCB != newDisp->IsFixedPosContainingBlockForNonSVGTextFrames(aNewStyle)) {
return true;
}
// If we were both before and after a fixed-pos containing-block that means
// that everything else doesn't matter, since all the other conditions are a
// subset of this.
if (fixedCB) {
return false;
}
// Note that neither of these two following sets of frames
// (transform-supporting and layout-and-paint-supporting frames) is a subset
// of the other, because table frames support contain: layout/paint but not
// transforms (which are instead inherited to the table wrapper), and quite a
// few frame types support transforms but not contain: layout/paint (e.g.,
// table rows and row groups, many SVG frames).
if (oldDisp->IsFixedPosContainingBlockForTransformSupportingFrames() !=
newDisp->IsFixedPosContainingBlockForTransformSupportingFrames()) {
return true;
}
if (oldDisp->IsFixedPosContainingBlockForContainLayoutAndPaintSupportingFrames() !=
newDisp
->IsFixedPosContainingBlockForContainLayoutAndPaintSupportingFrames()) {
return true;
}
return false;
}
nsChangeHint ComputedStyle::CalcStyleDifference(const ComputedStyle& aNewStyle,
uint32_t* aEqualStructs) const {
AUTO_PROFILER_LABEL("ComputedStyle::CalcStyleDifference", LAYOUT);
@ -192,48 +235,7 @@ nsChangeHint ComputedStyle::CalcStyleDifference(const ComputedStyle& aNewStyle,
}
if (hint & nsChangeHint_UpdateContainingBlock) {
// If a struct returned nsChangeHint_UpdateContainingBlock, that
// means that one property's influence on whether we're a containing
// block for abs-pos or fixed-pos elements has changed. However, we
// only need to return the hint if the overall computation of
// whether we establish a containing block has changed.
// This depends on data in nsStyleDisplay and nsStyleEffects, so we do it
// here
// Note that it's perhaps good for this test to be last because it
// doesn't use Peek* functions to get the structs on the old
// context. But this isn't a big concern because these struct
// getters should be called during frame construction anyway.
const nsStyleDisplay* oldDisp = StyleDisplay();
const nsStyleDisplay* newDisp = aNewStyle.StyleDisplay();
bool isFixedCB;
if (oldDisp->IsAbsPosContainingBlockForNonSVGTextFrames() ==
newDisp->IsAbsPosContainingBlockForNonSVGTextFrames() &&
(isFixedCB =
oldDisp->IsFixedPosContainingBlockForNonSVGTextFrames(*this)) ==
newDisp->IsFixedPosContainingBlockForNonSVGTextFrames(aNewStyle) &&
// transform-supporting frames are a subcategory of non-SVG-text
// frames, so no need to test this if isFixedCB is true (both
// before and after the change)
(isFixedCB ||
oldDisp->IsFixedPosContainingBlockForTransformSupportingFrames() ==
newDisp
->IsFixedPosContainingBlockForTransformSupportingFrames()) &&
// contain-layout-and-paint-supporting frames are a subset of
// non-SVG-text frames, so no need to test this if isFixedCB is true
// (both before and after the change).
//
// Note, however, that neither of these last two sets is a
// subset of the other, because table frames support contain:
// layout/paint but not transforms (which are instead inherited
// to the table wrapper), and quite a few frame types support
// transforms but not contain: layout/paint (e.g., table rows
// and row groups, many SVG frames).
(isFixedCB ||
oldDisp->IsFixedPosContainingBlockForContainLayoutAndPaintSupportingFrames() ==
newDisp
->IsFixedPosContainingBlockForContainLayoutAndPaintSupportingFrames())) {
if (!ContainingBlockMayHaveChanged(*this, aNewStyle)) {
// While some styles that cause the frame to be a containing block
// has changed, the overall result cannot have changed (no matter
// what the frame type is).

View File

@ -1662,8 +1662,7 @@ void Gecko_StyleSheet_FinishAsyncParse(
MOZ_ASSERT(NS_IsMainThread());
SheetLoadData* data = d->get();
if (Document* doc = data->mLoader->GetDocument()) {
if (const StyleUseCounters* docCounters =
doc->GetStyleUseCounters()) {
if (const auto* docCounters = doc->GetStyleUseCounters()) {
Servo_UseCounters_Merge(docCounters, counters.get());
}
}

View File

@ -1696,6 +1696,10 @@ void Loader::SheetComplete(SheetLoadData& aLoadData, nsresult aStatus) {
MarkLoadTreeFailed(aLoadData);
}
if (mDocument) {
mDocument->MaybeWarnAboutZoom();
}
// 8 is probably big enough for all our common cases. It's not likely that
// imports will nest more than 8 deep, and multiple sheets with the same URI
// are rare.

View File

@ -764,13 +764,21 @@ void nsSVGOuterSVGFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
DisplayBorderBackgroundOutline(aBuilder, aLists);
nsRect visibleRect = aBuilder->GetVisibleRect();
nsRect dirtyRect = aBuilder->GetDirtyRect();
// Per-spec, we always clip root-<svg> even when 'overflow' has its initial
// value of 'visible'. See also the "visual overflow" comments in Reflow.
DisplayListClipState::AutoSaveRestore autoSR(aBuilder);
if (mIsRootContent || StyleDisplay()->IsScrollableOverflow()) {
autoSR.ClipContainingBlockDescendantsToContentBox(aBuilder, this);
visibleRect = visibleRect.Intersect(GetContentRectRelativeToSelf());
dirtyRect = dirtyRect.Intersect(GetContentRectRelativeToSelf());
}
nsDisplayListBuilder::AutoBuildingDisplayList building(
aBuilder, this, visibleRect, dirtyRect);
if ((aBuilder->IsForEventDelivery() &&
NS_SVGDisplayListHitTestingEnabled()) ||
(!aBuilder->IsForEventDelivery() && NS_SVGDisplayListPaintingEnabled())) {

View File

@ -339,6 +339,18 @@ class MOZ_MUST_USE_TYPE Result final {
MOZ_ASSERT(isErr());
}
/**
* Implementation detail of MOZ_TRY().
* Create an error result from another error result.
*/
template <typename E2>
MOZ_IMPLICIT Result(GenericErrorResult<E2>&& aErrorResult)
: mImpl(std::forward<E2>(aErrorResult.mErrorValue)) {
static_assert(mozilla::IsConvertible<E2, E>::value,
"E2 must be convertible to E");
MOZ_ASSERT(isErr());
}
/**
* Implementation detail of MOZ_TRY().
* Create an error result from another error result.
@ -470,12 +482,13 @@ class MOZ_MUST_USE_TYPE GenericErrorResult {
friend class Result;
public:
explicit GenericErrorResult(E aErrorValue) : mErrorValue(aErrorValue) {}
explicit GenericErrorResult(E aErrorValue)
: mErrorValue(std::forward<E>(aErrorValue)) {}
};
template <typename E>
inline GenericErrorResult<E> Err(E&& aErrorValue) {
return GenericErrorResult<E>(aErrorValue);
return GenericErrorResult<E>(std::forward<E>(aErrorValue));
}
} // namespace mozilla

View File

@ -231,6 +231,16 @@ using UniqueResult = Result<UniquePtr<int>, const char*>;
static UniqueResult UniqueTask() { return mozilla::MakeUnique<int>(3); }
static UniqueResult UniqueTaskError() { return Err("bad"); }
using UniqueErrorResult = Result<int, UniquePtr<int>>;
static UniqueErrorResult UniqueError() {
return Err(mozilla::MakeUnique<int>(4));
}
static Result<Ok, UniquePtr<int>> TryUniqueErrorResult() {
MOZ_TRY(UniqueError());
return Ok();
}
static void UniquePtrTest() {
{
auto result = UniqueTask();
@ -256,6 +266,28 @@ static void UniquePtrTest() {
MOZ_RELEASE_ASSERT(result.isOk());
MOZ_RELEASE_ASSERT(result.inspect() && *result.inspect() == 6);
}
{
auto result = UniqueError();
MOZ_RELEASE_ASSERT(result.isErr());
MOZ_RELEASE_ASSERT(result.inspectErr());
MOZ_RELEASE_ASSERT(*result.inspectErr() == 4);
auto err = result.unwrapErr();
MOZ_RELEASE_ASSERT(!result.inspectErr());
MOZ_RELEASE_ASSERT(err);
MOZ_RELEASE_ASSERT(*err == 4);
result = UniqueErrorResult(0);
MOZ_RELEASE_ASSERT(result.isOk() && result.unwrap() == 0);
}
{
auto result = TryUniqueErrorResult();
MOZ_RELEASE_ASSERT(result.isErr());
auto err = result.unwrapErr();
MOZ_RELEASE_ASSERT(err && *err == 4);
MOZ_RELEASE_ASSERT(!result.inspectErr());
}
}
/* * */

View File

@ -134,6 +134,7 @@ pref("urlclassifier.downloadAllowTable", "");
pref("urlclassifier.downloadBlockTable", "");
/* these should help performance */
pref("layout.reflow.synthMouseMove", false); // Keep false until bug 1582363 is fixed
pref("layout.css.report_errors", false);
/* download manager (don't show the window or alert) */

View File

@ -2,10 +2,6 @@
# 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/.
addonType.extension=Extension
addonType.theme=Theme
addonType.locale=Locale
addonStatus.uninstalled=%S will be uninstalled after restart.
# Will keep both strings and at runtime will fallback on the old one if the new one is not yet localized

View File

@ -1,5 +0,0 @@
# 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/.
banner.firstrunHomepage.text=Welcome to your Homepage! Get back here every time you open a new tab.

View File

@ -21,8 +21,6 @@ editLogin.fallbackTitle=Edit Login
editLogin.saved1=Saved login
editLogin.couldNotSave=Changes could not be saved
loginsDetails.age=Age: %S days
loginsDetails.copyFailed=Copy failed
loginsDetails.passwordCopied=Password copied
loginsDetails.usernameCopied=Username copied

Some files were not shown because too many files have changed in this diff Show More