mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Carry over modifications to request object in CefHandler::HandleBeforeResourceLoad() (issue #41).
git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@95 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
@ -599,7 +599,9 @@ public:
|
|||||||
// populate the |redirectUrl| value and return RV_CONTINUE. To specify
|
// populate the |redirectUrl| value and return RV_CONTINUE. To specify
|
||||||
// data for the resource return a CefStream object in |resourceStream|, set
|
// data for the resource return a CefStream object in |resourceStream|, set
|
||||||
// |mimeType| to the resource stream's mime type, and return RV_CONTINUE.
|
// |mimeType| to the resource stream's mime type, and return RV_CONTINUE.
|
||||||
// To cancel loading of the resource return RV_HANDLED.
|
// To cancel loading of the resource return RV_HANDLED. Any modifications
|
||||||
|
// to |request| will be observed. If the URL in |request| is changed and
|
||||||
|
// |redirectUrl| is also set, the URL in |request| will be used.
|
||||||
/*--cef()--*/
|
/*--cef()--*/
|
||||||
virtual RetVal HandleBeforeResourceLoad(CefRefPtr<CefBrowser> browser,
|
virtual RetVal HandleBeforeResourceLoad(CefRefPtr<CefBrowser> browser,
|
||||||
CefRefPtr<CefRequest> request,
|
CefRefPtr<CefRequest> request,
|
||||||
|
@ -433,7 +433,9 @@ typedef struct _cef_handler_t
|
|||||||
// the |redirectUrl| value and return RV_CONTINUE. To specify data for the
|
// the |redirectUrl| value and return RV_CONTINUE. To specify data for the
|
||||||
// resource return a CefStream object in |resourceStream|, set |mimeType| to
|
// resource return a CefStream object in |resourceStream|, set |mimeType| to
|
||||||
// the resource stream's mime type, and return RV_CONTINUE. To cancel loading
|
// the resource stream's mime type, and return RV_CONTINUE. To cancel loading
|
||||||
// of the resource return RV_HANDLED.
|
// of the resource return RV_HANDLED. Any modifications to |request| will be
|
||||||
|
// observed. If the URL in |request| is changed and |redirectUrl| is also
|
||||||
|
// set, the URL in |request| will be used.
|
||||||
enum cef_retval_t (CEF_CALLBACK *handle_before_resource_load)(
|
enum cef_retval_t (CEF_CALLBACK *handle_before_resource_load)(
|
||||||
struct _cef_handler_t* self, struct _cef_browser_t* browser,
|
struct _cef_handler_t* self, struct _cef_browser_t* browser,
|
||||||
struct _cef_request_t* request, cef_string_t* redirectUrl,
|
struct _cef_request_t* request, cef_string_t* redirectUrl,
|
||||||
|
@ -207,12 +207,13 @@ class RequestProxy : public URLRequest::Delegate,
|
|||||||
CefRefPtr<CefRequest> request(new CefRequestImpl());
|
CefRefPtr<CefRequest> request(new CefRequestImpl());
|
||||||
CefRequestImpl* requestimpl = static_cast<CefRequestImpl*>(request.get());
|
CefRequestImpl* requestimpl = static_cast<CefRequestImpl*>(request.get());
|
||||||
|
|
||||||
requestimpl->SetURL(UTF8ToWide(params->url.spec()));
|
const std::wstring originalUrl = UTF8ToWide(params->url.spec());
|
||||||
|
requestimpl->SetURL(originalUrl);
|
||||||
requestimpl->SetMethod(UTF8ToWide(params->method));
|
requestimpl->SetMethod(UTF8ToWide(params->method));
|
||||||
|
|
||||||
// Transfer request headers
|
// Transfer request headers
|
||||||
CefRequest::HeaderMap headerMap;
|
CefRequest::HeaderMap headerMap;
|
||||||
CefRequestImpl::GetHeaderMap(params->headers, headerMap);
|
CefRequestImpl::ParseHeaders(params->headers, headerMap);
|
||||||
headerMap.insert(
|
headerMap.insert(
|
||||||
std::make_pair(L"Referrer", UTF8ToWide(params->referrer.spec())));
|
std::make_pair(L"Referrer", UTF8ToWide(params->referrer.spec())));
|
||||||
requestimpl->SetHeaderMap(headerMap);
|
requestimpl->SetHeaderMap(headerMap);
|
||||||
@ -234,6 +235,35 @@ class RequestProxy : public URLRequest::Delegate,
|
|||||||
|
|
||||||
CefHandler::RetVal rv = handler->HandleBeforeResourceLoad(
|
CefHandler::RetVal rv = handler->HandleBeforeResourceLoad(
|
||||||
browser_, request, redirectUrl, resourceStream, mimeType, loadFlags);
|
browser_, request, redirectUrl, resourceStream, mimeType, loadFlags);
|
||||||
|
|
||||||
|
// Observe URL from request.
|
||||||
|
const std::wstring requestUrl = request->GetURL();
|
||||||
|
if(requestUrl != originalUrl) {
|
||||||
|
params->url = GURL(WideToUTF8(requestUrl));
|
||||||
|
redirectUrl.clear(); // Request URL trumps redirect URL
|
||||||
|
}
|
||||||
|
|
||||||
|
// Observe method from request.
|
||||||
|
params->method = WideToUTF8(request->GetMethod());
|
||||||
|
|
||||||
|
// Observe headers from request.
|
||||||
|
request->GetHeaderMap(headerMap);
|
||||||
|
CefRequest::HeaderMap::iterator referrer = headerMap.find(L"Referrer");
|
||||||
|
if(referrer == headerMap.end()) {
|
||||||
|
params->referrer = GURL();
|
||||||
|
} else {
|
||||||
|
params->referrer = GURL(WideToUTF8(referrer->second));
|
||||||
|
headerMap.erase(referrer);
|
||||||
|
}
|
||||||
|
params->headers = CefRequestImpl::GenerateHeaders(headerMap);
|
||||||
|
|
||||||
|
// Observe post data from request.
|
||||||
|
CefRefPtr<CefPostData> postData = request->GetPostData();
|
||||||
|
if(postData.get()) {
|
||||||
|
params->upload = new net::UploadData();
|
||||||
|
static_cast<CefPostDataImpl*>(postData.get())->Get(*params->upload);
|
||||||
|
}
|
||||||
|
|
||||||
if(rv == RV_HANDLED) {
|
if(rv == RV_HANDLED) {
|
||||||
// cancel the resource load
|
// cancel the resource load
|
||||||
handled = true;
|
handled = true;
|
||||||
|
@ -161,7 +161,29 @@ void CefRequestImpl::SetHeaderMap(const HeaderMap& map,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefRequestImpl::GetHeaderMap(const std::string& header_str, HeaderMap& map)
|
std::string CefRequestImpl::GenerateHeaders(const HeaderMap& map)
|
||||||
|
{
|
||||||
|
std::string headers;
|
||||||
|
|
||||||
|
for(HeaderMap::const_iterator header = map.begin();
|
||||||
|
header != map.end();
|
||||||
|
++header) {
|
||||||
|
const std::wstring& key = header->first;
|
||||||
|
const std::wstring& value = header->second;
|
||||||
|
|
||||||
|
if(!key.empty()) {
|
||||||
|
// Delimit with "\r\n".
|
||||||
|
if(!headers.empty())
|
||||||
|
headers += "\r\n";
|
||||||
|
|
||||||
|
headers += WideToUTF8(key) + ": " + WideToUTF8(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CefRequestImpl::ParseHeaders(const std::string& header_str, HeaderMap& map)
|
||||||
{
|
{
|
||||||
// Parse the request header values
|
// Parse the request header values
|
||||||
std::string headerStr = "HTTP/1.1 200 OK\n";
|
std::string headerStr = "HTTP/1.1 200 OK\n";
|
||||||
|
@ -42,7 +42,8 @@ public:
|
|||||||
static void SetHeaderMap(const HeaderMap& map,
|
static void SetHeaderMap(const HeaderMap& map,
|
||||||
WebKit::WebURLRequest& request);
|
WebKit::WebURLRequest& request);
|
||||||
|
|
||||||
static void GetHeaderMap(const std::string& header_str, HeaderMap& map);
|
static std::string GenerateHeaders(const HeaderMap& map);
|
||||||
|
static void ParseHeaders(const std::string& header_str, HeaderMap& map);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::wstring url_;
|
std::wstring url_;
|
||||||
|
Reference in New Issue
Block a user