webengine/osswebengine/WebCore/loader/CachedImage.cpp
changeset 10 a359256acfc6
parent 5 10e98eab6f85
child 25 0ed94ceaa377
--- a/webengine/osswebengine/WebCore/loader/CachedImage.cpp	Fri Jul 03 15:54:40 2009 +0100
+++ b/webengine/osswebengine/WebCore/loader/CachedImage.cpp	Thu Aug 27 07:44:59 2009 +0300
@@ -23,6 +23,9 @@
 
 #include "config.h"
 #include "CachedImage.h"
+#include "StaticObjectsContainer.h"
+#include "ResourceLoaderDelegate.h"
+#include "HttpCacheManager.h"
 
 #include "BitmapImage.h"
 #include "Cache.h"
@@ -191,10 +194,31 @@
     // received all the data or the size is known.  Each chunk from the
     // network causes observers to repaint, which will force that chunk
     // to decode.
-    if (sizeAvailable || allDataReceived) {
-        if (m_image->isNull()) {
-            // FIXME: I'm not convinced this case can even be hit.
+    if (allDataReceived) {
+        if (!m_image || !sizeAvailable || m_image->isNull()) {
+            // This case is hit under OOM and lower layer is unable to set sizeAvailable = true
+            // even when allDataReceived is True.
             error();
+#if PLATFORM(SYMBIAN) 
+            TBool found( EFalse );  
+            CHttpCacheManager* cacheManager = WebCore::StaticObjectsContainer::instance()->resourceLoaderDelegate()->httpSessionManager()->cacheManager();
+            if ( cacheManager )
+            {
+                // call cache manager to check for url in cache
+                TPtrC ptr = url().des();
+                HBufC8* aUrl = HBufC8::New(ptr.Length());
+                if ( aUrl )
+                {
+                    aUrl->Des().Copy(ptr);
+                    found = cacheManager->Find( *aUrl );
+                    if ( found )
+                    {
+                        cacheManager->RemoveL(*aUrl);
+                    } 
+                    delete aUrl;
+                }
+            }
+#endif
             if (inCache())
                 cache()->remove(this);
             return;