diff --git a/patches/common/chromium/.patches b/patches/common/chromium/.patches index 1ce224b5f92b1..c3a05e006a371 100644 --- a/patches/common/chromium/.patches +++ b/patches/common/chromium/.patches @@ -110,3 +110,4 @@ fire_caret_location_change_when_focus_moves_from_ui_to_content.patch do_not_show_virtual_keyboard_for_all_mouse_inputs.patch setup_the_observer_before_calling_displayvirtualkeyboard.patch workaround_apparent_data_corruption_in_blockfile_on_os_x_10_14_by.patch +mediacontrols_disconnect_observers_when_controls_are_hidden.patch diff --git a/patches/common/chromium/browser_compositor_mac.patch b/patches/common/chromium/browser_compositor_mac.patch index 9aad97014a7f1..cb6210eb21cbf 100644 --- a/patches/common/chromium/browser_compositor_mac.patch +++ b/patches/common/chromium/browser_compositor_mac.patch @@ -29,7 +29,7 @@ diff --git a/content/browser/renderer_host/browser_compositor_view_mac.mm b/cont index 92afcc77910610e53378f55adc003cc1bdf3109a..42bd6fd7c169de36c775471c68b456f1386ff666 100644 --- a/content/browser/renderer_host/browser_compositor_view_mac.mm +++ b/content/browser/renderer_host/browser_compositor_view_mac.mm -@@ -81,6 +81,12 @@ BrowserCompositorMac::~BrowserCompositorMac() { +@@ -81,6 +81,12 @@ DCHECK_EQ(1u, num_erased); } diff --git a/patches/common/chromium/crashpad_http_status.patch b/patches/common/chromium/crashpad_http_status.patch index 1acbc21e8fc82..4f7a9ff88725c 100644 --- a/patches/common/chromium/crashpad_http_status.patch +++ b/patches/common/chromium/crashpad_http_status.patch @@ -22,7 +22,7 @@ diff --git a/third_party/crashpad/crashpad/util/net/http_transport_mac.mm b/thir index 8d5f78cc6efc8b8e349958f51c78921a8c163c4e..a433bb357da5865144ade7d3663b1c9b36199f8e 100644 --- a/third_party/crashpad/crashpad/util/net/http_transport_mac.mm +++ b/third_party/crashpad/crashpad/util/net/http_transport_mac.mm -@@ -293,7 +293,7 @@ bool HTTPTransportMac::ExecuteSynchronously(std::string* response_body) { +@@ -293,7 +293,7 @@ static void Unschedule(CFReadStreamRef stream, return false; } NSInteger http_status = [http_response statusCode]; diff --git a/patches/common/chromium/mac_fix_form_control_rendering_on_10_14_mojave.patch b/patches/common/chromium/mac_fix_form_control_rendering_on_10_14_mojave.patch index 151a530df4e06..5bae6c27ef777 100644 --- a/patches/common/chromium/mac_fix_form_control_rendering_on_10_14_mojave.patch +++ b/patches/common/chromium/mac_fix_form_control_rendering_on_10_14_mojave.patch @@ -56,7 +56,7 @@ diff --git a/services/service_manager/sandbox/mac/sandbox_mac.mm b/services/serv index d69fcc0d4c5c2471163280c03a9fd9366e05031d..cdd7b7f6723162d6875c4d11379837708bdde79d 100644 --- a/services/service_manager/sandbox/mac/sandbox_mac.mm +++ b/services/service_manager/sandbox/mac/sandbox_mac.mm -@@ -81,6 +81,21 @@ static_assert(arraysize(kDefaultSandboxTypeToResourceIDMapping) == +@@ -81,6 +81,21 @@ size_t(SANDBOX_TYPE_AFTER_LAST_TYPE), "sandbox type to resource id mapping incorrect"); @@ -78,7 +78,7 @@ index d69fcc0d4c5c2471163280c03a9fd9366e05031d..cdd7b7f6723162d6875c4d1137983770 } // namespace // Static variable declarations. -@@ -242,6 +257,9 @@ bool SandboxMac::Enable(SandboxType sandbox_type) { +@@ -242,6 +257,9 @@ if (!compiler.InsertBooleanParam(kSandboxMacOS1013, macos_1013)) return false; diff --git a/patches/common/chromium/mas-cfisobjc.patch b/patches/common/chromium/mas-cfisobjc.patch index c1dc41702a15b..180423f3b8ede 100644 --- a/patches/common/chromium/mas-cfisobjc.patch +++ b/patches/common/chromium/mas-cfisobjc.patch @@ -9,7 +9,7 @@ diff --git a/base/mac/foundation_util.mm b/base/mac/foundation_util.mm index 15fc15ba307e18f438852f00f41b2f5ecf7ff85f..7ca4e0ec5ca87f34e0baa22ba0b704e25fe7ca21 100644 --- a/base/mac/foundation_util.mm +++ b/base/mac/foundation_util.mm -@@ -26,7 +26,6 @@ CFTypeID SecKeyGetTypeID(); +@@ -26,7 +26,6 @@ #if !defined(OS_IOS) CFTypeID SecACLGetTypeID(); CFTypeID SecTrustedApplicationGetTypeID(); @@ -17,7 +17,7 @@ index 15fc15ba307e18f438852f00f41b2f5ecf7ff85f..7ca4e0ec5ca87f34e0baa22ba0b704e2 #endif } // extern "C" -@@ -325,8 +324,7 @@ NSFont* CFToNSCast(CTFontRef cf_val) { +@@ -325,8 +324,7 @@ void SetBaseBundleID(const char* new_base_bundle_id) { const_cast(reinterpret_cast(cf_val)); DCHECK(!cf_val || CTFontGetTypeID() == CFGetTypeID(cf_val) || @@ -27,7 +27,7 @@ index 15fc15ba307e18f438852f00f41b2f5ecf7ff85f..7ca4e0ec5ca87f34e0baa22ba0b704e2 return ns_val; } -@@ -394,9 +392,6 @@ CFCast(const CFTypeRef& cf_val) { +@@ -394,9 +392,6 @@ CTFontRef NSToCFCast(NSFont* ns_val) { return (CTFontRef)(cf_val); } diff --git a/patches/common/chromium/mas_blink_no_private_api.patch b/patches/common/chromium/mas_blink_no_private_api.patch index d687746c3eceb..3870d2481d5d6 100644 --- a/patches/common/chromium/mas_blink_no_private_api.patch +++ b/patches/common/chromium/mas_blink_no_private_api.patch @@ -18,7 +18,7 @@ index 94afefcee81b87c05bf9b1199d90d3d4b5ea84a6..2ec7f04c71824b47de1ddbf1f0e8625d extern "C" { // Kill ring calls. Would be better to use NSKillRing.h, but that's not -@@ -39,38 +40,53 @@ NSString* _NSYankFromKillRing(); +@@ -39,38 +40,53 @@ void _NSNewKillRingSequence(); void _NSSetKillRingToYankedState(); } @@ -92,7 +92,7 @@ index 7a1260db0a139f9f3f8a823af2c220f36162812a..bf9cf7046e2fc9cdfee5b92f2a348185 namespace blink { -@@ -73,10 +75,12 @@ bool ThemePainterMac::PaintTextField(const Node* node, +@@ -73,10 +75,12 @@ void _NSDrawCarbonThemeListBox(NSRect frame, // behavior change while remaining a fragile solution. // https://bugs.chromium.org/p/chromium/issues/detail?id=658085#c3 if (!use_ns_text_field_cell) { @@ -105,7 +105,7 @@ index 7a1260db0a139f9f3f8a823af2c220f36162812a..bf9cf7046e2fc9cdfee5b92f2a348185 return false; } -@@ -162,10 +166,12 @@ bool ThemePainterMac::PaintTextArea(const Node* node, +@@ -162,10 +166,12 @@ void _NSDrawCarbonThemeListBox(NSRect frame, const PaintInfo& paint_info, const IntRect& r) { LocalCurrentGraphicsContext local_context(paint_info.context, r); diff --git a/patches/common/chromium/mas_no_private_api.patch b/patches/common/chromium/mas_no_private_api.patch index e63ef305d557a..3df25dff8d7b0 100644 --- a/patches/common/chromium/mas_no_private_api.patch +++ b/patches/common/chromium/mas_no_private_api.patch @@ -41,7 +41,7 @@ diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/cont index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518325ef70a 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm -@@ -135,6 +135,7 @@ NSDictionary* attributeToMethodNameMap = nil; +@@ -135,6 +135,7 @@ // VoiceOver uses -1 to mean "no limit" for AXResultsLimit. const int kAXResultsLimitNoLimit = -1; @@ -49,7 +49,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 extern "C" { // The following are private accessibility APIs required for cursor navigation -@@ -341,6 +342,7 @@ NSAttributedString* GetAttributedTextForTextMarkerRange( +@@ -341,6 +342,7 @@ void AddMisspelledTextAttributes( AddMisspelledTextAttributes(text_only_objects, attributed_text); return [attributed_text attributedSubstringFromRange:range]; } @@ -57,7 +57,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 // Returns an autoreleased copy of the AXNodeData's attribute. NSString* NSStringForStringAttribute( -@@ -595,7 +597,9 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -595,7 +597,9 @@ + (void)initialize { {NSAccessibilityDOMIdentifierAttribute, @"domIdentifier"}, {NSAccessibilityEditableAncestorAttribute, @"editableAncestor"}, {NSAccessibilityEnabledAttribute, @"enabled"}, @@ -67,7 +67,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 {NSAccessibilityExpandedAttribute, @"expanded"}, {NSAccessibilityFocusableAncestorAttribute, @"focusableAncestor"}, {NSAccessibilityFocusedAttribute, @"focused"}, -@@ -630,13 +634,17 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -630,13 +634,17 @@ + (void)initialize { {NSAccessibilityRowsAttribute, @"rows"}, // TODO(aboxhall): expose // NSAccessibilityServesAsTitleForUIElementsAttribute @@ -85,7 +85,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 {NSAccessibilitySizeAttribute, @"size"}, {NSAccessibilitySortDirectionAttribute, @"sortDirection"}, {NSAccessibilitySubroleAttribute, @"subrole"}, -@@ -1114,6 +1122,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -1114,6 +1122,7 @@ - (NSNumber*)enabled { ax::mojom::Restriction::kDisabled]; } @@ -93,7 +93,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 // Returns a text marker that points to the last character in the document that // can be selected with VoiceOver. - (id)endTextMarker { -@@ -1124,6 +1133,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -1124,6 +1133,7 @@ - (id)endTextMarker { BrowserAccessibilityPositionInstance position = root->CreatePositionAt(0); return CreateTextMarker(position->CreatePositionAtEndOfAnchor()); } @@ -101,7 +101,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 - (NSNumber*)expanded { if (![self instanceActive]) -@@ -2029,6 +2039,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2029,6 +2039,7 @@ - (NSValue*)selectedTextRange { return [NSValue valueWithRange:NSMakeRange(selStart, selLength)]; } @@ -109,7 +109,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 - (id)selectedTextMarkerRange { if (![self instanceActive]) return nil; -@@ -2061,6 +2072,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2061,6 +2072,7 @@ - (id)selectedTextMarkerRange { anchorAffinity, *focusObject, focusOffset, focusAffinity)); } @@ -117,7 +117,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 - (NSValue*)size { if (![self instanceActive]) -@@ -2093,6 +2105,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2093,6 +2105,7 @@ - (NSString*)sortDirection { return nil; } @@ -125,7 +125,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 // Returns a text marker that points to the first character in the document that // can be selected with VoiceOver. - (id)startTextMarker { -@@ -2103,6 +2116,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2103,6 +2116,7 @@ - (id)startTextMarker { BrowserAccessibilityPositionInstance position = root->CreatePositionAt(0); return CreateTextMarker(position->CreatePositionAtStartOfAnchor()); } @@ -133,7 +133,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 // Returns a subrole based upon the role. - (NSString*) subrole { -@@ -2405,12 +2419,14 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2405,12 +2419,14 @@ - (NSAttributedString*)attributedValueForRange:(NSRange)range { NSMutableAttributedString* attributedValue = [[[NSMutableAttributedString alloc] initWithString:value] autorelease]; @@ -148,7 +148,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 return [attributedValue attributedSubstringFromRange:range]; } -@@ -2527,6 +2543,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2527,6 +2543,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute return nil; } @@ -156,7 +156,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 if ([attribute isEqualToString:@"AXUIElementForTextMarker"]) { BrowserAccessibilityPositionInstance position = CreatePositionFromTextMarker(parameter); -@@ -2704,6 +2721,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2704,6 +2721,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute NSString* text = GetTextForTextMarkerRange(parameter); return [NSNumber numberWithInt:[text length]]; } @@ -164,7 +164,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 if ([attribute isEqualToString: NSAccessibilityBoundsForRangeParameterizedAttribute]) { -@@ -2741,6 +2759,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2741,6 +2759,7 @@ - (id)accessibilityAttributeValue:(NSString*)attribute return nil; } @@ -172,7 +172,7 @@ index 07e9862b76a920438a779f22d67d3a45ab39abf7..efa52aa9de2f819f28109978c8cef518 if ([attribute isEqualToString: NSAccessibilityLineTextMarkerRangeForTextMarkerParameterizedAttribute]) { BrowserAccessibilityPositionInstance position = -@@ -2820,6 +2839,7 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired"; +@@ -2820,6 +2839,7 @@ AXPlatformRange range(position->CreatePreviousLineStartPosition( return @(child->GetIndexInParent()); } @@ -184,7 +184,7 @@ diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm index 8e32a08226079c6d7515b8e784babacb3226ecd6..93bb7273684fa529bdc6049af2ed379f8b059397 100644 --- a/content/browser/accessibility/browser_accessibility_manager_mac.mm +++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm -@@ -437,6 +437,7 @@ NSDictionary* BrowserAccessibilityManagerMac:: +@@ -437,6 +437,7 @@ [user_info setObject:native_focus_object forKey:NSAccessibilityTextChangeElement]; @@ -192,7 +192,7 @@ index 8e32a08226079c6d7515b8e784babacb3226ecd6..93bb7273684fa529bdc6049af2ed379f id selected_text = [native_focus_object selectedTextMarkerRange]; if (selected_text) { NSString* const NSAccessibilitySelectedTextMarkerRangeAttribute = -@@ -444,6 +445,7 @@ NSDictionary* BrowserAccessibilityManagerMac:: +@@ -444,6 +445,7 @@ [user_info setObject:selected_text forKey:NSAccessibilitySelectedTextMarkerRangeAttribute]; } @@ -220,7 +220,7 @@ index 1e2cc38d3868ceccf8e45f5f82f57bcaa478f982..daa934c345e2686fd2174b7721d0f69a namespace content { -@@ -38,6 +40,7 @@ namespace { +@@ -38,6 +40,7 @@ void _LSSetApplicationLaunchServicesServerConnectionStatus( // This disconnects from the window server, and then indicates that Chrome // should continue execution without access to launchservicesd. void DisconnectWindowServer() { @@ -248,7 +248,7 @@ index 8b2092ec78f9f6bc1bd4c8af21ada74538f54d29..4f2ee8e2809790df68aedcee09462631 extern "C" { // Undocumented IOBluetooth Preference API [1]. Used by `blueutil` [2] and // `Karabiner` [3] to programmatically control the Bluetooth state. Calling the -@@ -47,6 +48,7 @@ extern "C" { +@@ -47,6 +48,7 @@ // [4] https://support.apple.com/kb/PH25091 void IOBluetoothPreferenceSetControllerPowerState(int state); } @@ -256,7 +256,7 @@ index 8b2092ec78f9f6bc1bd4c8af21ada74538f54d29..4f2ee8e2809790df68aedcee09462631 namespace { -@@ -120,8 +122,10 @@ BluetoothAdapterMac::BluetoothAdapterMac() +@@ -120,8 +122,10 @@ CBCentralManagerState GetCBManagerState(CBCentralManager* manager) { controller_state_function_( base::BindRepeating(&BluetoothAdapterMac::GetHostControllerState, base::Unretained(this))), @@ -267,7 +267,7 @@ index 8b2092ec78f9f6bc1bd4c8af21ada74538f54d29..4f2ee8e2809790df68aedcee09462631 should_update_name_(true), classic_discovery_manager_( BluetoothDiscoveryManagerMac::CreateClassic(this)), -@@ -314,8 +318,12 @@ bool BluetoothAdapterMac::IsLowEnergyAvailable() { +@@ -314,8 +318,12 @@ CBCentralManagerState GetCBManagerState(CBCentralManager* manager) { } bool BluetoothAdapterMac::SetPoweredImpl(bool powered) { diff --git a/patches/common/chromium/mediacontrols_disconnect_observers_when_controls_are_hidden.patch b/patches/common/chromium/mediacontrols_disconnect_observers_when_controls_are_hidden.patch new file mode 100644 index 0000000000000..82601324c12bb --- /dev/null +++ b/patches/common/chromium/mediacontrols_disconnect_observers_when_controls_are_hidden.patch @@ -0,0 +1,148 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Michael Lippautz +Date: Wed, 26 Jun 2019 20:21:46 +0000 +Subject: MediaControls: Disconnect observers when controls are hidden + +Disconnect ResizeObserver from media controls when the controls are +hidden. Otherwise, the obervsers are have pending activities (are +observed) which makes them roots for the object graph, ultimately +keeping elements (including e.g. HTMLVideoElement) and nodes alive. + +Bug: 969049 +Change-Id: I07a4470170f187631db307188f6cbe0052aa7d8c +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1677053 +Commit-Queue: Michael Lippautz +Reviewed-by: Tommy Steimel +Reviewed-by: Kentaro Hara +Cr-Commit-Position: refs/heads/master@{#672629} + +diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_slider_element.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_slider_element.cc +index e1f55e00cafbfbca376092e8e332ca68f14954b7..15ab3cbe33da36dffb1ee1cda4031a020362eef0 100644 +--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_slider_element.cc ++++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_slider_element.cc +@@ -91,7 +91,7 @@ MediaControlSliderElement::MediaControlSliderElement( + new MediaControlSliderElementResizeObserverDelegate(this))) { + setType(InputTypeNames::range); + setAttribute(HTMLNames::stepAttr, "any"); +- resize_observer_->observe(this); ++ OnControlsShown(); + } + + Element& MediaControlSliderElement::GetTrackElement() { +@@ -172,4 +172,12 @@ void MediaControlSliderElement::Trace(blink::Visitor* visitor) { + MediaControlInputElement::Trace(visitor); + } + ++void MediaControlSliderElement::OnControlsShown() { ++ resize_observer_->observe(this); ++} ++ ++void MediaControlSliderElement::OnControlsHidden() { ++ resize_observer_->disconnect(); ++} ++ + } // namespace blink +diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_slider_element.h b/third_party/blink/renderer/modules/media_controls/elements/media_control_slider_element.h +index 8f5a631fa87e5f6ce9c94f8f8eefcd4152df1c1f..228886cfb1f1bbb244350e9c52f247bf41d6dbfc 100644 +--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_slider_element.h ++++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_slider_element.h +@@ -33,6 +33,9 @@ class MODULES_EXPORT MediaControlSliderElement + // simplicity; deliberately ignores pinch zoom's pageScaleFactor). + int TrackWidth(); + ++ void OnControlsShown(); ++ void OnControlsHidden(); ++ + protected: + class MediaControlSliderElementResizeObserverDelegate; + +diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc +index 62ef007e5f6d5bbe3cae8ab7760251256ce57efb..4022da87d0ad39e34f05423990a9df598955ed50 100644 +--- a/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc ++++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_timeline_element.cc +@@ -272,10 +272,12 @@ void MediaControlTimelineElement::OnControlsHidden() { + + // End scrubbing state. + is_touching_ = false; ++ MediaControlSliderElement::OnControlsHidden(); + } + + void MediaControlTimelineElement::OnControlsShown() { + controls_hidden_ = false; ++ MediaControlSliderElement::OnControlsShown(); + } + + bool MediaControlTimelineElement::EndScrubbingEvent(Event& event) { +diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc +index 5ca3a5f8314bc67d498b3c1d8306f550223781d3..37321c8331d80899afa632327540fd2199fc0907 100644 +--- a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc ++++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc +@@ -911,6 +911,8 @@ void MediaControlsImpl::MaybeShow() { + loading_panel_->OnControlsShown(); + + timeline_->OnControlsShown(); ++ if (volume_slider_) ++ volume_slider_->OnControlsShown(); + UpdateCSSClassFromState(); + UpdateActingAsAudioControls(); + } +@@ -936,6 +938,8 @@ void MediaControlsImpl::Hide() { + EndScrubbing(); + } + timeline_->OnControlsHidden(); ++ if (volume_slider_) ++ volume_slider_->OnControlsHidden(); + + UpdateCSSClassFromState(); + +diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc +index 4bd7baed6c95deccfea6ac1f7c8998ad64c64e05..15a786c21b7f84d12e5ac87705b8ff0f54127765 100644 +--- a/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc ++++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc +@@ -14,10 +14,12 @@ + #include "third_party/blink/public/platform/web_mouse_event.h" + #include "third_party/blink/public/platform/web_screen_info.h" + #include "third_party/blink/public/platform/web_size.h" ++#include "third_party/blink/renderer/bindings/core/v8/v8_gc_controller.h" + #include "third_party/blink/renderer/core/css/css_property_value_set.h" + #include "third_party/blink/renderer/core/css/document_style_environment_variables.h" + #include "third_party/blink/renderer/core/css/style_engine.h" + #include "third_party/blink/renderer/core/dom/document.h" ++#include "third_party/blink/renderer/core/dom/document_parser.h" + #include "third_party/blink/renderer/core/dom/element_traversal.h" + #include "third_party/blink/renderer/core/dom/events/event.h" + #include "third_party/blink/renderer/core/dom/text.h" +@@ -1159,6 +1161,33 @@ TEST_F(MediaControlsImplTest, + EXPECT_EQ(nullptr, weak_persistent_video); + } + ++TEST_F(MediaControlsImplTest, ++ RemovingFromDocumentWhenResettingSrcAllowsReclamation) { ++ // Regression test: https://crbug.com/918064 ++ // ++ // Test ensures that unified heap garbage collections are able to collect ++ // detached HTMLVideoElements. The tricky part is that ResizeObserver's are ++ // treated as roots as long as they have observations which prevent the video ++ // element from being collected. ++ ++ auto page_holder = std::make_unique(); ++ page_holder->GetDocument().write("