mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-05 08:31:51 +00:00
Some checks are pending
CI / macOS, arm64, Sanitizer_CI, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers_CI, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer_CI, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer_CI, Clang (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
The text track processing model would previously spin forever waiting for the track URL to change. It would then recursively invoke itself to handle the new URL, again entering the spin loop. This meant that tracks could easily cause event loop hangs. We now have an observer system to be notified when the track state changes instead. This lets us exit the processing model and move on.
58 lines
1.6 KiB
C++
58 lines
1.6 KiB
C++
/*
|
|
* Copyright (c) 2020, the SerenityOS developers.
|
|
* Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibWeb/Forward.h>
|
|
#include <LibWeb/HTML/HTMLElement.h>
|
|
|
|
namespace Web::HTML {
|
|
|
|
class HTMLTrackElement final : public HTMLElement {
|
|
WEB_PLATFORM_OBJECT(HTMLTrackElement, HTMLElement);
|
|
GC_DECLARE_ALLOCATOR(HTMLTrackElement);
|
|
|
|
public:
|
|
virtual ~HTMLTrackElement() override;
|
|
|
|
WebIDL::UnsignedShort ready_state();
|
|
|
|
GC::Ref<TextTrack> track() { return *m_track; }
|
|
|
|
private:
|
|
HTMLTrackElement(DOM::Document&, DOM::QualifiedName);
|
|
|
|
virtual void initialize(JS::Realm&) override;
|
|
virtual void visit_edges(Cell::Visitor&) override;
|
|
|
|
String track_url() const { return m_track_url; }
|
|
void set_track_url(String);
|
|
|
|
void start_the_track_processing_model();
|
|
void start_the_track_processing_model_parallel_steps();
|
|
|
|
void track_became_ready();
|
|
void track_failed_to_load();
|
|
|
|
// ^DOM::Element
|
|
virtual void attribute_changed(FlyString const& name, Optional<String> const& old_value, Optional<String> const& value, Optional<FlyString> const& namespace_) override;
|
|
virtual void inserted() override;
|
|
|
|
GC::Ptr<TextTrack> m_track;
|
|
GC::Ptr<TextTrackObserver> m_track_observer;
|
|
|
|
// https://html.spec.whatwg.org/multipage/media.html#track-url
|
|
String m_track_url {};
|
|
|
|
GC::Ptr<Fetch::Infrastructure::FetchAlgorithms> m_fetch_algorithms;
|
|
GC::Ptr<Fetch::Infrastructure::FetchController> m_fetch_controller;
|
|
|
|
bool m_loading { false };
|
|
bool m_awaiting_track_url_change { false };
|
|
};
|
|
|
|
}
|