OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. |
3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 27 matching lines...) Expand all Loading... |
38 #include "core/frame/UseCounter.h" | 38 #include "core/frame/UseCounter.h" |
39 #include "core/html/HTMLMediaElement.h" | 39 #include "core/html/HTMLMediaElement.h" |
40 #include "core/html/HTMLVideoElement.h" | 40 #include "core/html/HTMLVideoElement.h" |
41 #include "core/html/media/HTMLMediaElementControlsList.h" | 41 #include "core/html/media/HTMLMediaElementControlsList.h" |
42 #include "core/html/track/TextTrackContainer.h" | 42 #include "core/html/track/TextTrackContainer.h" |
43 #include "core/html/track/TextTrackList.h" | 43 #include "core/html/track/TextTrackList.h" |
44 #include "core/layout/LayoutObject.h" | 44 #include "core/layout/LayoutObject.h" |
45 #include "core/layout/LayoutTheme.h" | 45 #include "core/layout/LayoutTheme.h" |
46 #include "modules/media_controls/MediaControlsMediaEventListener.h" | 46 #include "modules/media_controls/MediaControlsMediaEventListener.h" |
47 #include "modules/media_controls/MediaControlsOrientationLockDelegate.h" | 47 #include "modules/media_controls/MediaControlsOrientationLockDelegate.h" |
| 48 #include "modules/media_controls/MediaControlsRotateToFullscreenDelegate.h" |
48 #include "modules/media_controls/MediaControlsWindowEventListener.h" | 49 #include "modules/media_controls/MediaControlsWindowEventListener.h" |
49 #include "modules/media_controls/elements/MediaControlCastButtonElement.h" | 50 #include "modules/media_controls/elements/MediaControlCastButtonElement.h" |
50 #include "modules/media_controls/elements/MediaControlCurrentTimeDisplayElement.
h" | 51 #include "modules/media_controls/elements/MediaControlCurrentTimeDisplayElement.
h" |
51 #include "modules/media_controls/elements/MediaControlDownloadButtonElement.h" | 52 #include "modules/media_controls/elements/MediaControlDownloadButtonElement.h" |
52 #include "modules/media_controls/elements/MediaControlFullscreenButtonElement.h" | 53 #include "modules/media_controls/elements/MediaControlFullscreenButtonElement.h" |
53 #include "modules/media_controls/elements/MediaControlMuteButtonElement.h" | 54 #include "modules/media_controls/elements/MediaControlMuteButtonElement.h" |
54 #include "modules/media_controls/elements/MediaControlOverflowMenuButtonElement.
h" | 55 #include "modules/media_controls/elements/MediaControlOverflowMenuButtonElement.
h" |
55 #include "modules/media_controls/elements/MediaControlOverflowMenuListElement.h" | 56 #include "modules/media_controls/elements/MediaControlOverflowMenuListElement.h" |
56 #include "modules/media_controls/elements/MediaControlOverlayEnclosureElement.h" | 57 #include "modules/media_controls/elements/MediaControlOverlayEnclosureElement.h" |
57 #include "modules/media_controls/elements/MediaControlOverlayPlayButtonElement.h
" | 58 #include "modules/media_controls/elements/MediaControlOverlayPlayButtonElement.h
" |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 overflow_list_(nullptr), | 219 overflow_list_(nullptr), |
219 cast_button_(nullptr), | 220 cast_button_(nullptr), |
220 fullscreen_button_(nullptr), | 221 fullscreen_button_(nullptr), |
221 download_button_(nullptr), | 222 download_button_(nullptr), |
222 media_event_listener_(new MediaControlsMediaEventListener(this)), | 223 media_event_listener_(new MediaControlsMediaEventListener(this)), |
223 window_event_listener_(MediaControlsWindowEventListener::Create( | 224 window_event_listener_(MediaControlsWindowEventListener::Create( |
224 this, | 225 this, |
225 WTF::Bind(&MediaControlsImpl::HideAllMenus, | 226 WTF::Bind(&MediaControlsImpl::HideAllMenus, |
226 WrapWeakPersistent(this)))), | 227 WrapWeakPersistent(this)))), |
227 orientation_lock_delegate_(nullptr), | 228 orientation_lock_delegate_(nullptr), |
| 229 rotate_to_fullscreen_delegate_(nullptr), |
228 hide_media_controls_timer_( | 230 hide_media_controls_timer_( |
229 TaskRunnerHelper::Get(TaskType::kUnspecedTimer, | 231 TaskRunnerHelper::Get(TaskType::kUnspecedTimer, |
230 &media_element.GetDocument()), | 232 &media_element.GetDocument()), |
231 this, | 233 this, |
232 &MediaControlsImpl::HideMediaControlsTimerFired), | 234 &MediaControlsImpl::HideMediaControlsTimerFired), |
233 hide_timer_behavior_flags_(kIgnoreNone), | 235 hide_timer_behavior_flags_(kIgnoreNone), |
234 is_mouse_over_controls_(false), | 236 is_mouse_over_controls_(false), |
235 is_paused_for_scrubbing_(false), | 237 is_paused_for_scrubbing_(false), |
236 resize_observer_(ResizeObserver::Create( | 238 resize_observer_(ResizeObserver::Create( |
237 media_element.GetDocument(), | 239 media_element.GetDocument(), |
238 new MediaControlsResizeObserverCallback(this))), | 240 new MediaControlsResizeObserverCallback(this))), |
239 element_size_changed_timer_( | 241 element_size_changed_timer_( |
240 TaskRunnerHelper::Get(TaskType::kUnspecedTimer, | 242 TaskRunnerHelper::Get(TaskType::kUnspecedTimer, |
241 &media_element.GetDocument()), | 243 &media_element.GetDocument()), |
242 this, | 244 this, |
243 &MediaControlsImpl::ElementSizeChangedTimerFired), | 245 &MediaControlsImpl::ElementSizeChangedTimerFired), |
244 keep_showing_until_timer_fires_(false) { | 246 keep_showing_until_timer_fires_(false) { |
245 resize_observer_->observe(&media_element); | 247 resize_observer_->observe(&media_element); |
246 } | 248 } |
247 | 249 |
248 MediaControlsImpl* MediaControlsImpl::Create(HTMLMediaElement& media_element, | 250 MediaControlsImpl* MediaControlsImpl::Create(HTMLMediaElement& media_element, |
249 ShadowRoot& shadow_root) { | 251 ShadowRoot& shadow_root) { |
250 MediaControlsImpl* controls = new MediaControlsImpl(media_element); | 252 MediaControlsImpl* controls = new MediaControlsImpl(media_element); |
251 controls->SetShadowPseudoId(AtomicString("-webkit-media-controls")); | 253 controls->SetShadowPseudoId(AtomicString("-webkit-media-controls")); |
252 controls->InitializeControls(); | 254 controls->InitializeControls(); |
253 controls->Reset(); | 255 controls->Reset(); |
254 | 256 |
255 // Initialize the orientation lock when going fullscreen feature. | 257 // RotateToFullscreen and FullscreenOrientationLock are not yet compatible |
256 if (RuntimeEnabledFeatures::videoFullscreenOrientationLockEnabled() && | 258 // so enabling RotateToFullscreen disables FullscreenOrientationLock. |
| 259 // TODO(johnme): Make it possible to use both features simultaneously. |
| 260 if (RuntimeEnabledFeatures::videoRotateToFullscreenEnabled() && |
257 media_element.IsHTMLVideoElement()) { | 261 media_element.IsHTMLVideoElement()) { |
| 262 // Initialize the rotate-to-fullscreen feature. |
| 263 controls->rotate_to_fullscreen_delegate_ = |
| 264 new MediaControlsRotateToFullscreenDelegate( |
| 265 toHTMLVideoElement(media_element)); |
| 266 } else if (RuntimeEnabledFeatures::videoFullscreenOrientationLockEnabled() && |
| 267 media_element.IsHTMLVideoElement()) { |
| 268 // Initialize the orientation lock when going fullscreen feature. |
258 controls->orientation_lock_delegate_ = | 269 controls->orientation_lock_delegate_ = |
259 new MediaControlsOrientationLockDelegate( | 270 new MediaControlsOrientationLockDelegate( |
260 toHTMLVideoElement(media_element)); | 271 toHTMLVideoElement(media_element)); |
261 } | 272 } |
262 | 273 |
263 shadow_root.AppendChild(controls); | 274 shadow_root.AppendChild(controls); |
264 return controls; | 275 return controls; |
265 } | 276 } |
266 | 277 |
267 // The media controls DOM structure looks like: | 278 // The media controls DOM structure looks like: |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 return HTMLDivElement::InsertedInto(root); | 412 return HTMLDivElement::InsertedInto(root); |
402 | 413 |
403 // TODO(mlamouri): we should show the controls instead of having | 414 // TODO(mlamouri): we should show the controls instead of having |
404 // HTMLMediaElement do it. | 415 // HTMLMediaElement do it. |
405 | 416 |
406 // m_windowEventListener doesn't need to be re-attached as it's only needed | 417 // m_windowEventListener doesn't need to be re-attached as it's only needed |
407 // when a menu is visible. | 418 // when a menu is visible. |
408 media_event_listener_->Attach(); | 419 media_event_listener_->Attach(); |
409 if (orientation_lock_delegate_) | 420 if (orientation_lock_delegate_) |
410 orientation_lock_delegate_->Attach(); | 421 orientation_lock_delegate_->Attach(); |
| 422 if (rotate_to_fullscreen_delegate_) |
| 423 rotate_to_fullscreen_delegate_->Attach(); |
411 | 424 |
412 if (!resize_observer_) { | 425 if (!resize_observer_) { |
413 resize_observer_ = | 426 resize_observer_ = |
414 ResizeObserver::Create(MediaElement().GetDocument(), | 427 ResizeObserver::Create(MediaElement().GetDocument(), |
415 new MediaControlsResizeObserverCallback(this)); | 428 new MediaControlsResizeObserverCallback(this)); |
416 HTMLMediaElement& html_media_element = MediaElement(); | 429 HTMLMediaElement& html_media_element = MediaElement(); |
417 resize_observer_->observe(&html_media_element); | 430 resize_observer_->observe(&html_media_element); |
418 } | 431 } |
419 | 432 |
420 return HTMLDivElement::InsertedInto(root); | 433 return HTMLDivElement::InsertedInto(root); |
421 } | 434 } |
422 | 435 |
423 void MediaControlsImpl::RemovedFrom(ContainerNode*) { | 436 void MediaControlsImpl::RemovedFrom(ContainerNode*) { |
424 DCHECK(!MediaElement().isConnected()); | 437 DCHECK(!MediaElement().isConnected()); |
425 | 438 |
426 // TODO(mlamouri): we hide show the controls instead of having | 439 // TODO(mlamouri): we hide show the controls instead of having |
427 // HTMLMediaElement do it. | 440 // HTMLMediaElement do it. |
428 | 441 |
429 window_event_listener_->Stop(); | 442 window_event_listener_->Stop(); |
430 media_event_listener_->Detach(); | 443 media_event_listener_->Detach(); |
431 if (orientation_lock_delegate_) | 444 if (orientation_lock_delegate_) |
432 orientation_lock_delegate_->Detach(); | 445 orientation_lock_delegate_->Detach(); |
| 446 if (rotate_to_fullscreen_delegate_) |
| 447 rotate_to_fullscreen_delegate_->Detach(); |
433 | 448 |
434 resize_observer_.Clear(); | 449 resize_observer_.Clear(); |
435 } | 450 } |
436 | 451 |
437 void MediaControlsImpl::Reset() { | 452 void MediaControlsImpl::Reset() { |
438 EventDispatchForbiddenScope::AllowUserAgentEvents allow_events_in_shadow; | 453 EventDispatchForbiddenScope::AllowUserAgentEvents allow_events_in_shadow; |
439 BatchedControlUpdate batch(this); | 454 BatchedControlUpdate batch(this); |
440 | 455 |
441 const double duration = MediaElement().duration(); | 456 const double duration = MediaElement().duration(); |
442 duration_display_->setTextContent( | 457 duration_display_->setTextContent( |
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1123 visitor->Trace(duration_display_); | 1138 visitor->Trace(duration_display_); |
1124 visitor->Trace(enclosure_); | 1139 visitor->Trace(enclosure_); |
1125 visitor->Trace(text_track_list_); | 1140 visitor->Trace(text_track_list_); |
1126 visitor->Trace(overflow_menu_); | 1141 visitor->Trace(overflow_menu_); |
1127 visitor->Trace(overflow_list_); | 1142 visitor->Trace(overflow_list_); |
1128 visitor->Trace(cast_button_); | 1143 visitor->Trace(cast_button_); |
1129 visitor->Trace(overlay_cast_button_); | 1144 visitor->Trace(overlay_cast_button_); |
1130 visitor->Trace(media_event_listener_); | 1145 visitor->Trace(media_event_listener_); |
1131 visitor->Trace(window_event_listener_); | 1146 visitor->Trace(window_event_listener_); |
1132 visitor->Trace(orientation_lock_delegate_); | 1147 visitor->Trace(orientation_lock_delegate_); |
| 1148 visitor->Trace(rotate_to_fullscreen_delegate_); |
1133 MediaControls::Trace(visitor); | 1149 MediaControls::Trace(visitor); |
1134 HTMLDivElement::Trace(visitor); | 1150 HTMLDivElement::Trace(visitor); |
1135 } | 1151 } |
1136 | 1152 |
1137 } // namespace blink | 1153 } // namespace blink |
OLD | NEW |