diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 06:43:35 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 06:43:35 +0000 |
commit | 4736610c8c5210c61efbf985b7e56843c7cfa219 (patch) | |
tree | 0842657b27f9055b6653708e9025ee6ff076f2ea /chrome_frame/plugin_url_request.cc | |
parent | b9e8ea61b8b7b897292bfc69814444dd9e938477 (diff) | |
download | chromium_src-4736610c8c5210c61efbf985b7e56843c7cfa219.zip chromium_src-4736610c8c5210c61efbf985b7e56843c7cfa219.tar.gz chromium_src-4736610c8c5210c61efbf985b7e56843c7cfa219.tar.bz2 |
Revert 76880 - ChromeFrame would fail to upload POST data to the server if the webserver requested NTLM
authentication. This is due to a bug in urlmon on IE6 and IE7 which manifests itself when
the post data is passed to urlmon as an IStream.
Fix is to pass in the uploaded data as a HGLOBAL. We always pass in a copy of the HGLOBAL
which points to the posted data to urlmon. This is to have it accessible for reissuing
navigation requests which target downloads.
Fixes bug http://code.google.com/p/chromium/issues/detail?id=62687
BUG=62687
TEST=manually at this point. As we need a server which supports NTLM authentication like IIS.
Review URL: http://codereview.chromium.org/6603006
TBR=ananta@chromium.org
Review URL: http://codereview.chromium.org/6626008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76886 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/plugin_url_request.cc')
-rw-r--r-- | chrome_frame/plugin_url_request.cc | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/chrome_frame/plugin_url_request.cc b/chrome_frame/plugin_url_request.cc index 8af3e1e..e0166bc 100644 --- a/chrome_frame/plugin_url_request.cc +++ b/chrome_frame/plugin_url_request.cc @@ -14,8 +14,7 @@ PluginUrlRequest::PluginUrlRequest() enable_frame_busting_(false), resource_type_(ResourceType::MAIN_FRAME), load_flags_(0), - is_chunked_upload_(false), - upload_data_(NULL) { + is_chunked_upload_(false) { } PluginUrlRequest::~PluginUrlRequest() { @@ -35,22 +34,25 @@ bool PluginUrlRequest::Initialize(PluginUrlRequestDelegate* delegate, resource_type_ = resource_type; load_flags_ = load_flags; - if (upload_data && upload_data->GetContentLength()) { - post_data_len_ = upload_data->GetContentLength(); - is_chunked_upload_ = upload_data->is_chunked(); - -#pragma warning(disable:4244) - upload_data_.reserve(post_data_len_); -#pragma warning(default:4244) - - std::vector<net::UploadData::Element>::iterator element_index; - for (element_index = upload_data->elements()->begin(); - element_index != upload_data->elements()->end(); - ++element_index) { - std::copy(element_index->bytes().begin(), element_index->bytes().end(), - std::back_inserter(upload_data_)); + if (upload_data) { + // We store a pointer to UrlmonUploadDataStream and not net::UploadData + // since UrlmonUploadDataStream implements thread safe ref counting and + // UploadData does not. + CComObject<UrlmonUploadDataStream>* upload_stream = NULL; + HRESULT hr = CComObject<UrlmonUploadDataStream>::CreateInstance( + &upload_stream); + if (FAILED(hr)) { + NOTREACHED(); + } else { + post_data_len_ = upload_data->GetContentLength(); + upload_stream->AddRef(); + upload_stream->Initialize(upload_data); + upload_data_.Attach(upload_stream); + is_chunked_upload_ = upload_data->is_chunked(); } } + enable_frame_busting_ = enable_frame_busting; + return true; } |