| Index: third_party/WebKit/WebCore/loader/MediaDocument.cpp
|
| ===================================================================
|
| --- third_party/WebKit/WebCore/loader/MediaDocument.cpp (revision 9310)
|
| +++ third_party/WebKit/WebCore/loader/MediaDocument.cpp (working copy)
|
| @@ -1,169 +1,169 @@
|
| -/*
|
| - * Copyright (C) 2008 Apple Inc. All Rights Reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
|
| - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
|
| - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "config.h"
|
| -
|
| -#if ENABLE(VIDEO)
|
| -#include "MediaDocument.h"
|
| -
|
| -#include "DocumentLoader.h"
|
| -#include "Element.h"
|
| -#include "Event.h"
|
| -#include "EventNames.h"
|
| -#include "Frame.h"
|
| -#include "FrameLoader.h"
|
| -#include "FrameLoaderClient.h"
|
| -#include "HTMLEmbedElement.h"
|
| -#include "HTMLNames.h"
|
| -#include "HTMLVideoElement.h"
|
| -#include "MainResourceLoader.h"
|
| -#include "Page.h"
|
| -#include "SegmentedString.h"
|
| -#include "Settings.h"
|
| -#include "Text.h"
|
| -#include "XMLTokenizer.h"
|
| -
|
| -namespace WebCore {
|
| -
|
| -using namespace HTMLNames;
|
| -
|
| -class MediaTokenizer : public Tokenizer {
|
| -public:
|
| - MediaTokenizer(Document* doc) : m_doc(doc), m_mediaElement(0) {}
|
| -
|
| -private:
|
| - virtual bool write(const SegmentedString&, bool appendData);
|
| - virtual void stopParsing();
|
| - virtual void finish();
|
| - virtual bool isWaitingForScripts() const;
|
| -
|
| - virtual bool wantsRawData() const { return true; }
|
| - virtual bool writeRawData(const char* data, int len);
|
| -
|
| - void createDocumentStructure();
|
| -
|
| - Document* m_doc;
|
| - HTMLMediaElement* m_mediaElement;
|
| -};
|
| -
|
| -bool MediaTokenizer::write(const SegmentedString&, bool)
|
| -{
|
| - ASSERT_NOT_REACHED();
|
| - return false;
|
| -}
|
| -
|
| -void MediaTokenizer::createDocumentStructure()
|
| -{
|
| - ExceptionCode ec;
|
| - RefPtr<Element> rootElement = m_doc->createElementNS(xhtmlNamespaceURI, "html", ec);
|
| - m_doc->appendChild(rootElement, ec);
|
| -
|
| - RefPtr<Element> body = m_doc->createElementNS(xhtmlNamespaceURI, "body", ec);
|
| - body->setAttribute(styleAttr, "background-color: rgb(38,38,38);");
|
| -
|
| - rootElement->appendChild(body, ec);
|
| -
|
| - RefPtr<Element> mediaElement = m_doc->createElementNS(xhtmlNamespaceURI, "video", ec);
|
| -
|
| - m_mediaElement = static_cast<HTMLVideoElement*>(mediaElement.get());
|
| - m_mediaElement->setAttribute(controlsAttr, "");
|
| - m_mediaElement->setAttribute(autoplayAttr, "");
|
| - m_mediaElement->setAttribute(styleAttr, "margin: auto; position: absolute; top: 0; right: 0; bottom: 0; left: 0;");
|
| -
|
| - m_mediaElement->setAttribute(nameAttr, "media");
|
| - m_mediaElement->setSrc(m_doc->url());
|
| -
|
| - body->appendChild(mediaElement, ec);
|
| -
|
| - Frame* frame = m_doc->frame();
|
| - if (!frame)
|
| - return;
|
| -
|
| - frame->loader()->activeDocumentLoader()->mainResourceLoader()->setShouldBufferData(false);
|
| -}
|
| -
|
| -bool MediaTokenizer::writeRawData(const char*, int)
|
| -{
|
| - ASSERT(!m_mediaElement);
|
| - if (m_mediaElement)
|
| - return false;
|
| -
|
| - createDocumentStructure();
|
| - finish();
|
| - return false;
|
| -}
|
| -
|
| -void MediaTokenizer::stopParsing()
|
| -{
|
| - Tokenizer::stopParsing();
|
| -}
|
| -
|
| -void MediaTokenizer::finish()
|
| -{
|
| - if (!m_parserStopped)
|
| - m_doc->finishedParsing();
|
| -}
|
| -
|
| -bool MediaTokenizer::isWaitingForScripts() const
|
| -{
|
| - // A media document is never waiting for scripts
|
| - return false;
|
| -}
|
| -
|
| -MediaDocument::MediaDocument(Frame* frame)
|
| - : HTMLDocument(frame)
|
| -{
|
| - setParseMode(Compat);
|
| -}
|
| -
|
| -Tokenizer* MediaDocument::createTokenizer()
|
| -{
|
| - return new MediaTokenizer(this);
|
| -}
|
| -
|
| -void MediaDocument::defaultEventHandler(Event* event)
|
| -{
|
| - // Match the default Quicktime plugin behavior to allow
|
| - // clicking and double-clicking to pause and play the media.
|
| - EventTargetNode* targetNode = event->target()->toNode();
|
| - if (targetNode && targetNode->hasTagName(videoTag)) {
|
| - HTMLVideoElement* video = static_cast<HTMLVideoElement*>(targetNode);
|
| - ExceptionCode ec;
|
| - if (event->type() == eventNames().clickEvent) {
|
| - if (!video->canPlay()) {
|
| - video->pause(ec);
|
| - event->setDefaultHandled();
|
| - }
|
| - } else if (event->type() == eventNames().dblclickEvent) {
|
| - if (video->canPlay()) {
|
| - video->play(ec);
|
| - event->setDefaultHandled();
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -}
|
| -#endif
|
| +/*
|
| + * Copyright (C) 2008 Apple Inc. All Rights Reserved.
|
| + *
|
| + * Redistribution and use in source and binary forms, with or without
|
| + * modification, are permitted provided that the following conditions
|
| + * are met:
|
| + * 1. Redistributions of source code must retain the above copyright
|
| + * notice, this list of conditions and the following disclaimer.
|
| + * 2. Redistributions in binary form must reproduce the above copyright
|
| + * notice, this list of conditions and the following disclaimer in the
|
| + * documentation and/or other materials provided with the distribution.
|
| + *
|
| + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
|
| + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
|
| + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| + */
|
| +
|
| +#include "config.h"
|
| +
|
| +#if ENABLE(VIDEO)
|
| +#include "MediaDocument.h"
|
| +
|
| +#include "DocumentLoader.h"
|
| +#include "Element.h"
|
| +#include "Event.h"
|
| +#include "EventNames.h"
|
| +#include "Frame.h"
|
| +#include "FrameLoader.h"
|
| +#include "FrameLoaderClient.h"
|
| +#include "HTMLEmbedElement.h"
|
| +#include "HTMLNames.h"
|
| +#include "HTMLVideoElement.h"
|
| +#include "MainResourceLoader.h"
|
| +#include "Page.h"
|
| +#include "SegmentedString.h"
|
| +#include "Settings.h"
|
| +#include "Text.h"
|
| +#include "XMLTokenizer.h"
|
| +
|
| +namespace WebCore {
|
| +
|
| +using namespace HTMLNames;
|
| +
|
| +class MediaTokenizer : public Tokenizer {
|
| +public:
|
| + MediaTokenizer(Document* doc) : m_doc(doc), m_mediaElement(0) {}
|
| +
|
| +private:
|
| + virtual bool write(const SegmentedString&, bool appendData);
|
| + virtual void stopParsing();
|
| + virtual void finish();
|
| + virtual bool isWaitingForScripts() const;
|
| +
|
| + virtual bool wantsRawData() const { return true; }
|
| + virtual bool writeRawData(const char* data, int len);
|
| +
|
| + void createDocumentStructure();
|
| +
|
| + Document* m_doc;
|
| + HTMLMediaElement* m_mediaElement;
|
| +};
|
| +
|
| +bool MediaTokenizer::write(const SegmentedString&, bool)
|
| +{
|
| + ASSERT_NOT_REACHED();
|
| + return false;
|
| +}
|
| +
|
| +void MediaTokenizer::createDocumentStructure()
|
| +{
|
| + ExceptionCode ec;
|
| + RefPtr<Element> rootElement = m_doc->createElementNS(xhtmlNamespaceURI, "html", ec);
|
| + m_doc->appendChild(rootElement, ec);
|
| +
|
| + RefPtr<Element> body = m_doc->createElementNS(xhtmlNamespaceURI, "body", ec);
|
| + body->setAttribute(styleAttr, "background-color: rgb(38,38,38);");
|
| +
|
| + rootElement->appendChild(body, ec);
|
| +
|
| + RefPtr<Element> mediaElement = m_doc->createElementNS(xhtmlNamespaceURI, "video", ec);
|
| +
|
| + m_mediaElement = static_cast<HTMLVideoElement*>(mediaElement.get());
|
| + m_mediaElement->setAttribute(controlsAttr, "");
|
| + m_mediaElement->setAttribute(autoplayAttr, "");
|
| + m_mediaElement->setAttribute(styleAttr, "margin: auto; position: absolute; top: 0; right: 0; bottom: 0; left: 0;");
|
| +
|
| + m_mediaElement->setAttribute(nameAttr, "media");
|
| + m_mediaElement->setSrc(m_doc->url());
|
| +
|
| + body->appendChild(mediaElement, ec);
|
| +
|
| + Frame* frame = m_doc->frame();
|
| + if (!frame)
|
| + return;
|
| +
|
| + frame->loader()->activeDocumentLoader()->mainResourceLoader()->setShouldBufferData(false);
|
| +}
|
| +
|
| +bool MediaTokenizer::writeRawData(const char*, int)
|
| +{
|
| + ASSERT(!m_mediaElement);
|
| + if (m_mediaElement)
|
| + return false;
|
| +
|
| + createDocumentStructure();
|
| + finish();
|
| + return false;
|
| +}
|
| +
|
| +void MediaTokenizer::stopParsing()
|
| +{
|
| + Tokenizer::stopParsing();
|
| +}
|
| +
|
| +void MediaTokenizer::finish()
|
| +{
|
| + if (!m_parserStopped)
|
| + m_doc->finishedParsing();
|
| +}
|
| +
|
| +bool MediaTokenizer::isWaitingForScripts() const
|
| +{
|
| + // A media document is never waiting for scripts
|
| + return false;
|
| +}
|
| +
|
| +MediaDocument::MediaDocument(Frame* frame)
|
| + : HTMLDocument(frame)
|
| +{
|
| + setParseMode(Compat);
|
| +}
|
| +
|
| +Tokenizer* MediaDocument::createTokenizer()
|
| +{
|
| + return new MediaTokenizer(this);
|
| +}
|
| +
|
| +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);
|
| + ExceptionCode ec;
|
| + if (event->type() == eventNames().clickEvent) {
|
| + if (!video->canPlay()) {
|
| + video->pause(ec);
|
| + event->setDefaultHandled();
|
| + }
|
| + } else if (event->type() == eventNames().dblclickEvent) {
|
| + if (video->canPlay()) {
|
| + video->play(ec);
|
| + event->setDefaultHandled();
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +}
|
| +#endif
|
|
|