Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLMediaElement.h

Issue 1470153004: Autoplay experiment metric fixes and additions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ...because tests. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 bool isURLAttribute(const Attribute&) const override; 277 bool isURLAttribute(const Attribute&) const override;
278 void attach(const AttachContext& = AttachContext()) override; 278 void attach(const AttachContext& = AttachContext()) override;
279 279
280 void didMoveToNewDocument(Document& oldDocument) override; 280 void didMoveToNewDocument(Document& oldDocument) override;
281 virtual KURL posterImageURL() const { return KURL(); } 281 virtual KURL posterImageURL() const { return KURL(); }
282 282
283 enum DisplayMode { Unknown, Poster, Video }; 283 enum DisplayMode { Unknown, Poster, Video };
284 DisplayMode getDisplayMode() const { return m_displayMode; } 284 DisplayMode getDisplayMode() const { return m_displayMode; }
285 virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; } 285 virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; }
286 286
287 void recordAutoplayMetric(AutoplayMetrics);
288
287 private: 289 private:
288 void resetMediaPlayerAndMediaSource(); 290 void resetMediaPlayerAndMediaSource();
289 291
290 bool alwaysCreateUserAgentShadowRoot() const final { return true; } 292 bool alwaysCreateUserAgentShadowRoot() const final { return true; }
291 bool areAuthorShadowsAllowed() const final { return false; } 293 bool areAuthorShadowsAllowed() const final { return false; }
292 294
293 bool supportsFocus() const final; 295 bool supportsFocus() const final;
294 bool isMouseFocusable() const final; 296 bool isMouseFocusable() const final;
295 bool layoutObjectIsNeeded(const ComputedStyle&) override; 297 bool layoutObjectIsNeeded(const ComputedStyle&) override;
296 LayoutObject* createLayoutObject(const ComputedStyle&) override; 298 LayoutObject* createLayoutObject(const ComputedStyle&) override;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 void deferredLoadTimerFired(Timer<HTMLMediaElement>*); 385 void deferredLoadTimerFired(Timer<HTMLMediaElement>*);
384 386
385 void markCaptionAndSubtitleTracksAsUnconfigured(); 387 void markCaptionAndSubtitleTracksAsUnconfigured();
386 388
387 // This does not check user gesture restrictions. 389 // This does not check user gesture restrictions.
388 void playInternal(); 390 void playInternal();
389 391
390 // This does not change the buffering strategy. 392 // This does not change the buffering strategy.
391 void pauseInternal(); 393 void pauseInternal();
392 394
393 // If we are about to enter a paused state, call this to record
394 // autoplay metrics. If we were already in a stopped state, then
395 // this does nothing.
396 void recordMetricsIfPausing();
397 // Could stopping at this point be considered a bailout of playback?
398 // (as in, "The user really didn't want to play this").
399 bool isBailout() const;
400 void autoplayMediaEncountered();
401 void allowVideoRendering(); 395 void allowVideoRendering();
402 396
403 void updateVolume(); 397 void updateVolume();
404 void updatePlayState(); 398 void updatePlayState();
405 bool potentiallyPlaying() const; 399 bool potentiallyPlaying() const;
406 bool stoppedDueToErrors() const; 400 bool stoppedDueToErrors() const;
407 bool couldPlayIfEnoughData() const; 401 bool couldPlayIfEnoughData() const;
408 402
409 // Generally the presence of the loop attribute should be considered to mean playback 403 // Generally the presence of the loop attribute should be considered to mean playback
410 // has not "ended", as "ended" and "looping" are mutually exclusive. See 404 // has not "ended", as "ended" and "looping" are mutually exclusive. See
(...skipping 11 matching lines...) Expand all
422 TextTrackContainer& ensureTextTrackContainer(); 416 TextTrackContainer& ensureTextTrackContainer();
423 417
424 void* preDispatchEventHandler(Event*) final; 418 void* preDispatchEventHandler(Event*) final;
425 419
426 void changeNetworkStateFromLoadingToIdle(); 420 void changeNetworkStateFromLoadingToIdle();
427 421
428 bool isAutoplaying() const { return m_autoplaying; } 422 bool isAutoplaying() const { return m_autoplaying; }
429 423
430 void setAllowHiddenVolumeControls(bool); 424 void setAllowHiddenVolumeControls(bool);
431 425
432 void recordAutoplayMetric(AutoplayMetrics);
433
434 WebMediaPlayer::CORSMode corsMode() const; 426 WebMediaPlayer::CORSMode corsMode() const;
435 427
436 // Returns the "direction of playback" value as specified in the HTML5 spec. 428 // Returns the "direction of playback" value as specified in the HTML5 spec.
437 enum DirectionOfPlayback { Backward, Forward }; 429 enum DirectionOfPlayback { Backward, Forward };
438 DirectionOfPlayback getDirectionOfPlayback() const; 430 DirectionOfPlayback getDirectionOfPlayback() const;
439 431
440 // Creates placeholder AudioTrack and/or VideoTrack objects when WebMemediaP layer objects 432 // Creates placeholder AudioTrack and/or VideoTrack objects when WebMemediaP layer objects
441 // advertise they have audio and/or video, but don't explicitly signal them via 433 // advertise they have audio and/or video, but don't explicitly signal them via
442 // addAudioTrack() and addVideoTrack(). 434 // addAudioTrack() and addVideoTrack().
443 // FIXME: Remove this once all WebMediaPlayer implementations properly repor t their track info. 435 // FIXME: Remove this once all WebMediaPlayer implementations properly repor t their track info.
444 void createPlaceholderTracksIfNecessary(); 436 void createPlaceholderTracksIfNecessary();
445 437
446 // Sets the selected/enabled tracks if they aren't set before we initially 438 // Sets the selected/enabled tracks if they aren't set before we initially
447 // transition to HAVE_METADATA. 439 // transition to HAVE_METADATA.
448 void selectInitialTracksIfNecessary(); 440 void selectInitialTracksIfNecessary();
449 441
450 // Return true if and only if we require a user gesture before letting 442 // Return true if and only if we require a user gesture before letting
451 // the media play. 443 // the media play.
452 bool isUserGestureRequiredForPlay() const; 444 bool isUserGestureRequiredForPlay() const;
445
446 // If the user gesture is required, then this will remove it. Note that
447 // one should not generally call this method directly; use the one on
448 // m_helper and give it a reason.
453 void removeUserGestureRequirement(); 449 void removeUserGestureRequirement();
454 void setInitialPlayWithoutUserGestures(bool);
455 450
456 void setNetworkState(NetworkState); 451 void setNetworkState(NetworkState);
457 452
458 void audioTracksTimerFired(Timer<HTMLMediaElement>*); 453 void audioTracksTimerFired(Timer<HTMLMediaElement>*);
459 454
460 // TODO(liberato): remove once autoplay gesture override experiment conclude s. 455 // TODO(liberato): remove once autoplay gesture override experiment conclude s.
461 void triggerAutoplayViewportCheckForTesting(); 456 void triggerAutoplayViewportCheckForTesting();
462 457
463 void scheduleResolvePlayPromises(); 458 void scheduleResolvePlayPromises();
464 void scheduleRejectPlayPromises(ExceptionCode); 459 void scheduleRejectPlayPromises(ExceptionCode);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 bool m_sentEndEvent : 1; 553 bool m_sentEndEvent : 1;
559 554
560 bool m_closedCaptionsVisible : 1; 555 bool m_closedCaptionsVisible : 1;
561 556
562 bool m_ignorePreloadNone : 1; 557 bool m_ignorePreloadNone : 1;
563 bool m_tracksAreReady : 1; 558 bool m_tracksAreReady : 1;
564 bool m_processingPreferenceChange : 1; 559 bool m_processingPreferenceChange : 1;
565 bool m_remoteRoutesAvailable : 1; 560 bool m_remoteRoutesAvailable : 1;
566 bool m_playingRemotely : 1; 561 bool m_playingRemotely : 1;
567 bool m_isFinalizing : 1; 562 bool m_isFinalizing : 1;
568 bool m_initialPlayWithoutUserGesture : 1;
569 bool m_autoplayMediaCounted : 1;
570 // Whether this element is in overlay fullscreen mode. 563 // Whether this element is in overlay fullscreen mode.
571 bool m_inOverlayFullscreenVideo : 1; 564 bool m_inOverlayFullscreenVideo : 1;
572 565
573 PersistentWillBeMember<AudioTrackList> m_audioTracks; 566 PersistentWillBeMember<AudioTrackList> m_audioTracks;
574 PersistentWillBeMember<VideoTrackList> m_videoTracks; 567 PersistentWillBeMember<VideoTrackList> m_videoTracks;
575 PersistentWillBeMember<TextTrackList> m_textTracks; 568 PersistentWillBeMember<TextTrackList> m_textTracks;
576 PersistentHeapVectorWillBeHeapVector<Member<TextTrack>> m_textTracksWhenReso urceSelectionBegan; 569 PersistentHeapVectorWillBeHeapVector<Member<TextTrack>> m_textTracksWhenReso urceSelectionBegan;
577 570
578 OwnPtrWillBeMember<CueTimeline> m_cueTimeline; 571 OwnPtrWillBeMember<CueTimeline> m_cueTimeline;
579 572
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 DECLARE_TRACE(); 622 DECLARE_TRACE();
630 623
631 private: 624 private:
632 WebAudioSourceProvider* m_webAudioSourceProvider; 625 WebAudioSourceProvider* m_webAudioSourceProvider;
633 PersistentWillBeMember<AudioClientImpl> m_client; 626 PersistentWillBeMember<AudioClientImpl> m_client;
634 Mutex provideInputLock; 627 Mutex provideInputLock;
635 }; 628 };
636 629
637 AudioSourceProviderImpl m_audioSourceProvider; 630 AudioSourceProviderImpl m_audioSourceProvider;
638 631
632 class AutoplayHelperClientImpl;
633
639 friend class Internals; 634 friend class Internals;
640 friend class TrackDisplayUpdateScope; 635 friend class TrackDisplayUpdateScope;
641 friend class AutoplayExperimentHelper; 636 friend class AutoplayExperimentHelper;
642 friend class MediaControlsTest; 637 friend class MediaControlsTest;
643 638
644 AutoplayExperimentHelper m_autoplayHelper; 639 OwnPtrWillBeMember<AutoplayExperimentHelper::Client> m_autoplayHelperClient;
640 OwnPtrWillBeMember<AutoplayExperimentHelper> m_autoplayHelper;
645 641
646 WebRemotePlaybackClient* m_remotePlaybackClient; 642 WebRemotePlaybackClient* m_remotePlaybackClient;
647 643
648 static URLRegistry* s_mediaStreamRegistry; 644 static URLRegistry* s_mediaStreamRegistry;
649 }; 645 };
650 646
651 inline bool isHTMLMediaElement(const HTMLElement& element) 647 inline bool isHTMLMediaElement(const HTMLElement& element)
652 { 648 {
653 return isHTMLAudioElement(element) || isHTMLVideoElement(element); 649 return isHTMLAudioElement(element) || isHTMLVideoElement(element);
654 } 650 }
655 651
656 DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement); 652 DEFINE_HTMLELEMENT_TYPE_CASTS_WITH_FUNCTION(HTMLMediaElement);
657 653
658 } // namespace blink 654 } // namespace blink
659 655
660 #endif // HTMLMediaElement_h 656 #endif // HTMLMediaElement_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698