| 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());
|
|
|
|
|