Changeset 217289 in webkit


Ignore:
Timestamp:
May 23, 2017, 12:39:16 PM (9 years ago)
Author:
Chris Dumez
Message:

Unreviewed, roll out r215229

It caused CachedScripts in MemoryCache to be reused with different encodings
even though CachedScript potentially has already decoded data or cached hash
with a previous encoding.

LayoutTests/imported/w3c:

  • web-platform-tests/html/semantics/scripting-1/the-script-element/script-charset-01-expected.txt:

Source/WebCore:

  • loader/TextResourceDecoder.cpp:

(WebCore::TextResourceDecoder::setEncoding):

  • loader/TextResourceDecoder.h:

(WebCore::TextResourceDecoder::sawError):
(WebCore::TextResourceDecoder::encodingSet): Deleted.

  • loader/cache/CachedCSSStyleSheet.cpp:

(WebCore::CachedCSSStyleSheet::setEncoding):

  • loader/cache/CachedResource.cpp:

(WebCore::CachedResource::CachedResource):

  • loader/cache/CachedResource.h:

(WebCore::CachedResource::hasUnknownEncoding):
(WebCore::CachedResource::setHasUnknownEncoding):

  • loader/cache/CachedResourceLoader.cpp:

(WebCore::CachedResourceLoader::determineRevalidationPolicy):

LayoutTests:

  • TestExpectations:
  • fast/loader/cache-encoding-expected.txt:
  • fast/loader/cache-encoding.html:
  • http/tests/preload/preload-encoding-expected.txt:
  • http/tests/preload/preload-encoding.php:
Location:
trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r217285 r217289  
     12017-05-23  Chris Dumez  <cdumez@apple.com>
     2
     3        Unreviewed, roll out r215229
     4
     5        It caused CachedScripts in MemoryCache to be reused with different encodings
     6        even though CachedScript potentially has already decoded data or cached hash
     7        with a previous encoding.
     8
     9        * TestExpectations:
     10        * fast/loader/cache-encoding-expected.txt:
     11        * fast/loader/cache-encoding.html:
     12        * http/tests/preload/preload-encoding-expected.txt:
     13        * http/tests/preload/preload-encoding.php:
     14
    1152017-05-23  Ryan Haddad  <ryanhaddad@apple.com>
    216
  • trunk/LayoutTests/TestExpectations

    r217285 r217289  
    11701170########################################
    11711171
     1172webkit.org/b/170122 http/tests/preload/single_download_preload_headers_charset.php [ Pass Failure ]
     1173
    11721174########################################
    11731175### START OF -disabled tests
  • trunk/LayoutTests/fast/loader/cache-encoding-expected.txt

    r215229 r217289  
     1CONSOLE MESSAGE: line 1: SyntaxError: Invalid character '\u8307'
    12First load a script with a wrong charset then again with the right one. Second attempt should work and 'scriptSuccess' should be set to true. 'successfullyParsed' will be undefined.
    23
     
    56
    67PASS scriptSuccess is true
    7 PASS scriptSuccess is true
    8 PASS successfullyParsed is true
     8FAIL successfullyParsed should be true (of type boolean). Was undefined (of type undefined).
    99
    1010TEST COMPLETE
  • trunk/LayoutTests/fast/loader/cache-encoding.html

    r215229 r217289  
    1717function test()
    1818{
    19     appendScriptWithCharset("utf-8", function () {
    20         shouldBeTrue("scriptSuccess");
    21         appendScriptWithCharset("utf-16", function () {
     19    appendScriptWithCharset("utf-16", function () {
     20        appendScriptWithCharset("utf-8", function () {
    2221            shouldBeTrue("scriptSuccess");
    2322            finishJSTest();
  • trunk/LayoutTests/http/tests/preload/preload-encoding-expected.txt

    r215229 r217289  
     1CONSOLE MESSAGE: line 1: SyntaxError: Invalid character '\u8307'
    12First load a script with a wrong charset then again with the right one. Second attempt should work and 'scriptSuccess' should be set to true. 'successfullyParsed' will be undefined.
    23
     
    56
    67PASS scriptSuccess is true
    7 PASS scriptSuccess is true
    8 PASS successfullyParsed is true
     8FAIL successfullyParsed should be true (of type boolean). Was undefined (of type undefined).
    99
    1010TEST COMPLETE
  • trunk/LayoutTests/http/tests/preload/preload-encoding.php

    r215229 r217289  
    2020function test()
    2121{
    22     appendScriptWithCharset("utf-8", function () {
    23         shouldBeTrue("scriptSuccess");
    24         scriptSuccess = false;
    25         appendScriptWithCharset("utf-16", function () {
     22    appendScriptWithCharset("utf-16", function () {
     23        appendScriptWithCharset("utf-8", function () {
    2624            shouldBeTrue("scriptSuccess");
    2725            finishJSTest();
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r217280 r217289  
     12017-05-23  Chris Dumez  <cdumez@apple.com>
     2
     3        Unreviewed, roll out r215229
     4
     5        It caused CachedScripts in MemoryCache to be reused with different encodings
     6        even though CachedScript potentially has already decoded data or cached hash
     7        with a previous encoding.
     8
     9        * web-platform-tests/html/semantics/scripting-1/the-script-element/script-charset-01-expected.txt:
     10
    1112017-05-23 Emilio Cobos Álvarez  <ecobos@igalia.com>
    212
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/script-charset-01-expected.txt

    r215229 r217289  
    33PASS Script @type: unknown parameters 1
    44PASS Script @type: unknown parameters 2
    5 FAIL Script @type: unknown parameters 3 assert_equals: expected "śćążź" but got "\ufffd湿\ufffd"
     5PASS Script @type: unknown parameters 3
    66PASS Script @type: unknown parameters 4
    77PASS Script @type: unknown parameters 5
  • trunk/Source/WebCore/ChangeLog

    r217286 r217289  
     12017-05-23  Chris Dumez  <cdumez@apple.com>
     2
     3        Unreviewed, roll out r215229
     4
     5        It caused CachedScripts in MemoryCache to be reused with different encodings
     6        even though CachedScript potentially has already decoded data or cached hash
     7        with a previous encoding.
     8
     9        * loader/TextResourceDecoder.cpp:
     10        (WebCore::TextResourceDecoder::setEncoding):
     11        * loader/TextResourceDecoder.h:
     12        (WebCore::TextResourceDecoder::sawError):
     13        (WebCore::TextResourceDecoder::encodingSet): Deleted.
     14        * loader/cache/CachedCSSStyleSheet.cpp:
     15        (WebCore::CachedCSSStyleSheet::setEncoding):
     16        * loader/cache/CachedResource.cpp:
     17        (WebCore::CachedResource::CachedResource):
     18        * loader/cache/CachedResource.h:
     19        (WebCore::CachedResource::hasUnknownEncoding):
     20        (WebCore::CachedResource::setHasUnknownEncoding):
     21        * loader/cache/CachedResourceLoader.cpp:
     22        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
     23
    1242017-05-23  Zalan Bujtas  <zalan@apple.com>
    225
  • trunk/Source/WebCore/loader/TextResourceDecoder.cpp

    r215229 r217289  
    356356        m_encoding = encoding;
    357357
    358     m_encodingSet = true;
    359358    m_codec = nullptr;
    360359    m_source = source;
  • trunk/Source/WebCore/loader/TextResourceDecoder.h

    r215229 r217289  
    6969    void useLenientXMLDecoding() { m_useLenientXMLDecoding = true; }
    7070    bool sawError() const { return m_sawError; }
    71     bool encodingSet() const { return m_encodingSet; }
    7271
    7372private:
     
    9796    bool m_sawError;
    9897    bool m_usesEncodingDetector;
    99     bool m_encodingSet { false };
    10098
    10199    std::unique_ptr<HTMLMetaCharsetParser> m_charsetParser;
  • trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp

    r217256 r217289  
    6565void CachedCSSStyleSheet::setEncoding(const String& chs)
    6666{
    67     ASSERT(m_decodedSheetText.isNull());
    6867    m_decoder->setEncoding(chs, TextResourceDecoder::EncodingFromHTTPHeader);
    6968}
  • trunk/Source/WebCore/loader/cache/CachedResource.cpp

    r215816 r217289  
    124124    , m_initiatorName(request.initiatorName())
    125125    , m_isLinkPreload(request.isLinkPreload())
     126    , m_hasUnknownEncoding(request.isLinkPreload())
    126127    , m_type(type)
    127128{
  • trunk/Source/WebCore/loader/cache/CachedResource.h

    r215229 r217289  
    233233    bool isLinkPreload() { return m_isLinkPreload; }
    234234    void setLinkPreload() { m_isLinkPreload = true; }
     235    bool hasUnknownEncoding() { return m_hasUnknownEncoding; }
     236    void setHasUnknownEncoding(bool hasUnknownEncoding) { m_hasUnknownEncoding = hasUnknownEncoding; }
    235237
    236238    void registerHandle(CachedResourceHandleBase*);
     
    335337    bool m_loading { false };
    336338    bool m_isLinkPreload { false };
     339    bool m_hasUnknownEncoding { false };
    337340
    338341    bool m_switchingClientsToRevalidatedResource { false };
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp

    r216143 r217289  
    936936
    937937    auto* textDecoder = existingResource->textResourceDecoder();
    938     if (textDecoder && !textDecoder->hasEqualEncodingForCharset(cachedResourceRequest.charset()) && !textDecoder->encodingSet())
     938    if (textDecoder && !textDecoder->hasEqualEncodingForCharset(cachedResourceRequest.charset())) {
     939        if (!existingResource->hasUnknownEncoding())
     940            return Reload;
     941        existingResource->setHasUnknownEncoding(false);
    939942        existingResource->setEncoding(cachedResourceRequest.charset());
     943    }
    940944
    941945    // FIXME: We should use the same cache policy for all resource types. The raw resource policy is overly strict
Note: See TracChangeset for help on using the changeset viewer.