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 09aab1b..69387c9 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 ed30a05..4acb003 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 669409f..1ee5767 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 669409f..1ee5767 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 77a6848..480f245 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 bbedd37..31f4083 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 a0e447e..8864067 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 5e27fcc..1e8984f 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 5787af5..675450f 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 97b291e..45a1bdd 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 ade33eb..6543fb4 100644 (file)
@@ -25,6 +25,7 @@
 
 [
     InterfaceName=Credential,
+    EnabledAtRuntime=CredentialManagement,
 ] interface BasicCredential {
     readonly attribute USVString id;
     readonly attribute DOMString type;
index dc5b948..8f04fa3 100644 (file)
@@ -26,6 +26,7 @@
 typedef (DOMFormData or URLSearchParams) CredentialBodyType;
 
 [
+    EnabledAtRuntime=CredentialManagement,
     Constructor(PasswordCredentialData data),
     Constructor(HTMLFormElement form),
     Exposed=Window,
index 7851185..f776322 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 d7d9b70..4cb521f 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 1f56891..c0f3550 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 d2f95e8..8b55202 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 35717bb..c221688 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 2ed0de9..43d7df8 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 e3623cd..a0922cc 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 47791b1..ca5b32d 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 a885d9b..5b508e4 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 614b74d..b899554 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 162a7b1..c5cdcba 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 6df8a9c..ff76402 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 8b86920..c517889 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 0aeb022..0ef58d3 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 568f62b..8ea6316 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 7d2ec7c..d895a44 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 fed2efe..6f629a4 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 9c66519..5d671ce 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;