Changeset 242091 in webkit
- Timestamp:
- Feb 26, 2019, 10:20:33 AM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
page/ios/ContentChangeObserver.h (modified) (3 diffs)
-
page/ios/ContentChangeObserver.mm (modified) (1 diff)
-
rendering/updating/RenderTreeUpdater.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r242084 r242091 1 2019-02-26 Zalan Bujtas <zalan@apple.com> 2 3 [ContentChangeObserver] Move CheckForVisibilityChange to ContentChangeObserver class 4 https://bugs.webkit.org/show_bug.cgi?id=195035 5 <rdar://problem/48389123> 6 7 Reviewed by Tim Horton. 8 9 Visibility checking logic belongs to ContentChangeObserver. 10 11 * page/ios/ContentChangeObserver.h: 12 * page/ios/ContentChangeObserver.mm: 13 (WebCore::elementImplicitVisibility): 14 (WebCore::ContentChangeObserver::StyleChange::StyleChange): 15 (WebCore::ContentChangeObserver::StyleChange::~StyleChange): 16 * rendering/updating/RenderTreeUpdater.cpp: 17 (WebCore::RenderTreeUpdater::updateElementRenderer): 18 (WebCore::elementImplicitVisibility): Deleted. 19 (WebCore::CheckForVisibilityChange::CheckForVisibilityChange): Deleted. 20 (WebCore::CheckForVisibilityChange::~CheckForVisibilityChange): Deleted. 21 1 22 2019-02-26 Philippe Normand <pnormand@igalia.com> 2 23 -
trunk/Source/WebCore/page/ios/ContentChangeObserver.h
r242060 r242091 46 46 WEBCORE_EXPORT void startObservingContentChanges(); 47 47 WEBCORE_EXPORT void stopObservingContentChanges(); 48 bool isObservingContentChanges();49 48 50 49 WEBCORE_EXPORT void startObservingDOMTimerScheduling(); … … 62 61 WEBCORE_EXPORT void clearObservedDOMTimers(); 63 62 63 class StyleChange { 64 public: 65 StyleChange(const Element&, ContentChangeObserver&); 66 ~StyleChange(); 67 68 private: 69 const Element& m_element; 70 ContentChangeObserver& m_contentChangeObserver; 71 DisplayType m_previousDisplay; 72 Visibility m_previousVisibility; 73 Visibility m_previousImplicitVisibility; 74 }; 75 64 76 private: 65 77 void addObservedDOMTimer(const DOMTimer&); … … 71 83 void stopObservingStyleRecalcScheduling(); 72 84 85 bool isObservingContentChanges(); 86 73 87 Page& m_page; 74 88 }; -
trunk/Source/WebCore/page/ios/ContentChangeObserver.mm
r242060 r242091 188 188 } 189 189 190 static Visibility elementImplicitVisibility(const Element& element) 191 { 192 auto* renderer = element.renderer(); 193 if (!renderer) 194 return Visibility::Visible; 195 196 auto& style = renderer->style(); 197 198 auto width = style.width(); 199 auto height = style.height(); 200 if ((width.isFixed() && width.value() <= 0) || (height.isFixed() && height.value() <= 0)) 201 return Visibility::Hidden; 202 203 auto top = style.top(); 204 auto left = style.left(); 205 if (left.isFixed() && width.isFixed() && -left.value() >= width.value()) 206 return Visibility::Hidden; 207 208 if (top.isFixed() && height.isFixed() && -top.value() >= height.value()) 209 return Visibility::Hidden; 210 return Visibility::Visible; 211 } 212 213 ContentChangeObserver::StyleChange::StyleChange(const Element& element, ContentChangeObserver& contentChangeObserver) 214 : m_element(element) 215 , m_contentChangeObserver(contentChangeObserver) 216 , m_previousDisplay(element.renderStyle() ? element.renderStyle()->display() : DisplayType::None) 217 , m_previousVisibility(element.renderStyle() ? element.renderStyle()->visibility() : Visibility::Hidden) 218 , m_previousImplicitVisibility(contentChangeObserver.isObservingContentChanges() && contentChangeObserver.observedContentChange() != WKContentVisibilityChange ? elementImplicitVisibility(element) : Visibility::Visible) 219 { 220 } 221 222 ContentChangeObserver::StyleChange::~StyleChange() 223 { 224 if (!m_contentChangeObserver.isObservingContentChanges()) 225 return; 226 227 auto* style = m_element.renderStyle(); 228 auto qualifiesForVisibilityCheck = [&] { 229 if (!style) 230 return false; 231 if (m_element.isInUserAgentShadowTree()) 232 return false; 233 if (!const_cast<Element&>(m_element).willRespondToMouseClickEvents()) 234 return false; 235 return true; 236 }; 237 238 if (!qualifiesForVisibilityCheck()) 239 return; 240 241 if ((m_previousDisplay == DisplayType::None && style->display() != DisplayType::None) 242 || (m_previousVisibility == Visibility::Hidden && style->visibility() != Visibility::Hidden) 243 || (m_previousImplicitVisibility == Visibility::Hidden && elementImplicitVisibility(m_element) == Visibility::Visible)) 244 m_contentChangeObserver.setObservedContentChange(WKContentVisibilityChange); 245 } 190 246 } 191 247 -
trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp
r242032 r242091 56 56 namespace WebCore { 57 57 58 #if PLATFORM(IOS_FAMILY)59 class CheckForVisibilityChange {60 public:61 CheckForVisibilityChange(const Element&, Page*);62 ~CheckForVisibilityChange();63 64 private:65 const Element& m_element;66 Page* m_page { nullptr };67 DisplayType m_previousDisplay;68 Visibility m_previousVisibility;69 Visibility m_previousImplicitVisibility;70 };71 #endif // PLATFORM(IOS_FAMILY)72 73 58 RenderTreeUpdater::Parent::Parent(ContainerNode& root) 74 59 : element(is<Document>(root) ? nullptr : downcast<Element>(&root)) … … 309 294 { 310 295 #if PLATFORM(IOS_FAMILY) 311 C heckForVisibilityChange checkForVisibilityChange(element, m_document.page());296 ContentChangeObserver::StyleChange checkForStyleChange(element, m_document.page()->contentChangeObserver()); 312 297 #endif 313 298 … … 644 629 } 645 630 646 #if PLATFORM(IOS_FAMILY) 647 static Visibility elementImplicitVisibility(const Element& element) 648 { 649 auto* renderer = element.renderer(); 650 if (!renderer) 651 return Visibility::Visible; 652 653 auto& style = renderer->style(); 654 655 auto width = style.width(); 656 auto height = style.height(); 657 if ((width.isFixed() && width.value() <= 0) || (height.isFixed() && height.value() <= 0)) 658 return Visibility::Hidden; 659 660 auto top = style.top(); 661 auto left = style.left(); 662 if (left.isFixed() && width.isFixed() && -left.value() >= width.value()) 663 return Visibility::Hidden; 664 665 if (top.isFixed() && height.isFixed() && -top.value() >= height.value()) 666 return Visibility::Hidden; 667 return Visibility::Visible; 668 } 669 670 CheckForVisibilityChange::CheckForVisibilityChange(const Element& element, Page* page) 671 : m_element(element) 672 , m_page(page) 673 , m_previousDisplay(element.renderStyle() ? element.renderStyle()->display() : DisplayType::None) 674 , m_previousVisibility(element.renderStyle() ? element.renderStyle()->visibility() : Visibility::Hidden) 675 , m_previousImplicitVisibility(page && page->contentChangeObserver().isObservingContentChanges() && page->contentChangeObserver().observedContentChange() != WKContentVisibilityChange ? elementImplicitVisibility(element) : Visibility::Visible) 676 { 677 } 678 679 CheckForVisibilityChange::~CheckForVisibilityChange() 680 { 681 if (!m_page) 682 return; 683 684 auto& contentChangeObserver = m_page->contentChangeObserver(); 685 if (!contentChangeObserver.isObservingContentChanges()) 686 return; 687 688 auto* style = m_element.renderStyle(); 689 690 auto qualifiesForVisibilityCheck = [&] { 691 if (!style) 692 return false; 693 if (m_element.isInUserAgentShadowTree()) 694 return false; 695 if (!const_cast<Element&>(m_element).willRespondToMouseClickEvents()) 696 return false; 697 return true; 698 }; 699 700 if (!qualifiesForVisibilityCheck()) 701 return; 702 if ((m_previousDisplay == DisplayType::None && style->display() != DisplayType::None) || (m_previousVisibility == Visibility::Hidden && style->visibility() != Visibility::Hidden) 703 || (m_previousImplicitVisibility == Visibility::Hidden && elementImplicitVisibility(m_element) == Visibility::Visible)) 704 contentChangeObserver.setObservedContentChange(WKContentVisibilityChange); 705 } 706 #endif 707 708 } 631 }
Note:
See TracChangeset
for help on using the changeset viewer.