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

Side by Side Diff: third_party/WebKit/Source/core/html/shadow/MediaControls.cpp

Issue 2724983006: Media Controls: do not use events but C++ callbacks for insertion/removal from document. (Closed)
Patch Set: Created 3 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 *this, MediaControlDownloadButtonElement::create(*this))); 331 *this, MediaControlDownloadButtonElement::create(*this)));
332 m_overflowList->appendChild(m_muteButton->createOverflowElement( 332 m_overflowList->appendChild(m_muteButton->createOverflowElement(
333 *this, MediaControlMuteButtonElement::create(*this))); 333 *this, MediaControlMuteButtonElement::create(*this)));
334 m_overflowList->appendChild(m_castButton->createOverflowElement( 334 m_overflowList->appendChild(m_castButton->createOverflowElement(
335 *this, MediaControlCastButtonElement::create(*this, false))); 335 *this, MediaControlCastButtonElement::create(*this, false)));
336 m_overflowList->appendChild( 336 m_overflowList->appendChild(
337 m_toggleClosedCaptionsButton->createOverflowElement( 337 m_toggleClosedCaptionsButton->createOverflowElement(
338 *this, MediaControlToggleClosedCaptionsButtonElement::create(*this))); 338 *this, MediaControlToggleClosedCaptionsButtonElement::create(*this)));
339 } 339 }
340 340
341 Node::InsertionNotificationRequest MediaControls::insertedInto(
342 ContainerNode* root) {
343 if (!mediaElement().isConnected())
344 return HTMLDivElement::insertedInto(root);
345
346 // TODO(mlamouri): we should show the controls instead of having
347 // HTMLMediaElement do it.
348
349 // m_windowEventListener doesn't need to be re-attached as it's only needed
350 // when a menu is visible.
351 m_mediaEventListener->attach();
352 if (m_orientationLockDelegate)
353 m_orientationLockDelegate->attach();
354
355 return HTMLDivElement::insertedInto(root);
356 }
357
358 void MediaControls::removedFrom(ContainerNode*) {
359 DCHECK(!mediaElement().isConnected());
360
361 // TODO(mlamouri): we hide show the controls instead of having
362 // HTMLMediaElement do it.
363
364 m_windowEventListener->stop();
365 m_mediaEventListener->detach();
366 if (m_orientationLockDelegate)
367 m_orientationLockDelegate->detach();
368 }
369
341 void MediaControls::reset() { 370 void MediaControls::reset() {
342 EventDispatchForbiddenScope::AllowUserAgentEvents allowEventsInShadow; 371 EventDispatchForbiddenScope::AllowUserAgentEvents allowEventsInShadow;
343 BatchedControlUpdate batch(this); 372 BatchedControlUpdate batch(this);
344 373
345 const double duration = mediaElement().duration(); 374 const double duration = mediaElement().duration();
346 m_durationDisplay->setTextContent( 375 m_durationDisplay->setTextContent(
347 LayoutTheme::theme().formatMediaControlsTime(duration)); 376 LayoutTheme::theme().formatMediaControlsTime(duration));
348 m_durationDisplay->setCurrentValue(duration); 377 m_durationDisplay->setCurrentValue(duration);
349 378
350 // Show everything that we might hide. 379 // Show everything that we might hide.
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 710
682 bool MediaControls::containsRelatedTarget(Event* event) { 711 bool MediaControls::containsRelatedTarget(Event* event) {
683 if (!event->isMouseEvent()) 712 if (!event->isMouseEvent())
684 return false; 713 return false;
685 EventTarget* relatedTarget = toMouseEvent(event)->relatedTarget(); 714 EventTarget* relatedTarget = toMouseEvent(event)->relatedTarget();
686 if (!relatedTarget) 715 if (!relatedTarget)
687 return false; 716 return false;
688 return contains(relatedTarget->toNode()); 717 return contains(relatedTarget->toNode());
689 } 718 }
690 719
691 void MediaControls::onInsertedIntoDocument() {
692 // TODO(mlamouri): we should show the controls instead of having
693 // HTMLMediaElement do it.
694
695 // m_windowEventListener doesn't need to be re-attached as it's only needed
696 // when a menu is visible.
697 m_mediaEventListener->attach();
698 if (m_orientationLockDelegate)
699 m_orientationLockDelegate->attach();
700 }
701
702 void MediaControls::onRemovedFromDocument() {
703 // TODO(mlamouri): we hide show the controls instead of having
704 // HTMLMediaElement do it.
705
706 m_windowEventListener->stop();
707 m_mediaEventListener->detach();
708 if (m_orientationLockDelegate)
709 m_orientationLockDelegate->detach();
710 }
711
712 void MediaControls::onVolumeChange() { 720 void MediaControls::onVolumeChange() {
713 m_muteButton->updateDisplayType(); 721 m_muteButton->updateDisplayType();
714 m_volumeSlider->setVolume(mediaElement().muted() ? 0 722 m_volumeSlider->setVolume(mediaElement().muted() ? 0
715 : mediaElement().volume()); 723 : mediaElement().volume());
716 724
717 // Update visibility of volume controls. 725 // Update visibility of volume controls.
718 // TODO(mlamouri): it should not be part of the volumechange handling because 726 // TODO(mlamouri): it should not be part of the volumechange handling because
719 // it is using audio availability as input. 727 // it is using audio availability as input.
720 BatchedControlUpdate batch(this); 728 BatchedControlUpdate batch(this);
721 m_volumeSlider->setIsWanted(mediaElement().hasAudio() && 729 m_volumeSlider->setIsWanted(mediaElement().hasAudio() &&
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
997 visitor->trace(m_overflowList); 1005 visitor->trace(m_overflowList);
998 visitor->trace(m_castButton); 1006 visitor->trace(m_castButton);
999 visitor->trace(m_overlayCastButton); 1007 visitor->trace(m_overlayCastButton);
1000 visitor->trace(m_mediaEventListener); 1008 visitor->trace(m_mediaEventListener);
1001 visitor->trace(m_windowEventListener); 1009 visitor->trace(m_windowEventListener);
1002 visitor->trace(m_orientationLockDelegate); 1010 visitor->trace(m_orientationLockDelegate);
1003 HTMLDivElement::trace(visitor); 1011 HTMLDivElement::trace(visitor);
1004 } 1012 }
1005 1013
1006 } // namespace blink 1014 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698