mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 03:55:24 +00:00
LibWeb: Unload fonts when adopted style sheet is removed
Add missing unloading step that we do for regular style sheets but mistakenly missed for adopted style sheets.
This commit is contained in:
parent
0d92cd1f36
commit
cf57efd252
Notes:
github-actions[bot]
2025-01-10 16:13:44 +00:00
Author: https://github.com/kalenikaliaksandr Commit: https://github.com/LadybirdBrowser/ladybird/commit/cf57efd252d Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3215
3 changed files with 15 additions and 4 deletions
|
@ -35,7 +35,13 @@ GC::Ref<WebIDL::ObservableArray> create_adopted_style_sheets_list(Document& docu
|
|||
document.invalidate_style(DOM::StyleInvalidationReason::AdoptedStyleSheetsList);
|
||||
return {};
|
||||
});
|
||||
adopted_style_sheets->set_on_delete_an_indexed_value_callback([&document]() -> WebIDL::ExceptionOr<void> {
|
||||
adopted_style_sheets->set_on_delete_an_indexed_value_callback([&document](JS::Value value) -> WebIDL::ExceptionOr<void> {
|
||||
VERIFY(value.is_object());
|
||||
auto& object = value.as_object();
|
||||
VERIFY(is<CSS::CSSStyleSheet>(object));
|
||||
auto& style_sheet = static_cast<CSS::CSSStyleSheet&>(object);
|
||||
|
||||
document.style_computer().unload_fonts_from_sheet(style_sheet);
|
||||
document.style_computer().invalidate_rule_cache();
|
||||
document.invalidate_style(DOM::StyleInvalidationReason::AdoptedStyleSheetsList);
|
||||
return {};
|
||||
|
|
|
@ -48,8 +48,13 @@ JS::ThrowCompletionOr<bool> ObservableArray::internal_set(JS::PropertyKey const&
|
|||
|
||||
JS::ThrowCompletionOr<bool> ObservableArray::internal_delete(JS::PropertyKey const& property_key)
|
||||
{
|
||||
if (property_key.is_number() && m_on_delete_an_indexed_value)
|
||||
TRY(Bindings::throw_dom_exception_if_needed(vm(), [&] { return m_on_delete_an_indexed_value->function()(); }));
|
||||
if (property_key.is_number() && m_on_delete_an_indexed_value) {
|
||||
auto maybe_value_and_attributes = indexed_properties().get(property_key.as_number());
|
||||
JS::Value deleted_value;
|
||||
if (maybe_value_and_attributes.has_value())
|
||||
deleted_value = maybe_value_and_attributes->value;
|
||||
TRY(Bindings::throw_dom_exception_if_needed(vm(), [&] { return m_on_delete_an_indexed_value->function()(deleted_value); }));
|
||||
}
|
||||
return JS::Array::internal_delete(property_key);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ public:
|
|||
virtual JS::ThrowCompletionOr<bool> internal_delete(JS::PropertyKey const& property_key) override;
|
||||
|
||||
using SetAnIndexedValueCallbackFunction = Function<ExceptionOr<void>(JS::Value&)>;
|
||||
using DeleteAnIndexedValueCallbackFunction = Function<ExceptionOr<void>()>;
|
||||
using DeleteAnIndexedValueCallbackFunction = Function<ExceptionOr<void>(JS::Value)>;
|
||||
|
||||
void set_on_set_an_indexed_value_callback(SetAnIndexedValueCallbackFunction&& callback);
|
||||
void set_on_delete_an_indexed_value_callback(DeleteAnIndexedValueCallbackFunction&& callback);
|
||||
|
|
Loading…
Add table
Reference in a new issue