⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmlmediaelement.h

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 H
字号:
/* * Copyright (C) 2007, 2008, 2009 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 COMPUTER, 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 COMPUTER, 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.  */#ifndef HTMLMediaElement_h#define HTMLMediaElement_h#if ENABLE(VIDEO)#include "HTMLElement.h"#include "MediaPlayer.h"#include "Timer.h"#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)#include "MediaPlayerProxy.h"#endifnamespace WebCore {class MediaError;class TimeRanges;class KURL;    class HTMLMediaElement : public HTMLElement, public MediaPlayerClient {public:    HTMLMediaElement(const QualifiedName&, Document*);    virtual ~HTMLMediaElement();    bool checkDTD(const Node* newChild);        void attributeChanged(Attribute*, bool preserveDecls);    virtual bool rendererIsNeeded(RenderStyle*);    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);    virtual void insertedIntoDocument();    virtual void removedFromDocument();    virtual void attach();    virtual void recalcStyle(StyleChange);        MediaPlayer* player() const { return m_player.get(); }        virtual bool isVideo() const { return false; }    virtual bool hasVideo() const { return false; }        void scheduleLoad();        virtual void defaultEventHandler(Event*);        // Pauses playback without changing any states or generating events    void setPausedInternal(bool);        bool inActiveDocument() const { return m_inActiveDocument; }    // DOM API// error state    PassRefPtr<MediaError> error() const;// network state    KURL src() const;    void setSrc(const String&);    String currentSrc() const;        enum NetworkState { EMPTY, LOADING, LOADED_METADATA, LOADED_FIRST_FRAME, LOADED };    NetworkState networkState() const;    PassRefPtr<TimeRanges> buffered() const;    void load(ExceptionCode&);        String canPlayType(const String& mimeType) const;// ready state    enum ReadyState { DATA_UNAVAILABLE, CAN_SHOW_CURRENT_FRAME, CAN_PLAY, CAN_PLAY_THROUGH };    ReadyState readyState() const;    bool seeking() const;// playback state    float currentTime() const;    void setCurrentTime(float, ExceptionCode&);    float duration() const;    bool paused() const;    float defaultPlaybackRate() const;    void setDefaultPlaybackRate(float, ExceptionCode&);    float playbackRate() const;    void setPlaybackRate(float, ExceptionCode&);    PassRefPtr<TimeRanges> played() const;    PassRefPtr<TimeRanges> seekable() const;    bool ended() const;    bool autoplay() const;        void setAutoplay(bool b);    bool loop() const;        void setLoop(bool b);    void play(ExceptionCode&);    void pause(ExceptionCode&);    // controls    bool controls() const;    void setControls(bool);    float volume() const;    void setVolume(float, ExceptionCode&);    bool muted() const;    void setMuted(bool);    void togglePlayState(ExceptionCode& ec);    void beginScrubbing();    void endScrubbing();    bool canPlay() const;#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)    void setNeedWidgetUpdate(bool needWidgetUpdate) { m_needWidgetUpdate = needWidgetUpdate; }    void deliverNotification(MediaPlayerProxyNotificationType notification);    void setMediaPlayerProxy(WebMediaPlayerProxy* proxy);    String initialURL();    virtual void finishParsingChildren();#endifprotected:    float getTimeOffsetAttribute(const QualifiedName&, float valueOnError) const;    void setTimeOffsetAttribute(const QualifiedName&, float value);        virtual void documentWillBecomeInactive();    virtual void documentDidBecomeActive();    virtual void mediaVolumeDidChange();        void initAndDispatchProgressEvent(const AtomicString& eventName);    void dispatchEventAsync(const AtomicString& eventName);        void setReadyState(ReadyState);    void setNetworkState(MediaPlayer::NetworkState state);    private: // MediaPlayerObserver    virtual void mediaPlayerNetworkStateChanged(MediaPlayer*);    virtual void mediaPlayerReadyStateChanged(MediaPlayer*);    virtual void mediaPlayerTimeChanged(MediaPlayer*);    virtual void mediaPlayerRepaint(MediaPlayer*);    virtual void mediaPlayerVolumeChanged(MediaPlayer*);private:    void loadTimerFired(Timer<HTMLMediaElement>*);    void asyncEventTimerFired(Timer<HTMLMediaElement>*);    void progressEventTimerFired(Timer<HTMLMediaElement>*);    void seek(float time, ExceptionCode& ec);    void checkIfSeekNeeded();    // These "internal" functions do not check user gesture restrictions.    void loadInternal(ExceptionCode& ec);    void playInternal(ExceptionCode& ec);    void pauseInternal(ExceptionCode& ec);        bool processingUserGesture() const;    bool processingMediaPlayerCallback() const { return m_processingMediaPlayerCallback > 0; }    void beginProcessingMediaPlayerCallback() { ++m_processingMediaPlayerCallback; }    void endProcessingMediaPlayerCallback() { ASSERT(m_processingMediaPlayerCallback); --m_processingMediaPlayerCallback; }    String selectMediaURL(ContentType& contentType);    void updateVolume();    void updatePlayState();    bool activelyPlaying() const;    bool endedPlayback() const;    // Restrictions to change default behaviors. This is a effectively a compile time choice at the moment    //  because there are no accessor methods.    enum BehaviorRestrictions     {         NoRestrictions = 0,        RequireUserGestureForLoadRestriction = 1 << 0,        RequireUserGestureForRateChangeRestriction = 1 << 1,    };protected:    Timer<HTMLMediaElement> m_loadTimer;    Timer<HTMLMediaElement> m_asyncEventTimer;    Timer<HTMLMediaElement> m_progressEventTimer;    Vector<AtomicString> m_asyncEventsToDispatch;        float m_defaultPlaybackRate;    NetworkState m_networkState;    ReadyState m_readyState;    String m_currentSrc;        RefPtr<MediaError> m_error;        bool m_begun;    bool m_loadedFirstFrame;    bool m_autoplaying;        unsigned m_currentLoop;    float m_volume;    bool m_muted;        bool m_paused;    bool m_seeking;        float m_currentTimeDuringSeek;        unsigned m_previousProgress;    double m_previousProgressTime;    bool m_sentStalledEvent;        unsigned m_loadNestingLevel;    unsigned m_terminateLoadBelowNestingLevel;        bool m_pausedInternal;    bool m_inActiveDocument;    OwnPtr<MediaPlayer> m_player;    BehaviorRestrictions m_restrictions;    // counter incremented while processing a callback from the media player, so we can avoid    //  calling the media engine recursively    int m_processingMediaPlayerCallback;    // Not all media engines provide enough information about a file to be able to    // support progress events so setting m_sendProgressEvents disables them     bool m_sendProgressEvents;#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)    bool m_needWidgetUpdate;#endif};} //namespace#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -