diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-14 18:09:20 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-14 18:09:20 +0000 |
commit | acd6d610c00b7001b10b1f805f118f9309db9ca0 (patch) | |
tree | 6670e528abc3206b774b1277bf0982f5493cc614 /chrome_frame | |
parent | 9430aacbbc1a76d4def3ed9bd97245bbd3448e9b (diff) | |
download | chromium_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.cc | 18 |
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; |