mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
fix: backport patch for leaking HTML5 video elements (#19347)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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<NSFont*>(reinterpret_cast<const NSFont*>(cf_val));
|
||||
DCHECK(!cf_val ||
|
||||
CTFontGetTypeID() == CFGetTypeID(cf_val) ||
|
||||
@@ -27,7 +27,7 @@ index 15fc15ba307e18f438852f00f41b2f5ecf7ff85f..7ca4e0ec5ca87f34e0baa22ba0b704e2
|
||||
return ns_val;
|
||||
}
|
||||
|
||||
@@ -394,9 +392,6 @@ CFCast<CTFontRef>(const CFTypeRef& cf_val) {
|
||||
@@ -394,9 +392,6 @@ CTFontRef NSToCFCast(NSFont* ns_val) {
|
||||
return (CTFontRef)(cf_val);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Lippautz <mlippautz@chromium.org>
|
||||
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 <mlippautz@chromium.org>
|
||||
Reviewed-by: Tommy Steimel <steimel@chromium.org>
|
||||
Reviewed-by: Kentaro Hara <haraken@chromium.org>
|
||||
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<DummyPageHolder>();
|
||||
+ page_holder->GetDocument().write("<video controls>");
|
||||
+ page_holder->GetDocument().Parser()->Finish();
|
||||
+
|
||||
+ HTMLVideoElement& video =
|
||||
+ ToHTMLVideoElement(*page_holder->GetDocument().QuerySelector("video"));
|
||||
+ WeakPersistent<HTMLMediaElement> weak_persistent_video = &video;
|
||||
+ video.remove();
|
||||
+
|
||||
+ test::RunPendingTasks();
|
||||
+
|
||||
+ // Needs to call into V8's GC here to trigger a unified garbage collection.
|
||||
+ V8GCController::CollectAllGarbageForTesting(
|
||||
+ ThreadState::Current()->GetIsolate(),
|
||||
+ v8::EmbedderHeapTracer::EmbedderStackState::kEmpty);
|
||||
+ EXPECT_EQ(nullptr, weak_persistent_video);
|
||||
+}
|
||||
+
|
||||
TEST_F(MediaControlsImplTest,
|
||||
ReInsertingInDocumentRestoresListenersAndCallbacks) {
|
||||
auto page_holder = DummyPageHolder::Create();
|
||||
@@ -20,7 +20,7 @@ index 8b84322baa808f66044361d1033ec63805856227..70d244e01b75f98a6ed580475710d740
|
||||
// These are not documented, so use only after checking -respondsToSelector:.
|
||||
@interface NSApplication (UndocumentedSpeechMethods)
|
||||
- (void)speakString:(NSString*)string;
|
||||
@@ -354,6 +359,9 @@ void ExtractUnderlines(NSAttributedString* string,
|
||||
@@ -354,6 +359,9 @@ - (BOOL)acceptsMouseEventsWhenInactive {
|
||||
}
|
||||
|
||||
- (BOOL)acceptsFirstMouse:(NSEvent*)theEvent {
|
||||
@@ -30,7 +30,7 @@ index 8b84322baa808f66044361d1033ec63805856227..70d244e01b75f98a6ed580475710d740
|
||||
return [self acceptsMouseEventsWhenInactive];
|
||||
}
|
||||
|
||||
@@ -688,6 +696,10 @@ void ExtractUnderlines(NSAttributedString* string,
|
||||
@@ -688,6 +696,10 @@ - (void)keyEvent:(NSEvent*)theEvent wasKeyEquivalent:(BOOL)equiv {
|
||||
eventType == NSKeyDown &&
|
||||
!(modifierFlags & NSCommandKeyMask);
|
||||
|
||||
@@ -41,7 +41,7 @@ index 8b84322baa808f66044361d1033ec63805856227..70d244e01b75f98a6ed580475710d740
|
||||
// We only handle key down events and just simply forward other events.
|
||||
if (eventType != NSKeyDown) {
|
||||
localClient_->ForwardKeyboardEvent(event, latency_info);
|
||||
@@ -1460,9 +1472,11 @@ void ExtractUnderlines(NSAttributedString* string,
|
||||
@@ -1460,9 +1472,11 @@ - (id)accessibilityFocusedUIElement {
|
||||
// Since this implementation doesn't have to wait any IPC calls, this doesn't
|
||||
// make any key-typing jank. --hbono 7/23/09
|
||||
//
|
||||
@@ -53,7 +53,7 @@ index 8b84322baa808f66044361d1033ec63805856227..70d244e01b75f98a6ed580475710d740
|
||||
|
||||
- (NSArray*)validAttributesForMarkedText {
|
||||
// This code is just copied from WebKit except renaming variables.
|
||||
@@ -1471,7 +1485,10 @@ extern NSString* NSTextInputReplacementRangeAttributeName;
|
||||
@@ -1471,7 +1485,10 @@ - (NSArray*)validAttributesForMarkedText {
|
||||
initWithObjects:NSUnderlineStyleAttributeName,
|
||||
NSUnderlineColorAttributeName,
|
||||
NSMarkedClauseSegmentAttributeName,
|
||||
|
||||
@@ -15,7 +15,7 @@ diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_na
|
||||
index 8841b59f6b70ac4687adfde61a1fba1424e57e48..cc3659319c4076043a0493798db3c7b8a4afd21e 100644
|
||||
--- a/ui/views/cocoa/bridged_native_widget.mm
|
||||
+++ b/ui/views/cocoa/bridged_native_widget.mm
|
||||
@@ -1039,6 +1039,12 @@ bool BridgedNativeWidget::ShouldRunCustomAnimationFor(
|
||||
@@ -1039,6 +1039,12 @@ NSUInteger CountBridgedWindows(NSArray* child_windows) {
|
||||
// BridgedNativeWidget, ui::CATransactionObserver
|
||||
|
||||
bool BridgedNativeWidget::ShouldWaitInPreCommit() {
|
||||
|
||||
@@ -20,7 +20,7 @@ diff --git a/content/browser/web_contents/web_drag_dest_mac.mm b/content/browser
|
||||
index cec3bd8a97b8b9bcab176a9bd2c296ec12aba838..7a2b4462bd44176e8e8389499f8c3d5fea647fa0 100644
|
||||
--- a/content/browser/web_contents/web_drag_dest_mac.mm
|
||||
+++ b/content/browser/web_contents/web_drag_dest_mac.mm
|
||||
@@ -348,6 +348,7 @@ GetRenderWidgetHostAtPoint:(const NSPoint&)viewPoint
|
||||
@@ -348,6 +348,7 @@ - (void)setDragStartTrackersForProcess:(int)processID {
|
||||
}
|
||||
|
||||
- (bool)isValidDragTarget:(content::RenderWidgetHostImpl*)targetRWH {
|
||||
|
||||
Reference in New Issue
Block a user