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

Unified Diff: WebCore/html/MediaDocument.cpp

Issue 6222002: Merge 74984 - Merge 74787 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/597/
Patch Set: Created 9 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « LayoutTests/media/video-element-other-namespace-crash-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: WebCore/html/MediaDocument.cpp
===================================================================
--- WebCore/html/MediaDocument.cpp (revision 75423)
+++ WebCore/html/MediaDocument.cpp (working copy)
@@ -131,48 +131,53 @@
return MediaDocumentParser::create(this);
}
+static inline HTMLVideoElement* descendentVideoElement(Node* node)
+{
+ ASSERT(node);
+
+ if (node->hasTagName(videoTag))
+ return static_cast<HTMLVideoElement*>(node);
+
+ RefPtr<NodeList> nodeList = node->getElementsByTagNameNS(videoTag.namespaceURI(), videoTag.localName());
+
+ if (nodeList.get()->length() > 0)
+ return static_cast<HTMLVideoElement*>(nodeList.get()->item(0));
+
+ return 0;
+}
+
void MediaDocument::defaultEventHandler(Event* event)
{
// Match the default Quicktime plugin behavior to allow
// clicking and double-clicking to pause and play the media.
Node* targetNode = event->target()->toNode();
- if (targetNode && targetNode->hasTagName(videoTag)) {
- HTMLVideoElement* video = static_cast<HTMLVideoElement*>(targetNode);
- if (event->type() == eventNames().clickEvent) {
- if (!video->canPlay()) {
- video->pause(event->fromUserGesture());
- event->setDefaultHandled();
- }
- } else if (event->type() == eventNames().dblclickEvent) {
- if (video->canPlay()) {
- video->play(event->fromUserGesture());
- event->setDefaultHandled();
- }
- }
- }
+ if (!targetNode)
+ return;
- if (event->type() == eventNames().keydownEvent && event->isKeyboardEvent()) {
- HTMLVideoElement* video = 0;
- if (targetNode) {
- if (targetNode->hasTagName(videoTag))
- video = static_cast<HTMLVideoElement*>(targetNode);
- else {
- RefPtr<NodeList> nodeList = targetNode->getElementsByTagName("video");
- if (nodeList.get()->length() > 0)
- video = static_cast<HTMLVideoElement*>(nodeList.get()->item(0));
- }
+ HTMLVideoElement* video = descendentVideoElement(targetNode);
+ if (!video)
+ return;
+
+ if (event->type() == eventNames().clickEvent) {
+ if (!video->canPlay()) {
+ video->pause(event->fromUserGesture());
+ event->setDefaultHandled();
}
- if (video) {
- KeyboardEvent* keyboardEvent = static_cast<KeyboardEvent*>(event);
- if (keyboardEvent->keyIdentifier() == "U+0020") { // space
- if (video->paused()) {
- if (video->canPlay())
- video->play(event->fromUserGesture());
- } else
- video->pause(event->fromUserGesture());
- event->setDefaultHandled();
- }
+ } else if (event->type() == eventNames().dblclickEvent) {
+ if (video->canPlay()) {
+ video->play(event->fromUserGesture());
+ event->setDefaultHandled();
}
+ } else if (event->type() == eventNames().keydownEvent && event->isKeyboardEvent()) {
+ KeyboardEvent* keyboardEvent = static_cast<KeyboardEvent*>(event);
+ if (keyboardEvent->keyIdentifier() == "U+0020") { // space
+ if (video->paused()) {
+ if (video->canPlay())
+ video->play(event->fromUserGesture());
+ } else
+ video->pause(event->fromUserGesture());
+ event->setDefaultHandled();
+ }
}
}
@@ -196,11 +201,7 @@
htmlBody->setAttribute(marginwidthAttr, "0");
htmlBody->setAttribute(marginheightAttr, "0");
- RefPtr<NodeList> nodeList = htmlBody->getElementsByTagName("video");
-
- if (nodeList.get()->length() > 0) {
- HTMLVideoElement* videoElement = static_cast<HTMLVideoElement*>(nodeList.get()->item(0));
-
+ if (HTMLVideoElement* videoElement = descendentVideoElement(htmlBody)) {
RefPtr<Element> element = Document::createElement(embedTag, false);
HTMLEmbedElement* embedElement = static_cast<HTMLEmbedElement*>(element.get());
« no previous file with comments | « LayoutTests/media/video-element-other-namespace-crash-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698