Changeset 224535 in webkit
- Timestamp:
- Nov 7, 2017 10:10:40 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r224532 r224535 1 2017-11-07 Antti Koivisto <antti@apple.com> 2 3 Dynamic media queries don't update in shadow tree stylesheets 4 https://bugs.webkit.org/show_bug.cgi?id=179324 5 6 Reviewed by Ryosuke Niwa. 7 8 * fast/shadow-dom/media-query-in-shadow-style-expected.html: Added. 9 * fast/shadow-dom/media-query-in-shadow-style.html: Added. 10 * fast/shadow-dom/resources/media-query-in-shadow-style-frame.html: Added. 11 1 12 2017-11-07 Youenn Fablet <youenn@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r224534 r224535 1 2017-11-07 Antti Koivisto <antti@apple.com> 2 3 Dynamic media queries don't update in shadow tree stylesheets 4 https://bugs.webkit.org/show_bug.cgi?id=179324 5 6 Reviewed by Ryosuke Niwa. 7 8 Viewport and accessibility queries should work dynamically also in shadow trees. 9 10 Test: fast/shadow-dom/media-query-in-shadow-style.html 11 12 * page/LayoutContext.cpp: 13 (WebCore::LayoutContext::updateStyleForLayout): 14 * page/Page.cpp: 15 (WebCore::Page::accessibilitySettingsDidChange): 16 17 Evaluate media query list (JS API) unconditionally as it is independent from style queries. 18 Remove some logging. 19 20 * style/StyleScope.cpp: 21 (WebCore::Style::Scope::evaluateMediaQueriesForViewportChange): 22 (WebCore::Style::Scope::evaluateMediaQueriesForAccessibilitySettingsChange): 23 24 Factor into functions in style scope. 25 26 (WebCore::Style::Scope::evaluateMediaQueries): 27 28 Evaluate queries in all shadow trees too. 29 30 * style/StyleScope.h: 31 1 32 2017-11-07 Ryosuke Niwa <rniwa@webkit.org> 2 33 -
trunk/Source/WebCore/page/LayoutContext.cpp
r224529 r224535 480 480 Document& document = *frame().document(); 481 481 // Viewport-dependent media queries may cause us to need completely different style information. 482 auto* styleResolver = document.styleScope().resolverIfExists(); 483 if (!styleResolver || styleResolver->hasMediaQueriesAffectedByViewportChange()) { 484 LOG(Layout, " hasMediaQueriesAffectedByViewportChange, enqueueing style recalc"); 485 document.styleScope().didChangeStyleSheetEnvironment(); 486 // FIXME: This instrumentation event is not strictly accurate since cached media query results do not persist across StyleResolver rebuilds. 487 InspectorInstrumentation::mediaQueryResultChanged(document); 488 } 482 document.styleScope().evaluateMediaQueriesForViewportChange(); 483 489 484 document.evaluateMediaQueryList(); 490 485 // If there is any pagination to apply, it will affect the RenderView's style, so we should -
trunk/Source/WebCore/page/Page.cpp
r224371 r224535 2281 2281 void Page::accessibilitySettingsDidChange() 2282 2282 { 2283 bool neededRecalc = false; 2284 2285 for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) { 2286 if (Document* document = frame->document()) { 2287 auto* styleResolver = document->styleScope().resolverIfExists(); 2288 if (styleResolver && styleResolver->hasMediaQueriesAffectedByAccessibilitySettingsChange()) { 2289 document->styleScope().didChangeStyleSheetEnvironment(); 2290 document->evaluateMediaQueryList(); 2291 neededRecalc = true; 2292 // FIXME: This instrumentation event is not strictly accurate since cached media query results do not persist across StyleResolver rebuilds. 2293 InspectorInstrumentation::mediaQueryResultChanged(*document); 2294 } 2283 for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) { 2284 if (auto* document = frame->document()) { 2285 document->styleScope().evaluateMediaQueriesForAccessibilitySettingsChange(); 2286 document->evaluateMediaQueryList(); 2295 2287 } 2296 2288 } 2297 2298 if (neededRecalc)2299 LOG(Layout, "hasMediaQueriesAffectedByAccessibilitySettingsChange, enqueueing style recalc");2300 2289 } 2301 2290 -
trunk/Source/WebCore/style/StyleScope.cpp
r224495 r224535 601 601 } 602 602 603 void Scope::evaluateMediaQueriesForViewportChange() 604 { 605 evaluateMediaQueries([] (StyleResolver& resolver) { 606 return resolver.hasMediaQueriesAffectedByViewportChange(); 607 }); 608 } 609 610 void Scope::evaluateMediaQueriesForAccessibilitySettingsChange() 611 { 612 evaluateMediaQueries([] (StyleResolver& resolver) { 613 return resolver.hasMediaQueriesAffectedByAccessibilitySettingsChange(); 614 }); 615 } 616 617 template <typename TestFunction> 618 void Scope::evaluateMediaQueries(TestFunction&& testFunction) 619 { 620 if (!m_shadowRoot) { 621 for (auto* descendantShadowRoot : m_document.inDocumentShadowRoots()) 622 descendantShadowRoot->styleScope().evaluateMediaQueries(testFunction); 623 } 624 auto* resolver = resolverIfExists(); 625 if (!resolver) 626 return; 627 if (!testFunction(*resolver)) 628 return; 629 scheduleUpdate(UpdateType::ContentsOrInterpretation); 630 InspectorInstrumentation::mediaQueryResultChanged(m_document); 631 } 632 603 633 void Scope::didChangeActiveStyleSheetCandidates() 604 634 { -
trunk/Source/WebCore/style/StyleScope.h
r224146 r224535 98 98 bool activeStyleSheetsContains(const CSSStyleSheet*) const; 99 99 100 void evaluateMediaQueriesForViewportChange(); 101 void evaluateMediaQueriesForAccessibilitySettingsChange(); 102 100 103 // This is called when some stylesheet becomes newly enabled or disabled. 101 104 void didChangeActiveStyleSheetCandidates(); … … 131 134 void scheduleUpdate(UpdateType); 132 135 136 template <typename TestFunction> void evaluateMediaQueries(TestFunction&&); 137 133 138 WEBCORE_EXPORT void flushPendingSelfUpdate(); 134 139 WEBCORE_EXPORT void flushPendingDescendantUpdates();
Note: See TracChangeset
for help on using the changeset viewer.