Ignore:
Timestamp:
May 10, 2012, 7:31:26 PM (13 years ago)
Author:
[email protected]
Message:

Crash in 3rd party WebKit apps that disable cache at a wrong time
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):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/css/CSSImageSetValue.cpp

    r114669 r116719  
    107107        ImageWithScale image = bestImageForScaleFactor();
    108108        ResourceRequest request(loader->document()->completeURL(image.imageURL));
    109         if (CachedImage* cachedImage = loader->requestImage(request)) {
    110             m_imageSet = StyleCachedImageSet::create(cachedImage, image.scaleFactor, this);
     109        if (CachedResourceHandle<CachedImage> cachedImage = loader->requestImage(request)) {
     110            m_imageSet = StyleCachedImageSet::create(cachedImage.get(), image.scaleFactor, this);
    111111            m_accessedBestFitImage = true;
    112112        }
Note: See TracChangeset for help on using the changeset viewer.