Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(695)

Side by Side Diff: chrome_frame/urlmon_url_request.cc

Issue 1186002: Adding support for HEAD requests.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome_frame/test/url_request_test.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome_frame/urlmon_url_request.h" 5 #include "chrome_frame/urlmon_url_request.h"
6 6
7 #include <wininet.h> 7 #include <wininet.h>
8 #include <urlmon.h> 8 #include <urlmon.h>
9 9
10 #include "base/scoped_ptr.h" 10 #include "base/scoped_ptr.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 } 139 }
140 140
141 HRESULT UrlmonUrlRequest::SetRequestData(RequestData* data) { 141 HRESULT UrlmonUrlRequest::SetRequestData(RequestData* data) {
142 request_data_ = data; 142 request_data_ = data;
143 return S_OK; 143 return S_OK;
144 } 144 }
145 145
146 void UrlmonUrlRequest::StealMoniker(IMoniker** moniker) { 146 void UrlmonUrlRequest::StealMoniker(IMoniker** moniker) {
147 // Could be called in any thread. There should be no race 147 // Could be called in any thread. There should be no race
148 // since moniker_ is not released while we are in manager's request map. 148 // since moniker_ is not released while we are in manager's request map.
149 DLOG(INFO) << __FUNCTION__ << " id: " << id();
150 DLOG_IF(WARNING, moniker == NULL) << __FUNCTION__ << " no moniker";
149 *moniker = moniker_.Detach(); 151 *moniker = moniker_.Detach();
150 } 152 }
151 153
152 STDMETHODIMP UrlmonUrlRequest::OnStartBinding(DWORD reserved, 154 STDMETHODIMP UrlmonUrlRequest::OnStartBinding(DWORD reserved,
153 IBinding *binding) { 155 IBinding *binding) {
154 DCHECK_EQ(thread_, PlatformThread::CurrentId()); 156 DCHECK_EQ(thread_, PlatformThread::CurrentId());
155 binding_ = binding; 157 binding_ = binding;
156 return S_OK; 158 return S_OK;
157 } 159 }
158 160
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 bool upload_data = false; 306 bool upload_data = false;
305 307
306 if (LowerCaseEqualsASCII(method(), "get")) { 308 if (LowerCaseEqualsASCII(method(), "get")) {
307 bind_info->dwBindVerb = BINDVERB_GET; 309 bind_info->dwBindVerb = BINDVERB_GET;
308 } else if (LowerCaseEqualsASCII(method(), "post")) { 310 } else if (LowerCaseEqualsASCII(method(), "post")) {
309 bind_info->dwBindVerb = BINDVERB_POST; 311 bind_info->dwBindVerb = BINDVERB_POST;
310 upload_data = true; 312 upload_data = true;
311 } else if (LowerCaseEqualsASCII(method(), "put")) { 313 } else if (LowerCaseEqualsASCII(method(), "put")) {
312 bind_info->dwBindVerb = BINDVERB_PUT; 314 bind_info->dwBindVerb = BINDVERB_PUT;
313 upload_data = true; 315 upload_data = true;
316 } else if (LowerCaseEqualsASCII(method(), "head")) {
317 std::wstring verb(ASCIIToWide(StringToUpperASCII(method())));
318 bind_info->dwBindVerb = BINDVERB_CUSTOM;
319 bind_info->szCustomVerb = reinterpret_cast<wchar_t*>(
320 ::CoTaskMemAlloc((verb.length() + 1) * sizeof(wchar_t)));
321 lstrcpyW(bind_info->szCustomVerb, verb.c_str());
314 } else { 322 } else {
315 NOTREACHED() << "Unknown HTTP method."; 323 NOTREACHED() << "Unknown HTTP method.";
316 status_.set_result(URLRequestStatus::FAILED, net::ERR_METHOD_NOT_SUPPORTED); 324 status_.set_result(URLRequestStatus::FAILED, net::ERR_METHOD_NOT_SUPPORTED);
317 NotifyDelegateAndDie(); 325 NotifyDelegateAndDie();
318 return E_FAIL; 326 return E_FAIL;
319 } 327 }
320 328
321 if (upload_data) { 329 if (upload_data) {
322 // Bypass caching proxies on POSTs and PUTs and avoid writing responses to 330 // Bypass caching proxies on POSTs and PUTs and avoid writing responses to
323 // these requests to the browser's cache 331 // these requests to the browser's cache
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 new_request->SetRequestData(request_for_url->request_data()); 915 new_request->SetRequestData(request_for_url->request_data());
908 } 916 }
909 917
910 DCHECK(LookupRequest(request_id).get() == NULL); 918 DCHECK(LookupRequest(request_id).get() == NULL);
911 request_map_[request_id] = new_request; 919 request_map_[request_id] = new_request;
912 map_empty_.Reset(); 920 map_empty_.Reset();
913 new_request->Start(); 921 new_request->Start();
914 } 922 }
915 923
916 void UrlmonUrlRequestManager::ReadRequest(int request_id, int bytes_to_read) { 924 void UrlmonUrlRequestManager::ReadRequest(int request_id, int bytes_to_read) {
917 DLOG(INFO) << __FUNCTION__; 925 DLOG(INFO) << __FUNCTION__ << " id: " << request_id;
918 ExecuteInWorkerThread(FROM_HERE, NewRunnableMethod(this, 926 ExecuteInWorkerThread(FROM_HERE, NewRunnableMethod(this,
919 &UrlmonUrlRequestManager::ReadRequestWorker, request_id, bytes_to_read)); 927 &UrlmonUrlRequestManager::ReadRequestWorker, request_id, bytes_to_read));
920 } 928 }
921 929
922 void UrlmonUrlRequestManager::ReadRequestWorker(int request_id, 930 void UrlmonUrlRequestManager::ReadRequestWorker(int request_id,
923 int bytes_to_read) { 931 int bytes_to_read) {
924 DLOG(INFO) << __FUNCTION__; 932 DLOG(INFO) << __FUNCTION__ << " id: " << request_id;
925 DCHECK_EQ(worker_thread_.thread_id(), PlatformThread::CurrentId()); 933 DCHECK_EQ(worker_thread_.thread_id(), PlatformThread::CurrentId());
926 scoped_refptr<UrlmonUrlRequest> request = LookupRequest(request_id); 934 scoped_refptr<UrlmonUrlRequest> request = LookupRequest(request_id);
927 // if zero, it may just have had network error. 935 // if zero, it may just have had network error.
928 if (request) { 936 if (request) {
929 request->Read(bytes_to_read); 937 request->Read(bytes_to_read);
930 } 938 }
931 } 939 }
932 940
933 void UrlmonUrlRequestManager::EndRequest(int request_id) { 941 void UrlmonUrlRequestManager::EndRequest(int request_id) {
934 DLOG(INFO) << __FUNCTION__; 942 DLOG(INFO) << __FUNCTION__ << " id: " << request_id;
935 ExecuteInWorkerThread(FROM_HERE, NewRunnableMethod(this, 943 ExecuteInWorkerThread(FROM_HERE, NewRunnableMethod(this,
936 &UrlmonUrlRequestManager::EndRequestWorker, request_id)); 944 &UrlmonUrlRequestManager::EndRequestWorker, request_id));
937 } 945 }
938 946
939 void UrlmonUrlRequestManager::EndRequestWorker(int request_id) { 947 void UrlmonUrlRequestManager::EndRequestWorker(int request_id) {
940 DLOG(INFO) << __FUNCTION__; 948 DLOG(INFO) << __FUNCTION__ << " id: " << request_id;
941 DCHECK_EQ(worker_thread_.thread_id(), PlatformThread::CurrentId()); 949 DCHECK_EQ(worker_thread_.thread_id(), PlatformThread::CurrentId());
942 scoped_refptr<UrlmonUrlRequest> request = LookupRequest(request_id); 950 scoped_refptr<UrlmonUrlRequest> request = LookupRequest(request_id);
943 if (request) { 951 if (request) {
944 request->Stop(); 952 request->Stop();
945 } 953 }
946 } 954 }
947 955
948 void UrlmonUrlRequestManager::StopAll() { 956 void UrlmonUrlRequestManager::StopAll() {
949 DLOG(INFO) << __FUNCTION__; 957 DLOG(INFO) << __FUNCTION__;
950 do { 958 do {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 done.Wait(); 1071 done.Wait();
1064 } 1072 }
1065 1073
1066 void UrlmonUrlRequestManager::StealMonikerFromRequestWorker(int request_id, 1074 void UrlmonUrlRequestManager::StealMonikerFromRequestWorker(int request_id,
1067 IMoniker** moniker, base::WaitableEvent* done) { 1075 IMoniker** moniker, base::WaitableEvent* done) {
1068 if (!stopping_) { 1076 if (!stopping_) {
1069 scoped_refptr<UrlmonUrlRequest> request = LookupRequest(request_id); 1077 scoped_refptr<UrlmonUrlRequest> request = LookupRequest(request_id);
1070 if (request) { 1078 if (request) {
1071 request->StealMoniker(moniker); 1079 request->StealMoniker(moniker);
1072 request->Stop(); 1080 request->Stop();
1081 } else {
1082 DLOG(INFO) << __FUNCTION__ << " request not found.";
1073 } 1083 }
1084 } else {
1085 DLOG(INFO) << __FUNCTION__ << " request stopping.";
1074 } 1086 }
1075 1087
1076 done->Signal(); 1088 done->Signal();
1077 } 1089 }
1078 1090
1079 bool UrlmonUrlRequestManager::ExecuteInWorkerThread( 1091 bool UrlmonUrlRequestManager::ExecuteInWorkerThread(
1080 const tracked_objects::Location& from_here, Task* task) { 1092 const tracked_objects::Location& from_here, Task* task) {
1081 AutoLock lock(worker_thread_access_); 1093 AutoLock lock(worker_thread_access_);
1082 if (stopping_) { 1094 if (stopping_) {
1083 delete task; 1095 delete task;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 privacy_entry.flags |= flags; 1128 privacy_entry.flags |= flags;
1117 privacy_entry.policy_ref = UTF8ToWide(policy_ref); 1129 privacy_entry.policy_ref = UTF8ToWide(policy_ref);
1118 } 1130 }
1119 1131
1120 if (fire_privacy_event && IsWindow(notification_window_)) { 1132 if (fire_privacy_event && IsWindow(notification_window_)) {
1121 PostMessage(notification_window_, WM_FIRE_PRIVACY_CHANGE_NOTIFICATION, 1, 1133 PostMessage(notification_window_, WM_FIRE_PRIVACY_CHANGE_NOTIFICATION, 1,
1122 0); 1134 0);
1123 } 1135 }
1124 } 1136 }
1125 1137
OLDNEW
« no previous file with comments | « chrome_frame/test/url_request_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698