Skip to content

Commit f0effa9

Browse files
committed
CREDENTIAL: Add 'FormData::makeOpaque()', which does what you'd expect.
1 parent 8db27ea commit f0effa9

File tree

2 files changed

+72
-20
lines changed

2 files changed

+72
-20
lines changed

specs/credentialmanagement/index.html

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -226,17 +226,20 @@ <h2 class="no-num no-toc no-ref heading settled" id="contents"><span class="cont
226226
</ul>
227227
<li><a href="#opaque-formdata"><span class="secno">3.3</span> <span class="content">Opaque <code>FormData</code> objects</span></a>
228228
<ul class="toc">
229-
<li><a href="#opaque-formdata-algorithms"><span class="secno">3.3.1</span> <span class="content">
229+
<li><a href="#monkey-patching-formdata"><span class="secno">3.3.1</span> <span class="content">
230+
<code>FormData</code> Modifications
231+
</span></a>
232+
<li><a href="#opaque-formdata-algorithms"><span class="secno">3.3.2</span> <span class="content">
230233
Algorithm Modifications
231234
</span></a>
232235
<ul class="toc">
233-
<li><a href="#monkey-patching-xhr-2"><span class="secno">3.3.1.1</span> <span class="content">XHR: <code>FormData</code>’s <code>get()</code></span></a>
234-
<li><a href="#monkey-patching-xhr-3"><span class="secno">3.3.1.2</span> <span class="content">XHR: <code>FormData</code>’s <code>getAll()</code></span></a>
235-
<li><a href="#monkey-patching-fetch-1"><span class="secno">3.3.1.3</span> <span class="content">Fetch: <code>Request</code> objects</span></a>
236-
<li><a href="#monkey-patching-fetch-2"><span class="secno">3.3.1.4</span> <span class="content">Fetch: <code>Request</code>’s constructor</span></a>
237-
<li><a href="#monkey-patching-fetch-3"><span class="secno">3.3.1.5</span> <span class="content">Fetch: <code>Body</code>’s <code>consume body</code></span></a>
238-
<li><a href="#monkey-patching-fetch-4"><span class="secno">3.3.1.6</span> <span class="content">Fetch: Extract a byte stream</span></a>
239-
<li><a href="#monkey-patching-serviceworkers-1"><span class="secno">3.3.1.7</span> <span class="content">Service Worker: Handle a Fetch</span></a>
236+
<li><a href="#monkey-patching-xhr-2"><span class="secno">3.3.2.1</span> <span class="content">XHR: <code>FormData</code>’s <code>get()</code></span></a>
237+
<li><a href="#monkey-patching-xhr-3"><span class="secno">3.3.2.2</span> <span class="content">XHR: <code>FormData</code>’s <code>getAll()</code></span></a>
238+
<li><a href="#monkey-patching-fetch-1"><span class="secno">3.3.2.3</span> <span class="content">Fetch: <code>Request</code> objects</span></a>
239+
<li><a href="#monkey-patching-fetch-2"><span class="secno">3.3.2.4</span> <span class="content">Fetch: <code>Request</code>’s constructor</span></a>
240+
<li><a href="#monkey-patching-fetch-3"><span class="secno">3.3.2.5</span> <span class="content">Fetch: <code>Body</code>’s <code>consume body</code></span></a>
241+
<li><a href="#monkey-patching-fetch-4"><span class="secno">3.3.2.6</span> <span class="content">Fetch: Extract a byte stream</span></a>
242+
<li><a href="#monkey-patching-serviceworkers-1"><span class="secno">3.3.2.7</span> <span class="content">Service Worker: Handle a Fetch</span></a>
240243
</ul>
241244
</ul>
242245
</ul>
@@ -1524,6 +1527,14 @@ <h4 class="heading settled" data-level="3.2.2" id="identifying-federations"><spa
15241527

15251528
<h3 class="heading settled" data-level="3.3" id="opaque-formdata"><span class="secno">3.3. </span><span class="content">Opaque <code>FormData</code> objects</span><a class="self-link" href="#opaque-formdata"></a></h3>
15261529

1530+
1531+
<h4 class="heading settled" data-level="3.3.1" id="monkey-patching-formdata"><span class="secno">3.3.1. </span><span class="content">
1532+
<code>FormData</code> Modifications
1533+
</span><a class="self-link" href="#monkey-patching-formdata"></a></h4>
1534+
1535+
1536+
<p class="issue" id="issue-dd26c8e1"><a class="self-link" href="#issue-dd26c8e1"></a> Stop monkey patching XHR once we know that this is what we want.</p>
1537+
15271538

15281539
<p><code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a></code> objects have a <dfn data-dfn-type="dfn" data-noexport="" id="opaque-flag">opaque flag<a class="self-link" href="#opaque-flag"></a></dfn>, unset by default,
15291540
and set only if the object is constructed from a <code class="idl"><a data-link-type="idl" href="#passwordcredential">PasswordCredential</a></code>.
@@ -1533,6 +1544,16 @@ <h3 class="heading settled" data-level="3.3" id="opaque-formdata"><span class="s
15331544
<a data-link-type="dfn" href="https://xhr.spec.whatwg.org/#concept-fetchbodyinit-extract">extracted</a> in the context of executing <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#interface-xmlhttprequest">XMLHttpRequest</a></code>'s
15341545
<code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#dom-xmlhttprequest-send">send()</a></code> method.</p>
15351546

1547+
1548+
<pre class="idl">partial interface <a class="idl-code" data-link-type="interface" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a> {
1549+
void <dfn class="idl-code" data-dfn-for="FormData" data-dfn-type="method" data-export="" data-lt="makeOpaque()" id="dom-formdata-makeopaque">makeOpaque<a class="self-link" href="#dom-formdata-makeopaque"></a></dfn>();
1550+
};
1551+
</pre>
1552+
1553+
1554+
<p>The <code class="idl"><a data-link-type="idl" href="#dom-formdata-makeopaque">makeOpaque()</a></code> method sets the <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a></code>'s <a data-link-type="dfn" href="#opaque-flag">opaque
1555+
flag</a>.</p>
1556+
15361557

15371558
<p><dfn data-dfn-type="dfn" data-local-lt="opaque" data-noexport="" id="opaque-formdata-objects">Opaque <code>FormData</code> objects<a class="self-link" href="#opaque-formdata-objects"></a></dfn> have the
15381559
following properties:</p>
@@ -1552,6 +1573,12 @@ <h3 class="heading settled" data-level="3.3" id="opaque-formdata"><span class="s
15521573

15531574

15541575

1576+
<li>
1577+
Whenever the user agent would iterate over an opaque <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a></code> object’s
1578+
value pairs, instead iterate over an empty list.
1579+
1580+
1581+
15551582
<li>
15561583
Whenever the user agent would <a data-link-type="dfn" href="https://xhr.spec.whatwg.org/#concept-fetchbodyinit-extract">extract a byte stream and
15571584
<code>Content-Type</code></a> from an opaque <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a></code> object
@@ -1601,15 +1628,15 @@ <h3 class="heading settled" data-level="3.3" id="opaque-formdata"><span class="s
16011628
</ol>
16021629

16031630

1604-
<h4 class="heading settled" data-level="3.3.1" id="opaque-formdata-algorithms"><span class="secno">3.3.1. </span><span class="content">
1631+
<h4 class="heading settled" data-level="3.3.2" id="opaque-formdata-algorithms"><span class="secno">3.3.2. </span><span class="content">
16051632
Algorithm Modifications
16061633
</span><a class="self-link" href="#opaque-formdata-algorithms"></a></h4>
16071634

16081635

16091636
<p class="issue" id="issue-020f94b2"><a class="self-link" href="#issue-020f94b2"></a> Monkey-patching! Hooray! Talk with Anne, et al.</p>
16101637

16111638

1612-
<h5 class="heading settled" data-level="3.3.1.1" id="monkey-patching-xhr-2"><span class="secno">3.3.1.1. </span><span class="content">XHR: <code>FormData</code>’s <code>get()</code></span><a class="self-link" href="#monkey-patching-xhr-2"></a></h5>
1639+
<h5 class="heading settled" data-level="3.3.2.1" id="monkey-patching-xhr-2"><span class="secno">3.3.2.1. </span><span class="content">XHR: <code>FormData</code>’s <code>get()</code></span><a class="self-link" href="#monkey-patching-xhr-2"></a></h5>
16131640

16141641

16151642
<p>Redefine <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a></code>'s <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#dom-formdata-get">get()</a></code> method as follows:</p>
@@ -1630,7 +1657,7 @@ <h5 class="heading settled" data-level="3.3.1.1" id="monkey-patching-xhr-2"><spa
16301657
</ol>
16311658

16321659

1633-
<h5 class="heading settled" data-level="3.3.1.2" id="monkey-patching-xhr-3"><span class="secno">3.3.1.2. </span><span class="content">XHR: <code>FormData</code>’s <code>getAll()</code></span><a class="self-link" href="#monkey-patching-xhr-3"></a></h5>
1660+
<h5 class="heading settled" data-level="3.3.2.2" id="monkey-patching-xhr-3"><span class="secno">3.3.2.2. </span><span class="content">XHR: <code>FormData</code>’s <code>getAll()</code></span><a class="self-link" href="#monkey-patching-xhr-3"></a></h5>
16341661

16351662

16361663
<p>Redefine <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a></code>'s <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#dom-formdata-getAll">getAll()</a></code> method as follows:</p>
@@ -1651,14 +1678,14 @@ <h5 class="heading settled" data-level="3.3.1.2" id="monkey-patching-xhr-3"><spa
16511678
</ol>
16521679

16531680

1654-
<h5 class="heading settled" data-level="3.3.1.3" id="monkey-patching-fetch-1"><span class="secno">3.3.1.3. </span><span class="content">Fetch: <code>Request</code> objects</span><a class="self-link" href="#monkey-patching-fetch-1"></a></h5>
1681+
<h5 class="heading settled" data-level="3.3.2.3" id="monkey-patching-fetch-1"><span class="secno">3.3.2.3. </span><span class="content">Fetch: <code>Request</code> objects</span><a class="self-link" href="#monkey-patching-fetch-1"></a></h5>
16551682

16561683

16571684
<p>Add a new <dfn data-dfn-type="dfn" data-noexport="" id="opaque-request-flag">opaque request flag<a class="self-link" href="#opaque-request-flag"></a></dfn> to Fetch’s <code class="idl"><a data-link-type="idl" href="https://fetch.spec.whatwg.org/#request">Request</a></code> objects. This
16581685
flag is unset unless otherwise specified.</p>
16591686

16601687

1661-
<h5 class="heading settled" data-level="3.3.1.4" id="monkey-patching-fetch-2"><span class="secno">3.3.1.4. </span><span class="content">Fetch: <code>Request</code>’s constructor</span><a class="self-link" href="#monkey-patching-fetch-2"></a></h5>
1688+
<h5 class="heading settled" data-level="3.3.2.4" id="monkey-patching-fetch-2"><span class="secno">3.3.2.4. </span><span class="content">Fetch: <code>Request</code>’s constructor</span><a class="self-link" href="#monkey-patching-fetch-2"></a></h5>
16621689

16631690

16641691
<p>Add the following step after step 3 of step 17 of Fetch’s <code class="idl"><a data-link-type="idl" href="https://fetch.spec.whatwg.org/#dom-request">Request()</a></code>
@@ -1677,7 +1704,7 @@ <h5 class="heading settled" data-level="3.3.1.4" id="monkey-patching-fetch-2"><s
16771704
</ol>
16781705

16791706

1680-
<h5 class="heading settled" data-level="3.3.1.5" id="monkey-patching-fetch-3"><span class="secno">3.3.1.5. </span><span class="content">Fetch: <code>Body</code>’s <code>consume body</code></span><a class="self-link" href="#monkey-patching-fetch-3"></a></h5>
1707+
<h5 class="heading settled" data-level="3.3.2.5" id="monkey-patching-fetch-3"><span class="secno">3.3.2.5. </span><span class="content">Fetch: <code>Body</code>’s <code>consume body</code></span><a class="self-link" href="#monkey-patching-fetch-3"></a></h5>
16811708

16821709

16831710
<p>Insert the following step after step 2 of step 3 of Fetch’s <a data-link-type="dfn" href="https://fetch.spec.whatwg.org/#concept-Body-consume-body">consume
@@ -1695,7 +1722,7 @@ <h5 class="heading settled" data-level="3.3.1.5" id="monkey-patching-fetch-3"><s
16951722
</ol>
16961723

16971724

1698-
<h5 class="heading settled" data-level="3.3.1.6" id="monkey-patching-fetch-4"><span class="secno">3.3.1.6. </span><span class="content">Fetch: Extract a byte stream</span><a class="self-link" href="#monkey-patching-fetch-4"></a></h5>
1725+
<h5 class="heading settled" data-level="3.3.2.6" id="monkey-patching-fetch-4"><span class="secno">3.3.2.6. </span><span class="content">Fetch: Extract a byte stream</span><a class="self-link" href="#monkey-patching-fetch-4"></a></h5>
16991726

17001727

17011728
<p>Redefine the <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a></code> case of Fetch’s <a data-link-type="dfn" href="https://xhr.spec.whatwg.org/#concept-fetchbodyinit-extract">extract a byte
@@ -1744,7 +1771,7 @@ <h5 class="heading settled" data-level="3.3.1.6" id="monkey-patching-fetch-4"><s
17441771
</ol>
17451772

17461773

1747-
<h5 class="heading settled" data-level="3.3.1.7" id="monkey-patching-serviceworkers-1"><span class="secno">3.3.1.7. </span><span class="content">Service Worker: Handle a Fetch</span><a class="self-link" href="#monkey-patching-serviceworkers-1"></a></h5>
1774+
<h5 class="heading settled" data-level="3.3.2.7" id="monkey-patching-serviceworkers-1"><span class="secno">3.3.2.7. </span><span class="content">Service Worker: Handle a Fetch</span><a class="self-link" href="#monkey-patching-serviceworkers-1"></a></h5>
17481775

17491776

17501777
<p class="issue" id="issue-7ac73c88"><a class="self-link" href="#issue-7ac73c88"></a> Figure out the right way to monkey-patch Service Worker’s
@@ -3397,16 +3424,17 @@ <h3 class="no-num heading settled" id="index-defined-here"><span class="content"
33973424
<li><a href="#federated-identity-provider">IDP</a><span>, in §2</span>
33983425
<li><a href="#locallystoredcredential">LocallyStoredCredential</a><span>, in §3.1.1</span>
33993426
<li><a href="#dictdef-locallystoredcredentialdata">LocallyStoredCredentialData</a><span>, in §3.1.1</span>
3427+
<li><a href="#dom-formdata-makeopaque">makeOpaque()</a><span>, in §3.3.1</span>
34003428
<li><a href="#match">Match</a><span>, in §3.1.2</span>
34013429
<li>name
34023430
<ul>
34033431
<li><a href="#dom-locallystoredcredentialdata-name">dict-member for LocallyStoredCredentialData</a><span>, in §3.1.1</span>
34043432
<li><a href="#dom-locallystoredcredential-name">attribute for LocallyStoredCredential</a><span>, in §3.1.2</span>
34053433
</ul>
3406-
<li><a href="#opaque-formdata-objects">opaque</a><span>, in §3.3</span>
3407-
<li><a href="#opaque-flag">opaque flag</a><span>, in §3.3</span>
3408-
<li><a href="#opaque-formdata-objects">Opaque FormData objects</a><span>, in §3.3</span>
3409-
<li><a href="#opaque-request-flag">opaque request flag</a><span>, in §3.3.1.3</span>
3434+
<li><a href="#opaque-formdata-objects">opaque</a><span>, in §3.3.1</span>
3435+
<li><a href="#opaque-flag">opaque flag</a><span>, in §3.3.1</span>
3436+
<li><a href="#opaque-formdata-objects">Opaque FormData objects</a><span>, in §3.3.1</span>
3437+
<li><a href="#opaque-request-flag">opaque request flag</a><span>, in §3.3.2.3</span>
34103438
<li><a href="#dom-credentialcontainer-get-options-options">options</a><span>, in §3.2</span>
34113439
<li><a href="#options-matching-algorithm">options matching
34123440
algorithm</a><span>, in §3.1.2</span>
@@ -3631,6 +3659,10 @@ <h2 class="no-num heading settled" id="idl-index"><span class="content">IDL Inde
36313659
sequence&lt;DOMString> <a class="idl-code" data-link-type="dict-member" data-type="sequence<DOMString> " href="#dom-federatedcredentialrequestoptions-protocols">protocols</a>;
36323660
};
36333661

3662+
partial interface <a class="idl-code" data-link-type="interface" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a> {
3663+
void <a href="#dom-formdata-makeopaque">makeOpaque</a>();
3664+
};
3665+
36343666
</pre>
36353667
<h2 class="no-num heading settled" id="issues-index"><span class="content">Issues Index</span><a class="self-link" href="#issues-index"></a></h2>
36363668
<div style="counter-reset:issue">
@@ -3644,6 +3676,7 @@ <h2 class="no-num heading settled" id="issues-index"><span class="content">Issue
36443676
<div class="issue"> We should support explicit sign-up via
36453677
<code class="idl"><a data-link-type="idl" href="#passwordcredential">PasswordCredential</a></code>s with generated passwords. Perhaps something similar to
36463678
iOS8’s <code>SecCreateSharedWebCredentialPassword</code>. <a href="https://github.com/w3c/webappsec/issues/250">&lt;https://github.com/w3c/webappsec/issues/250></a><a href="#issue-74489b21"></a></div>
3679+
<div class="issue"> Stop monkey patching XHR once we know that this is what we want.<a href="#issue-dd26c8e1"></a></div>
36473680
<div class="issue"> Determine the right spec text to impart the following: When a request
36483681
is handed off to Fetch, mark it as opaque if its body is populated from an
36493682
opaque <code class="idl"><a data-link-type="idl" href="https://xhr.spec.whatwg.org/#interface-formdata">FormData</a></code> object, or if it is the result of a form submission with

specs/credentialmanagement/index.src.html

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -939,13 +939,28 @@ <h4 id="identifying-federations">Identifying providers</h4>
939939

940940
<h3 id="opaque-formdata">Opaque <code>FormData</code> objects</h3>
941941

942+
<h4 id="monkey-patching-formdata">
943+
<code>FormData</code> Modifications
944+
</h4>
945+
946+
ISSUE: Stop monkey patching XHR once we know that this is what we want.
947+
942948
{{FormData}} objects have a <dfn>opaque flag</dfn>, unset by default,
943949
and set only if the object is constructed from a {{PasswordCredential}}.
944950
Opaque {{FormData}} objects return <code>null</code> and the empty sequence
945951
when their {{FormData/get()}} and {{FormData/getAll()}} methods are executed,
946952
respectively. Further, data from opaque {{FormData}} objects can only be
947953
<a>extracted</a> in the context of executing {{XMLHttpRequest}}'s
948954
{{XMLHttpRequest/send()}} method.
955+
956+
<pre class="idl">
957+
partial interface FormData {
958+
void makeOpaque();
959+
};
960+
</pre>
961+
962+
The {{FormData/makeOpaque()}} method sets the {{FormData}}'s <a>opaque
963+
flag</a>.
949964

950965
<dfn local-lt="opaque">Opaque <code>FormData</code> objects</dfn> have the
951966
following properties:
@@ -959,6 +974,10 @@ <h3 id="opaque-formdata">Opaque <code>FormData</code> objects</h3>
959974
Whenever the user agent would execute an opaque {{FormData}} object's
960975
{{FormData/getAll()}} method, it MUST return the empty sequence.
961976
</li>
977+
<li>
978+
Whenever the user agent would iterate over an opaque {{FormData}} object's
979+
value pairs, instead iterate over an empty list.
980+
</li>
962981
<li>
963982
Whenever the user agent would <a lt="extract">extract a byte stream and
964983
<code>Content-Type</code></a> from an opaque {{FormData}} object

0 commit comments

Comments
 (0)