I am on CEF3 2623.1401 (to work with XP).
I create CefURLRequest on render process, after that, I want to set cookie at runtime. So I use SendProcessMessage to browser.
I handle the message in ClientHandler::OnProcessMessageReceived
- Code: Select all
// render process
void HappSyncHandler::SetCookies(const CefString& domain, const CefString& name, const CefString& value) {
CefRefPtr<CefProcessMessage> message = CefProcessMessage::Create(kSetCookies);
// arguments IPC
CefRefPtr<CefListValue> args = message->GetArgumentList();
args->SetString(0, domain);
args->SetString(1, name);
args->SetString(2, value);
browser_->SendProcessMessage(PID_BROWSER, message);
}
SetCookies("http://www.meituan.com", "test", "test.my.cookies");
// browser process
bool ClientHandler::OnProcessMessageReceived(
CefRefPtr<CefBrowser> browser,
CefProcessId source_process,
CefRefPtr<CefProcessMessage> message) {
CEF_REQUIRE_UI_THREAD();
...
if (message_name == kSetCookies) {
CefRefPtr<CefListValue> args = message->GetArgumentList();
const CefString& domain = args->GetString(0);
const CefString& name = args->GetString(1);
const CefString& value = args->GetString(2);
//CefRefPtr<CefCookieManager> manager =
// CefCookieManager::GetGlobalManager(NULL);
//CefCookie cookie;
//CefString(&cookie.name).FromString(name);
//CefString(&cookie.value).FromString(value);
//manager->SetCookie(domain, cookie, NULL);
CefPostTask(TID_IO, base::Bind(&ClientHandler::SetCookie, this, domain, name, value));
return true;
}
void ClientHandler::SetCookie(const CefString& domain, const CefString& name, const CefString& value) {
CefRefPtr<CefCookieManager> manager =
CefCookieManager::GetGlobalManager(NULL);
//manager->DeleteCookies(domain, name, NULL);
CefCookie cookie;
CefString(&cookie.name).FromString(name);
CefString(&cookie.domain).FromString(domain);
manager->SetCookie(domain, cookie, NULL); // return true
}
SetCookie returns true, but I find no 'test' cookie in request body with fiddler, what's the possible reason?