12011-04-07 Dimitri Glazkov <dglazkov@chromium.org>
2
3 Reviewed by NOBODY (OOPS!).
4
5 [Meta] Convert HTMLMediaElement to use the new shadow DOM
6 https://bugs.webkit.org/show_bug.cgi?id=53020
7
8 This conversion is non-trivial, for several reasons:
9
10 1) Since HTMLMediaElement now hosts the shadow DOM for controls, hiding
11 and showing controls does not result in destroying and re-creating the
12 shadow DOM tree. Instead, the tree is created as needed and shown/hidden
13 using inline styles.
14
15 2) Instead of detaching/attaching on each style change, the control parts
16 are now using a set of higher fidelity set of hooks that notify MediaControls
17 about changes to which it should react. Each reaction results in hiding,
18 showing, or changing the state of the control parts using inline styles
19 and DOM APIs.
20
21 3) Hiding and showing controls is accomplished using inline styles, rather
22 than wiring rendererIsNeeded, because renderers are now re-created less
23 frequently.
24
25 4) Instead of constantly querying RenderTheme about visibility of a particular
26 control part, we let the theme determine which parts are supported and
27 which parts are visible in certain conditions.
28
29 5) Custom hit-testing, event forwarding, and style updates are completely
30 removed, since they are now unnecessary.
31
32 6) Fading controls in/out is now done as CSS animation, since shadow DOM
33 supports it.
34
35 Test: manual-tests/media-controls.html
36
37 * css/mediaControls.css:
38 (::-webkit-media-controls): Added new pseudo-element to describe media controls container.
39 * html/HTMLMediaElement.cpp:
40 (WebCore::HTMLMediaElement::HTMLMediaElement):
41 (WebCore::HTMLMediaElement::attributeChanged):
42 (WebCore::HTMLMediaElement::setNetworkState):
43 (WebCore::HTMLMediaElement::setReadyState):
44 (WebCore::HTMLMediaElement::playbackProgressTimerFired):
45 (WebCore::HTMLMediaElement::defaultEventHandler):
46 (WebCore::HTMLMediaElement::mediaControls):
47 (WebCore::HTMLMediaElement::hasMediaControls):
48 (WebCore::HTMLMediaElement::ensureMediaControls):
49 * html/HTMLMediaElement.h:
50 * html/shadow/MediaControls.cpp:
51 (WebCore::MediaControls::MediaControls):
52 (WebCore::MediaControls::create):
53 (WebCore::MediaControls::show):
54 (WebCore::MediaControls::hide):
55 (WebCore::webkitTransitionString):
56 (WebCore::opacityString):
57 (WebCore::MediaControls::makeOpaque):
58 (WebCore::MediaControls::makeTransparent):
59 (WebCore::MediaControls::reset):
60 (WebCore::MediaControls::playbackStarted):
61 (WebCore::MediaControls::playbackProgressed):
62 (WebCore::MediaControls::playbackStopped):
63 (WebCore::MediaControls::updateTimeDisplay):
64 (WebCore::MediaControls::reportedError):
65 (WebCore::MediaControls::changedNetworkState):
66 (WebCore::MediaControls::loadedMetadata):
67 (WebCore::MediaControls::changedClosedCaptionsVisibility):
68 (WebCore::MediaControls::changedMute):
69 (WebCore::MediaControls::changedVolume):
70 (WebCore::MediaControls::showVolumeSlider):
71 (WebCore::MediaControls::shadowPseudoId):
72 * html/shadow/MediaControls.h:
73 (WebCore::toMediaControls):
74 * rendering/MediaControlElements.cpp:
75 (WebCore::MediaControlElement::MediaControlElement):
76 (WebCore::displayString):
77 (WebCore::MediaControlElement::show):
78 (WebCore::MediaControlElement::hide):
79 (WebCore::MediaControlTimelineContainerElement::create):
80 (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement):
81 (WebCore::MediaControlVolumeSliderContainerElement::create):
82 (WebCore::MediaControlVolumeSliderContainerElement::defaultEventHandler):
83 (WebCore::MediaControlStatusDisplayElement::create):
84 (WebCore::MediaControlStatusDisplayElement::update):
85 (WebCore::MediaControlInputElement::show):
86 (WebCore::MediaControlInputElement::hide):
87 (WebCore::MediaControlMuteButtonElement::defaultEventHandler):
88 (WebCore::MediaControlMuteButtonElement::changedMute):
89 (WebCore::MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement):
90 (WebCore::MediaControlPanelMuteButtonElement::create):
91 (WebCore::MediaControlPanelMuteButtonElement::defaultEventHandler):
92 (WebCore::MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement):
93 (WebCore::MediaControlPlayButtonElement::defaultEventHandler):
94 (WebCore::MediaControlReturnToRealtimeButtonElement::create):
95 (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
96 (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
97 (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
98 (WebCore::MediaControlTimelineElement::create):
99 (WebCore::MediaControlTimelineElement::defaultEventHandler):
100 (WebCore::MediaControlTimelineElement::setPosition):
101 (WebCore::MediaControlTimelineElement::setDuration):
102 (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement):
103 (WebCore::MediaControlVolumeSliderElement::setVolume):
104 (WebCore::MediaControlFullscreenButtonElement::create):
105 * rendering/MediaControlElements.h:
106 * rendering/RenderMedia.cpp:
107 (WebCore::RenderMedia::RenderMedia):
108 (WebCore::RenderMedia::layout):
109 (WebCore::RenderMedia::paint):
110 * rendering/RenderMedia.h:
111 * rendering/RenderMediaControlsChromium.cpp:
112 * rendering/RenderMediaControlsChromium.h:
113 * rendering/RenderTheme.cpp:
114 * rendering/RenderTheme.h:
115 (WebCore::RenderTheme::supportsClosedCaptioning):
116 (WebCore::RenderTheme::hasOwnDisabledStateHandlingFor):
117 (WebCore::RenderTheme::usesMediaControlVolumeSlider):
118 * rendering/RenderThemeChromiumMac.h:
119 (WebCore::RenderThemeChromiumMac::hasOwnDisabledStateHandlingFor):
120 * rendering/RenderThemeChromiumMac.mm:
121 * rendering/RenderThemeChromiumSkia.cpp:
122 * rendering/RenderThemeChromiumSkia.h:
123 (WebCore::RenderThemeChromiumSkia::hasOwnDisabledStateHandlingFor):
124 * rendering/RenderThemeMac.h:
125 (WebCore::RenderThemeMac::supportsClosedCaptioning):
126 * rendering/RenderThemeMac.mm:
127 (WebCore::RenderThemeMac::hasOwnDisabledStateHandlingFor):
128 (WebCore::RenderThemeMac::usesMediaControlVolumeSlider):
129 * rendering/RenderThemeWin.cpp:
130 (WebCore::RenderThemeWin::supportsClosedCaptioning):
131 * rendering/RenderThemeWin.h:
132 (WebCore::RenderThemeWin::supportsClosedCaptioning):
133