- Revision
- 143796
- Author
- [email protected]
- Date
- 2013-02-22 14:16:43 -0800 (Fri, 22 Feb 2013)
Log Message
[BlackBerry] Reread cookies when retrying a request with new auth credentials
https://bugs.webkit.org/show_bug.cgi?id=110628
Patch by Joe Mason <[email protected]> on 2013-02-22
Reviewed by George Staikos.
Internal PR: 298805
Internally Reviewed By: Leo Yang
The "isRedirect" parameter of initializePlatformRequest is only used to decide whether to
reread cookies. Since we must reread cookies when resending a request with new auth
credentials as well, rename this to "rereadCookies".
The only caller which sets this parameter rather than using the default value is
NetworkManager::startJob, which also has other processing on redirect. So add a new
"rereadCookies" parameter to startJob and ensure it is always set to true on a redirect, but
can also be set to true on a non-redirect. And when startJob is called due to new auth
credentials, set it to true.
* platform/network/blackberry/NetworkJob.cpp:
(WebCore::NetworkJob::startNewJobWithRequest): Add rereadCookies parameter, pass it to
startJob.
(WebCore::NetworkJob::handleRedirect): Set new rereadCookies param of startNewJob to true.
(WebCore::NetworkJob::notifyChallengeResult): Set new rereadCookies param of startNewJob to
true.
* platform/network/blackberry/NetworkJob.h:
(NetworkJob): Add rereadCookies parameter to startNewJobWithRequest.
* platform/network/blackberry/NetworkManager.cpp:
(WebCore::NetworkManager::startJob): Add rereadCookies parameter, pass it instead of
redirectCount to initializePlatformRequest.
* platform/network/blackberry/NetworkManager.h:
(NetworkManager): Add rereadCookies parameter to startJob.
* platform/network/blackberry/ResourceRequest.h:
(ResourceRequest): Rename isRedirect parameter to rereadCookies.
* platform/network/blackberry/ResourceRequestBlackBerry.cpp:
(WebCore::ResourceRequest::initializePlatformRequest): Rename isRedirect to rereadCookies.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (143795 => 143796)
--- trunk/Source/WebCore/ChangeLog 2013-02-22 22:15:21 UTC (rev 143795)
+++ trunk/Source/WebCore/ChangeLog 2013-02-22 22:16:43 UTC (rev 143796)
@@ -1,3 +1,41 @@
+2013-02-22 Joe Mason <[email protected]>
+
+ [BlackBerry] Reread cookies when retrying a request with new auth credentials
+ https://bugs.webkit.org/show_bug.cgi?id=110628
+
+ Reviewed by George Staikos.
+
+ Internal PR: 298805
+ Internally Reviewed By: Leo Yang
+
+ The "isRedirect" parameter of initializePlatformRequest is only used to decide whether to
+ reread cookies. Since we must reread cookies when resending a request with new auth
+ credentials as well, rename this to "rereadCookies".
+
+ The only caller which sets this parameter rather than using the default value is
+ NetworkManager::startJob, which also has other processing on redirect. So add a new
+ "rereadCookies" parameter to startJob and ensure it is always set to true on a redirect, but
+ can also be set to true on a non-redirect. And when startJob is called due to new auth
+ credentials, set it to true.
+
+ * platform/network/blackberry/NetworkJob.cpp:
+ (WebCore::NetworkJob::startNewJobWithRequest): Add rereadCookies parameter, pass it to
+ startJob.
+ (WebCore::NetworkJob::handleRedirect): Set new rereadCookies param of startNewJob to true.
+ (WebCore::NetworkJob::notifyChallengeResult): Set new rereadCookies param of startNewJob to
+ true.
+ * platform/network/blackberry/NetworkJob.h:
+ (NetworkJob): Add rereadCookies parameter to startNewJobWithRequest.
+ * platform/network/blackberry/NetworkManager.cpp:
+ (WebCore::NetworkManager::startJob): Add rereadCookies parameter, pass it instead of
+ redirectCount to initializePlatformRequest.
+ * platform/network/blackberry/NetworkManager.h:
+ (NetworkManager): Add rereadCookies parameter to startJob.
+ * platform/network/blackberry/ResourceRequest.h:
+ (ResourceRequest): Rename isRedirect parameter to rereadCookies.
+ * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
+ (WebCore::ResourceRequest::initializePlatformRequest): Rename isRedirect to rereadCookies.
+
2013-02-22 Benjamin Poulain <[email protected]>
Use CFNotificationCenter instead of NSNotificationCenter for SharedTimerIOS
Modified: trunk/Source/WebCore/platform/network/blackberry/NetworkJob.cpp (143795 => 143796)
--- trunk/Source/WebCore/platform/network/blackberry/NetworkJob.cpp 2013-02-22 22:15:21 UTC (rev 143795)
+++ trunk/Source/WebCore/platform/network/blackberry/NetworkJob.cpp 2013-02-22 22:16:43 UTC (rev 143796)
@@ -612,7 +612,7 @@
return startNewJobWithRequest(newRequest);
}
-bool NetworkJob::startNewJobWithRequest(ResourceRequest& newRequest, bool increaseRedirectCount)
+bool NetworkJob::startNewJobWithRequest(ResourceRequest& newRequest, bool increaseRedirectCount, bool rereadCookies)
{
// m_frame can be null if this is a PingLoader job (See NetworkJob::initialize).
// In this case we don't start new request.
@@ -640,7 +640,8 @@
m_streamFactory,
m_frame,
m_deferLoadingCount,
- increaseRedirectCount ? m_redirectCount + 1 : m_redirectCount);
+ increaseRedirectCount ? m_redirectCount + 1 : m_redirectCount,
+ rereadCookies);
return true;
}
@@ -683,7 +684,7 @@
m_handle->getInternal()->m_proxyWebChallenge.nullify();
m_handle->getInternal()->m_hostWebChallenge.nullify();
- return startNewJobWithRequest(newRequest, true);
+ return startNewJobWithRequest(newRequest, /* increaseRedirectCount */ true, /* rereadCookies */ true);
}
void NetworkJob::sendResponseIfNeeded()
@@ -1024,7 +1025,7 @@
ResourceRequest newRequest = m_handle->firstRequest();
newRequest.setURL(url);
newRequest.setMustHandleInternally(true);
- m_newJobWithCredentialsStarted = startNewJobWithRequest(newRequest);
+ m_newJobWithCredentialsStarted = startNewJobWithRequest(newRequest, /* increaseRedirectCount */ false, /* rereadCookies */ true);
}
void NetworkJob::frameDestroyed()
Modified: trunk/Source/WebCore/platform/network/blackberry/NetworkJob.h (143795 => 143796)
--- trunk/Source/WebCore/platform/network/blackberry/NetworkJob.h 2013-02-22 22:15:21 UTC (rev 143795)
+++ trunk/Source/WebCore/platform/network/blackberry/NetworkJob.h 2013-02-22 22:16:43 UTC (rev 143796)
@@ -123,7 +123,7 @@
bool retryAsFTPDirectory();
- bool startNewJobWithRequest(ResourceRequest& newRequest, bool increasRedirectCount = false);
+ bool startNewJobWithRequest(ResourceRequest& newRequest, bool increasRedirectCount = false, bool rereadCookies = false);
bool handleRedirect();
Modified: trunk/Source/WebCore/platform/network/blackberry/NetworkManager.cpp (143795 => 143796)
--- trunk/Source/WebCore/platform/network/blackberry/NetworkManager.cpp 2013-02-22 22:15:21 UTC (rev 143795)
+++ trunk/Source/WebCore/platform/network/blackberry/NetworkManager.cpp 2013-02-22 22:16:43 UTC (rev 143796)
@@ -138,7 +138,7 @@
platformRequest.setCredentials(authType, authProtocol, authScheme, username.utf8().data(), password.utf8().data());
}
-bool NetworkManager::startJob(int playerId, const String& pageGroupName, PassRefPtr<ResourceHandle> job, const ResourceRequest& request, BlackBerry::Platform::NetworkStreamFactory* streamFactory, Frame* frame, int deferLoadingCount, int redirectCount)
+bool NetworkManager::startJob(int playerId, const String& pageGroupName, PassRefPtr<ResourceHandle> job, const ResourceRequest& request, BlackBerry::Platform::NetworkStreamFactory* streamFactory, Frame* frame, int deferLoadingCount, int redirectCount, bool rereadCookies)
{
// Make sure the ResourceHandle doesn't go out of scope while calling callbacks.
RefPtr<ResourceHandle> guardJob(job);
@@ -150,8 +150,12 @@
if (isInitial)
m_initialURL = KURL();
+ // Always reread cookies on a redirect
+ if (redirectCount)
+ rereadCookies = true;
+
BlackBerry::Platform::NetworkRequest platformRequest;
- request.initializePlatformRequest(platformRequest, frame->loader() && frame->loader()->client() && static_cast<FrameLoaderClientBlackBerry*>(frame->loader()->client())->cookiesEnabled(), isInitial, redirectCount);
+ request.initializePlatformRequest(platformRequest, frame->loader() && frame->loader()->client() && static_cast<FrameLoaderClientBlackBerry*>(frame->loader()->client())->cookiesEnabled(), isInitial, rereadCookies);
const String& documentUrl = frame->document()->url().string();
if (!documentUrl.isEmpty()) {
Modified: trunk/Source/WebCore/platform/network/blackberry/NetworkManager.h (143795 => 143796)
--- trunk/Source/WebCore/platform/network/blackberry/NetworkManager.h 2013-02-22 22:15:21 UTC (rev 143795)
+++ trunk/Source/WebCore/platform/network/blackberry/NetworkManager.h 2013-02-22 22:16:43 UTC (rev 143796)
@@ -57,7 +57,7 @@
NetworkJob* findJobForHandle(PassRefPtr<ResourceHandle>);
void deleteJob(NetworkJob*);
- bool startJob(int playerId, const String& pageGroupName, PassRefPtr<ResourceHandle>, const ResourceRequest&, BlackBerry::Platform::NetworkStreamFactory*, Frame*, int deferLoadingCount = 0, int redirectCount = 0);
+ bool startJob(int playerId, const String& pageGroupName, PassRefPtr<ResourceHandle>, const ResourceRequest&, BlackBerry::Platform::NetworkStreamFactory*, Frame*, int deferLoadingCount = 0, int redirectCount = 0, bool rereadCookies = false);
Vector<NetworkJob*> m_jobs;
KURL m_initialURL;
Modified: trunk/Source/WebCore/platform/network/blackberry/ResourceRequest.h (143795 => 143796)
--- trunk/Source/WebCore/platform/network/blackberry/ResourceRequest.h 2013-02-22 22:15:21 UTC (rev 143795)
+++ trunk/Source/WebCore/platform/network/blackberry/ResourceRequest.h 2013-02-22 22:16:43 UTC (rev 143796)
@@ -106,7 +106,7 @@
void setMustHandleInternally(bool mustHandleInternally) { m_mustHandleInternally = mustHandleInternally; }
bool mustHandleInternally() const { return m_mustHandleInternally; }
- void initializePlatformRequest(BlackBerry::Platform::NetworkRequest&, bool cookiesEnabled, bool isInitial = false, bool isRedirect = false) const;
+ void initializePlatformRequest(BlackBerry::Platform::NetworkRequest&, bool cookiesEnabled, bool isInitial = false, bool rereadCookies = false) const;
void setForceDownload(bool forceDownload) { m_forceDownload = forceDownload; }
bool forceDownload() const { return m_forceDownload; }
void setSuggestedSaveName(const String& name) { m_suggestedSaveName = name; }
Modified: trunk/Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp (143795 => 143796)
--- trunk/Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp 2013-02-22 22:15:21 UTC (rev 143795)
+++ trunk/Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp 2013-02-22 22:16:43 UTC (rev 143796)
@@ -141,7 +141,7 @@
return iter->value;
}
-void ResourceRequest::initializePlatformRequest(NetworkRequest& platformRequest, bool cookiesEnabled, bool isInitial, bool isRedirect) const
+void ResourceRequest::initializePlatformRequest(NetworkRequest& platformRequest, bool cookiesEnabled, bool isInitial, bool rereadCookies) const
{
// If this is the initial load, skip the request body and headers.
if (isInitial)
@@ -179,7 +179,7 @@
}
// When ResourceRequest is reused by CacheResourceLoader, page refreshing or redirection, its cookies may be dirtied. We won't use these cookies any more.
- bool cookieHeaderMayBeDirty = isRedirect || cachePolicy() == WebCore::ReloadIgnoringCacheData || cachePolicy() == WebCore::ReturnCacheDataElseLoad;
+ bool cookieHeaderMayBeDirty = rereadCookies || cachePolicy() == WebCore::ReloadIgnoringCacheData || cachePolicy() == WebCore::ReturnCacheDataElseLoad;
for (HTTPHeaderMap::const_iterator it = httpHeaderFields().begin(); it != httpHeaderFields().end(); ++it) {
String key = it->key;