Skip to content
  • ap@apple.com's avatar
    Crash in 3rd party WebKit apps that disable cache at a wrong time · 6edc42b4
    ap@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=86027
    <rdar://problem/10615880>
    
    Reviewed by Antti Koivisto.
    
    Source/WebCore:
    
    Added an API test.
    
    The fix is to use CachedResourceHandle throughout MemoryCache, which will certainly
    keep the resource alive. Also removed earlier fixes.
    
    * css/CSSImageSetValue.cpp: (WebCore::CSSImageSetValue::cachedImageSet):
    * css/CSSImageValue.cpp: (WebCore::CSSImageValue::cachedImage):
    * css/WebKitCSSShaderValue.cpp: (WebCore::WebKitCSSShaderValue::cachedShader):
    * history/PageCache.cpp: (WebCore::PageCache::releaseAutoreleasedPagesNow):
    * loader/ImageLoader.cpp: (WebCore::ImageLoader::updateFromElement):
    * loader/TextTrackLoader.cpp: (WebCore::TextTrackLoader::load):
    * loader/cache/CachedResourceLoader.cpp:
    (WebCore::CachedResourceLoader::requestImage):
    (WebCore::CachedResourceLoader::requestFont):
    (WebCore::CachedResourceLoader::requestTextTrack):
    (WebCore::CachedResourceLoader::requestShader):
    (WebCore::CachedResourceLoader::requestCSSStyleSheet):
    (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
    (WebCore::CachedResourceLoader::requestScript):
    (WebCore::CachedResourceLoader::requestXSLStyleSheet):
    (WebCore::CachedResourceLoader::requestSVGDocument):
    (WebCore::CachedResourceLoader::requestLinkResource):
    (WebCore::CachedResourceLoader::requestRawResource):
    (WebCore::CachedResourceLoader::requestResource):
    (WebCore::CachedResourceLoader::revalidateResource):
    (WebCore::CachedResourceLoader::loadResource):
    (WebCore::CachedResourceLoader::requestPreload):
    * loader/cache/CachedResourceLoader.h: (CachedResourceLoader):
    * loader/cache/MemoryCache.h: (WebCore::MemoryCache::setPruneEnabled):
    
    * loader/cache/CachedResourceHandle.h:
    (WebCore::CachedResourceHandle::CachedResourceHandle):
    (WebCore::CachedResourceHandle::operator=):
    Teach CachedResourceHandle how to make CachedResourceHandle<CachedResource> from
    a handle to subclass.
    
    Tools:
    
    Added a test that's very similar to MemoryCachePruneWithinResourceLoadDelegate,
    but for disabling the cache instead of triggering a prune.
    
    * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
    * TestWebKitAPI/Tests/mac/MemoryCacheDisableWithinResourceLoadDelegate.html: Added.
    * TestWebKitAPI/Tests/mac/MemoryCacheDisableWithinResourceLoadDelegate.mm: Added.
    (-[MemoryCacheDisableTestResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
    (-[MemoryCacheDisableTestResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
    (-[MemoryCacheDisableTestResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
    (-[MemoryCacheDisableTestResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
    (TestWebKitAPI::TEST):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@116719 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    6edc42b4