diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator.cpp index 35f5172e4c..f0aff61edc 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator.cpp @@ -2468,6 +2468,7 @@ using namespace Web::DOM; using namespace Web::Geometry; using namespace Web::HTML; using namespace Web::RequestIdleCallback; +using namespace Web::XHR; namespace Web::Bindings { diff --git a/Userland/Libraries/LibWeb/XHR/ProgressEvent.h b/Userland/Libraries/LibWeb/XHR/ProgressEvent.h index 7cd2ca49d1..a969864e01 100644 --- a/Userland/Libraries/LibWeb/XHR/ProgressEvent.h +++ b/Userland/Libraries/LibWeb/XHR/ProgressEvent.h @@ -13,13 +13,23 @@ namespace Web::XHR { // FIXME: All the "u32"s should be "u64"s, however LibJS doesn't currently support constructing values with u64, // and the IDL parser doesn't properly parse "unsigned long long". +struct ProgressEventInit : public DOM::EventInit { + bool length_computable { false }; + u32 loaded { 0 }; + u32 total { 0 }; +}; + class ProgressEvent : public DOM::Event { public: using WrapperType = Bindings::ProgressEventWrapper; - static NonnullRefPtr create(const FlyString& event_name, u32 transmitted, u32 length) + static NonnullRefPtr create(FlyString const& event_name, ProgressEventInit const& event_init) { - return adopt_ref(*new ProgressEvent(event_name, transmitted, length)); + return adopt_ref(*new ProgressEvent(event_name, event_init)); + } + static NonnullRefPtr create_with_global_object(Bindings::WindowObject&, FlyString const& event_name, ProgressEventInit const& event_init) + { + return ProgressEvent::create(event_name, event_init); } virtual ~ProgressEvent() override { } @@ -29,11 +39,11 @@ public: u32 total() const { return m_total; } protected: - ProgressEvent(const FlyString& event_name, u32 transmitted, u32 length) - : Event(event_name) - , m_length_computable(length != 0) - , m_loaded(transmitted) - , m_total(length) + ProgressEvent(FlyString const& event_name, ProgressEventInit const& event_init) + : Event(event_name, event_init) + , m_length_computable(event_init.length_computable) + , m_loaded(event_init.loaded) + , m_total(event_init.total) { } diff --git a/Userland/Libraries/LibWeb/XHR/ProgressEvent.idl b/Userland/Libraries/LibWeb/XHR/ProgressEvent.idl index 64e9805ef2..c92731e934 100644 --- a/Userland/Libraries/LibWeb/XHR/ProgressEvent.idl +++ b/Userland/Libraries/LibWeb/XHR/ProgressEvent.idl @@ -1,7 +1,15 @@ +#import + interface ProgressEvent : Event { + constructor(DOMString type, optional ProgressEventInit eventInitDict = {}); readonly attribute boolean lengthComputable; readonly attribute unsigned long loaded; readonly attribute unsigned long total; - +}; + +dictionary ProgressEventInit : EventInit { + boolean lengthComputable = false; + unsigned long loaded = 0; + unsigned long total = 0; }; diff --git a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp index 73258099aa..d778e7338a 100644 --- a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp +++ b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp @@ -45,7 +45,11 @@ void XMLHttpRequest::set_ready_state(ReadyState ready_state) void XMLHttpRequest::fire_progress_event(const String& event_name, u64 transmitted, u64 length) { - dispatch_event(ProgressEvent::create(event_name, transmitted, length)); + ProgressEventInit event_init {}; + event_init.length_computable = true; + event_init.loaded = transmitted; + event_init.total = length; + dispatch_event(ProgressEvent::create(event_name, event_init)); } String XMLHttpRequest::response_text() const