diff --git a/accessible/atk/moz.build b/accessible/atk/moz.build index cfd826711040..f5abe301fd55 100644 --- a/accessible/atk/moz.build +++ b/accessible/atk/moz.build @@ -51,3 +51,5 @@ if CONFIG['MOZ_ENABLE_DBUS']: CXXFLAGS += CONFIG['MOZ_DBUS_CFLAGS'] include('/ipc/chromium/chromium-config.mozbuild') + +FAIL_ON_WARNINGS = True diff --git a/accessible/ipc/moz.build b/accessible/ipc/moz.build index 340e79bf2984..9fa6ab68ab5d 100644 --- a/accessible/ipc/moz.build +++ b/accessible/ipc/moz.build @@ -29,3 +29,5 @@ if CONFIG['ACCESSIBILITY']: FINAL_LIBRARY = 'xul' include('/ipc/chromium/chromium-config.mozbuild') + +FAIL_ON_WARNINGS = True diff --git a/accessible/other/moz.build b/accessible/other/moz.build index 9870c39fa855..4c5d591183a7 100644 --- a/accessible/other/moz.build +++ b/accessible/other/moz.build @@ -22,3 +22,5 @@ LOCAL_INCLUDES += [ ] FINAL_LIBRARY = 'xul' + +FAIL_ON_WARNINGS = True diff --git a/accessible/windows/ia2/moz.build b/accessible/windows/ia2/moz.build index 2c0ef388c33b..02faea6fecb4 100644 --- a/accessible/windows/ia2/moz.build +++ b/accessible/windows/ia2/moz.build @@ -50,3 +50,5 @@ FINAL_LIBRARY = 'xul' # macros which conflicts with std::min/max. Suppress the macros: if CONFIG['OS_ARCH'] == 'WINNT': DEFINES['NOMINMAX'] = True + +FAIL_ON_WARNINGS = True diff --git a/accessible/windows/msaa/moz.build b/accessible/windows/msaa/moz.build index 35c35e303ef2..dc88de688b79 100644 --- a/accessible/windows/msaa/moz.build +++ b/accessible/windows/msaa/moz.build @@ -59,3 +59,5 @@ LOCAL_INCLUDES += [ include('/ipc/chromium/chromium-config.mozbuild') FINAL_LIBRARY = 'xul' + +FAIL_ON_WARNINGS = True diff --git a/accessible/windows/sdn/moz.build b/accessible/windows/sdn/moz.build index 6bbe061942c5..9dba32e8378d 100644 --- a/accessible/windows/sdn/moz.build +++ b/accessible/windows/sdn/moz.build @@ -24,3 +24,5 @@ LOCAL_INCLUDES += [ DEFINES['NOMINMAX'] = True FINAL_LIBRARY = 'xul' + +FAIL_ON_WARNINGS = True diff --git a/accessible/windows/uia/moz.build b/accessible/windows/uia/moz.build index 6f98f6882a6c..c50e52807121 100644 --- a/accessible/windows/uia/moz.build +++ b/accessible/windows/uia/moz.build @@ -23,3 +23,5 @@ FINAL_LIBRARY = 'xul' # macros which conflicts with std::min/max. Suppress the macros: if CONFIG['OS_ARCH'] == 'WINNT': DEFINES['NOMINMAX'] = True + +FAIL_ON_WARNINGS = True diff --git a/accessible/xpcom/moz.build b/accessible/xpcom/moz.build index 4e4a6fff9492..b6dfff97c793 100644 --- a/accessible/xpcom/moz.build +++ b/accessible/xpcom/moz.build @@ -47,3 +47,6 @@ else: ] FINAL_LIBRARY = 'xul' + +if CONFIG['GNU_CXX']: + FAIL_ON_WARNINGS = True diff --git a/b2g/app/b2g.js b/b2g/app/b2g.js index 87884cbcca1b..e97b74bb2771 100644 --- a/b2g/app/b2g.js +++ b/b2g/app/b2g.js @@ -1073,3 +1073,8 @@ pref("dom.mozSettings.SettingsDB.verbose.enabled", false); pref("dom.mozSettings.SettingsManager.verbose.enabled", false); pref("dom.mozSettings.SettingsRequestManager.verbose.enabled", false); pref("dom.mozSettings.SettingsService.verbose.enabled", false); + +// Controlling whether we want to allow forcing some Settings +// IndexedDB transactions to be opened as readonly or keep everything as +// readwrite. +pref("dom.mozSettings.allowForceReadOnly", false); diff --git a/b2g/app/moz.build b/b2g/app/moz.build index 31fe3ad6c52f..c6736b3df2dc 100644 --- a/b2g/app/moz.build +++ b/b2g/app/moz.build @@ -74,3 +74,5 @@ if CONFIG['OS_ARCH'] == 'WINNT': OS_LIBS += [ 'version', ] + +FAIL_ON_WARNINGS = True diff --git a/b2g/gaia/moz.build b/b2g/gaia/moz.build index c0c064249098..c5f735c5b980 100644 --- a/b2g/gaia/moz.build +++ b/b2g/gaia/moz.build @@ -18,3 +18,5 @@ else: ] DEFINES['B2G_NAME'] = '"%s-bin%s"' % (PROGRAM, CONFIG['BIN_SUFFIX']) DEFINES['GAIA_PATH'] = '"gaia/profile"' + +FAIL_ON_WARNINGS = True diff --git a/browser/app/moz.build b/browser/app/moz.build index c7ce8a569438..097bad1738d7 100644 --- a/browser/app/moz.build +++ b/browser/app/moz.build @@ -72,3 +72,5 @@ if CONFIG['HAVE_CLOCK_MONOTONIC']: OS_LIBS += CONFIG['REALTIME_LIBS'] JAR_MANIFESTS += ['jar.mn'] + +FAIL_ON_WARNINGS = True diff --git a/browser/components/about/moz.build b/browser/components/about/moz.build index 95a8451bafe2..f05eaa3c67ec 100644 --- a/browser/components/about/moz.build +++ b/browser/components/about/moz.build @@ -17,3 +17,5 @@ FINAL_LIBRARY = 'browsercomps' LOCAL_INCLUDES += [ '../build', ] + +FAIL_ON_WARNINGS = True diff --git a/browser/components/build/moz.build b/browser/components/build/moz.build index f8073907eacb..132362298e9d 100644 --- a/browser/components/build/moz.build +++ b/browser/components/build/moz.build @@ -34,3 +34,5 @@ if CONFIG['OS_ARCH'] == 'WINNT': # GTK2: Need to link with glib for GNOME shell service if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('cocoa', 'gtk2', 'gtk3'): OS_LIBS += CONFIG['TK_LIBS'] + +FAIL_ON_WARNINGS = True diff --git a/browser/components/dirprovider/moz.build b/browser/components/dirprovider/moz.build index 0d772bb57994..5295f3780a93 100644 --- a/browser/components/dirprovider/moz.build +++ b/browser/components/dirprovider/moz.build @@ -21,3 +21,5 @@ FINAL_LIBRARY = 'browsercomps' LOCAL_INCLUDES += [ '../build' ] + +FAIL_ON_WARNINGS = True diff --git a/browser/components/feeds/moz.build b/browser/components/feeds/moz.build index 429339039a9e..251d0e6a3d98 100644 --- a/browser/components/feeds/moz.build +++ b/browser/components/feeds/moz.build @@ -39,3 +39,5 @@ for var in ('MOZ_APP_NAME', 'MOZ_MACBUNDLE_NAME'): LOCAL_INCLUDES += [ '../build', ] + +FAIL_ON_WARNINGS = True diff --git a/browser/components/migration/moz.build b/browser/components/migration/moz.build index ca9aea4c28e8..1a62b92cda13 100644 --- a/browser/components/migration/moz.build +++ b/browser/components/migration/moz.build @@ -52,3 +52,5 @@ EXTRA_PP_JS_MODULES += [ ] FINAL_LIBRARY = 'browsercomps' + +FAIL_ON_WARNINGS = True diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build index dc03f35045a1..9dae3331c2aa 100644 --- a/browser/components/shell/moz.build +++ b/browser/components/shell/moz.build @@ -49,3 +49,5 @@ for var in ('MOZ_APP_NAME', 'MOZ_APP_VERSION'): DEFINES[var] = '"%s"' % CONFIG[var] CXXFLAGS += CONFIG['TK_CFLAGS'] + +FAIL_ON_WARNINGS = True diff --git a/docshell/build/moz.build b/docshell/build/moz.build index 653f4837b6bf..a512be066b54 100644 --- a/docshell/build/moz.build +++ b/docshell/build/moz.build @@ -24,3 +24,5 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa": LOCAL_INCLUDES += ['/uriloader/exthandler/mac'] FINAL_LIBRARY = 'xul' + +FAIL_ON_WARNINGS = True diff --git a/dom/animation/AnimationPlayer.cpp b/dom/animation/AnimationPlayer.cpp index 3c5d5e9721c6..01fdf3720d93 100644 --- a/dom/animation/AnimationPlayer.cpp +++ b/dom/animation/AnimationPlayer.cpp @@ -11,14 +11,19 @@ #include "nsIDocument.h" // For nsIDocument #include "nsIPresShell.h" // For nsIPresShell #include "nsLayoutUtils.h" // For PostRestyleEvent (remove after bug 1073336) +#include "PendingPlayerTracker.h" // For PendingPlayerTracker namespace mozilla { namespace dom { -NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(AnimationPlayer, mTimeline, mSource) - -NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(AnimationPlayer, AddRef) -NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(AnimationPlayer, Release) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(AnimationPlayer, mTimeline, + mSource, mReady) +NS_IMPL_CYCLE_COLLECTING_ADDREF(AnimationPlayer) +NS_IMPL_CYCLE_COLLECTING_RELEASE(AnimationPlayer) +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(AnimationPlayer) + NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY + NS_INTERFACE_MAP_ENTRY(nsISupports) +NS_INTERFACE_MAP_END JSObject* AnimationPlayer::WrapObject(JSContext* aCx) @@ -47,6 +52,10 @@ AnimationPlayer::GetCurrentTime() const AnimationPlayState AnimationPlayer::PlayState() const { + if (mIsPending) { + return AnimationPlayState::Pending; + } + Nullable currentTime = GetCurrentTime(); if (currentTime.IsNull()) { return AnimationPlayState::Idle; @@ -63,6 +72,26 @@ AnimationPlayer::PlayState() const return AnimationPlayState::Running; } +Promise* +AnimationPlayer::GetReady(ErrorResult& aRv) +{ + // Lazily create the ready promise if it doesn't exist + if (!mReady) { + nsIGlobalObject* global = mTimeline->GetParentObject(); + if (global) { + mReady = Promise::Create(global, aRv); + if (mReady && PlayState() != AnimationPlayState::Pending) { + mReady->MaybeResolve(this); + } + } + } + if (!mReady) { + aRv.Throw(NS_ERROR_FAILURE); + } + + return mReady; +} + void AnimationPlayer::Play() { @@ -110,7 +139,7 @@ AnimationPlayer::Tick() } void -AnimationPlayer::ResolveStartTime() +AnimationPlayer::StartNow() { // Currently we only expect this method to be called when we are in the // middle of initiating/resuming playback so we should have an unresolved @@ -125,6 +154,24 @@ AnimationPlayer::ResolveStartTime() MOZ_ASSERT(!readyTime.IsNull(), "Missing or inactive timeline"); mStartTime.SetValue(readyTime.Value() - mHoldTime.Value()); mHoldTime.SetNull(); + + if (mReady) { + mReady->MaybeResolve(this); + } +} + +void +AnimationPlayer::Cancel() +{ + if (mIsPending) { + CancelPendingPlay(); + if (mReady) { + mReady->MaybeReject(NS_ERROR_DOM_ABORT_ERR); + } + } + + mHoldTime.SetNull(); + mStartTime.SetNull(); } bool @@ -173,7 +220,8 @@ AnimationPlayer::ComposeStyle(nsRefPtr& aStyleRule, } AnimationPlayState playState = PlayState(); - if (playState == AnimationPlayState::Running) { + if (playState == AnimationPlayState::Running || + playState == AnimationPlayState::Pending) { aNeedsRefreshes = true; } @@ -197,21 +245,32 @@ AnimationPlayer::DoPlay() return; } - ResolveStartTime(); + // Clear ready promise. We'll create a new one lazily. + mReady = nullptr; + + StartNow(); } void AnimationPlayer::DoPause() { - if (IsPaused()) { - return; + if (mIsPending) { + CancelPendingPlay(); + // Resolve the ready promise since we currently only use it for + // players that are waiting to play. Later (in bug 1109390), we will + // use this for players waiting to pause as well and then we won't + // want to resolve it just yet. + if (mReady) { + mReady->MaybeResolve(this); + } } + // Mark this as no longer running on the compositor so that next time // we update animations we won't throttle them and will have a chance // to remove the animation from any layer it might be on. mIsRunningOnCompositor = false; - // Bug 927349 - check for null result here and go to pending state + // Bug 1109390 - check for null result here and go to pending state mHoldTime = GetCurrentTime(); mStartTime.SetNull(); } @@ -234,6 +293,24 @@ AnimationPlayer::PostUpdate() } } +void +AnimationPlayer::CancelPendingPlay() +{ + if (!mIsPending) { + return; + } + + nsIDocument* doc = GetRenderedDocument(); + if (doc) { + PendingPlayerTracker* tracker = doc->GetPendingPlayerTracker(); + if (tracker) { + tracker->RemovePlayPending(*this); + } + } + + mIsPending = false; +} + StickyTimeDuration AnimationPlayer::SourceContentEnd() const { diff --git a/dom/animation/AnimationPlayer.h b/dom/animation/AnimationPlayer.h index eafcc4fb5a01..2e153804bbdc 100644 --- a/dom/animation/AnimationPlayer.h +++ b/dom/animation/AnimationPlayer.h @@ -13,6 +13,7 @@ #include "mozilla/dom/Animation.h" // for Animation #include "mozilla/dom/AnimationPlayerBinding.h" // for AnimationPlayState #include "mozilla/dom/AnimationTimeline.h" // for AnimationTimeline +#include "mozilla/dom/Promise.h" // for Promise #include "nsCSSProperty.h" // for nsCSSProperty // X11 has a #define for CurrentTime. @@ -37,7 +38,8 @@ class CSSTransitionPlayer; namespace dom { -class AnimationPlayer : public nsWrapperCache +class AnimationPlayer : public nsISupports, + public nsWrapperCache { protected: virtual ~AnimationPlayer() { } @@ -45,13 +47,14 @@ protected: public: explicit AnimationPlayer(AnimationTimeline* aTimeline) : mTimeline(aTimeline) + , mIsPending(false) , mIsRunningOnCompositor(false) , mIsPreviousStateFinished(false) { } - NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(AnimationPlayer) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(AnimationPlayer) + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(AnimationPlayer) AnimationTimeline* GetParentObject() const { return mTimeline; } virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE; @@ -65,6 +68,7 @@ public: Nullable GetStartTime() const { return mStartTime; } Nullable GetCurrentTime() const; AnimationPlayState PlayState() const; + virtual Promise* GetReady(ErrorResult& aRv); virtual void Play(); virtual void Pause(); bool IsRunningOnCompositor() const { return mIsRunningOnCompositor; } @@ -84,10 +88,11 @@ public: void SetSource(Animation* aSource); void Tick(); - // Sets the start time of the player to the current time of its timeline. - // This should only be called on a player that is currently waiting to play - // (and therefore has a null start time but a fixed hold time). - void ResolveStartTime(); + + // Sets the start time of a player that is waiting to play to the current + // time of its timeline. + void StartNow(); + void Cancel(); const nsString& Name() const { return mSource ? mSource->Name() : EmptyString(); @@ -128,6 +133,10 @@ protected: void FlushStyle() const; void PostUpdate(); + // Remove this player from the pending player tracker and resets mIsPending + // as necessary. The caller is responsible for resolving or aborting the + // mReady promise as necessary. + void CancelPendingPlay(); StickyTimeDuration SourceContentEnd() const; nsIDocument* GetRenderedDocument() const; @@ -140,6 +149,18 @@ protected: // The beginning of the delay period. Nullable mStartTime; // Timeline timescale Nullable mHoldTime; // Player timescale + + // A Promise that is replaced on each call to Play() (and in future Pause()) + // and fulfilled when Play() is successfully completed. + // This object is lazily created by GetReady. + nsRefPtr mReady; + + // Indicates if the player is in the pending state. We use this rather + // than checking if this player is tracked by a PendingPlayerTracker. + // This is because the PendingPlayerTracker is associated with the source + // content's document but we need to know if we're pending even if the + // source content loses association with its document. + bool mIsPending; bool mIsRunningOnCompositor; // Indicates whether we were in the finished state during our // most recent unthrottled sample (our last ComposeStyle call). diff --git a/dom/animation/AnimationTimeline.cpp b/dom/animation/AnimationTimeline.cpp index db5b0c91f7a0..550fc766c66a 100644 --- a/dom/animation/AnimationTimeline.cpp +++ b/dom/animation/AnimationTimeline.cpp @@ -55,17 +55,12 @@ AnimationTimeline::GetCurrentTimeStamp() const result = timing->GetNavigationStartTimeStamp(); } - nsIPresShell* presShell = mDocument->GetShell(); - if (MOZ_UNLIKELY(!presShell)) { + nsRefreshDriver* refreshDriver = GetRefreshDriver(); + if (!refreshDriver) { return result; } - nsPresContext* presContext = presShell->GetPresContext(); - if (MOZ_UNLIKELY(!presContext)) { - return result; - } - - result = presContext->RefreshDriver()->MostRecentRefresh(); + result = refreshDriver->MostRecentRefresh(); // FIXME: We would like to assert that: // mLastCurrentTime.IsNull() || result >= mLastCurrentTime // but due to bug 1043078 this will not be the case when the refresh driver @@ -104,5 +99,21 @@ AnimationTimeline::ToTimeStamp(const TimeDuration& aTimeDuration) const return result; } +nsRefreshDriver* +AnimationTimeline::GetRefreshDriver() const +{ + nsIPresShell* presShell = mDocument->GetShell(); + if (MOZ_UNLIKELY(!presShell)) { + return nullptr; + } + + nsPresContext* presContext = presShell->GetPresContext(); + if (MOZ_UNLIKELY(!presContext)) { + return nullptr; + } + + return presContext->RefreshDriver(); +} + } // namespace dom } // namespace mozilla diff --git a/dom/animation/AnimationTimeline.h b/dom/animation/AnimationTimeline.h index 2bb558ef43ec..21d63e86efb5 100644 --- a/dom/animation/AnimationTimeline.h +++ b/dom/animation/AnimationTimeline.h @@ -14,6 +14,7 @@ #include "nsIDocument.h" struct JSContext; +class nsRefreshDriver; namespace mozilla { namespace dom { @@ -26,10 +27,17 @@ public: { } +protected: + virtual ~AnimationTimeline() { } + +public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(AnimationTimeline) NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(AnimationTimeline) - nsISupports* GetParentObject() const { return mDocument; } + nsIGlobalObject* GetParentObject() const + { + return mDocument->GetParentObject(); + } virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE; // AnimationTimeline methods @@ -44,8 +52,7 @@ public: protected: TimeStamp GetCurrentTimeStamp() const; - - virtual ~AnimationTimeline() { } + nsRefreshDriver* GetRefreshDriver() const; nsCOMPtr mDocument; diff --git a/dom/animation/PendingPlayerTracker.cpp b/dom/animation/PendingPlayerTracker.cpp new file mode 100644 index 000000000000..d1f2a92b817c --- /dev/null +++ b/dom/animation/PendingPlayerTracker.cpp @@ -0,0 +1,35 @@ +/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */ +/* 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/. */ + +#include "PendingPlayerTracker.h" + +using namespace mozilla; + +namespace mozilla { + +NS_IMPL_CYCLE_COLLECTION(PendingPlayerTracker, mPlayPendingSet) + +NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(PendingPlayerTracker, AddRef) +NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(PendingPlayerTracker, Release) + +void +PendingPlayerTracker::AddPlayPending(dom::AnimationPlayer& aPlayer) +{ + mPlayPendingSet.PutEntry(&aPlayer); +} + +void +PendingPlayerTracker::RemovePlayPending(dom::AnimationPlayer& aPlayer) +{ + mPlayPendingSet.RemoveEntry(&aPlayer); +} + +bool +PendingPlayerTracker::IsWaitingToPlay(dom::AnimationPlayer const& aPlayer) const +{ + return mPlayPendingSet.Contains(const_cast(&aPlayer)); +} + +} // namespace mozilla diff --git a/dom/animation/PendingPlayerTracker.h b/dom/animation/PendingPlayerTracker.h new file mode 100644 index 000000000000..2407a15828bd --- /dev/null +++ b/dom/animation/PendingPlayerTracker.h @@ -0,0 +1,36 @@ +/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */ +/* 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_PendingPlayerTracker_h +#define mozilla_dom_PendingPlayerTracker_h + +#include "mozilla/dom/AnimationPlayer.h" +#include "nsCycleCollectionParticipant.h" +#include "nsTHashtable.h" + +namespace mozilla { + +class PendingPlayerTracker MOZ_FINAL +{ +public: + NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(PendingPlayerTracker) + NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(PendingPlayerTracker) + + void AddPlayPending(dom::AnimationPlayer& aPlayer); + void RemovePlayPending(dom::AnimationPlayer& aPlayer); + bool IsWaitingToPlay(dom::AnimationPlayer const& aPlayer) const; + +private: + ~PendingPlayerTracker() { } + + typedef nsTHashtable> + AnimationPlayerSet; + + AnimationPlayerSet mPlayPendingSet; +}; + +} // namespace mozilla + +#endif // mozilla_dom_PendingPlayerTracker_h diff --git a/dom/animation/moz.build b/dom/animation/moz.build index aa822fd9ee69..4be377afb272 100644 --- a/dom/animation/moz.build +++ b/dom/animation/moz.build @@ -14,11 +14,16 @@ EXPORTS.mozilla.dom += [ 'AnimationTimeline.h', ] +EXPORTS.mozilla += [ + 'PendingPlayerTracker.h', +] + UNIFIED_SOURCES += [ 'Animation.cpp', 'AnimationEffect.cpp', 'AnimationPlayer.cpp', 'AnimationTimeline.cpp', + 'PendingPlayerTracker.cpp', ] FAIL_ON_WARNINGS = True diff --git a/dom/animation/test/css-animations/test_animation-effect-name.html b/dom/animation/test/css-animations/test_animation-effect-name.html index 8b2856b789f5..86f569957f59 100644 --- a/dom/animation/test/css-animations/test_animation-effect-name.html +++ b/dom/animation/test/css-animations/test_animation-effect-name.html @@ -2,6 +2,7 @@ +
+ diff --git a/dom/animation/test/css-animations/test_animation-target.html b/dom/animation/test/css-animations/test_animation-target.html index d9cae5448cab..cd1d63bfb448 100644 --- a/dom/animation/test/css-animations/test_animation-target.html +++ b/dom/animation/test/css-animations/test_animation-target.html @@ -2,6 +2,7 @@ +