Source/WebKitLegacy/win:
requestIdleCallback is not enabled in DumpRenderTree on Windows
https://bugs.webkit.org/show_bug.cgi?id=202876

Reviewed by Wenson Hsieh.

Added the missing plumbing to enable requestIdleCallback.

* Interfaces/IWebPreferencesPrivate.idl:
* WebPreferenceKeysPrivate.h:
* WebPreferences.cpp:
(WebPreferences::initializeDefaultSettings):
(WebPreferences::requestIdleCallbackEnabled):
(WebPreferences::setRequestIdleCallbackEnabled):
* WebPreferences.h:
* WebView.cpp:
(WebView::notifyPreferencesChanged):

Tools:
requestIdleCallback cannot be enabled in DumpRenderTree on Windows
https://bugs.webkit.org/show_bug.cgi?id=202876

Reviewed by Wenson Hsieh.

Added the missing plumbing for Windows port.

* DumpRenderTree/win/DumpRenderTree.cpp:
(setWebPreferencesForTestOptions):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@251046 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKitLegacy/win/ChangeLog b/Source/WebKitLegacy/win/ChangeLog
index f9710bc..fe4b224 100644
--- a/Source/WebKitLegacy/win/ChangeLog
+++ b/Source/WebKitLegacy/win/ChangeLog
@@ -1,3 +1,22 @@
+2019-10-12  Ryosuke Niwa  <rniwa@webkit.org>
+
+        requestIdleCallback is not enabled in DumpRenderTree on Windows
+        https://bugs.webkit.org/show_bug.cgi?id=202876
+
+        Reviewed by Wenson Hsieh.
+
+        Added the missing plumbing to enable requestIdleCallback.
+
+        * Interfaces/IWebPreferencesPrivate.idl:
+        * WebPreferenceKeysPrivate.h:
+        * WebPreferences.cpp:
+        (WebPreferences::initializeDefaultSettings):
+        (WebPreferences::requestIdleCallbackEnabled):
+        (WebPreferences::setRequestIdleCallbackEnabled):
+        * WebPreferences.h:
+        * WebView.cpp:
+        (WebView::notifyPreferencesChanged):
+
 2019-10-04  Alex Christensen  <achristensen@webkit.org>
 
         Rename SchemeRegistry to LegacySchemeRegistry
diff --git a/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl b/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl
index 7bbdc37..fffde8a 100644
--- a/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl
+++ b/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl
@@ -244,4 +244,6 @@
     HRESULT setResizeObserverEnabled([in] BOOL enabled);
     HRESULT coreMathMLEnabled([out, retval] BOOL* enabled);
     HRESULT setCoreMathMLEnabled([in] BOOL enabled);
+    HRESULT requestIdleCallbackEnabled([out, retval] BOOL* enabled);
+    HRESULT setRequestIdleCallbackEnabled([in] BOOL enabled);
 }
diff --git a/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h b/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h
index edf86a6..5bcc6d3 100644
--- a/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h
+++ b/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h
@@ -211,3 +211,5 @@
 #define WebKitResizeObserverEnabledPreferenceKey "WebKitResizeObserverEnabled"
 
 #define WebKitCoreMathMLEnabledPreferenceKey "WebKitCoreMathMLEnabled"
+
+#define WebKitRequestIdleCallbackEnabledPreferenceKey "RequestIdleCallbackEnabled"
diff --git a/Source/WebKitLegacy/win/WebPreferences.cpp b/Source/WebKitLegacy/win/WebPreferences.cpp
index 349672e..3be14de 100644
--- a/Source/WebKitLegacy/win/WebPreferences.cpp
+++ b/Source/WebKitLegacy/win/WebPreferences.cpp
@@ -339,6 +339,8 @@
 
     CFDictionaryAddValue(defaults, CFSTR(WebKitCoreMathMLEnabledPreferenceKey), kCFBooleanFalse);
 
+    CFDictionaryAddValue(defaults, CFSTR(WebKitRequestIdleCallbackEnabledPreferenceKey), kCFBooleanFalse);
+
     defaultSettings = defaults;
 #endif
 }
@@ -2277,6 +2279,20 @@
     return S_OK;
 }
 
+HRESULT WebPreferences::requestIdleCallbackEnabled(_Out_ BOOL* enabled)
+{
+    if (!enabled)
+        return E_POINTER;
+    *enabled = boolValueForKey(WebKitRequestIdleCallbackEnabledPreferenceKey);
+    return S_OK;
+}
+
+HRESULT WebPreferences::setRequestIdleCallbackEnabled(BOOL enabled)
+{
+    setBoolValue(WebKitRequestIdleCallbackEnabledPreferenceKey, enabled);
+    return S_OK;
+}
+
 HRESULT WebPreferences::setApplicationId(BSTR applicationId)
 {
 #if USE(CF)
diff --git a/Source/WebKitLegacy/win/WebPreferences.h b/Source/WebKitLegacy/win/WebPreferences.h
index 0276503..fec573f 100644
--- a/Source/WebKitLegacy/win/WebPreferences.h
+++ b/Source/WebKitLegacy/win/WebPreferences.h
@@ -289,6 +289,8 @@
     virtual HRESULT STDMETHODCALLTYPE setResizeObserverEnabled(BOOL);
     virtual HRESULT STDMETHODCALLTYPE coreMathMLEnabled(_Out_ BOOL*);
     virtual HRESULT STDMETHODCALLTYPE setCoreMathMLEnabled(BOOL);
+    virtual HRESULT STDMETHODCALLTYPE requestIdleCallbackEnabled(_Out_ BOOL*);
+    virtual HRESULT STDMETHODCALLTYPE setRequestIdleCallbackEnabled(BOOL);
 
     // WebPreferences
 
diff --git a/Source/WebKitLegacy/win/WebView.cpp b/Source/WebKitLegacy/win/WebView.cpp
index 713088e..f7b5c86 100644
--- a/Source/WebKitLegacy/win/WebView.cpp
+++ b/Source/WebKitLegacy/win/WebView.cpp
@@ -5609,6 +5609,11 @@
         return hr;
     settings.setCoreMathMLEnabled(!!enabled);
 
+    hr = prefsPrivate->requestIdleCallbackEnabled(&enabled);
+    if (FAILED(hr))
+        return hr;
+    settings.setRequestIdleCallbackEnabled(!!enabled);
+
     return S_OK;
 }
 
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 20e8f73..8f8d3b8 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,15 @@
+2019-10-12  Ryosuke Niwa  <rniwa@webkit.org>
+
+        requestIdleCallback cannot be enabled in DumpRenderTree on Windows
+        https://bugs.webkit.org/show_bug.cgi?id=202876
+
+        Reviewed by Wenson Hsieh.
+
+        Added the missing plumbing for Windows port.
+
+        * DumpRenderTree/win/DumpRenderTree.cpp:
+        (setWebPreferencesForTestOptions):
+
 2019-10-11  Aakash Jain  <aakash_jain@apple.com>
 
         Update build.webkit.org basedir
diff --git a/Tools/DumpRenderTree/win/DumpRenderTree.cpp b/Tools/DumpRenderTree/win/DumpRenderTree.cpp
index 4d50fb9..99773d3 100644
--- a/Tools/DumpRenderTree/win/DumpRenderTree.cpp
+++ b/Tools/DumpRenderTree/win/DumpRenderTree.cpp
@@ -903,7 +903,7 @@
 
 static void setWebPreferencesForTestOptions(IWebPreferences* preferences, const TestOptions& options)
 {
-    COMPtr<IWebPreferencesPrivate6> prefsPrivate { Query, preferences };
+    COMPtr<IWebPreferencesPrivate7> prefsPrivate { Query, preferences };
 
     prefsPrivate->setWebAnimationsCSSIntegrationEnabled(options.enableWebAnimationsCSSIntegration);
     prefsPrivate->setMenuItemElementEnabled(options.enableMenuItemElement);
@@ -911,6 +911,7 @@
     prefsPrivate->setModernMediaControlsEnabled(options.enableModernMediaControls);
     prefsPrivate->setIsSecureContextAttributeEnabled(options.enableIsSecureContextAttribute);
     prefsPrivate->setInspectorAdditionsEnabled(options.enableInspectorAdditions);
+    prefsPrivate->setRequestIdleCallbackEnabled(options.enableRequestIdleCallback);
     preferences->setPrivateBrowsingEnabled(options.useEphemeralSession);
     preferences->setUsesPageCache(options.enablePageCache);
 }