| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights
reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 #endif | 51 #endif |
| 52 class ContentType; | 52 class ContentType; |
| 53 class Event; | 53 class Event; |
| 54 class ExceptionState; | 54 class ExceptionState; |
| 55 class HTMLSourceElement; | 55 class HTMLSourceElement; |
| 56 class HTMLTrackElement; | 56 class HTMLTrackElement; |
| 57 class KURL; | 57 class KURL; |
| 58 class MediaController; | 58 class MediaController; |
| 59 class MediaControls; | 59 class MediaControls; |
| 60 class MediaError; | 60 class MediaError; |
| 61 class MediaKeys; | |
| 62 class HTMLMediaSource; | 61 class HTMLMediaSource; |
| 63 class TextTrackList; | 62 class TextTrackList; |
| 64 class TimeRanges; | 63 class TimeRanges; |
| 65 class URLRegistry; | 64 class URLRegistry; |
| 66 | 65 |
| 67 typedef PODIntervalTree<double, TextTrackCue*> CueIntervalTree; | 66 typedef PODIntervalTree<double, TextTrackCue*> CueIntervalTree; |
| 68 typedef CueIntervalTree::IntervalType CueInterval; | 67 typedef CueIntervalTree::IntervalType CueInterval; |
| 69 typedef Vector<CueInterval> CueList; | 68 typedef Vector<CueInterval> CueList; |
| 70 | 69 |
| 71 // FIXME: The inheritance from MediaPlayerClient here should be private inherita
nce. | 70 // FIXME: The inheritance from MediaPlayerClient here should be private inherita
nce. |
| 72 // But it can't be until the Chromium WebMediaPlayerClientImpl class is fixed so
it | 71 // But it can't be until the Chromium WebMediaPlayerClientImpl class is fixed so
it |
| 73 // no longer depends on typecasting a MediaPlayerClient to an HTMLMediaElement. | 72 // no longer depends on typecasting a MediaPlayerClient to an HTMLMediaElement. |
| 74 | 73 |
| 75 class HTMLMediaElement : public HTMLElement, public MediaPlayerClient, public Ac
tiveDOMObject, public MediaControllerInterface | 74 class HTMLMediaElement : public Supplementable<HTMLMediaElement>, public HTMLEle
ment, public MediaPlayerClient, public ActiveDOMObject, public MediaControllerIn
terface |
| 76 { | 75 { |
| 77 public: | 76 public: |
| 78 static blink::WebMimeRegistry::SupportsType supportsType(const ContentType&,
const String& keySystem = String()); | 77 static blink::WebMimeRegistry::SupportsType supportsType(const ContentType&,
const String& keySystem = String()); |
| 79 | 78 |
| 80 static void setMediaStreamRegistry(URLRegistry*); | 79 static void setMediaStreamRegistry(URLRegistry*); |
| 81 static bool isMediaStreamURL(const String& url); | 80 static bool isMediaStreamURL(const String& url); |
| 82 | 81 |
| 82 // Do not use player(). |
| 83 // FIXME: Replace all uses with webMediaPlayer() and remove this API. |
| 83 MediaPlayer* player() const { return m_player.get(); } | 84 MediaPlayer* player() const { return m_player.get(); } |
| 85 blink::WebMediaPlayer* webMediaPlayer() const { return m_player ? m_player->
webMediaPlayer() : 0; } |
| 84 | 86 |
| 85 virtual bool isVideo() const = 0; | 87 virtual bool isVideo() const = 0; |
| 86 virtual bool hasVideo() const OVERRIDE { return false; } | 88 virtual bool hasVideo() const OVERRIDE { return false; } |
| 87 virtual bool hasAudio() const OVERRIDE FINAL; | 89 virtual bool hasAudio() const OVERRIDE FINAL; |
| 88 | 90 |
| 89 bool supportsSave() const; | 91 bool supportsSave() const; |
| 90 | 92 |
| 91 blink::WebLayer* platformLayer() const; | 93 blink::WebLayer* platformLayer() const; |
| 92 | 94 |
| 93 enum DelayedActionType { | 95 enum DelayedActionType { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 virtual void pause() OVERRIDE FINAL; | 143 virtual void pause() OVERRIDE FINAL; |
| 142 | 144 |
| 143 // statistics | 145 // statistics |
| 144 unsigned webkitAudioDecodedByteCount() const; | 146 unsigned webkitAudioDecodedByteCount() const; |
| 145 unsigned webkitVideoDecodedByteCount() const; | 147 unsigned webkitVideoDecodedByteCount() const; |
| 146 | 148 |
| 147 // media source extensions | 149 // media source extensions |
| 148 void closeMediaSource(); | 150 void closeMediaSource(); |
| 149 void durationChanged(double duration); | 151 void durationChanged(double duration); |
| 150 | 152 |
| 151 // encrypted media extensions (v0.1b) | |
| 152 void webkitGenerateKeyRequest(const String& keySystem, PassRefPtr<Uint8Array
> initData, ExceptionState&); | |
| 153 void webkitGenerateKeyRequest(const String& keySystem, ExceptionState&); | |
| 154 void webkitAddKey(const String& keySystem, PassRefPtr<Uint8Array> key, PassR
efPtr<Uint8Array> initData, const String& sessionId, ExceptionState&); | |
| 155 void webkitAddKey(const String& keySystem, PassRefPtr<Uint8Array> key, Excep
tionState&); | |
| 156 void webkitCancelKeyRequest(const String& keySystem, const String& sessionId
, ExceptionState&); | |
| 157 | |
| 158 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyadded); | |
| 159 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyerror); | |
| 160 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeymessage); | |
| 161 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitneedkey); | |
| 162 | |
| 163 // encrypted media extensions (WD) | |
| 164 MediaKeys* mediaKeys() const { return m_mediaKeys.get(); } | |
| 165 void setMediaKeys(MediaKeys*, ExceptionState&); | |
| 166 DEFINE_ATTRIBUTE_EVENT_LISTENER(needkey); | |
| 167 | |
| 168 // controls | 153 // controls |
| 169 bool controls() const; | 154 bool controls() const; |
| 170 void setControls(bool); | 155 void setControls(bool); |
| 171 virtual double volume() const OVERRIDE FINAL; | 156 virtual double volume() const OVERRIDE FINAL; |
| 172 virtual void setVolume(double, ExceptionState&) OVERRIDE FINAL; | 157 virtual void setVolume(double, ExceptionState&) OVERRIDE FINAL; |
| 173 virtual bool muted() const OVERRIDE FINAL; | 158 virtual bool muted() const OVERRIDE FINAL; |
| 174 virtual void setMuted(bool) OVERRIDE FINAL; | 159 virtual void setMuted(bool) OVERRIDE FINAL; |
| 175 | 160 |
| 176 virtual void beginScrubbing() OVERRIDE FINAL; | 161 virtual void beginScrubbing() OVERRIDE FINAL; |
| 177 virtual void endScrubbing() OVERRIDE FINAL; | 162 virtual void endScrubbing() OVERRIDE FINAL; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 | 257 |
| 273 AudioSourceProvider* audioSourceProvider(); | 258 AudioSourceProvider* audioSourceProvider(); |
| 274 #endif | 259 #endif |
| 275 | 260 |
| 276 enum InvalidURLAction { DoNothing, Complain }; | 261 enum InvalidURLAction { DoNothing, Complain }; |
| 277 bool isSafeToLoadURL(const KURL&, InvalidURLAction); | 262 bool isSafeToLoadURL(const KURL&, InvalidURLAction); |
| 278 | 263 |
| 279 MediaController* controller() const; | 264 MediaController* controller() const; |
| 280 void setController(PassRefPtr<MediaController>); // Resets the MediaGroup an
d sets the MediaController. | 265 void setController(PassRefPtr<MediaController>); // Resets the MediaGroup an
d sets the MediaController. |
| 281 | 266 |
| 267 void scheduleEvent(PassRefPtr<Event>); |
| 268 |
| 282 protected: | 269 protected: |
| 283 HTMLMediaElement(const QualifiedName&, Document&); | 270 HTMLMediaElement(const QualifiedName&, Document&); |
| 284 virtual ~HTMLMediaElement(); | 271 virtual ~HTMLMediaElement(); |
| 285 | 272 |
| 286 virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERR
IDE; | 273 virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERR
IDE; |
| 287 virtual void finishParsingChildren() OVERRIDE FINAL; | 274 virtual void finishParsingChildren() OVERRIDE FINAL; |
| 288 virtual bool isURLAttribute(const Attribute&) const OVERRIDE; | 275 virtual bool isURLAttribute(const Attribute&) const OVERRIDE; |
| 289 virtual void attach(const AttachContext& = AttachContext()) OVERRIDE; | 276 virtual void attach(const AttachContext& = AttachContext()) OVERRIDE; |
| 290 | 277 |
| 291 virtual void didMoveToNewDocument(Document& oldDocument) OVERRIDE; | 278 virtual void didMoveToNewDocument(Document& oldDocument) OVERRIDE; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 virtual void mediaPlayerNetworkStateChanged() OVERRIDE FINAL; | 319 virtual void mediaPlayerNetworkStateChanged() OVERRIDE FINAL; |
| 333 virtual void mediaPlayerReadyStateChanged() OVERRIDE FINAL; | 320 virtual void mediaPlayerReadyStateChanged() OVERRIDE FINAL; |
| 334 virtual void mediaPlayerTimeChanged() OVERRIDE FINAL; | 321 virtual void mediaPlayerTimeChanged() OVERRIDE FINAL; |
| 335 virtual void mediaPlayerDurationChanged() OVERRIDE FINAL; | 322 virtual void mediaPlayerDurationChanged() OVERRIDE FINAL; |
| 336 virtual void mediaPlayerPlaybackStateChanged() OVERRIDE FINAL; | 323 virtual void mediaPlayerPlaybackStateChanged() OVERRIDE FINAL; |
| 337 virtual void mediaPlayerRequestFullscreen() OVERRIDE FINAL; | 324 virtual void mediaPlayerRequestFullscreen() OVERRIDE FINAL; |
| 338 virtual void mediaPlayerRequestSeek(double) OVERRIDE FINAL; | 325 virtual void mediaPlayerRequestSeek(double) OVERRIDE FINAL; |
| 339 virtual void mediaPlayerRepaint() OVERRIDE FINAL; | 326 virtual void mediaPlayerRepaint() OVERRIDE FINAL; |
| 340 virtual void mediaPlayerSizeChanged() OVERRIDE FINAL; | 327 virtual void mediaPlayerSizeChanged() OVERRIDE FINAL; |
| 341 | 328 |
| 342 virtual void mediaPlayerKeyAdded(const String& keySystem, const String& sess
ionId) OVERRIDE FINAL; | |
| 343 virtual void mediaPlayerKeyError(const String& keySystem, const String& sess
ionId, MediaPlayerClient::MediaKeyErrorCode, unsigned short systemCode) OVERRIDE
FINAL; | |
| 344 virtual void mediaPlayerKeyMessage(const String& keySystem, const String& se
ssionId, const unsigned char* message, unsigned messageLength, const KURL& defau
ltURL) OVERRIDE FINAL; | |
| 345 virtual bool mediaPlayerKeyNeeded(const String& contentType, const unsigned
char* initData, unsigned initDataLength) OVERRIDE FINAL; | |
| 346 | |
| 347 virtual CORSMode mediaPlayerCORSMode() const OVERRIDE FINAL; | 329 virtual CORSMode mediaPlayerCORSMode() const OVERRIDE FINAL; |
| 348 | 330 |
| 349 virtual void mediaPlayerSetWebLayer(blink::WebLayer*) OVERRIDE FINAL; | 331 virtual void mediaPlayerSetWebLayer(blink::WebLayer*) OVERRIDE FINAL; |
| 350 virtual void mediaPlayerSetOpaque(bool) OVERRIDE FINAL; | 332 virtual void mediaPlayerSetOpaque(bool) OVERRIDE FINAL; |
| 351 virtual void mediaPlayerMediaSourceOpened(blink::WebMediaSource*) OVERRIDE F
INAL; | 333 virtual void mediaPlayerMediaSourceOpened(blink::WebMediaSource*) OVERRIDE F
INAL; |
| 352 | 334 |
| 353 void loadTimerFired(Timer<HTMLMediaElement>*); | 335 void loadTimerFired(Timer<HTMLMediaElement>*); |
| 354 void progressEventTimerFired(Timer<HTMLMediaElement>*); | 336 void progressEventTimerFired(Timer<HTMLMediaElement>*); |
| 355 void playbackProgressTimerFired(Timer<HTMLMediaElement>*); | 337 void playbackProgressTimerFired(Timer<HTMLMediaElement>*); |
| 356 void startPlaybackProgressTimer(); | 338 void startPlaybackProgressTimer(); |
| 357 void startProgressEventTimer(); | 339 void startProgressEventTimer(); |
| 358 void stopPeriodicTimers(); | 340 void stopPeriodicTimers(); |
| 359 | 341 |
| 360 void seek(double time, ExceptionState&); | 342 void seek(double time, ExceptionState&); |
| 361 void finishSeek(); | 343 void finishSeek(); |
| 362 void checkIfSeekNeeded(); | 344 void checkIfSeekNeeded(); |
| 363 void addPlayedRange(double start, double end); | 345 void addPlayedRange(double start, double end); |
| 364 | 346 |
| 365 void scheduleTimeupdateEvent(bool periodicEvent); | 347 void scheduleTimeupdateEvent(bool periodicEvent); |
| 366 void scheduleEvent(const AtomicString& eventName); | 348 void scheduleEvent(const AtomicString& eventName); // FIXME: Rename to sched
uleNamedEvent for clarity. |
| 367 | 349 |
| 368 // loading | 350 // loading |
| 369 void prepareForLoad(); | 351 void prepareForLoad(); |
| 370 void loadInternal(); | 352 void loadInternal(); |
| 371 void selectMediaResource(); | 353 void selectMediaResource(); |
| 372 void loadResource(const KURL&, ContentType&, const String& keySystem); | 354 void loadResource(const KURL&, ContentType&, const String& keySystem); |
| 373 void scheduleNextSourceChild(); | 355 void scheduleNextSourceChild(); |
| 374 void loadNextSourceChild(); | 356 void loadNextSourceChild(); |
| 375 void userCancelledLoad(); | 357 void userCancelledLoad(); |
| 376 void clearMediaPlayer(int flags); | 358 void clearMediaPlayer(int flags); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 | 406 |
| 425 void changeNetworkStateFromLoadingToIdle(); | 407 void changeNetworkStateFromLoadingToIdle(); |
| 426 | 408 |
| 427 const AtomicString& mediaGroup() const; | 409 const AtomicString& mediaGroup() const; |
| 428 void setMediaGroup(const AtomicString&); | 410 void setMediaGroup(const AtomicString&); |
| 429 void updateMediaController(); | 411 void updateMediaController(); |
| 430 bool isBlocked() const; | 412 bool isBlocked() const; |
| 431 bool isBlockedOnMediaController() const; | 413 bool isBlockedOnMediaController() const; |
| 432 bool isAutoplaying() const { return m_autoplaying; } | 414 bool isAutoplaying() const { return m_autoplaying; } |
| 433 | 415 |
| 434 // Currently we have both EME v0.1b and EME WD implemented in media element. | |
| 435 // But we do not want to support both at the same time. The one used first | |
| 436 // will be supported. Use |m_emeMode| to track this selection. | |
| 437 // FIXME: Remove EmeMode once EME v0.1b support is removed. See crbug.com/24
9976. | |
| 438 enum EmeMode { EmeModeNotSelected, EmeModePrefixed, EmeModeUnprefixed }; | |
| 439 | |
| 440 // check (and set if necessary) the encrypted media extensions (EME) mode | |
| 441 // (v0.1b or WD). Returns whether the mode is allowed and successfully set. | |
| 442 bool setEmeMode(EmeMode, ExceptionState&); | |
| 443 | |
| 444 blink::WebContentDecryptionModule* contentDecryptionModule(); | |
| 445 void setMediaKeysInternal(MediaKeys*); | |
| 446 | |
| 447 Timer<HTMLMediaElement> m_loadTimer; | 416 Timer<HTMLMediaElement> m_loadTimer; |
| 448 Timer<HTMLMediaElement> m_progressEventTimer; | 417 Timer<HTMLMediaElement> m_progressEventTimer; |
| 449 Timer<HTMLMediaElement> m_playbackProgressTimer; | 418 Timer<HTMLMediaElement> m_playbackProgressTimer; |
| 450 RefPtr<TimeRanges> m_playedTimeRanges; | 419 RefPtr<TimeRanges> m_playedTimeRanges; |
| 451 OwnPtr<GenericEventQueue> m_asyncEventQueue; | 420 OwnPtr<GenericEventQueue> m_asyncEventQueue; |
| 452 | 421 |
| 453 double m_playbackRate; | 422 double m_playbackRate; |
| 454 double m_defaultPlaybackRate; | 423 double m_defaultPlaybackRate; |
| 455 NetworkState m_networkState; | 424 NetworkState m_networkState; |
| 456 ReadyState m_readyState; | 425 ReadyState m_readyState; |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 // The value is set just after the MediaElementAudioSourceNode is created. | 510 // The value is set just after the MediaElementAudioSourceNode is created. |
| 542 // The value is cleared in MediaElementAudioSourceNode::~MediaElementAudioSo
urceNode(). | 511 // The value is cleared in MediaElementAudioSourceNode::~MediaElementAudioSo
urceNode(). |
| 543 MediaElementAudioSourceNode* m_audioSourceNode; | 512 MediaElementAudioSourceNode* m_audioSourceNode; |
| 544 #endif | 513 #endif |
| 545 | 514 |
| 546 friend class MediaController; | 515 friend class MediaController; |
| 547 RefPtr<MediaController> m_mediaController; | 516 RefPtr<MediaController> m_mediaController; |
| 548 | 517 |
| 549 friend class TrackDisplayUpdateScope; | 518 friend class TrackDisplayUpdateScope; |
| 550 | 519 |
| 551 EmeMode m_emeMode; | |
| 552 | |
| 553 RefPtrWillBePersistent<MediaKeys> m_mediaKeys; | |
| 554 | |
| 555 static URLRegistry* s_mediaStreamRegistry; | 520 static URLRegistry* s_mediaStreamRegistry; |
| 556 }; | 521 }; |
| 557 | 522 |
| 558 #ifndef NDEBUG | 523 #ifndef NDEBUG |
| 559 // Template specializations required by PodIntervalTree in debug mode. | 524 // Template specializations required by PodIntervalTree in debug mode. |
| 560 template <> | 525 template <> |
| 561 struct ValueToString<double> { | 526 struct ValueToString<double> { |
| 562 static String string(const double value) | 527 static String string(const double value) |
| 563 { | 528 { |
| 564 return String::number(value); | 529 return String::number(value); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 577 inline bool isHTMLMediaElement(const Node& node) | 542 inline bool isHTMLMediaElement(const Node& node) |
| 578 { | 543 { |
| 579 return node.isElementNode() && toElement(node).isMediaElement(); | 544 return node.isElementNode() && toElement(node).isMediaElement(); |
| 580 } | 545 } |
| 581 | 546 |
| 582 DEFINE_NODE_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement); | 547 DEFINE_NODE_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement); |
| 583 | 548 |
| 584 } //namespace | 549 } //namespace |
| 585 | 550 |
| 586 #endif | 551 #endif |
| OLD | NEW |