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

Side by Side Diff: Source/core/html/HTMLMediaElement.cpp

Issue 59233014: Setting HTMLMediaElement.controller does not properly remove the 'mediagroup' content attribute (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 1 month 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) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 3720 matching lines...) Expand 10 before | Expand all | Expand 10 after
3731 void HTMLMediaElement::setMediaGroup(const String& group) 3731 void HTMLMediaElement::setMediaGroup(const String& group)
3732 { 3732 {
3733 if (m_mediaGroup == group) 3733 if (m_mediaGroup == group)
3734 return; 3734 return;
3735 m_mediaGroup = group; 3735 m_mediaGroup = group;
3736 3736
3737 // When a media element is created with a mediagroup attribute, and when a m edia element's mediagroup 3737 // When a media element is created with a mediagroup attribute, and when a m edia element's mediagroup
3738 // attribute is set, changed, or removed, the user agent must run the follow ing steps: 3738 // attribute is set, changed, or removed, the user agent must run the follow ing steps:
3739 // 1. Let m [this] be the media element in question. 3739 // 1. Let m [this] be the media element in question.
3740 // 2. Let m have no current media controller, if it currently has one. 3740 // 2. Let m have no current media controller, if it currently has one.
3741 setController(0); 3741 setControllerInternal(0);
3742 3742
3743 // 3. If m's mediagroup attribute is being removed, then abort these steps. 3743 // 3. If m's mediagroup attribute is being removed, then abort these steps.
3744 if (group.isNull() || group.isEmpty()) 3744 if (group.isNull() || group.isEmpty())
3745 return; 3745 return;
3746 3746
3747 // 4. If there is another media element whose Document is the same as m's Do cument (even if one or both 3747 // 4. If there is another media element whose Document is the same as m's Do cument (even if one or both
3748 // of these elements are not actually in the Document), 3748 // of these elements are not actually in the Document),
3749 HashSet<HTMLMediaElement*> elements = documentToElementSetMap().get(&documen t()); 3749 HashSet<HTMLMediaElement*> elements = documentToElementSetMap().get(&documen t());
3750 for (HashSet<HTMLMediaElement*>::iterator i = elements.begin(); i != element s.end(); ++i) { 3750 for (HashSet<HTMLMediaElement*>::iterator i = elements.begin(); i != element s.end(); ++i) {
3751 if (*i == this) 3751 if (*i == this)
3752 continue; 3752 continue;
3753 3753
3754 // and which also has a mediagroup attribute, and whose mediagroup attri bute has the same value as 3754 // and which also has a mediagroup attribute, and whose mediagroup attri bute has the same value as
3755 // the new value of m's mediagroup attribute, 3755 // the new value of m's mediagroup attribute,
3756 if ((*i)->mediaGroup() == group) { 3756 if ((*i)->mediaGroup() == group) {
3757 // then let controller be that media element's current media contro ller. 3757 // then let controller be that media element's current media contro ller.
3758 setController((*i)->controller()); 3758 setControllerInternal((*i)->controller());
3759 return; 3759 return;
3760 } 3760 }
3761 } 3761 }
3762 3762
3763 // Otherwise, let controller be a newly created MediaController. 3763 // Otherwise, let controller be a newly created MediaController.
3764 setController(MediaController::create(Node::executionContext())); 3764 setControllerInternal(MediaController::create(Node::executionContext()));
3765 } 3765 }
3766 3766
3767 MediaController* HTMLMediaElement::controller() const 3767 MediaController* HTMLMediaElement::controller() const
3768 { 3768 {
3769 return m_mediaController.get(); 3769 return m_mediaController.get();
3770 } 3770 }
3771 3771
3772 void HTMLMediaElement::setController(PassRefPtr<MediaController> controller) 3772 void HTMLMediaElement::setController(PassRefPtr<MediaController> controller)
3773 { 3773 {
3774 // 4.8.10.11.2 Media controllers: controller attribute.
3775 // On setting, it must first remove the element's mediagroup attribute, if a ny,
3776 setMediaGroup(String());
philipj_slow 2013/11/08 07:00:17 I think removeAttribute(mediagroupAttr) and lettin
Inactive 2013/11/08 15:35:38 I did the same thing as the previous custom bindin
Inactive 2013/11/08 17:08:31 Congratulations, you found a bug in the custom bin
3777 // and then set the current media controller to the given value.
3778 setControllerInternal(controller);
3779 }
3780
3781 void HTMLMediaElement::setControllerInternal(PassRefPtr<MediaController> control ler)
3782 {
3774 if (m_mediaController) 3783 if (m_mediaController)
3775 m_mediaController->removeMediaElement(this); 3784 m_mediaController->removeMediaElement(this);
3776 3785
3777 m_mediaController = controller; 3786 m_mediaController = controller;
3778 3787
3779 if (m_mediaController) 3788 if (m_mediaController)
3780 m_mediaController->addMediaElement(this); 3789 m_mediaController->addMediaElement(this);
3781 3790
3782 if (hasMediaControls()) 3791 if (hasMediaControls())
3783 mediaControls()->setMediaController(m_mediaController ? m_mediaControlle r.get() : static_cast<MediaControllerInterface*>(this)); 3792 mediaControls()->setMediaController(m_mediaController ? m_mediaControlle r.get() : static_cast<MediaControllerInterface*>(this));
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
3871 { 3880 {
3872 scheduleLayerUpdate(); 3881 scheduleLayerUpdate();
3873 } 3882 }
3874 3883
3875 bool HTMLMediaElement::isInteractiveContent() const 3884 bool HTMLMediaElement::isInteractiveContent() const
3876 { 3885 {
3877 return fastHasAttribute(controlsAttr); 3886 return fastHasAttribute(controlsAttr);
3878 } 3887 }
3879 3888
3880 } 3889 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698