-2006-10-29 Maciej Stachowiak <mjs@apple.com>
+2006-10-29 Darin Adler <darin@apple.com>
+
+ Reviewed by Mitz.
- Not reviewed.
+ - fix crash visible on buildbot and also when running the test
+ anchor-image-scrolled-x-y.html under libgmalloc
+
+ * loader/mac/WebSubresourceLoader.h: Renamed m_loader to m_handle
+ now that the class is named ResourceHandle.
+ * loader/mac/WebSubresourceLoader.mm: Renaming, plus:
+ (WebCore::SubresourceLoader::didFinishLoading): Get the handle into
+ a local RefPtr before calling finishJobAndHandle, since we might get
+ cancelled inside that function, so we should not rely on m_handle to
+ keep the ResourceHandle alive.
+ (WebCore::SubresourceLoader::didFail): Ditto.
+ (WebCore::SubresourceLoader::didCancel): Ditto.
+
+2006-10-29 Maciej Stachowiak <mjs@apple.com>
- build fix
2006-10-23 Maciej Stachowiak <mjs@apple.com>
- Not reviewed.
-
- fixed build from last change.
* bridge/mac/FrameMac.h:
2006-10-10 Maciej Stachowiak <mjs@apple.com>
- Not reviewed, build fix.
-
- fixed release build
* WebCore.xcodeproj/project.pbxproj:
2006-07-06 Maciej Stachowiak <mjs@apple.com>
- Not reviewed - build fix.
-
- back out earlier leak fix, as it caused a crash on one of the fast/invalid layout tests
* dom/Document.cpp:
#import <Foundation/NSURLResponse.h>
#import <wtf/Assertions.h>
-using namespace WebCore;
-
namespace WebCore {
-SubresourceLoader::SubresourceLoader(Frame* frame, ResourceHandle* loader)
+SubresourceLoader::SubresourceLoader(Frame* frame, ResourceHandle* handle)
: WebResourceLoader(frame)
- , m_loader(loader)
+ , m_handle(handle)
, m_loadingMultipartContent(false)
{
frameLoader()->addSubresourceLoader(this);
{
}
-PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, ResourceHandle* loader, ResourceRequest& request)
+PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, ResourceHandle* handle, ResourceRequest& request)
{
FrameLoader* fl = frame->loader();
if (fl->state() == FrameStateProvisional)
fl->addExtraFieldsToRequest(newRequest, false, false);
- RefPtr<SubresourceLoader> subloader(new SubresourceLoader(frame, loader));
+ RefPtr<SubresourceLoader> subloader(new SubresourceLoader(frame, handle));
if (!subloader->load(newRequest))
return 0;
NSURL *oldURL = [request() URL];
NSURLRequest *clientRequest = WebResourceLoader::willSendRequest(newRequest, redirectResponse);
if (clientRequest && oldURL != [clientRequest URL] && ![oldURL isEqual:[clientRequest URL]])
- m_loader->redirectedToURL([clientRequest URL]);
+ m_handle->redirectedToURL([clientRequest URL]);
return clientRequest;
}
// anything including removing the last reference to this object; one example of this is 3266216.
RefPtr<SubresourceLoader> protect(this);
- m_loader->receivedResponse(r);
+ m_handle->receivedResponse(r);
// The loader can cancel a load if it receives a multipart response for a non-image
if (reachedTerminalState())
return;
// Since a subresource loader does not load multipart sections progressively,
// deliver the previously received data to the loader all at once now.
// Then clear the data to make way for the next multipart section.
- m_loader->addData(resourceData());
+ m_handle->addData(resourceData());
clearResourceData();
// After the first multipart section is complete, signal to delegates that this load is "finished"
// A subresource loader does not load multipart sections progressively.
// So don't deliver any data to the loader yet.
if (!m_loadingMultipartContent)
- m_loader->addData(data);
+ m_handle->addData(data);
WebResourceLoader::didReceiveData(data, lengthReceived, allAtOnce);
}
// Calling removeSubresourceLoader will likely result in a call to deref, so we must protect ourselves.
RefPtr<SubresourceLoader> protect(this);
- if (m_loader)
- m_loader->finishJobAndHandle(resourceData());
- m_loader = 0;
+ if (RefPtr<ResourceHandle> handle = m_handle.release())
+ handle->finishJobAndHandle(resourceData());
if (cancelled())
return;
// Calling removeSubresourceLoader will likely result in a call to deref, so we must protect ourselves.
RefPtr<SubresourceLoader> protect(this);
- if (m_loader)
- m_loader->reportError();
- m_loader = 0;
+ if (RefPtr<ResourceHandle> handle = m_handle.release())
+ handle->reportError();
if (cancelled())
return;
// Calling removeSubresourceLoader will likely result in a call to deref, so we must protect ourselves.
RefPtr<SubresourceLoader> protect(this);
- if (m_loader)
- m_loader->reportError();
- m_loader = 0;
+ if (RefPtr<ResourceHandle> handle = m_handle.release())
+ handle->reportError();
if (cancelled())
return;
}
}
-