Fix a regression in r96060. ResourceLoader shouldn't get
authorossy@webkit.org <ossy@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Sep 2011 19:55:44 +0000 (19:55 +0000)
committerossy@webkit.org <ossy@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Sep 2011 19:55:44 +0000 (19:55 +0000)
initialized with a null DocumentLoader.
https://bugs.webkit.org/show_bug.cgi?id=69004

Patch by Nate Chapin <japhet@chromium.org> on 2011-09-28
Reviewed by Csaba Osztrogonác.

This should fix a debug crash in some platforms in
plugins/js-from-destroy.html

* loader/ResourceLoader.cpp:
(WebCore::ResourceLoader::init): Move the activeDocumentLoader() null checks back
    to SubresouceLoader::create().
* loader/SubresourceLoader.cpp:
(WebCore::SubresourceLoader::create):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@96249 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/loader/ResourceLoader.cpp
Source/WebCore/loader/SubresourceLoader.cpp

index 6741f3c..1ed784e 100644 (file)
@@ -1,3 +1,20 @@
+2011-09-28  Nate Chapin  <japhet@chromium.org>
+
+        Fix a regression in r96060. ResourceLoader shouldn't get
+        initialized with a null DocumentLoader.
+        https://bugs.webkit.org/show_bug.cgi?id=69004
+
+        Reviewed by Csaba Osztrogonác.
+
+        This should fix a debug crash in some platforms in
+        plugins/js-from-destroy.html
+
+        * loader/ResourceLoader.cpp:
+        (WebCore::ResourceLoader::init): Move the activeDocumentLoader() null checks back
+            to SubresouceLoader::create().
+        * loader/SubresourceLoader.cpp:
+        (WebCore::SubresourceLoader::create):
+
 2011-09-28  Adam Barth  <abarth@webkit.org>
 
         CSP doesn't work for a wide variety of cases
index 5e715f4..8f23387 100644 (file)
@@ -113,12 +113,6 @@ bool ResourceLoader::init(const ResourceRequest& r)
     
     ResourceRequest clientRequest(r);
     
-    FrameLoader* frameLoader = m_frame->loader();
-    if (m_options.securityCheck == DoSecurityCheck && (frameLoader->state() == FrameStateProvisional || !frameLoader->activeDocumentLoader() || frameLoader->activeDocumentLoader()->isStopping())) {
-        releaseResources();
-        return false;
-    }
-    
     if (m_options.securityCheck == DoSecurityCheck && !m_frame->document()->securityOrigin()->canDisplay(clientRequest.url())) {
         FrameLoader::reportLocalLoadFailed(m_frame.get(), clientRequest.url().string());
         releaseResources();
index 89ccb42..b2f76d2 100644 (file)
@@ -66,7 +66,10 @@ PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, Subresourc
     if (!frame)
         return 0;
 
-    FrameLoader* fl = frame->loader();
+    FrameLoader* frameLoader = frame->loader();
+    if (options.securityCheck == DoSecurityCheck && (frameLoader->state() == FrameStateProvisional || !frameLoader->activeDocumentLoader() || frameLoader->activeDocumentLoader()->isStopping()))
+        return 0;
+
     ResourceRequest newRequest = request;
 
     // Note: We skip the Content-Security-Policy check here because we check
@@ -76,8 +79,8 @@ PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, Subresourc
     String outgoingReferrer;
     String outgoingOrigin;
     if (request.httpReferrer().isNull()) {
-        outgoingReferrer = fl->outgoingReferrer();
-        outgoingOrigin = fl->outgoingOrigin();
+        outgoingReferrer = frameLoader->outgoingReferrer();
+        outgoingOrigin = frameLoader->outgoingOrigin();
     } else {
         outgoingReferrer = request.httpReferrer();
         outgoingOrigin = SecurityOrigin::createFromString(outgoingReferrer)->toString();
@@ -89,7 +92,7 @@ PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, Subresourc
         newRequest.setHTTPReferrer(outgoingReferrer);
     FrameLoader::addHTTPOriginIfNeeded(newRequest, outgoingOrigin);
 
-    fl->addExtraFieldsToSubresourceRequest(newRequest);
+    frameLoader->addExtraFieldsToSubresourceRequest(newRequest);
 
     RefPtr<SubresourceLoader> subloader(adoptRef(new SubresourceLoader(frame, client, options)));
     if (!subloader->init(newRequest))