summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/network/ResourceHandle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/network/ResourceHandle.cpp')
-rw-r--r--WebCore/platform/network/ResourceHandle.cpp45
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;