| File: | root/firefox-clang/dom/events/NavigateEvent.cpp |
| Warning: | line 365, column 5 Value stored to 'focusTarget' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
| 2 | /* vim:set ts=2 sw=2 sts=2 et cindent: */ |
| 3 | /* This Source Code Form is subject to the terms of the Mozilla Public |
| 4 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
| 5 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| 6 | |
| 7 | #include "nsGlobalWindowInner.h" |
| 8 | #include "nsDocShell.h" |
| 9 | |
| 10 | #include "mozilla/HoldDropJSObjects.h" |
| 11 | #include "mozilla/PresShell.h" |
| 12 | |
| 13 | #include "mozilla/dom/AbortController.h" |
| 14 | #include "mozilla/dom/NavigateEvent.h" |
| 15 | #include "mozilla/dom/NavigateEventBinding.h" |
| 16 | #include "mozilla/dom/Navigation.h" |
| 17 | #include "mozilla/dom/SessionHistoryEntry.h" |
| 18 | |
| 19 | namespace mozilla::dom { |
| 20 | |
| 21 | NS_IMPL_CYCLE_COLLECTION_INHERITED_WITH_JS_MEMBERS(NavigateEvent, Event,NavigateEvent::cycleCollection NavigateEvent::_cycleCollectorGlobal ; void NavigateEvent::cycleCollection::Unlink(void* p) { NavigateEvent * tmp = DowncastCCParticipant<NavigateEvent>(p); nsISupports * s = static_cast<nsISupports*>(p); Event::cycleCollection ::Unlink(s); using ::ImplCycleCollectionUnlink; ImplCycleCollectionUnlink (tmp->mDestination); ImplCycleCollectionUnlink(tmp->mSignal ); ImplCycleCollectionUnlink(tmp->mFormData); ImplCycleCollectionUnlink (tmp->mSourceElement); ImplCycleCollectionUnlink(tmp->mNavigationHandlerList ); ImplCycleCollectionUnlink(tmp->mAbortController); ImplCycleCollectionUnlink (tmp->mInfo); (void)tmp; } nsresult NavigateEvent::cycleCollection ::TraverseNative( void* p, nsCycleCollectionTraversalCallback & cb) { NavigateEvent* tmp = DowncastCCParticipant<NavigateEvent >(p); nsISupports* s = static_cast<nsISupports*>(p); if (Event::cycleCollection::TraverseNative(s, cb) == NS_SUCCESS_INTERRUPTED_TRAVERSE ) { return NS_SUCCESS_INTERRUPTED_TRAVERSE; } ImplCycleCollectionTraverse (cb, tmp->mDestination, "mDestination", 0); ImplCycleCollectionTraverse (cb, tmp->mSignal, "mSignal", 0); ImplCycleCollectionTraverse (cb, tmp->mFormData, "mFormData", 0); ImplCycleCollectionTraverse (cb, tmp->mSourceElement, "mSourceElement", 0); ImplCycleCollectionTraverse (cb, tmp->mNavigationHandlerList, "mNavigationHandlerList" , 0); ImplCycleCollectionTraverse(cb, tmp->mAbortController , "mAbortController", 0); (void)tmp; return NS_OK; } void NavigateEvent ::cycleCollection::Trace( void* p, const TraceCallbacks& aCallbacks , void* aClosure) { NavigateEvent* tmp = DowncastCCParticipant <NavigateEvent>(p); nsISupports* s = static_cast<nsISupports *>(p); Event::cycleCollection::Trace(s, aCallbacks, aClosure ); do { static_assert( mozilla::detail::AssertionConditionType <decltype(!IsSingleZoneJSHolder())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!IsSingleZoneJSHolder()))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("!IsSingleZoneJSHolder()" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 26); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!IsSingleZoneJSHolder()" ")"); do { MOZ_CrashSequence (__null, 26); __attribute__((nomerge)) ::abort(); } while (false ); } } while (false); ImplCycleCollectionTrace(aCallbacks, tmp ->mInfo, "mInfo", aClosure); (void)tmp; } |
| 22 | (mDestination, mSignal,NavigateEvent::cycleCollection NavigateEvent::_cycleCollectorGlobal ; void NavigateEvent::cycleCollection::Unlink(void* p) { NavigateEvent * tmp = DowncastCCParticipant<NavigateEvent>(p); nsISupports * s = static_cast<nsISupports*>(p); Event::cycleCollection ::Unlink(s); using ::ImplCycleCollectionUnlink; ImplCycleCollectionUnlink (tmp->mDestination); ImplCycleCollectionUnlink(tmp->mSignal ); ImplCycleCollectionUnlink(tmp->mFormData); ImplCycleCollectionUnlink (tmp->mSourceElement); ImplCycleCollectionUnlink(tmp->mNavigationHandlerList ); ImplCycleCollectionUnlink(tmp->mAbortController); ImplCycleCollectionUnlink (tmp->mInfo); (void)tmp; } nsresult NavigateEvent::cycleCollection ::TraverseNative( void* p, nsCycleCollectionTraversalCallback & cb) { NavigateEvent* tmp = DowncastCCParticipant<NavigateEvent >(p); nsISupports* s = static_cast<nsISupports*>(p); if (Event::cycleCollection::TraverseNative(s, cb) == NS_SUCCESS_INTERRUPTED_TRAVERSE ) { return NS_SUCCESS_INTERRUPTED_TRAVERSE; } ImplCycleCollectionTraverse (cb, tmp->mDestination, "mDestination", 0); ImplCycleCollectionTraverse (cb, tmp->mSignal, "mSignal", 0); ImplCycleCollectionTraverse (cb, tmp->mFormData, "mFormData", 0); ImplCycleCollectionTraverse (cb, tmp->mSourceElement, "mSourceElement", 0); ImplCycleCollectionTraverse (cb, tmp->mNavigationHandlerList, "mNavigationHandlerList" , 0); ImplCycleCollectionTraverse(cb, tmp->mAbortController , "mAbortController", 0); (void)tmp; return NS_OK; } void NavigateEvent ::cycleCollection::Trace( void* p, const TraceCallbacks& aCallbacks , void* aClosure) { NavigateEvent* tmp = DowncastCCParticipant <NavigateEvent>(p); nsISupports* s = static_cast<nsISupports *>(p); Event::cycleCollection::Trace(s, aCallbacks, aClosure ); do { static_assert( mozilla::detail::AssertionConditionType <decltype(!IsSingleZoneJSHolder())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!IsSingleZoneJSHolder()))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("!IsSingleZoneJSHolder()" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 26); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!IsSingleZoneJSHolder()" ")"); do { MOZ_CrashSequence (__null, 26); __attribute__((nomerge)) ::abort(); } while (false ); } } while (false); ImplCycleCollectionTrace(aCallbacks, tmp ->mInfo, "mInfo", aClosure); (void)tmp; } |
| 23 | mFormData, mSourceElement,NavigateEvent::cycleCollection NavigateEvent::_cycleCollectorGlobal ; void NavigateEvent::cycleCollection::Unlink(void* p) { NavigateEvent * tmp = DowncastCCParticipant<NavigateEvent>(p); nsISupports * s = static_cast<nsISupports*>(p); Event::cycleCollection ::Unlink(s); using ::ImplCycleCollectionUnlink; ImplCycleCollectionUnlink (tmp->mDestination); ImplCycleCollectionUnlink(tmp->mSignal ); ImplCycleCollectionUnlink(tmp->mFormData); ImplCycleCollectionUnlink (tmp->mSourceElement); ImplCycleCollectionUnlink(tmp->mNavigationHandlerList ); ImplCycleCollectionUnlink(tmp->mAbortController); ImplCycleCollectionUnlink (tmp->mInfo); (void)tmp; } nsresult NavigateEvent::cycleCollection ::TraverseNative( void* p, nsCycleCollectionTraversalCallback & cb) { NavigateEvent* tmp = DowncastCCParticipant<NavigateEvent >(p); nsISupports* s = static_cast<nsISupports*>(p); if (Event::cycleCollection::TraverseNative(s, cb) == NS_SUCCESS_INTERRUPTED_TRAVERSE ) { return NS_SUCCESS_INTERRUPTED_TRAVERSE; } ImplCycleCollectionTraverse (cb, tmp->mDestination, "mDestination", 0); ImplCycleCollectionTraverse (cb, tmp->mSignal, "mSignal", 0); ImplCycleCollectionTraverse (cb, tmp->mFormData, "mFormData", 0); ImplCycleCollectionTraverse (cb, tmp->mSourceElement, "mSourceElement", 0); ImplCycleCollectionTraverse (cb, tmp->mNavigationHandlerList, "mNavigationHandlerList" , 0); ImplCycleCollectionTraverse(cb, tmp->mAbortController , "mAbortController", 0); (void)tmp; return NS_OK; } void NavigateEvent ::cycleCollection::Trace( void* p, const TraceCallbacks& aCallbacks , void* aClosure) { NavigateEvent* tmp = DowncastCCParticipant <NavigateEvent>(p); nsISupports* s = static_cast<nsISupports *>(p); Event::cycleCollection::Trace(s, aCallbacks, aClosure ); do { static_assert( mozilla::detail::AssertionConditionType <decltype(!IsSingleZoneJSHolder())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!IsSingleZoneJSHolder()))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("!IsSingleZoneJSHolder()" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 26); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!IsSingleZoneJSHolder()" ")"); do { MOZ_CrashSequence (__null, 26); __attribute__((nomerge)) ::abort(); } while (false ); } } while (false); ImplCycleCollectionTrace(aCallbacks, tmp ->mInfo, "mInfo", aClosure); (void)tmp; } |
| 24 | mNavigationHandlerList,NavigateEvent::cycleCollection NavigateEvent::_cycleCollectorGlobal ; void NavigateEvent::cycleCollection::Unlink(void* p) { NavigateEvent * tmp = DowncastCCParticipant<NavigateEvent>(p); nsISupports * s = static_cast<nsISupports*>(p); Event::cycleCollection ::Unlink(s); using ::ImplCycleCollectionUnlink; ImplCycleCollectionUnlink (tmp->mDestination); ImplCycleCollectionUnlink(tmp->mSignal ); ImplCycleCollectionUnlink(tmp->mFormData); ImplCycleCollectionUnlink (tmp->mSourceElement); ImplCycleCollectionUnlink(tmp->mNavigationHandlerList ); ImplCycleCollectionUnlink(tmp->mAbortController); ImplCycleCollectionUnlink (tmp->mInfo); (void)tmp; } nsresult NavigateEvent::cycleCollection ::TraverseNative( void* p, nsCycleCollectionTraversalCallback & cb) { NavigateEvent* tmp = DowncastCCParticipant<NavigateEvent >(p); nsISupports* s = static_cast<nsISupports*>(p); if (Event::cycleCollection::TraverseNative(s, cb) == NS_SUCCESS_INTERRUPTED_TRAVERSE ) { return NS_SUCCESS_INTERRUPTED_TRAVERSE; } ImplCycleCollectionTraverse (cb, tmp->mDestination, "mDestination", 0); ImplCycleCollectionTraverse (cb, tmp->mSignal, "mSignal", 0); ImplCycleCollectionTraverse (cb, tmp->mFormData, "mFormData", 0); ImplCycleCollectionTraverse (cb, tmp->mSourceElement, "mSourceElement", 0); ImplCycleCollectionTraverse (cb, tmp->mNavigationHandlerList, "mNavigationHandlerList" , 0); ImplCycleCollectionTraverse(cb, tmp->mAbortController , "mAbortController", 0); (void)tmp; return NS_OK; } void NavigateEvent ::cycleCollection::Trace( void* p, const TraceCallbacks& aCallbacks , void* aClosure) { NavigateEvent* tmp = DowncastCCParticipant <NavigateEvent>(p); nsISupports* s = static_cast<nsISupports *>(p); Event::cycleCollection::Trace(s, aCallbacks, aClosure ); do { static_assert( mozilla::detail::AssertionConditionType <decltype(!IsSingleZoneJSHolder())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!IsSingleZoneJSHolder()))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("!IsSingleZoneJSHolder()" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 26); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!IsSingleZoneJSHolder()" ")"); do { MOZ_CrashSequence (__null, 26); __attribute__((nomerge)) ::abort(); } while (false ); } } while (false); ImplCycleCollectionTrace(aCallbacks, tmp ->mInfo, "mInfo", aClosure); (void)tmp; } |
| 25 | mAbortController),NavigateEvent::cycleCollection NavigateEvent::_cycleCollectorGlobal ; void NavigateEvent::cycleCollection::Unlink(void* p) { NavigateEvent * tmp = DowncastCCParticipant<NavigateEvent>(p); nsISupports * s = static_cast<nsISupports*>(p); Event::cycleCollection ::Unlink(s); using ::ImplCycleCollectionUnlink; ImplCycleCollectionUnlink (tmp->mDestination); ImplCycleCollectionUnlink(tmp->mSignal ); ImplCycleCollectionUnlink(tmp->mFormData); ImplCycleCollectionUnlink (tmp->mSourceElement); ImplCycleCollectionUnlink(tmp->mNavigationHandlerList ); ImplCycleCollectionUnlink(tmp->mAbortController); ImplCycleCollectionUnlink (tmp->mInfo); (void)tmp; } nsresult NavigateEvent::cycleCollection ::TraverseNative( void* p, nsCycleCollectionTraversalCallback & cb) { NavigateEvent* tmp = DowncastCCParticipant<NavigateEvent >(p); nsISupports* s = static_cast<nsISupports*>(p); if (Event::cycleCollection::TraverseNative(s, cb) == NS_SUCCESS_INTERRUPTED_TRAVERSE ) { return NS_SUCCESS_INTERRUPTED_TRAVERSE; } ImplCycleCollectionTraverse (cb, tmp->mDestination, "mDestination", 0); ImplCycleCollectionTraverse (cb, tmp->mSignal, "mSignal", 0); ImplCycleCollectionTraverse (cb, tmp->mFormData, "mFormData", 0); ImplCycleCollectionTraverse (cb, tmp->mSourceElement, "mSourceElement", 0); ImplCycleCollectionTraverse (cb, tmp->mNavigationHandlerList, "mNavigationHandlerList" , 0); ImplCycleCollectionTraverse(cb, tmp->mAbortController , "mAbortController", 0); (void)tmp; return NS_OK; } void NavigateEvent ::cycleCollection::Trace( void* p, const TraceCallbacks& aCallbacks , void* aClosure) { NavigateEvent* tmp = DowncastCCParticipant <NavigateEvent>(p); nsISupports* s = static_cast<nsISupports *>(p); Event::cycleCollection::Trace(s, aCallbacks, aClosure ); do { static_assert( mozilla::detail::AssertionConditionType <decltype(!IsSingleZoneJSHolder())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!IsSingleZoneJSHolder()))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("!IsSingleZoneJSHolder()" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 26); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!IsSingleZoneJSHolder()" ")"); do { MOZ_CrashSequence (__null, 26); __attribute__((nomerge)) ::abort(); } while (false ); } } while (false); ImplCycleCollectionTrace(aCallbacks, tmp ->mInfo, "mInfo", aClosure); (void)tmp; } |
| 26 | (mInfo))NavigateEvent::cycleCollection NavigateEvent::_cycleCollectorGlobal ; void NavigateEvent::cycleCollection::Unlink(void* p) { NavigateEvent * tmp = DowncastCCParticipant<NavigateEvent>(p); nsISupports * s = static_cast<nsISupports*>(p); Event::cycleCollection ::Unlink(s); using ::ImplCycleCollectionUnlink; ImplCycleCollectionUnlink (tmp->mDestination); ImplCycleCollectionUnlink(tmp->mSignal ); ImplCycleCollectionUnlink(tmp->mFormData); ImplCycleCollectionUnlink (tmp->mSourceElement); ImplCycleCollectionUnlink(tmp->mNavigationHandlerList ); ImplCycleCollectionUnlink(tmp->mAbortController); ImplCycleCollectionUnlink (tmp->mInfo); (void)tmp; } nsresult NavigateEvent::cycleCollection ::TraverseNative( void* p, nsCycleCollectionTraversalCallback & cb) { NavigateEvent* tmp = DowncastCCParticipant<NavigateEvent >(p); nsISupports* s = static_cast<nsISupports*>(p); if (Event::cycleCollection::TraverseNative(s, cb) == NS_SUCCESS_INTERRUPTED_TRAVERSE ) { return NS_SUCCESS_INTERRUPTED_TRAVERSE; } ImplCycleCollectionTraverse (cb, tmp->mDestination, "mDestination", 0); ImplCycleCollectionTraverse (cb, tmp->mSignal, "mSignal", 0); ImplCycleCollectionTraverse (cb, tmp->mFormData, "mFormData", 0); ImplCycleCollectionTraverse (cb, tmp->mSourceElement, "mSourceElement", 0); ImplCycleCollectionTraverse (cb, tmp->mNavigationHandlerList, "mNavigationHandlerList" , 0); ImplCycleCollectionTraverse(cb, tmp->mAbortController , "mAbortController", 0); (void)tmp; return NS_OK; } void NavigateEvent ::cycleCollection::Trace( void* p, const TraceCallbacks& aCallbacks , void* aClosure) { NavigateEvent* tmp = DowncastCCParticipant <NavigateEvent>(p); nsISupports* s = static_cast<nsISupports *>(p); Event::cycleCollection::Trace(s, aCallbacks, aClosure ); do { static_assert( mozilla::detail::AssertionConditionType <decltype(!IsSingleZoneJSHolder())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!IsSingleZoneJSHolder()))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("!IsSingleZoneJSHolder()" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 26); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!IsSingleZoneJSHolder()" ")"); do { MOZ_CrashSequence (__null, 26); __attribute__((nomerge)) ::abort(); } while (false ); } } while (false); ImplCycleCollectionTrace(aCallbacks, tmp ->mInfo, "mInfo", aClosure); (void)tmp; } |
| 27 | |
| 28 | NS_IMPL_ADDREF_INHERITED(NavigateEvent, Event)MozExternalRefCountType NavigateEvent::AddRef(void) { static_assert (!std::is_destructible_v<NavigateEvent>, "Reference-counted class " "NavigateEvent" " should not have a public destructor. " "Make this class's destructor non-public" ); nsrefcnt r = Event::AddRef(); if constexpr (::mozilla::detail ::ShouldLogInheritedRefcnt<NavigateEvent>) { NS_LogAddRef ((this), (r), ("NavigateEvent"), (uint32_t)(sizeof(*this))); } return r; } |
| 29 | NS_IMPL_RELEASE_INHERITED(NavigateEvent, Event)MozExternalRefCountType NavigateEvent::Release(void) { nsrefcnt r = Event::Release(); if constexpr (::mozilla::detail::ShouldLogInheritedRefcnt <NavigateEvent>) { NS_LogRelease((this), (r), ("NavigateEvent" )); } return r; } |
| 30 | |
| 31 | NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(NavigateEvent)nsresult NavigateEvent::QueryInterface(const nsIID& aIID, void** aInstancePtr) { do { if (!(aInstancePtr)) { NS_DebugBreak (NS_DEBUG_ASSERTION, "QueryInterface requires a non-NULL destination!" , "aInstancePtr", "/root/firefox-clang/dom/events/NavigateEvent.cpp" , 31); MOZ_PretendNoReturn(); } } while (0); nsISupports* foundInterface ; if (TopThreeWordsEquals( aIID, (nsXPCOMCycleCollectionParticipant ::kIID), (nsCycleCollectionISupports::kIID)) && (LowWordEquals (aIID, (nsXPCOMCycleCollectionParticipant::kIID)) || LowWordEquals (aIID, (nsCycleCollectionISupports::kIID)))) { if (LowWordEquals (aIID, (nsXPCOMCycleCollectionParticipant::kIID))) { *aInstancePtr = NavigateEvent::cycleCollection::GetParticipant(); return NS_OK ; } if (LowWordEquals(aIID, (nsCycleCollectionISupports::kIID ))) { *aInstancePtr = NavigateEvent::cycleCollection::Upcast( this); return NS_OK; } foundInterface = nullptr; } else |
| 32 | NS_INTERFACE_MAP_END_INHERITING(Event)foundInterface = 0; nsresult status; if (!foundInterface) status = Event::QueryInterface(aIID, (void**)&foundInterface); else { (foundInterface)->AddRef(); status = NS_OK; } *aInstancePtr = foundInterface; return status; } |
| 33 | |
| 34 | JSObject* NavigateEvent::WrapObjectInternal(JSContext* aCx, |
| 35 | JS::Handle<JSObject*> aGivenProto) { |
| 36 | return NavigateEvent_Binding::Wrap(aCx, this, aGivenProto); |
| 37 | } |
| 38 | |
| 39 | /* static */ |
| 40 | already_AddRefed<NavigateEvent> NavigateEvent::Constructor( |
| 41 | const GlobalObject& aGlobal, const nsAString& aType, |
| 42 | const NavigateEventInit& aEventInitDict) { |
| 43 | nsCOMPtr<mozilla::dom::EventTarget> eventTarget = |
| 44 | do_QueryInterface(aGlobal.GetAsSupports()); |
| 45 | return Constructor(eventTarget, aType, aEventInitDict); |
| 46 | } |
| 47 | |
| 48 | /* static */ |
| 49 | already_AddRefed<NavigateEvent> NavigateEvent::Constructor( |
| 50 | EventTarget* aEventTarget, const nsAString& aType, |
| 51 | const NavigateEventInit& aEventInitDict) { |
| 52 | RefPtr<NavigateEvent> event = new NavigateEvent(aEventTarget); |
| 53 | bool trusted = event->Init(aEventTarget); |
| 54 | event->InitEvent( |
| 55 | aType, aEventInitDict.mBubbles ? CanBubble::eYes : CanBubble::eNo, |
| 56 | aEventInitDict.mCancelable ? Cancelable::eYes : Cancelable::eNo, |
| 57 | aEventInitDict.mComposed ? Composed::eYes : Composed::eNo); |
| 58 | event->InitNavigateEvent(aEventInitDict); |
| 59 | event->SetTrusted(trusted); |
| 60 | return event.forget(); |
| 61 | } |
| 62 | |
| 63 | /* static */ |
| 64 | already_AddRefed<NavigateEvent> NavigateEvent::Constructor( |
| 65 | EventTarget* aEventTarget, const nsAString& aType, |
| 66 | const NavigateEventInit& aEventInitDict, |
| 67 | nsIStructuredCloneContainer* aClassicHistoryAPIState, |
| 68 | class AbortController* aAbortController) { |
| 69 | RefPtr<NavigateEvent> event = |
| 70 | Constructor(aEventTarget, aType, aEventInitDict); |
| 71 | |
| 72 | event->mAbortController = aAbortController; |
| 73 | MOZ_DIAGNOSTIC_ASSERT(event->mSignal == aAbortController->Signal())do { static_assert( mozilla::detail::AssertionConditionType< decltype(event->mSignal == aAbortController->Signal())> ::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(event->mSignal == aAbortController->Signal())) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("event->mSignal == aAbortController->Signal()" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 73); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "event->mSignal == aAbortController->Signal()" ")"); do { MOZ_CrashSequence(__null, 73); __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
| 74 | |
| 75 | event->mClassicHistoryAPIState = aClassicHistoryAPIState; |
| 76 | |
| 77 | return event.forget(); |
| 78 | } |
| 79 | |
| 80 | NavigationType NavigateEvent::NavigationType() const { return mNavigationType; } |
| 81 | |
| 82 | already_AddRefed<NavigationDestination> NavigateEvent::Destination() const { |
| 83 | return do_AddRef(mDestination); |
| 84 | } |
| 85 | |
| 86 | bool NavigateEvent::CanIntercept() const { return mCanIntercept; } |
| 87 | |
| 88 | bool NavigateEvent::UserInitiated() const { return mUserInitiated; } |
| 89 | |
| 90 | bool NavigateEvent::HashChange() const { return mHashChange; } |
| 91 | |
| 92 | AbortSignal* NavigateEvent::Signal() const { return mSignal; } |
| 93 | |
| 94 | already_AddRefed<FormData> NavigateEvent::GetFormData() const { |
| 95 | return do_AddRef(mFormData); |
| 96 | } |
| 97 | |
| 98 | void NavigateEvent::GetDownloadRequest(nsAString& aDownloadRequest) const { |
| 99 | aDownloadRequest = mDownloadRequest; |
| 100 | } |
| 101 | |
| 102 | void NavigateEvent::GetInfo(JSContext* aCx, |
| 103 | JS::MutableHandle<JS::Value> aInfo) const { |
| 104 | aInfo.set(mInfo); |
| 105 | } |
| 106 | |
| 107 | bool NavigateEvent::HasUAVisualTransition() const { |
| 108 | return mHasUAVisualTransition; |
| 109 | } |
| 110 | |
| 111 | Element* NavigateEvent::GetSourceElement() const { return mSourceElement; } |
| 112 | |
| 113 | template <typename OptionEnum> |
| 114 | static void MaybeReportWarningToConsole(Document* aDocument, |
| 115 | const nsString& aOption, |
| 116 | OptionEnum aPrevious, OptionEnum aNew) { |
| 117 | if (!aDocument) { |
| 118 | return; |
| 119 | } |
| 120 | |
| 121 | nsTArray<nsString> params = {aOption, |
| 122 | NS_ConvertUTF8toUTF16(GetEnumString(aNew)), |
| 123 | NS_ConvertUTF8toUTF16(GetEnumString(aPrevious))}; |
| 124 | nsContentUtils::ReportToConsole( |
| 125 | nsIScriptError::warningFlag, "DOM"_ns, aDocument, |
| 126 | nsContentUtils::eDOM_PROPERTIES, |
| 127 | "PreviousInterceptCallOptionOverriddenWarning", params); |
| 128 | } |
| 129 | |
| 130 | // https://html.spec.whatwg.org/#dom-navigateevent-intercept |
| 131 | void NavigateEvent::Intercept(const NavigationInterceptOptions& aOptions, |
| 132 | ErrorResult& aRv) { |
| 133 | // Step 1 |
| 134 | if (PerformSharedChecks(aRv); aRv.Failed()) { |
| 135 | return; |
| 136 | } |
| 137 | |
| 138 | // Step 2 |
| 139 | if (!mCanIntercept) { |
| 140 | aRv.ThrowSecurityError("Event's canIntercept was initialized to false"); |
| 141 | return; |
| 142 | } |
| 143 | |
| 144 | // Step 3 |
| 145 | if (!IsBeingDispatched()) { |
| 146 | aRv.ThrowInvalidStateError("Event has never been dispatched"); |
| 147 | return; |
| 148 | } |
| 149 | |
| 150 | // Step 4 |
| 151 | MOZ_DIAGNOSTIC_ASSERT(mInterceptionState == InterceptionState::None ||do { static_assert( mozilla::detail::AssertionConditionType< decltype(mInterceptionState == InterceptionState::None || mInterceptionState == InterceptionState::Intercepted)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(mInterceptionState == InterceptionState ::None || mInterceptionState == InterceptionState::Intercepted ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "mInterceptionState == InterceptionState::None || mInterceptionState == InterceptionState::Intercepted" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 152); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "mInterceptionState == InterceptionState::None || mInterceptionState == InterceptionState::Intercepted" ")"); do { MOZ_CrashSequence(__null, 152); __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
| 152 | mInterceptionState == InterceptionState::Intercepted)do { static_assert( mozilla::detail::AssertionConditionType< decltype(mInterceptionState == InterceptionState::None || mInterceptionState == InterceptionState::Intercepted)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(mInterceptionState == InterceptionState ::None || mInterceptionState == InterceptionState::Intercepted ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "mInterceptionState == InterceptionState::None || mInterceptionState == InterceptionState::Intercepted" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 152); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "mInterceptionState == InterceptionState::None || mInterceptionState == InterceptionState::Intercepted" ")"); do { MOZ_CrashSequence(__null, 152); __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
| 153 | |
| 154 | // Step 5 |
| 155 | mInterceptionState = InterceptionState::Intercepted; |
| 156 | |
| 157 | // Step 6 |
| 158 | if (aOptions.mHandler.WasPassed()) { |
| 159 | mNavigationHandlerList.AppendElement( |
| 160 | aOptions.mHandler.InternalValue().get()); |
| 161 | } |
| 162 | |
| 163 | // Step 7 |
| 164 | if (aOptions.mFocusReset.WasPassed()) { |
| 165 | // Step 7.1 |
| 166 | if (mFocusResetBehavior && |
| 167 | *mFocusResetBehavior != aOptions.mFocusReset.Value()) { |
| 168 | RefPtr<Document> document = GetDocument(); |
| 169 | MaybeReportWarningToConsole(document, u"focusReset"_ns, |
| 170 | *mFocusResetBehavior, |
| 171 | aOptions.mFocusReset.Value()); |
| 172 | } |
| 173 | |
| 174 | // Step 7.2 |
| 175 | mFocusResetBehavior.emplace(aOptions.mFocusReset.Value()); |
| 176 | } |
| 177 | |
| 178 | // Step 8 |
| 179 | if (aOptions.mScroll.WasPassed()) { |
| 180 | // Step 8.1 |
| 181 | if (mScrollBehavior && *mScrollBehavior != aOptions.mScroll.Value()) { |
| 182 | RefPtr<Document> document = GetDocument(); |
| 183 | MaybeReportWarningToConsole(document, u"scroll"_ns, *mScrollBehavior, |
| 184 | aOptions.mScroll.Value()); |
| 185 | } |
| 186 | |
| 187 | // Step 8.2 |
| 188 | mScrollBehavior.emplace(aOptions.mScroll.Value()); |
| 189 | } |
| 190 | } |
| 191 | |
| 192 | // https://html.spec.whatwg.org/#dom-navigateevent-scroll |
| 193 | void NavigateEvent::Scroll(ErrorResult& aRv) { |
| 194 | // Step 1 |
| 195 | if (PerformSharedChecks(aRv); aRv.Failed()) { |
| 196 | return; |
| 197 | } |
| 198 | |
| 199 | // Step 2 |
| 200 | if (mInterceptionState != InterceptionState::Committed) { |
| 201 | aRv.ThrowInvalidStateError("NavigateEvent was not committed"); |
| 202 | return; |
| 203 | } |
| 204 | |
| 205 | // Step 3 |
| 206 | ProcessScrollBehavior(); |
| 207 | } |
| 208 | |
| 209 | NavigateEvent::NavigateEvent(EventTarget* aOwner) |
| 210 | : Event(aOwner, nullptr, nullptr) { |
| 211 | mozilla::HoldJSObjects(this); |
| 212 | } |
| 213 | |
| 214 | NavigateEvent::~NavigateEvent() { DropJSObjects(this); } |
| 215 | |
| 216 | void NavigateEvent::InitNavigateEvent(const NavigateEventInit& aEventInitDict) { |
| 217 | mNavigationType = aEventInitDict.mNavigationType; |
| 218 | mDestination = aEventInitDict.mDestination; |
| 219 | mCanIntercept = aEventInitDict.mCanIntercept; |
| 220 | mUserInitiated = aEventInitDict.mUserInitiated; |
| 221 | mHashChange = aEventInitDict.mHashChange; |
| 222 | mSignal = aEventInitDict.mSignal; |
| 223 | mFormData = aEventInitDict.mFormData; |
| 224 | mDownloadRequest = aEventInitDict.mDownloadRequest; |
| 225 | mInfo = aEventInitDict.mInfo; |
| 226 | mHasUAVisualTransition = aEventInitDict.mHasUAVisualTransition; |
| 227 | mSourceElement = aEventInitDict.mSourceElement; |
| 228 | } |
| 229 | |
| 230 | void NavigateEvent::SetCanIntercept(bool aCanIntercept) { |
| 231 | mCanIntercept = aCanIntercept; |
| 232 | } |
| 233 | |
| 234 | enum NavigateEvent::InterceptionState NavigateEvent::InterceptionState() const { |
| 235 | return mInterceptionState; |
| 236 | } |
| 237 | |
| 238 | void NavigateEvent::SetInterceptionState( |
| 239 | enum InterceptionState aInterceptionState) { |
| 240 | mInterceptionState = aInterceptionState; |
| 241 | } |
| 242 | |
| 243 | nsIStructuredCloneContainer* NavigateEvent::ClassicHistoryAPIState() const { |
| 244 | return mClassicHistoryAPIState; |
| 245 | } |
| 246 | |
| 247 | nsTArray<RefPtr<NavigationInterceptHandler>>& |
| 248 | NavigateEvent::NavigationHandlerList() { |
| 249 | return mNavigationHandlerList; |
| 250 | } |
| 251 | |
| 252 | AbortController* NavigateEvent::AbortController() const { |
| 253 | return mAbortController; |
| 254 | } |
| 255 | |
| 256 | bool NavigateEvent::IsBeingDispatched() const { |
| 257 | return mEvent->mFlags.mIsBeingDispatched; |
| 258 | } |
| 259 | |
| 260 | // https://html.spec.whatwg.org/#navigateevent-finish |
| 261 | void NavigateEvent::Finish(bool aDidFulfill) { |
| 262 | switch (mInterceptionState) { |
| 263 | // Step 1 |
| 264 | case InterceptionState::Intercepted: |
| 265 | case InterceptionState::Finished: |
| 266 | MOZ_DIAGNOSTIC_ASSERT(false)do { static_assert( mozilla::detail::AssertionConditionType< decltype(false)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("false", "/root/firefox-clang/dom/events/NavigateEvent.cpp" , 266); AnnotateMozCrashReason("MOZ_DIAGNOSTIC_ASSERT" "(" "false" ")"); do { MOZ_CrashSequence(__null, 266); __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
| 267 | break; |
| 268 | // Step 2 |
| 269 | case InterceptionState::None: |
| 270 | return; |
| 271 | default: |
| 272 | break; |
| 273 | } |
| 274 | |
| 275 | // Step 3 |
| 276 | PotentiallyResetFocus(); |
| 277 | |
| 278 | // Step 4 |
| 279 | if (aDidFulfill) { |
| 280 | PotentiallyProcessScrollBehavior(); |
| 281 | } |
| 282 | |
| 283 | // Step 5 |
| 284 | mInterceptionState = InterceptionState::Finished; |
| 285 | } |
| 286 | |
| 287 | // https://html.spec.whatwg.org/#navigateevent-perform-shared-checks |
| 288 | void NavigateEvent::PerformSharedChecks(ErrorResult& aRv) { |
| 289 | // Step 1 |
| 290 | if (RefPtr document = GetDocument(); |
| 291 | !document || !document->IsFullyActive()) { |
| 292 | aRv.ThrowInvalidStateError("Document isn't fully active"); |
| 293 | return; |
| 294 | } |
| 295 | |
| 296 | // Step 2 |
| 297 | if (!IsTrusted()) { |
| 298 | aRv.ThrowSecurityError("Event is untrusted"); |
| 299 | return; |
| 300 | } |
| 301 | |
| 302 | // Step 3 |
| 303 | if (DefaultPrevented()) { |
| 304 | aRv.ThrowInvalidStateError("Event was canceled"); |
| 305 | } |
| 306 | } |
| 307 | |
| 308 | // https://html.spec.whatwg.org/#potentially-reset-the-focus |
| 309 | void NavigateEvent::PotentiallyResetFocus() { |
| 310 | // Step 1 |
| 311 | MOZ_DIAGNOSTIC_ASSERT(mInterceptionState == InterceptionState::Committed ||do { static_assert( mozilla::detail::AssertionConditionType< decltype(mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled)>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 312); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled" ")"); do { MOZ_CrashSequence(__null, 312); __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
| 312 | mInterceptionState == InterceptionState::Scrolled)do { static_assert( mozilla::detail::AssertionConditionType< decltype(mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled)>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 312); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled" ")"); do { MOZ_CrashSequence(__null, 312); __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
| 313 | |
| 314 | // Step 2 |
| 315 | nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(GetParentObject()); |
| 316 | |
| 317 | // If we don't have a window here, there's not much we can do. This could |
| 318 | // potentially happen in a chrome context, and in the end it's just better to |
| 319 | // be sure and null check. |
| 320 | if (NS_WARN_IF(!window)NS_warn_if_impl(!window, "!window", "/root/firefox-clang/dom/events/NavigateEvent.cpp" , 320)) { |
| 321 | return; |
| 322 | } |
| 323 | |
| 324 | Navigation* navigation = window->Navigation(); |
| 325 | |
| 326 | // Step 3 |
| 327 | bool focusChanged = navigation->FocusedChangedDuringOngoingNavigation(); |
| 328 | |
| 329 | // Step 4 |
| 330 | navigation->SetFocusedChangedDuringOngoingNavigation(false); |
| 331 | |
| 332 | // Step 5 |
| 333 | if (focusChanged) { |
| 334 | return; |
| 335 | } |
| 336 | |
| 337 | // Step 6 |
| 338 | if (mFocusResetBehavior && |
| 339 | *mFocusResetBehavior == NavigationFocusReset::Manual) { |
| 340 | return; |
| 341 | } |
| 342 | |
| 343 | // Step 7 |
| 344 | Document* document = window->GetExtantDoc(); |
| 345 | |
| 346 | // If we don't have a document here, there's not much we can do. |
| 347 | if (NS_WARN_IF(!document)NS_warn_if_impl(!document, "!document", "/root/firefox-clang/dom/events/NavigateEvent.cpp" , 347)) { |
| 348 | return; |
| 349 | } |
| 350 | |
| 351 | // Step 8 |
| 352 | Element* focusTarget = document->GetDocumentElement(); |
| 353 | if (focusTarget) { |
| 354 | focusTarget = |
| 355 | focusTarget->GetAutofocusDelegate(mozilla::IsFocusableFlags(0)); |
| 356 | } |
| 357 | |
| 358 | // Step 9 |
| 359 | if (!focusTarget) { |
| 360 | focusTarget = document->GetBody(); |
| 361 | } |
| 362 | |
| 363 | // Step 10 |
| 364 | if (!focusTarget) { |
| 365 | focusTarget = document->GetDocumentElement(); |
Value stored to 'focusTarget' is never read | |
| 366 | } |
| 367 | |
| 368 | // The remaining steps will be implemented in Bug 1948253. |
| 369 | |
| 370 | // Step 11: Run the focusing steps for focusTarget, with document's viewport |
| 371 | // as the fallback target. |
| 372 | // Step 12: Move the sequential focus navigation starting point to |
| 373 | // focusTarget. |
| 374 | } |
| 375 | |
| 376 | // https://html.spec.whatwg.org/#potentially-process-scroll-behavior |
| 377 | void NavigateEvent::PotentiallyProcessScrollBehavior() { |
| 378 | // Step 1 |
| 379 | MOZ_DIAGNOSTIC_ASSERT(mInterceptionState == InterceptionState::Committed ||do { static_assert( mozilla::detail::AssertionConditionType< decltype(mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled)>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 380); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled" ")"); do { MOZ_CrashSequence(__null, 380); __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
| 380 | mInterceptionState == InterceptionState::Scrolled)do { static_assert( mozilla::detail::AssertionConditionType< decltype(mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled)>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 380); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "mInterceptionState == InterceptionState::Committed || mInterceptionState == InterceptionState::Scrolled" ")"); do { MOZ_CrashSequence(__null, 380); __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
| 381 | |
| 382 | // Step 2 |
| 383 | if (mInterceptionState == InterceptionState::Scrolled) { |
| 384 | return; |
| 385 | } |
| 386 | |
| 387 | // Step 3 |
| 388 | if (mScrollBehavior && *mScrollBehavior == NavigationScrollBehavior::Manual) { |
| 389 | return; |
| 390 | } |
| 391 | |
| 392 | // Process 4 |
| 393 | ProcessScrollBehavior(); |
| 394 | } |
| 395 | |
| 396 | // Here we want to scroll to the beginning of the document, as described in |
| 397 | // https://drafts.csswg.org/cssom-view/#scroll-to-the-beginning-of-the-document |
| 398 | MOZ_CAN_RUN_SCRIPT |
| 399 | static void ScrollToBeginningOfDocument(Document& aDocument) { |
| 400 | RefPtr<PresShell> presShell = aDocument.GetPresShell(); |
| 401 | if (!presShell) { |
| 402 | return; |
| 403 | } |
| 404 | |
| 405 | RefPtr<Element> rootElement = aDocument.GetRootElement(); |
| 406 | ScrollAxis vertical(WhereToScroll::Start, WhenToScroll::Always); |
| 407 | presShell->ScrollContentIntoView(rootElement, vertical, ScrollAxis(), |
| 408 | ScrollFlags::TriggeredByScript); |
| 409 | } |
| 410 | |
| 411 | // https://html.spec.whatwg.org/#restore-scroll-position-data |
| 412 | static void RestoreScrollPositionData(Document* aDocument) { |
| 413 | if (!aDocument || aDocument->HasBeenScrolled()) { |
| 414 | return; |
| 415 | } |
| 416 | |
| 417 | // This will be implemented in Bug 1955947. Make sure to move this to |
| 418 | // `SessionHistoryEntry`/`SessionHistoryInfo`. |
| 419 | } |
| 420 | |
| 421 | // https://html.spec.whatwg.org/#process-scroll-behavior |
| 422 | void NavigateEvent::ProcessScrollBehavior() { |
| 423 | // Step 1 |
| 424 | MOZ_DIAGNOSTIC_ASSERT(mInterceptionState == InterceptionState::Committed)do { static_assert( mozilla::detail::AssertionConditionType< decltype(mInterceptionState == InterceptionState::Committed)> ::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(mInterceptionState == InterceptionState::Committed)) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("mInterceptionState == InterceptionState::Committed" , "/root/firefox-clang/dom/events/NavigateEvent.cpp", 424); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "mInterceptionState == InterceptionState::Committed" ")"); do { MOZ_CrashSequence(__null, 424); __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
| 425 | |
| 426 | // Step 2 |
| 427 | mInterceptionState = InterceptionState::Scrolled; |
| 428 | |
| 429 | // Step 3 |
| 430 | if (mNavigationType == NavigationType::Traverse || |
| 431 | mNavigationType == NavigationType::Reload) { |
| 432 | RefPtr<Document> document = GetDocument(); |
| 433 | RestoreScrollPositionData(document); |
| 434 | return; |
| 435 | } |
| 436 | |
| 437 | // Step 4.1 |
| 438 | RefPtr<Document> document = GetDocument(); |
| 439 | // If there is no document there's not much to do. |
| 440 | if (!document) { |
| 441 | return; |
| 442 | } |
| 443 | |
| 444 | // Step 4.2 |
| 445 | nsAutoCString ref; |
| 446 | if (nsIURI* uri = document->GetDocumentURI(); |
| 447 | NS_SUCCEEDED(uri->GetRef(ref))((bool)(__builtin_expect(!!(!NS_FAILED_impl(uri->GetRef(ref ))), 1))) && |
| 448 | !nsContentUtils::GetTargetElement(document, NS_ConvertUTF8toUTF16(ref))) { |
| 449 | ScrollToBeginningOfDocument(*document); |
| 450 | return; |
| 451 | } |
| 452 | |
| 453 | // Step 4.3 |
| 454 | document->ScrollToRef(); |
| 455 | } |
| 456 | } // namespace mozilla::dom |