author | Olli Pettay <Olli.Pettay@helsinki.fi> |
Thu, 05 Oct 2017 16:45:26 +0300 | |
changeset 384695 | ec392f5fdb2e5f124bb5d90adb0f71b6d928e0fb |
parent 384694 | ebd010e955f77a1aaebbe32841913677579ad33c |
child 384696 | 960319673e9c1eb44092f9040c12dc5c5aa5acdc |
push id | 95828 |
push user | opettay@mozilla.com |
push date | Thu, 05 Oct 2017 17:56:35 +0000 |
treeherder | mozilla-inbound@960319673e9c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | baku |
bugs | 1405798 |
milestone | 58.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/base/nsDOMMutationObserver.h +++ b/dom/base/nsDOMMutationObserver.h @@ -21,16 +21,17 @@ #include "nsClassHashtable.h" #include "nsNodeUtils.h" #include "nsIDOMMutationEvent.h" #include "nsWrapperCache.h" #include "mozilla/dom/MutationObserverBinding.h" #include "nsIDocument.h" #include "mozilla/dom/Animation.h" #include "nsIAnimationObserver.h" +#include "nsGlobalWindow.h" class nsDOMMutationObserver; using mozilla::dom::MutationObservingInfo; class nsDOMMutationRecord final : public nsISupports, public nsWrapperCache { virtual ~nsDOMMutationRecord() {} @@ -604,21 +605,17 @@ protected: void ScheduleForRun(); void RescheduleForRun(); nsDOMMutationRecord* CurrentRecord(nsIAtom* aType); bool HasCurrentRecord(const nsAString& aType); bool Suppressed() { - if (mOwner) { - nsCOMPtr<nsIDocument> d = mOwner->GetExtantDoc(); - return d && d->IsInSyncOperation(); - } - return false; + return mOwner && nsGlobalWindow::Cast(mOwner)->IsInSyncOperation(); } static void HandleMutationsInternal(); static void AddCurrentlyHandlingObserver(nsDOMMutationObserver* aObserver, uint32_t aMutationLevel); nsCOMPtr<nsPIDOMWindowInner> mOwner;
--- a/dom/base/nsGlobalWindow.h +++ b/dom/base/nsGlobalWindow.h @@ -1308,16 +1308,21 @@ public: already_AddRefed<nsWindowRoot> GetWindowRootOuter(); already_AddRefed<nsWindowRoot> GetWindowRoot(mozilla::ErrorResult& aError); mozilla::dom::Performance* GetPerformance(); void UpdateTopInnerWindow(); + virtual bool IsInSyncOperation() override + { + return GetExtantDoc() && GetExtantDoc()->IsInSyncOperation(); + } + protected: // Web IDL helpers // Redefine the property called aPropName on this window object to be a value // property with the value aValue, much like we would do for a [Replaceable] // property in IDL. void RedefineProperty(JSContext* aCx, const char* aPropName, JS::Handle<JS::Value> aValue,
--- a/dom/base/nsIGlobalObject.h +++ b/dom/base/nsIGlobalObject.h @@ -69,16 +69,18 @@ public: void UnregisterHostObjectURI(const nsACString& aURI); // Any CC class inheriting nsIGlobalObject should call these 2 methods if it // exposes the URL API. void UnlinkHostObjectURIs(); void TraverseHostObjectURIs(nsCycleCollectionTraversalCallback &aCb); + virtual bool IsInSyncOperation() { return false; } + protected: virtual ~nsIGlobalObject(); void StartDying() { mIsDying = true; }