WebKit Bugzilla
Attachment 360026 Details for
Bug 182325
: Align with Fetch on data: URLs
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-182325-20190124213553.patch (text/plain), 18.07 KB, created by
Rob Buis
on 2019-01-24 12:35:54 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Rob Buis
Created:
2019-01-24 12:35:54 PST
Size:
18.07 KB
patch
obsolete
>Subversion Revision: 240444 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 07430bdba832a1860e1ece720935bef3343d5b40..2f1ce7dbc42caff6dfee2943d7e56d60dd078d32 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,16 @@ >+2019-01-24 Rob Buis <rbuis@igalia.com> >+ >+ Align with Fetch on data: URLs >+ https://bugs.webkit.org/show_bug.cgi?id=182325 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Test: web-platform-tests/fetch/data-urls/processing.any.js >+ >+ * platform/network/DataURLDecoder.cpp: >+ (WebCore::DataURLDecoder::parseMediaType): >+ (WebCore::DataURLDecoder::DecodeTask::process): >+ > 2019-01-24 John Wilander <wilander@apple.com> > > Add Ad Click Attribution as an internal/experimental feature >diff --git a/Source/WebCore/platform/network/DataURLDecoder.cpp b/Source/WebCore/platform/network/DataURLDecoder.cpp >index 59ddf074a5f32c50a1b76cd10dec88bcac851de7..590394572f912d61bfe4cc7c94c3e77eceb7618c 100644 >--- a/Source/WebCore/platform/network/DataURLDecoder.cpp >+++ b/Source/WebCore/platform/network/DataURLDecoder.cpp >@@ -28,6 +28,7 @@ > > #include "DecodeEscapeSequences.h" > #include "HTTPParsers.h" >+#include "ParsedContentType.h" > #include "SharedBuffer.h" > #include "TextEncoding.h" > #include <wtf/MainThread.h> >@@ -47,18 +48,13 @@ static WorkQueue& decodeQueue() > > static Result parseMediaType(const String& mediaType) > { >- auto mimeType = extractMIMETypeFromMediaType(mediaType); >- auto charset = extractCharsetFromMediaType(mediaType); >- >- // https://tools.ietf.org/html/rfc2397 >- // If <mediatype> is omitted, it defaults to text/plain;charset=US-ASCII. As a shorthand, >- // "text/plain" can be omitted but the charset parameter supplied. >- if (mimeType.isEmpty()) { >- mimeType = "text/plain"_s; >- if (charset.isEmpty()) >- charset = "US-ASCII"_s; >- } >- return { mimeType, charset, !mediaType.isEmpty() ? mediaType : "text/plain;charset=US-ASCII", nullptr }; >+ if (!isValidContentType(mediaType)) >+ return { "text/plain"_s, "US-ASCII"_s, "text/plain;charset=US-ASCII"_s, nullptr }; >+ ParsedContentType parsedContentType(mediaType); >+ auto mimeType = parsedContentType.mimeType(); >+ auto charset = parsedContentType.charset(); >+ >+ return { mimeType, charset, mediaType, nullptr }; > } > > struct DecodeTask { >@@ -87,6 +83,9 @@ public: > auto header = StringView(urlString).substring(strlen(dataString), headerEnd - strlen(dataString)); > isBase64 = header.endsWithIgnoringASCIICase(StringView(base64String)); > auto mediaType = (isBase64 ? header.substring(0, header.length() - strlen(base64String)) : header).toString(); >+ mediaType = mediaType.stripWhiteSpace(); >+ if (mediaType.startsWith(';')) >+ mediaType.insert("text/plain", 0); > result = parseMediaType(mediaType); > > return true; >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index e771668d5312d6c6b9db8ba1f54b64300bf9c543..9d4ab470eb59a0b8d33e89751941d1f7cf7c3df4 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,15 @@ >+2019-01-24 Rob Buis <rbuis@igalia.com> >+ >+ Align with Fetch on data: URLs >+ https://bugs.webkit.org/show_bug.cgi?id=182325 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Update improved test expectations. >+ >+ * web-platform-tests/fetch/data-urls/processing.any-expected.txt: >+ * web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt: >+ > 2019-01-23 Oriol Brufau <obrufau@igalia.com> > > [css-logical] Implement flow-relative inset properties >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any-expected.txt >index c878ab6750bc237125f850d9691c7086a25eb590..71013619945e979dd106f6b7f17d1d17dc7f4a86 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any-expected.txt >@@ -3,7 +3,7 @@ CONSOLE MESSAGE: Fetch API cannot load data:text/html. > CONSOLE MESSAGE: Fetch API cannot load data:text/html ;charset=x. > > PASS Setup. >-FAIL "data://test/,X" assert_equals: expected "text/plain;charset=US-ASCII" but got "//test/" >+PASS "data://test/,X" > PASS "data://test:test/,X" > PASS "data:,X" > PASS "data:" >@@ -13,64 +13,64 @@ PASS "data:," > FAIL "data:,X#X" assert_array_equals: lengths differ, expected 1 got 3 > PASS "data:,%FF" > PASS "data:text/plain,X" >-FAIL "data:text/plain ,X" assert_equals: expected (string) "text/plain" but got (object) null >+PASS "data:text/plain ,X" > PASS "data:text/plain%20,X" > FAIL "data:text/plain\f,X" assert_equals: expected "text/plain%0c" but got "text/plain%0C" > FAIL "data:text/plain%0C,X" assert_equals: expected "text/plain%0c" but got "text/plain%0C" > FAIL "data:text/plain;,X" assert_equals: expected "text/plain" but got "text/plain;" >-FAIL "data:;x=x;charset=x,X" assert_equals: expected "text/plain;x=x;charset=x" but got ";x=x;charset=x" >-FAIL "data:;x=x,X" assert_equals: expected "text/plain;x=x" but got ";x=x" >+PASS "data:;x=x;charset=x,X" >+PASS "data:;x=x,X" > PASS "data:text/plain;charset=windows-1252,%C2%B1" > FAIL "data:text/plain;Charset=UTF-8,%C2%B1" assert_equals: expected "text/plain;charset=UTF-8" but got "text/plain;Charset=UTF-8" > PASS "data:image/gif,%C2%B1" > FAIL "data:IMAGE/gif,%C2%B1" assert_equals: expected "image/gif" but got "IMAGE/gif" > FAIL "data:IMAGE/gif;hi=x,%C2%B1" assert_equals: expected "image/gif;hi=x" but got "IMAGE/gif;hi=x" > FAIL "data:IMAGE/gif;CHARSET=x,%C2%B1" assert_equals: expected "image/gif;charset=x" but got "IMAGE/gif;CHARSET=x" >-FAIL "data: ,%FF" assert_equals: expected (string) "text/plain;charset=US-ASCII" but got (object) null >-FAIL "data:%20,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%20" >-FAIL "data:\f,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%0C" >-FAIL "data:%1F,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%1F" >-FAIL "data:\0,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%00" >-FAIL "data:%00,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%00" >-FAIL "data:text/html ,X" assert_equals: expected (string) "text/html" but got (object) null >-FAIL "data:text / html,X" assert_equals: expected "text/plain;charset=US-ASCII" but got "text / html" >-FAIL "data:â ,X" assert_equals: expected "text/plain;charset=US-ASCII" but got "%E2%80%A0" >+PASS "data: ,%FF" >+PASS "data:%20,%FF" >+PASS "data:\f,%FF" >+PASS "data:%1F,%FF" >+PASS "data:\0,%FF" >+PASS "data:%00,%FF" >+PASS "data:text/html ,X" >+PASS "data:text / html,X" >+PASS "data:â ,X" > FAIL "data:â /â ,X" assert_equals: expected "%e2%80%a0/%e2%80%a0" but got "%E2%80%A0/%E2%80%A0" >-FAIL "data:X,X" assert_equals: expected "text/plain;charset=US-ASCII" but got "X" >+PASS "data:X,X" > PASS "data:image/png,X X" > PASS "data:application/javascript,X X" > PASS "data:application/xml,X X" > PASS "data:text/javascript,X X" > PASS "data:text/plain,X X" > PASS "data:unknown/unknown,X X" >-FAIL "data:text/plain;a=\",\",X" assert_equals: expected "text/plain;a=\"\"" but got "text/plain;a=\"" >+FAIL "data:text/plain;a=\",\",X" assert_equals: expected "text/plain;a=\"\"" but got "text/plain;charset=US-ASCII" > PASS "data:text/plain;a=%2C,X" >-FAIL "data:;base64;base64,WA" assert_equals: expected "text/plain" but got ";base64" >+FAIL "data:;base64;base64,WA" assert_equals: expected "text/plain" but got "text/plain;base64" > FAIL "data:x/x;base64;base64,WA" assert_equals: expected "x/x" but got "x/x;base64" > FAIL "data:x/x;base64;charset=x,WA" assert_equals: expected "x/x;charset=x" but got "x/x;base64;charset=x" > FAIL "data:x/x;base64;charset=x;base64,WA" assert_equals: expected "x/x;charset=x" but got "x/x;base64;charset=x" > FAIL "data:x/x;base64;base64x,WA" assert_equals: expected "x/x" but got "x/x;base64;base64x" > PASS "data:;base64,W%20A" > PASS "data:;base64,W%0CA" >-FAIL "data:x;base64x,WA" assert_equals: expected "text/plain;charset=US-ASCII" but got "x;base64x" >-FAIL "data:x;base64;x,WA" assert_equals: expected "text/plain;charset=US-ASCII" but got "x;base64;x" >-FAIL "data:x;base64=x,WA" assert_equals: expected "text/plain;charset=US-ASCII" but got "x;base64=x" >+PASS "data:x;base64x,WA" >+PASS "data:x;base64;x,WA" >+PASS "data:x;base64=x,WA" > FAIL "data:; base64,WA" assert_array_equals: lengths differ, expected 1 got 2 > FAIL "data:; base64,WA" assert_array_equals: lengths differ, expected 1 got 2 > FAIL "data: ;charset=x ; base64,WA" assert_array_equals: lengths differ, expected 1 got 2 >-FAIL "data:;base64;,WA" assert_equals: expected "text/plain" but got ";base64;" >+FAIL "data:;base64;,WA" assert_equals: expected "text/plain" but got "text/plain;base64;" > FAIL "data:;base64 ,WA" assert_array_equals: lengths differ, expected 1 got 2 > FAIL "data:;base64 ,WA" assert_array_equals: lengths differ, expected 1 got 2 >-FAIL "data:;base 64,WA" assert_equals: expected "text/plain" but got ";base 64" >+FAIL "data:;base 64,WA" assert_equals: expected "text/plain" but got "text/plain;base 64" > PASS "data:;BASe64,WA" >-FAIL "data:;%62ase64,WA" assert_equals: expected "text/plain" but got ";%62ase64" >-FAIL "data:%3Bbase64,WA" assert_equals: expected "text/plain;charset=US-ASCII" but got "%3Bbase64" >-FAIL "data:;charset=x,X" assert_equals: expected "text/plain;charset=x" but got ";charset=x" >-FAIL "data:; charset=x,X" assert_equals: expected "text/plain;charset=x" but got "; charset=x" >-FAIL "data:;charset =x,X" assert_equals: expected "text/plain" but got ";charset =x" >-FAIL "data:;charset= x,X" assert_equals: expected "text/plain;charset=\" x\"" but got ";charset= x" >-FAIL "data:;charset=,X" assert_equals: expected "text/plain" but got ";charset=" >-FAIL "data:;charset,X" assert_equals: expected "text/plain" but got ";charset" >-FAIL "data:;charset=\"x\",X" assert_equals: expected "text/plain;charset=x" but got ";charset=\"x\"" >-FAIL "data:;CHARSET=\"X\",X" assert_equals: expected "text/plain;charset=X" but got ";CHARSET=\"X\"" >+FAIL "data:;%62ase64,WA" assert_equals: expected "text/plain" but got "text/plain;%62ase64" >+PASS "data:%3Bbase64,WA" >+PASS "data:;charset=x,X" >+FAIL "data:; charset=x,X" assert_equals: expected "text/plain;charset=x" but got "text/plain; charset=x" >+FAIL "data:;charset =x,X" assert_equals: expected "text/plain" but got "text/plain;charset =x" >+FAIL "data:;charset= x,X" assert_equals: expected "text/plain;charset=\" x\"" but got "text/plain;charset= x" >+FAIL "data:;charset=,X" assert_equals: expected "text/plain" but got "text/plain;charset=US-ASCII" >+FAIL "data:;charset,X" assert_equals: expected "text/plain" but got "text/plain;charset" >+FAIL "data:;charset=\"x\",X" assert_equals: expected "text/plain;charset=x" but got "text/plain;charset=\"x\"" >+FAIL "data:;CHARSET=\"X\",X" assert_equals: expected "text/plain;charset=X" but got "text/plain;CHARSET=\"X\"" > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt >index 1c23aaadae8f3d5e97f221d22e75da13a2bfd58a..4d8eb949664a99a0930d733b6c393009b8476d35 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/data-urls/processing.any.worker-expected.txt >@@ -1,6 +1,6 @@ > > PASS Setup. >-FAIL "data://test/,X" assert_equals: expected "text/plain;charset=US-ASCII" but got "//test/" >+PASS "data://test/,X" > PASS "data://test:test/,X" > PASS "data:,X" > PASS "data:" >@@ -10,64 +10,64 @@ PASS "data:," > FAIL "data:,X#X" assert_array_equals: lengths differ, expected 1 got 3 > PASS "data:,%FF" > PASS "data:text/plain,X" >-FAIL "data:text/plain ,X" assert_equals: expected (string) "text/plain" but got (object) null >+PASS "data:text/plain ,X" > PASS "data:text/plain%20,X" > FAIL "data:text/plain\f,X" assert_equals: expected "text/plain%0c" but got "text/plain%0C" > FAIL "data:text/plain%0C,X" assert_equals: expected "text/plain%0c" but got "text/plain%0C" > FAIL "data:text/plain;,X" assert_equals: expected "text/plain" but got "text/plain;" >-FAIL "data:;x=x;charset=x,X" assert_equals: expected "text/plain;x=x;charset=x" but got ";x=x;charset=x" >-FAIL "data:;x=x,X" assert_equals: expected "text/plain;x=x" but got ";x=x" >+PASS "data:;x=x;charset=x,X" >+PASS "data:;x=x,X" > PASS "data:text/plain;charset=windows-1252,%C2%B1" > FAIL "data:text/plain;Charset=UTF-8,%C2%B1" assert_equals: expected "text/plain;charset=UTF-8" but got "text/plain;Charset=UTF-8" > PASS "data:image/gif,%C2%B1" > FAIL "data:IMAGE/gif,%C2%B1" assert_equals: expected "image/gif" but got "IMAGE/gif" > FAIL "data:IMAGE/gif;hi=x,%C2%B1" assert_equals: expected "image/gif;hi=x" but got "IMAGE/gif;hi=x" > FAIL "data:IMAGE/gif;CHARSET=x,%C2%B1" assert_equals: expected "image/gif;charset=x" but got "IMAGE/gif;CHARSET=x" >-FAIL "data: ,%FF" assert_equals: expected (string) "text/plain;charset=US-ASCII" but got (object) null >-FAIL "data:%20,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%20" >-FAIL "data:\f,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%0C" >-FAIL "data:%1F,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%1F" >-FAIL "data:\0,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%00" >-FAIL "data:%00,%FF" assert_equals: expected "text/plain;charset=US-ASCII" but got "%00" >-FAIL "data:text/html ,X" assert_equals: expected (string) "text/html" but got (object) null >-FAIL "data:text / html,X" assert_equals: expected "text/plain;charset=US-ASCII" but got "text / html" >-FAIL "data:â ,X" assert_equals: expected "text/plain;charset=US-ASCII" but got "%E2%80%A0" >+PASS "data: ,%FF" >+PASS "data:%20,%FF" >+PASS "data:\f,%FF" >+PASS "data:%1F,%FF" >+PASS "data:\0,%FF" >+PASS "data:%00,%FF" >+PASS "data:text/html ,X" >+PASS "data:text / html,X" >+PASS "data:â ,X" > FAIL "data:â /â ,X" assert_equals: expected "%e2%80%a0/%e2%80%a0" but got "%E2%80%A0/%E2%80%A0" >-FAIL "data:X,X" assert_equals: expected "text/plain;charset=US-ASCII" but got "X" >+PASS "data:X,X" > PASS "data:image/png,X X" > PASS "data:application/javascript,X X" > PASS "data:application/xml,X X" > PASS "data:text/javascript,X X" > PASS "data:text/plain,X X" > PASS "data:unknown/unknown,X X" >-FAIL "data:text/plain;a=\",\",X" assert_equals: expected "text/plain;a=\"\"" but got "text/plain;a=\"" >+FAIL "data:text/plain;a=\",\",X" assert_equals: expected "text/plain;a=\"\"" but got "text/plain;charset=US-ASCII" > PASS "data:text/plain;a=%2C,X" >-FAIL "data:;base64;base64,WA" assert_equals: expected "text/plain" but got ";base64" >+FAIL "data:;base64;base64,WA" assert_equals: expected "text/plain" but got "text/plain;base64" > FAIL "data:x/x;base64;base64,WA" assert_equals: expected "x/x" but got "x/x;base64" > FAIL "data:x/x;base64;charset=x,WA" assert_equals: expected "x/x;charset=x" but got "x/x;base64;charset=x" > FAIL "data:x/x;base64;charset=x;base64,WA" assert_equals: expected "x/x;charset=x" but got "x/x;base64;charset=x" > FAIL "data:x/x;base64;base64x,WA" assert_equals: expected "x/x" but got "x/x;base64;base64x" > PASS "data:;base64,W%20A" > PASS "data:;base64,W%0CA" >-FAIL "data:x;base64x,WA" assert_equals: expected "text/plain;charset=US-ASCII" but got "x;base64x" >-FAIL "data:x;base64;x,WA" assert_equals: expected "text/plain;charset=US-ASCII" but got "x;base64;x" >-FAIL "data:x;base64=x,WA" assert_equals: expected "text/plain;charset=US-ASCII" but got "x;base64=x" >+PASS "data:x;base64x,WA" >+PASS "data:x;base64;x,WA" >+PASS "data:x;base64=x,WA" > FAIL "data:; base64,WA" assert_array_equals: lengths differ, expected 1 got 2 > FAIL "data:; base64,WA" assert_array_equals: lengths differ, expected 1 got 2 > FAIL "data: ;charset=x ; base64,WA" assert_array_equals: lengths differ, expected 1 got 2 >-FAIL "data:;base64;,WA" assert_equals: expected "text/plain" but got ";base64;" >+FAIL "data:;base64;,WA" assert_equals: expected "text/plain" but got "text/plain;base64;" > FAIL "data:;base64 ,WA" assert_array_equals: lengths differ, expected 1 got 2 > FAIL "data:;base64 ,WA" assert_array_equals: lengths differ, expected 1 got 2 >-FAIL "data:;base 64,WA" assert_equals: expected "text/plain" but got ";base 64" >+FAIL "data:;base 64,WA" assert_equals: expected "text/plain" but got "text/plain;base 64" > PASS "data:;BASe64,WA" >-FAIL "data:;%62ase64,WA" assert_equals: expected "text/plain" but got ";%62ase64" >-FAIL "data:%3Bbase64,WA" assert_equals: expected "text/plain;charset=US-ASCII" but got "%3Bbase64" >-FAIL "data:;charset=x,X" assert_equals: expected "text/plain;charset=x" but got ";charset=x" >-FAIL "data:; charset=x,X" assert_equals: expected "text/plain;charset=x" but got "; charset=x" >-FAIL "data:;charset =x,X" assert_equals: expected "text/plain" but got ";charset =x" >-FAIL "data:;charset= x,X" assert_equals: expected "text/plain;charset=\" x\"" but got ";charset= x" >-FAIL "data:;charset=,X" assert_equals: expected "text/plain" but got ";charset=" >-FAIL "data:;charset,X" assert_equals: expected "text/plain" but got ";charset" >-FAIL "data:;charset=\"x\",X" assert_equals: expected "text/plain;charset=x" but got ";charset=\"x\"" >-FAIL "data:;CHARSET=\"X\",X" assert_equals: expected "text/plain;charset=X" but got ";CHARSET=\"X\"" >+FAIL "data:;%62ase64,WA" assert_equals: expected "text/plain" but got "text/plain;%62ase64" >+PASS "data:%3Bbase64,WA" >+PASS "data:;charset=x,X" >+FAIL "data:; charset=x,X" assert_equals: expected "text/plain;charset=x" but got "text/plain; charset=x" >+FAIL "data:;charset =x,X" assert_equals: expected "text/plain" but got "text/plain;charset =x" >+FAIL "data:;charset= x,X" assert_equals: expected "text/plain;charset=\" x\"" but got "text/plain;charset= x" >+FAIL "data:;charset=,X" assert_equals: expected "text/plain" but got "text/plain;charset=US-ASCII" >+FAIL "data:;charset,X" assert_equals: expected "text/plain" but got "text/plain;charset" >+FAIL "data:;charset=\"x\",X" assert_equals: expected "text/plain;charset=x" but got "text/plain;charset=\"x\"" >+FAIL "data:;CHARSET=\"X\",X" assert_equals: expected "text/plain;charset=X" but got "text/plain;CHARSET=\"X\"" >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 182325
:
356308
|
356310
|
356312
|
356314
|
356319
|
356335
|
356348
|
356359
|
356404
|
356504
|
356588
|
360026
|
360096
|
360101
|
360102
|
360104
|
360106
|
360239
|
360365
|
360367
|
360370
|
360499
|
361798
|
361806
|
361842