We should clear mainResource in DocumentLoader::cancelMainResourceLoad.
https://bugs.webkit.org/show_bug.cgi?id=116119

Patch by Yongjun Zhang <yongjun_zhang@apple.com> on 2013-05-15
Reviewed by Oliver Hunt.

MainResourceLoader::clearResource() was left out in r146239 when moving MainResourceLoader::cancel()
to DocumentLoader::cancelMainResourceLoad(), we need to add it back to make sure m_mainResource is
cleared when we cancel the loader.

No new tests needed.

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::~DocumentLoader):
(WebCore::DocumentLoader::continueAfterNavigationPolicy):
(WebCore::DocumentLoader::cancelMainResourceLoad):
(WebCore::DocumentLoader::clearMainResource):
(WebCore):
* loader/DocumentLoader.h: add helper method clearMainResource()
(DocumentLoader):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@150150 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 9547170..c4cb1eb 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,25 @@
+2013-05-15  Yongjun Zhang  <yongjun_zhang@apple.com>
+
+        We should clear mainResource in DocumentLoader::cancelMainResourceLoad.
+        https://bugs.webkit.org/show_bug.cgi?id=116119
+
+        Reviewed by Oliver Hunt.
+
+        MainResourceLoader::clearResource() was left out in r146239 when moving MainResourceLoader::cancel()
+        to DocumentLoader::cancelMainResourceLoad(), we need to add it back to make sure m_mainResource is
+        cleared when we cancel the loader.
+
+        No new tests needed.
+
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::~DocumentLoader):
+        (WebCore::DocumentLoader::continueAfterNavigationPolicy):
+        (WebCore::DocumentLoader::cancelMainResourceLoad):
+        (WebCore::DocumentLoader::clearMainResource):
+        (WebCore):
+        * loader/DocumentLoader.h: add helper method clearMainResource()
+        (DocumentLoader):
+
 2013-05-15  Joe Mason  <jmason@blackberry.com>
 
         [BlackBerry] When HTTP auth fails, only purge credentials that match the failed credentials
diff --git a/Source/WebCore/loader/DocumentLoader.cpp b/Source/WebCore/loader/DocumentLoader.cpp
index 3124d32..f714c78 100644
--- a/Source/WebCore/loader/DocumentLoader.cpp
+++ b/Source/WebCore/loader/DocumentLoader.cpp
@@ -143,10 +143,7 @@
         m_iconDataCallback->invalidate();
     m_cachedResourceLoader->clearDocumentLoader();
     
-    if (m_mainResource) {
-        m_mainResource->removeClient(this);
-        m_mainResource = 0;
-    }
+    clearMainResource();
 }
 
 PassRefPtr<ResourceBuffer> DocumentLoader::mainResourceData() const
@@ -546,10 +543,7 @@
         RefPtr<ResourceLoader> resourceLoader = mainResourceLoader();
         ASSERT(resourceLoader->shouldSendResourceLoadCallbacks());
         resourceLoader->setSendCallbackPolicy(DoNotSendCallbacks);
-        if (m_mainResource) {
-            m_mainResource->removeClient(this);
-            m_mainResource = 0;
-        }
+        clearMainResource();
         resourceLoader->setSendCallbackPolicy(SendCallbacks);
         handleSubstituteDataLoadSoon();
     }
@@ -1409,9 +1403,19 @@
     if (mainResourceLoader())
         mainResourceLoader()->cancel(error);
 
+    clearMainResource();
+
     mainReceivedError(error);
 }
 
+void DocumentLoader::clearMainResource()
+{
+    if (m_mainResource) {
+        m_mainResource->removeClient(this);
+        m_mainResource = 0;
+    }
+}
+
 void DocumentLoader::subresourceLoaderFinishedLoadingOnePart(ResourceLoader* loader)
 {
     m_multipartSubresourceLoaders.add(loader);
diff --git a/Source/WebCore/loader/DocumentLoader.h b/Source/WebCore/loader/DocumentLoader.h
index e875c57..4bd2c7a 100644
--- a/Source/WebCore/loader/DocumentLoader.h
+++ b/Source/WebCore/loader/DocumentLoader.h
@@ -308,7 +308,9 @@
 
         void deliverSubstituteResourcesAfterDelay();
         void substituteResourceDeliveryTimerFired(Timer<DocumentLoader>*);
-                
+
+        void clearMainResource();
+
         Frame* m_frame;
         RefPtr<CachedResourceLoader> m_cachedResourceLoader;