mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Always save cookies for http, https, ws and wss schemes (issue #1684)
This commit is contained in:
@ -174,8 +174,7 @@ CefCookieManagerImpl::GetExistingCookieMonster() {
|
||||
return cookie_monster_;
|
||||
} else if (request_context_impl_.get()) {
|
||||
scoped_refptr<net::CookieMonster> cookie_monster =
|
||||
request_context_impl_->GetURLRequestContext()->cookie_store()->
|
||||
GetCookieMonster();
|
||||
request_context_impl_->GetCookieMonster();
|
||||
DCHECK(cookie_monster.get());
|
||||
return cookie_monster;
|
||||
}
|
||||
@ -194,39 +193,12 @@ void CefCookieManagerImpl::SetSupportedSchemes(
|
||||
return;
|
||||
}
|
||||
|
||||
if (HasContext()) {
|
||||
RunMethodWithContext(
|
||||
base::Bind(&CefCookieManagerImpl::SetSupportedSchemesWithContext, this,
|
||||
schemes, callback));
|
||||
return;
|
||||
}
|
||||
|
||||
DCHECK(cookie_monster_.get());
|
||||
if (!cookie_monster_.get())
|
||||
return;
|
||||
|
||||
supported_schemes_ = schemes;
|
||||
|
||||
if (supported_schemes_.empty()) {
|
||||
supported_schemes_.push_back("http");
|
||||
supported_schemes_.push_back("https");
|
||||
}
|
||||
|
||||
std::set<std::string> scheme_set;
|
||||
std::vector<CefString>::const_iterator it = supported_schemes_.begin();
|
||||
for (; it != supported_schemes_.end(); ++it)
|
||||
std::vector<CefString>::const_iterator it = schemes.begin();
|
||||
for (; it != schemes.end(); ++it)
|
||||
scheme_set.insert(*it);
|
||||
|
||||
const char** arr = new const char*[scheme_set.size()];
|
||||
std::set<std::string>::const_iterator it2 = scheme_set.begin();
|
||||
for (int i = 0; it2 != scheme_set.end(); ++it2, ++i)
|
||||
arr[i] = it2->c_str();
|
||||
|
||||
cookie_monster_->SetCookieableSchemes(arr, scheme_set.size());
|
||||
|
||||
delete [] arr;
|
||||
|
||||
RunAsyncCompletionOnIOThread(callback);
|
||||
SetSupportedSchemesInternal(scheme_set, callback);
|
||||
}
|
||||
|
||||
bool CefCookieManagerImpl::VisitAllCookies(
|
||||
@ -339,7 +311,7 @@ bool CefCookieManagerImpl::SetStoragePath(
|
||||
storage_path_ = new_path;
|
||||
|
||||
// Restore the previously supported schemes.
|
||||
SetSupportedSchemes(supported_schemes_, callback);
|
||||
SetSupportedSchemesInternal(supported_schemes_, callback);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -403,6 +375,30 @@ bool CefCookieManagerImpl::GetCefCookie(const GURL& url,
|
||||
return true;
|
||||
}
|
||||
|
||||
// static
|
||||
void CefCookieManagerImpl::SetCookieMonsterSchemes(
|
||||
net::CookieMonster* cookie_monster,
|
||||
const std::set<std::string>& schemes) {
|
||||
CEF_REQUIRE_IOT();
|
||||
|
||||
std::set<std::string> all_schemes = schemes;
|
||||
|
||||
// Add default schemes that should always support cookies.
|
||||
all_schemes.insert("http");
|
||||
all_schemes.insert("https");
|
||||
all_schemes.insert("ws");
|
||||
all_schemes.insert("wss");
|
||||
|
||||
const char** arr = new const char*[all_schemes.size()];
|
||||
std::set<std::string>::const_iterator it2 = all_schemes.begin();
|
||||
for (int i = 0; it2 != all_schemes.end(); ++it2, ++i)
|
||||
arr[i] = it2->c_str();
|
||||
|
||||
cookie_monster->SetCookieableSchemes(arr, all_schemes.size());
|
||||
|
||||
delete [] arr;
|
||||
}
|
||||
|
||||
bool CefCookieManagerImpl::HasContext() {
|
||||
CEF_REQUIRE_IOT();
|
||||
return (request_context_impl_.get() || request_context_.get());
|
||||
@ -457,17 +453,12 @@ void CefCookieManagerImpl::SetStoragePathWithContext(
|
||||
}
|
||||
|
||||
void CefCookieManagerImpl::SetSupportedSchemesWithContext(
|
||||
const std::vector<CefString>& schemes,
|
||||
const std::set<std::string>& schemes,
|
||||
CefRefPtr<CefCompletionCallback> callback,
|
||||
scoped_refptr<CefURLRequestContextGetterImpl> request_context) {
|
||||
CEF_REQUIRE_IOT();
|
||||
|
||||
std::vector<std::string> scheme_vec;
|
||||
std::vector<CefString>::const_iterator it = schemes.begin();
|
||||
for (; it != schemes.end(); ++it)
|
||||
scheme_vec.push_back(it->ToString());
|
||||
|
||||
request_context->SetCookieSupportedSchemes(scheme_vec);
|
||||
request_context->SetCookieSupportedSchemes(schemes);
|
||||
|
||||
RunAsyncCompletionOnIOThread(callback);
|
||||
}
|
||||
@ -479,8 +470,7 @@ void CefCookieManagerImpl::GetCookieMonsterWithContext(
|
||||
CEF_REQUIRE_IOT();
|
||||
|
||||
scoped_refptr<net::CookieMonster> cookie_monster =
|
||||
request_context->GetURLRequestContext()->cookie_store()->
|
||||
GetCookieMonster();
|
||||
request_context->GetCookieMonster();
|
||||
|
||||
if (task_runner->BelongsToCurrentThread()) {
|
||||
// Execute the callback immediately.
|
||||
@ -491,6 +481,28 @@ void CefCookieManagerImpl::GetCookieMonsterWithContext(
|
||||
}
|
||||
}
|
||||
|
||||
void CefCookieManagerImpl::SetSupportedSchemesInternal(
|
||||
const std::set<std::string>& schemes,
|
||||
CefRefPtr<CefCompletionCallback> callback){
|
||||
CEF_REQUIRE_IOT();
|
||||
|
||||
if (HasContext()) {
|
||||
RunMethodWithContext(
|
||||
base::Bind(&CefCookieManagerImpl::SetSupportedSchemesWithContext, this,
|
||||
schemes, callback));
|
||||
return;
|
||||
}
|
||||
|
||||
DCHECK(cookie_monster_.get());
|
||||
if (!cookie_monster_.get())
|
||||
return;
|
||||
|
||||
supported_schemes_ = schemes;
|
||||
SetCookieMonsterSchemes(cookie_monster_.get(), supported_schemes_);
|
||||
|
||||
RunAsyncCompletionOnIOThread(callback);
|
||||
}
|
||||
|
||||
void CefCookieManagerImpl::VisitAllCookiesInternal(
|
||||
CefRefPtr<CefCookieVisitor> visitor,
|
||||
scoped_refptr<net::CookieMonster> cookie_monster) {
|
||||
|
Reference in New Issue
Block a user