OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef AutoplayUmaHelper_h | 5 #ifndef AutoplayUmaHelper_h |
6 #define AutoplayUmaHelper_h | 6 #define AutoplayUmaHelper_h |
7 | 7 |
8 #include "core/CoreExport.h" | 8 #include "core/CoreExport.h" |
9 #include "core/dom/ContextLifecycleObserver.h" | 9 #include "core/dom/ContextLifecycleObserver.h" |
10 #include "core/events/EventListener.h" | 10 #include "core/events/EventListener.h" |
11 #include "platform/heap/Handle.h" | 11 #include "platform/heap/Handle.h" |
| 12 #include "public/platform/WebMediaPlayerClient.h" |
12 | 13 |
13 #include <set> | 14 #include <set> |
14 | 15 |
15 namespace blink { | 16 namespace blink { |
16 | 17 |
17 // These values are used for histograms. Do not reorder. | 18 // These values are used for histograms. Do not reorder. |
18 enum class AutoplaySource { | 19 enum class AutoplaySource { |
19 // Autoplay comes from HTMLMediaElement `autoplay` attribute. | 20 // Autoplay comes from HTMLMediaElement `autoplay` attribute. |
20 kAttribute = 0, | 21 kAttribute = 0, |
21 // Autoplay comes from `play()` method. | 22 // Autoplay comes from `play()` method. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 | 81 |
81 bool IsVisible() const { return is_visible_; } | 82 bool IsVisible() const { return is_visible_; } |
82 | 83 |
83 bool HasSource() const { return !sources_.empty(); } | 84 bool HasSource() const { return !sources_.empty(); } |
84 | 85 |
85 DECLARE_VIRTUAL_TRACE(); | 86 DECLARE_VIRTUAL_TRACE(); |
86 | 87 |
87 private: | 88 private: |
88 friend class MockAutoplayUmaHelper; | 89 friend class MockAutoplayUmaHelper; |
89 | 90 |
| 91 // Called when source is initialized and loading starts. |
| 92 void OnLoadStarted(); |
| 93 |
90 explicit AutoplayUmaHelper(HTMLMediaElement*); | 94 explicit AutoplayUmaHelper(HTMLMediaElement*); |
91 void handleEvent(ExecutionContext*, Event*) override; | 95 void handleEvent(ExecutionContext*, Event*) override; |
92 void HandlePlayingEvent(); | 96 void HandlePlayingEvent(); |
93 void HandlePauseEvent(); | 97 void HandlePauseEvent(); |
94 virtual void HandleContextDestroyed(); // Make virtual for testing. | 98 virtual void HandleContextDestroyed(); // Make virtual for testing. |
95 | 99 |
96 void MaybeUnregisterContextDestroyedObserver(); | 100 void MaybeUnregisterContextDestroyedObserver(); |
97 void MaybeUnregisterMediaElementPauseListener(); | 101 void MaybeUnregisterMediaElementPauseListener(); |
98 | 102 |
99 void MaybeStartRecordingMutedVideoPlayMethodBecomeVisible(); | 103 void MaybeStartRecordingMutedVideoPlayMethodBecomeVisible(); |
100 void MaybeStopRecordingMutedVideoPlayMethodBecomeVisible(bool is_visible); | 104 void MaybeStopRecordingMutedVideoPlayMethodBecomeVisible(bool is_visible); |
101 | 105 |
102 void MaybeStartRecordingMutedVideoOffscreenDuration(); | 106 void MaybeStartRecordingMutedVideoOffscreenDuration(); |
103 void MaybeStopRecordingMutedVideoOffscreenDuration(); | 107 void MaybeStopRecordingMutedVideoOffscreenDuration(); |
104 | 108 |
105 void MaybeRecordUserPausedAutoplayingCrossOriginVideo(); | 109 void MaybeRecordUserPausedAutoplayingCrossOriginVideo(); |
106 | 110 |
107 void OnVisibilityChangedForMutedVideoOffscreenDuration(bool is_visibile); | 111 void OnVisibilityChangedForMutedVideoOffscreenDuration(bool is_visibile); |
108 void OnVisibilityChangedForMutedVideoPlayMethodBecomeVisible(bool is_visible); | 112 void OnVisibilityChangedForMutedVideoPlayMethodBecomeVisible(bool is_visible); |
109 | 113 |
110 bool ShouldListenToContextDestroyed() const; | 114 bool ShouldListenToContextDestroyed() const; |
111 bool ShouldRecordUserPausedAutoplayingCrossOriginVideo() const; | 115 bool ShouldRecordUserPausedAutoplayingCrossOriginVideo() const; |
112 | 116 |
113 // The autoplay sources. | 117 // The autoplay sources. |
114 std::set<AutoplaySource> sources_; | 118 std::set<AutoplaySource> sources_; |
115 | 119 |
116 // The media element this UMA helper is attached to. |m_element| owns |this|. | 120 // The media element this UMA helper is attached to. |element| owns |this|. |
117 Member<HTMLMediaElement> element_; | 121 Member<HTMLMediaElement> element_; |
118 | 122 |
119 // The observer is used to observe whether a muted video autoplaying by play() | 123 // The observer is used to observe whether a muted video autoplaying by play() |
120 // method become visible at some point. | 124 // method become visible at some point. |
121 // The UMA is pending for recording as long as this observer is non-null. | 125 // The UMA is pending for recording as long as this observer is non-null. |
122 Member<ElementVisibilityObserver> | 126 Member<ElementVisibilityObserver> |
123 muted_video_play_method_visibility_observer_; | 127 muted_video_play_method_visibility_observer_; |
124 | 128 |
125 // ----------------------------------------------------------------------- | 129 // ----------------------------------------------------------------------- |
126 // Variables used for recording the duration of autoplay muted video playing | 130 // Variables used for recording the duration of autoplay muted video playing |
127 // offscreen. The variables are valid when | 131 // offscreen. The variables are valid when |
128 // |m_autoplayOffscrenVisibilityObserver| is non-null. | 132 // |autoplayOffscrenVisibilityObserver| is non-null. |
129 // The recording stops whenever the playback pauses or the page is unloaded. | 133 // The recording stops whenever the playback pauses or the page is unloaded. |
130 | 134 |
131 // The starting time of autoplaying muted video. | 135 // The starting time of autoplaying muted video. |
132 int64_t muted_video_autoplay_offscreen_start_time_ms_; | 136 int64_t muted_video_autoplay_offscreen_start_time_ms_; |
133 | 137 |
134 // The duration an autoplaying muted video has been in offscreen. | 138 // The duration an autoplaying muted video has been in offscreen. |
135 int64_t muted_video_autoplay_offscreen_duration_ms_; | 139 int64_t muted_video_autoplay_offscreen_duration_ms_; |
136 | 140 |
137 // Whether an autoplaying muted video is visible. | 141 // Whether an autoplaying muted video is visible. |
138 bool is_visible_; | 142 bool is_visible_; |
139 | 143 |
140 std::set<CrossOriginAutoplayResult> recorded_cross_origin_autoplay_results_; | 144 std::set<CrossOriginAutoplayResult> recorded_cross_origin_autoplay_results_; |
141 | 145 |
142 // The observer is used to observer an autoplaying muted video changing it's | 146 // The observer is used to observer an autoplaying muted video changing it's |
143 // visibility, which is used for offscreen duration UMA. The UMA is pending | 147 // visibility, which is used for offscreen duration UMA. The UMA is pending |
144 // for recording as long as this observer is non-null. | 148 // for recording as long as this observer is non-null. |
145 Member<ElementVisibilityObserver> | 149 Member<ElementVisibilityObserver> |
146 muted_video_offscreen_duration_visibility_observer_; | 150 muted_video_offscreen_duration_visibility_observer_; |
| 151 |
| 152 double load_start_time_ms_; |
147 }; | 153 }; |
148 | 154 |
149 } // namespace blink | 155 } // namespace blink |
150 | 156 |
151 #endif // AutoplayUmaHelper_h | 157 #endif // AutoplayUmaHelper_h |
OLD | NEW |