Changeset 141066 in webkit
- Timestamp:
- Jan 28, 2013 11:47:20 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r141063 r141066 1 2013-01-28 Elliott Sprehn <esprehn@chromium.org> 2 3 Handle createShadowSubtree inside of ensureUserAgentShadowRoot 4 https://bugs.webkit.org/show_bug.cgi?id=108116 5 6 Reviewed by Dimitri Glazkov. 7 8 Instead of making everyone create the UserAgentShadowRoot manually all 9 over, centralize it in ensureUserAgentShadowRoot() and add a notification 10 Element::didAddUserAgentShadowRoot that lets elements fill in the subtree. 11 This lets us get rid of lots of code duplication. 12 13 No new tests, just refactoring. 14 15 * dom/Element.cpp: 16 (WebCore::Element::ensureUserAgentShadowRoot): 17 * dom/Element.h: 18 (WebCore::Element::didAddUserAgentShadowRoot): 19 (Element): 20 * html/HTMLDetailsElement.cpp: 21 (WebCore::DetailsSummaryElement::create): 22 (WebCore::HTMLDetailsElement::create): 23 (WebCore::HTMLDetailsElement::didAddUserAgentShadowRoot): 24 * html/HTMLDetailsElement.h: 25 (HTMLDetailsElement): 26 * html/HTMLInputElement.cpp: 27 (WebCore::HTMLInputElement::create): 28 (WebCore::HTMLInputElement::didAddUserAgentShadowRoot): 29 * html/HTMLInputElement.h: 30 (HTMLInputElement): 31 * html/HTMLMediaElement.cpp: 32 (WebCore::HTMLMediaElement::willAddAuthorShadowRoot): 33 (WebCore::HTMLMediaElement::createMediaControls): 34 * html/HTMLMediaElement.h: 35 * html/HTMLMeterElement.cpp: 36 (WebCore::HTMLMeterElement::create): 37 (WebCore::HTMLMeterElement::didAddUserAgentShadowRoot): 38 * html/HTMLMeterElement.h: 39 (HTMLMeterElement): 40 * html/HTMLProgressElement.cpp: 41 (WebCore::HTMLProgressElement::create): 42 (WebCore::HTMLProgressElement::didAddUserAgentShadowRoot): 43 * html/HTMLProgressElement.h: 44 * html/HTMLSummaryElement.cpp: 45 (WebCore::HTMLSummaryElement::create): 46 (WebCore::HTMLSummaryElement::didAddUserAgentShadowRoot): 47 * html/HTMLSummaryElement.h: 48 (HTMLSummaryElement): 49 * html/HTMLTextAreaElement.cpp: 50 (WebCore::HTMLTextAreaElement::create): 51 (WebCore::HTMLTextAreaElement::didAddUserAgentShadowRoot): 52 * html/HTMLTextAreaElement.h: 53 * html/shadow/MediaControlElements.cpp: 54 (WebCore::MediaControlPanelMuteButtonElement::create): 55 (WebCore::MediaControlVolumeSliderMuteButtonElement::create): 56 (WebCore::MediaControlPlayButtonElement::create): 57 (WebCore::MediaControlOverlayPlayButtonElement::create): 58 (WebCore::MediaControlSeekForwardButtonElement::create): 59 (WebCore::MediaControlSeekBackButtonElement::create): 60 (WebCore::MediaControlRewindButtonElement::create): 61 (WebCore::MediaControlReturnToRealtimeButtonElement::create): 62 (WebCore::MediaControlToggleClosedCaptionsButtonElement::create): 63 (WebCore::MediaControlTimelineElement::create): 64 (WebCore::MediaControlPanelVolumeSliderElement::create): 65 (WebCore::MediaControlFullscreenVolumeSliderElement::create): 66 (WebCore::MediaControlFullscreenButtonElement::create): 67 (WebCore::MediaControlFullscreenVolumeMinButtonElement::create): 68 (WebCore::MediaControlFullscreenVolumeMaxButtonElement::create): 69 * html/shadow/MediaControlsBlackBerry.cpp: 70 (WebCore::MediaControlFullscreenPlayButtonElement::create): 71 (WebCore::MediaControlFullscreenFullscreenButtonElement::create): 72 (WebCore::MediaControlFullscreenTimelineElement::create): 73 (WebCore::MediaControlAudioMuteButtonElement::create): 74 * svg/SVGTRefElement.cpp: 75 (WebCore::SVGTRefElement::create): 76 * svg/SVGTRefElement.h: 77 (SVGTRefElement): 78 * svg/SVGUseElement.cpp: 79 (WebCore::SVGUseElement::create): 80 * svg/SVGUseElement.h: 81 (SVGUseElement): 82 1 83 2013-01-28 Vineet Chaudhary <rgf748@motorola.com> 2 84 -
trunk/Source/WebCore/dom/Element.cpp
r141005 r141066 1493 1493 if (ShadowRoot* shadowRoot = userAgentShadowRoot()) 1494 1494 return shadowRoot; 1495 return ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot, ASSERT_NO_EXCEPTION).get(); 1495 ShadowRoot* shadowRoot = ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot, ASSERT_NO_EXCEPTION).get(); 1496 didAddUserAgentShadowRoot(shadowRoot); 1497 return shadowRoot; 1496 1498 } 1497 1499 -
trunk/Source/WebCore/dom/Element.h
r141005 r141066 531 531 void setPseudoElement(PseudoId, PassRefPtr<PseudoElement>); 532 532 533 virtual void didAddUserAgentShadowRoot(ShadowRoot*) { } 534 533 535 // FIXME: Remove the need for Attr to call willModifyAttribute/didModifyAttribute. 534 536 friend class Attr; -
trunk/Source/WebCore/html/HTMLDetailsElement.cpp
r139400 r141066 84 84 PassRefPtr<DetailsSummaryElement> DetailsSummaryElement::create(Document* document) 85 85 { 86 RefPtr<HTMLSummaryElement> defaultSummary = HTMLSummaryElement::create(summaryTag, document);87 defaultSummary->appendChild(Text::create(document, defaultDetailsSummaryText()), ASSERT_NO_EXCEPTION);86 RefPtr<HTMLSummaryElement> summary = HTMLSummaryElement::create(summaryTag, document); 87 summary->appendChild(Text::create(document, defaultDetailsSummaryText()), ASSERT_NO_EXCEPTION); 88 88 89 RefPtr<DetailsSummaryElement> elem= adoptRef(new DetailsSummaryElement(document));90 elem->appendChild(defaultSummary);91 return elem.release();89 RefPtr<DetailsSummaryElement> detailsSummary = adoptRef(new DetailsSummaryElement(document)); 90 detailsSummary->appendChild(summary); 91 return detailsSummary.release(); 92 92 } 93 93 94 94 PassRefPtr<HTMLDetailsElement> HTMLDetailsElement::create(const QualifiedName& tagName, Document* document) 95 95 { 96 RefPtr<HTMLDetailsElement> elem = adoptRef(new HTMLDetailsElement(tagName, document)); 97 elem->createShadowSubtree(); 98 99 return elem.release(); 96 RefPtr<HTMLDetailsElement> details = adoptRef(new HTMLDetailsElement(tagName, document)); 97 details->ensureUserAgentShadowRoot(); 98 return details.release(); 100 99 } 101 100 … … 112 111 } 113 112 114 void HTMLDetailsElement:: createShadowSubtree()113 void HTMLDetailsElement::didAddUserAgentShadowRoot(ShadowRoot* root) 115 114 { 116 ASSERT(!shadow());117 118 RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot);119 115 root->appendChild(DetailsSummaryElement::create(document()), ASSERT_NO_EXCEPTION, true); 120 116 root->appendChild(DetailsContentElement::create(document()), ASSERT_NO_EXCEPTION, true); -
trunk/Source/WebCore/html/HTMLDetailsElement.h
r135069 r141066 40 40 virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE; 41 41 42 v oid createShadowSubtree();42 virtual void didAddUserAgentShadowRoot(ShadowRoot*) OVERRIDE; 43 43 44 44 bool m_isOpen; 45 46 45 }; 47 46 -
trunk/Source/WebCore/html/HTMLInputElement.cpp
r140659 r141066 139 139 { 140 140 RefPtr<HTMLInputElement> inputElement = adoptRef(new HTMLInputElement(tagName, document, form, createdByParser)); 141 inputElement-> createShadowSubtree();141 inputElement->ensureUserAgentShadowRoot(); 142 142 return inputElement.release(); 143 143 } 144 144 145 void HTMLInputElement::createShadowSubtree() 146 { 147 ASSERT(!shadow()); 148 ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot, ASSERT_NO_EXCEPTION); 149 145 void HTMLInputElement::didAddUserAgentShadowRoot(ShadowRoot*) 146 { 150 147 m_inputType->createShadowSubtree(); 151 148 } -
trunk/Source/WebCore/html/HTMLInputElement.h
r140097 r141066 302 302 protected: 303 303 HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser); 304 void createShadowSubtree(); 304 305 305 virtual void defaultEventHandler(Event*); 306 306 307 // FIXME: Author shadows should be allowed 307 308 // https://bugs.webkit.org/show_bug.cgi?id=92608 … … 310 311 private: 311 312 enum AutoCompleteSetting { Uninitialized, On, Off }; 313 314 virtual void didAddUserAgentShadowRoot(ShadowRoot*) OVERRIDE; 312 315 313 316 virtual void willChangeForm() OVERRIDE; -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r141030 r141066 1981 1981 } 1982 1982 1983 void HTMLMediaElement::createShadowSubtree()1984 {1985 ASSERT(!userAgentShadowRoot());1986 ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot);1987 }1988 1989 1983 void HTMLMediaElement::willAddAuthorShadowRoot() 1990 1984 { 1991 1985 if (!userAgentShadowRoot()) 1992 createShadowSubtree();1986 ensureUserAgentShadowRoot(); 1993 1987 } 1994 1988 … … 4307 4301 mediaControls->enteredFullscreen(); 4308 4302 4309 if (!shadow()) 4310 createShadowSubtree(); 4311 4312 ASSERT(userAgentShadowRoot()); 4313 userAgentShadowRoot()->appendChild(mediaControls, ASSERT_NO_EXCEPTION); 4303 ensureUserAgentShadowRoot()->appendChild(mediaControls, ASSERT_NO_EXCEPTION); 4314 4304 4315 4305 if (!controls() || !inDocument()) -
trunk/Source/WebCore/html/HTMLMediaElement.h
r140862 r141066 89 89 MediaPlayer* player() const { return m_player.get(); } 90 90 91 void createShadowSubtree();92 91 virtual void willAddAuthorShadowRoot() OVERRIDE; 93 92 virtual bool areAuthorShadowsAllowed() const OVERRIDE { return false; } -
trunk/Source/WebCore/html/HTMLMeterElement.cpp
r141005 r141066 55 55 { 56 56 RefPtr<HTMLMeterElement> meter = adoptRef(new HTMLMeterElement(tagName, document)); 57 meter-> createShadowSubtree();57 meter->ensureUserAgentShadowRoot(); 58 58 return meter; 59 59 } … … 235 235 } 236 236 237 void HTMLMeterElement::createShadowSubtree() 238 { 239 ASSERT(!userAgentShadowRoot()); 240 241 RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot, ASSERT_NO_EXCEPTION); 237 void HTMLMeterElement::didAddUserAgentShadowRoot(ShadowRoot* root) 238 { 239 ASSERT(!m_value); 242 240 243 241 RefPtr<MeterInnerElement> inner = MeterInnerElement::create(document()); -
trunk/Source/WebCore/html/HTMLMeterElement.h
r141005 r141066 80 80 81 81 void didElementStateChange(); 82 v oid createShadowSubtree();82 virtual void didAddUserAgentShadowRoot(ShadowRoot*) OVERRIDE; 83 83 84 84 RefPtr<MeterValueElement> m_value; -
trunk/Source/WebCore/html/HTMLProgressElement.cpp
r141005 r141066 56 56 { 57 57 RefPtr<HTMLProgressElement> progress = adoptRef(new HTMLProgressElement(tagName, document)); 58 progress-> createShadowSubtree();59 return progress ;58 progress->ensureUserAgentShadowRoot(); 59 return progress.release(); 60 60 } 61 61 … … 158 158 } 159 159 160 void HTMLProgressElement:: createShadowSubtree()160 void HTMLProgressElement::didAddUserAgentShadowRoot(ShadowRoot* root) 161 161 { 162 ASSERT(!userAgentShadowRoot());163 162 ASSERT(!m_value); 164 165 RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot, ASSERT_NO_EXCEPTION);166 163 167 164 RefPtr<ProgressInnerElement> inner = ProgressInnerElement::create(document()); -
trunk/Source/WebCore/html/HTMLProgressElement.h
r141005 r141066 68 68 69 69 void didElementStateChange(); 70 v oid createShadowSubtree();70 virtual void didAddUserAgentShadowRoot(ShadowRoot*) OVERRIDE; 71 71 72 72 ProgressValueElement* m_value; -
trunk/Source/WebCore/html/HTMLSummaryElement.cpp
r139064 r141066 56 56 PassRefPtr<HTMLSummaryElement> HTMLSummaryElement::create(const QualifiedName& tagName, Document* document) 57 57 { 58 RefPtr<HTMLSummaryElement> result= adoptRef(new HTMLSummaryElement(tagName, document));59 result->createShadowSubtree();60 return result;58 RefPtr<HTMLSummaryElement> summary = adoptRef(new HTMLSummaryElement(tagName, document)); 59 summary->ensureUserAgentShadowRoot(); 60 return summary.release(); 61 61 } 62 62 … … 77 77 } 78 78 79 void HTMLSummaryElement:: createShadowSubtree()79 void HTMLSummaryElement::didAddUserAgentShadowRoot(ShadowRoot* root) 80 80 { 81 ASSERT(!shadow());82 RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot);83 81 root->appendChild(DetailsMarkerControl::create(document()), ASSERT_NO_EXCEPTION, true); 84 82 root->appendChild(SummaryContentElement::create(document()), ASSERT_NO_EXCEPTION, true); -
trunk/Source/WebCore/html/HTMLSummaryElement.h
r124022 r141066 41 41 virtual void defaultEventHandler(Event*); 42 42 43 v oid createShadowSubtree();43 virtual void didAddUserAgentShadowRoot(ShadowRoot*) OVERRIDE; 44 44 HTMLDetailsElement* detailsElement() const; 45 45 -
trunk/Source/WebCore/html/HTMLTextAreaElement.cpp
r137284 r141066 99 99 { 100 100 RefPtr<HTMLTextAreaElement> textArea = adoptRef(new HTMLTextAreaElement(tagName, document, form)); 101 textArea-> createShadowSubtree();101 textArea->ensureUserAgentShadowRoot(); 102 102 return textArea.release(); 103 103 } 104 104 105 void HTMLTextAreaElement::createShadowSubtree() 106 { 107 ASSERT(!shadow()); 108 RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot); 105 void HTMLTextAreaElement::didAddUserAgentShadowRoot(ShadowRoot* root) 106 { 109 107 root->appendChild(TextControlInnerTextElement::create(document()), ASSERT_NO_EXCEPTION); 110 108 } -
trunk/Source/WebCore/html/HTMLTextAreaElement.h
r137284 r141066 66 66 enum WrapMethod { NoWrap, SoftWrap, HardWrap }; 67 67 68 v oid createShadowSubtree();68 virtual void didAddUserAgentShadowRoot(ShadowRoot*) OVERRIDE; 69 69 virtual bool areAuthorShadowsAllowed() const OVERRIDE { return false; } 70 70 -
trunk/Source/WebCore/html/shadow/MediaControlElements.cpp
r140505 r141066 426 426 427 427 RefPtr<MediaControlPanelMuteButtonElement> button = adoptRef(new MediaControlPanelMuteButtonElement(document, controls)); 428 button-> createShadowSubtree();428 button->ensureUserAgentShadowRoot(); 429 429 button->setType("button"); 430 430 return button.release(); … … 455 455 { 456 456 RefPtr<MediaControlVolumeSliderMuteButtonElement> button = adoptRef(new MediaControlVolumeSliderMuteButtonElement(document)); 457 button-> createShadowSubtree();457 button->ensureUserAgentShadowRoot(); 458 458 button->setType("button"); 459 459 return button.release(); … … 476 476 { 477 477 RefPtr<MediaControlPlayButtonElement> button = adoptRef(new MediaControlPlayButtonElement(document)); 478 button-> createShadowSubtree();478 button->ensureUserAgentShadowRoot(); 479 479 button->setType("button"); 480 480 return button.release(); … … 515 515 { 516 516 RefPtr<MediaControlOverlayPlayButtonElement> button = adoptRef(new MediaControlOverlayPlayButtonElement(document)); 517 button-> createShadowSubtree();517 button->ensureUserAgentShadowRoot(); 518 518 button->setType("button"); 519 519 return button.release(); … … 555 555 { 556 556 RefPtr<MediaControlSeekForwardButtonElement> button = adoptRef(new MediaControlSeekForwardButtonElement(document)); 557 button-> createShadowSubtree();557 button->ensureUserAgentShadowRoot(); 558 558 button->setType("button"); 559 559 return button.release(); … … 576 576 { 577 577 RefPtr<MediaControlSeekBackButtonElement> button = adoptRef(new MediaControlSeekBackButtonElement(document)); 578 button-> createShadowSubtree();578 button->ensureUserAgentShadowRoot(); 579 579 button->setType("button"); 580 580 return button.release(); … … 597 597 { 598 598 RefPtr<MediaControlRewindButtonElement> button = adoptRef(new MediaControlRewindButtonElement(document)); 599 button-> createShadowSubtree();599 button->ensureUserAgentShadowRoot(); 600 600 button->setType("button"); 601 601 return button.release(); … … 628 628 { 629 629 RefPtr<MediaControlReturnToRealtimeButtonElement> button = adoptRef(new MediaControlReturnToRealtimeButtonElement(document)); 630 button-> createShadowSubtree();630 button->ensureUserAgentShadowRoot(); 631 631 button->setType("button"); 632 632 button->hide(); … … 667 667 668 668 RefPtr<MediaControlToggleClosedCaptionsButtonElement> button = adoptRef(new MediaControlToggleClosedCaptionsButtonElement(document, controls)); 669 button-> createShadowSubtree();669 button->ensureUserAgentShadowRoot(); 670 670 button->setType("button"); 671 671 button->hide(); … … 955 955 956 956 RefPtr<MediaControlTimelineElement> timeline = adoptRef(new MediaControlTimelineElement(document, controls)); 957 timeline-> createShadowSubtree();957 timeline->ensureUserAgentShadowRoot(); 958 958 timeline->setType("range"); 959 959 timeline->setAttribute(precisionAttr, "float"); … … 1027 1027 { 1028 1028 RefPtr<MediaControlPanelVolumeSliderElement> slider = adoptRef(new MediaControlPanelVolumeSliderElement(document)); 1029 slider-> createShadowSubtree();1029 slider->ensureUserAgentShadowRoot(); 1030 1030 slider->setType("range"); 1031 1031 slider->setAttribute(precisionAttr, "float"); … … 1050 1050 { 1051 1051 RefPtr<MediaControlFullscreenVolumeSliderElement> slider = adoptRef(new MediaControlFullscreenVolumeSliderElement(document)); 1052 slider-> createShadowSubtree();1052 slider->ensureUserAgentShadowRoot(); 1053 1053 slider->setType("range"); 1054 1054 slider->setAttribute(precisionAttr, "float"); … … 1073 1073 { 1074 1074 RefPtr<MediaControlFullscreenButtonElement> button = adoptRef(new MediaControlFullscreenButtonElement(document)); 1075 button-> createShadowSubtree();1075 button->ensureUserAgentShadowRoot(); 1076 1076 button->setType("button"); 1077 1077 button->hide(); … … 1122 1122 { 1123 1123 RefPtr<MediaControlFullscreenVolumeMinButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMinButtonElement(document)); 1124 button-> createShadowSubtree();1124 button->ensureUserAgentShadowRoot(); 1125 1125 button->setType("button"); 1126 1126 return button.release(); … … 1153 1153 { 1154 1154 RefPtr<MediaControlFullscreenVolumeMaxButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMaxButtonElement(document)); 1155 button-> createShadowSubtree();1155 button->ensureUserAgentShadowRoot(); 1156 1156 button->setType("button"); 1157 1157 return button.release(); -
trunk/Source/WebCore/html/shadow/MediaControlsBlackBerry.cpp
r137514 r141066 376 376 { 377 377 RefPtr<MediaControlFullscreenPlayButtonElement> button = adoptRef(new MediaControlFullscreenPlayButtonElement(document)); 378 button-> createShadowSubtree();378 button->ensureUserAgentShadowRoot(); 379 379 button->setType("button"); 380 380 return button.release(); … … 413 413 { 414 414 RefPtr<MediaControlFullscreenFullscreenButtonElement> button = adoptRef(new MediaControlFullscreenFullscreenButtonElement(document)); 415 button-> createShadowSubtree();415 button->ensureUserAgentShadowRoot(); 416 416 button->setType("button"); 417 417 button->hide(); … … 481 481 482 482 RefPtr<MediaControlFullscreenTimelineElement> timeline = adoptRef(new MediaControlFullscreenTimelineElement(document, controls)); 483 timeline-> createShadowSubtree();483 timeline->ensureUserAgentShadowRoot(); 484 484 timeline->setType("range"); 485 485 timeline->setAttribute(precisionAttr, "float"); … … 585 585 586 586 RefPtr<MediaControlAudioMuteButtonElement> button = adoptRef(new MediaControlAudioMuteButtonElement(document, controls)); 587 button-> createShadowSubtree();587 button->ensureUserAgentShadowRoot(); 588 588 button->setType("button"); 589 589 return button.release(); -
trunk/Source/WebCore/svg/SVGTRefElement.cpp
r135544 r141066 54 54 { 55 55 RefPtr<SVGTRefElement> element = adoptRef(new SVGTRefElement(tagName, document)); 56 element-> createShadowSubtree();56 element->ensureUserAgentShadowRoot(); 57 57 return element.release(); 58 58 } … … 142 142 { 143 143 m_targetListener->detach(); 144 }145 146 void SVGTRefElement::createShadowSubtree()147 {148 ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot, ASSERT_NO_EXCEPTION);149 144 } 150 145 -
trunk/Source/WebCore/svg/SVGTRefElement.h
r135069 r141066 41 41 virtual ~SVGTRefElement(); 42 42 43 void createShadowSubtree();44 45 43 bool isSupportedAttribute(const QualifiedName&); 46 44 virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE; -
trunk/Source/WebCore/svg/SVGUseElement.cpp
r140520 r141066 103 103 // Always build a #shadow-root for SVGUseElement. 104 104 RefPtr<SVGUseElement> use = adoptRef(new SVGUseElement(tagName, document, wasInsertedByParser)); 105 use-> createShadowSubtree();105 use->ensureUserAgentShadowRoot(); 106 106 return use.release(); 107 107 } … … 112 112 113 113 clearResourceReferences(); 114 }115 116 void SVGUseElement::createShadowSubtree()117 {118 ASSERT(!shadow());119 ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot);120 114 } 121 115 -
trunk/Source/WebCore/svg/SVGUseElement.h
r136541 r141066 56 56 private: 57 57 SVGUseElement(const QualifiedName&, Document*, bool wasInsertedByParser); 58 59 void createShadowSubtree();60 58 61 59 virtual bool isValid() const { return SVGTests::isValid(); }
Note: See TracChangeset
for help on using the changeset viewer.