Guard Credential Management implementation behind a runtime enabled feature flag
authordbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Mar 2017 22:40:25 +0000 (22:40 +0000)
committerdbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Mar 2017 22:40:25 +0000 (22:40 +0000)
https://bugs.webkit.org/show_bug.cgi?id=169364
<rdar://problem/30957425>

Reviewed by Brent Fulgham.

Source/JavaScriptCore:

Add common identifiers for Credential, PasswordCredential, and SiteBoundCredential that are
needed to guard these interfaces behind a runtime enabled feature flag.

* runtime/CommonIdentifiers.h:

Source/WebCore:

Add a runtime enabled feature flag for Credential Management (disabled by default).
Once we are happy with this feature we can enable the feature by default or remove the
the runtime enabled feature flag so as to enable it by default.

* Modules/credentials/BasicCredential.idl: Enable only if the runtime enabled feature flag is
 enabled.
* Modules/credentials/PasswordCredential.idl: Ditto.
* Modules/credentials/SiteBoundCredential.idl: Ditto.
* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::setCredentialManagementEnabled): Added.
(WebCore::RuntimeEnabledFeatures::credentialManagementEnabled): Added.

Source/WebKit/mac:

Add WebKit preference for Credential Management (disabled by default).

* WebView/WebPreferenceKeysPrivate.h:
* WebView/WebPreferences.mm:
(+[WebPreferences initialize]):
(-[WebPreferences credentialManagementEnabled]): Added.
(-[WebPreferences setCredentialManagementEnabled:]): Added.
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):

Source/WebKit2:

Add WebKit2 preference for Credential Management (disabled by default).

* Shared/WebPreferencesDefinitions.h:
* UIProcess/API/C/WKPreferences.cpp:
(WKPreferencesSetCredentialManagementEnabled): Added.
(WKPreferencesGetCredentialManagementEnabled): Added.
* UIProcess/API/C/WKPreferencesRefPrivate.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences):

Tools:

Add a new test option header, enableCredentialManagement, to DumpRenderTree/WebKitTestRunner
to enable Credential Management.

* DumpRenderTree/TestOptions.h:
* DumpRenderTree/TestOptions.mm:
(TestOptions::TestOptions):
* DumpRenderTree/mac/DumpRenderTree.mm:
(enableExperimentalFeatures):
(setWebPreferencesForTestOptions):
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::resetPreferencesToConsistentValues):
(WTR::updateTestOptionsFromTestHeader):
* WebKitTestRunner/TestOptions.h:

LayoutTests:

* credentials/idlharness.html: Use comment header to enable Credential Management API.
* platform/mac-elcapitan/js/dom/global-constructors-attributes-expected.txt: Update expected results now
that we no longer expose the Credential Management API by default.
* platform/mac-wk1/js/dom/global-constructors-attributes-expected.txt: Ditto.
* platform/mac-yosemite/js/dom/global-constructors-attributes-expected.txt: Ditto.
* platform/mac/js/dom/global-constructors-attributes-expected.txt: Ditto.
* platform/win/TestExpectations: For now, skip the Credential Management API tests.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@213676 268f45cc-cd09-0410-ab3c-d52691b4dbfc

30 files changed:
LayoutTests/ChangeLog
LayoutTests/credentials/idlharness.html
LayoutTests/platform/mac-elcapitan/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/mac-wk1/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/mac-yosemite/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/mac/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/win/TestExpectations
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/CommonIdentifiers.h
Source/WebCore/ChangeLog
Source/WebCore/Modules/credentials/BasicCredential.idl
Source/WebCore/Modules/credentials/PasswordCredential.idl
Source/WebCore/Modules/credentials/SiteBoundCredential.idl
Source/WebCore/page/RuntimeEnabledFeatures.h
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
Source/WebKit/mac/WebView/WebPreferences.mm
Source/WebKit/mac/WebView/WebPreferencesPrivate.h
Source/WebKit/mac/WebView/WebView.mm
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/WebPreferencesDefinitions.h
Source/WebKit2/UIProcess/API/C/WKPreferences.cpp
Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h
Source/WebKit2/WebProcess/WebPage/WebPage.cpp
Tools/ChangeLog
Tools/DumpRenderTree/TestOptions.h
Tools/DumpRenderTree/TestOptions.mm
Tools/DumpRenderTree/mac/DumpRenderTree.mm
Tools/WebKitTestRunner/TestController.cpp
Tools/WebKitTestRunner/TestOptions.h

index 09aab1bd5ceea0344ef251553009e371ffe6929d..69387c97308bbab1bfa62d28ec1e80a0b6371d7a 100644 (file)
@@ -1,3 +1,19 @@
+2017-03-09  Daniel Bates  <dabates@apple.com>
+
+        Guard Credential Management implementation behind a runtime enabled feature flag
+        https://bugs.webkit.org/show_bug.cgi?id=169364
+        <rdar://problem/30957425>
+
+        Reviewed by Brent Fulgham.
+
+        * credentials/idlharness.html: Use comment header to enable Credential Management API.
+        * platform/mac-elcapitan/js/dom/global-constructors-attributes-expected.txt: Update expected results now
+        that we no longer expose the Credential Management API by default.
+        * platform/mac-wk1/js/dom/global-constructors-attributes-expected.txt: Ditto.
+        * platform/mac-yosemite/js/dom/global-constructors-attributes-expected.txt: Ditto.
+        * platform/mac/js/dom/global-constructors-attributes-expected.txt: Ditto.
+        * platform/win/TestExpectations: For now, skip the Credential Management API tests.
+
 2017-03-09  Yoav Weiss  <yoav@yoav.ws>
 
         [link preload] Double downloads of preloaded CSS
index ed30a0553a6308b8483bc8cb4def4ac856ceab2f..4acb003c51fb887606582f25100a5bf410e7282c 100644 (file)
@@ -1,4 +1,4 @@
-<!DOCTYPE html>
+<!DOCTYPE html><!-- webkit-test-runner [ enableCredentialManagement=true ] -->
 <script src="../resources/testharness.js"></script>
 <script src="../resources/testharnessreport.js"></script>
 <script src="../resources/WebIDLParser.js"></script>
index 669409f2d722d9814fecd2deef69a5129ee8616d..1ee5767d64164ba958548ff0176af55f02fe12e6 100644 (file)
@@ -303,11 +303,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'Counter').hasOwnProperty('get') is
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').value is Credential
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').value is Crypto
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('set') is false
@@ -1173,11 +1168,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').hasOwnProper
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').value is PasswordCredential
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').value is Path2D
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').hasOwnProperty('set') is false
@@ -2108,11 +2098,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').value is SiteBoundCredential
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').value is SourceBuffer
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').hasOwnProperty('set') is false
index 669409f2d722d9814fecd2deef69a5129ee8616d..1ee5767d64164ba958548ff0176af55f02fe12e6 100644 (file)
@@ -303,11 +303,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'Counter').hasOwnProperty('get') is
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').value is Credential
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').value is Crypto
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('set') is false
@@ -1173,11 +1168,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').hasOwnProper
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').value is PasswordCredential
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').value is Path2D
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').hasOwnProperty('set') is false
@@ -2108,11 +2098,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').value is SiteBoundCredential
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').value is SourceBuffer
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').hasOwnProperty('set') is false
index 77a684895875554c47c7e53d34e5da53215a147f..480f2451cec2ed09e4d103e5b4a29850c62c311d 100644 (file)
@@ -298,11 +298,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'Counter').hasOwnProperty('get') is
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').value is Credential
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').value is Crypto
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('set') is false
@@ -1163,11 +1158,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').hasOwnProper
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').value is PasswordCredential
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').value is Path2D
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').hasOwnProperty('set') is false
@@ -2098,11 +2088,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').value is SiteBoundCredential
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').value is SourceBuffer
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').hasOwnProperty('set') is false
index bbedd378ab3a4cf7a596c4be25e39189f6f25872..31f4083d7cc96b08077a02f10e544af545444bf7 100644 (file)
@@ -303,11 +303,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'Counter').hasOwnProperty('get') is
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'Counter').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').value is Credential
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Credential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').value is Crypto
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('set') is false
@@ -1173,11 +1168,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').hasOwnProper
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'PageTransitionEvent').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').value is PasswordCredential
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'PasswordCredential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').value is Path2D
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Path2D').hasOwnProperty('set') is false
@@ -2108,11 +2098,6 @@ PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').value is SiteBoundCredential
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'SiteBoundCredential').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').value is SourceBuffer
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'SourceBuffer').hasOwnProperty('set') is false
index a0e447e59b2f49d7161bf0c0217321c0e9cb50fd..8864067c0472efc2f44084224eee6655dcec8890 100644 (file)
@@ -644,6 +644,9 @@ webkit.org/b/149630 css3/font-variant-all.html [ ImageOnlyFailure ]
 
 webkit.org/b/158836 imported/w3c/web-platform-tests/encrypted-media [ Skip ]
 
+# Credential Management not supported
+credentials/ [ Skip ]
+
 ################################################################################
 ###########    End Missing Functionality Prevents Testing         ##############
 ################################################################################
index 5e27fcc005d81054d814e7f512c97accf582c7c7..1e8984fedcd16e9863bda6b266d7ea429c603b01 100644 (file)
@@ -1,3 +1,16 @@
+2017-03-09  Daniel Bates  <dabates@apple.com>
+
+        Guard Credential Management implementation behind a runtime enabled feature flag
+        https://bugs.webkit.org/show_bug.cgi?id=169364
+        <rdar://problem/30957425>
+
+        Reviewed by Brent Fulgham.
+
+        Add common identifiers for Credential, PasswordCredential, and SiteBoundCredential that are
+        needed to guard these interfaces behind a runtime enabled feature flag.
+
+        * runtime/CommonIdentifiers.h:
+
 2017-03-09  Mark Lam  <mark.lam@apple.com>
 
         Refactoring some HeapVerifier code.
         sum of the depths of its nodes, with a node's depth equal to the number
         of frames in its associated call stack. For any stack trace,
 
-            S = { sð\9d\9f¶, sð\9d\9f·, â\80¦, sð\9d\91\98 }, with endpoints sð\9d\9f¶, sð\9d\91\98
-            depth(S) = depth(sð\9d\9f¶) + depth(sð\9d\9f·) + â\80¦ + depth(sð\9d\91\98)
+            S = { sí\9f¶, sí\9f·, â\80¦, sí\91\98 }, with endpoints sí\9f¶, sí\91\98
+            depth(S) = depth(sí\9f¶) + depth(sí\9f·) + â\80¦ + depth(sí\91\98)
 
         A stack trace is truncated when it exceeds the maximum depth. Truncation
         occurs on node boundaries, not call frames, consequently the maximum depth
         is more of a target than a guarantee:
 
             d = maximum stack trace depth
-            for all S, depth(S) ≤ d + depth(sð\9d\91\98)
+            for all S, depth(S) ≤ d + depth(sí\91\98)
 
         Because nodes can belong to multiple stack traces, it may be necessary
         to clone the tail of a stack trace being truncated to prevent other traces
         sum of the depths of its nodes, with a node's depth equal to the number
         of frames in its associated call stack. For any stack trace,
 
-            S = { sð\9d\9f¶, sð\9d\9f·, â\80¦, sð\9d\91\98 }, with endpoints sð\9d\9f¶, sð\9d\91\98
-            depth(S) = depth(sð\9d\9f¶) + depth(sð\9d\9f·) + â\80¦ + depth(sð\9d\91\98)
+            S = { sí\9f¶, sí\9f·, â\80¦, sí\91\98 }, with endpoints sí\9f¶, sí\91\98
+            depth(S) = depth(sí\9f¶) + depth(sí\9f·) + â\80¦ + depth(sí\91\98)
 
         A stack trace is truncated when it exceeds the maximum depth. Truncation
         occurs on node boundaries, not call frames, consequently the maximum depth
         is more of a target than a guarantee:
 
             d = maximum stack trace depth
-            for all S, depth(S) ≤ d + depth(sð\9d\91\98)
+            for all S, depth(S) ≤ d + depth(sí\91\98)
 
         Because nodes can belong to multiple stack traces, it may be necessary
         to clone the tail of a stack trace being truncated to prevent other traces
index 5787af56020bc059587c8a264ae8d3b05097bcf4..675450f8d5a5fe609e248efabd6d26fc48033c05 100644 (file)
@@ -36,6 +36,7 @@
     macro(BYTES_PER_ELEMENT) \
     macro(Boolean) \
     macro(Collator) \
+    macro(Credential) \
     macro(CustomElementRegistry) \
     macro(Date) \
     macro(DateTimeFormat) \
@@ -85,6 +86,7 @@
     macro(Number) \
     macro(NumberFormat) \
     macro(Object) \
+    macro(PasswordCredential) \
     macro(PerformanceEntry) \
     macro(PerformanceEntryList) \
     macro(PerformanceMark) \
     macro(SetIterator)\
     macro(ShadowRoot) \
     macro(SharedArrayBuffer) \
+    macro(SiteBoundCredential) \
     macro(StaticRange) \
     macro(String) \
     macro(Symbol) \
index 97b291e2299bab89023302a2bdedaa576f23cce1..45a1bdd000feb0745c6dab5e761a2a216aa40c86 100644 (file)
@@ -1,3 +1,23 @@
+2017-03-09  Daniel Bates  <dabates@apple.com>
+
+        Guard Credential Management implementation behind a runtime enabled feature flag
+        https://bugs.webkit.org/show_bug.cgi?id=169364
+        <rdar://problem/30957425>
+
+        Reviewed by Brent Fulgham.
+
+        Add a runtime enabled feature flag for Credential Management (disabled by default).
+        Once we are happy with this feature we can enable the feature by default or remove the
+        the runtime enabled feature flag so as to enable it by default.
+
+        * Modules/credentials/BasicCredential.idl: Enable only if the runtime enabled feature flag is
+         enabled.
+        * Modules/credentials/PasswordCredential.idl: Ditto.
+        * Modules/credentials/SiteBoundCredential.idl: Ditto.
+        * page/RuntimeEnabledFeatures.h:
+        (WebCore::RuntimeEnabledFeatures::setCredentialManagementEnabled): Added.
+        (WebCore::RuntimeEnabledFeatures::credentialManagementEnabled): Added.
+
 2017-03-09  Anders Carlsson  <andersca@apple.com>
 
         Add delegate support to WebCore
index ade33eb95b04dcb90c600d5a7d8397b1b830f1a2..6543fb43c3acf712326e5562e29377d036c8c9c4 100644 (file)
@@ -25,6 +25,7 @@
 
 [
     InterfaceName=Credential,
+    EnabledAtRuntime=CredentialManagement,
 ] interface BasicCredential {
     readonly attribute USVString id;
     readonly attribute DOMString type;
index dc5b948c825dea35f9904d8f367f1d58bea9255e..8f04fa3c45f9d6f02ddb320b95859ef9ef57de93 100644 (file)
@@ -26,6 +26,7 @@
 typedef (DOMFormData or URLSearchParams) CredentialBodyType;
 
 [
+    EnabledAtRuntime=CredentialManagement,
     Constructor(PasswordCredentialData data),
     Constructor(HTMLFormElement form),
     Exposed=Window,
index 785118589510a0d118501f72c4d0b7bf24dd4f28..f776322c8a66fcadda17d106d1bd3bd79484ccb9 100644 (file)
@@ -23,7 +23,9 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface SiteBoundCredential : BasicCredential {
+[
+    EnabledAtRuntime=CredentialManagement,
+] interface SiteBoundCredential : BasicCredential {
     readonly attribute USVString name;
     readonly attribute USVString iconURL;
 };
index d7d9b702b91b405df943c251be23e9a4525e3e91..4cb521f6e278146ad5d304b153001d07007f7201 100644 (file)
@@ -75,6 +75,9 @@ public:
     void setModernMediaControlsEnabled(bool areEnabled) { m_areModernMediaControlsEnabled = areEnabled; }
     bool modernMediaControlsEnabled() const { return m_areModernMediaControlsEnabled; }
 
+    void setCredentialManagementEnabled(bool isEnabled) { m_isCredentialManagementEnabled = isEnabled; }
+    bool credentialManagementEnabled() const { return m_isCredentialManagementEnabled; }
+
 #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
     void setIndexedDBWorkersEnabled(bool isEnabled) { m_isIndexedDBWorkersEnabled = isEnabled; }
     bool indexedDBWorkersEnabled() const { return m_isIndexedDBWorkersEnabled; }
@@ -210,6 +213,7 @@ private:
     bool m_isResourceTimingEnabled { false };
     bool m_isUserTimingEnabled { false };
     bool m_isInteractiveFormValidationEnabled { false };
+    bool m_isCredentialManagementEnabled { false };
 
     bool m_isDOMIteratorEnabled { true };
     bool m_isGeolocationEnabled { true };
index 1f568910601a1d30238089e37e205c7a5adb42dc..c0f3550fab27ec4d7fa103cec56f3ccc6d02c571 100644 (file)
@@ -1,3 +1,22 @@
+2017-03-09  Daniel Bates  <dabates@apple.com>
+
+        Guard Credential Management implementation behind a runtime enabled feature flag
+        https://bugs.webkit.org/show_bug.cgi?id=169364
+        <rdar://problem/30957425>
+
+        Reviewed by Brent Fulgham.
+
+        Add WebKit preference for Credential Management (disabled by default).
+
+        * WebView/WebPreferenceKeysPrivate.h:
+        * WebView/WebPreferences.mm:
+        (+[WebPreferences initialize]):
+        (-[WebPreferences credentialManagementEnabled]): Added.
+        (-[WebPreferences setCredentialManagementEnabled:]): Added.
+        * WebView/WebPreferencesPrivate.h:
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]):
+
 2017-03-09  Anders Carlsson  <andersca@apple.com>
 
         Add delegate support to WebCore
index d2f95e80cb096debb3b5cf8afad82a6b19160a76..8b552027e3962dc56d2987e56529311cb87a0d31 100644 (file)
 #define WebKitMediaStreamEnabledPreferenceKey @"WebKitMediaStreamEnabled"
 #define WebKitPeerConnectionEnabledPreferenceKey @"WebKitPeerConnectionEnabled"
 #define WebKitLinkPreloadEnabledPreferenceKey @"WebKitLinkPreloadEnabled"
+#define WebKitCredentialManagementEnabledPreferenceKey @"WebKitCredentialManagementEnabled"
 
 #if !TARGET_OS_IPHONE
 // These are private both because callers should be using the cover methods and because the
index 35717bb306f0391de27fcc0a87883080c161f2f9..c221688520e28a48d33b2fdd79dc551695492c9f 100644 (file)
@@ -661,6 +661,7 @@ public:
 #endif
         @NO, WebKitUserTimingEnabledPreferenceKey,
         @NO, WebKitResourceTimingEnabledPreferenceKey,
+        @NO, WebKitCredentialManagementEnabledPreferenceKey,
         nil];
 
 #if !PLATFORM(IOS)
@@ -2994,6 +2995,16 @@ static NSString *classIBCreatorID = nil;
     [self _setBoolValue:flag forKey:WebKitResourceTimingEnabledPreferenceKey];
 }
 
+- (BOOL)credentialManagementEnabled
+{
+    return [self _boolValueForKey:WebKitCredentialManagementEnabledPreferenceKey];
+}
+
+- (void)setCredentialManagementEnabled:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitCredentialManagementEnabledPreferenceKey];
+}
+
 #if PLATFORM(IOS)
 - (BOOL)quickLookDocumentSavingEnabled
 {
index 2ed0de93e32c91668b67cb4f3922dd27b91d4fac..43d7df87d24c971ac69c42e1f9682a366e66a4fb 100644 (file)
@@ -529,6 +529,9 @@ extern NSString *WebPreferencesCacheModelChangedInternalNotification;
 - (void)setModernMediaControlsEnabled:(BOOL)flag;
 - (BOOL)modernMediaControlsEnabled;
 
+- (void)setCredentialManagementEnabled:(BOOL)flag;
+- (BOOL)credentialManagementEnabled;
+
 @property (nonatomic) BOOL visualViewportEnabled;
 @property (nonatomic) BOOL largeImageAsyncDecodingEnabled;
 @property (nonatomic) BOOL animatedImageAsyncDecodingEnabled;
@@ -540,6 +543,7 @@ extern NSString *WebPreferencesCacheModelChangedInternalNotification;
 @property (nonatomic) BOOL userTimingEnabled;
 @property (nonatomic) BOOL resourceTimingEnabled;
 @property (nonatomic) BOOL linkPreloadEnabled;
+@property (nonatomic) BOOL credentialManagementEnabled;
 
 #if TARGET_OS_IPHONE
 @property (nonatomic) BOOL quickLookDocumentSavingEnabled;
index e3623cddca55d7bda7c0df8263dabd2662dd7459..a0922cc4ea8ae461745dc9501be4a5f151adec24 100644 (file)
@@ -2928,6 +2928,7 @@ static bool needsSelfRetainWhileLoadingQuirk()
     RuntimeEnabledFeatures::sharedFeatures().setUserTimingEnabled(preferences.userTimingEnabled);
     RuntimeEnabledFeatures::sharedFeatures().setResourceTimingEnabled(preferences.resourceTimingEnabled);
     RuntimeEnabledFeatures::sharedFeatures().setLinkPreloadEnabled(preferences.linkPreloadEnabled);
+    RuntimeEnabledFeatures::sharedFeatures().setCredentialManagementEnabled(preferences.credentialManagementEnabled);
 
     NSTimeInterval timeout = [preferences incrementalRenderingSuppressionTimeoutInSeconds];
     if (timeout > 0)
index 47791b10b79286c523379a033c9bcec5fac4b5d4..ca5b32d4636cb96dca0d0a8ab4b3e4e4903799a3 100644 (file)
@@ -1,3 +1,21 @@
+2017-03-09  Daniel Bates  <dabates@apple.com>
+
+        Guard Credential Management implementation behind a runtime enabled feature flag
+        https://bugs.webkit.org/show_bug.cgi?id=169364
+        <rdar://problem/30957425>
+
+        Reviewed by Brent Fulgham.
+
+        Add WebKit2 preference for Credential Management (disabled by default).
+
+        * Shared/WebPreferencesDefinitions.h:
+        * UIProcess/API/C/WKPreferences.cpp:
+        (WKPreferencesSetCredentialManagementEnabled): Added.
+        (WKPreferencesGetCredentialManagementEnabled): Added.
+        * UIProcess/API/C/WKPreferencesRefPrivate.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::updatePreferences):
+
 2017-03-09  Andy Estes  <aestes@apple.com>
 
         [iOS] Add SPI to print to a single tall PDF page
index a885d9b4e35cd63f08b4bf419eaec3f216804162..5b508e43fff9fc06f9324b786befd0859612759e 100644 (file)
     macro(CSSGridLayoutEnabled, cssGridLayoutEnabled, Bool, bool, true, "CSS Grid", "CSS Grid Layout Module support") \
     macro(GamepadsEnabled, gamepadsEnabled, Bool, bool, true, "Gamepads", "Web Gamepad API support") \
     macro(InputEventsEnabled, inputEventsEnabled, Bool, bool, true, "Input Events", "Enable InputEvents support") \
+    macro(CredentialManagementEnabled, credentialManagementEnabled, Bool, bool, false, "Credential Management", "Enable Credential Management support") \
     \
 
 #define FOR_EACH_WEBKIT_DOUBLE_PREFERENCE(macro) \
index 614b74d6c5e9ef769baa414acf30ded36b69b6ea..b899554b45e2d30ad22e1b97f22709c79377b7f7 100644 (file)
@@ -842,6 +842,16 @@ bool WKPreferencesGetModernMediaControlsEnabled(WKPreferencesRef preferencesRef)
     return toImpl(preferencesRef)->modernMediaControlsEnabled();
 }
 
+void WKPreferencesSetCredentialManagementEnabled(WKPreferencesRef preferencesRef, bool flag)
+{
+    toImpl(preferencesRef)->setCredentialManagementEnabled(flag);
+}
+
+bool WKPreferencesGetCredentialManagementEnabled(WKPreferencesRef preferencesRef)
+{
+    return toImpl(preferencesRef)->credentialManagementEnabled();
+}
+
 void WKPreferencesSetShowsToolTipOverTruncatedText(WKPreferencesRef preferencesRef, bool flag)
 {
     toImpl(preferencesRef)->setShowsToolTipOverTruncatedText(flag);
index 162a7b15791c9144491ef8b953817109c82f5147..c5cdcba49eb9f0f3124e8e274008979cd410564f 100644 (file)
@@ -481,6 +481,10 @@ WK_EXPORT bool WKPreferencesGetShouldSuppressKeyboardInputDuringProvisionalNavig
 WK_EXPORT void WKPreferencesSetLinkPreloadEnabled(WKPreferencesRef, bool flag);
 WK_EXPORT bool WKPreferencesGetLinkPreloadEnabled(WKPreferencesRef);
 
+// Defaults to false
+WK_EXPORT void WKPreferencesSetCredentialManagementEnabled(WKPreferencesRef, bool flag);
+WK_EXPORT bool WKPreferencesGetCredentialManagementEnabled(WKPreferencesRef);
+
 #ifdef __cplusplus
 }
 #endif
index 6df8a9c1c953ab807ec0763373442f7227331131..ff76402c6e5bacf6b9556fcd6690f9802ea3c286 100644 (file)
@@ -3262,6 +3262,7 @@ void WebPage::updatePreferences(const WebPreferencesStore& store)
     RuntimeEnabledFeatures::sharedFeatures().setUserTimingEnabled(store.getBoolValueForKey(WebPreferencesKey::userTimingEnabledKey()));
     RuntimeEnabledFeatures::sharedFeatures().setResourceTimingEnabled(store.getBoolValueForKey(WebPreferencesKey::resourceTimingEnabledKey()));
     RuntimeEnabledFeatures::sharedFeatures().setLinkPreloadEnabled(store.getBoolValueForKey(WebPreferencesKey::linkPreloadEnabledKey()));
+    RuntimeEnabledFeatures::sharedFeatures().setCredentialManagementEnabled(store.getBoolValueForKey(WebPreferencesKey::credentialManagementEnabledKey()));
 
     bool processSuppressionEnabled = store.getBoolValueForKey(WebPreferencesKey::pageVisibilityBasedProcessSuppressionEnabledKey());
     if (m_processSuppressionEnabled != processSuppressionEnabled) {
index 8b8692038bd6f5728b5bd50d2265fb0fc695795e..c517889a33f8bc3c42477536eb2e24e366b5d448 100644 (file)
@@ -1,3 +1,25 @@
+2017-03-09  Daniel Bates  <dabates@apple.com>
+
+        Guard Credential Management implementation behind a runtime enabled feature flag
+        https://bugs.webkit.org/show_bug.cgi?id=169364
+        <rdar://problem/30957425>
+
+        Reviewed by Brent Fulgham.
+
+        Add a new test option header, enableCredentialManagement, to DumpRenderTree/WebKitTestRunner
+        to enable Credential Management.
+
+        * DumpRenderTree/TestOptions.h:
+        * DumpRenderTree/TestOptions.mm:
+        (TestOptions::TestOptions):
+        * DumpRenderTree/mac/DumpRenderTree.mm:
+        (enableExperimentalFeatures):
+        (setWebPreferencesForTestOptions):
+        * WebKitTestRunner/TestController.cpp:
+        (WTR::TestController::resetPreferencesToConsistentValues):
+        (WTR::updateTestOptionsFromTestHeader):
+        * WebKitTestRunner/TestOptions.h:
+
 2017-03-09  Anders Carlsson  <andersca@apple.com>
 
         Add delegate support to WebCore
index 0aeb022106f195d5e57aeab9a6c3b8f5c19f260e..0ef58d31962432ee362a40ccb5f3a75001db1342 100644 (file)
@@ -32,6 +32,7 @@ struct TestOptions {
     bool enableIntersectionObserver { false };
     bool enableModernMediaControls { true };
     bool enablePointerLock { false };
+    bool enableCredentialManagement { false };
 
     TestOptions(NSURL*, const TestCommand&);
 };
index 568f62bab4726eeb842d2cfa75b4746a48ea5fa2..8ea631698ee49375efa59138840acc0433b0ba5c 100644 (file)
@@ -86,6 +86,8 @@ TestOptions::TestOptions(NSURL *testURL, const TestCommand& command)
             this->enableModernMediaControls = parseBooleanTestHeaderValue(value);
         else if (key == "enablePointerLock")
             this->enablePointerLock = parseBooleanTestHeaderValue(value);
+        else if (key == "enableCredentialManagement")
+            this->enableCredentialManagement = parseBooleanTestHeaderValue(value);
         pairStart = pairEnd + 1;
     }
 }
index 7d2ec7c3bc512d47491445911ec59aab20c49336..d895a44a4198bc9f1082b14fe42f0ccce4b386c5 100644 (file)
@@ -849,6 +849,7 @@ static void enableExperimentalFeatures(WebPreferences* preferences)
     [preferences setWebGL2Enabled:YES];
     [preferences setWebGPUEnabled:YES];
     [preferences setPeerConnectionEnabled:YES];
+    [preferences setCredentialManagementEnabled:YES];
 }
 
 // Called before each test.
@@ -968,6 +969,7 @@ static void setWebPreferencesForTestOptions(const TestOptions& options)
 
     preferences.intersectionObserverEnabled = options.enableIntersectionObserver;
     preferences.modernMediaControlsEnabled = options.enableModernMediaControls;
+    preferences.credentialManagementEnabled = options.enableCredentialManagement;
 }
 
 // Called once on DumpRenderTree startup.
index fed2efeb45b0d77246cbd6d867101ef95442b63d..6f629a494136a8e2ebd0066d773ff75ad87f2cf2 100644 (file)
@@ -678,6 +678,7 @@ void TestController::resetPreferencesToConsistentValues(const TestOptions& optio
     WKPreferencesSetNeedsSiteSpecificQuirks(preferences, options.needsSiteSpecificQuirks);
     WKPreferencesSetIntersectionObserverEnabled(preferences, options.enableIntersectionObserver);
     WKPreferencesSetModernMediaControlsEnabled(preferences, options.enableModernMediaControls);
+    WKPreferencesSetCredentialManagementEnabled(preferences, options.enableCredentialManagement);
 
     static WKStringRef defaultTextEncoding = WKStringCreateWithUTF8CString("ISO-8859-1");
     WKPreferencesSetDefaultTextEncodingName(preferences, defaultTextEncoding);
@@ -1005,6 +1006,8 @@ static void updateTestOptionsFromTestHeader(TestOptions& testOptions, const std:
             testOptions.enableModernMediaControls = parseBooleanTestHeaderValue(value);
         if (key == "enablePointerLock")
             testOptions.enablePointerLock = parseBooleanTestHeaderValue(value);
+        if (key == "enableCredentialManagement")
+            testOptions.enableCredentialManagement = parseBooleanTestHeaderValue(value);
         pairStart = pairEnd + 1;
     }
 }
index 9c665192cba7344a9696ce1feadd6e3d8412fa2c..5d671ce390255c9924859a4724e19cb99e289182 100644 (file)
@@ -46,6 +46,7 @@ struct TestOptions {
     bool enableIntersectionObserver { false };
     bool enableModernMediaControls { true };
     bool enablePointerLock { false };
+    bool enableCredentialManagement { false };
 
     float deviceScaleFactor { 1 };
     Vector<String> overrideLanguages;