| 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 22 matching lines...) Expand all Loading... |
| 33 #include "core/html/HTMLMediaElement.h" | 33 #include "core/html/HTMLMediaElement.h" |
| 34 #include "core/html/MediaController.h" | 34 #include "core/html/MediaController.h" |
| 35 #include "core/rendering/RenderTheme.h" | 35 #include "core/rendering/RenderTheme.h" |
| 36 | 36 |
| 37 namespace blink { | 37 namespace blink { |
| 38 | 38 |
| 39 // If you change this value, then also update the corresponding value in | 39 // If you change this value, then also update the corresponding value in |
| 40 // LayoutTests/media/media-controls.js. | 40 // LayoutTests/media/media-controls.js. |
| 41 static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3; | 41 static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3; |
| 42 | 42 |
| 43 static bool deviceSupportsMouse(const Document& document) |
| 44 { |
| 45 return !document.settings() || document.settings()->deviceSupportsMouse(); |
| 46 } |
| 47 |
| 43 MediaControls::MediaControls(HTMLMediaElement& mediaElement) | 48 MediaControls::MediaControls(HTMLMediaElement& mediaElement) |
| 44 : HTMLDivElement(mediaElement.document()) | 49 : HTMLDivElement(mediaElement.document()) |
| 45 , m_mediaElement(&mediaElement) | 50 , m_mediaElement(&mediaElement) |
| 46 , m_panel(nullptr) | 51 , m_panel(nullptr) |
| 47 , m_textDisplayContainer(nullptr) | 52 , m_textDisplayContainer(nullptr) |
| 48 , m_overlayPlayButton(nullptr) | 53 , m_overlayPlayButton(nullptr) |
| 49 , m_overlayEnclosure(nullptr) | 54 , m_overlayEnclosure(nullptr) |
| 50 , m_playButton(nullptr) | 55 , m_playButton(nullptr) |
| 51 , m_currentTimeDisplay(nullptr) | 56 , m_currentTimeDisplay(nullptr) |
| 52 , m_timeline(nullptr) | 57 , m_timeline(nullptr) |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 void MediaControls::makeTransparent() | 222 void MediaControls::makeTransparent() |
| 218 { | 223 { |
| 219 m_panel->makeTransparent(); | 224 m_panel->makeTransparent(); |
| 220 } | 225 } |
| 221 | 226 |
| 222 bool MediaControls::shouldHideMediaControls(unsigned behaviorFlags) const | 227 bool MediaControls::shouldHideMediaControls(unsigned behaviorFlags) const |
| 223 { | 228 { |
| 224 // Never hide for a media element without visual representation. | 229 // Never hide for a media element without visual representation. |
| 225 if (!mediaElement().hasVideo()) | 230 if (!mediaElement().hasVideo()) |
| 226 return false; | 231 return false; |
| 227 // Don't hide if the controls are hovered or the mouse is over the video are
a. | 232 // Don't hide if the mouse is over the controls. |
| 233 const bool ignoreControlsHover = behaviorFlags & IgnoreControlsHover; |
| 234 if (!ignoreControlsHover && m_panel->hovered()) |
| 235 return false; |
| 236 // Don't hide if the mouse is over the video area. |
| 228 const bool ignoreVideoHover = behaviorFlags & IgnoreVideoHover; | 237 const bool ignoreVideoHover = behaviorFlags & IgnoreVideoHover; |
| 229 if (m_panel->hovered() || (!ignoreVideoHover && m_isMouseOverControls)) | 238 if (!ignoreVideoHover && m_isMouseOverControls) |
| 230 return false; | 239 return false; |
| 231 // Don't hide if focus is on the HTMLMediaElement or within the | 240 // Don't hide if focus is on the HTMLMediaElement or within the |
| 232 // controls/shadow tree. (Perform the checks separately to avoid going | 241 // controls/shadow tree. (Perform the checks separately to avoid going |
| 233 // through all the potential ancestor hosts for the focused element.) | 242 // through all the potential ancestor hosts for the focused element.) |
| 234 const bool ignoreFocus = behaviorFlags & IgnoreFocus; | 243 const bool ignoreFocus = behaviorFlags & IgnoreFocus; |
| 235 if (!ignoreFocus && (mediaElement().focused() || contains(document().focused
Element()))) | 244 if (!ignoreFocus && (mediaElement().focused() || contains(document().focused
Element()))) |
| 236 return false; | 245 return false; |
| 237 return true; | 246 return true; |
| 238 } | 247 } |
| 239 | 248 |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 startHideMediaControlsTimer(); | 396 startHideMediaControlsTimer(); |
| 388 return; | 397 return; |
| 389 } | 398 } |
| 390 } | 399 } |
| 391 | 400 |
| 392 void MediaControls::hideMediaControlsTimerFired(Timer<MediaControls>*) | 401 void MediaControls::hideMediaControlsTimerFired(Timer<MediaControls>*) |
| 393 { | 402 { |
| 394 if (mediaElement().togglePlayStateWillPlay()) | 403 if (mediaElement().togglePlayStateWillPlay()) |
| 395 return; | 404 return; |
| 396 | 405 |
| 397 if (!shouldHideMediaControls(IgnoreFocus | IgnoreVideoHover)) | 406 unsigned behaviorFlags = IgnoreFocus | IgnoreVideoHover; |
| 407 // This check could be improved, see http://www.crbug.com/401177. |
| 408 if (!deviceSupportsMouse(document())) { |
| 409 behaviorFlags |= IgnoreControlsHover; |
| 410 } |
| 411 if (!shouldHideMediaControls(behaviorFlags)) |
| 398 return; | 412 return; |
| 399 | 413 |
| 400 makeTransparent(); | 414 makeTransparent(); |
| 401 } | 415 } |
| 402 | 416 |
| 403 void MediaControls::startHideMediaControlsTimer() | 417 void MediaControls::startHideMediaControlsTimer() |
| 404 { | 418 { |
| 405 m_hideMediaControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingMe
diaControls, FROM_HERE); | 419 m_hideMediaControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingMe
diaControls, FROM_HERE); |
| 406 } | 420 } |
| 407 | 421 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 visitor->trace(m_muteButton); | 490 visitor->trace(m_muteButton); |
| 477 visitor->trace(m_volumeSlider); | 491 visitor->trace(m_volumeSlider); |
| 478 visitor->trace(m_toggleClosedCaptionsButton); | 492 visitor->trace(m_toggleClosedCaptionsButton); |
| 479 visitor->trace(m_fullScreenButton); | 493 visitor->trace(m_fullScreenButton); |
| 480 visitor->trace(m_durationDisplay); | 494 visitor->trace(m_durationDisplay); |
| 481 visitor->trace(m_enclosure); | 495 visitor->trace(m_enclosure); |
| 482 HTMLDivElement::trace(visitor); | 496 HTMLDivElement::trace(visitor); |
| 483 } | 497 } |
| 484 | 498 |
| 485 } | 499 } |
| OLD | NEW |