From 07907b44d5a0c1a961ce709b2e7416e5355e6df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Sat, 10 Mar 2018 05:24:24 +0100 Subject: [PATCH] Bug 1444580: Devirtualize autofocus and navigation timing stuff. r=smaug MozReview-Commit-ID: K5Y9lxSJgOG --- dom/base/nsDocument.cpp | 29 +++++++++++------------------ dom/base/nsDocument.h | 22 ---------------------- dom/base/nsIDocument.h | 27 ++++++++++++++++++++++----- 3 files changed, 33 insertions(+), 45 deletions(-) diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp index 3649c9def4e1..9df8a5a2e0a2 100644 --- a/dom/base/nsDocument.cpp +++ b/dom/base/nsDocument.cpp @@ -1490,6 +1490,10 @@ nsIDocument::nsIDocument() mStyleSetFilled(false), mSSApplicableStateNotificationPending(false), mMayHaveTitleElement(false), + mDOMLoadingSet(false), + mDOMInteractiveSet(false), + mDOMCompleteSet(false), + mAutoFocusFired(false), mIsScopedStyleEnabled(eScopedStyle_Unknown), mCompatMode(eCompatibility_FullStandards), mReadyState(ReadyState::READYSTATE_UNINITIALIZED), @@ -1568,10 +1572,6 @@ nsDocument::nsDocument(const char* aContentType) #ifdef DEBUG , mWillReparent(false) #endif - , mDOMLoadingSet(false) - , mDOMInteractiveSet(false) - , mDOMCompleteSet(false) - , mAutoFocusFired(false) { SetContentTypeInternal(nsDependentCString(aContentType)); @@ -8891,7 +8891,7 @@ nsDocument::CloneDocHelper(nsDocument* clone, bool aPreallocateChildren) const } void -nsDocument::SetReadyStateInternal(ReadyState rs) +nsIDocument::SetReadyStateInternal(ReadyState rs) { mReadyState = rs; if (rs == READYSTATE_UNINITIALIZED) { @@ -9413,7 +9413,7 @@ private: }; void -nsDocument::SetAutoFocusElement(Element* aAutoFocusElement) +nsIDocument::SetAutoFocusElement(Element* aAutoFocusElement) { if (mAutoFocusFired) { // Too late. @@ -9431,7 +9431,7 @@ nsDocument::SetAutoFocusElement(Element* aAutoFocusElement) } void -nsDocument::TriggerAutoFocus() +nsIDocument::TriggerAutoFocus() { if (mAutoFocusFired) { return; @@ -9799,20 +9799,13 @@ nsDocument::GetStateObject(nsIVariant** aState) return NS_OK; } -nsDOMNavigationTiming* -nsDocument::GetNavigationTiming() const -{ - return mTiming; -} - -nsresult -nsDocument::SetNavigationTiming(nsDOMNavigationTiming* aTiming) +void +nsIDocument::SetNavigationTiming(nsDOMNavigationTiming* aTiming) { mTiming = aTiming; if (!mLoadingTimeStamp.IsNull() && mTiming) { - mTiming->SetDOMLoadingTimeStamp(nsIDocument::GetDocumentURI(), mLoadingTimeStamp); + mTiming->SetDOMLoadingTimeStamp(GetDocumentURI(), mLoadingTimeStamp); } - return NS_OK; } Element* @@ -13408,7 +13401,7 @@ nsIDocument::GetSelection(ErrorResult& aRv) } void -nsDocument::RecordNavigationTiming(ReadyState aReadyState) +nsIDocument::RecordNavigationTiming(ReadyState aReadyState) { if (!XRE_IsContentProcess()) { return; diff --git a/dom/base/nsDocument.h b/dom/base/nsDocument.h index 3eebdbe7b442..3f4bb9c96a22 100644 --- a/dom/base/nsDocument.h +++ b/dom/base/nsDocument.h @@ -406,8 +406,6 @@ public: virtual void BeginLoad() override; virtual void EndLoad() override; - virtual void SetReadyStateInternal(ReadyState rs) override; - virtual void FlushExternalResources(mozilla::FlushType aType) override; virtual void SetXMLDeclaration(const char16_t *aVersion, const char16_t *aEncoding, @@ -659,9 +657,6 @@ public: // Only BlockOnload should call this! void AsyncBlockOnload(); - virtual void SetAutoFocusElement(Element* aAutoFocusElement) override; - virtual void TriggerAutoFocus() override; - virtual void SetScrollToRef(nsIURI *aDocumentURI) override; virtual void ScrollToRef() override; virtual void ResetScrolledToRefAlready() override; @@ -689,9 +684,6 @@ public: virtual nsresult GetStateObject(nsIVariant** aResult) override; - virtual nsDOMNavigationTiming* GetNavigationTiming() const override; - virtual nsresult SetNavigationTiming(nsDOMNavigationTiming* aTiming) override; - virtual Element* FindImageMap(const nsAString& aNormalizedMapName) override; virtual nsTArray GetFullscreenStack() const override; @@ -897,9 +889,6 @@ public: nsClassHashtable mRadioGroups; - // Recorded time of change to 'loading' state. - mozilla::TimeStamp mLoadingTimeStamp; - bool mHasWarnedAboutBoxObjects:1; bool mDelayFrameLoaderInitialization:1; @@ -942,8 +931,6 @@ public: nsCOMPtr mApplicationCache; nsCOMPtr mFirstBaseNodeWithHref; - - RefPtr mTiming; private: friend class nsUnblockOnloadEvent; // Recomputes the visibility state but doesn't set the new value. @@ -1007,8 +994,6 @@ private: RefPtr mImageMaps; - nsWeakPtr mAutoFocusElement; - nsCString mScrollToRef; uint8_t mScrolledToRefAlready : 1; uint8_t mChangeScrollPosWhenScrollingToRef : 1; @@ -1037,13 +1022,6 @@ private: public: bool mWillReparent; #endif - -private: - void RecordNavigationTiming(ReadyState aReadyState); - bool mDOMLoadingSet : 1; - bool mDOMInteractiveSet : 1; - bool mDOMCompleteSet : 1; - bool mAutoFocusFired : 1; }; class nsDocumentOnStack diff --git a/dom/base/nsIDocument.h b/dom/base/nsIDocument.h index b988624a768b..061bdc8f8dfc 100644 --- a/dom/base/nsIDocument.h +++ b/dom/base/nsIDocument.h @@ -1754,7 +1754,7 @@ public: virtual void EndLoad() = 0; enum ReadyState { READYSTATE_UNINITIALIZED = 0, READYSTATE_LOADING = 1, READYSTATE_INTERACTIVE = 3, READYSTATE_COMPLETE = 4}; - virtual void SetReadyStateInternal(ReadyState rs) = 0; + void SetReadyStateInternal(ReadyState rs); ReadyState GetReadyStateEnum() { return mReadyState; @@ -2707,8 +2707,8 @@ public: virtual nsISupports* GetCurrentContentSink() = 0; - virtual void SetAutoFocusElement(Element* aAutoFocusElement) = 0; - virtual void TriggerAutoFocus() = 0; + void SetAutoFocusElement(Element* aAutoFocusElement); + void TriggerAutoFocus(); virtual void SetScrollToRef(nsIURI *aDocumentURI) = 0; virtual void ScrollToRef() = 0; @@ -2770,9 +2770,12 @@ public: virtual nsresult GetStateObject(nsIVariant** aResult) = 0; - virtual nsDOMNavigationTiming* GetNavigationTiming() const = 0; + nsDOMNavigationTiming* GetNavigationTiming() const + { + return mTiming; + } - virtual nsresult SetNavigationTiming(nsDOMNavigationTiming* aTiming) = 0; + void SetNavigationTiming(nsDOMNavigationTiming* aTiming); virtual Element* FindImageMap(const nsAString& aNormalizedMapName) = 0; @@ -3309,6 +3312,8 @@ protected: // the classification lists and the classification of parent documents. mozilla::dom::FlashClassification ComputeFlashClassification(); + void RecordNavigationTiming(ReadyState aReadyState); + bool GetUseCounter(mozilla::UseCounter aUseCounter) { return mUseCounters[aUseCounter]; @@ -3737,6 +3742,11 @@ protected: // bound to it bool mMayHaveTitleElement: 1; + bool mDOMLoadingSet: 1; + bool mDOMInteractiveSet: 1; + bool mDOMCompleteSet: 1; + bool mAutoFocusFired: 1; + // Whether