Changeset 107524 in webkit
- Timestamp:
- Feb 12, 2012 7:53:06 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r107523 r107524 1 2012-02-12 Shinya Kawanaka <shinyak@google.com> 2 3 INPUT shouldn't create ShadowRoot dynamically. 4 https://bugs.webkit.org/show_bug.cgi?id=77930 5 6 Reviewed by Dimitri Glazkov. 7 8 Ensures cheaging input type does not cause shadow root recreation. 9 10 * fast/dom/shadow/input-shadow-nochange.html: Added. 11 * fast/dom/shadow/input-shadow-nochange-expected.txt: Added. 12 1 13 2012-02-12 Shinya Kawanaka <shinyak@google.com> 2 14 -
trunk/Source/WebCore/ChangeLog
r107523 r107524 1 2012-02-12 Shinya Kawanaka <shinyak@google.com> 2 3 INPUT shouldn't create ShadowRoot dynamically. 4 https://bugs.webkit.org/show_bug.cgi?id=77930 5 6 Reviewed by Dimitri Glazkov. 7 8 When input type is changed, ShadowRoot was being re-created. This makes it difficult to 9 support multiple shadow subtrees. This patch makes input re-use the existing shadow root 10 instead of re-creating a shaow root. A shadow root should be created when an element is created. 11 12 Since media control elements are implemented using input elements, these elements should also 13 create a shadow root in their construction phase. 14 15 Test: fast/dom/shadow/input-shadow-nochange.html 16 Tests related to media controls should be covered by existing tests. 17 18 * html/ColorInputType.cpp: 19 (WebCore::ColorInputType::createShadowSubtree): 20 * html/FileInputType.cpp: 21 (WebCore::FileInputType::createShadowSubtree): 22 (WebCore::FileInputType::multipleAttributeChanged): 23 * html/HTMLInputElement.cpp: 24 (WebCore::HTMLInputElement::createShadowSubtree): 25 * html/InputType.cpp: 26 (WebCore::InputType::destroyShadowSubtree): 27 * html/RangeInputType.cpp: 28 (WebCore::RangeInputType::createShadowSubtree): 29 * html/TextFieldInputType.cpp: 30 (WebCore::TextFieldInputType::createShadowSubtree): 31 * html/shadow/MediaControlElements.cpp: 32 Creates a shadow tree in the construction phase. 33 (WebCore::MediaControlPanelMuteButtonElement::create): 34 (WebCore::MediaControlVolumeSliderMuteButtonElement::create): 35 (WebCore::MediaControlPlayButtonElement::create): 36 (WebCore::MediaControlSeekForwardButtonElement::create): 37 (WebCore::MediaControlSeekBackButtonElement::create): 38 (WebCore::MediaControlRewindButtonElement::create): 39 (WebCore::MediaControlReturnToRealtimeButtonElement::create): 40 (WebCore::MediaControlToggleClosedCaptionsButtonElement::create): 41 (WebCore::MediaControlTimelineElement::create): 42 (WebCore::MediaControlVolumeSliderElement::create): 43 (WebCore::MediaControlFullscreenVolumeSliderElement::create): 44 (WebCore::MediaControlFullscreenButtonElement::create): 45 (WebCore::MediaControlFullscreenVolumeMinButtonElement::create): 46 (WebCore::MediaControlFullscreenVolumeMaxButtonElement::create): 47 1 48 2012-02-12 Shinya Kawanaka <shinyak@google.com> 2 49 -
trunk/Source/WebCore/html/ColorInputType.cpp
r106628 r107524 107 107 void ColorInputType::createShadowSubtree() 108 108 { 109 ASSERT(element()->shadowRoot()); 110 109 111 Document* document = element()->document(); 110 112 RefPtr<HTMLDivElement> wrapperElement = HTMLDivElement::create(document); … … 115 117 wrapperElement->appendChild(colorSwatch.release(), ec); 116 118 ASSERT(!ec); 117 element()-> ensureShadowRoot()->appendChild(wrapperElement.release(), ec);119 element()->shadowRoot()->appendChild(wrapperElement.release(), ec); 118 120 ASSERT(!ec); 119 121 -
trunk/Source/WebCore/html/FileInputType.cpp
r106538 r107524 266 266 void FileInputType::createShadowSubtree() 267 267 { 268 ASSERT(element()->shadowRoot()); 268 269 ExceptionCode ec = 0; 269 element()-> ensureShadowRoot()->appendChild(element()->multiple() ? UploadButtonElement::createForMultiple(element()->document()): UploadButtonElement::create(element()->document()), ec);270 element()->shadowRoot()->appendChild(element()->multiple() ? UploadButtonElement::createForMultiple(element()->document()): UploadButtonElement::create(element()->document()), ec); 270 271 } 271 272 272 273 void FileInputType::multipleAttributeChanged() 273 274 { 274 UploadButtonElement* button = static_cast<UploadButtonElement*>(element()->ensureShadowRoot()->firstChild()); 275 ASSERT(element()->shadowRoot()); 276 UploadButtonElement* button = static_cast<UploadButtonElement*>(element()->shadowRoot()->firstChild()); 275 277 if (button) 276 278 button->setValue(element()->multiple() ? fileButtonChooseMultipleFilesLabel() : fileButtonChooseFileLabel()); -
trunk/Source/WebCore/html/HTMLInputElement.cpp
r107491 r107524 52 52 #include "RenderTheme.h" 53 53 #include "SearchInputType.h" 54 #include "ShadowRoot.h" 54 55 #include "ScriptEventListener.h" 55 56 #include "WheelEvent.h" … … 109 110 void HTMLInputElement::createShadowSubtree() 110 111 { 112 ASSERT(!shadowRoot()); 113 ShadowRoot::create(this, ShadowRoot::CreatingUserAgentShadowRoot, ASSERT_NO_EXCEPTION); 114 111 115 m_inputType->createShadowSubtree(); 112 116 } -
trunk/Source/WebCore/html/InputType.cpp
r107175 r107524 379 379 void InputType::destroyShadowSubtree() 380 380 { 381 element()->removeShadowRoot(); 381 if (ShadowRoot* root = element()->shadowRoot()) 382 root->removeAllChildren(); 382 383 } 383 384 -
trunk/Source/WebCore/html/RangeInputType.cpp
r100805 r107524 234 234 void RangeInputType::createShadowSubtree() 235 235 { 236 ASSERT(element()->shadowRoot()); 237 236 238 Document* document = element()->document(); 237 239 RefPtr<HTMLDivElement> track = HTMLDivElement::create(document); … … 242 244 container->appendChild(track.release(), ec); 243 245 container->appendChild(TrackLimiterElement::create(document), ec); 244 element()-> ensureShadowRoot()->appendChild(container.release(), ec);246 element()->shadowRoot()->appendChild(container.release(), ec); 245 247 } 246 248 -
trunk/Source/WebCore/html/TextFieldInputType.cpp
r105937 r107524 190 190 void TextFieldInputType::createShadowSubtree() 191 191 { 192 ASSERT(element()->shadowRoot()); 193 192 194 ASSERT(!m_innerText); 193 195 ASSERT(!m_innerBlock); … … 202 204 m_innerText = TextControlInnerTextElement::create(document); 203 205 if (!createsContainer) { 204 element()-> ensureShadowRoot()->appendChild(m_innerText, ec);205 return; 206 } 207 208 ShadowRoot* shadowRoot = element()-> ensureShadowRoot();206 element()->shadowRoot()->appendChild(m_innerText, ec); 207 return; 208 } 209 210 ShadowRoot* shadowRoot = element()->shadowRoot(); 209 211 m_container = HTMLDivElement::create(document); 210 212 m_container->setShadowPseudoId("-webkit-textfield-decoration-container"); -
trunk/Source/WebCore/html/shadow/MediaControlElements.cpp
r106681 r107524 494 494 495 495 RefPtr<MediaControlPanelMuteButtonElement> button = adoptRef(new MediaControlPanelMuteButtonElement(document, controls)); 496 button->createShadowSubtree(); 496 497 button->setType("button"); 497 498 return button.release(); … … 522 523 { 523 524 RefPtr<MediaControlVolumeSliderMuteButtonElement> button = adoptRef(new MediaControlVolumeSliderMuteButtonElement(document)); 525 button->createShadowSubtree(); 524 526 button->setType("button"); 525 527 return button.release(); … … 542 544 { 543 545 RefPtr<MediaControlPlayButtonElement> button = adoptRef(new MediaControlPlayButtonElement(document)); 546 button->createShadowSubtree(); 544 547 button->setType("button"); 545 548 return button.release(); … … 661 664 { 662 665 RefPtr<MediaControlSeekForwardButtonElement> button = adoptRef(new MediaControlSeekForwardButtonElement(document)); 666 button->createShadowSubtree(); 663 667 button->setType("button"); 664 668 return button.release(); … … 681 685 { 682 686 RefPtr<MediaControlSeekBackButtonElement> button = adoptRef(new MediaControlSeekBackButtonElement(document)); 687 button->createShadowSubtree(); 683 688 button->setType("button"); 684 689 return button.release(); … … 701 706 { 702 707 RefPtr<MediaControlRewindButtonElement> button = adoptRef(new MediaControlRewindButtonElement(document)); 708 button->createShadowSubtree(); 703 709 button->setType("button"); 704 710 return button.release(); … … 731 737 { 732 738 RefPtr<MediaControlReturnToRealtimeButtonElement> button = adoptRef(new MediaControlReturnToRealtimeButtonElement(document)); 739 button->createShadowSubtree(); 733 740 button->setType("button"); 734 741 button->hide(); … … 761 768 { 762 769 RefPtr<MediaControlToggleClosedCaptionsButtonElement> button = adoptRef(new MediaControlToggleClosedCaptionsButtonElement(document)); 770 button->createShadowSubtree(); 763 771 button->setType("button"); 764 772 button->hide(); … … 802 810 803 811 RefPtr<MediaControlTimelineElement> timeline = adoptRef(new MediaControlTimelineElement(document, controls)); 812 timeline->createShadowSubtree(); 804 813 timeline->setType("range"); 805 814 timeline->setAttribute(precisionAttr, "float"); … … 866 875 { 867 876 RefPtr<MediaControlVolumeSliderElement> slider = adoptRef(new MediaControlVolumeSliderElement(document)); 877 slider->createShadowSubtree(); 868 878 slider->setType("range"); 869 879 slider->setAttribute(precisionAttr, "float"); … … 916 926 { 917 927 RefPtr<MediaControlFullscreenVolumeSliderElement> slider = adoptRef(new MediaControlFullscreenVolumeSliderElement(document)); 928 slider->createShadowSubtree(); 918 929 slider->setType("range"); 919 930 slider->setAttribute(precisionAttr, "float"); … … 941 952 942 953 RefPtr<MediaControlFullscreenButtonElement> button = adoptRef(new MediaControlFullscreenButtonElement(document, controls)); 954 button->createShadowSubtree(); 943 955 button->setType("button"); 944 956 button->hide(); … … 984 996 { 985 997 RefPtr<MediaControlFullscreenVolumeMinButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMinButtonElement(document)); 998 button->createShadowSubtree(); 986 999 button->setType("button"); 987 1000 return button.release(); … … 1014 1027 { 1015 1028 RefPtr<MediaControlFullscreenVolumeMaxButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMaxButtonElement(document)); 1029 button->createShadowSubtree(); 1016 1030 button->setType("button"); 1017 1031 return button.release();
Note: See TracChangeset
for help on using the changeset viewer.