@@ -2642,6 +2642,13 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
2642
2642
<ul class="brief">
2643
2643
<li><dfn data-x-href="https://w3c.github.io/webappsec-mixed-content/#a-priori-authenticated-url"><i>a priori</i> authenticated URL</dfn></li>
2644
2644
</ul>
2645
+
2646
+ <p>The following terms are defined in <cite>Subresource Integrity</cite>: <ref spec=SRI></p>
2647
+
2648
+ <ul class="brief">
2649
+ <li><dfn data-x-href="https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata">parse integrity metadata</dfn></li>
2650
+ <li><dfn data-x-href="https://w3c.github.io/webappsec-subresource-integrity/#get-the-strongest-metadata">get the strongest metadata from set</dfn></li>
2651
+ </ul>
2645
2652
</dd>
2646
2653
2647
2654
<dt>Paint Timing</dt>
@@ -14646,7 +14653,10 @@ data-x="rel-preload">preload</span>; <span data-x="attr-link-as">as</span>=font<
14646
14653
<var>document</var> to <var>uncommittedPreloads</var>:</p>
14647
14654
14648
14655
<ol>
14649
- <li><p>Let <var>entry</var> be new <span>preload entry</span>.</p></li>
14656
+ <li><p>Let <var>entry</var> be new <span>preload entry</span> whose
14657
+ <span data-x="preload integrity metadata">integrity metadata</span> is
14658
+ <var>earlyRequest</var>'s <span
14659
+ data-x="concept-request-integrity-metadata">integrity metadata</span>.</p></li>
14650
14660
14651
14661
<li>
14652
14662
<p>Let <var>respond</var> be the following steps given <span
@@ -26200,7 +26210,6 @@ document.body.appendChild(wbr);</code></pre>
26200
26210
<dd>A <span>URL</span>
26201
26211
26202
26212
<dt><dfn data-x="preload destination">destination</dfn>
26203
- <dt><dfn data-x="preload integrity metadata">integrity metadata</dfn>
26204
26213
<dd>A string
26205
26214
26206
26215
<dt><dfn data-x="preload mode">mode</dfn>
@@ -26216,6 +26225,9 @@ document.body.appendChild(wbr);</code></pre>
26216
26225
item">items</span>:</p>
26217
26226
26218
26227
<dl>
26228
+ <dt><dfn data-x="preload integrity metadata">integrity metadata</dfn>
26229
+ <dd>A string
26230
+
26219
26231
<dt><dfn data-x="preload response">response</dfn>
26220
26232
<dd>Null or a <span data-x="concept-response">response</span>
26221
26233
@@ -26232,8 +26244,7 @@ document.body.appendChild(wbr);</code></pre>
26232
26244
<ol>
26233
26245
<li><p>Let <var>key</var> be a <span>preload key</span> whose <span data-x="preload
26234
26246
URL">URL</span> is <var>url</var>, <span data-x="preload destination">destination</span> is
26235
- <var>destination</var>, <span data-x="preload integrity metadata">integrity metadata</span> is
26236
- <var>integrityMetadata</var>, <span data-x="preload mode">mode</span> is <var>mode</var>, and
26247
+ <var>destination</var>, <span data-x="preload mode">mode</span> is <var>mode</var>, and
26237
26248
<span data-x="preload credentials mode">credentials mode</span> is
26238
26249
<var>credentialsMode</var>.</p></li>
26239
26250
@@ -26246,6 +26257,47 @@ document.body.appendChild(wbr);</code></pre>
26246
26257
26247
26258
<li><p>Let <var>entry</var> be <var>preloads</var>[<var>key</var>].</p></li>
26248
26259
26260
+ <li><p>Let <var>consumerIntegrityMetadata</var> be the result of
26261
+ <span data-x="parse integrity metadata">parsing</span> <var>integrityMetadata</var>.</p></li>
26262
+
26263
+ <li><p>Let <var>preloadIntegrityMetadata</var> be the result of
26264
+ <span data-x="parse integrity metadata">parsing</span> <var>entry</var>'s
26265
+ <span data-x="preload integrity metadata">integrity metadata</span>.</p></li>
26266
+
26267
+ <li>
26268
+ <p>If none of the following condition apply:</p>
26269
+
26270
+ <ul>
26271
+ <li><p><var>consumerIntegrityMetadata</var> is <code data-x="">no metadata</code>;</p></li>
26272
+
26273
+ <li>
26274
+ <p><var>consumerIntegrityMetadata</var> is equal to <var>preloadIntegrityMetadata</var>;
26275
+ or</p>
26276
+
26277
+ <p class="XXX">This comparison would ignore unknown integrity options. See <a
26278
+ href="https://github.com/w3c/webappsec-subresource-integrity/issues/116">issue #116.</a></p>
26279
+ </li>
26280
+
26281
+ <li><p>the user-agent has determined that <var>preloadIntegrityMetadata</var> is
26282
+ <span data-x="get the strongest metadata from set">stronger</span> than
26283
+ <var>consumerIntegrityMetadata</var> <ref spec=SRI></p></li>
26284
+ </ul>
26285
+
26286
+ <p>then return false.</p>
26287
+
26288
+ <p class="note">A mistmatch in integrity metadata between the preload and the consumer, even if
26289
+ both match the data, would lead to an additional fetch from the network.</p>
26290
+
26291
+ <p class="note">It is important that <span data-x="network error">network errors</span> are
26292
+ added to the preload cache so that if a preload request results in an error, the erroneous
26293
+ response isn't re-requested from the network later. This also has security implications;
26294
+ consider the case where a developer specifies subresource integrity metadata on a preload
26295
+ request, but not the following resource request. If the preload request fails subresource
26296
+ integrity verification and is discarded, the resource request will fetch and consume a
26297
+ potentially-malicious response from the network without verifying its integrity. <ref
26298
+ spec=SRI></p>
26299
+ </li>
26300
+
26249
26301
<li><p><span data-x="map remove">Remove</span> <var>preloads</var>[<var>key</var>].</p></li>
26250
26302
26251
26303
<li><p>If <var>entry</var> <span data-x="preload response">response</span> is null, then set
@@ -26341,9 +26393,7 @@ document.body.appendChild(wbr);</code></pre>
26341
26393
<var>request</var>, return a new <span>preload key</span> whose <span data-x="preload
26342
26394
URL">URL</span> is <var>request</var>'s <span data-x="concept-request-url">URL</span>, <span
26343
26395
data-x="preload destination">destination</span> is <var>request</var>'s <span
26344
- data-x="concept-request-destination">destination</span>, <span data-x="preload integrity
26345
- metadata">integrity metadata</span> is <var>request</var>'s <span
26346
- data-x="concept-request-integrity-metadata">integrity metadata</span>, <span data-x="preload
26396
+ data-x="concept-request-destination">destination</span>, <span data-x="preload
26347
26397
mode">mode</span> is <var>request</var>'s <span data-x="concept-request-mode">mode</span>, and
26348
26398
<span data-x="preload credentials mode">credentials mode</span> is <var>request</var>'s <span
26349
26399
data-x="concept-request-credentials-mode">credentials mode</span>.</p>
@@ -26386,7 +26436,9 @@ document.body.appendChild(wbr);</code></pre>
26386
26436
<li><p>Let <var>preloadKey</var> be the result of <span data-x="create a preload key">creating a
26387
26437
preload key</span> given <var>request</var>.</p></li>
26388
26438
26389
- <li><p>Let <var>preloadEntry</var> be a new <span>preload entry</span>.</p></li>
26439
+ <li><p>Let <var>preloadEntry</var> be a new <span>preload entry</span> whose
26440
+ <span data-x="preload integrity metadata">integrity metadata</span> is <var>request</var>'s <span
26441
+ data-x="concept-request-integrity-metadata">integrity metadata</span>.</p></li>
26390
26442
26391
26443
<li><p><span data-x="map set">Set</span> <var>el</var>'s <span>node document</span>'s <span>map
26392
26444
of preloaded resources</span>[<var>preloadKey</var>] to <var>preloadEntry</var>.</p></li>
0 commit comments