diff options
Diffstat (limited to 'WebCore/platform/network/ResourceHandle.cpp')
-rw-r--r-- | WebCore/platform/network/ResourceHandle.cpp | 45 |
1 files changed, 31 insertions, 14 deletions
diff --git a/WebCore/platform/network/ResourceHandle.cpp b/WebCore/platform/network/ResourceHandle.cpp index 969a9f6..149411e 100644 --- a/WebCore/platform/network/ResourceHandle.cpp +++ b/WebCore/platform/network/ResourceHandle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2004, 2006, 2007, 2008 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,6 +34,8 @@ namespace WebCore { +static bool portAllowed(const ResourceRequest&); + ResourceHandle::ResourceHandle(const ResourceRequest& request, ResourceHandleClient* client, bool defersLoading, bool shouldContentSniff, bool mightDownloadFromHandle) : d(new ResourceHandleInternal(this, request, client, defersLoading, shouldContentSniff, mightDownloadFromHandle)) @@ -43,10 +45,15 @@ ResourceHandle::ResourceHandle(const ResourceRequest& request, ResourceHandleCli PassRefPtr<ResourceHandle> ResourceHandle::create(const ResourceRequest& request, ResourceHandleClient* client, Frame* frame, bool defersLoading, bool shouldContentSniff, bool mightDownloadFromHandle) { - RefPtr<ResourceHandle> newHandle(new ResourceHandle(request, client, defersLoading, shouldContentSniff, mightDownloadFromHandle)); + RefPtr<ResourceHandle> newHandle(adoptRef(new ResourceHandle(request, client, defersLoading, shouldContentSniff, mightDownloadFromHandle))); + + if (!request.url().isValid()) { + newHandle->scheduleFailure(InvalidURLFailure); + return newHandle.release(); + } if (!portAllowed(request)) { - newHandle->scheduleBlockedFailure(); + newHandle->scheduleFailure(BlockedFailure); return newHandle.release(); } @@ -56,17 +63,27 @@ PassRefPtr<ResourceHandle> ResourceHandle::create(const ResourceRequest& request return 0; } -void ResourceHandle::scheduleBlockedFailure() +void ResourceHandle::scheduleFailure(FailureType type) { - Timer<ResourceHandle>* blockedTimer = new Timer<ResourceHandle>(this, &ResourceHandle::fireBlockedFailure); - blockedTimer->startOneShot(0); + d->m_failureType = type; + d->m_failureTimer.startOneShot(0); } -void ResourceHandle::fireBlockedFailure(Timer<ResourceHandle>* timer) +void ResourceHandle::fireFailure(Timer<ResourceHandle>*) { - if (client()) - client()->wasBlocked(this); - delete timer; + if (!client()) + return; + + switch (d->m_failureType) { + case BlockedFailure: + client()->wasBlocked(this); + return; + case InvalidURLFailure: + client()->cannotShowURL(this); + return; + } + + ASSERT_NOT_REACHED(); } ResourceHandleClient* ResourceHandle::client() const @@ -88,13 +105,13 @@ void ResourceHandle::clearAuthentication() { #if PLATFORM(MAC) d->m_currentMacChallenge = nil; -#elif PLATFORM(CF) +#elif USE(CFNETWORK) d->m_currentCFChallenge = 0; #endif d->m_currentWebChallenge.nullify(); } -bool ResourceHandle::portAllowed(const ResourceRequest& request) +static bool portAllowed(const ResourceRequest& request) { unsigned short port = request.url().port(); @@ -172,11 +189,11 @@ bool ResourceHandle::portAllowed(const ResourceRequest& request) return true; // Allow ports 21 and 22 for FTP URLs, as Mozilla does. - if ((port == 21 || port == 22) && request.url().deprecatedString().startsWith("ftp:", false)) + if ((port == 21 || port == 22) && request.url().protocolIs("ftp")) return true; // Allow any port number in a file URL, since the port number is ignored. - if (request.url().deprecatedString().startsWith("file:", false)) + if (request.url().protocolIs("file")) return true; return false; |