Bug 1486971 - Test for dynamically change of the prefers-reduced-motion setting on MacOSX. r=froydnj,mstange

The framework to simulate the setting change works as following;

 - nsIDOMWindowUtils.setPrefersReducedMotion() calls an IPC function which ends
   up calling nsChildView::SetPrefersReducedMotion() in the parent process

 - nsChildView::SetPrefersReducedMotion() sets the given value into
   nsLookAndFeel::mPrefersReducedMotionCached just like we set the value queried
   via NSWorkspace.accessibilityDisplayShouldReduceMotion in the parent process
   and send a notification which is the same notification MacOSX sends when the
   system setting changed

 - Normally the cached value is cleared before quering new values since the
   cache value is stale, but in this case the value is up-to-date one, so
   nsChildView::SetPrefersReducedMotion() tells that we don't need to clear the
   cache, and nsIDOMWindowUtils.resetPrefersReducedMotion() resets that state
   of 'we don't need to clear the cache'

There are two test cases with the framework in this commit, one is just setting
the value and checking the value queried by window.matchMedia.  The other one is
receiving 'change' event and checking the value of the event target.

Note that to make this test works the patch for bug 1478212 is necessary since
the test runs in an iframe.

Depends on D5003

Differential Revision: https://phabricator.services.mozilla.com/D5004
This commit is contained in:
Hiroyuki Ikezoe
2018-09-15 01:00:07 +00:00
parent ed34662ef0
commit 063bcb9ece
17 changed files with 250 additions and 1 deletions

View File

@@ -1568,5 +1568,27 @@ PuppetWidget::GetSystemFont(nsCString& aFontName)
return NS_OK;
}
nsresult
PuppetWidget::SetPrefersReducedMotionOverrideForTest(bool aValue)
{
if (!mTabChild) {
return NS_ERROR_FAILURE;
}
mTabChild->SendSetPrefersReducedMotionOverrideForTest(aValue);
return NS_OK;
}
nsresult
PuppetWidget::ResetPrefersReducedMotionOverrideForTest()
{
if (!mTabChild) {
return NS_ERROR_FAILURE;
}
mTabChild->SendResetPrefersReducedMotionOverrideForTest();
return NS_OK;
}
} // namespace widget
} // namespace mozilla