| Index: third_party/WebKit/Source/core/html/shadow/MediaControlsMediaEventListener.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsMediaEventListener.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlsMediaEventListener.cpp
|
| index 7d2034368e868ae6caf1f848d5be7eb40a107a9a..76d680d18cee696b52edf93407031d4a34e33727 100644
|
| --- a/third_party/WebKit/Source/core/html/shadow/MediaControlsMediaEventListener.cpp
|
| +++ b/third_party/WebKit/Source/core/html/shadow/MediaControlsMediaEventListener.cpp
|
| @@ -14,6 +14,18 @@ namespace blink {
|
| MediaControlsMediaEventListener::MediaControlsMediaEventListener(
|
| MediaControls* mediaControls)
|
| : EventListener(CPPEventListenerType), m_mediaControls(mediaControls) {
|
| + // These events are always active because they are needed in order to attach
|
| + // or detach the whole controls.
|
| + mediaElement().addEventListener(EventTypeNames::DOMNodeInsertedIntoDocument,
|
| + this, false);
|
| + mediaElement().addEventListener(EventTypeNames::DOMNodeRemovedFromDocument,
|
| + this, false);
|
| +
|
| + if (mediaElement().isConnected())
|
| + attach();
|
| +}
|
| +
|
| +void MediaControlsMediaEventListener::attach() {
|
| mediaElement().addEventListener(EventTypeNames::volumechange, this, false);
|
| mediaElement().addEventListener(EventTypeNames::focusin, this, false);
|
| mediaElement().addEventListener(EventTypeNames::timeupdate, this, false);
|
| @@ -37,6 +49,16 @@ MediaControlsMediaEventListener::MediaControlsMediaEventListener(
|
| textTracks->addEventListener(EventTypeNames::removetrack, this, false);
|
| }
|
|
|
| +void MediaControlsMediaEventListener::detach() {
|
| + m_mediaControls->document().removeEventListener(
|
| + EventTypeNames::fullscreenchange, this, false);
|
| +
|
| + TextTrackList* textTracks = mediaElement().textTracks();
|
| + textTracks->removeEventListener(EventTypeNames::addtrack, this, false);
|
| + textTracks->removeEventListener(EventTypeNames::change, this, false);
|
| + textTracks->removeEventListener(EventTypeNames::removetrack, this, false);
|
| +}
|
| +
|
| bool MediaControlsMediaEventListener::operator==(
|
| const EventListener& other) const {
|
| return this == &other;
|
| @@ -49,6 +71,14 @@ HTMLMediaElement& MediaControlsMediaEventListener::mediaElement() {
|
| void MediaControlsMediaEventListener::handleEvent(
|
| ExecutionContext* executionContext,
|
| Event* event) {
|
| + if (event->type() == EventTypeNames::DOMNodeInsertedIntoDocument) {
|
| + m_mediaControls->onInsertedIntoDocument();
|
| + return;
|
| + }
|
| + if (event->type() == EventTypeNames::DOMNodeRemovedFromDocument) {
|
| + m_mediaControls->onRemovedFromDocument();
|
| + return;
|
| + }
|
| if (event->type() == EventTypeNames::volumechange) {
|
| m_mediaControls->onVolumeChange();
|
| return;
|
|
|