Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 48 #include "core/html/MediaController.h" | 48 #include "core/html/MediaController.h" |
| 49 #include "core/html/MediaError.h" | 49 #include "core/html/MediaError.h" |
| 50 #include "core/html/MediaFragmentURIParser.h" | 50 #include "core/html/MediaFragmentURIParser.h" |
| 51 #include "core/html/TimeRanges.h" | 51 #include "core/html/TimeRanges.h" |
| 52 #include "core/html/shadow/MediaControls.h" | 52 #include "core/html/shadow/MediaControls.h" |
| 53 #include "core/html/track/AudioTrack.h" | 53 #include "core/html/track/AudioTrack.h" |
| 54 #include "core/html/track/AudioTrackList.h" | 54 #include "core/html/track/AudioTrackList.h" |
| 55 #include "core/html/track/AutomaticTrackSelection.h" | 55 #include "core/html/track/AutomaticTrackSelection.h" |
| 56 #include "core/html/track/CueTimeline.h" | 56 #include "core/html/track/CueTimeline.h" |
| 57 #include "core/html/track/InbandTextTrack.h" | 57 #include "core/html/track/InbandTextTrack.h" |
| 58 #include "core/html/track/TextTrackContainer.h" | |
| 58 #include "core/html/track/TextTrackList.h" | 59 #include "core/html/track/TextTrackList.h" |
| 59 #include "core/html/track/VideoTrack.h" | 60 #include "core/html/track/VideoTrack.h" |
| 60 #include "core/html/track/VideoTrackList.h" | 61 #include "core/html/track/VideoTrackList.h" |
| 61 #include "core/layout/LayoutVideo.h" | 62 #include "core/layout/LayoutVideo.h" |
| 62 #include "core/layout/LayoutView.h" | 63 #include "core/layout/LayoutView.h" |
| 63 #include "core/layout/compositing/LayerCompositor.h" | 64 #include "core/layout/compositing/LayerCompositor.h" |
| 64 #include "core/loader/FrameLoader.h" | 65 #include "core/loader/FrameLoader.h" |
| 65 #include "platform/ContentType.h" | 66 #include "platform/ContentType.h" |
| 66 #include "platform/Logging.h" | 67 #include "platform/Logging.h" |
| 67 #include "platform/MIMETypeFromURL.h" | 68 #include "platform/MIMETypeFromURL.h" |
| (...skipping 3109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3177 } | 3178 } |
| 3178 } | 3179 } |
| 3179 return false; | 3180 return false; |
| 3180 } | 3181 } |
| 3181 | 3182 |
| 3182 bool HTMLMediaElement::closedCaptionsVisible() const | 3183 bool HTMLMediaElement::closedCaptionsVisible() const |
| 3183 { | 3184 { |
| 3184 return m_closedCaptionsVisible; | 3185 return m_closedCaptionsVisible; |
| 3185 } | 3186 } |
| 3186 | 3187 |
| 3188 static void assertShadowRootChildren(ShadowRoot& shadowRoot) | |
|
philipj_slow
2015/02/26 09:51:52
I don't know if this seems pedantic. I failed to g
| |
| 3189 { | |
| 3190 #if ENABLE(ASSERT) | |
| 3191 // There can be up to two children, either or both of the text | |
| 3192 // track container and media controls. If both are present, the | |
| 3193 // text track container must be the first child. | |
| 3194 unsigned numberOfChildren = shadowRoot.countChildren(); | |
| 3195 ASSERT(numberOfChildren <= 2); | |
| 3196 Node* firstChild = shadowRoot.firstChild(); | |
| 3197 Node* lastChild = shadowRoot.lastChild(); | |
| 3198 if (numberOfChildren == 1) { | |
| 3199 ASSERT(firstChild->isTextTrackContainer() || firstChild->isMediaControls ()); | |
| 3200 } else if (numberOfChildren == 2) { | |
| 3201 ASSERT(firstChild->isTextTrackContainer()); | |
| 3202 ASSERT(lastChild->isMediaControls()); | |
| 3203 } | |
| 3204 #endif | |
| 3205 } | |
| 3206 | |
| 3207 TextTrackContainer& HTMLMediaElement::ensureTextTrackContainer() | |
| 3208 { | |
| 3209 ShadowRoot& shadowRoot = ensureClosedShadowRoot(); | |
| 3210 assertShadowRootChildren(shadowRoot); | |
| 3211 | |
| 3212 Node* firstChild = shadowRoot.firstChild(); | |
| 3213 if (firstChild && firstChild->isTextTrackContainer()) | |
| 3214 return toTextTrackContainer(*firstChild); | |
| 3215 | |
| 3216 RefPtrWillBeRawPtr<TextTrackContainer> textTrackContainer = TextTrackContain er::create(document()); | |
| 3217 | |
| 3218 // The text track container should be inserted before the media controls, | |
| 3219 // so that they are rendered behind them. | |
| 3220 shadowRoot.insertBefore(textTrackContainer, firstChild); | |
| 3221 | |
| 3222 assertShadowRootChildren(shadowRoot); | |
| 3223 | |
| 3224 return *textTrackContainer; | |
| 3225 } | |
| 3226 | |
| 3187 void HTMLMediaElement::updateTextTrackDisplay() | 3227 void HTMLMediaElement::updateTextTrackDisplay() |
| 3188 { | 3228 { |
| 3189 WTF_LOG(Media, "HTMLMediaElement::updateTextTrackDisplay(%p)", this); | 3229 WTF_LOG(Media, "HTMLMediaElement::updateTextTrackDisplay(%p)", this); |
| 3190 | 3230 |
| 3191 ensureMediaControls(); | 3231 // FIXME: this probably doesn't hold |
|
philipj_slow
2015/02/26 09:51:52
Um, right. fs, I think we can get here for audio e
fs
2015/02/26 12:30:51
My (loose) plan so far wrt this has been to not ev
philipj_slow
2015/02/27 07:13:51
Not creating the container for audio sounds like a
fs
2015/02/27 09:50:31
Acknowledged.
| |
| 3192 mediaControls()->updateTextTrackDisplay(); | 3232 ASSERT(isHTMLVideoElement()); |
| 3233 ensureTextTrackContainer().updateDisplay(*this); | |
| 3193 } | 3234 } |
| 3194 | 3235 |
| 3195 void HTMLMediaElement::setClosedCaptionsVisible(bool closedCaptionVisible) | 3236 void HTMLMediaElement::setClosedCaptionsVisible(bool closedCaptionVisible) |
| 3196 { | 3237 { |
| 3197 WTF_LOG(Media, "HTMLMediaElement::setClosedCaptionsVisible(%p, %s)", this, b oolString(closedCaptionVisible)); | 3238 WTF_LOG(Media, "HTMLMediaElement::setClosedCaptionsVisible(%p, %s)", this, b oolString(closedCaptionVisible)); |
| 3198 | 3239 |
| 3199 if (!m_player || !hasClosedCaptions()) | 3240 if (!m_player || !hasClosedCaptions()) |
| 3200 return; | 3241 return; |
| 3201 | 3242 |
| 3202 m_closedCaptionsVisible = closedCaptionVisible; | 3243 m_closedCaptionsVisible = closedCaptionVisible; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3255 | 3296 |
| 3256 WTF_LOG(Media, "HTMLMediaElement::setShouldDelayLoadEvent(%p, %s)", this, bo olString(shouldDelay)); | 3297 WTF_LOG(Media, "HTMLMediaElement::setShouldDelayLoadEvent(%p, %s)", this, bo olString(shouldDelay)); |
| 3257 | 3298 |
| 3258 m_shouldDelayLoadEvent = shouldDelay; | 3299 m_shouldDelayLoadEvent = shouldDelay; |
| 3259 if (shouldDelay) | 3300 if (shouldDelay) |
| 3260 document().incrementLoadEventDelayCount(); | 3301 document().incrementLoadEventDelayCount(); |
| 3261 else | 3302 else |
| 3262 document().decrementLoadEventDelayCount(); | 3303 document().decrementLoadEventDelayCount(); |
| 3263 } | 3304 } |
| 3264 | 3305 |
| 3265 | |
| 3266 MediaControls* HTMLMediaElement::mediaControls() const | 3306 MediaControls* HTMLMediaElement::mediaControls() const |
| 3267 { | 3307 { |
| 3268 if (ShadowRoot* shadowRoot = closedShadowRoot()) { | 3308 if (ShadowRoot* shadowRoot = closedShadowRoot()) { |
| 3269 // Note that |shadowRoot->firstChild()| may be null. | 3309 Node* lastChild = shadowRoot->lastChild(); |
| 3270 return toMediaControls(shadowRoot->firstChild()); | 3310 if (lastChild && lastChild->isMediaControls()) |
| 3311 return toMediaControls(lastChild); | |
| 3271 } | 3312 } |
| 3272 | 3313 |
| 3273 return nullptr; | 3314 return nullptr; |
| 3274 } | 3315 } |
| 3275 | 3316 |
| 3276 void HTMLMediaElement::ensureMediaControls() | 3317 void HTMLMediaElement::ensureMediaControls() |
| 3277 { | 3318 { |
| 3278 if (mediaControls()) | 3319 if (mediaControls()) |
| 3279 return; | 3320 return; |
| 3280 | 3321 |
| 3281 RefPtrWillBeRawPtr<MediaControls> mediaControls = MediaControls::create(*thi s); | 3322 RefPtrWillBeRawPtr<MediaControls> mediaControls = MediaControls::create(*thi s); |
| 3282 | 3323 |
| 3283 mediaControls->reset(); | 3324 mediaControls->reset(); |
| 3284 if (isFullscreen()) | 3325 if (isFullscreen()) |
| 3285 mediaControls->enteredFullscreen(); | 3326 mediaControls->enteredFullscreen(); |
| 3286 | 3327 |
| 3287 ensureClosedShadowRoot().appendChild(mediaControls); | 3328 ShadowRoot& shadowRoot = ensureClosedShadowRoot(); |
| 3329 assertShadowRootChildren(shadowRoot); | |
| 3330 | |
| 3331 // The media controls should be inserted after the text track container, | |
| 3332 // so that they are rendered in front of captions and subtitles. | |
| 3333 shadowRoot.appendChild(mediaControls); | |
| 3334 | |
| 3335 assertShadowRootChildren(shadowRoot); | |
| 3288 | 3336 |
| 3289 if (!shouldShowControls() || !inDocument()) | 3337 if (!shouldShowControls() || !inDocument()) |
| 3290 mediaControls->hide(); | 3338 mediaControls->hide(); |
| 3291 } | 3339 } |
| 3292 | 3340 |
| 3293 void HTMLMediaElement::configureMediaControls() | 3341 void HTMLMediaElement::configureMediaControls() |
| 3294 { | 3342 { |
| 3295 if (!inDocument()) { | 3343 if (!inDocument()) { |
| 3296 if (mediaControls()) | 3344 if (mediaControls()) |
| 3297 mediaControls()->hide(); | 3345 mediaControls()->hide(); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3333 && m_haveVisibleTextTrack == haveVisibleTextTrack) { | 3381 && m_haveVisibleTextTrack == haveVisibleTextTrack) { |
| 3334 cueTimeline().updateActiveCues(currentTime()); | 3382 cueTimeline().updateActiveCues(currentTime()); |
| 3335 return; | 3383 return; |
| 3336 } | 3384 } |
| 3337 m_haveVisibleTextTrack = haveVisibleTextTrack; | 3385 m_haveVisibleTextTrack = haveVisibleTextTrack; |
| 3338 m_closedCaptionsVisible = m_haveVisibleTextTrack; | 3386 m_closedCaptionsVisible = m_haveVisibleTextTrack; |
| 3339 | 3387 |
| 3340 if (!m_haveVisibleTextTrack && !mediaControls()) | 3388 if (!m_haveVisibleTextTrack && !mediaControls()) |
| 3341 return; | 3389 return; |
| 3342 | 3390 |
| 3343 ensureMediaControls(); | 3391 if (mediaControls()) |
| 3344 mediaControls()->changedClosedCaptionsVisibility(); | 3392 mediaControls()->changedClosedCaptionsVisibility(); |
| 3345 | 3393 |
| 3346 cueTimeline().updateActiveCues(currentTime()); | 3394 cueTimeline().updateActiveCues(currentTime()); |
| 3347 updateTextTrackDisplay(); | 3395 updateTextTrackDisplay(); |
| 3348 } | 3396 } |
| 3349 | 3397 |
| 3350 void* HTMLMediaElement::preDispatchEventHandler(Event* event) | 3398 void* HTMLMediaElement::preDispatchEventHandler(Event* event) |
| 3351 { | 3399 { |
| 3352 if (event && event->type() == EventTypeNames::webkitfullscreenchange) | 3400 if (event && event->type() == EventTypeNames::webkitfullscreenchange) |
| 3353 configureMediaControls(); | 3401 configureMediaControls(); |
| 3354 | 3402 |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3596 | 3644 |
| 3597 #if ENABLE(WEB_AUDIO) | 3645 #if ENABLE(WEB_AUDIO) |
| 3598 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) | 3646 void HTMLMediaElement::clearWeakMembers(Visitor* visitor) |
| 3599 { | 3647 { |
| 3600 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) | 3648 if (!visitor->isAlive(m_audioSourceNode) && audioSourceProvider()) |
| 3601 audioSourceProvider()->setClient(nullptr); | 3649 audioSourceProvider()->setClient(nullptr); |
| 3602 } | 3650 } |
| 3603 #endif | 3651 #endif |
| 3604 | 3652 |
| 3605 } | 3653 } |
| OLD | NEW |