Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(119)

Side by Side Diff: Source/core/html/track/vtt/VTTCue.cpp

Issue 1022523002: Clean up around text track display state updates (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/html/track/vtt/VTTCue.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013, Opera Software ASA. All rights reserved. 2 * Copyright (c) 2013, Opera Software ASA. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 , m_textPosition(std::numeric_limits<float>::quiet_NaN()) 224 , m_textPosition(std::numeric_limits<float>::quiet_NaN())
225 , m_cueSize(100) 225 , m_cueSize(100)
226 , m_writingDirection(Horizontal) 226 , m_writingDirection(Horizontal)
227 , m_cueAlignment(Middle) 227 , m_cueAlignment(Middle)
228 , m_vttNodeTree(nullptr) 228 , m_vttNodeTree(nullptr)
229 , m_cueBackgroundBox(HTMLDivElement::create(document)) 229 , m_cueBackgroundBox(HTMLDivElement::create(document))
230 , m_snapToLines(true) 230 , m_snapToLines(true)
231 , m_displayTreeShouldChange(true) 231 , m_displayTreeShouldChange(true)
232 { 232 {
233 UseCounter::count(document, UseCounter::VTTCue); 233 UseCounter::count(document, UseCounter::VTTCue);
234 m_cueBackgroundBox->setShadowPseudoId(cueShadowPseudoId());
234 } 235 }
235 236
236 VTTCue::~VTTCue() 237 VTTCue::~VTTCue()
237 { 238 {
238 // Using oilpan, if m_displayTree is in the document it will strongly keep 239 // Using oilpan, if m_displayTree is in the document it will strongly keep
239 // the cue alive. Thus, if the cue is dead, either m_displayTree is not in 240 // the cue alive. Thus, if the cue is dead, either m_displayTree is not in
240 // the document or the entire document is dead too. 241 // the document or the entire document is dead too.
241 #if !ENABLE(OILPAN) 242 #if !ENABLE(OILPAN)
242 // FIXME: This is scary, we should make the life cycle smarter so the destru ctor 243 // FIXME: This is scary, we should make the life cycle smarter so the destru ctor
243 // doesn't need to do DOM mutations. 244 // doesn't need to do DOM mutations.
244 if (m_displayTree) 245 if (m_displayTree)
245 m_displayTree->remove(ASSERT_NO_EXCEPTION); 246 m_displayTree->remove(ASSERT_NO_EXCEPTION);
246 #endif 247 #endif
247 } 248 }
248 249
249 #ifndef NDEBUG 250 #ifndef NDEBUG
250 String VTTCue::toString() const 251 String VTTCue::toString() const
251 { 252 {
252 return String::format("%p id=%s interval=%f-->%f cue=%s)", this, id().utf8() .data(), startTime(), endTime(), text().utf8().data()); 253 return String::format("%p id=%s interval=%f-->%f cue=%s)", this, id().utf8() .data(), startTime(), endTime(), text().utf8().data());
253 } 254 }
254 #endif 255 #endif
255 256
256 VTTCueBox& VTTCue::ensureDisplayTree()
257 {
258 if (!m_displayTree)
259 m_displayTree = VTTCueBox::create(document(), this);
260 return *m_displayTree;
261 }
262
263 void VTTCue::cueDidChange() 257 void VTTCue::cueDidChange()
264 { 258 {
265 TextTrackCue::cueDidChange(); 259 TextTrackCue::cueDidChange();
266 m_displayTreeShouldChange = true; 260 m_displayTreeShouldChange = true;
267 } 261 }
268 262
269 const String& VTTCue::vertical() const 263 const String& VTTCue::vertical() const
270 { 264 {
271 switch (m_writingDirection) { 265 switch (m_writingDirection) {
272 case Horizontal: 266 case Horizontal:
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 // Update the two sets containing past and future WebVTT objects. 786 // Update the two sets containing past and future WebVTT objects.
793 createVTTNodeTree(); 787 createVTTNodeTree();
794 RefPtrWillBeRawPtr<DocumentFragment> referenceTree = DocumentFragment::creat e(document()); 788 RefPtrWillBeRawPtr<DocumentFragment> referenceTree = DocumentFragment::creat e(document());
795 m_vttNodeTree->cloneChildNodes(referenceTree.get()); 789 m_vttNodeTree->cloneChildNodes(referenceTree.get());
796 markFutureAndPastNodes(referenceTree.get(), startTime(), movieTime); 790 markFutureAndPastNodes(referenceTree.get(), startTime(), movieTime);
797 m_cueBackgroundBox->appendChild(referenceTree, ASSERT_NO_EXCEPTION); 791 m_cueBackgroundBox->appendChild(referenceTree, ASSERT_NO_EXCEPTION);
798 } 792 }
799 793
800 PassRefPtrWillBeRawPtr<VTTCueBox> VTTCue::getDisplayTree() 794 PassRefPtrWillBeRawPtr<VTTCueBox> VTTCue::getDisplayTree()
801 { 795 {
802 RefPtrWillBeRawPtr<VTTCueBox> displayTree(ensureDisplayTree()); 796 ASSERT(track() && track()->isRendered() && isActive());
803 if (!m_displayTreeShouldChange || !track()->isRendered()) 797
804 return displayTree.release(); 798 if (!m_displayTree) {
799 m_displayTree = VTTCueBox::create(document(), this);
800 m_displayTree->appendChild(m_cueBackgroundBox);
801 }
802
803 ASSERT(m_displayTree->firstChild() == m_cueBackgroundBox);
804
805 // Note: It is updateDisplayTree() which actually adds the child
806 // nodes to m_cueBackgroundBox.
807
808 if (!m_displayTreeShouldChange)
809 return m_displayTree;
805 810
806 createVTTNodeTree(); 811 createVTTNodeTree();
807
808 // 10.1 - 10.10
809 VTTDisplayParameters displayParameters = calculateDisplayParameters(); 812 VTTDisplayParameters displayParameters = calculateDisplayParameters();
810 813 m_displayTree->applyCSSProperties(displayParameters);
811 // 10.11. Apply the terms of the CSS specifications to nodes within the
812 // following constraints, thus obtaining a set of CSS boxes positioned
813 // relative to an initial containing block:
814 displayTree->removeChildren();
815
816 // The document tree is the tree of WebVTT Node Objects rooted at nodes.
817
818 // The children of the nodes must be wrapped in an anonymous box whose
819 // 'display' property has the value 'inline'. This is the WebVTT cue
820 // background box.
821
822 // Note: This is contained by default in m_cueBackgroundBox.
823 m_cueBackgroundBox->setShadowPseudoId(cueShadowPseudoId());
824 displayTree->appendChild(m_cueBackgroundBox);
825
826 // FIXME(BUG 79916): Runs of children of WebVTT Ruby Objects that are not
827 // WebVTT Ruby Text Objects must be wrapped in anonymous boxes whose
828 // 'display' property has the value 'ruby-base'.
829
830 // FIXME(BUG 79916): Text runs must be wrapped according to the CSS
831 // line-wrapping rules, except that additionally, regardless of the value of
832 // the 'white-space' property, lines must be wrapped at the edge of their
833 // containing blocks, even if doing so requires splitting a word where there
834 // is no line breaking opportunity. (Thus, normally text wraps as needed,
835 // but if there is a particularly long word, it does not overflow as it
836 // normally would in CSS, it is instead forcibly wrapped at the box's edge.)
837 displayTree->applyCSSProperties(displayParameters);
838 814
839 m_displayTreeShouldChange = false; 815 m_displayTreeShouldChange = false;
840 816
841 // 10.15. Let cue's text track cue display state have the CSS boxes in 817 return m_displayTree;
842 // boxes.
843 return displayTree.release();
844 } 818 }
845 819
846 void VTTCue::removeDisplayTree(RemovalNotification removalNotification) 820 void VTTCue::removeDisplayTree(RemovalNotification removalNotification)
847 { 821 {
848 if (removalNotification == NotifyRegion && track()->regions()) { 822 if (removalNotification == NotifyRegion && track()->regions()) {
849 // The region needs to be informed about the cue removal. 823 // The region needs to be informed about the cue removal.
850 VTTRegion* region = track()->regions()->getRegionById(m_regionId); 824 VTTRegion* region = track()->regions()->getRegionById(m_regionId);
851 if (region) 825 if (region)
852 region->willRemoveVTTCueBox(m_displayTree.get()); 826 region->willRemoveVTTCueBox(m_displayTree.get());
853 } 827 }
854 828
855 if (m_displayTree) 829 if (m_displayTree)
856 m_displayTree->remove(ASSERT_NO_EXCEPTION); 830 m_displayTree->remove(ASSERT_NO_EXCEPTION);
857 } 831 }
858 832
859 void VTTCue::updateDisplay(HTMLDivElement& container) 833 void VTTCue::updateDisplay(HTMLDivElement& container)
860 { 834 {
835 ASSERT(track() && track()->isRendered() && isActive());
836
861 UseCounter::count(document(), UseCounter::VTTCueRender); 837 UseCounter::count(document(), UseCounter::VTTCueRender);
862 838
863 if (m_writingDirection != Horizontal) 839 if (m_writingDirection != Horizontal)
864 UseCounter::count(document(), UseCounter::VTTCueRenderVertical); 840 UseCounter::count(document(), UseCounter::VTTCueRenderVertical);
865 841
866 if (!m_snapToLines) 842 if (!m_snapToLines)
867 UseCounter::count(document(), UseCounter::VTTCueRenderSnapToLinesFalse); 843 UseCounter::count(document(), UseCounter::VTTCueRenderSnapToLinesFalse);
868 844
869 if (!lineIsAuto()) 845 if (!lineIsAuto())
870 UseCounter::count(document(), UseCounter::VTTCueRenderLineNotAuto); 846 UseCounter::count(document(), UseCounter::VTTCueRenderLineNotAuto);
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 1098
1123 DEFINE_TRACE(VTTCue) 1099 DEFINE_TRACE(VTTCue)
1124 { 1100 {
1125 visitor->trace(m_vttNodeTree); 1101 visitor->trace(m_vttNodeTree);
1126 visitor->trace(m_cueBackgroundBox); 1102 visitor->trace(m_cueBackgroundBox);
1127 visitor->trace(m_displayTree); 1103 visitor->trace(m_displayTree);
1128 TextTrackCue::trace(visitor); 1104 TextTrackCue::trace(visitor);
1129 } 1105 }
1130 1106
1131 } // namespace blink 1107 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/html/track/vtt/VTTCue.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698