зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1707116 - Make sure to consume the flusher when we hit the cascade data cache. r=boris
So that sheets are properly marked as committed. The issue is that we have this "committed" optimization, to avoid doing work if somebody adds and removes an stylesheet without us flushing in the meantime: https://searchfox.org/mozilla-central/rev/f018480dfed4fc583703a5770a6db9ab9dc0fb99/servo/components/style/stylesheet_set.rs#308-319 The "committed" bit is set when we consume the flusher (in each(..)). However when we hit the cache, before this patch, we wouldn't consume it, which means that we may fail to do some full rebuilds even though we need them. Fix it by making sure we call each() in that case. We add a test (the test would show a red square before this patch, and a lime square with the fix). Differential Revision: https://phabricator.services.mozilla.com/D113206
This commit is contained in:
Родитель
a344c0fa4c
Коммит
b410f349c5
|
@ -139,6 +139,9 @@ where
|
|||
debug!(" > {:?}", sheet);
|
||||
}
|
||||
}
|
||||
// The line below ensures the "committed" bit is updated properly
|
||||
// below.
|
||||
collection.each(|_, _| true);
|
||||
return Ok(Some(entry.clone()));
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Shared style invalidation with removals</title>
|
||||
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1707116">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-scoping/">
|
||||
<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
|
||||
<link rel="author" href="https://mozilla.org" title="Mozilla">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="host-1"></div>
|
||||
<div id="host-2"></div>
|
||||
<script>
|
||||
const INITIALLY_COMMON_STYLE = `<style>:host { background-color: red !important }</style>`;
|
||||
let helper = document.querySelector("#host-1");
|
||||
let host = document.querySelector("#host-2");
|
||||
|
||||
test(function() {
|
||||
helper.attachShadow({ mode: "open" }).innerHTML = INITIALLY_COMMON_STYLE;
|
||||
assert_equals(getComputedStyle(helper).backgroundColor, "rgb(255, 0, 0)", "Common style should apply to helper");
|
||||
|
||||
host.attachShadow({ mode: "open" }).innerHTML = INITIALLY_COMMON_STYLE;
|
||||
assert_equals(getComputedStyle(host).backgroundColor, "rgb(255, 0, 0)", "Common style should apply to host");
|
||||
|
||||
host.shadowRoot.innerHTML = `<style>:host { background-color: lime; width: 100px; height: 100px; }</style>`;
|
||||
assert_equals(getComputedStyle(host).backgroundColor, "rgb(0, 255, 0)", "Common style should no longer apply to host");
|
||||
});
|
||||
</script>
|
Загрузка…
Ссылка в новой задаче