Changeset 132520 in webkit


Ignore:
Timestamp:
Oct 25, 2012 1:05:17 PM (12 years ago)
Author:
Nate Chapin
Message:

Add a main resource type to the memory cache
https://bugs.webkit.org/show_bug.cgi?id=99864

Reviewed by Adam Barth.

No new tests, no functionality change.

  • inspector/InspectorPageAgent.cpp:

(WebCore::hasTextContent):
(WebCore::InspectorPageAgent::cachedResourceType):

  • loader/SubresourceLoader.cpp:

(WebCore::SubresourceLoader::willSendRequest):
(WebCore::SubresourceLoader::didReceiveResponse):
(WebCore::SubresourceLoader::didFail):

  • loader/cache/CachedRawResource.cpp:

(WebCore::CachedRawResource::CachedRawResource):
(WebCore::CachedRawResource::addAdditionalRequestHeaders):
(WebCore):
(WebCore::CachedRawResource::setShouldBufferData):
(WebCore::CachedRawResource::loader):
(WebCore::CachedRawResource::clear):

  • loader/cache/CachedRawResource.h:

(WebCore):
(CachedRawResource):

  • loader/cache/CachedResource.cpp:

(WebCore::defaultPriorityForResourceType):
(WebCore::cachedResourceTypeToTargetType):
(WebCore::CachedResource::updateResourceRequest):
(WebCore):

  • loader/cache/CachedResource.h:

(WebCore::CachedResource::setResourceError):
(WebCore::CachedResource::resourceError):
(CachedResource):
(WebCore::CachedResource::ignoreForRequestCount):

  • loader/cache/CachedResourceLoader.cpp:

(WebCore::createResource):
(WebCore::CachedResourceLoader::requestRawResource):
(WebCore::CachedResourceLoader::checkInsecureContent):
(WebCore::CachedResourceLoader::canRequest):
(WebCore::CachedResourceLoader::determineRevalidationPolicy):

  • loader/cache/CachedResourceLoader.h:

(CachedResourceLoader):

  • platform/network/ResourceLoadPriority.h:
  • platform/network/cf/ResourceRequestCFNet.h:

(WebCore::toResourceLoadPriority):
(WebCore::toHTTPPipeliningPriority):

Location:
trunk/Source/WebCore
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r132517 r132520  
     12012-10-25  Nate Chapin  <japhet@chromium.org>
     2
     3        Add a main resource type to the memory cache
     4        https://bugs.webkit.org/show_bug.cgi?id=99864
     5
     6        Reviewed by Adam Barth.
     7
     8        No new tests, no functionality change.
     9
     10        * inspector/InspectorPageAgent.cpp:
     11        (WebCore::hasTextContent):
     12        (WebCore::InspectorPageAgent::cachedResourceType):
     13        * loader/SubresourceLoader.cpp:
     14        (WebCore::SubresourceLoader::willSendRequest):
     15        (WebCore::SubresourceLoader::didReceiveResponse):
     16        (WebCore::SubresourceLoader::didFail):
     17        * loader/cache/CachedRawResource.cpp:
     18        (WebCore::CachedRawResource::CachedRawResource):
     19        (WebCore::CachedRawResource::addAdditionalRequestHeaders):
     20        (WebCore):
     21        (WebCore::CachedRawResource::setShouldBufferData):
     22        (WebCore::CachedRawResource::loader):
     23        (WebCore::CachedRawResource::clear):
     24        * loader/cache/CachedRawResource.h:
     25        (WebCore):
     26        (CachedRawResource):
     27        * loader/cache/CachedResource.cpp:
     28        (WebCore::defaultPriorityForResourceType):
     29        (WebCore::cachedResourceTypeToTargetType):
     30        (WebCore::CachedResource::updateResourceRequest):
     31        (WebCore):
     32        * loader/cache/CachedResource.h:
     33        (WebCore::CachedResource::setResourceError):
     34        (WebCore::CachedResource::resourceError):
     35        (CachedResource):
     36        (WebCore::CachedResource::ignoreForRequestCount):
     37        * loader/cache/CachedResourceLoader.cpp:
     38        (WebCore::createResource):
     39        (WebCore::CachedResourceLoader::requestRawResource):
     40        (WebCore::CachedResourceLoader::checkInsecureContent):
     41        (WebCore::CachedResourceLoader::canRequest):
     42        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
     43        * loader/cache/CachedResourceLoader.h:
     44        (CachedResourceLoader):
     45        * platform/network/ResourceLoadPriority.h:
     46        * platform/network/cf/ResourceRequestCFNet.h:
     47        (WebCore::toResourceLoadPriority):
     48        (WebCore::toHTTPPipeliningPriority):
     49
    1502012-10-25  Ojan Vafai  <ojan@chromium.org>
    251
  • trunk/Source/WebCore/inspector/InspectorPageAgent.cpp

    r132239 r132520  
    140140{
    141141    InspectorPageAgent::ResourceType type = InspectorPageAgent::cachedResourceType(*cachedResource);
    142     return type == InspectorPageAgent::StylesheetResource || type == InspectorPageAgent::ScriptResource || type == InspectorPageAgent::XHRResource;
     142    return type == InspectorPageAgent::DocumentResource || type == InspectorPageAgent::StylesheetResource || type == InspectorPageAgent::ScriptResource || type == InspectorPageAgent::XHRResource;
    143143}
    144144
     
    309309    case CachedResource::RawResource:
    310310        return InspectorPageAgent::XHRResource;
     311    case CachedResource::MainResource:
     312        return InspectorPageAgent::DocumentResource;
    311313    default:
    312314        break;
  • trunk/Source/WebCore/loader/SubresourceLoader.cpp

    r132287 r132520  
    148148
    149149    ResourceLoader::willSendRequest(newRequest, redirectResponse);
     150    if (newRequest.isNull())
     151        cancel();
    150152}
    151153
     
    184186    ResourceLoader::didReceiveResponse(response);
    185187
    186     if (response.isMultipart()) {
     188    // FIXME: Main resources have a different set of rules for multipart than images do.
     189    // Hopefully we can merge those 2 paths.
     190    if (response.isMultipart() && m_resource->type() != CachedResource::MainResource) {
    187191        m_loadingMultipartContent = true;
    188192
     
    285289    CachedResourceHandle<CachedResource> protectResource(m_resource);
    286290    m_state = Finishing;
     291    m_resource->setResourceError(error);
    287292    if (error.isTimeout())
    288293        m_resource->error(CachedResource::TimeoutError);
  • trunk/Source/WebCore/loader/cache/CachedRawResource.cpp

    r131660 r132520  
    3737namespace WebCore {
    3838
    39 CachedRawResource::CachedRawResource(ResourceRequest& resourceRequest)
    40     : CachedResource(resourceRequest, RawResource)
     39CachedRawResource::CachedRawResource(ResourceRequest& resourceRequest, Type type)
     40    : CachedResource(resourceRequest, type)
    4141    , m_identifier(0)
    4242{
     
    130130}
    131131
     132void CachedRawResource::setShouldBufferData(DataBufferingPolicy shouldBufferData)
     133{
     134    m_options.shouldBufferData = shouldBufferData;
     135}
     136
    132137static bool shouldIgnoreHeaderForCacheReuse(AtomicString headerName)
    133138{
     
    185190}
    186191
     192SubresourceLoader* CachedRawResource::loader() const
     193{
     194    return m_loader.get();
     195}
     196
     197void CachedRawResource::clear()
     198{
     199    m_data.clear();
     200    setEncodedSize(0);
     201    if (m_loader)
     202        m_loader->clearResourceData();
     203}
     204
    187205void CachedRawResource::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
    188206{
  • trunk/Source/WebCore/loader/cache/CachedRawResource.h

    r130983 r132520  
    3030class CachedRawResourceCallback;
    3131class CachedRawResourceClient;
     32class SubresourceLoader;
    3233
    3334class CachedRawResource : public CachedResource {
    3435public:
    35     CachedRawResource(ResourceRequest&);
     36    CachedRawResource(ResourceRequest&, Type);
    3637
    3738    // FIXME: AssociatedURLLoader shouldn't be a DocumentThreadableLoader and therefore shouldn't
     
    3940    // This can be fixed by splitting CORS preflighting out of DocumentThreacableLoader.
    4041    virtual void setDefersLoading(bool);
     42
     43    virtual void setShouldBufferData(DataBufferingPolicy);
    4144   
    4245    // FIXME: This is exposed for the InpsectorInstrumentation for preflights in DocumentThreadableLoader. It's also really lame.
    4346    unsigned long identifier() const { return m_identifier; }
     47
     48    SubresourceLoader* loader() const;
     49    void clear();
    4450
    4551    bool canReuse(const ResourceRequest&) const;
  • trunk/Source/WebCore/loader/cache/CachedResource.cpp

    r132501 r132520  
    6464{
    6565    switch (type) {
    66         case CachedResource::CSSStyleSheet:
    67             return ResourceLoadPriorityHigh;
    68         case CachedResource::Script:
    69         case CachedResource::FontResource:
    70         case CachedResource::RawResource:
    71             return ResourceLoadPriorityMedium;
    72         case CachedResource::ImageResource:
    73             return ResourceLoadPriorityLow;
     66    case CachedResource::MainResource:
     67        return ResourceLoadPriorityVeryHigh;
     68    case CachedResource::CSSStyleSheet:
     69        return ResourceLoadPriorityHigh;
     70    case CachedResource::Script:
     71    case CachedResource::FontResource:
     72    case CachedResource::RawResource:
     73        return ResourceLoadPriorityMedium;
     74    case CachedResource::ImageResource:
     75        return ResourceLoadPriorityLow;
    7476#if ENABLE(XSLT)
    75         case CachedResource::XSLStyleSheet:
    76             return ResourceLoadPriorityHigh;
     77    case CachedResource::XSLStyleSheet:
     78        return ResourceLoadPriorityHigh;
    7779#endif
    7880#if ENABLE(SVG)
    79         case CachedResource::SVGDocumentResource:
    80             return ResourceLoadPriorityLow;
     81    case CachedResource::SVGDocumentResource:
     82        return ResourceLoadPriorityLow;
    8183#endif
    8284#if ENABLE(LINK_PREFETCH)
    83         case CachedResource::LinkPrefetch:
    84             return ResourceLoadPriorityVeryLow;
    85         case CachedResource::LinkSubresource:
    86             return ResourceLoadPriorityVeryLow;
     85    case CachedResource::LinkPrefetch:
     86        return ResourceLoadPriorityVeryLow;
     87    case CachedResource::LinkSubresource:
     88        return ResourceLoadPriorityVeryLow;
    8789#endif
    8890#if ENABLE(VIDEO_TRACK)
    89         case CachedResource::TextTrackResource:
    90             return ResourceLoadPriorityLow;
     91    case CachedResource::TextTrackResource:
     92        return ResourceLoadPriorityLow;
    9193#endif
    9294#if ENABLE(CSS_SHADERS)
    93         case CachedResource::ShaderResource:
    94             return ResourceLoadPriorityMedium;
     95    case CachedResource::ShaderResource:
     96        return ResourceLoadPriorityMedium;
    9597#endif
    9698    }
     
    103105{
    104106    switch (type) {
     107    case CachedResource::MainResource:
     108        return ResourceRequest::TargetIsMainFrame;
    105109    case CachedResource::CSSStyleSheet:
    106110#if ENABLE(XSLT)
     
    278282#endif
    279283    m_resourceRequest.setPriority(loadPriority());
    280     addAdditionalRequestHeaders(cachedResourceLoader);
     284
     285    if (type() != MainResource)
     286        addAdditionalRequestHeaders(cachedResourceLoader);
    281287
    282288#if USE(PLATFORM_STRATEGIES)
  • trunk/Source/WebCore/loader/cache/CachedResource.h

    r132252 r132520  
    6262public:
    6363    enum Type {
     64        MainResource,
    6465        ImageResource,
    6566        CSSStyleSheet,
     
    105106    virtual void error(CachedResource::Status);
    106107
     108    void setResourceError(const ResourceError& error) { m_error = error; }
     109    const ResourceError& resourceError() const { return m_error; }
     110
    107111    virtual bool shouldIgnoreHTTPStatusCodeErrors() const { return false; }
    108112
     
    153157    bool ignoreForRequestCount() const
    154158    {
    155         return false
     159        return type() == MainResource
    156160#if ENABLE(LINK_PREFETCH)
    157161            || type() == LinkPrefetch
     
    257261protected:
    258262    virtual void checkNotify();
    259 
    260     virtual void addAdditionalRequestHeaders(CachedResourceLoader*);
    261263
    262264    void setEncodedSize(unsigned);
     
    306308    double freshnessLifetime() const;
    307309
     310    void addAdditionalRequestHeaders(CachedResourceLoader*);
    308311    void failBeforeStarting();
    309312
    310313    RefPtr<CachedMetadata> m_cachedMetadata;
     314
     315    ResourceError m_error;
    311316
    312317    double m_lastDecodedAccessTime; // Used as a "thrash guard" in the cache
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp

    r132501 r132520  
    8888        return new CachedFont(request);
    8989    case CachedResource::RawResource:
    90         return new CachedRawResource(request);
     90    case CachedResource::MainResource:
     91        return new CachedRawResource(request, type);
    9192#if ENABLE(XSLT)
    9293    case CachedResource::XSLStyleSheet:
     
    245246{
    246247    return static_cast<CachedRawResource*>(requestResource(CachedResource::RawResource, request).get());
     248}
     249
     250CachedResourceHandle<CachedRawResource> CachedResourceLoader::requestMainResource(CachedResourceRequest& request)
     251{
     252    return static_cast<CachedRawResource*>(requestResource(CachedResource::MainResource, request).get());
    247253}
    248254
     
    281287        break;
    282288    }
     289    case CachedResource::MainResource:
    283290#if ENABLE(LINK_PREFETCH)
    284291    case CachedResource::LinkPrefetch:
     
    293300bool CachedResourceLoader::canRequest(CachedResource::Type type, const KURL& url, bool forPreload)
    294301{
    295     // FIXME: When we can load main resources through CachedResourceLoader, we'll need to allow for null document() here.
    296     if (!document())
    297         return false;
    298 
    299     if (!document()->securityOrigin()->canDisplay(url)) {
     302    if (document() && !document()->securityOrigin()->canDisplay(url)) {
    300303        if (!forPreload)
    301304            FrameLoader::reportLocalLoadFailed(document()->frame(), url.string());
     
    308311    // any URL.
    309312    switch (type) {
     313    case CachedResource::MainResource:
    310314    case CachedResource::ImageResource:
    311315    case CachedResource::CSSStyleSheet:
     
    375379        break;
    376380    }
     381    case CachedResource::MainResource:
    377382    case CachedResource::RawResource:
    378383#if ENABLE(LINK_PREFETCH)
     
    519524    }
    520525
     526    if (existingResource->type() == CachedResource::MainResource)
     527        return Reload;
     528
    521529    if (existingResource->type() == CachedResource::RawResource && !static_cast<CachedRawResource*>(existingResource)->canReuse(request))
    522          return Reload;
     530        return Reload;
    523531
    524532    // Certain requests (e.g., XHRs) might have manually set headers that require revalidation.
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.h

    r132157 r132520  
    8080    CachedResourceHandle<CachedFont> requestFont(CachedResourceRequest&);
    8181    CachedResourceHandle<CachedRawResource> requestRawResource(CachedResourceRequest&);
     82    CachedResourceHandle<CachedRawResource> requestMainResource(CachedResourceRequest&);
    8283
    8384#if ENABLE(SVG)
  • trunk/Source/WebCore/platform/network/ResourceLoadPriority.h

    r95901 r132520  
    3636    ResourceLoadPriorityMedium,
    3737    ResourceLoadPriorityHigh,
     38    ResourceLoadPriorityVeryHigh,
    3839    ResourceLoadPriorityLowest = ResourceLoadPriorityVeryLow,
    39     ResourceLoadPriorityHighest = ResourceLoadPriorityHigh,
     40    ResourceLoadPriorityHighest = ResourceLoadPriorityVeryHigh,
    4041};
    4142
  • trunk/Source/WebCore/platform/network/cf/ResourceRequestCFNet.h

    r82900 r132520  
    5555    case 3:
    5656        return ResourceLoadPriorityHigh;
     57    case 4:
     58        return ResourceLoadPriorityVeryHigh;
    5759    default:
    5860        ASSERT_NOT_REACHED();
     
    7476    case ResourceLoadPriorityHigh:
    7577        return 3;
     78    case ResourceLoadPriorityVeryHigh:
     79        return 4;
    7680    }
    7781
Note: See TracChangeset for help on using the changeset viewer.