diff --git a/Userland/Libraries/LibWeb/HTML/Navigation.cpp b/Userland/Libraries/LibWeb/HTML/Navigation.cpp index 9b7aa862cb9..1c950b88149 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigation.cpp +++ b/Userland/Libraries/LibWeb/HTML/Navigation.cpp @@ -1182,16 +1182,16 @@ bool Navigation::inner_navigate_event_firing_algorithm( // 6. Fire an event named navigatesuccess at navigation. dispatch_event(DOM::Event::create(realm, EventNames::navigatesuccess)); - // 7. If navigation's transition is not null, then resolve navigation's transition's finished promise with undefined. + // 7. If apiMethodTracker is non-null, then resolve the finished promise for apiMethodTracker. + if (api_method_tracker != nullptr) + resolve_the_finished_promise(*api_method_tracker); + + // 8. If navigation's transition is not null, then resolve navigation's transition's finished promise with undefined. if (m_transition != nullptr) m_transition->finished()->fulfill(JS::js_undefined()); - // 8. Set navigation's transition to null. - m_transition = nullptr; - - // 9. If apiMethodTracker is non-null, then resolve the finished promise for apiMethodTracker. - if (api_method_tracker != nullptr) - resolve_the_finished_promise(*api_method_tracker); }, + // 9. Set navigation's transition to null. + m_transition = nullptr; }, // and the following failure steps given reason rejectionReason: [event, this, api_method_tracker](JS::Value rejection_reason) -> void { // FIXME: Spec issue: Event's relevant global objects' *associated document* @@ -1214,9 +1214,7 @@ bool Navigation::inner_navigate_event_firing_algorithm( // 5. Finish event given false. event->finish(false); - // 6. Fire an event named navigateerror at navigation using ErrorEvent, with error initialized to rejectionReason, and message, - // filename, lineno, and colno initialized to appropriate values that can be extracted from rejectionReason in the same - // underspecified way that the report the exception algorithm does. + // 6. Let errorInfo be the result of extracting error information from rejectionReason. ErrorEventInit event_init = {}; event_init.error = rejection_reason; // FIXME: Extract information from the exception and the JS context in the wishy-washy way the spec says here. @@ -1225,18 +1223,19 @@ bool Navigation::inner_navigate_event_firing_algorithm( event_init.lineno = 0; event_init.message = String {}; + // 7. Fire an event named navigateerror at navigation using ErrorEvent,with additional attributes initialized according to errorInfo. dispatch_event(ErrorEvent::create(realm, EventNames::navigateerror, event_init)); - // 7. If navigation's transition is not null, then reject navigation's transition's finished promise with rejectionReason. + // 8. If apiMethodTracker is non-null, then reject the finished promise for apiMethodTracker with rejectionReason. + if (api_method_tracker != nullptr) + reject_the_finished_promise(*api_method_tracker, rejection_reason); + + // 9. If navigation's transition is not null, then reject navigation's transition's finished promise with rejectionReason. if (m_transition) m_transition->finished()->reject(rejection_reason); - // 8. Set navigation's transition to null. + // 10. Set navigation's transition to null. m_transition = nullptr; - - // 9. If apiMethodTracker is non-null, then reject the finished promise for apiMethodTracker with rejectionReason. - if (api_method_tracker != nullptr) - reject_the_finished_promise(*api_method_tracker, rejection_reason); }); }