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