Title: [143796] trunk/Source/WebCore
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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to