Changeset 17682 in webkit


Ignore:
Timestamp:
Nov 8, 2006 10:49:17 PM (17 years ago)
Author:
mjs
Message:

Reviewed by Geoff.


  • added ResourceError class and didFailWithError client method
  • WebCore.xcodeproj/project.pbxproj:
  • loader/icon/IconLoader.cpp: (WebCore::IconLoader::didFailWithError): (WebCore::IconLoader::didFinishLoading):
  • loader/icon/IconLoader.h:
  • loader/loader.cpp: (WebCore::Loader::receivedAllData): (WebCore::Loader::didFailWithError):
  • loader/loader.h:
  • loader/mac/SubresourceLoaderMac.mm: (WebCore::SubresourceLoader::didFail): (WebCore::SubresourceLoader::didCancel):
  • platform/cf/RetainPtr.h: (WebCore::): (WebCore::adoptCFReference): (WebCore::RetainPtr::RetainPtr): (WebCore::::adopt):
  • platform/network/ResourceError.cpp: Added.
  • platform/network/ResourceError.h: Added. (WebCore::ResourceError::ResourceError): (WebCore::ResourceError::domain): (WebCore::ResourceError::errorCode): (WebCore::ResourceError::failingURL): (WebCore::ResourceError::localizedDescription): (WebCore::ResourceError::unpackPlatformErrorIfNeeded):
  • platform/network/ResourceHandle.cpp:
  • platform/network/ResourceHandle.h:
  • platform/network/ResourceHandleClient.h: (WebCore::ResourceHandleClient::didFailWithError):
  • platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::didFail): (WebCore::ResourceHandle::cancel):
  • platform/network/mac/ResourceErrorMac.mm: Added. (-[NSError WebCore]):
  • platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::reportError):
  • xml/xmlhttprequest.cpp: (WebCore::XMLHttpRequest::didFailWithError): (WebCore::XMLHttpRequest::didFinishLoading):
  • xml/xmlhttprequest.h:
Location:
trunk
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/http/tests/xmlhttprequest/cache-override.html

    r15150 r17682  
    111111                log("async: Automatically cached response body is correct; status = " + req.status);
    112112            else
    113                 log("async: Automatically cached response body is different from the expected one; status = " + req.status);
     113                log("async: Automatically cached response body is different from the expected one; status = " + req.status + "; req.responseText='" + req.responseText + "' (expected '<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n<node>Проверка</node>\n')");
    114114
    115115            req = new XMLHttpRequest();
  • trunk/WebCore/ChangeLog

    r17681 r17682  
     12006-11-08  Maciej Stachowiak  <mjs@apple.com>
     2
     3        Reviewed by Geoff.
     4       
     5        - added ResourceError class and didFailWithError client method
     6
     7        * WebCore.xcodeproj/project.pbxproj:
     8        * loader/icon/IconLoader.cpp:
     9        (WebCore::IconLoader::didFailWithError):
     10        (WebCore::IconLoader::didFinishLoading):
     11        * loader/icon/IconLoader.h:
     12        * loader/loader.cpp:
     13        (WebCore::Loader::receivedAllData):
     14        (WebCore::Loader::didFailWithError):
     15        * loader/loader.h:
     16        * loader/mac/SubresourceLoaderMac.mm:
     17        (WebCore::SubresourceLoader::didFail):
     18        (WebCore::SubresourceLoader::didCancel):
     19        * platform/cf/RetainPtr.h:
     20        (WebCore::):
     21        (WebCore::adoptCFReference):
     22        (WebCore::RetainPtr::RetainPtr):
     23        (WebCore::::adopt):
     24        * platform/network/ResourceError.cpp: Added.
     25        * platform/network/ResourceError.h: Added.
     26        (WebCore::ResourceError::ResourceError):
     27        (WebCore::ResourceError::domain):
     28        (WebCore::ResourceError::errorCode):
     29        (WebCore::ResourceError::failingURL):
     30        (WebCore::ResourceError::localizedDescription):
     31        (WebCore::ResourceError::unpackPlatformErrorIfNeeded):
     32        * platform/network/ResourceHandle.cpp:
     33        * platform/network/ResourceHandle.h:
     34        * platform/network/ResourceHandleClient.h:
     35        (WebCore::ResourceHandleClient::didFailWithError):
     36        * platform/network/cf/ResourceHandleCFNet.cpp:
     37        (WebCore::didFail):
     38        (WebCore::ResourceHandle::cancel):
     39        * platform/network/mac/ResourceErrorMac.mm: Added.
     40        (-[NSError WebCore]):
     41        * platform/network/mac/ResourceHandleMac.mm:
     42        (WebCore::ResourceHandle::reportError):
     43        * xml/xmlhttprequest.cpp:
     44        (WebCore::XMLHttpRequest::didFailWithError):
     45        (WebCore::XMLHttpRequest::didFinishLoading):
     46        * xml/xmlhttprequest.h:
     47
    1482006-11-08  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
    249
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r17670 r17682  
    288288                650F53DC09D15DDA00C9B0C8 /* CSSGrammar.h in Headers */ = {isa = PBXBuildFile; fileRef = 650F53DB09D15DDA00C9B0C8 /* CSSGrammar.h */; };
    289289                650F53DD09D15DDF00C9B0C8 /* CSSGrammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6565814409D13043000E61D7 /* CSSGrammar.cpp */; };
     290                651888880AFF3BF700164720 /* ResourceError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 651888860AFF3BF700164720 /* ResourceError.cpp */; };
     291                651888890AFF3BF700164720 /* ResourceError.h in Headers */ = {isa = PBXBuildFile; fileRef = 651888870AFF3BF700164720 /* ResourceError.h */; };
     292                6518888B0AFF3C1400164720 /* ResourceErrorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6518888A0AFF3C1400164720 /* ResourceErrorMac.mm */; };
    290293                651B4D8509AC83370029F1EF /* DeprecatedStringList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 651B4D8309AC83370029F1EF /* DeprecatedStringList.cpp */; };
    291294                651B4D8609AC83370029F1EF /* DeprecatedStringList.h in Headers */ = {isa = PBXBuildFile; fileRef = 651B4D8409AC83370029F1EF /* DeprecatedStringList.h */; };
     
    31903193                650E3F680AF6C168001FA3AD /* ResourceRequestMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceRequestMac.mm; sourceTree = "<group>"; };
    31913194                650F53DB09D15DDA00C9B0C8 /* CSSGrammar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CSSGrammar.h; sourceTree = "<group>"; };
     3195                651888860AFF3BF700164720 /* ResourceError.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceError.cpp; sourceTree = "<group>"; };
     3196                651888870AFF3BF700164720 /* ResourceError.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceError.h; sourceTree = "<group>"; };
     3197                6518888A0AFF3C1400164720 /* ResourceErrorMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ResourceErrorMac.mm; sourceTree = "<group>"; };
    31923198                651B4D8309AC83370029F1EF /* DeprecatedStringList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DeprecatedStringList.cpp; sourceTree = "<group>"; };
    31933199                651B4D8409AC83370029F1EF /* DeprecatedStringList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DeprecatedStringList.h; sourceTree = "<group>"; };
     
    63636369                        children = (
    63646370                                65DADA170AFD878000CE53ED /* FormData.h */,
     6371                                651888860AFF3BF700164720 /* ResourceError.cpp */,
     6372                                651888870AFF3BF700164720 /* ResourceError.h */,
    63656373                                65DAD9FA0AFD86B400CE53ED /* FormData.cpp */,
    63666374                                656B84E70AEA1DAE00A095B4 /* mac */,
     
    63796387                        isa = PBXGroup;
    63806388                        children = (
     6389                                6518888A0AFF3C1400164720 /* ResourceErrorMac.mm */,
    63816390                                65DAD9FE0AFD86BF00CE53ED /* FormDataStreamMac.h */,
    63826391                                65DAD9FF0AFD86BF00CE53ED /* FormDataStreamMac.mm */,
     
    1050510514                                65DADA000AFD86BF00CE53ED /* FormDataStreamMac.h in Headers */,
    1050610515                                65DADA180AFD878000CE53ED /* FormData.h in Headers */,
     10516                                651888890AFF3BF700164720 /* ResourceError.h in Headers */,
    1050710517                                148CF65E0B00561400A997FC /* Screen.h in Headers */,
    1050810518                        );
     
    1174711757                                65DAD9FC0AFD86B400CE53ED /* FormData.cpp in Sources */,
    1174811758                                65DADA010AFD86BF00CE53ED /* FormDataStreamMac.mm in Sources */,
     11759                                651888880AFF3BF700164720 /* ResourceError.cpp in Sources */,
     11760                                6518888B0AFF3C1400164720 /* ResourceErrorMac.mm in Sources */,
    1174911761                        );
    1175011762                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebCore/loader/icon/IconLoader.cpp

    r17652 r17682  
    114114}
    115115
     116void IconLoader::didFailWithError(ResourceHandle* handle, const ResourceError&)
     117{
     118    finishLoading(handle->url());
     119}
     120
    116121void IconLoader::didFinishLoading(ResourceHandle* handle)
    117122{
     123    ASSERT(handle == m_handle);
    118124    finishLoading(handle->url());
    119125}
  • trunk/WebCore/loader/icon/IconLoader.h

    r17655 r17682  
    5151    virtual void didReceiveData(ResourceHandle*, const char*, int);
    5252    virtual void didFinishLoading(ResourceHandle*);
     53    virtual void didFailWithError(ResourceHandle*, const ResourceError&);
    5354
    5455    void finishLoading(const KURL&);
  • trunk/WebCore/loader/loader.cpp

    r17652 r17682  
    104104    DocLoader* docLoader = req->docLoader();
    105105
    106     if (job->error() || job->isErrorPage()) {
    107         docLoader->setLoadInProgress(true);
    108         object->error();
    109         docLoader->setLoadInProgress(false);
    110         cache()->remove(object);
    111     } else {
    112         docLoader->setLoadInProgress(true);
    113         object->data(req->buffer(), true);
    114         object->setAllData(allData);
    115         docLoader->setLoadInProgress(false);
    116         object->finish();
    117     }
     106    docLoader->setLoadInProgress(true);
     107    object->data(req->buffer(), true);
     108    object->setAllData(allData);
     109    docLoader->setLoadInProgress(false);
     110    object->finish();
     111
     112    delete req;
     113
     114    servePendingRequests();
     115}
     116
     117void Loader::didFailWithError(ResourceHandle* handle, const ResourceError& error)
     118{
     119    RequestMap::iterator i = m_requestsLoading.find(handle);
     120    if (i == m_requestsLoading.end())
     121        return;
     122
     123    Request* req = i->second;
     124    m_requestsLoading.remove(i);
     125
     126    CachedResource* object = req->cachedResource();
     127    DocLoader* docLoader = req->docLoader();
     128
     129    docLoader->setLoadInProgress(true);
     130    object->error();
     131    docLoader->setLoadInProgress(false);
     132    cache()->remove(object);
    118133
    119134    delete req;
  • trunk/WebCore/loader/loader.h

    r17595 r17682  
    6565    private:
    6666        virtual void receivedResponse(ResourceHandle*, PlatformResponse);
    67         virtual void didReceiveResponse(ResourceHandle* handle, const ResourceResponse& response);
     67        virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&);
    6868        virtual void didReceiveData(ResourceHandle*, const char*, int);
    6969        virtual void receivedAllData(ResourceHandle*, PlatformData);
     70        virtual void didFailWithError(ResourceHandle*, const ResourceError&);
    7071
    7172        void servePendingRequests();
  • trunk/WebCore/loader/mac/SubresourceLoaderMac.mm

    r17652 r17682  
    184184
    185185    if (RefPtr<ResourceHandle> handle = m_handle.release())
    186         handle->reportError();
     186        handle->reportError(error);
    187187
    188188    if (cancelled())
     
    200200   
    201201    if (RefPtr<ResourceHandle> handle = m_handle.release())
    202         handle->reportError();
     202        handle->reportError(error);
    203203
    204204    if (cancelled())
  • trunk/WebCore/platform/cf/RetainPtr.h

    r17206 r17682  
    4040    // so both RetainPtr<NSDictionary> and RetainPtr<CFDictionaryRef> will work.
    4141
     42    enum AdoptTag { Adopt };
     43   
     44    template <typename T> inline void adoptCFReference(T* ptr)
     45    {
     46    }
     47
     48#ifdef __OBJC__
     49    inline void adoptCFReference(id ptr)
     50    {
     51        CFRetain(ptr);
     52        [ptr release];
     53    }
     54#endif
     55
    4256    template <typename T> class RetainPtr
    4357    {
     
    4963        RetainPtr() : m_ptr(0) {}
    5064        RetainPtr(PtrType ptr) : m_ptr(ptr) { if (ptr) CFRetain(ptr); }
     65
     66        RetainPtr(AdoptTag, PtrType ptr) : m_ptr(ptr) { adoptCFReference(ptr); }
     67
    5168        RetainPtr(const RetainPtr& o) : m_ptr(o.m_ptr) { if (PtrType ptr = m_ptr) CFRetain(ptr); }
    5269
     
    7188        template <typename U> RetainPtr& operator=(U*);
    7289
     90        void adopt(PtrType);
     91
    7392        void swap(RetainPtr&);
    7493
     
    112131    }
    113132
     133    template <typename T> inline void RetainPtr<T>::adopt(PtrType optr)
     134    {
     135        if (optr)
     136            adoptCFReference(optr);
     137        PtrType ptr = m_ptr;
     138        m_ptr = optr;
     139        if (ptr)
     140            CFRelease(ptr);
     141    }
     142
    114143    template <typename T> template <typename U> inline RetainPtr<T>& RetainPtr<T>::operator=(U* optr)
    115144    {
  • trunk/WebCore/platform/network/ResourceHandle.cpp

    r17435 r17682  
    4848}
    4949
    50 bool ResourceHandle::isErrorPage() const
    51 {
    52     return d->status != 0;
    53 }
    54 
    55 int ResourceHandle::error() const
    56 {
    57     return d->status;
    58 }
    59 
    60 void ResourceHandle::setError(int e)
    61 {
    62     d->status = e;
    63 }
    64 
    6550void ResourceHandle::kill()
    6651{
  • trunk/WebCore/platform/network/ResourceHandle.h

    r17597 r17682  
    4646@class NSURLRequest;
    4747@class NSURLResponse;
     48@class NSError;
    4849#else
    4950class NSURLRequest;
    5051class NSURLResponse;
     52class NSError;
    5153#endif
    5254#endif
     
    7375    ~ResourceHandle();
    7476
    75     int error() const;
    76     void setError(int);
    77     String errorText() const;
    78     bool isErrorPage() const;
    79    
    8077    void kill();
    8178
     
    8481    void addData(NSData *);
    8582    void finishJobAndHandle(NSData *);
    86     void reportError();
     83    void reportError(NSError* error);
    8784#endif
    8885
  • trunk/WebCore/platform/network/ResourceHandleClient.h

    r17597 r17682  
    7575    class KURL;
    7676    class ResourceHandle;
     77    class ResourceError;
    7778    class ResourceRequest;
    7879    class ResourceResponse;
     
    9192        virtual void didReceiveData(ResourceHandle*, const char*, int) { }
    9293        virtual void didFinishLoading(ResourceHandle*) { }
    93         // void didFailWithError(ResourceError*) { }
     94        virtual void didFailWithError(ResourceHandle*, const ResourceError&) { }
    9495
    9596        // cached response may be modified
  • trunk/WebCore/platform/network/cf/ResourceHandleCFNet.cpp

    r17652 r17682  
    3030#include "DocLoader.h"
    3131#include "Frame.h"
     32#include "ResourceError.h"
    3233#include "FrameLoader.h"
    3334#include "ResourceHandle.h"
     
    120121void didFail(CFURLConnectionRef conn, CFStreamError error, const void* clientInfo)
    121122{
    122     ResourceHandle* job = (ResourceHandle*)clientInfo;
     123    ResourceHandle* handle = (ResourceHandle*)clientInfo;
    123124
    124125#if defined(LOG_RESOURCELOADER_EVENTS)
     
    128129#endif
    129130
    130     job->setError(1);
    131     job->client()->receivedAllData(job, 0);
    132     job->client()->didFinishLoading(job);
    133     job->kill();
     131    String domain;
     132    switch(error.domain) {
     133    case kCFStreamErrorDomainPOSIX:
     134        domain = "NSPOSIXErrorDomain";
     135        break;
     136    case kCFStreamErrorDomainMacOSStatus:
     137        domain = "NSOSStatusErrorDomain";
     138        break;
     139    }
     140
     141    // FIXME: we'd really like to include a failing URL and a localized description but you can't
     142    // get a CFErrorRef out of an NSURLConnection, only a CFStreamError
     143    handle->client()->didFailWithError(handle, ResourceError(domain, error.error, String(), String()));
     144    handle->kill();
    134145}
    135146
     
    270281    }
    271282
    272     // Copied directly from ResourceHandleWin.cpp
    273     setError(1);
    274     d->m_client->receivedAllData(this, 0);
    275     d->m_client->didFinishLoading(this);
     283    // FIXME: need real cancel error
     284    d->m_client->didFailWithError(this, ResourceError());
    276285}
    277286
  • trunk/WebCore/platform/network/mac/ResourceHandleMac.mm

    r17652 r17682  
    3232#import "FrameLoader.h"
    3333#import "FrameMac.h"
     34#import "ResourceError.h"
    3435#import "ResourceRequestMac.h"
    3536#import "ResourceResponse.h"
     
    131132}
    132133
    133 void ResourceHandle::reportError()
     134void ResourceHandle::reportError(NSError* error)
    134135{
    135     setError(1);
    136     finishJobAndHandle(nil);
     136    if (ResourceHandleClient* c = client())
     137        c->didFailWithError(this, error);
     138    kill();
    137139}
    138140
  • trunk/WebCore/xml/xmlhttprequest.cpp

    r17661 r17682  
    484484}
    485485
    486 void XMLHttpRequest::didFinishLoading(ResourceHandle* loader)
     486void XMLHttpRequest::didFailWithError(ResourceHandle* handle, const ResourceError&)
     487{
     488    didFinishLoading(handle);
     489}
     490
     491void XMLHttpRequest::didFinishLoading(ResourceHandle* handle)
    487492{
    488493    if (m_aborted)
    489494        return;
    490495       
    491     ASSERT(loader == m_loader);
     496    ASSERT(handle == m_loader);
    492497
    493498    if (m_state < Sent)
  • trunk/WebCore/xml/xmlhttprequest.h

    r17595 r17682  
    8686    virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&);
    8787    virtual void didReceiveData(ResourceHandle*, const char* data, int size);
     88    virtual void didFailWithError(ResourceHandle*, const ResourceError&);
    8889    virtual void didFinishLoading(ResourceHandle*);
    8990
Note: See TracChangeset for help on using the changeset viewer.