summaryrefslogtreecommitdiffstats
path: root/chrome_frame
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-14 18:09:20 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-14 18:09:20 +0000
commitacd6d610c00b7001b10b1f805f118f9309db9ca0 (patch)
tree6670e528abc3206b774b1277bf0982f5493cc614 /chrome_frame
parent9430aacbbc1a76d4def3ed9bd97245bbd3448e9b (diff)
downloadchromium_src-acd6d610c00b7001b10b1f805f118f9309db9ca0.zip
chromium_src-acd6d610c00b7001b10b1f805f118f9309db9ca0.tar.gz
chromium_src-acd6d610c00b7001b10b1f805f118f9309db9ca0.tar.bz2
HTTPs sessions don't get established at times in ChromeFrame IE full tab mode. This typically happens when the
initial logon redirects to an intermediate page which we try and abort in IE to ensure that Chrome follows the redirect. We try and abort the redirect in IE by returning E_ABORT from our IBindStatusCallback::OnProgress implementation and also aborting the binding. However at times urlmon continues to follow the redirect and attempts to establish a connection to the redirected url. Fix is to check for a NULL binding in our IHttpNegotiate::BeginningTransaction implementation and abort the same. Added traces in BeginningTransaction to indicate the same. Bug=30203 Test=As described in the bug. Review URL: http://codereview.chromium.org/487034 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34467 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame')
-rw-r--r--chrome_frame/urlmon_url_request.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/chrome_frame/urlmon_url_request.cc b/chrome_frame/urlmon_url_request.cc
index 8446500..5970b63 100644
--- a/chrome_frame/urlmon_url_request.cc
+++ b/chrome_frame/urlmon_url_request.cc
@@ -382,6 +382,24 @@ STDMETHODIMP UrlmonUrlRequest::BeginningTransaction(const wchar_t* url,
DLOG(INFO) << "URL: " << url << " Obj: " << std::hex << this <<
" - Request headers: \n" << current_headers;
+ if (!binding_) {
+ // At times the BINDSTATUS_REDIRECTING notification which is sent to the
+ // IBindStatusCallback interface does not have an accompanying HTTP
+ // redirect status code, i.e. the attempt to query the HTTP status code
+ // from the binding returns 0, 200, etc which are invalid redirect codes.
+ // We don't want urlmon to follow redirects. We return E_ABORT in our
+ // IBindStatusCallback::OnProgress function and also abort the binding.
+ // However urlmon still tries to establish a transaction with the
+ // redirected URL which confuses the web server.
+ // Fix is to abort the attempted transaction.
+ DCHECK(ignore_redirect_stop_binding_error_);
+ DLOG(WARNING) << __FUNCTION__
+ << ": Aborting connection to URL:"
+ << url
+ << " as the binding has been aborted";
+ return E_ABORT;
+ }
+
HRESULT hr = S_OK;
std::string new_headers;