Changeset 36650 in webkit


Ignore:
Timestamp:
Sep 18, 2008 9:15:14 PM (16 years ago)
Author:
collinj@webkit.org
Message:
 
Location:
trunk
Files:
5 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r36627 r36650  
     12008-09-18  Collin Jackson  <collinj@webkit.org>
     2
     3        Reviewed by Antti Koivisto and Mark Rowe.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=20690
     6
     7        Add test for DNS prefetch control.
     8
     9        * http/tests/misc/dns-prefetch-control-expected.txt: Added.
     10        * http/tests/misc/dns-prefetch-control.html: Added.
     11        * http/tests/misc/resources/dns-prefetch-control.php: Added.
     12
    1132008-09-18  Chris Fleizach  <cfleizach@apple.com>
    214
  • trunk/WebCore/ChangeLog

    r36649 r36650  
     12008-09-18  Collin Jackson  <collinj@webkit.org>
     2
     3        Reviewed by Antti Koivisto and Mark Rowe.
     4
     5        Test: http/tests/misc/dns-prefetch-control.html
     6
     7        https://bugs.webkit.org/show_bug.cgi?id=20690
     8
     9        Invoke WebCore::prefetchDNS() on host names that appear in
     10        in the href of hyperlinks and <link rel="dns-prefetch">. This
     11        can be used to implement DNS prefetching.
     12
     13        * WebCore.vcproj/WebCore.vcproj:
     14        * WebCore.xcodeproj/project.pbxproj:
     15        * dom/Document.cpp:
     16        (WebCore::Document::Document):
     17        (WebCore::Document::processHttpEquiv):
     18        (WebCore::Document::setSecurityOrigin):
     19        (WebCore::Document::initDNSPrefetch):
     20        (WebCore::Document::parseDNSPrefetchControlHeader):
     21        * dom/Document.h:
     22        (WebCore::Document::isDNSPrefetchEnabled):
     23        * html/HTMLAnchorElement.cpp:
     24        (WebCore::HTMLAnchorElement::parseMappedAttribute):
     25        * html/HTMLLinkElement.cpp:
     26        (WebCore::HTMLLinkElement::HTMLLinkElement):
     27        (WebCore::HTMLLinkElement::parseMappedAttribute):
     28        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
     29        (WebCore::HTMLLinkElement::process):
     30        * html/HTMLLinkElement.h:
     31        * html/PreloadScanner.cpp:
     32        (WebCore::PreloadScanner::processAttribute):
     33        * loader/FrameLoader.cpp:
     34        (WebCore::FrameLoader::begin):
     35        * platform/gtk/TemporaryLinkStubs.cpp:
     36        (WebCore::prefetchDNS):
     37        * platform/network/DNS.h: Added.
     38        * platform/network/cf/DNSCFNet.cpp: Added.
     39        (WebCore::prefetchDNS):
     40        * platform/qt/TemporaryLinkStubs.cpp:
     41        (WebCore::prefetchDNS):
     42        * platform/wx/TemporaryLinkStubs.cpp:
     43        (WebCore::prefetchDNS):
     44
    1452008-09-18  David Hyatt  <hyatt@apple.com>
    246
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r36630 r36650  
    55895589                                        </File>
    55905590                                        <File
     5591                                                RelativePath="..\platform\network\cf\DNSCFNet.cpp"
     5592                                                >
     5593                                                <FileConfiguration
     5594                                                        Name="Debug_Cairo|Win32"
     5595                                                        ExcludedFromBuild="true"
     5596                                                        >
     5597                                                        <Tool
     5598                                                                Name="VCCLCompilerTool"
     5599                                                        />
     5600                                                </FileConfiguration>
     5601                                                <FileConfiguration
     5602                                                        Name="Release_Cairo|Win32"
     5603                                                        ExcludedFromBuild="true"
     5604                                                        >
     5605                                                        <Tool
     5606                                                                Name="VCCLCompilerTool"
     5607                                                        />
     5608                                                </FileConfiguration>
     5609                                        </File>
     5610                                        <File
    55915611                                                RelativePath="..\platform\network\cf\ResourceRequestCFNet.h"
    55925612                                                >
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r36635 r36650  
    33823382                B2EBDC9D0AF77E3400AE4A68 /* SVGRenderTreeAsText.h in Headers */ = {isa = PBXBuildFile; fileRef = B2EBDC9B0AF77E3400AE4A68 /* SVGRenderTreeAsText.h */; };
    33833383                B2ED97710B1F55CE00257D0F /* GraphicsContextCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2ED97700B1F55CE00257D0F /* GraphicsContextCG.cpp */; };
     3384                B2F34FE60E82F81400F627CD /* DNS.h in Headers */ = {isa = PBXBuildFile; fileRef = B2F34FE50E82F81400F627CD /* DNS.h */; };
     3385                B2F34FE90E82F82700F627CD /* DNSCFNet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2F34FE80E82F82700F627CD /* DNSCFNet.cpp */; };
    33843386                B2FA3D360AB75A6F000E5AC4 /* JSSVGAnimateColorElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2FA3C4E0AB75A6E000E5AC4 /* JSSVGAnimateColorElement.cpp */; };
    33853387                B2FA3D370AB75A6F000E5AC4 /* JSSVGAnimateColorElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B2FA3C4F0AB75A6E000E5AC4 /* JSSVGAnimateColorElement.h */; };
     
    78867888                B2EBDC9B0AF77E3400AE4A68 /* SVGRenderTreeAsText.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGRenderTreeAsText.h; sourceTree = "<group>"; };
    78877889                B2ED97700B1F55CE00257D0F /* GraphicsContextCG.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsContextCG.cpp; sourceTree = "<group>"; };
     7890                B2F34FE50E82F81400F627CD /* DNS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DNS.h; sourceTree = "<group>"; };
     7891                B2F34FE80E82F82700F627CD /* DNSCFNet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DNSCFNet.cpp; path = cf/DNSCFNet.cpp; sourceTree = "<group>"; };
    78887892                B2FA3C4E0AB75A6E000E5AC4 /* JSSVGAnimateColorElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGAnimateColorElement.cpp; sourceTree = "<group>"; };
    78897893                B2FA3C4F0AB75A6E000E5AC4 /* JSSVGAnimateColorElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGAnimateColorElement.h; sourceTree = "<group>"; };
     
    92999303                        isa = PBXGroup;
    93009304                        children = (
     9305                                B2F34FE70E82F81700F627CD /* cf */,
    93019306                                656B84E70AEA1DAE00A095B4 /* mac */,
    93029307                                934F71370D5A6EFF00018D69 /* AuthenticationChallengeBase.cpp */,
     
    93049309                                514C76580CE923A1007EF3CD /* Credential.cpp */,
    93059310                                514C76590CE923A1007EF3CD /* Credential.h */,
     9311                                B2F34FE50E82F81400F627CD /* DNS.h */,
    93069312                                514C765A0CE923A1007EF3CD /* FormData.cpp */,
    93079313                                514C765B0CE923A1007EF3CD /* FormData.h */,
     
    1258812594                        sourceTree = "<group>";
    1258912595                };
     12596                B2F34FE70E82F81700F627CD /* cf */ = {
     12597                        isa = PBXGroup;
     12598                        children = (
     12599                                B2F34FE80E82F82700F627CD /* DNSCFNet.cpp */,
     12600                        );
     12601                        name = cf;
     12602                        sourceTree = "<group>";
     12603                };
    1259012604                BC1A3790097C6F970019F3D8 /* bindings */ = {
    1259112605                        isa = PBXGroup;
     
    1582415838                                BC2272E40E82EE9B00E7F975 /* StyleRareInheritedData.h in Headers */,
    1582515839                                BC2273040E82F1E600E7F975 /* StyleInheritedData.h in Headers */,
     15840                                B2F34FE60E82F81400F627CD /* DNS.h in Headers */,
    1582615841                        );
    1582715842                        runOnlyForDeploymentPostprocessing = 0;
     
    1765517670                                BC2272E30E82EE9B00E7F975 /* StyleRareInheritedData.cpp in Sources */,
    1765617671                                BC2273030E82F1E600E7F975 /* StyleInheritedData.cpp in Sources */,
     17672                                B2F34FE90E82F82700F627CD /* DNSCFNet.cpp in Sources */,
    1765717673                        );
    1765817674                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebCore/dom/Document.cpp

    r36466 r36650  
    352352   
    353353    initSecurityContext();
     354    initDNSPrefetch();
    354355
    355356    static int docID = 0;
     
    19531954    } else if (equalIgnoringCase(equiv, "content-language"))
    19541955        setContentLanguage(content);
     1956    else if (equalIgnoringCase(equiv, "x-dns-prefetch-control"))
     1957        parseDNSPrefetchControlHeader(content);
    19551958}
    19561959
     
    40314034{
    40324035    m_securityOrigin = securityOrigin;
     4036    initDNSPrefetch();
    40334037}
    40344038
     
    43174321}
    43184322
     4323void Document::initDNSPrefetch()
     4324{
     4325    m_haveExplicitlyDisabledDNSPrefetch = false;
     4326    m_isDNSPrefetchEnabled = securityOrigin()->protocol() == "http";
     4327
     4328    // Inherit DNS prefetch opt-out from parent frame   
     4329    if (Document* parent = parentDocument()) {
     4330        if (!parent->isDNSPrefetchEnabled())
     4331            m_isDNSPrefetchEnabled = false;
     4332    }
     4333}
     4334
     4335void Document::parseDNSPrefetchControlHeader(const String& dnsPrefetchControl)
     4336{
     4337    if (equalIgnoringCase(dnsPrefetchControl, "on") && !m_haveExplicitlyDisabledDNSPrefetch) {
     4338        m_isDNSPrefetchEnabled = true;
     4339        return;
     4340    }
     4341
     4342    m_isDNSPrefetchEnabled = false;
     4343    m_haveExplicitlyDisabledDNSPrefetch = true;
     4344}
     4345
    43194346} // namespace WebCore
  • trunk/WebCore/dom/Document.h

    r36466 r36650  
    763763    HTMLCanvasElement* getCSSCanvasElement(const String& name);
    764764   
     765    bool isDNSPrefetchEnabled() const { return m_isDNSPrefetchEnabled; }
     766    void initDNSPrefetch();
     767    void parseDNSPrefetchControlHeader(const String&);
     768
    765769protected:
    766770    Document(Frame*, bool isXHTML);
     
    867871    bool m_gotoAnchorNeededAfterStylesheetsLoad;
    868872
     873    bool m_isDNSPrefetchEnabled;
     874    bool m_haveExplicitlyDisabledDNSPrefetch;
     875
    869876    String m_title;
    870877    bool m_titleSetExplicitly;
  • trunk/WebCore/html/HTMLAnchorElement.cpp

    r35304 r36650  
    2626
    2727#include "CSSHelper.h"
     28#include "DNS.h"
    2829#include "Document.h"
    2930#include "Event.h"
     
    3233#include "Frame.h"
    3334#include "FrameLoader.h"
     35#include "FrameLoaderClient.h"
    3436#include "HTMLImageElement.h"
    3537#include "HTMLNames.h"
     
    275277        if (wasLink != isLink())
    276278            setChanged();
     279        if (isLink() && document()->isDNSPrefetchEnabled()) {
     280            String value = attr->value();
     281            if (protocolIs(value, "http") || protocolIs(value, "https") || value.startsWith("//"))
     282                prefetchDNS(document()->completeURL(value).host());
     283        }
    277284    } else if (attr->name() == nameAttr ||
    278285             attr->name() == titleAttr ||
  • trunk/WebCore/html/HTMLLinkElement.cpp

    r36406 r36650  
    2626#include "CSSHelper.h"
    2727#include "CachedCSSStyleSheet.h"
     28#include "DNS.h"
    2829#include "DocLoader.h"
    2930#include "Document.h"
    3031#include "Frame.h"
    3132#include "FrameLoader.h"
     33#include "FrameLoaderClient.h"
    3234#include "FrameTree.h"
    3335#include "HTMLNames.h"
     
    4951    , m_isStyleSheet(false)
    5052    , m_isIcon(false)
     53    , m_isDNSPrefetch(false)
    5154    , m_createdByParser(false)
    5255{
     
    108111{
    109112    if (attr->name() == relAttr) {
    110         tokenizeRelAttribute(attr->value(), m_isStyleSheet, m_alternate, m_isIcon);
     113        tokenizeRelAttribute(attr->value(), m_isStyleSheet, m_alternate, m_isIcon, m_isDNSPrefetch);
    111114        process();
    112115    } else if (attr->name() == hrefAttr) {
     
    128131}
    129132
    130 void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& rel, bool& styleSheet, bool& alternate, bool& icon)
     133void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& rel, bool& styleSheet, bool& alternate, bool& icon, bool& dnsPrefetch)
    131134{
    132135    styleSheet = false;
    133136    icon = false;
    134137    alternate = false;
     138    dnsPrefetch = false;
    135139    if (equalIgnoringCase(rel, "stylesheet"))
    136140        styleSheet = true;
    137141    else if (equalIgnoringCase(rel, "icon") || equalIgnoringCase(rel, "shortcut icon"))
    138142        icon = true;
     143    else if (equalIgnoringCase(rel, "dns-prefetch"))
     144        dnsPrefetch = true;
    139145    else if (equalIgnoringCase(rel, "alternate stylesheet") || equalIgnoringCase(rel, "stylesheet alternate")) {
    140146        styleSheet = true;
     
    169175    if (m_isIcon && !m_url.isEmpty())
    170176        document()->setIconURL(m_url, type);
     177
     178    if (m_isDNSPrefetch && !m_url.isEmpty())
     179        prefetchDNS(KURL(m_url).host());
    171180
    172181    // Stylesheet
  • trunk/WebCore/html/HTMLLinkElement.h

    r36109 r36650  
    9494    virtual bool isURLAttribute(Attribute*) const;
    9595   
    96     static void tokenizeRelAttribute(const AtomicString& value, bool& stylesheet, bool& alternate, bool& icon);
     96    static void tokenizeRelAttribute(const AtomicString& value, bool& stylesheet, bool& alternate, bool& icon, bool& dnsPrefetch);
    9797
    9898    virtual void getSubresourceAttributeStrings(Vector<String>&) const;
     
    112112    bool m_isStyleSheet;
    113113    bool m_isIcon;
     114    bool m_isDNSPrefetch;
    114115    bool m_createdByParser;
    115116};
  • trunk/WebCore/html/PreloadScanner.cpp

    r35801 r36650  
    701701            bool alternate = false;
    702702            bool icon = false;
    703             HTMLLinkElement::tokenizeRelAttribute(value, styleSheet, alternate, icon);
    704             m_linkIsStyleSheet = styleSheet && !alternate && !icon;
     703            bool dnsPrefetch = false;
     704            HTMLLinkElement::tokenizeRelAttribute(value, styleSheet, alternate, icon, dnsPrefetch);
     705            m_linkIsStyleSheet = styleSheet && !alternate && !icon && !dnsPrefetch;
    705706        } else if (attribute == charsetAttr)
    706707            m_charset = value;
  • trunk/WebCore/loader/FrameLoader.cpp

    r36266 r36650  
    953953    document->docLoader()->setAutoLoadImages(settings && settings->loadsImagesAutomatically());
    954954
     955    if (m_documentLoader) {
     956        String dnsPrefetchControl = m_documentLoader->response().httpHeaderField("X-DNS-Prefetch-Control");
     957        if (!dnsPrefetchControl.isEmpty())
     958            document->parseDNSPrefetchControlHeader(dnsPrefetchControl);
     959    }
     960
    955961#if FRAME_LOADS_USER_STYLESHEET
    956962    KURL userStyleSheet = settings ? settings->userStyleSheetLocation() : KURL();
  • trunk/WebCore/platform/gtk/TemporaryLinkStubs.cpp

    r35469 r36650  
    2929
    3030#include "AXObjectCache.h"
     31#include "DNS.h"
    3132#include "Editor.h"
    3233#include "FrameView.h"
     
    7273PassRefPtr<SharedBuffer> SharedBuffer::createWithContentsOfFile(const String&) { notImplemented(); return 0; }
    7374
     75void prefetchDNS(const String& hostname) { notImplemented(); }
     76
    7477}
    7578
  • trunk/WebCore/platform/qt/TemporaryLinkStubs.cpp

    r35469 r36650  
    3434
    3535#include "AXObjectCache.h"
     36#include "DNS.h"
    3637#include "CString.h"
    3738#include "CachedResource.h"
     
    113114PassRefPtr<SharedBuffer> SharedBuffer::createWithContentsOfFile(const String&) { notImplemented(); return 0; }
    114115
     116void prefetchDNS(const String& hostname) { notImplemented(); }
     117
    115118}
    116119
  • trunk/WebCore/platform/wx/TemporaryLinkStubs.cpp

    r36532 r36650  
    4040#include "CookieJar.h"
    4141#include "Cursor.h"
     42#include "DNS.h"
    4243#include "DocumentFragment.h"
    4344#include "DocumentLoader.h"
     
    184185
    185186PassRefPtr<SharedBuffer> SharedBuffer::createWithContentsOfFile(const String&) { notImplemented(); return 0; }
     187
     188void prefetchDNS(const String& hostname) { notImplemented(); }
     189
    186190}
Note: See TracChangeset for help on using the changeset viewer.