Skip to content

Commit 73f49fd

Browse files
committed
[Modern Media Controls] remove window event listeners at deinitialization
https://bugs.webkit.org/show_bug.cgi?id=280503 Reviewed by Ryan Reno. DOMWindow keeps media controls object alive because of installed event listeners (see JSDOMWindow::visitAdditionalChildren). This results in extra memory usage undil DOMWindow cleared (on top level navigation). Original patch by Eugene Mutavchi <[email protected]>. * Source/WebCore/Modules/modern-media-controls/controls/media-controls.js: (MediaControls.prototype.reenable): * Source/WebCore/Modules/modern-media-controls/media/media-controller.js: (MediaController.prototype.deinitialize): (MediaController.prototype.reinitialize): Canonical link: https://commits.webkit.org/284440@main
1 parent c7d98eb commit 73f49fd

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

Source/WebCore/Modules/modern-media-controls/controls/media-controls.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,4 +254,10 @@ class MediaControls extends LayoutNode
254254
this.element.removeEventListener("focusin", this);
255255
window.removeEventListener("dragstart", this, true);
256256
}
257+
258+
reenable()
259+
{
260+
this.element.addEventListener("focusin", this);
261+
window.addEventListener("dragstart", this, true);
262+
}
257263
}

Source/WebCore/Modules/modern-media-controls/media/media-controller.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,9 @@ class MediaController
222222
deinitialize()
223223
{
224224
this.shadowRoot.removeChild(this.container);
225+
window.removeEventListener("keydown", this);
226+
if (this.controls)
227+
this.controls.disable();
225228
return true;
226229
}
227230

@@ -232,6 +235,9 @@ class MediaController
232235
this.mediaWeakRef = new WeakRef(media);
233236
this.host = host;
234237
shadowRoot.appendChild(this.container);
238+
window.addEventListener("keydown", this);
239+
if (this.controls)
240+
this.controls.reenable();
235241
return true;
236242
}
237243

0 commit comments

Comments
 (0)