Commit 0c3e8777 authored by rune's avatar rune Committed by Commit bot

Don't update global ruleset when active style is dirty.

CSSGlobalRuleSet should always be collected as part of the active style
update. RuleSets may have been cleared from StyleSheetContents as a
result of media query changes for instance.

For the given issue, we tried to limit to a global ruleset when lazy-
loading fullscreen UA style, but as part of going fullscreen we had
already cleared rule sets for stylesheets with media queries due to the
media feature change.

BUG=675439

Review-Url: https://codereview.chromium.org/2590793003
Cr-Commit-Position: refs/heads/master@{#439781}
parent cb5d7fc0
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<style>
@media screen {}
</style>
<div id="fullscreen" onclick="requestFullscreen()">
Clicking this element should go fullscreen and not crash.
</div>
<script>
test(() => {
if (window.eventSender) {
eventSender.mouseMoveTo(fullscreen.offsetLeft + 1, fullscreen.offsetTop + 1);
eventSender.mouseDown();
eventSender.mouseUp();
}
}, "Check that going fullscreen does not crash");
</script>
...@@ -351,7 +351,7 @@ void StyleEngine::updateActiveStyle() { ...@@ -351,7 +351,7 @@ void StyleEngine::updateActiveStyle() {
DCHECK(document().isActive()); DCHECK(document().isActive());
updateViewport(); updateViewport();
updateActiveStyleSheets(); updateActiveStyleSheets();
m_globalRuleSet.update(document()); updateGlobalRuleSet();
} }
const ActiveStyleSheetVector StyleEngine::activeStyleSheetsForInspector() { const ActiveStyleSheetVector StyleEngine::activeStyleSheetsForInspector() {
...@@ -928,14 +928,14 @@ void StyleEngine::ensureUAStyleForFullscreen() { ...@@ -928,14 +928,14 @@ void StyleEngine::ensureUAStyleForFullscreen() {
return; return;
CSSDefaultStyleSheets::instance().ensureDefaultStyleSheetForFullscreen(); CSSDefaultStyleSheets::instance().ensureDefaultStyleSheetForFullscreen();
m_globalRuleSet.markDirty(); m_globalRuleSet.markDirty();
m_globalRuleSet.update(document()); updateActiveStyle();
} }
void StyleEngine::ensureUAStyleForElement(const Element& element) { void StyleEngine::ensureUAStyleForElement(const Element& element) {
if (CSSDefaultStyleSheets::instance().ensureDefaultStyleSheetsForElement( if (CSSDefaultStyleSheets::instance().ensureDefaultStyleSheetsForElement(
element)) { element)) {
m_globalRuleSet.markDirty(); m_globalRuleSet.markDirty();
m_globalRuleSet.update(document()); updateActiveStyle();
} }
} }
......
...@@ -314,6 +314,10 @@ class CORE_EXPORT StyleEngine final ...@@ -314,6 +314,10 @@ class CORE_EXPORT StyleEngine final
void updateViewport(); void updateViewport();
void updateActiveStyleSheets(); void updateActiveStyleSheets();
void updateGlobalRuleSet() {
DCHECK(!needsActiveStyleSheetUpdate());
m_globalRuleSet.update(document());
}
const MediaQueryEvaluator& ensureMediaQueryEvaluator(); const MediaQueryEvaluator& ensureMediaQueryEvaluator();
Member<Document> m_document; Member<Document> m_document;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment