Changeset 111272 in webkit


Ignore:
Timestamp:
Mar 19, 2012 4:59:07 PM (12 years ago)
Author:
beidson@apple.com
Message:

<rdar://problem/10917120> and https://bugs.webkit.org/show_bug.cgi?id=81066
Crash in 3rd party WebKit apps under XHR/Cache code

Reviewed by Antti Koivisto.

Source/WebCore:

No new layout tests.
TestWebKitAPI test MemoryCachePruneWithinResourceLoadDelegate included

A CachedResource representing an XHR was being deleted by cache pruning during a delegate callback.
This worked until http://trac.webkit.org/changeset/98380

  • history/PageCache.cpp:

(WebCore::PageCache::releaseAutoreleasedPagesNow): Only trigger pruning after the page cache

autorelease if it was enabled before.

  • loader/cache/CachedResourceLoader.cpp:

(WebCore::CachedResourceLoader::loadResource): Disable pruning before loading the resource and

re-enable it afterwards if necessary.

  • loader/cache/MemoryCache.h:

(WebCore::MemoryCache::pruneEnabled):

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.html: Added.
  • TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.mm: Added.

(-[MemoryCachePruneTestResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
(-[MemoryCachePruneTestResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
(-[MemoryCachePruneTestResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
(-[MemoryCachePruneTestResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
(TestWebKitAPI):
(TestWebKitAPI::TEST):

Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r111271 r111272  
     12012-03-19  Brady Eidson  <beidson@apple.com>
     2
     3        <rdar://problem/10917120> and https://bugs.webkit.org/show_bug.cgi?id=81066
     4        Crash in 3rd party WebKit apps under XHR/Cache code
     5
     6        Reviewed by Antti Koivisto.
     7
     8        No new layout tests.
     9        TestWebKitAPI test MemoryCachePruneWithinResourceLoadDelegate included
     10
     11        A CachedResource representing an XHR was being deleted by cache pruning during a delegate callback.
     12        This worked until http://trac.webkit.org/changeset/98380
     13
     14        * history/PageCache.cpp:
     15        (WebCore::PageCache::releaseAutoreleasedPagesNow): Only trigger pruning after the page cache
     16          autorelease if it was enabled before.
     17
     18        * loader/cache/CachedResourceLoader.cpp:
     19        (WebCore::CachedResourceLoader::loadResource): Disable pruning before loading the resource and
     20          re-enable it afterwards if necessary.
     21
     22        * loader/cache/MemoryCache.h:
     23        (WebCore::MemoryCache::pruneEnabled):
     24
    1252012-03-19  Anders Carlsson  <andersca@apple.com>
    226
  • trunk/Source/WebCore/history/PageCache.cpp

    r110998 r111272  
    504504
    505505    // Postpone dead pruning until all our resources have gone dead.
     506    bool pruneWasEnabled = memoryCache()->pruneEnabled();
    506507    memoryCache()->setPruneEnabled(false);
    507508
     
    514515
    515516    // Now do the prune.
    516     memoryCache()->setPruneEnabled(true);
    517     memoryCache()->prune();
     517    if (pruneWasEnabled) {
     518        memoryCache()->setPruneEnabled(true);
     519        memoryCache()->prune();
     520    }
    518521}
    519522
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp

    r110676 r111272  
    509509   
    510510    resource->setLoadPriority(priority);
     511   
     512    bool wasPruneEnabled = memoryCache()->pruneEnabled();
     513    memoryCache()->setPruneEnabled(false);
    511514    resource->load(this, options);
     515    memoryCache()->setPruneEnabled(wasPruneEnabled);
    512516   
    513517    if (!inCache) {
  • trunk/Source/WebCore/loader/cache/MemoryCache.h

    r111089 r111272  
    130130   
    131131    void setPruneEnabled(bool enabled) { m_pruneEnabled = enabled; }
     132    bool pruneEnabled() const { return m_pruneEnabled; }
    132133    void prune();
    133134    void pruneToPercentage(float targetPercentLive);
  • trunk/Tools/ChangeLog

    r111267 r111272  
     12012-03-19  Brady Eidson  <beidson@apple.com>
     2
     3        <rdar://problem/10917120> and https://bugs.webkit.org/show_bug.cgi?id=81066
     4        Crash in 3rd party WebKit apps under XHR/Cache code
     5
     6        Reviewed by Antti Koivisto.
     7
     8        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     9        * TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.html: Added.
     10        * TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.mm: Added.
     11        (-[MemoryCachePruneTestResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
     12        (-[MemoryCachePruneTestResourceLoadDelegate webView:resource:willSendRequest:redirectResponse:fromDataSource:]):
     13        (-[MemoryCachePruneTestResourceLoadDelegate webView:resource:didFinishLoadingFromDataSource:]):
     14        (-[MemoryCachePruneTestResourceLoadDelegate webView:resource:didFailLoadingWithError:fromDataSource:]):
     15        (TestWebKitAPI):
     16        (TestWebKitAPI::TEST):
     17
    1182012-03-19  Brady Eidson  <beidson@apple.com>
    219
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r111267 r111272  
    4141                5142B2711517C88B00C32B19 /* ContextMenuCanCopyURL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5142B2701517C88B00C32B19 /* ContextMenuCanCopyURL.mm */; };
    4242                5142B2731517C8C800C32B19 /* ContextMenuCanCopyURL.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5142B2721517C89100C32B19 /* ContextMenuCanCopyURL.html */; };
     43                517E7DFC15110EA600D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 517E7DFB15110EA600D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.mm */; };
     44                517E7E04151119C100D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 517E7E031511187500D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html */; };
    4345                51FBBB4D1513D4E900822738 /* WebViewCanPasteURL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51FBBB4C1513D4E900822738 /* WebViewCanPasteURL.mm */; };
    4446                520BCF4C141EB09E00937EA8 /* WebArchive_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 520BCF4A141EB09E00937EA8 /* WebArchive_Bundle.cpp */; };
     
    162164                        files = (
    163165                                5142B2731517C8C800C32B19 /* ContextMenuCanCopyURL.html in Copy Resources */,
     166                                517E7E04151119C100D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html in Copy Resources */,
    164167                                379028B914FAC24C007E6B43 /* acceptsFirstMouse.html in Copy Resources */,
    165168                                33DC8912141955FE00747EF7 /* simple-iframe.html in Copy Resources */,
     
    220223                5142B2701517C88B00C32B19 /* ContextMenuCanCopyURL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContextMenuCanCopyURL.mm; sourceTree = "<group>"; };
    221224                5142B2721517C89100C32B19 /* ContextMenuCanCopyURL.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ContextMenuCanCopyURL.html; sourceTree = "<group>"; };
     225                517E7DFB15110EA600D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MemoryCachePruneWithinResourceLoadDelegate.mm; sourceTree = "<group>"; };
     226                517E7E031511187500D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = MemoryCachePruneWithinResourceLoadDelegate.html; sourceTree = "<group>"; };
    222227                51FBBB4C1513D4E900822738 /* WebViewCanPasteURL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebViewCanPasteURL.mm; sourceTree = "<group>"; };
    223228                520BCF4A141EB09E00937EA8 /* WebArchive_Bundle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebArchive_Bundle.cpp; sourceTree = "<group>"; };
     
    600605                                939BA91614103412001A01BD /* DeviceScaleFactorOnBack.mm */,
    601606                                C507E8A614C6545B005D6B3B /* InspectorBar.mm */,
     607                                517E7DFB15110EA600D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.mm */,
    602608                                3722C8681461E03E00C45D00 /* RenderedImageFromDOMRange.mm */,
    603609                                3799AD3914120A43005EB0C6 /* StringByEvaluatingJavaScriptFromString.mm */,
     
    616622                                37DC678F140D7D3A00ABCCDB /* DOMRangeOfString.html */,
    617623                                C07E6CB113FD738A0038B22B /* devicePixelRatio.html */,
     624                                517E7E031511187500D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html */,
    618625                        );
    619626                        name = Resources;
     
    810817                                379028B614FABD92007E6B43 /* AcceptsFirstMouse.mm in Sources */,
    811818                                3776BC63150946BC0043A66D /* DeviceScaleFactorInDashboardRegions.mm in Sources */,
     819                                517E7DFC15110EA600D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.mm in Sources */,
    812820                                51FBBB4D1513D4E900822738 /* WebViewCanPasteURL.mm in Sources */,
    813821                                5142B2711517C88B00C32B19 /* ContextMenuCanCopyURL.mm in Sources */,
Note: See TracChangeset for help on using the changeset viewer.