/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim:set ts=2 sw=2 sts=2 et cindent: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef mozilla_dom_NavigateEvent_h___ #define mozilla_dom_NavigateEvent_h___ #include "js/RootingAPI.h" #include "js/Value.h" #include "mozilla/AlreadyAddRefed.h" #include "mozilla/RefPtr.h" #include "mozilla/dom/AbortController.h" #include "mozilla/dom/BindingDeclarations.h" #include "mozilla/dom/Event.h" #include "mozilla/dom/NavigateEventBinding.h" #include "nsCycleCollectionParticipant.h" namespace mozilla::dom { class AbortController; class AbortSignal; class FormData; class NavigationDestination; struct NavigationInterceptOptions; enum class NavigationType : uint8_t; // https://html.spec.whatwg.org/#the-navigateevent-interface class NavigateEvent final : public Event { public: NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(NavigateEvent, Event) virtual JSObject* WrapObjectInternal( JSContext* aCx, JS::Handle aGivenProto) override; static already_AddRefed Constructor( const GlobalObject& aGlobal, const nsAString& aType, const NavigateEventInit& aEventInitDict); static already_AddRefed Constructor( EventTarget* aEventTarget, const nsAString& aType, const NavigateEventInit& aEventInitDict); static already_AddRefed Constructor( EventTarget* aEventTarget, const nsAString& aType, const NavigateEventInit& aEventInitDict, nsIStructuredCloneContainer* aClassicHistoryAPIState, AbortController* aAbortController); enum NavigationType NavigationType() const; already_AddRefed Destination() const; bool CanIntercept() const; bool UserInitiated() const; bool HashChange() const; AbortSignal* Signal() const; already_AddRefed GetFormData() const; void GetDownloadRequest(nsAString& aDownloadRequest) const; void GetInfo(JSContext* aCx, JS::MutableHandle aInfo) const; bool HasUAVisualTransition() const; Element* GetSourceElement() const; void Intercept(const NavigationInterceptOptions& aOptions, ErrorResult& aRv); MOZ_CAN_RUN_SCRIPT void Scroll(ErrorResult& aRv); void InitNavigateEvent(const NavigateEventInit& aEventInitDict); void SetCanIntercept(bool aCanIntercept); enum class InterceptionState : uint8_t { None, Intercepted, Committed, Scrolled, Finished }; InterceptionState InterceptionState() const; void SetInterceptionState(enum InterceptionState aInterceptionState); nsIStructuredCloneContainer* ClassicHistoryAPIState() const; nsTArray>& NavigationHandlerList(); dom::AbortController* AbortController() const; bool IsBeingDispatched() const; MOZ_CAN_RUN_SCRIPT void Finish(bool aDidFulfill); private: void PerformSharedChecks(ErrorResult& aRv); void PotentiallyResetFocus(); MOZ_CAN_RUN_SCRIPT void PotentiallyProcessScrollBehavior(); MOZ_CAN_RUN_SCRIPT void ProcessScrollBehavior(); explicit NavigateEvent(EventTarget* aOwner); ~NavigateEvent(); enum NavigationType mNavigationType {}; RefPtr mDestination; bool mCanIntercept = false; bool mUserInitiated = false; bool mHashChange = false; RefPtr mSignal; RefPtr mFormData; nsString mDownloadRequest; JS::Heap mInfo; bool mHasUAVisualTransition = false; RefPtr mSourceElement; // https://html.spec.whatwg.org/multipage/nav-history-apis.html#the-navigateevent-interface:navigateevent-2 enum InterceptionState mInterceptionState = InterceptionState::None; // https://html.spec.whatwg.org/multipage/nav-history-apis.html#the-navigateevent-interface:navigateevent-3 nsTArray> mNavigationHandlerList; // https://html.spec.whatwg.org/multipage/nav-history-apis.html#the-navigateevent-interface:navigateevent-4 Maybe mFocusResetBehavior; // https://html.spec.whatwg.org/multipage/nav-history-apis.html#the-navigateevent-interface:navigateevent-5 Maybe mScrollBehavior; // https://html.spec.whatwg.org/multipage/nav-history-apis.html#the-navigateevent-interface:navigateevent-6 RefPtr mAbortController; // https://html.spec.whatwg.org/multipage/nav-history-apis.html#the-navigateevent-interface:navigateevent-7 nsCOMPtr mClassicHistoryAPIState; }; } // namespace mozilla::dom #endif // mozilla_dom_NavigateEvent_h___