зеркало из https://github.com/mozilla/gecko-dev.git
Merge autoland to mozilla-central. a=merge
This commit is contained in:
Коммит
5ea9694f10
|
@ -58,14 +58,14 @@ checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e"
|
|||
|
||||
[[package]]
|
||||
name = "android_logger"
|
||||
version = "0.10.1"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9ed09b18365ed295d722d0b5ed59c01b79a826ff2d2a8f73d5ecca8e6fb2f66"
|
||||
checksum = "b74b7ddf197de32e415d197aa21c1c0cb36e01e4794fd801302280ac7847ee02"
|
||||
dependencies = [
|
||||
"android_log-sys",
|
||||
"env_logger 0.8.999",
|
||||
"lazy_static",
|
||||
"env_logger 0.9.0",
|
||||
"log",
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -644,13 +644,6 @@ dependencies = [
|
|||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cargo_metadata"
|
||||
version = "0.13.999"
|
||||
dependencies = [
|
||||
"cargo_metadata 0.14.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cargo_metadata"
|
||||
version = "0.14.2"
|
||||
|
@ -1293,6 +1286,10 @@ dependencies = [
|
|||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dap_ffi"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.13.4"
|
||||
|
@ -2189,6 +2186,7 @@ dependencies = [
|
|||
"cubeb-coreaudio",
|
||||
"cubeb-pulse",
|
||||
"cubeb-sys",
|
||||
"dap_ffi",
|
||||
"detect_win32k_conflicts",
|
||||
"dom",
|
||||
"encoding_glue",
|
||||
|
@ -2277,9 +2275,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "glean"
|
||||
version = "50.1.0"
|
||||
version = "50.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0857be0c251ae1fc3b5672237c99f5115a6546cd8b171cb240173098ab5e9629"
|
||||
checksum = "813fa9059f1a7d9da4fcf6cff6c77e6226fc26f58797d1659d16a8279c4655f2"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"crossbeam-channel",
|
||||
|
@ -2297,15 +2295,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "glean-core"
|
||||
version = "50.1.0"
|
||||
version = "50.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1bdfa0e2e6476190b4762c4cdc87c1a7a0347f601864b091cf9ad674a909c68"
|
||||
checksum = "e5edb2b6cf2938242adda6ece26ac29b2238c693c423331c8a68ce980c348b28"
|
||||
dependencies = [
|
||||
"android_logger",
|
||||
"bincode",
|
||||
"chrono",
|
||||
"crossbeam-channel",
|
||||
"env_logger 0.8.999",
|
||||
"env_logger 0.9.0",
|
||||
"ffi-support",
|
||||
"flate2",
|
||||
"log",
|
||||
|
@ -3744,13 +3742,6 @@ dependencies = [
|
|||
"void",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "5.999.999"
|
||||
dependencies = [
|
||||
"nom 6.1.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "6.1.2"
|
||||
|
@ -5690,13 +5681,14 @@ checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
|
|||
|
||||
[[package]]
|
||||
name = "uniffi"
|
||||
version = "0.18.0"
|
||||
version = "0.19.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0fe14882ae6ea89f31ac922ad8e6f76b3f346f07965791a60ade60cc3bcdd60"
|
||||
checksum = "bc1de33ad46ce00bc9a31cea44e80ef69175d3a23007335216fe3996880a310d"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes 1.1.0",
|
||||
"cargo_metadata 0.13.999",
|
||||
"camino",
|
||||
"cargo_metadata",
|
||||
"lazy_static",
|
||||
"log",
|
||||
"paste",
|
||||
|
@ -5705,15 +5697,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uniffi_bindgen"
|
||||
version = "0.18.0"
|
||||
version = "0.19.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49a9810482e988792ed22fc6747d872bd32600f7e3bfc11fe93019d155d7e89c"
|
||||
checksum = "b18e05c55840ddd690ba211f72bb1f2f6ca8c50bfeb7d7211ea5ee60b0f9be07"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"askama",
|
||||
"cargo_metadata 0.13.999",
|
||||
"camino",
|
||||
"cargo_metadata",
|
||||
"clap",
|
||||
"fs-err",
|
||||
"heck",
|
||||
"lazy_static",
|
||||
"paste",
|
||||
"serde",
|
||||
"toml 0.5.9",
|
||||
|
@ -5722,20 +5717,22 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uniffi_build"
|
||||
version = "0.18.0"
|
||||
version = "0.19.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bcb7401cfd8da93541c23a0683c1dab3c782d2a118254536106b0aa4d9b30607"
|
||||
checksum = "8fff0860625e4e621f0317e5f6ac9e79966262bd86a6cfb2049e8425df23afbd"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"camino",
|
||||
"uniffi_bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uniffi_macros"
|
||||
version = "0.18.0"
|
||||
version = "0.19.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e7b60ccb030ef51b0c85eb9ca55f28ff68b82c1a29d2bc0c7053777010af0d3"
|
||||
checksum = "7956a6c1fb12bff15e537028ea2174f000f90dd4f87912233b276ea782d420f2"
|
||||
dependencies = [
|
||||
"camino",
|
||||
"glob",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -6093,12 +6090,12 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "weedle2"
|
||||
version = "2.0.1"
|
||||
version = "3.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a69b360c3d0df7dc1a18124677ee8476576c806418f30a360a6cf6cf4e072a6"
|
||||
checksum = "5d730d941cf471131c40a64cf2e8a595822009f51e64c05c5afdbc85af155857"
|
||||
dependencies = [
|
||||
"fs-err",
|
||||
"nom 5.999.999",
|
||||
"nom 6.1.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
@ -115,13 +115,6 @@ env_logger = { path = "build/rust/env_logger" }
|
|||
# Patch toml 0.4 to 0.5
|
||||
toml = { path = "build/rust/toml" }
|
||||
|
||||
# Patch cargo_metadata 0.13 to 0.14.2
|
||||
# FIXME(bug 1772132): To be removed with the next Glean update
|
||||
cargo_metadata = { path = "build/rust/cargo_metadata" }
|
||||
|
||||
# Patch nom 5 to nom 6
|
||||
nom = { path = "build/rust/nom" }
|
||||
|
||||
# Patch parking_lot 0.12 down to 0.11, which is compatible for most crates that use it, to avoid
|
||||
# dependencies on windows-sys.
|
||||
parking_lot = { path = "build/rust/parking_lot" }
|
||||
|
|
|
@ -31,6 +31,7 @@ DIRS += [
|
|||
"aboutlogins",
|
||||
"attribution",
|
||||
"contextualidentity",
|
||||
"colorways",
|
||||
"customizableui",
|
||||
"doh",
|
||||
"downloads",
|
||||
|
@ -64,7 +65,6 @@ DIRS += ["build"]
|
|||
|
||||
if CONFIG["NIGHTLY_BUILD"]:
|
||||
DIRS += [
|
||||
"colorways",
|
||||
"firefoxview",
|
||||
]
|
||||
|
||||
|
|
|
@ -7,6 +7,8 @@ const { ExperimentFakes } = ChromeUtils.import(
|
|||
"resource://testing-common/NimbusTestUtils.jsm"
|
||||
);
|
||||
|
||||
const ENABLED_PREF = "browser.startup.homepage.abouthome_cache.enabled";
|
||||
|
||||
registerCleanupFunction(async () => {
|
||||
// When the test completes, make sure we cleanup with a populated cache,
|
||||
// since this is the default starting state for these tests.
|
||||
|
@ -21,9 +23,10 @@ registerCleanupFunction(async () => {
|
|||
*/
|
||||
add_task(async function test_experiments_api_control() {
|
||||
// User prefs take precedence over experiments and rollouts.
|
||||
Services.prefs.clearUserPref(
|
||||
"browser.startup.homepage.abouthome_cache.enabled"
|
||||
);
|
||||
Services.prefs.clearUserPref(ENABLED_PREF);
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.setBoolPref(ENABLED_PREF, true);
|
||||
});
|
||||
|
||||
// First, the disabled case.
|
||||
await BrowserTestUtils.withNewTab("about:home", async browser => {
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const { XPCOMUtils } = ChromeUtils.importESModule(
|
||||
"resource://gre/modules/XPCOMUtils.sys.mjs"
|
||||
);
|
||||
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
||||
|
||||
const lazy = {};
|
||||
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const { XPCOMUtils } = ChromeUtils.importESModule(
|
||||
"resource://gre/modules/XPCOMUtils.sys.mjs"
|
||||
);
|
||||
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
||||
|
||||
const lazy = {};
|
||||
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const { XPCOMUtils } = ChromeUtils.importESModule(
|
||||
"resource://gre/modules/XPCOMUtils.sys.mjs"
|
||||
);
|
||||
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
||||
|
||||
const lazy = {};
|
||||
|
||||
|
|
|
@ -4,9 +4,8 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const { XPCOMUtils } = ChromeUtils.importESModule(
|
||||
"resource://gre/modules/XPCOMUtils.sys.mjs"
|
||||
);
|
||||
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
||||
|
||||
const { EventEmitter } = ChromeUtils.import(
|
||||
"resource://gre/modules/EventEmitter.jsm"
|
||||
);
|
||||
|
|
|
@ -170,7 +170,7 @@ class ProviderQuickActions extends UrlbarProvider {
|
|||
viewUpdate[`image-${i}`] = {
|
||||
attributes: { src: data.icon || DEFAULT_ICON },
|
||||
};
|
||||
viewUpdate[`label-${i}`] = { attributes: { "data-l10n-id": data.label } };
|
||||
viewUpdate[`label-${i}`] = { l10n: { id: data.label, cacheable: true } };
|
||||
});
|
||||
return viewUpdate;
|
||||
}
|
||||
|
|
|
@ -1727,6 +1727,9 @@ class UrlbarView {
|
|||
node.style[styleName] = value;
|
||||
}
|
||||
if (update.l10n) {
|
||||
if (update.l10n.cacheable) {
|
||||
await this._l10nCache.ensureAll([update.l10n]);
|
||||
}
|
||||
this._setElementL10n(node, {
|
||||
id: update.l10n.id,
|
||||
args: update.l10n.args || undefined,
|
||||
|
|
|
@ -151,6 +151,12 @@ let AVAILABLE_PIP_OVERRIDES;
|
|||
"https://*.udemy.com/*": { policy: TOGGLE_POLICIES.ONE_QUARTER },
|
||||
},
|
||||
|
||||
voot: {
|
||||
"https://*.voot.com/*": {
|
||||
videoWrapperScriptPath: "video-wrappers/voot.js",
|
||||
},
|
||||
},
|
||||
|
||||
youtube: {
|
||||
/**
|
||||
* The threshold of 0.7 is so that users can click on the "Skip Ads"
|
||||
|
|
|
@ -43,6 +43,7 @@ FINAL_TARGET_FILES.features["pictureinpicture@mozilla.org"]["video-wrappers"] +=
|
|||
"video-wrappers/primeVideo.js",
|
||||
"video-wrappers/sonyliv.js",
|
||||
"video-wrappers/tubi.js",
|
||||
"video-wrappers/voot.js",
|
||||
"video-wrappers/washingtonpost.js",
|
||||
"video-wrappers/youtube.js",
|
||||
]
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/* 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/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
class PictureInPictureVideoWrapper {
|
||||
setCaptionContainerObserver(video, updateCaptionsFunction) {
|
||||
let container = document.querySelector(".playkit-container");
|
||||
|
||||
if (container) {
|
||||
updateCaptionsFunction("");
|
||||
const callback = function(mutationsList, observer) {
|
||||
let text = container.querySelector(".playkit-subtitles").innerText;
|
||||
if (!text) {
|
||||
updateCaptionsFunction("");
|
||||
return;
|
||||
}
|
||||
|
||||
updateCaptionsFunction(text);
|
||||
};
|
||||
|
||||
// immediately invoke the callback function to add subtitles to the PiP window
|
||||
callback([1], null);
|
||||
|
||||
let captionsObserver = new MutationObserver(callback);
|
||||
|
||||
captionsObserver.observe(container, {
|
||||
attributes: false,
|
||||
childList: true,
|
||||
subtree: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.PictureInPictureVideoWrapper = PictureInPictureVideoWrapper;
|
|
@ -662,6 +662,7 @@ const AVAILABLE_SHIMS = [
|
|||
requestStorageAccessForRedirect: [
|
||||
["*://web.powerva.microsoft.com/*", "*://login.microsoftonline.com/*"],
|
||||
["*://teams.microsoft.com/*", "*://login.microsoftonline.com/*"],
|
||||
["*://*.teams.microsoft.us/*", "*://login.microsoftonline.us/*"],
|
||||
],
|
||||
contentScripts: [
|
||||
{
|
||||
|
@ -669,6 +670,7 @@ const AVAILABLE_SHIMS = [
|
|||
matches: [
|
||||
"*://web.powerva.microsoft.com/*",
|
||||
"*://teams.microsoft.com/*",
|
||||
"*://*.teams.microsoft.us/*",
|
||||
],
|
||||
runAt: "document_start",
|
||||
},
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"manifest_version": 2,
|
||||
"name": "Web Compatibility Interventions",
|
||||
"description": "Urgent post-release fixes for web compatibility.",
|
||||
"version": "103.8.0",
|
||||
"version": "103.9.0",
|
||||
"applications": {
|
||||
"gecko": {
|
||||
"id": "webcompat@mozilla.org",
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
preview/originControls.ftl (../components/extensions/originControls.ftl)
|
||||
#ifdef NIGHTLY_BUILD
|
||||
preview/firefoxView.ftl (../components/firefoxview/firefoxView.ftl)
|
||||
#endif
|
||||
preview/colorwaycloset.ftl (../components/colorways/colorwaycloset.ftl)
|
||||
preview/colorways.ftl (../components/colorways/colorways.ftl)
|
||||
#endif
|
||||
browser (%browser/**/*.ftl)
|
||||
|
||||
@AB_CD@.jar:
|
||||
|
|
|
@ -6,10 +6,6 @@
|
|||
|
||||
const EXPORTED_SYMBOLS = ["_applyColorwayConfig", "BuiltInThemeConfig"];
|
||||
|
||||
const { AppConstants } = ChromeUtils.import(
|
||||
"resource://gre/modules/AppConstants.jsm"
|
||||
);
|
||||
|
||||
/**
|
||||
* A Map of themes built in to the browser, alongwith a Map of collections those themes belong to. Params for the objects contained
|
||||
* within the map:
|
||||
|
@ -514,10 +510,7 @@ const ColorwayCollections = [
|
|||
},
|
||||
{
|
||||
id: "independent-voices",
|
||||
expiry:
|
||||
colorwayClosetEnabled && AppConstants.NIGHTLY_BUILD
|
||||
? "2023-01-24"
|
||||
: "1970-01-01",
|
||||
expiry: colorwayClosetEnabled ? "2023-01-24" : "1970-01-01",
|
||||
l10nId: {
|
||||
title: "colorway-collection-independent-voices",
|
||||
description: "colorway-collection-independent-voices-description",
|
||||
|
|
|
@ -36,7 +36,7 @@ allprojects {
|
|||
topsrcdir = gradle.mozconfig.topsrcdir
|
||||
topobjdir = gradle.mozconfig.topobjdir
|
||||
|
||||
gleanVersion = "50.1.0"
|
||||
gleanVersion = "50.1.2"
|
||||
if (gleanVersion != getRustVersionFor("glean")) {
|
||||
throw new StopExecutionException("Mismatched Glean version, expected: ${gleanVersion}," +
|
||||
" found ${getRustVersionFor("glean")}")
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
[package]
|
||||
name = "cargo_metadata"
|
||||
version = "0.13.999"
|
||||
edition = "2018"
|
||||
license = "MPL-2.0"
|
||||
|
||||
[lib]
|
||||
path = "lib.rs"
|
||||
|
||||
[dependencies]
|
||||
cargo_metadata = "0.14.2"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
builder = ["cargo_metadata/derive_builder"]
|
|
@ -1,20 +0,0 @@
|
|||
[package]
|
||||
name = "nom"
|
||||
version = "5.999.999"
|
||||
edition = "2018"
|
||||
license = "MPL-2.0"
|
||||
|
||||
[lib]
|
||||
path = "lib.rs"
|
||||
|
||||
[dependencies.nom]
|
||||
version = "6.0"
|
||||
default-features = false
|
||||
|
||||
[features]
|
||||
alloc = ["nom/alloc"]
|
||||
default = ["nom/default"]
|
||||
lexical = ["nom/lexical-core"]
|
||||
regexp = ["nom/regex"]
|
||||
regexp_macros = ["nom/regexp_macros"]
|
||||
std = ["nom/std"]
|
|
@ -1,10 +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/. */
|
||||
|
||||
pub use nom::*;
|
||||
|
||||
pub use nom::separated_list0 as separated_list;
|
||||
pub use nom::separated_list1 as separated_nonempty_list;
|
||||
|
||||
pub type IResult<I, O, E=(I, error::ErrorKind)> = nom::IResult<I, O, E>;
|
|
@ -16,6 +16,8 @@ var {
|
|||
callFunctionWithAsyncStack,
|
||||
} = require("devtools/shared/platform/stack");
|
||||
|
||||
loader.lazyRequireGetter(this, "OS", "resource://gre/modules/osfile.jsm", true);
|
||||
|
||||
loader.lazyRequireGetter(
|
||||
this,
|
||||
"FileUtils",
|
||||
|
@ -665,12 +667,14 @@ function mainThreadFetch(
|
|||
ex.name === "NS_BASE_STREAM_CLOSED" &&
|
||||
uri instanceof Ci.nsIFileURL
|
||||
) {
|
||||
// Empty files cause NS_BASE_STREAM_CLOSED exception. Use IOUtils to
|
||||
// Empty files cause NS_BASE_STREAM_CLOSED exception. Use OS.File to
|
||||
// differentiate between empty files and other errors (bug 1170864).
|
||||
// This can be removed when bug 982654 is fixed.
|
||||
|
||||
uri.QueryInterface(Ci.nsIFileURL);
|
||||
const result = IOUtils.read(uri.file.path).then(bytes => {
|
||||
// Bug 1779574: IOUtils is not available in non-parent processes.
|
||||
// eslint-disable-next-line mozilla/reject-osfile
|
||||
const result = OS.File.read(uri.file.path).then(bytes => {
|
||||
// Convert the bytearray to a String.
|
||||
const decoder = new TextDecoder();
|
||||
const content = decoder.decode(bytes);
|
||||
|
|
|
@ -11,6 +11,7 @@ categories:
|
|||
user_guide:
|
||||
- devtools-user
|
||||
source_doc:
|
||||
- mots
|
||||
- browser
|
||||
- dom
|
||||
- editor
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -51,7 +51,7 @@ HRESULT MFMediaSource::RuntimeClassInitialize(const Maybe<AudioInfo>& aAudio,
|
|||
MFMediaEngineVideoStream::Create(streamId++, *aVideo, this);
|
||||
if (!mVideoStream) {
|
||||
NS_WARNING("Failed to create video stream");
|
||||
return E_FAIL;
|
||||
return E_FAIL;
|
||||
}
|
||||
mVideoStreamEndedListener = mVideoStream->EndedEvent().Connect(
|
||||
mTaskQueue, this, &MFMediaSource::HandleStreamEnded);
|
||||
|
|
|
@ -268,8 +268,6 @@ static void RejectShuttingDown(Promise* aPromise) {
|
|||
IOUtils::IOError(NS_ERROR_ABORT).WithMessage(SHUTDOWN_ERROR));
|
||||
}
|
||||
|
||||
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
|
||||
|
||||
static bool AssertParentProcessWithCallerLocationImpl(GlobalObject& aGlobal,
|
||||
nsCString& reason) {
|
||||
if (MOZ_LIKELY(XRE_IsParentProcess())) {
|
||||
|
@ -303,7 +301,6 @@ static void AssertParentProcessWithCallerLocation(GlobalObject& aGlobal) {
|
|||
MOZ_CRASH_UNSAFE_PRINTF("%s", reason.get());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// IOUtils implementation
|
||||
/* static */
|
||||
|
@ -314,9 +311,7 @@ template <typename Fn>
|
|||
already_AddRefed<Promise> IOUtils::WithPromiseAndState(GlobalObject& aGlobal,
|
||||
ErrorResult& aError,
|
||||
Fn aFn) {
|
||||
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
|
||||
AssertParentProcessWithCallerLocation(aGlobal);
|
||||
#endif
|
||||
|
||||
RefPtr<Promise> promise = CreateJSPromise(aGlobal, aError);
|
||||
if (!promise) {
|
||||
|
|
|
@ -3192,6 +3192,10 @@ NS_IMETHODIMP HTMLEditor::Rewrap(bool aRespectNewlines) {
|
|||
InternetCiter::Rewrap(current, wrapWidth, firstLineOffset, aRespectNewlines,
|
||||
wrapped);
|
||||
|
||||
if (wrapped.IsEmpty()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (isCollapsed) {
|
||||
DebugOnly<nsresult> rvIgnored = SelectAllInternal();
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rvIgnored),
|
||||
|
|
|
@ -10,7 +10,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1649005
|
|||
<link rel="stylesheet" href="/tests/SimpleTest/test.css">
|
||||
<script src="/tests/SimpleTest/EventUtils.js"></script>
|
||||
<script>
|
||||
/** Test for bug 1649005 **/
|
||||
/** Test for bug 1649005, bug 1779343 **/
|
||||
window.addEventListener("DOMContentLoaded", (event) => {
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SimpleTest.waitForFocus(function() {
|
||||
|
@ -21,11 +21,15 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1649005
|
|||
is(document.body.textContent, "", "Initial body check");
|
||||
editor.rewrap(false);
|
||||
is(document.body.textContent, "", "Initial body check after rewrap");
|
||||
|
||||
|
||||
document.body.innerHTML = ">abc<br/>>def<br/>>ghi";
|
||||
editor.rewrap(true);
|
||||
is(document.body.textContent, "> abc def ghi", "Rewrapped");
|
||||
|
||||
document.body.innerHTML = "> ";
|
||||
editor.rewrap(true);
|
||||
is(document.body.textContent, "> ", "Rewrapped half-empty string");
|
||||
|
||||
SimpleTest.finish();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -31,6 +31,10 @@ add_task(async function test_paste_formatted() {
|
|||
window.getSelection().selectAllChildren(document.getElementById("source"));
|
||||
synthesizeKey("c", { accelKey: true });
|
||||
|
||||
const isHeadless = await SpecialPowers.spawnChrome([], () => {
|
||||
return Cc["@mozilla.org/gfx/info;1"].getService(Ci.nsIGfxInfo).isHeadless;
|
||||
});
|
||||
|
||||
function doKey(element, withShiftKey)
|
||||
{
|
||||
let inputEventPromise = new Promise(resolve => {
|
||||
|
@ -62,13 +66,17 @@ add_task(async function test_paste_formatted() {
|
|||
selection.selectAllChildren(editable);
|
||||
selection.collapseToStart();
|
||||
doKey(editable, false);
|
||||
is(editable.innerHTML, expectedHTML, "paste into contenteditable");
|
||||
is(editable.innerHTML,
|
||||
isHeadless ? expectedText : expectedHTML, "paste into contenteditable");
|
||||
|
||||
// Unformatted paste into editable area
|
||||
selection.selectAllChildren(editable);
|
||||
selection.collapseToEnd();
|
||||
doKey(editable, true);
|
||||
is(editable.innerHTML, expectedHTML + expectedText, "paste unformatted into contenteditable");
|
||||
is(editable.innerHTML,
|
||||
isHeadless ? expectedText + expectedText :
|
||||
expectedHTML + expectedText,
|
||||
"paste unformatted into contenteditable");
|
||||
|
||||
let noneditable = document.getElementById("noneditable");
|
||||
selection.selectAllChildren(noneditable);
|
||||
|
@ -92,7 +100,9 @@ add_task(async function test_paste_formatted() {
|
|||
|
||||
let result = await pastePromise;
|
||||
is(result.text, expectedText, "paste text into non-editable");
|
||||
is(result.html, htmlPrefix + expectedHTML + htmlPostfix, "paste html into non-editable");
|
||||
is(result.html,
|
||||
isHeadless ? "" : htmlPrefix + expectedHTML + htmlPostfix,
|
||||
"paste html into non-editable");
|
||||
|
||||
// Unformatted paste into non-editable area
|
||||
pastePromise = getPasteResult();
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include "WebGLTypes.h"
|
||||
|
||||
#ifdef MOZ_WAYLAND
|
||||
#include "mozilla/widget/DMABufSurface.h"
|
||||
# include "mozilla/widget/DMABufSurface.h"
|
||||
#endif
|
||||
|
||||
namespace mozilla {
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include "mozilla/layers/ImageBridgeParent.h" // for ImageBridgeParent
|
||||
#include "mozilla/layers/LayersSurfaces.h" // for SurfaceDescriptor, etc
|
||||
#include "mozilla/layers/RemoteTextureMap.h"
|
||||
#include "mozilla/layers/TextureHostOGL.h" // for TextureHostOGL
|
||||
#include "mozilla/layers/TextureHostOGL.h" // for TextureHostOGL
|
||||
#include "mozilla/layers/ImageDataSerializer.h"
|
||||
#include "mozilla/layers/TextureClient.h"
|
||||
#include "mozilla/layers/GPUVideoTextureHost.h"
|
||||
|
|
|
@ -31,14 +31,14 @@ checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e"
|
|||
|
||||
[[package]]
|
||||
name = "android_logger"
|
||||
version = "0.10.1"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9ed09b18365ed295d722d0b5ed59c01b79a826ff2d2a8f73d5ecca8e6fb2f66"
|
||||
checksum = "b74b7ddf197de32e415d197aa21c1c0cb36e01e4794fd801302280ac7847ee02"
|
||||
dependencies = [
|
||||
"android_log-sys",
|
||||
"env_logger",
|
||||
"lazy_static",
|
||||
"log",
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -236,14 +236,13 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "cargo_metadata"
|
||||
version = "0.13.1"
|
||||
version = "0.14.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "081e3f0755c1f380c2d010481b6fa2e02973586d5f2b24eebb7a2a1d98b143d8"
|
||||
checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
|
||||
dependencies = [
|
||||
"camino",
|
||||
"cargo-platform",
|
||||
"semver",
|
||||
"semver-parser",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
@ -673,9 +672,9 @@ checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
|
|||
|
||||
[[package]]
|
||||
name = "env_logger"
|
||||
version = "0.8.4"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
|
||||
checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
|
||||
dependencies = [
|
||||
"atty",
|
||||
"humantime",
|
||||
|
@ -877,9 +876,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "glean"
|
||||
version = "50.1.0"
|
||||
version = "50.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0857be0c251ae1fc3b5672237c99f5115a6546cd8b171cb240173098ab5e9629"
|
||||
checksum = "813fa9059f1a7d9da4fcf6cff6c77e6226fc26f58797d1659d16a8279c4655f2"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"crossbeam-channel",
|
||||
|
@ -897,9 +896,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "glean-core"
|
||||
version = "50.1.0"
|
||||
version = "50.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1bdfa0e2e6476190b4762c4cdc87c1a7a0347f601864b091cf9ad674a909c68"
|
||||
checksum = "e5edb2b6cf2938242adda6ece26ac29b2238c693c423331c8a68ce980c348b28"
|
||||
dependencies = [
|
||||
"android_logger",
|
||||
"bincode",
|
||||
|
@ -1427,16 +1426,6 @@ dependencies = [
|
|||
"memoffset",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "5.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "6.2.1"
|
||||
|
@ -1670,15 +1659,6 @@ version = "2.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
||||
|
||||
[[package]]
|
||||
name = "pest"
|
||||
version = "2.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
|
||||
dependencies = [
|
||||
"ucd-trie",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pkg-config"
|
||||
version = "0.3.17"
|
||||
|
@ -1934,23 +1914,13 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
|||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "0.11.0"
|
||||
version = "1.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
|
||||
checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1"
|
||||
dependencies = [
|
||||
"semver-parser",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "semver-parser"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
|
||||
dependencies = [
|
||||
"pest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.137"
|
||||
|
@ -2201,12 +2171,6 @@ dependencies = [
|
|||
"minidl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ucd-trie"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
|
||||
|
||||
[[package]]
|
||||
name = "unicase"
|
||||
version = "2.6.0"
|
||||
|
@ -2239,12 +2203,13 @@ checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
|
|||
|
||||
[[package]]
|
||||
name = "uniffi"
|
||||
version = "0.18.0"
|
||||
version = "0.19.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0fe14882ae6ea89f31ac922ad8e6f76b3f346f07965791a60ade60cc3bcdd60"
|
||||
checksum = "bc1de33ad46ce00bc9a31cea44e80ef69175d3a23007335216fe3996880a310d"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
"camino",
|
||||
"cargo_metadata",
|
||||
"lazy_static",
|
||||
"log",
|
||||
|
@ -2254,15 +2219,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uniffi_bindgen"
|
||||
version = "0.18.0"
|
||||
version = "0.19.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49a9810482e988792ed22fc6747d872bd32600f7e3bfc11fe93019d155d7e89c"
|
||||
checksum = "b18e05c55840ddd690ba211f72bb1f2f6ca8c50bfeb7d7211ea5ee60b0f9be07"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"askama",
|
||||
"camino",
|
||||
"cargo_metadata",
|
||||
"clap",
|
||||
"fs-err",
|
||||
"heck",
|
||||
"lazy_static",
|
||||
"paste 1.0.7",
|
||||
"serde",
|
||||
"toml",
|
||||
|
@ -2271,20 +2239,22 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uniffi_build"
|
||||
version = "0.18.0"
|
||||
version = "0.19.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bcb7401cfd8da93541c23a0683c1dab3c782d2a118254536106b0aa4d9b30607"
|
||||
checksum = "8fff0860625e4e621f0317e5f6ac9e79966262bd86a6cfb2049e8425df23afbd"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"camino",
|
||||
"uniffi_bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uniffi_macros"
|
||||
version = "0.18.0"
|
||||
version = "0.19.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e7b60ccb030ef51b0c85eb9ca55f28ff68b82c1a29d2bc0c7053777010af0d3"
|
||||
checksum = "7956a6c1fb12bff15e537028ea2174f000f90dd4f87912233b276ea782d420f2"
|
||||
dependencies = [
|
||||
"camino",
|
||||
"glob",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -2578,12 +2548,12 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "weedle2"
|
||||
version = "2.0.1"
|
||||
version = "3.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a69b360c3d0df7dc1a18124677ee8476576c806418f30a360a6cf6cf4e072a6"
|
||||
checksum = "5d730d941cf471131c40a64cf2e8a595822009f51e64c05c5afdbc85af155857"
|
||||
dependencies = [
|
||||
"fs-err",
|
||||
"nom 5.1.2",
|
||||
"nom 6.2.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
@ -55,7 +55,7 @@ debug = ["webrender/capture", "webrender/profiler"]
|
|||
|
||||
[dependencies]
|
||||
app_units = "0.7"
|
||||
env_logger = "0.8"
|
||||
env_logger = "0.9"
|
||||
euclid = "0.22"
|
||||
gleam = "0.13"
|
||||
glutin = "0.28"
|
||||
|
|
|
@ -51,7 +51,7 @@ svg_fmt = "0.4"
|
|||
tracy-rs = "0.1.2"
|
||||
derive_more = { version = "0.99", default-features = false, features = ["add_assign"] }
|
||||
etagere = "0.2.6"
|
||||
glean = "50.1.0"
|
||||
glean = "50.1.2"
|
||||
fog = { version = "0.1.0", optional = true }
|
||||
swgl = { path = "../swgl", optional = true }
|
||||
topological-sort = "0.1"
|
||||
|
|
|
@ -13,7 +13,7 @@ path = "src/main.rs"
|
|||
|
||||
[dependencies]
|
||||
base64 = "0.13"
|
||||
env_logger = { version = "0.8.4", optional = true }
|
||||
env_logger = { version = "0.9", optional = true }
|
||||
gleam = "0.13"
|
||||
glutin = "0.28"
|
||||
clap = { version = "3.1", features = ["yaml"] }
|
||||
|
@ -29,7 +29,7 @@ osmesa-src = { version = "0.2", git = "https://github.com/servo/osmesa-src", opt
|
|||
webrender = { path = "../webrender", features = ["capture", "replay", "png", "profiler", "no_static_freetype", "leak_checks"] }
|
||||
winit = "0.26"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
semver = "0.11.0"
|
||||
semver = "1.0.12"
|
||||
swgl = { path = "../swgl", optional = true }
|
||||
tracy-rs = "0.1.2"
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset=utf-8>
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<style>
|
||||
iframe { border: none; }
|
||||
</style>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset=utf-8>
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
rect { fill: green; }
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>Dynamic changes to prefers-color-scheme affecting SVG images</title>
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<link rel=stylesheet type=text/css href=/tests/SimpleTest/test.css>
|
||||
<script src=/tests/SimpleTest/SimpleTest.js></script>
|
||||
<script src=/tests/SimpleTest/WindowSnapshot.js></script>
|
||||
|
|
|
@ -916,8 +916,10 @@ struct CrossOriginEmbedderPolicyValidator {
|
|||
|
||||
static bool IsLegalValue(const IntegralType e) {
|
||||
return AreIntegralValuesEqual(e, nsILoadInfo::EMBEDDER_POLICY_NULL) ||
|
||||
AreIntegralValuesEqual(e, nsILoadInfo::EMBEDDER_POLICY_REQUIRE_CORP) ||
|
||||
AreIntegralValuesEqual(e, nsILoadInfo::EMBEDDER_POLICY_CREDENTIALLESS);
|
||||
AreIntegralValuesEqual(e,
|
||||
nsILoadInfo::EMBEDDER_POLICY_REQUIRE_CORP) ||
|
||||
AreIntegralValuesEqual(e,
|
||||
nsILoadInfo::EMBEDDER_POLICY_CREDENTIALLESS);
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#include "mozilla/dom/AutoEntryScript.h"
|
||||
|
||||
|
||||
using namespace mozilla;
|
||||
using mozilla::ipc::PTestShellCommandParent;
|
||||
using mozilla::ipc::TestShellCommandParent;
|
||||
|
|
|
@ -579,12 +579,16 @@ class js::OrderedHashTableRef : public gc::BufferableRef {
|
|||
reinterpret_cast<typename ObjectT::UnbarrieredTable*>(realTable);
|
||||
NurseryKeysVector* keys = GetNurseryKeys(object);
|
||||
MOZ_ASSERT(keys);
|
||||
for (Value& key : *keys) {
|
||||
Value prior = key;
|
||||
for (Value key : *keys) {
|
||||
MOZ_ASSERT(unbarrieredTable->hash(key) ==
|
||||
realTable->hash(*reinterpret_cast<HashableValue*>(&key)));
|
||||
TraceManuallyBarrieredEdge(trc, &key, "ordered hash table key");
|
||||
unbarrieredTable->rekeyOneEntry(prior, key);
|
||||
// Note: we use a lambda to avoid tenuring keys that have been removed
|
||||
// from the Map or Set.
|
||||
unbarrieredTable->rekeyOneEntry(key, [trc](const Value& prior) {
|
||||
Value key = prior;
|
||||
TraceManuallyBarrieredEdge(trc, &key, "ordered hash table key");
|
||||
return key;
|
||||
});
|
||||
}
|
||||
DeleteNurseryKeys(object);
|
||||
}
|
||||
|
|
|
@ -558,12 +558,11 @@ class OrderedHashTable {
|
|||
return;
|
||||
}
|
||||
|
||||
Data* entry = lookup(current, prepareHash(current));
|
||||
if (!entry) {
|
||||
return;
|
||||
}
|
||||
HashNumber currentHash = prepareHash(current);
|
||||
Data* entry = lookup(current, currentHash);
|
||||
MOZ_ASSERT(entry);
|
||||
|
||||
HashNumber oldHash = prepareHash(current) >> hashShift;
|
||||
HashNumber oldHash = currentHash >> hashShift;
|
||||
HashNumber newHash = prepareHash(newKey) >> hashShift;
|
||||
|
||||
entry->element = element;
|
||||
|
@ -845,11 +844,13 @@ class OrderedHashMap {
|
|||
|
||||
HashNumber hash(const Key& key) const { return impl.prepareHash(key); }
|
||||
|
||||
void rekeyOneEntry(const Key& current, const Key& newKey) {
|
||||
template <typename GetNewKey>
|
||||
void rekeyOneEntry(const Key& current, const GetNewKey& getNewKey) {
|
||||
const Entry* e = get(current);
|
||||
if (!e) {
|
||||
return;
|
||||
}
|
||||
Key newKey = getNewKey(current);
|
||||
return impl.rekeyOneEntry(current, newKey, Entry(newKey, e->value));
|
||||
}
|
||||
|
||||
|
@ -916,7 +917,12 @@ class OrderedHashSet {
|
|||
|
||||
HashNumber hash(const T& value) const { return impl.prepareHash(value); }
|
||||
|
||||
void rekeyOneEntry(const T& current, const T& newKey) {
|
||||
template <typename GetNewKey>
|
||||
void rekeyOneEntry(const T& current, const GetNewKey& getNewKey) {
|
||||
if (!has(current)) {
|
||||
return;
|
||||
}
|
||||
T newKey = getNewKey(current);
|
||||
return impl.rekeyOneEntry(current, newKey, newKey);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
let module1 = registerModule('module1', parseModule(
|
||||
`import {} from "module2";
|
||||
import {} from "module3";`));
|
||||
|
||||
let module2 = registerModule('module2', parseModule(
|
||||
`await 1;`));
|
||||
|
||||
let module3 = registerModule('module3', parseModule(
|
||||
`throw 1;`));
|
||||
|
||||
moduleLink(module1);
|
||||
moduleEvaluate(module1).catch(() => 0);
|
||||
drainJobQueue();
|
|
@ -1579,7 +1579,10 @@ static bool GatherAvailableModuleAncestors(
|
|||
|
||||
// Step 1.a. If execList does not contain m and
|
||||
// m.[[CycleRoot]].[[EvaluationError]] is empty, then:
|
||||
if (!m->getCycleRoot()->hadEvaluationError() &&
|
||||
//
|
||||
// Note: we also check whether m.[[EvaluationError]] is empty since an error
|
||||
// in synchronous execution can prevent the CycleRoot field from being set.
|
||||
if (!m->hadEvaluationError() && !m->getCycleRoot()->hadEvaluationError() &&
|
||||
!ContainsElement(execList, m)) {
|
||||
// Step 1.a.i. Assert: m.[[Status]] is evaluating-async.
|
||||
MOZ_ASSERT(m->status() == ModuleStatus::EvaluatingAsync);
|
||||
|
|
|
@ -111,10 +111,24 @@ nsresult ComponentModuleLoader::StartFetch(ModuleLoadRequest* aRequest) {
|
|||
// Check for failure to load script source and abort.
|
||||
bool threwException = jsapi.HasException();
|
||||
if (NS_FAILED(rv) && !threwException) {
|
||||
nsAutoCString uri;
|
||||
nsresult rv2 = aRequest->mURI->GetSpec(uri);
|
||||
NS_ENSURE_SUCCESS(rv2, rv2);
|
||||
|
||||
JS_ReportErrorUTF8(cx, "Failed to load %s", PromiseFlatCString(uri).get());
|
||||
|
||||
// Remember the error for MaybeReportLoadError.
|
||||
if (!mLoadException.initialized()) {
|
||||
mLoadException.init(cx);
|
||||
}
|
||||
if (!jsapi.StealException(&mLoadException)) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
// Otherwise remember the results so we can report them later.
|
||||
// Otherwise remember the results in this context so we can report them later.
|
||||
ComponentLoadContext* context = aRequest->GetComponentLoadContext();
|
||||
context->mRv = rv;
|
||||
if (threwException) {
|
||||
|
@ -154,6 +168,20 @@ nsresult ComponentModuleLoader::CompileFetchedModule(
|
|||
return rv;
|
||||
}
|
||||
|
||||
void ComponentModuleLoader::MaybeReportLoadError(JSContext* aCx) {
|
||||
if (JS_IsExceptionPending(aCx)) {
|
||||
// Do not override.
|
||||
return;
|
||||
}
|
||||
|
||||
if (mLoadException.isUndefined()) {
|
||||
return;
|
||||
}
|
||||
|
||||
JS_SetPendingException(aCx, mLoadException);
|
||||
mLoadException = JS::UndefinedValue();
|
||||
}
|
||||
|
||||
void ComponentModuleLoader::OnModuleLoadComplete(ModuleLoadRequest* aRequest) {}
|
||||
|
||||
nsresult ComponentModuleLoader::ProcessRequests() {
|
||||
|
|
|
@ -48,6 +48,8 @@ class ComponentModuleLoader : public JS::loader::ModuleLoaderBase {
|
|||
|
||||
[[nodiscard]] nsresult ProcessRequests();
|
||||
|
||||
void MaybeReportLoadError(JSContext* aCx);
|
||||
|
||||
private:
|
||||
// An event target that dispatches runnables by executing them
|
||||
// immediately. This is used to drive mozPromise dispatch for
|
||||
|
@ -83,6 +85,10 @@ class ComponentModuleLoader : public JS::loader::ModuleLoaderBase {
|
|||
void OnModuleLoadComplete(ModuleLoadRequest* aRequest) override;
|
||||
|
||||
JS::loader::ScriptLoadRequestList mLoadRequests;
|
||||
|
||||
// If any of module scripts failed to load, exception is set here until it's
|
||||
// reported by MaybeReportLoadError.
|
||||
JS::PersistentRootedValue mLoadException;
|
||||
};
|
||||
|
||||
// Data specific to ComponentModuleLoader that is associated with each load
|
||||
|
@ -93,10 +99,14 @@ class ComponentLoadContext : public JS::loader::LoadContextBase {
|
|||
: LoadContextBase(JS::loader::ContextKind::Component) {}
|
||||
|
||||
public:
|
||||
// The result of loading a module script. These fields are used temporarily
|
||||
// The result of compiling a module script. These fields are used temporarily
|
||||
// before being passed to the module loader.
|
||||
nsresult mRv;
|
||||
|
||||
// The exception thrown during compiling a module script. These fields are
|
||||
// used temporarily before being passed to the module loader.
|
||||
JS::PersistentRootedValue mExceptionValue;
|
||||
|
||||
JS::PersistentRootedScript mScript;
|
||||
};
|
||||
|
||||
|
|
|
@ -1526,6 +1526,12 @@ nsresult mozJSModuleLoader::TryFallbackToImportESModule(
|
|||
|
||||
JS::RootedObject moduleNamespace(aCx);
|
||||
nsresult rv = ImportESModule(aCx, mjsLocation, &moduleNamespace);
|
||||
if (rv == NS_ERROR_FILE_NOT_FOUND) {
|
||||
// The error for ESModule shouldn't be exposed if the file does not exist.
|
||||
if (JS_IsExceptionPending(aCx)) {
|
||||
JS_ClearPendingException(aCx);
|
||||
}
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
JS::RootedObject globalProxy(aCx);
|
||||
|
@ -1647,16 +1653,25 @@ nsresult mozJSModuleLoader::ImportESModule(
|
|||
/* aIsDynamicImport = */ false, mModuleLoader, visitedSet, nullptr);
|
||||
|
||||
rv = request->StartModuleLoad();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (NS_FAILED(rv)) {
|
||||
mModuleLoader->MaybeReportLoadError(aCx);
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = mModuleLoader->ProcessRequests();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (NS_FAILED(rv)) {
|
||||
mModuleLoader->MaybeReportLoadError(aCx);
|
||||
return rv;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(request->IsReadyToRun());
|
||||
if (!request->mModuleScript) {
|
||||
mModuleLoader->MaybeReportLoadError(aCx);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
// All modules are loaded. MaybeReportLoadError isn't necessary from here.
|
||||
|
||||
if (!request->InstantiateModuleGraph()) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
import { x as x1 } from "resource://test/es6module_absolute2.js";
|
||||
import { x as x2 } from "./es6module_absolute2.js";
|
||||
export const absoluteX = x1;
|
||||
export const relativeX = x2;
|
|
@ -0,0 +1 @@
|
|||
export const x = { value: 10 };
|
|
@ -0,0 +1,7 @@
|
|||
let resolve;
|
||||
|
||||
export const result = new Promise(r => { resolve = r; });
|
||||
|
||||
import("./es6module_dynamic_import2.js").then(ns => {}, e => {
|
||||
resolve(e);
|
||||
});
|
|
@ -0,0 +1 @@
|
|||
export const x = 10;
|
|
@ -0,0 +1 @@
|
|||
import { y } from "./es6module_import_error2.js";
|
|
@ -0,0 +1 @@
|
|||
export const x = 10;
|
|
@ -1 +1,4 @@
|
|||
throw "Failing with error foobar";
|
||||
function throwFunction() {
|
||||
throw new Error("Failing with error foobar");
|
||||
}
|
||||
throwFunction();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
function run_test() {
|
||||
add_task(async function() {
|
||||
// Test basic import.
|
||||
let ns = ChromeUtils.importESModule("resource://test/es6module.js");
|
||||
Assert.equal(ns.loadCount, 1);
|
||||
|
@ -12,23 +12,77 @@ function run_test() {
|
|||
Assert.equal(ns.loadCount, 1);
|
||||
Assert.equal(ns, ns2);
|
||||
|
||||
// Test imports with absolute and relative URIs return the same thing.
|
||||
let ns3 = ChromeUtils.importESModule("resource://test/es6module_absolute.js");
|
||||
let ns4 = ChromeUtils.importESModule("resource://test/es6module_absolute2.js");
|
||||
Assert.ok(ns3.absoluteX === ns3.relativeX);
|
||||
Assert.ok(ns3.absoluteX === ns4.x);
|
||||
|
||||
// Test load failure.
|
||||
testFailure("resource://test/es6module_not_found.js");
|
||||
|
||||
testFailure("resource://test/es6module_not_found.js", {
|
||||
type: "Error",
|
||||
message: "Failed to load resource://test/es6module_not_found.js",
|
||||
fileName: "test_import_es6_modules.js",
|
||||
stack: "testFailure",
|
||||
lineNumber: "*",
|
||||
columnNumber: "*",
|
||||
});
|
||||
|
||||
// Test load failure in import.
|
||||
testFailure("resource://test/es6module_missing_import.js");
|
||||
testFailure("resource://test/es6module_missing_import.js", {
|
||||
type: "Error",
|
||||
message: "Failed to load resource://test/es6module_not_found2.js",
|
||||
fileName: "test_import_es6_modules.js",
|
||||
stack: "testFailure",
|
||||
lineNumber: "*",
|
||||
columnNumber: "*",
|
||||
});
|
||||
|
||||
// Test parse error.
|
||||
testFailure("resource://test/es6module_parse_error.js", "SyntaxError");
|
||||
testFailure("resource://test/es6module_parse_error.js", {
|
||||
type: "SyntaxError",
|
||||
fileName: "resource://test/es6module_parse_error.js",
|
||||
stack: "testFailure",
|
||||
lineNumber: 1,
|
||||
columnNumber: 5,
|
||||
});
|
||||
|
||||
// Test parse error in import.
|
||||
testFailure("resource://test/es6module_parse_error_in_import.js", "SyntaxError");
|
||||
testFailure("resource://test/es6module_parse_error_in_import.js", {
|
||||
type: "SyntaxError",
|
||||
fileName: "resource://test/es6module_parse_error.js",
|
||||
stack: "testFailure",
|
||||
lineNumber: 1,
|
||||
columnNumber: 5,
|
||||
});
|
||||
|
||||
// Test import error.
|
||||
testFailure("resource://test/es6module_import_error.js", {
|
||||
type: "SyntaxError",
|
||||
fileName: "resource://test/es6module_import_error.js",
|
||||
lineNumber: 1,
|
||||
columnNumber: 9,
|
||||
});
|
||||
|
||||
// Test execution failure.
|
||||
let exception1 = testFailure("resource://test/es6module_throws.js", "foobar");
|
||||
let exception1 = testFailure("resource://test/es6module_throws.js", {
|
||||
type: "Error",
|
||||
message: "foobar",
|
||||
stack: "throwFunction",
|
||||
fileName: "resource://test/es6module_throws.js",
|
||||
lineNumber: 2,
|
||||
columnNumber: 9,
|
||||
});
|
||||
|
||||
// Test re-import throws the same exception.
|
||||
let exception2 = testFailure("resource://test/es6module_throws.js", "foobar");
|
||||
let exception2 = testFailure("resource://test/es6module_throws.js", {
|
||||
type: "Error",
|
||||
message: "foobar",
|
||||
stack: "throwFunction",
|
||||
fileName: "resource://test/es6module_throws.js",
|
||||
lineNumber: 2,
|
||||
columnNumber: 9,
|
||||
});
|
||||
Assert.ok(exception1 === exception2);
|
||||
|
||||
// Test loading cyclic module graph.
|
||||
|
@ -43,23 +97,79 @@ function run_test() {
|
|||
Assert.equal(ns.getValueFromA(), "a");
|
||||
|
||||
// Test top-level await is not supported.
|
||||
testFailure("resource://test/es6module_top_level_await.js", "not supported");
|
||||
}
|
||||
testFailure("resource://test/es6module_top_level_await.js", {
|
||||
type: "SyntaxError",
|
||||
message: "not supported",
|
||||
stack: "testFailure",
|
||||
fileName: "resource://test/es6module_top_level_await.js",
|
||||
lineNumber: 1,
|
||||
columnNumber: 0,
|
||||
});
|
||||
|
||||
function testFailure(url, exceptionPart) {
|
||||
// Test dynamic import is not supported.
|
||||
ns = ChromeUtils.importESModule("resource://test/es6module_dynamic_import.js");
|
||||
const e = await ns.result;
|
||||
checkException(e, {
|
||||
type: "Error",
|
||||
message: "not supported",
|
||||
fileName: "resource://test/es6module_dynamic_import.js",
|
||||
lineNumber: 5,
|
||||
columnNumber: 1,
|
||||
});
|
||||
});
|
||||
|
||||
function testFailure(url, expected) {
|
||||
let threw = false;
|
||||
let exception;
|
||||
let importLine, importColumn;
|
||||
try {
|
||||
// Get the line/column for ChromeUtils.importESModule.
|
||||
// lineNumber/columnNumber value with "*" in `expected` points the
|
||||
// line/column.
|
||||
let e = new Error();
|
||||
importLine = e.lineNumber + 3;
|
||||
importColumn = 17;
|
||||
ChromeUtils.importESModule(url);
|
||||
} catch (e) {
|
||||
threw = true;
|
||||
exception = e;
|
||||
}
|
||||
|
||||
Assert.ok(threw);
|
||||
if (exceptionPart) {
|
||||
Assert.ok(exception.toString().includes(exceptionPart));
|
||||
}
|
||||
Assert.ok(threw, "Error should be thrown");
|
||||
|
||||
checkException(exception, expected, importLine, importColumn);
|
||||
|
||||
return exception;
|
||||
}
|
||||
|
||||
function checkException(exception, expected, importLine, importColumn) {
|
||||
if ("type" in expected) {
|
||||
Assert.equal(exception.constructor.name, expected.type, "error type");
|
||||
}
|
||||
if ("message" in expected) {
|
||||
Assert.ok(exception.message.includes(expected.message),
|
||||
`Message "${exception.message}" should contain "${expected.message}"`);
|
||||
}
|
||||
if ("stack" in expected) {
|
||||
Assert.ok(exception.stack.includes(expected.stack),
|
||||
`Stack "${exception.stack}" should contain "${expected.stack}"`);
|
||||
}
|
||||
if ("fileName" in expected) {
|
||||
Assert.ok(exception.fileName.includes(expected.fileName),
|
||||
`fileName "${exception.fileName}" should contain "${expected.fileName}"`);
|
||||
}
|
||||
if ("lineNumber" in expected) {
|
||||
let expectedLine = expected.lineNumber;
|
||||
if (expectedLine === "*") {
|
||||
expectedLine = importLine;
|
||||
}
|
||||
Assert.equal(exception.lineNumber, expectedLine, "lineNumber");
|
||||
}
|
||||
if ("columnNumber" in expected) {
|
||||
let expectedColumn = expected.columnNumber;
|
||||
if (expectedColumn === "*") {
|
||||
expectedColumn = importColumn;
|
||||
}
|
||||
Assert.equal(exception.columnNumber, expectedColumn, "columnNumber");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,12 @@ support-files =
|
|||
api_script.js
|
||||
import_stack.jsm
|
||||
import_stack.sys.mjs
|
||||
es6module_import_error.js
|
||||
es6module_import_error2.js
|
||||
es6module_dynamic_import.js
|
||||
es6module_dynamic_import2.js
|
||||
es6module_absolute.js
|
||||
es6module_absolute2.js
|
||||
|
||||
[test_allowWaivers.js]
|
||||
[test_bogus_files.js]
|
||||
|
|
|
@ -4333,29 +4333,6 @@ void PresShell::DoFlushPendingNotifications(mozilla::ChangesToFlush aFlush) {
|
|||
LAYOUT_TELEMETRY_RECORD_BASE(Restyle);
|
||||
|
||||
mPresContext->RestyleManager()->ProcessPendingRestyles();
|
||||
}
|
||||
|
||||
// Now those constructors or events might have posted restyle
|
||||
// events. At the same time, we still need up-to-date style data.
|
||||
// In particular, reflow depends on style being completely up to
|
||||
// date. If it's not, then style reparenting, which can
|
||||
// happen during reflow, might suddenly pick up the new rules and
|
||||
// we'll end up with frames whose style doesn't match the frame
|
||||
// type.
|
||||
if (MOZ_LIKELY(!mIsDestroying)) {
|
||||
nsAutoScriptBlocker scriptBlocker;
|
||||
Maybe<uint64_t> innerWindowID;
|
||||
if (auto* window = mDocument->GetInnerWindow()) {
|
||||
innerWindowID = Some(window->WindowID());
|
||||
}
|
||||
AutoProfilerStyleMarker tracingStyleFlush(std::move(mStyleCause),
|
||||
innerWindowID);
|
||||
PerfStats::AutoMetricRecording<PerfStats::Metric::Styling> autoRecording;
|
||||
LAYOUT_TELEMETRY_RECORD_BASE(Restyle);
|
||||
|
||||
mPresContext->RestyleManager()->ProcessPendingRestyles();
|
||||
// Clear mNeedStyleFlush here agagin to make this flag work properly for
|
||||
// optimization since the flag might have set in ProcessPendingRestyles().
|
||||
mNeedStyleFlush = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -6378,11 +6378,14 @@ static ImgDrawResult DrawImageInternal(
|
|||
if (!aSVGContext) {
|
||||
// Use the default viewport.
|
||||
fallbackContext.emplace(Some(params.svgViewportSize));
|
||||
} else if (!aSVGContext->GetViewportSize()) {
|
||||
fallbackContext = aSVGContext;
|
||||
fallbackContext->SetViewportSize(Some(params.svgViewportSize));
|
||||
}
|
||||
|
||||
result = aImage->Draw(&aContext, params.size, params.region,
|
||||
imgIContainer::FRAME_CURRENT, aSamplingFilter,
|
||||
aSVGContext ? aSVGContext : fallbackContext,
|
||||
fallbackContext ? fallbackContext : aSVGContext,
|
||||
aImageFlags, aOpacity);
|
||||
}
|
||||
|
||||
|
|
|
@ -2176,8 +2176,8 @@ void nsDisplayList::Paint(nsDisplayListBuilder* aBuilder, gfxContext* aCtx,
|
|||
continue;
|
||||
}
|
||||
|
||||
nsRegion visible(item->GetClippedBounds(aBuilder));
|
||||
visible.And(visible, item->GetPaintRect(aBuilder, aCtx));
|
||||
nsRect visible = item->GetClippedBounds(aBuilder);
|
||||
visible = visible.Intersect(item->GetPaintRect(aBuilder, aCtx));
|
||||
if (visible.IsEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
@ -2185,7 +2185,7 @@ void nsDisplayList::Paint(nsDisplayListBuilder* aBuilder, gfxContext* aCtx,
|
|||
DisplayItemClip currentClip = item->GetClip();
|
||||
if (currentClip.HasClip()) {
|
||||
aCtx->Save();
|
||||
if (currentClip.IsRectClippedByRoundedCorner(visible.GetBounds())) {
|
||||
if (currentClip.IsRectClippedByRoundedCorner(visible)) {
|
||||
currentClip.ApplyTo(aCtx, aAppUnitsPerDevPixel);
|
||||
} else {
|
||||
currentClip.ApplyRectTo(aCtx, aAppUnitsPerDevPixel);
|
||||
|
@ -8400,8 +8400,7 @@ void nsDisplayFilters::PaintWithContentsPaintCallback(
|
|||
auto filterChain = mStyle ? mStyle->StyleEffects()->mFilters.AsSpan()
|
||||
: mFrame->StyleEffects()->mFilters.AsSpan();
|
||||
SVGIntegrationUtils::PaintFilter(
|
||||
params,
|
||||
filterChain,
|
||||
params, filterChain,
|
||||
[&](gfxContext& aContext, nsIFrame* aTarget, const gfxMatrix& aTransform,
|
||||
const nsIntRect* aDirtyRect, imgDrawingParams& aImgParams) {
|
||||
gfxContextMatrixAutoSaveRestore autoSR(&aContext);
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
using namespace mozilla;
|
||||
using namespace mozilla::css;
|
||||
using mozilla::dom::Animation;
|
||||
using mozilla::dom::AnimationEffect;
|
||||
using mozilla::dom::AnimationPlayState;
|
||||
using mozilla::dom::CSSAnimation;
|
||||
using mozilla::dom::Element;
|
||||
|
|
|
@ -59,6 +59,11 @@ bool nsTransitionManager::UpdateTransitions(dom::Element* aElement,
|
|||
return false;
|
||||
}
|
||||
|
||||
if (aNewStyle.StyleDisplay()->mDisplay == StyleDisplay::None) {
|
||||
StopAnimationsForElement(aElement, aPseudoType);
|
||||
return false;
|
||||
}
|
||||
|
||||
CSSTransitionCollection* collection =
|
||||
CSSTransitionCollection::GetAnimationCollection(aElement, aPseudoType);
|
||||
return DoUpdateTransitions(*aNewStyle.StyleUIReset(), aElement, aPseudoType,
|
||||
|
|
|
@ -59,11 +59,7 @@ bool CSSClipPathInstance::HitTestBasicShapeOrPathClip(nsIFrame* aFrame,
|
|||
const gfxPoint& aPoint) {
|
||||
const auto& clipPathStyle = aFrame->StyleSVGReset()->mClipPath;
|
||||
MOZ_ASSERT(!clipPathStyle.IsNone(), "unexpected none value");
|
||||
// In the future CSSClipPathInstance may handle <clipPath> references as
|
||||
// well. For the time being return early.
|
||||
if (clipPathStyle.IsUrl()) {
|
||||
return false;
|
||||
}
|
||||
MOZ_ASSERT(!clipPathStyle.IsUrl(), "unexpected url value");
|
||||
|
||||
CSSClipPathInstance instance(aFrame, clipPathStyle);
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
|
||||
// Keep others in (case-insensitive) order:
|
||||
#include "gfxUtils.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/LookAndFeel.h"
|
||||
#include "mozilla/StaticPrefs_svg.h"
|
||||
#include "mozilla/dom/Document.h"
|
||||
#include "nsIFrame.h"
|
||||
#include "nsPresContext.h"
|
||||
|
@ -36,7 +36,8 @@ void SVGImageContext::MaybeStoreContextPaint(Maybe<SVGImageContext>& aContext,
|
|||
return;
|
||||
}
|
||||
|
||||
if (aPresContext.Document()->IsDocumentURISchemeChrome()) {
|
||||
if (StaticPrefs::svg_embedder_prefers_color_scheme_content_enabled() ||
|
||||
aPresContext.Document()->IsDocumentURISchemeChrome()) {
|
||||
if (!aContext) {
|
||||
aContext.emplace();
|
||||
}
|
||||
|
|
|
@ -804,17 +804,19 @@ void SVGUtils::PaintFrameWithEffects(nsIFrame* aFrame, gfxContext& aContext,
|
|||
}
|
||||
|
||||
bool SVGUtils::HitTestClip(nsIFrame* aFrame, const gfxPoint& aPoint) {
|
||||
// If the clip-path property references non-existent or invalid clipPath
|
||||
// element(s) we ignore it.
|
||||
SVGClipPathFrame* clipPathFrame;
|
||||
SVGObserverUtils::GetAndObserveClipPath(aFrame, &clipPathFrame);
|
||||
if (clipPathFrame) {
|
||||
return clipPathFrame->PointIsInsideClipPath(aFrame, aPoint);
|
||||
const nsStyleSVGReset* svgReset = aFrame->StyleSVGReset();
|
||||
if (!svgReset->HasClipPath()) {
|
||||
return true;
|
||||
}
|
||||
if (aFrame->StyleSVGReset()->HasClipPath()) {
|
||||
return CSSClipPathInstance::HitTestBasicShapeOrPathClip(aFrame, aPoint);
|
||||
if (svgReset->mClipPath.IsUrl()) {
|
||||
// If the clip-path property references non-existent or invalid clipPath
|
||||
// element(s) we ignore it.
|
||||
SVGClipPathFrame* clipPathFrame;
|
||||
SVGObserverUtils::GetAndObserveClipPath(aFrame, &clipPathFrame);
|
||||
return !clipPathFrame ||
|
||||
clipPathFrame->PointIsInsideClipPath(aFrame, aPoint);
|
||||
}
|
||||
return true;
|
||||
return CSSClipPathInstance::HitTestBasicShapeOrPathClip(aFrame, aPoint);
|
||||
}
|
||||
|
||||
nsIFrame* SVGUtils::HitTestChildren(SVGDisplayContainerFrame* aFrame,
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
// Original author: ekr@rtfm.com
|
||||
|
||||
|
||||
#include "logging.h"
|
||||
#include "nss.h"
|
||||
#include "ssl.h"
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "nss.h"
|
||||
#include "ssl.h"
|
||||
|
||||
|
||||
#include "sdp/RsdparsaSdpParser.h"
|
||||
#include "sdp/SipccSdpParser.h"
|
||||
#include "sdp/SdpMediaSection.h"
|
||||
|
|
|
@ -12754,6 +12754,13 @@
|
|||
value: false
|
||||
mirror: always
|
||||
|
||||
# This pref controls whether the `prefers-color-scheme` value of SVG images
|
||||
# reacts to the embedder `color-scheme` in content.
|
||||
- name: svg.embedder-prefers-color-scheme.content.enabled
|
||||
type: RelaxedAtomicBool
|
||||
value: true
|
||||
mirror: always
|
||||
|
||||
# Enables the 'context-fill' and 'context-stroke' keywords for particular
|
||||
# domains. We expect this list to be Mozilla-controlled properties, since the
|
||||
# 'context-*' keywords are not part of any spec. We expect to remove this
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -10,6 +10,9 @@ with Files("AUTHORS"):
|
|||
with Files("LICENSE"):
|
||||
BUG_COMPONENT = ("mozilla.org", "Licensing")
|
||||
|
||||
with Files("mots.yaml"):
|
||||
BUG_COMPONENT = ("Conduit", "mots")
|
||||
|
||||
with Files("aclocal.m4"):
|
||||
BUG_COMPONENT = ("Firefox Build System", "General")
|
||||
|
||||
|
@ -203,4 +206,6 @@ SPHINX_TREES["gtest"] = "docs/gtest"
|
|||
|
||||
SPHINX_TREES["nspr"] = "docs/nspr"
|
||||
|
||||
SPHINX_TREES["mots"] = "docs/mots"
|
||||
|
||||
include("build/templates.mozbuild")
|
||||
|
|
|
@ -759,6 +759,28 @@ void LoadInfo::ComputeIsThirdPartyContext(dom::WindowGlobalParent* aGlobal) {
|
|||
|
||||
NS_IMPL_ISUPPORTS(LoadInfo, nsILoadInfo)
|
||||
|
||||
#ifdef EARLY_BETA_OR_EARLIER
|
||||
void LoadInfo::ReleaseMembers() {
|
||||
Unused << NS_DispatchToCurrentThread(NS_NewRunnableFunction(
|
||||
"LoadInfo::ReleasePrincipalAnUrl",
|
||||
[loadinPrinciple{std::move(mLoadingPrincipal)},
|
||||
principalToInherit{std::move(mPrincipalToInherit)},
|
||||
topLevelPrincipal{std::move(mTopLevelPrincipal)},
|
||||
resultPrincipalURI{std::move(mResultPrincipalURI)},
|
||||
unstrippedURI{std::move(mUnstrippedURI)}]() {}));
|
||||
|
||||
Unused << NS_DispatchToCurrentThread(NS_NewRunnableFunction(
|
||||
"LoadInfo::ReleaseOther",
|
||||
[cspEventListener{std::move(mCSPEventListener)},
|
||||
performanceStorage{std::move(mPerformanceStorage)},
|
||||
cspToInherit{std::move(mCspToInherit)}]() {}));
|
||||
|
||||
Unused << NS_DispatchToCurrentThread(NS_NewRunnableFunction(
|
||||
"LoadInfo::ReleaseCookieJarSettings",
|
||||
[cookieJarSettings{std::move(mCookieJarSettings)}]() {}));
|
||||
}
|
||||
|
||||
#else
|
||||
void LoadInfo::ReleaseMembers() {
|
||||
mCSPEventListener = nullptr;
|
||||
mCookieJarSettings = nullptr;
|
||||
|
@ -772,6 +794,7 @@ void LoadInfo::ReleaseMembers() {
|
|||
mUnstrippedURI = nullptr;
|
||||
mAncestorPrincipals.Clear();
|
||||
}
|
||||
#endif
|
||||
|
||||
LoadInfo::~LoadInfo() { ReleaseMembers(); }
|
||||
|
||||
|
|
|
@ -129,7 +129,7 @@ pth:xpcom/geckoprocesstypes_generator
|
|||
pth:xpcom/idl-parser
|
||||
# glean-sdk may not be installable if a wheel isn't available
|
||||
# and it has to be built from source.
|
||||
pypi-optional:glean-sdk==50.1.0:telemetry will not be collected
|
||||
pypi-optional:glean-sdk==50.1.2:telemetry will not be collected
|
||||
# Mach gracefully handles the case where `psutil` is unavailable.
|
||||
# We aren't (yet) able to pin packages in automation, so we have to
|
||||
# support down to the oldest locally-installed version (5.4.2).
|
||||
|
|
|
@ -1125,4 +1125,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
|
|||
|
||||
static const int32_t kUnknownId = -1;
|
||||
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1666004892530000);
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1666264241789000);
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,5 +1,131 @@
|
|||
{
|
||||
"data": [
|
||||
{
|
||||
"schema": 1657673315354,
|
||||
"derHash": "1gTwFIol2TurV304cFy6rixEd95+tR2GoPayZYQBPXo=",
|
||||
"subject": "CN=Thawte G5 TLS CN ECC P-384 SHA384 2022 CA1,O=DigiCert\\, Inc.,C=US",
|
||||
"subjectDN": "MFsxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEzMDEGA1UEAxMqVGhhd3RlIEc1IFRMUyBDTiBFQ0MgUC0zODQgU0hBMzg0IDIwMjIgQ0Ex",
|
||||
"whitelist": false,
|
||||
"attachment": {
|
||||
"hash": "3129242e85cdf0f309e258648b1644d453f871ce619308f47cbf52fb63efabc7",
|
||||
"size": 1244,
|
||||
"filename": "OJlQ9mdtsB5vrqQ648dNZZGkd5CgwQhqLYav-0L7PzY=.pem",
|
||||
"location": "security-state-staging/intermediates/590b4b4e-10b8-46d4-b352-5badc01a1fef.pem",
|
||||
"mimetype": "application/x-pem-file"
|
||||
},
|
||||
"pubKeyHash": "OJlQ9mdtsB5vrqQ648dNZZGkd5CgwQhqLYav+0L7PzY=",
|
||||
"crlite_enrolled": false,
|
||||
"id": "27e46e16-a6cd-4328-810e-bbfd6f6cda46",
|
||||
"last_modified": 1657673823452
|
||||
},
|
||||
{
|
||||
"schema": 1657673317285,
|
||||
"derHash": "kV7I3MI3+pMssCRamW/zpxFVCkZCFP11EvIlqmCAYcg=",
|
||||
"subject": "CN=DigiCert G5 TLS CN ECC P-384 SHA384 2022 CA1,O=DigiCert\\, Inc.,C=US",
|
||||
"subjectDN": "MF0xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE1MDMGA1UEAxMsRGlnaUNlcnQgRzUgVExTIENOIEVDQyBQLTM4NCBTSEEzODQgMjAyMiBDQTE=",
|
||||
"whitelist": false,
|
||||
"attachment": {
|
||||
"hash": "1fb03123d91ae87c93b92fe243f54a0a2bef16ebd20fd7929d508c587216e450",
|
||||
"size": 1248,
|
||||
"filename": "R3PZqaW3zCxxaQ5bSQKCTasFBA4J5Cnc9fLzxRf0_bs=.pem",
|
||||
"location": "security-state-staging/intermediates/dc178a9d-41d4-43e0-b432-a4241b65e4dc.pem",
|
||||
"mimetype": "application/x-pem-file"
|
||||
},
|
||||
"pubKeyHash": "R3PZqaW3zCxxaQ5bSQKCTasFBA4J5Cnc9fLzxRf0/bs=",
|
||||
"crlite_enrolled": false,
|
||||
"id": "ab257771-7ba0-4d9a-82f4-c57bc9689748",
|
||||
"last_modified": 1657673823443
|
||||
},
|
||||
{
|
||||
"schema": 1657673313115,
|
||||
"derHash": "q373BbC42yKRwryNyfaa2DRaPMVD24zcSai0GSgt6iI=",
|
||||
"subject": "CN=DigiCert G5 TLS CN RSA4096 SHA384 2022 CA1,O=DigiCert\\, Inc.,C=US",
|
||||
"subjectDN": "MFsxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEzMDEGA1UEAxMqRGlnaUNlcnQgRzUgVExTIENOIFJTQTQwOTYgU0hBMzg0IDIwMjIgQ0Ex",
|
||||
"whitelist": false,
|
||||
"attachment": {
|
||||
"hash": "75314f6a9a6c8cab0a538f33f85a9899fe32efa8ba2411045fd4e1490b813572",
|
||||
"size": 2393,
|
||||
"filename": "wbQtVyDhsJDZ7ZTgMHcNj5L1XL3nQo_qsShPSxHiGlg=.pem",
|
||||
"location": "security-state-staging/intermediates/7d18b322-587b-4da8-b437-277da1ed32eb.pem",
|
||||
"mimetype": "application/x-pem-file"
|
||||
},
|
||||
"pubKeyHash": "wbQtVyDhsJDZ7ZTgMHcNj5L1XL3nQo/qsShPSxHiGlg=",
|
||||
"crlite_enrolled": false,
|
||||
"id": "a00a96bc-01aa-427d-a44a-46bb9ede86eb",
|
||||
"last_modified": 1657673823434
|
||||
},
|
||||
{
|
||||
"schema": 1657673312034,
|
||||
"derHash": "5Duq14t4+e6mkD5W9FbewkvZZIwTrgLi3heh+E89CAc=",
|
||||
"subject": "CN=GeoTrust G5 TLS CN ECC P-384 SHA384 2022 CA1,O=DigiCert\\, Inc.,C=US",
|
||||
"subjectDN": "MF0xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE1MDMGA1UEAxMsR2VvVHJ1c3QgRzUgVExTIENOIEVDQyBQLTM4NCBTSEEzODQgMjAyMiBDQTE=",
|
||||
"whitelist": false,
|
||||
"attachment": {
|
||||
"hash": "d4c1f4983ff6e6192de0acc76728fb52393bf92a90670487d4f3b63f1852ee17",
|
||||
"size": 1248,
|
||||
"filename": "5zJ7jFc2gNMH1N9rX_DHOV3JCnG-ukw0EkslpYXr-fM=.pem",
|
||||
"location": "security-state-staging/intermediates/a77313bc-afed-4e76-b175-842d33665225.pem",
|
||||
"mimetype": "application/x-pem-file"
|
||||
},
|
||||
"pubKeyHash": "5zJ7jFc2gNMH1N9rX/DHOV3JCnG+ukw0EkslpYXr+fM=",
|
||||
"crlite_enrolled": false,
|
||||
"id": "0f02ee9b-1f97-4776-a939-78091f93ea63",
|
||||
"last_modified": 1657673823425
|
||||
},
|
||||
{
|
||||
"schema": 1657673316324,
|
||||
"derHash": "K20Zn341yMZ+C7qCn5KZHPMUZiZeEfowvRn8W2w2FRw=",
|
||||
"subject": "CN=GeoTrust G5 TLS CN RSA4096 SHA384 2022 CA1,O=DigiCert\\, Inc.,C=US",
|
||||
"subjectDN": "MFsxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEzMDEGA1UEAxMqR2VvVHJ1c3QgRzUgVExTIENOIFJTQTQwOTYgU0hBMzg0IDIwMjIgQ0Ex",
|
||||
"whitelist": false,
|
||||
"attachment": {
|
||||
"hash": "ddb561a05fdd0b1dd429bc3c3c50e0a3805423d5b279916f9ffb3d4ff59bc5b4",
|
||||
"size": 2393,
|
||||
"filename": "HHoUjrAj1XP5vnU44w9Pu7YgFS_u0QD7hTHolzugvKQ=.pem",
|
||||
"location": "security-state-staging/intermediates/cb70ae36-1854-4bda-922f-ee1120bc9050.pem",
|
||||
"mimetype": "application/x-pem-file"
|
||||
},
|
||||
"pubKeyHash": "HHoUjrAj1XP5vnU44w9Pu7YgFS/u0QD7hTHolzugvKQ=",
|
||||
"crlite_enrolled": false,
|
||||
"id": "3f839c5b-ebd1-4e42-9cbe-54203b19af29",
|
||||
"last_modified": 1657673823416
|
||||
},
|
||||
{
|
||||
"schema": 1657673314428,
|
||||
"derHash": "Honj0nAtPxc13OfamVYWAFNKBkVKlIdNB4DQRDyvQVE=",
|
||||
"subject": "CN=Thawte G5 TLS CN RSA4096 SHA384 2022 CA1,O=DigiCert\\, Inc.,C=US",
|
||||
"subjectDN": "MFkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjExMC8GA1UEAxMoVGhhd3RlIEc1IFRMUyBDTiBSU0E0MDk2IFNIQTM4NCAyMDIyIENBMQ==",
|
||||
"whitelist": false,
|
||||
"attachment": {
|
||||
"hash": "4e176dd6e8181e4dc2b1cbad5e566815a70ec2668675335f58b4f586eacfa6a1",
|
||||
"size": 2389,
|
||||
"filename": "8S2WQvlz04IQBZ9zLQRNo9VXRswtrQL75271G7UZlK4=.pem",
|
||||
"location": "security-state-staging/intermediates/8eec4898-0567-46bf-aa86-2f2e3a4151f4.pem",
|
||||
"mimetype": "application/x-pem-file"
|
||||
},
|
||||
"pubKeyHash": "8S2WQvlz04IQBZ9zLQRNo9VXRswtrQL75271G7UZlK4=",
|
||||
"crlite_enrolled": false,
|
||||
"id": "2bcd4ea3-7fd9-4719-9830-8b7a610d018e",
|
||||
"last_modified": 1657673823406
|
||||
},
|
||||
{
|
||||
"schema": 1657328224342,
|
||||
"derHash": "MGv4CZY2pE//te7c5uMMDzbH1D9syloso6txZo81MyA=",
|
||||
"subject": "SERIALNUMBER=G63287510,CN=ANF Secure Server CA,OU=ANF Autoridad intermedia tecnicos,O=ANF Autoridad de Certificacion,C=ES",
|
||||
"subjectDN": "MIGVMRIwEAYDVQQFEwlHNjMyODc1MTAxCzAJBgNVBAYTAkVTMScwJQYDVQQKEx5BTkYgQXV0b3JpZGFkIGRlIENlcnRpZmljYWNpb24xKjAoBgNVBAsTIUFORiBBdXRvcmlkYWQgaW50ZXJtZWRpYSB0ZWNuaWNvczEdMBsGA1UEAxMUQU5GIFNlY3VyZSBTZXJ2ZXIgQ0E=",
|
||||
"whitelist": false,
|
||||
"attachment": {
|
||||
"hash": "94f2679da6fc663782dece4baeb031bb22bd3de9a11c9b24ed20b914260e0d4c",
|
||||
"size": 2645,
|
||||
"filename": "uiEcUi6rH4hr3LVqMdSOFpFfUPBYYzPvgxeYIKOOeGk=.pem",
|
||||
"location": "security-state-staging/intermediates/39894355-15d9-4bf9-aa00-9b376067ec88.pem",
|
||||
"mimetype": "application/x-pem-file"
|
||||
},
|
||||
"pubKeyHash": "uiEcUi6rH4hr3LVqMdSOFpFfUPBYYzPvgxeYIKOOeGk=",
|
||||
"crlite_enrolled": false,
|
||||
"id": "bc4939de-dfcf-4dba-ba83-ac8dada019cc",
|
||||
"last_modified": 1657544223180
|
||||
},
|
||||
{
|
||||
"schema": 1657327855850,
|
||||
"derHash": "l6BzlXxYEnJXV2cvIiaQZVoUB9cQEe38iy+txRKJEdo=",
|
||||
|
@ -6660,24 +6786,6 @@
|
|||
"id": "7b545696-9069-4460-9c39-f452b104bfe1",
|
||||
"last_modified": 1645579198385
|
||||
},
|
||||
{
|
||||
"schema": 1645578808760,
|
||||
"derHash": "MGv4CZY2pE//te7c5uMMDzbH1D9syloso6txZo81MyA=",
|
||||
"subject": "SERIALNUMBER=G63287510,CN=ANF Secure Server CA,OU=ANF Autoridad intermedia tecnicos,O=ANF Autoridad de Certificacion,C=ES",
|
||||
"subjectDN": "MIGVMRIwEAYDVQQFEwlHNjMyODc1MTAxCzAJBgNVBAYTAkVTMScwJQYDVQQKEx5BTkYgQXV0b3JpZGFkIGRlIENlcnRpZmljYWNpb24xKjAoBgNVBAsTIUFORiBBdXRvcmlkYWQgaW50ZXJtZWRpYSB0ZWNuaWNvczEdMBsGA1UEAxMUQU5GIFNlY3VyZSBTZXJ2ZXIgQ0E=",
|
||||
"whitelist": false,
|
||||
"attachment": {
|
||||
"hash": "94f2679da6fc663782dece4baeb031bb22bd3de9a11c9b24ed20b914260e0d4c",
|
||||
"size": 2645,
|
||||
"filename": "uiEcUi6rH4hr3LVqMdSOFpFfUPBYYzPvgxeYIKOOeGk=.pem",
|
||||
"location": "security-state-staging/intermediates/39894355-15d9-4bf9-aa00-9b376067ec88.pem",
|
||||
"mimetype": "application/x-pem-file"
|
||||
},
|
||||
"pubKeyHash": "uiEcUi6rH4hr3LVqMdSOFpFfUPBYYzPvgxeYIKOOeGk=",
|
||||
"crlite_enrolled": true,
|
||||
"id": "bc4939de-dfcf-4dba-ba83-ac8dada019cc",
|
||||
"last_modified": 1645579198372
|
||||
},
|
||||
{
|
||||
"schema": 1645578788075,
|
||||
"derHash": "05zjn/b0SdTzOR7iAE1wXsIvmc/8pAqI+F2yZFSt29E=",
|
||||
|
@ -25255,5 +25363,5 @@
|
|||
"last_modified": 1559865863642
|
||||
}
|
||||
],
|
||||
"timestamp": 1657328223872
|
||||
"timestamp": 1657673823452
|
||||
}
|
||||
|
|
|
@ -1650,6 +1650,12 @@ impl<'le> TElement for GeckoElement<'le> {
|
|||
|
||||
let after_change_ui_style = after_change_style.get_ui();
|
||||
let existing_transitions = self.css_transitions_info();
|
||||
|
||||
if after_change_style.get_box().clone_display().is_none() {
|
||||
// We need to cancel existing transitions.
|
||||
return !existing_transitions.is_empty();
|
||||
}
|
||||
|
||||
let mut transitions_to_keep = LonghandIdSet::new();
|
||||
for transition_property in after_change_style.transition_properties() {
|
||||
let physical_longhand = transition_property
|
||||
|
|
|
@ -347,7 +347,7 @@ trait PrivateMatchMethods: TElement {
|
|||
return false;
|
||||
}
|
||||
|
||||
if new_style.clone_display().is_none() || old_style.clone_display().is_none() {
|
||||
if old_style.clone_display().is_none() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
|
||||
# cargo-vet audits file
|
||||
|
||||
[[audits.android_logger]]
|
||||
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "0.11.0"
|
||||
notes = "Small crate, wrapping Android log functionality, reviewed by janerik"
|
||||
|
||||
[[audits.android_system_properties]]
|
||||
who = "Nicolas Silva <nical@fastmail.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
|
@ -57,12 +63,24 @@ criteria = "safe-to-deploy"
|
|||
version = "50.1.0"
|
||||
notes = "Maintained by the Glean team at Mozilla"
|
||||
|
||||
[[audits.glean]]
|
||||
who = "Travis Long <tlong@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "50.1.2"
|
||||
notes = "Maintained by the Glean team at Mozilla"
|
||||
|
||||
[[audits.glean-core]]
|
||||
who = "Jan-Erik Rediger <jrediger@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "50.1.0"
|
||||
notes = "Maintained by the Glean team at Mozilla"
|
||||
|
||||
[[audits.glean-core]]
|
||||
who = "Travis Long <tlong@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "50.1.2"
|
||||
notes = "Maintained by the Glean team at Mozilla"
|
||||
|
||||
[[audits.linked-hash-map]]
|
||||
who = "Aria Beingessner <a.beingessner@gmail.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
|
@ -129,12 +147,42 @@ criteria = "safe-to-deploy"
|
|||
delta = "0.1.19 -> 0.1.20"
|
||||
notes = "I am the author of most of these changes upstream, and prepared the release myself, at which point I looked at the other changes since 0.1.19."
|
||||
|
||||
[[audits.uniffi]]
|
||||
who = "Travis Long <tlong@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "0.19.3"
|
||||
notes = "Maintained by the Glean and Application Services teams"
|
||||
|
||||
[[audits.uniffi_bindgen]]
|
||||
who = "Travis Long <tlong@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "0.19.3"
|
||||
notes = "Maintained by the Glean and Application Services teams."
|
||||
|
||||
[[audits.uniffi_build]]
|
||||
who = "Travis Long <tlong@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "0.19.3"
|
||||
notes = "Maintained by the Glean and Application Services teams."
|
||||
|
||||
[[audits.uniffi_macros]]
|
||||
who = "Travis Long <tlong@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "0.19.3"
|
||||
notes = "Maintained by the Glean and Application Services teams."
|
||||
|
||||
[[audits.void]]
|
||||
who = "Bobby Holley <bobbyholley@gmail.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "1.0.2"
|
||||
notes = "Very small crate, just hosts the Void type for easier cross-crate interfacing."
|
||||
|
||||
[[audits.weedle2]]
|
||||
who = "Travis Long <tlong@mozilla.com>"
|
||||
criteria = "safe-to-deploy"
|
||||
version = "3.0.0"
|
||||
notes = "Maintained by the Glean and Application Services teams."
|
||||
|
||||
[[audits.webdriver]]
|
||||
who = "Henrik Skupin <mail@hskupin.info>"
|
||||
criteria = "safe-to-deploy"
|
||||
|
|
|
@ -177,10 +177,6 @@ criteria = "safe-to-deploy"
|
|||
version = "0.2.0"
|
||||
criteria = "safe-to-deploy"
|
||||
|
||||
[[exemptions.android_logger]]
|
||||
version = "0.10.1"
|
||||
criteria = "safe-to-deploy"
|
||||
|
||||
[[exemptions.anyhow]]
|
||||
version = "1.0.57"
|
||||
criteria = "safe-to-deploy"
|
||||
|
@ -1721,22 +1717,6 @@ criteria = "safe-to-deploy"
|
|||
version = "0.2.3"
|
||||
criteria = "safe-to-deploy"
|
||||
|
||||
[[exemptions.uniffi]]
|
||||
version = "0.18.0"
|
||||
criteria = "safe-to-deploy"
|
||||
|
||||
[[exemptions.uniffi_bindgen]]
|
||||
version = "0.18.0"
|
||||
criteria = "safe-to-deploy"
|
||||
|
||||
[[exemptions.uniffi_build]]
|
||||
version = "0.18.0"
|
||||
criteria = "safe-to-deploy"
|
||||
|
||||
[[exemptions.uniffi_macros]]
|
||||
version = "0.18.0"
|
||||
criteria = "safe-to-deploy"
|
||||
|
||||
[[exemptions.unix_path]]
|
||||
version = "1.0.1"
|
||||
criteria = "safe-to-run"
|
||||
|
@ -1793,10 +1773,6 @@ criteria = "safe-to-deploy"
|
|||
version = "0.3.9"
|
||||
criteria = "safe-to-deploy"
|
||||
|
||||
[[exemptions.weedle2]]
|
||||
version = "2.0.1"
|
||||
criteria = "safe-to-deploy"
|
||||
|
||||
[[exemptions.wgpu-core]]
|
||||
version = "0.12.0"
|
||||
criteria = "safe-to-deploy"
|
||||
|
|
|
@ -15,6 +15,7 @@ treeherder:
|
|||
'A': 'Android Gradle tests'
|
||||
'Bpgo': 'Profile-guided optimization builds'
|
||||
'Btime': 'Browsertime performance tests on Firefox'
|
||||
'Btime-cache': 'Browsertime performance tests on Firefox with populated bytecode cache.'
|
||||
'Btime-1proc': 'Browsertime performance tests on Firefox without e10s'
|
||||
'Btime-fis': 'Browsertime performance tests on Firefox with fission enabled'
|
||||
'Btime-Prof': 'Browsertime performance tests on Firefox with Gecko Profiling'
|
||||
|
|
|
@ -147,8 +147,43 @@ browsertime-responsiveness:
|
|||
|
||||
browsertime-tp6-essential:
|
||||
<<: *tp6-defaults
|
||||
<<: &tp6-essential-defaults
|
||||
raptor:
|
||||
apps: [firefox, chrome, chromium]
|
||||
test: tp6
|
||||
run-visual-metrics: true
|
||||
subtests:
|
||||
- amazon
|
||||
- [bing-search, bing]
|
||||
- cnn
|
||||
- fandom
|
||||
- [google-slides, gslides]
|
||||
- instagram
|
||||
- twitter
|
||||
- wikipedia
|
||||
- yahoo-mail
|
||||
run-on-projects:
|
||||
by-app:
|
||||
firefox:
|
||||
by-test-platform:
|
||||
windows.*-32.*: []
|
||||
macosx1100.*shippable.*: [mozilla-central, mozilla-beta]
|
||||
.*64.*shippable-qr/.*: [trunk, mozilla-beta, mozilla-release]
|
||||
default: []
|
||||
default: []
|
||||
tier:
|
||||
by-test-platform:
|
||||
linux1804-64-clang-trunk-qr/opt: 2
|
||||
default:
|
||||
by-app:
|
||||
firefox: 1
|
||||
default: 3
|
||||
|
||||
browsertime-tp6-bytecode:
|
||||
<<: *tp6-defaults
|
||||
<<: *tp6-essential-defaults
|
||||
raptor:
|
||||
apps: [firefox, chrome, chromium]
|
||||
apps: [firefox]
|
||||
test: tp6
|
||||
run-visual-metrics: true
|
||||
subtests:
|
||||
|
@ -161,22 +196,25 @@ browsertime-tp6-essential:
|
|||
- twitter
|
||||
- wikipedia
|
||||
- yahoo-mail
|
||||
run-on-projects:
|
||||
by-app:
|
||||
firefox:
|
||||
by-test-platform:
|
||||
windows.*-32.*: []
|
||||
macosx1100.*shippable.*: [mozilla-central, mozilla-beta]
|
||||
.*64.*shippable-qr/.*: [trunk, mozilla-beta, mozilla-release]
|
||||
default: []
|
||||
default: []
|
||||
mozharness:
|
||||
extra-options:
|
||||
by-test-platform:
|
||||
windows10-64.*shippable.*-qr.*:
|
||||
- --chimera
|
||||
- --browsertime
|
||||
- --browsertime-no-ffwindowrecorder
|
||||
- --conditioned-profile=settled
|
||||
- --test-bytecode-cache
|
||||
default:
|
||||
- --chimera
|
||||
- --browsertime
|
||||
- --conditioned-profile=settled
|
||||
- --test-bytecode-cache
|
||||
tier:
|
||||
by-test-platform:
|
||||
linux1804-64-clang-trunk-qr/opt: 2
|
||||
default:
|
||||
by-app:
|
||||
firefox: 1
|
||||
default: 3
|
||||
by-app:
|
||||
firefox: 2
|
||||
default: 3
|
||||
treeherder-symbol: Btime-cache(tp6)
|
||||
|
||||
browsertime-benchmark:
|
||||
description: Raptor (browsertime) Benchmark tests
|
||||
|
|
|
@ -109,32 +109,6 @@ browsertime-tp6m:
|
|||
default: []
|
||||
default: []
|
||||
|
||||
browsertime-tp6m-g5:
|
||||
<<: *tp6m-defaults
|
||||
raptor:
|
||||
apps: [geckoview, fenix, chrome-m, refbrow]
|
||||
run-visual-metrics: true
|
||||
test: tp6m
|
||||
subtests:
|
||||
- [google-maps, gmaps]
|
||||
- [google-search-restaurants, gsearch-r]
|
||||
- instagram
|
||||
- imdb
|
||||
- reddit
|
||||
- sina
|
||||
- [stackoverflow, stacko]
|
||||
- web-de
|
||||
- wikipedia
|
||||
- youtube
|
||||
run-on-projects:
|
||||
by-app:
|
||||
geckoview:
|
||||
by-test-platform:
|
||||
android-hw-(g5|a51).*shippable-qr.*: [trunk, mozilla-beta, mozilla-release]
|
||||
android-hw-p2.*aarch64-shippable-qr.*: [trunk, mozilla-beta, mozilla-release]
|
||||
default: []
|
||||
default: []
|
||||
|
||||
browsertime-tp6m-essential:
|
||||
<<: *tp6m-defaults
|
||||
raptor:
|
||||
|
|
|
@ -348,7 +348,6 @@ android-em-7.0-x86_64-qr/debug-isolated-process:
|
|||
android-hw-g5-7-0-arm7-qr/opt:
|
||||
build-platform: android-arm/opt
|
||||
test-sets:
|
||||
- android-hw-browsertime-g5
|
||||
- android-hw-browsertime-power
|
||||
- android-hw-arm7-raptor-cpu-memory
|
||||
- android-hw-arm7-raptor-cpu-memory-power
|
||||
|
@ -356,7 +355,6 @@ android-hw-g5-7-0-arm7-qr/opt:
|
|||
android-hw-g5-7-0-arm7-shippable-qr/opt:
|
||||
build-platform: android-arm-shippable/opt
|
||||
test-sets:
|
||||
- android-hw-browsertime-g5
|
||||
- android-hw-browsertime-power
|
||||
- android-hw-arm7-raptor-cpu-memory
|
||||
- android-hw-arm7-raptor-cpu-memory-power
|
||||
|
@ -366,8 +364,7 @@ android-hw-g5-7-0-arm7-shippable-qr/opt:
|
|||
android-hw-a51-11-0-aarch64-qr/opt:
|
||||
build-platform: android-aarch64/opt
|
||||
test-sets:
|
||||
- android-hw-browsertime-a51
|
||||
# - android-hw-browsertime
|
||||
- android-hw-browsertime
|
||||
# - android-hw-browsertime-power
|
||||
# - android-hw-arm7-raptor-cpu-memory
|
||||
# - android-hw-arm7-raptor-cpu-memory-power
|
||||
|
@ -375,8 +372,7 @@ android-hw-a51-11-0-aarch64-qr/opt:
|
|||
android-hw-a51-11-0-aarch64-shippable-qr/opt:
|
||||
build-platform: android-aarch64-shippable/opt
|
||||
test-sets:
|
||||
- android-hw-browsertime-a51
|
||||
# - android-hw-browsertime
|
||||
- android-hw-browsertime
|
||||
# - android-hw-browsertime-power
|
||||
# - android-hw-arm7-raptor-cpu-memory
|
||||
# - android-hw-arm7-raptor-cpu-memory-power
|
||||
|
|
|
@ -82,6 +82,7 @@ talos-ref-hw:
|
|||
browsertime:
|
||||
- browsertime-tp6
|
||||
- browsertime-tp6-essential
|
||||
- browsertime-tp6-bytecode
|
||||
- browsertime-tp6-live
|
||||
- browsertime-tp6-live-sheriffed
|
||||
- browsertime-benchmark
|
||||
|
@ -445,18 +446,6 @@ android-hw-aarch64-raptor-cpu-memory-power:
|
|||
android-hw-browsertime-power:
|
||||
- browsertime-power
|
||||
|
||||
android-hw-browsertime-a51:
|
||||
- browsertime-tp6m-essential
|
||||
- browsertime-speedometer-mobile
|
||||
- browsertime-youtube-playback-mobile
|
||||
- browsertime-unity-webgl-mobile
|
||||
- browsertime-tp6m
|
||||
- browsertime-tp6m-live
|
||||
|
||||
android-hw-browsertime-g5:
|
||||
- browsertime-tp6m-g5 # second half of tests
|
||||
- browsertime-tp6m-live
|
||||
|
||||
android-hw-browsertime:
|
||||
- browsertime-tp6m
|
||||
- browsertime-tp6m-essential
|
||||
|
|
|
@ -1 +1 @@
|
|||
export UPDATEBOT_REVISION=1a2bb378a4d9842936b9db59d0b88111247da435
|
||||
export UPDATEBOT_REVISION=2f0f742b7780c86cbf4ab26c7e88d0f0f7e59d15
|
||||
|
|
|
@ -439,6 +439,21 @@ class Raptor(
|
|||
"help": "Run tests using live sites instead of recorded sites.",
|
||||
},
|
||||
],
|
||||
[
|
||||
["--test-bytecode-cache"],
|
||||
{
|
||||
"dest": "test_bytecode_cache",
|
||||
"action": "store_true",
|
||||
"default": False,
|
||||
"help": (
|
||||
"If set, the pageload test will set the preference "
|
||||
"`dom.script_loader.bytecode_cache.strategy=-1` and wait 20 seconds "
|
||||
"after the first cold pageload to populate the bytecode cache before "
|
||||
"running a warm pageload test. Only available if `--chimera` "
|
||||
"is also provided."
|
||||
),
|
||||
},
|
||||
],
|
||||
[
|
||||
["--chimera"],
|
||||
{
|
||||
|
@ -963,6 +978,8 @@ class Raptor(
|
|||
options.extend(
|
||||
["--browser-cycles={}".format(self.config.get("browser_cycles"))]
|
||||
)
|
||||
if self.config.get("test_bytecode_cache", False):
|
||||
options.extend(["--test-bytecode-cache"])
|
||||
|
||||
if self.config.get("webext", False):
|
||||
options.extend(["--webext"])
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -341,6 +341,7 @@ module.exports = async function(context, commands) {
|
|||
let page_cycle_delay = context.options.browsertime.page_cycle_delay;
|
||||
let post_startup_delay = context.options.browsertime.post_startup_delay;
|
||||
let chimera_mode = context.options.browsertime.chimera;
|
||||
let test_bytecode_cache = context.options.browsertime.test_bytecode_cache;
|
||||
let login_required = context.options.browsertime.loginRequired;
|
||||
let live_site = context.options.browsertime.liveSite;
|
||||
let test_name = context.options.browsertime.testName;
|
||||
|
@ -399,7 +400,8 @@ module.exports = async function(context, commands) {
|
|||
await commands.measure.start(test_url);
|
||||
|
||||
// Wait 20 seconds to populate bytecode cache
|
||||
if (chimera_mode && !cached) {
|
||||
if (test_bytecode_cache == "true" && chimera_mode == "true" && !cached) {
|
||||
context.log.info("Waiting 20s to populate bytecode cache...");
|
||||
await commands.wait.byTime(20000);
|
||||
cached = true;
|
||||
}
|
||||
|
|
|
@ -289,6 +289,8 @@ class Browsertime(Perftest):
|
|||
# running browsertime test in chimera mode
|
||||
"--browsertime.chimera",
|
||||
"true" if self.config["chimera"] else "false",
|
||||
"--browsertime.test_bytecode_cache",
|
||||
"true" if self.config["test_bytecode_cache"] else "false",
|
||||
"--firefox.perfStats",
|
||||
test.get("perfstats", "false"),
|
||||
]
|
||||
|
|
|
@ -365,6 +365,16 @@ def create_parser(mach_interface=False):
|
|||
help="Whether to use webextension to execute pageload tests "
|
||||
"(WebExtension is being deprecated).",
|
||||
)
|
||||
add_arg(
|
||||
"--test-bytecode-cache",
|
||||
dest="test_bytecode_cache",
|
||||
default=False,
|
||||
action="store_true",
|
||||
help="If set, the pageload test will set the preference "
|
||||
"`dom.script_loader.bytecode_cache.strategy=-1` and wait 20 seconds after "
|
||||
"the first cold pageload to populate the bytecode cache before running "
|
||||
"a warm pageload test. Only available if `--chimera` is also provided.",
|
||||
)
|
||||
|
||||
# for browsertime jobs, cold page load is determined by a '--cold' cmd line argument
|
||||
add_arg(
|
||||
|
@ -511,7 +521,10 @@ def verify_options(parser, args):
|
|||
args.page_cycles = 2
|
||||
# Create bytecode cache at the first cold load, so that the next warm load uses it.
|
||||
# This is applicable for chimera mode only
|
||||
args.extra_prefs.append("dom.script_loader.bytecode_cache.strategy=-1")
|
||||
if args.test_bytecode_cache:
|
||||
args.extra_prefs.append("dom.script_loader.bytecode_cache.strategy=-1")
|
||||
elif args.test_bytecode_cache:
|
||||
parser.error("--test-bytecode-cache can only be used in --chimera mode")
|
||||
|
||||
# if running on a desktop browser make sure the binary exists
|
||||
if args.app in DESKTOP_APPS:
|
||||
|
|
|
@ -98,6 +98,7 @@ class Perftest(object):
|
|||
device_name=None,
|
||||
disable_perf_tuning=False,
|
||||
conditioned_profile=None,
|
||||
test_bytecode_cache=False,
|
||||
chimera=False,
|
||||
extra_prefs={},
|
||||
environment={},
|
||||
|
@ -143,6 +144,7 @@ class Perftest(object):
|
|||
"fission": fission,
|
||||
"disable_perf_tuning": disable_perf_tuning,
|
||||
"conditioned_profile": conditioned_profile,
|
||||
"test_bytecode_cache": test_bytecode_cache,
|
||||
"chimera": chimera,
|
||||
"extra_prefs": extra_prefs,
|
||||
"environment": environment,
|
||||
|
|
|
@ -134,6 +134,7 @@ def main(args=sys.argv[1:]):
|
|||
device_name=args.device_name,
|
||||
disable_perf_tuning=args.disable_perf_tuning,
|
||||
conditioned_profile=args.conditioned_profile,
|
||||
test_bytecode_cache=args.test_bytecode_cache,
|
||||
chimera=args.chimera,
|
||||
project=args.project,
|
||||
verbose=args.verbose,
|
||||
|
|
|
@ -32,6 +32,7 @@ def test_verify_options(filedir):
|
|||
browsertime_visualmetrics=False,
|
||||
fission=True,
|
||||
fission_mobile=False,
|
||||
test_bytecode_cache=False,
|
||||
webext=False,
|
||||
extra_prefs=[],
|
||||
)
|
||||
|
@ -59,6 +60,7 @@ def test_verify_options(filedir):
|
|||
browsertime_visualmetrics=False,
|
||||
fission=True,
|
||||
fission_mobile=False,
|
||||
test_bytecode_cache=False,
|
||||
webext=False,
|
||||
extra_prefs=[],
|
||||
)
|
||||
|
@ -80,6 +82,7 @@ def test_verify_options(filedir):
|
|||
browsertime_visualmetrics=False,
|
||||
fission=True,
|
||||
fission_mobile=False,
|
||||
test_bytecode_cache=False,
|
||||
webext=False,
|
||||
extra_prefs=[],
|
||||
)
|
||||
|
@ -101,6 +104,7 @@ def test_verify_options(filedir):
|
|||
browsertime_visualmetrics=False,
|
||||
fission=True,
|
||||
fission_mobile=False,
|
||||
test_bytecode_cache=False,
|
||||
webext=False,
|
||||
extra_prefs=[],
|
||||
)
|
||||
|
@ -122,6 +126,7 @@ def test_verify_options(filedir):
|
|||
browsertime_visualmetrics=False,
|
||||
fission=True,
|
||||
fission_mobile=False,
|
||||
test_bytecode_cache=False,
|
||||
webext=False,
|
||||
extra_prefs=[],
|
||||
)
|
||||
|
@ -143,6 +148,7 @@ def test_verify_options(filedir):
|
|||
browsertime_visualmetrics=False,
|
||||
fission=True,
|
||||
fission_mobile=False,
|
||||
test_bytecode_cache=False,
|
||||
webext=False,
|
||||
extra_prefs=[],
|
||||
)
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS Test Reference</title>
|
||||
<style>
|
||||
.background {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
</style>
|
||||
<div style="color-scheme: light">
|
||||
<img src="resources/prefers-color-scheme-light.svg">
|
||||
<div class="background" style="background-image: url(resources/prefers-color-scheme-light.svg)"></div>
|
||||
</div>
|
||||
<div style="color-scheme: dark">
|
||||
<img src="resources/prefers-color-scheme-dark.svg">
|
||||
<div class="background" style="background-image: url(resources/prefers-color-scheme-dark.svg)"></div>
|
||||
</div>
|
|
@ -0,0 +1,23 @@
|
|||
<!doctype html>
|
||||
<meta charset="utf-8">
|
||||
<title>CSS prefers-color-scheme affects SVG images</title>
|
||||
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
|
||||
<link rel="author" href="https://mozilla.org" title="Mozilla">
|
||||
<link rel="help" href="https://drafts.csswg.org/mediaqueries-5/#prefers-color-scheme">
|
||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7213">
|
||||
<link rel="match" href="prefers-color-scheme-svg-image-ref.html">
|
||||
<style>
|
||||
.background {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
background-image: url(resources/prefers-color-scheme.svg);
|
||||
}
|
||||
</style>
|
||||
<div style="color-scheme: light">
|
||||
<img src="resources/prefers-color-scheme.svg">
|
||||
<div class="background"></div>
|
||||
</div>
|
||||
<div style="color-scheme: dark">
|
||||
<img src="resources/prefers-color-scheme.svg">
|
||||
<div class="background"></div>
|
||||
</div>
|
|
@ -0,0 +1,6 @@
|
|||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||
<style>
|
||||
:root { color: purple }
|
||||
</style>
|
||||
<rect fill="currentColor" width="32" height="32"/>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 193 B |
|
@ -0,0 +1,6 @@
|
|||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||
<style>
|
||||
:root { color: blue }
|
||||
</style>
|
||||
<rect fill="currentColor" width="32" height="32"/>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 191 B |
|
@ -0,0 +1,9 @@
|
|||
<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
||||
<style>
|
||||
:root { color: blue }
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root { color: purple }
|
||||
}
|
||||
</style>
|
||||
<rect fill="currentColor" width="32" height="32"/>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 269 B |
|
@ -0,0 +1,78 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml">
|
||||
<title>Clipped shapes can be hit when rendered</title>
|
||||
<h:script src="/resources/testharness.js"/>
|
||||
<h:script src="/resources/testharnessreport.js"/>
|
||||
<metadata>
|
||||
<h:link rel="help" href="https://svgwg.org/svg2-draft/shapes.html#RectElement"/>
|
||||
<h:link rel="help" href="https://svgwg.org/svg2-draft/shapes.html#CircleElement"/>
|
||||
<h:link rel="help" href="https://svgwg.org/svg2-draft/shapes.html#EllipseElement"/>
|
||||
</metadata>
|
||||
<defs>
|
||||
<clipPath id="clip1">
|
||||
<circle cx="100" cy="100" r="25"/>
|
||||
</clipPath>
|
||||
<clipPath id="clip2">
|
||||
<circle cx="150" cy="150" r="25"/>
|
||||
</clipPath>
|
||||
<clipPath id="clip3">
|
||||
<circle cx="250" cy="150" r="25"/>
|
||||
</clipPath>
|
||||
<clipPath id="clip4">
|
||||
<circle cx="350" cy="150" r="25"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g>
|
||||
<circle id="circle1" cx="100" cy="100" r="25"/>
|
||||
<circle id="circle2" cx="150" cy="100" r="25" clip-path="url(#unknown)"/>
|
||||
<circle id="circle3" cx="100" cy="150" r="25" clip-path="url(#clip1)"/>
|
||||
<circle id="circle4" cx="150" cy="150" r="25" clip-path="url(#clip2)"/>
|
||||
</g>
|
||||
<g>
|
||||
<ellipse id="ellipse1" cx="200" cy="100" rx="25" ry="15"/>
|
||||
<ellipse id="ellipse2" cx="250" cy="100" rx="25" ry="15" clip-path="url(#unknown)"/>
|
||||
<ellipse id="ellipse3" cx="200" cy="150" rx="25" ry="15" clip-path="url(#clip1)"/>
|
||||
<ellipse id="ellipse4" cx="250" cy="150" rx="25" ry="15" clip-path="url(#clip3)"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect id="rect1" x="285" y="85" width="30" height="30"/>
|
||||
<rect id="rect2" x="335" y="85" width="30" height="30" clip-path="url(#unknown)"/>
|
||||
<rect id="rect3" x="285" y="135" width="30" height="30" clip-path="url(#clip1)"/>
|
||||
<rect id="rect4" x="335" y="135" width="30" height="30" clip-path="url(#clip4)"/>
|
||||
</g>
|
||||
<script><![CDATA[
|
||||
class Expectation {
|
||||
constructor(x, y, id = null) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.element = id ? document.getElementById(id) : document.documentElement;
|
||||
}
|
||||
}
|
||||
class Shape {
|
||||
constructor(name, offset) {
|
||||
this.name = name;
|
||||
this.offset = offset;
|
||||
}
|
||||
}
|
||||
let shapes = [];
|
||||
shapes.push(new Shape("circle", 0));
|
||||
shapes.push(new Shape("ellipse", 100));
|
||||
shapes.push(new Shape("rect", 200));
|
||||
|
||||
shapes.forEach(shape => {
|
||||
test(function() {
|
||||
let expectations = [];
|
||||
|
||||
expectations.push(new Expectation(100 + shape.offset, 100, shape.name + "1"));
|
||||
expectations.push(new Expectation(150 + shape.offset, 100, shape.name + "2"));
|
||||
expectations.push(new Expectation(100 + shape.offset, 150));
|
||||
expectations.push(new Expectation(150 + shape.offset, 150, shape.name + "4"));
|
||||
|
||||
expectations.forEach(expectation => {
|
||||
let element = document.elementFromPoint(expectation.x, expectation.y);
|
||||
assert_equals(element, expectation.element, "finds " + shape.name);
|
||||
});
|
||||
}, document.title + ": " + shape.name);
|
||||
});
|
||||
]]>
|
||||
</script>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 3.0 KiB |
|
@ -1 +1 @@
|
|||
{"files":{"Cargo.toml":"632df8824223ca0e23352f6b0d103ac994fab57dc51f33c2e6d41c91256e1c4d","LICENSE-APACHE":"99938c5864dd33decb62ab20fd883a9b00181d768ae887a4f19b2d0015c41dc9","LICENSE-MIT":"35043211d1b7be8f7e3f9cad27d981f2189ba9a39d9527b275b3c9740298dfe2","README.md":"7a4f75e61fc014f4dbb907fa947e1983f45993dc2a85104cdb619c0808433f65","src/lib.rs":"bdbd60c12117123c2554b1984949dfbc403d890318a0de637829592f4359de6d","tests/config_log_level.rs":"8aae2c7decbcf12a2a454486c9d4dd4a82a20e01d327c4abf4e9cfded973159d","tests/default_init.rs":"ef18c9ea38687a178623c11acfa3d34d16b9030eaad337ab9ed6a609a2c42ca2","tests/multiple_init.rs":"a6ed4986a758b7b2322c6ad0a18ec99fd06521a6c8767a6622eab2cbf9be601e"},"package":"d9ed09b18365ed295d722d0b5ed59c01b79a826ff2d2a8f73d5ecca8e6fb2f66"}
|
||||
{"files":{"Cargo.toml":"896268b277c2cd333293139e868abac82c39983de9aa56aead4464c38239b66a","LICENSE-APACHE":"99938c5864dd33decb62ab20fd883a9b00181d768ae887a4f19b2d0015c41dc9","LICENSE-MIT":"35043211d1b7be8f7e3f9cad27d981f2189ba9a39d9527b275b3c9740298dfe2","README.md":"bf2e6227790edeb5959c2be250b71d1a197a3a344dc5fc1638fbb39c73bdfd21","src/lib.rs":"e3a0a6bb68d7bad681a978274b612e77cecc41112b448209a09c96b5b33d029e","tests/config_log_level.rs":"8aae2c7decbcf12a2a454486c9d4dd4a82a20e01d327c4abf4e9cfded973159d","tests/default_init.rs":"ef18c9ea38687a178623c11acfa3d34d16b9030eaad337ab9ed6a609a2c42ca2","tests/multiple_init.rs":"a6ed4986a758b7b2322c6ad0a18ec99fd06521a6c8767a6622eab2cbf9be601e"},"package":"b74b7ddf197de32e415d197aa21c1c0cb36e01e4794fd801302280ac7847ee02"}
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче