mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-25 16:37:51 +01:00
Fix URL comparison errors in CefRequest (issue #1967)
This commit is contained in:
parent
e39accd266
commit
2149a34d0a
@ -126,14 +126,14 @@ net::URLRequest::ReferrerPolicy GetURLRequestReferrerPolicy(
|
|||||||
return net_referrer_policy;
|
return net_referrer_policy;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GetURLRequestReferrer(const CefString& referrer_url) {
|
std::string GetURLRequestReferrer(const GURL& referrer_url) {
|
||||||
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
||||||
if (!GURL(referrer_url.ToString()).is_valid() ||
|
if (!referrer_url.is_valid() ||
|
||||||
command_line->HasSwitch(switches::kNoReferrers)) {
|
command_line->HasSwitch(switches::kNoReferrers)) {
|
||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
return referrer_url;
|
return referrer_url.spec();
|
||||||
}
|
}
|
||||||
|
|
||||||
blink::WebString FilePathStringToWebString(
|
blink::WebString FilePathStringToWebString(
|
||||||
@ -167,12 +167,12 @@ void GetHeaderMap(const net::HttpRequestHeaders& headers,
|
|||||||
// |referrer|.
|
// |referrer|.
|
||||||
void GetHeaderMap(const blink::WebURLRequest& request,
|
void GetHeaderMap(const blink::WebURLRequest& request,
|
||||||
CefRequest::HeaderMap& map,
|
CefRequest::HeaderMap& map,
|
||||||
CefString& referrer) {
|
GURL& referrer) {
|
||||||
map.clear();
|
map.clear();
|
||||||
|
|
||||||
class HeaderVisitor : public blink::WebHTTPHeaderVisitor {
|
class HeaderVisitor : public blink::WebHTTPHeaderVisitor {
|
||||||
public:
|
public:
|
||||||
HeaderVisitor(CefRequest::HeaderMap* map, CefString* referrer)
|
HeaderVisitor(CefRequest::HeaderMap* map, GURL* referrer)
|
||||||
: map_(map),
|
: map_(map),
|
||||||
referrer_(referrer) {
|
referrer_(referrer) {
|
||||||
}
|
}
|
||||||
@ -182,14 +182,14 @@ void GetHeaderMap(const blink::WebURLRequest& request,
|
|||||||
const base::string16& nameStr = name;
|
const base::string16& nameStr = name;
|
||||||
const base::string16& valueStr = value;
|
const base::string16& valueStr = value;
|
||||||
if (base::LowerCaseEqualsASCII(nameStr, kReferrerLowerCase))
|
if (base::LowerCaseEqualsASCII(nameStr, kReferrerLowerCase))
|
||||||
*referrer_ = valueStr;
|
*referrer_ = GURL(valueStr);
|
||||||
else
|
else
|
||||||
map_->insert(std::make_pair(nameStr, valueStr));
|
map_->insert(std::make_pair(nameStr, valueStr));
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CefRequest::HeaderMap* map_;
|
CefRequest::HeaderMap* map_;
|
||||||
CefString* referrer_;
|
GURL* referrer_;
|
||||||
};
|
};
|
||||||
|
|
||||||
HeaderVisitor visitor(&map, &referrer);
|
HeaderVisitor visitor(&map, &referrer);
|
||||||
@ -268,14 +268,15 @@ bool CefRequestImpl::IsReadOnly() {
|
|||||||
|
|
||||||
CefString CefRequestImpl::GetURL() {
|
CefString CefRequestImpl::GetURL() {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
return url_;
|
return url_.spec();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefRequestImpl::SetURL(const CefString& url) {
|
void CefRequestImpl::SetURL(const CefString& url) {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
CHECK_READONLY_RETURN_VOID();
|
CHECK_READONLY_RETURN_VOID();
|
||||||
if (url_ != url) {
|
const GURL& new_url = GURL(url.ToString());
|
||||||
url_ = url;
|
if (url_ != new_url) {
|
||||||
|
url_ = new_url;
|
||||||
Changed(kChangedUrl);
|
Changed(kChangedUrl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -288,8 +289,9 @@ CefString CefRequestImpl::GetMethod() {
|
|||||||
void CefRequestImpl::SetMethod(const CefString& method) {
|
void CefRequestImpl::SetMethod(const CefString& method) {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
CHECK_READONLY_RETURN_VOID();
|
CHECK_READONLY_RETURN_VOID();
|
||||||
if (method_ != method) {
|
const std::string& new_method = method;
|
||||||
method_ = method;
|
if (method_ != new_method) {
|
||||||
|
method_ = new_method;
|
||||||
Changed(kChangedMethod);
|
Changed(kChangedMethod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -301,9 +303,9 @@ void CefRequestImpl::SetReferrer(const CefString& referrer_url,
|
|||||||
|
|
||||||
// Call GetAsReferrer here for consistency since the same logic will later be
|
// Call GetAsReferrer here for consistency since the same logic will later be
|
||||||
// applied by URLRequest::SetReferrer().
|
// applied by URLRequest::SetReferrer().
|
||||||
const GURL& gurl = GURL(referrer_url.ToString()).GetAsReferrer();
|
const GURL& new_referrer_url = GURL(referrer_url.ToString()).GetAsReferrer();
|
||||||
if (referrer_url_ != gurl.spec() || referrer_policy_ != policy) {
|
if (referrer_url_ != new_referrer_url || referrer_policy_ != policy) {
|
||||||
referrer_url_ = gurl.spec();
|
referrer_url_ = new_referrer_url;
|
||||||
referrer_policy_ = policy;
|
referrer_policy_ = policy;
|
||||||
Changed(kChangedReferrer);
|
Changed(kChangedReferrer);
|
||||||
}
|
}
|
||||||
@ -311,7 +313,7 @@ void CefRequestImpl::SetReferrer(const CefString& referrer_url,
|
|||||||
|
|
||||||
CefString CefRequestImpl::GetReferrerURL() {
|
CefString CefRequestImpl::GetReferrerURL() {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
return referrer_url_;
|
return referrer_url_.spec();
|
||||||
}
|
}
|
||||||
|
|
||||||
CefRequestImpl::ReferrerPolicy CefRequestImpl::GetReferrerPolicy() {
|
CefRequestImpl::ReferrerPolicy CefRequestImpl::GetReferrerPolicy() {
|
||||||
@ -349,12 +351,14 @@ void CefRequestImpl::Set(const CefString& url,
|
|||||||
const HeaderMap& headerMap) {
|
const HeaderMap& headerMap) {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
CHECK_READONLY_RETURN_VOID();
|
CHECK_READONLY_RETURN_VOID();
|
||||||
if (url_ != url) {
|
const GURL& new_url = GURL(url.ToString());
|
||||||
url_ = url;
|
if (url_ != new_url) {
|
||||||
|
url_ = new_url;
|
||||||
Changed(kChangedUrl);
|
Changed(kChangedUrl);
|
||||||
}
|
}
|
||||||
if (method_ != method) {
|
const std::string& new_method = method;
|
||||||
method_ = method;
|
if (method_ != new_method) {
|
||||||
|
method_ = new_method;
|
||||||
Changed(kChangedMethod);
|
Changed(kChangedMethod);
|
||||||
}
|
}
|
||||||
postdata_ = postData;
|
postdata_ = postData;
|
||||||
@ -378,14 +382,15 @@ void CefRequestImpl::SetFlags(int flags) {
|
|||||||
|
|
||||||
CefString CefRequestImpl::GetFirstPartyForCookies() {
|
CefString CefRequestImpl::GetFirstPartyForCookies() {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
return first_party_for_cookies_;
|
return first_party_for_cookies_.spec();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefRequestImpl::SetFirstPartyForCookies(const CefString& url) {
|
void CefRequestImpl::SetFirstPartyForCookies(const CefString& url) {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
CHECK_READONLY_RETURN_VOID();
|
CHECK_READONLY_RETURN_VOID();
|
||||||
if (first_party_for_cookies_ != url) {
|
const GURL& new_url = GURL(url.ToString());
|
||||||
first_party_for_cookies_ = url;
|
if (first_party_for_cookies_ != new_url) {
|
||||||
|
first_party_for_cookies_ = new_url;
|
||||||
Changed(kChangedFirstPartyForCookies);
|
Changed(kChangedFirstPartyForCookies);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -411,7 +416,7 @@ void CefRequestImpl::Set(net::URLRequest* request) {
|
|||||||
|
|
||||||
Reset();
|
Reset();
|
||||||
|
|
||||||
url_ = request->url().spec();
|
url_ = request->url();
|
||||||
method_ = request->method();
|
method_ = request->method();
|
||||||
identifier_ = request->identifier();
|
identifier_ = request->identifier();
|
||||||
|
|
||||||
@ -422,7 +427,7 @@ void CefRequestImpl::Set(net::URLRequest* request) {
|
|||||||
// Our consumer should have made sure that this is a safe referrer. See for
|
// Our consumer should have made sure that this is a safe referrer. See for
|
||||||
// instance WebCore::FrameLoader::HideReferrer.
|
// instance WebCore::FrameLoader::HideReferrer.
|
||||||
if (referrer.is_valid()) {
|
if (referrer.is_valid()) {
|
||||||
referrer_url_ = referrer.spec();
|
referrer_url_ = referrer;
|
||||||
switch (request->referrer_policy()) {
|
switch (request->referrer_policy()) {
|
||||||
case net::URLRequest::
|
case net::URLRequest::
|
||||||
CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE:
|
CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE:
|
||||||
@ -459,7 +464,7 @@ void CefRequestImpl::Set(net::URLRequest* request) {
|
|||||||
static_cast<CefPostDataImpl*>(postdata_.get())->Set(*data);
|
static_cast<CefPostDataImpl*>(postdata_.get())->Set(*data);
|
||||||
}
|
}
|
||||||
|
|
||||||
first_party_for_cookies_ = request->first_party_for_cookies().spec();
|
first_party_for_cookies_ = request->first_party_for_cookies();
|
||||||
|
|
||||||
const content::ResourceRequestInfo* info =
|
const content::ResourceRequestInfo* info =
|
||||||
content::ResourceRequestInfo::ForRequest(request);
|
content::ResourceRequestInfo::ForRequest(request);
|
||||||
@ -497,10 +502,9 @@ void CefRequestImpl::Get(net::URLRequest* request, bool changed_only) const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!first_party_for_cookies_.empty() &&
|
if (!first_party_for_cookies_.is_empty() &&
|
||||||
ShouldSet(kChangedFirstPartyForCookies, changed_only)) {
|
ShouldSet(kChangedFirstPartyForCookies, changed_only)) {
|
||||||
request->set_first_party_for_cookies(
|
request->set_first_party_for_cookies(first_party_for_cookies_);
|
||||||
GURL(std::string(first_party_for_cookies_)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -512,12 +516,12 @@ void CefRequestImpl::Set(
|
|||||||
|
|
||||||
Reset();
|
Reset();
|
||||||
|
|
||||||
url_ = params.url().spec();
|
url_ = params.url();
|
||||||
method_ = params.is_post() ? "POST" : "GET";
|
method_ = params.is_post() ? "POST" : "GET";
|
||||||
|
|
||||||
const content::Referrer& sanitized_referrer =
|
const content::Referrer& sanitized_referrer =
|
||||||
content::Referrer::SanitizeForRequest(params.url(), params.referrer());
|
content::Referrer::SanitizeForRequest(params.url(), params.referrer());
|
||||||
referrer_url_ = sanitized_referrer.url.spec();
|
referrer_url_ = sanitized_referrer.url;
|
||||||
referrer_policy_ =
|
referrer_policy_ =
|
||||||
static_cast<cef_referrer_policy_t>(sanitized_referrer.policy);
|
static_cast<cef_referrer_policy_t>(sanitized_referrer.policy);
|
||||||
|
|
||||||
@ -534,8 +538,8 @@ void CefRequestImpl::Set(const blink::WebURLRequest& request) {
|
|||||||
|
|
||||||
Reset();
|
Reset();
|
||||||
|
|
||||||
url_ = request.url().string();
|
url_ = request.url();
|
||||||
method_ = request.httpMethod();
|
method_ = request.httpMethod().utf8();
|
||||||
|
|
||||||
::GetHeaderMap(request, headermap_, referrer_url_);
|
::GetHeaderMap(request, headermap_, referrer_url_);
|
||||||
referrer_policy_ =
|
referrer_policy_ =
|
||||||
@ -547,7 +551,7 @@ void CefRequestImpl::Set(const blink::WebURLRequest& request) {
|
|||||||
static_cast<CefPostDataImpl*>(postdata_.get())->Set(body);
|
static_cast<CefPostDataImpl*>(postdata_.get())->Set(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
first_party_for_cookies_ = request.firstPartyForCookies().string();
|
first_party_for_cookies_ = request.firstPartyForCookies();
|
||||||
|
|
||||||
if (request.getCachePolicy() == blink::WebCachePolicy::BypassingCache)
|
if (request.getCachePolicy() == blink::WebCachePolicy::BypassingCache)
|
||||||
flags_ |= UR_FLAG_SKIP_CACHE;
|
flags_ |= UR_FLAG_SKIP_CACHE;
|
||||||
@ -561,15 +565,15 @@ void CefRequestImpl::Get(blink::WebURLRequest& request,
|
|||||||
int64& upload_data_size) const {
|
int64& upload_data_size) const {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
|
|
||||||
request.setURL(GURL(url_.ToString()));
|
request.setURL(url_);
|
||||||
request.setHTTPMethod(blink::WebString::fromUTF8(method_.ToString()));
|
request.setHTTPMethod(blink::WebString::fromUTF8(method_));
|
||||||
|
|
||||||
if (!referrer_url_.empty()) {
|
if (!referrer_url_.is_empty()) {
|
||||||
const blink::WebString& referrer =
|
const blink::WebString& referrer =
|
||||||
blink::WebSecurityPolicy::generateReferrerHeader(
|
blink::WebSecurityPolicy::generateReferrerHeader(
|
||||||
static_cast<blink::WebReferrerPolicy>(referrer_policy_),
|
static_cast<blink::WebReferrerPolicy>(referrer_policy_),
|
||||||
GURL(url_.ToString()),
|
url_,
|
||||||
blink::WebString::fromUTF8(referrer_url_));
|
blink::WebString::fromUTF8(referrer_url_.spec()));
|
||||||
if (!referrer.isEmpty()) {
|
if (!referrer.isEmpty()) {
|
||||||
request.setHTTPReferrer(
|
request.setHTTPReferrer(
|
||||||
referrer,
|
referrer,
|
||||||
@ -597,8 +601,8 @@ void CefRequestImpl::Get(blink::WebURLRequest& request,
|
|||||||
|
|
||||||
::SetHeaderMap(headermap_, request);
|
::SetHeaderMap(headermap_, request);
|
||||||
|
|
||||||
if (!first_party_for_cookies_.empty())
|
if (!first_party_for_cookies_.is_empty())
|
||||||
request.setFirstPartyForCookies(GURL(first_party_for_cookies_.ToString()));
|
request.setFirstPartyForCookies(first_party_for_cookies_);
|
||||||
|
|
||||||
request.setCachePolicy((flags_ & UR_FLAG_SKIP_CACHE) ?
|
request.setCachePolicy((flags_ & UR_FLAG_SKIP_CACHE) ?
|
||||||
blink::WebCachePolicy::BypassingCache :
|
blink::WebCachePolicy::BypassingCache :
|
||||||
@ -693,11 +697,11 @@ void CefRequestImpl::Get(const CefMsg_LoadRequest_Params& params,
|
|||||||
void CefRequestImpl::Get(CefNavigateParams& params) const {
|
void CefRequestImpl::Get(CefNavigateParams& params) const {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
|
|
||||||
params.url = GURL(url_.ToString());
|
params.url = url_;
|
||||||
params.method = method_;
|
params.method = method_;
|
||||||
|
|
||||||
// Referrer policy will be applied later in the request pipeline.
|
// Referrer policy will be applied later in the request pipeline.
|
||||||
params.referrer.url = GURL(referrer_url_.ToString());
|
params.referrer.url = referrer_url_;
|
||||||
params.referrer.policy =
|
params.referrer.policy =
|
||||||
static_cast<blink::WebReferrerPolicy>(referrer_policy_);
|
static_cast<blink::WebReferrerPolicy>(referrer_policy_);
|
||||||
|
|
||||||
@ -710,7 +714,7 @@ void CefRequestImpl::Get(CefNavigateParams& params) const {
|
|||||||
impl->Get(*params.upload_data.get());
|
impl->Get(*params.upload_data.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
params.first_party_for_cookies = GURL(first_party_for_cookies_.ToString());
|
params.first_party_for_cookies = first_party_for_cookies_;
|
||||||
params.load_flags = flags_;
|
params.load_flags = flags_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -718,7 +722,7 @@ void CefRequestImpl::Get(net::URLFetcher& fetcher,
|
|||||||
int64& upload_data_size) const {
|
int64& upload_data_size) const {
|
||||||
base::AutoLock lock_scope(lock_);
|
base::AutoLock lock_scope(lock_);
|
||||||
|
|
||||||
if (!referrer_url_.empty()) {
|
if (!referrer_url_.is_empty()) {
|
||||||
fetcher.SetReferrer(GetURLRequestReferrer(referrer_url_));
|
fetcher.SetReferrer(GetURLRequestReferrer(referrer_url_));
|
||||||
fetcher.SetReferrerPolicy(GetURLRequestReferrerPolicy(referrer_policy_));
|
fetcher.SetReferrerPolicy(GetURLRequestReferrerPolicy(referrer_policy_));
|
||||||
}
|
}
|
||||||
@ -781,8 +785,8 @@ void CefRequestImpl::Get(net::URLFetcher& fetcher,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!first_party_for_cookies_.empty())
|
if (!first_party_for_cookies_.is_empty())
|
||||||
fetcher.SetInitiatorURL(GURL(first_party_for_cookies_.ToString()));
|
fetcher.SetInitiatorURL(first_party_for_cookies_);
|
||||||
|
|
||||||
if (flags_ & UR_FLAG_NO_RETRY_ON_5XX)
|
if (flags_ & UR_FLAG_NO_RETRY_ON_5XX)
|
||||||
fetcher.SetAutomaticallyRetryOn5xx(false);
|
fetcher.SetAutomaticallyRetryOn5xx(false);
|
||||||
@ -873,9 +877,9 @@ void CefRequestImpl::Reset() {
|
|||||||
lock_.AssertAcquired();
|
lock_.AssertAcquired();
|
||||||
DCHECK(!read_only_);
|
DCHECK(!read_only_);
|
||||||
|
|
||||||
url_.clear();
|
url_ = GURL();
|
||||||
method_ = "GET";
|
method_ = "GET";
|
||||||
referrer_url_.clear();
|
referrer_url_ = GURL();
|
||||||
referrer_policy_ = REFERRER_POLICY_DEFAULT;
|
referrer_policy_ = REFERRER_POLICY_DEFAULT;
|
||||||
postdata_ = NULL;
|
postdata_ = NULL;
|
||||||
headermap_.clear();
|
headermap_.clear();
|
||||||
@ -883,7 +887,7 @@ void CefRequestImpl::Reset() {
|
|||||||
transition_type_ = TT_EXPLICIT;
|
transition_type_ = TT_EXPLICIT;
|
||||||
identifier_ = 0U;
|
identifier_ = 0U;
|
||||||
flags_ = UR_FLAG_NONE;
|
flags_ = UR_FLAG_NONE;
|
||||||
first_party_for_cookies_.clear();
|
first_party_for_cookies_ = GURL();
|
||||||
|
|
||||||
changes_ = kChangedNone;
|
changes_ = kChangedNone;
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include "base/synchronization/lock.h"
|
#include "base/synchronization/lock.h"
|
||||||
#include "third_party/WebKit/public/platform/WebHTTPBody.h"
|
#include "third_party/WebKit/public/platform/WebHTTPBody.h"
|
||||||
|
#include "url/gurl.h"
|
||||||
|
|
||||||
namespace navigation_interception {
|
namespace navigation_interception {
|
||||||
class NavigationParams;
|
class NavigationParams;
|
||||||
@ -121,9 +122,9 @@ class CefRequestImpl : public CefRequest {
|
|||||||
|
|
||||||
void Reset();
|
void Reset();
|
||||||
|
|
||||||
CefString url_;
|
GURL url_;
|
||||||
CefString method_;
|
std::string method_;
|
||||||
CefString referrer_url_;
|
GURL referrer_url_;
|
||||||
ReferrerPolicy referrer_policy_;
|
ReferrerPolicy referrer_policy_;
|
||||||
CefRefPtr<CefPostData> postdata_;
|
CefRefPtr<CefPostData> postdata_;
|
||||||
HeaderMap headermap_;
|
HeaderMap headermap_;
|
||||||
@ -133,7 +134,7 @@ class CefRequestImpl : public CefRequest {
|
|||||||
|
|
||||||
// The below members are used by CefURLRequest.
|
// The below members are used by CefURLRequest.
|
||||||
int flags_;
|
int flags_;
|
||||||
CefString first_party_for_cookies_;
|
GURL first_party_for_cookies_;
|
||||||
|
|
||||||
// True if this object is read-only.
|
// True if this object is read-only.
|
||||||
bool read_only_;
|
bool read_only_;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user