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

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

Issue 2251073003: Pretend the video has no audio track if it is playing as part of autoplay muted. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comments Created 4 years, 1 month 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 /* 1 /*
2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights 2 * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights
3 * reserved. 3 * 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 2335 matching lines...) Expand 10 before | Expand all | Expand 10 after
2346 return m_muted; 2346 return m_muted;
2347 } 2347 }
2348 2348
2349 void HTMLMediaElement::setMuted(bool muted) { 2349 void HTMLMediaElement::setMuted(bool muted) {
2350 BLINK_MEDIA_LOG << "setMuted(" << (void*)this << ", " << boolString(muted) 2350 BLINK_MEDIA_LOG << "setMuted(" << (void*)this << ", " << boolString(muted)
2351 << ")"; 2351 << ")";
2352 2352
2353 if (m_muted == muted) 2353 if (m_muted == muted)
2354 return; 2354 return;
2355 2355
2356 bool wasAutoplayingMuted = 2356 bool wasAutoplayingMuted = isAutoplayingMuted();
2357 !paused() && m_muted && isLockedPendingUserGesture();
2358 bool wasPendingAutoplayMuted = m_autoplayVisibilityObserver && paused() && 2357 bool wasPendingAutoplayMuted = m_autoplayVisibilityObserver && paused() &&
2359 m_muted && isLockedPendingUserGesture(); 2358 m_muted && isLockedPendingUserGesture();
2360 2359
2361 if (UserGestureIndicator::processingUserGesture()) 2360 if (UserGestureIndicator::processingUserGesture())
2362 unlockUserGesture(); 2361 unlockUserGesture();
2363 2362
2364 m_muted = muted; 2363 m_muted = muted;
2365 m_autoplayHelper->mutedChanged(); 2364 m_autoplayHelper->mutedChanged();
2366 2365
2367 updateVolume();
2368
2369 scheduleEvent(EventTypeNames::volumechange); 2366 scheduleEvent(EventTypeNames::volumechange);
2370 2367
2371 // If an element autoplayed while muted, it needs to be unlocked to unmute, 2368 // If an element autoplayed while muted, it needs to be unlocked to unmute,
2372 // otherwise, it will be paused. 2369 // otherwise, it will be paused.
2373 if (wasAutoplayingMuted) { 2370 if (wasAutoplayingMuted) {
2374 if (isGestureNeededForPlayback()) { 2371 if (isGestureNeededForPlayback()) {
2375 pause(); 2372 pause();
2376 m_autoplayUmaHelper->recordAutoplayUnmuteStatus( 2373 m_autoplayUmaHelper->recordAutoplayUnmuteStatus(
2377 AutoplayUnmuteActionStatus::Failure); 2374 AutoplayUnmuteActionStatus::Failure);
2378 } else { 2375 } else {
2379 m_autoplayUmaHelper->recordAutoplayUnmuteStatus( 2376 m_autoplayUmaHelper->recordAutoplayUnmuteStatus(
2380 AutoplayUnmuteActionStatus::Success); 2377 AutoplayUnmuteActionStatus::Success);
2381 } 2378 }
2382 } 2379 }
2383 2380
2381 // This is called after the volumechange event to make sure isAutoplayingMuted
2382 // returns the right value when webMediaPlayer receives the volume update.
2383 updateVolume();
2384
2384 // If an element was a candidate for autoplay muted but not visible, it will 2385 // If an element was a candidate for autoplay muted but not visible, it will
2385 // have a visibility observer ready to start its playback. 2386 // have a visibility observer ready to start its playback.
2386 if (wasPendingAutoplayMuted) { 2387 if (wasPendingAutoplayMuted) {
2387 m_autoplayVisibilityObserver->stop(); 2388 m_autoplayVisibilityObserver->stop();
2388 m_autoplayVisibilityObserver = nullptr; 2389 m_autoplayVisibilityObserver = nullptr;
2389 } 2390 }
2390 } 2391 }
2391 2392
2392 void HTMLMediaElement::updateVolume() { 2393 void HTMLMediaElement::updateVolume() {
2393 if (webMediaPlayer()) 2394 if (webMediaPlayer())
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after
3102 mediaControls()->stoppedCasting(); 3103 mediaControls()->stoppedCasting();
3103 if (remotePlaybackClient()) 3104 if (remotePlaybackClient())
3104 remotePlaybackClient()->stateChanged(WebRemotePlaybackState::Disconnected); 3105 remotePlaybackClient()->stateChanged(WebRemotePlaybackState::Disconnected);
3105 } 3106 }
3106 3107
3107 void HTMLMediaElement::cancelledRemotePlaybackRequest() { 3108 void HTMLMediaElement::cancelledRemotePlaybackRequest() {
3108 if (remotePlaybackClient()) 3109 if (remotePlaybackClient())
3109 remotePlaybackClient()->promptCancelled(); 3110 remotePlaybackClient()->promptCancelled();
3110 } 3111 }
3111 3112
3113 bool HTMLMediaElement::isAutoplayingMuted() {
3114 if (!isHTMLVideoElement() ||
3115 !RuntimeEnabledFeatures::autoplayMutedVideosEnabled()) {
3116 return false;
3117 }
3118
3119 return !paused() && muted() && isLockedPendingUserGesture();
3120 }
3121
3112 void HTMLMediaElement::requestReload(const WebURL& newUrl) { 3122 void HTMLMediaElement::requestReload(const WebURL& newUrl) {
3113 DCHECK(webMediaPlayer()); 3123 DCHECK(webMediaPlayer());
3114 DCHECK(!m_srcObject); 3124 DCHECK(!m_srcObject);
3115 DCHECK(newUrl.isValid()); 3125 DCHECK(newUrl.isValid());
3116 DCHECK(isSafeToLoadURL(newUrl, Complain)); 3126 DCHECK(isSafeToLoadURL(newUrl, Complain));
3117 resetMediaPlayerAndMediaSource(); 3127 resetMediaPlayerAndMediaSource();
3118 startPlayerLoad(newUrl); 3128 startPlayerLoad(newUrl);
3119 } 3129 }
3120 3130
3121 // MediaPlayerPresentation methods 3131 // MediaPlayerPresentation methods
(...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after
4092 4102
4093 IntRect HTMLMediaElement::AutoplayHelperClientImpl::absoluteBoundingBoxRect() 4103 IntRect HTMLMediaElement::AutoplayHelperClientImpl::absoluteBoundingBoxRect()
4094 const { 4104 const {
4095 IntRect result; 4105 IntRect result;
4096 if (LayoutObject* object = m_element->layoutObject()) 4106 if (LayoutObject* object = m_element->layoutObject())
4097 result = object->absoluteBoundingBoxRect(); 4107 result = object->absoluteBoundingBoxRect();
4098 return result; 4108 return result;
4099 } 4109 }
4100 4110
4101 } // namespace blink 4111 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLMediaElement.h ('k') | third_party/WebKit/public/platform/WebMediaPlayerClient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698