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

Side by Side Diff: third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.cpp

Issue 2793273002: Use internal hooks for notifying fullscreen changes to media controls (Closed)
Patch Set: update more tests Created 3 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 // 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 #include "MediaControlsOrientationLockDelegate.h" 5 #include "MediaControlsOrientationLockDelegate.h"
6 6
7 #include "core/events/Event.h" 7 #include "core/events/Event.h"
8 #include "core/frame/ScreenOrientationController.h" 8 #include "core/frame/ScreenOrientationController.h"
9 #include "core/html/HTMLVideoElement.h" 9 #include "core/html/HTMLVideoElement.h"
10 #include "core/page/ChromeClient.h" 10 #include "core/page/ChromeClient.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 MediaControlsOrientationLockDelegate::MediaControlsOrientationLockDelegate( 64 MediaControlsOrientationLockDelegate::MediaControlsOrientationLockDelegate(
65 HTMLVideoElement& video) 65 HTMLVideoElement& video)
66 : EventListener(CPPEventListenerType), m_videoElement(video) { 66 : EventListener(CPPEventListenerType), m_videoElement(video) {
67 if (videoElement().isConnected()) 67 if (videoElement().isConnected())
68 attach(); 68 attach();
69 } 69 }
70 70
71 void MediaControlsOrientationLockDelegate::attach() { 71 void MediaControlsOrientationLockDelegate::attach() {
72 DCHECK(videoElement().isConnected()); 72 DCHECK(videoElement().isConnected());
73 73
74 document().addEventListener(EventTypeNames::fullscreenchange, this, true);
75 videoElement().addEventListener(EventTypeNames::webkitfullscreenchange, this,
76 true);
77 videoElement().addEventListener(EventTypeNames::loadedmetadata, this, true); 74 videoElement().addEventListener(EventTypeNames::loadedmetadata, this, true);
78 } 75 }
79 76
80 void MediaControlsOrientationLockDelegate::detach() { 77 void MediaControlsOrientationLockDelegate::detach() {
81 DCHECK(!videoElement().isConnected()); 78 DCHECK(!videoElement().isConnected());
82 79
83 document().removeEventListener(EventTypeNames::fullscreenchange, this, true);
84 videoElement().removeEventListener(EventTypeNames::webkitfullscreenchange,
85 this, true);
86 videoElement().removeEventListener(EventTypeNames::loadedmetadata, this, 80 videoElement().removeEventListener(EventTypeNames::loadedmetadata, this,
87 true); 81 true);
88 } 82 }
89 83
84 void MediaControlsOrientationLockDelegate::didEnterFullscreen() {
85 if (m_state == State::PendingFullscreen)
86 maybeLockOrientation();
87 }
88
89 void MediaControlsOrientationLockDelegate::didExitFullscreen() {
90 if (m_state != State::PendingFullscreen)
91 maybeUnlockOrientation();
92 }
93
90 bool MediaControlsOrientationLockDelegate::operator==( 94 bool MediaControlsOrientationLockDelegate::operator==(
91 const EventListener& other) const { 95 const EventListener& other) const {
92 return this == &other; 96 return this == &other;
93 } 97 }
94 98
95 void MediaControlsOrientationLockDelegate::maybeLockOrientation() { 99 void MediaControlsOrientationLockDelegate::maybeLockOrientation() {
96 DCHECK(m_state != State::MaybeLockedFullscreen); 100 DCHECK(m_state != State::MaybeLockedFullscreen);
97 101
98 if (videoElement().getReadyState() == HTMLMediaElement::kHaveNothing) { 102 if (videoElement().getReadyState() == HTMLMediaElement::kHaveNothing) {
99 recordMetadataAvailability(MetadataAvailabilityMetrics::Missing); 103 recordMetadataAvailability(MetadataAvailabilityMetrics::Missing);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 return *m_videoElement; 148 return *m_videoElement;
145 } 149 }
146 150
147 Document& MediaControlsOrientationLockDelegate::document() const { 151 Document& MediaControlsOrientationLockDelegate::document() const {
148 return videoElement().document(); 152 return videoElement().document();
149 } 153 }
150 154
151 void MediaControlsOrientationLockDelegate::handleEvent( 155 void MediaControlsOrientationLockDelegate::handleEvent(
152 ExecutionContext* executionContext, 156 ExecutionContext* executionContext,
153 Event* event) { 157 Event* event) {
154 if (event->type() == EventTypeNames::fullscreenchange ||
155 event->type() == EventTypeNames::webkitfullscreenchange) {
156 if (videoElement().isFullscreen()) {
157 if (m_state == State::PendingFullscreen)
158 maybeLockOrientation();
159 } else {
160 if (m_state != State::PendingFullscreen)
161 maybeUnlockOrientation();
162 }
163
164 return;
165 }
166
167 if (event->type() == EventTypeNames::loadedmetadata) { 158 if (event->type() == EventTypeNames::loadedmetadata) {
168 if (m_state == State::PendingMetadata) 159 if (m_state == State::PendingMetadata)
169 maybeLockOrientation(); 160 maybeLockOrientation();
170 161
171 return; 162 return;
172 } 163 }
173 164
174 NOTREACHED(); 165 NOTREACHED();
175 } 166 }
176 167
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 NOTREACHED(); 200 NOTREACHED();
210 return WebScreenOrientationLockLandscape; 201 return WebScreenOrientationLockLandscape;
211 } 202 }
212 203
213 DEFINE_TRACE(MediaControlsOrientationLockDelegate) { 204 DEFINE_TRACE(MediaControlsOrientationLockDelegate) {
214 EventListener::trace(visitor); 205 EventListener::trace(visitor);
215 visitor->trace(m_videoElement); 206 visitor->trace(m_videoElement);
216 } 207 }
217 208
218 } // namespace blink 209 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698