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

Unified Diff: content/browser/devtools/protocol/network_handler.cc

Issue 2221093003: [Devtools] Backend support for setCookie (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: backend changes Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/devtools/protocol/network_handler.cc
diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc
index e41f27430ec0f90af4401c0ec96b2a562eea0b53..9ed9f88e1e5f599100cf4d78e2f47be54edecfff 100644
--- a/content/browser/devtools/protocol/network_handler.cc
+++ b/content/browser/devtools/protocol/network_handler.cc
@@ -32,6 +32,7 @@ namespace content {
namespace devtools {
namespace network {
+using Response = DevToolsProtocolClient::Response;
using CookieListCallback = net::CookieStore::GetCookieListCallback;
namespace {
@@ -126,6 +127,60 @@ void DeleteCookieOnUI(
callback));
}
+void CookieSetOnIO(const base::Closure& callback, bool success) {
dgozman 2016/08/09 01:07:25 Let's send an error over protocol if !success.
allada 2016/08/10 02:46:54 Done.
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ callback);
+}
+
+void SetCookieOnIO(
+ ResourceContext* resource_context,
+ net::URLRequestContextGetter* context_getter,
+ const GURL& url, const std::string& name, const std::string& value,
+ const std::string& domain, const std::string& path, bool secure,
+ bool httpOnly, net::CookieSameSite sameSite, base::Time expires,
+ const base::Closure& callback) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ net::URLRequestContext* request_context =
+ GetRequestContextOnIO(resource_context, context_getter, url);
+
+ bool are_experimental_cookie_features_enabled =
+ request_context->network_delegate()
+ ->AreExperimentalCookieFeaturesEnabled();
+
+ request_context->cookie_store()->SetCookieWithDetailsAsync(
+ url, name, value, domain, path,
+ base::Time(),
+ expires,
+ base::Time(),
+ secure,
+ httpOnly,
+ sameSite,
+ are_experimental_cookie_features_enabled,
+ net::COOKIE_PRIORITY_DEFAULT,
+ base::Bind(&CookieSetOnIO, callback));
+}
+
+void SetCookieOnUI(
+ ResourceContext* resource_context,
+ net::URLRequestContextGetter* context_getter,
+ const GURL& url, const std::string& name, const std::string& value,
+ const std::string& domain, const std::string& path, bool secure,
+ bool httpOnly, net::CookieSameSite sameSite, base::Time expires,
+ const base::Closure& callback) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&SetCookieOnIO,
+ base::Unretained(resource_context),
+ base::Unretained(context_getter),
+ url, name, value, domain, path, secure, httpOnly,
+ sameSite, expires, callback));
+}
+
class GetCookiesCommand {
public:
explicit GetCookiesCommand(
@@ -220,6 +275,7 @@ Response NetworkHandler::ClearBrowserCookies() {
Response NetworkHandler::GetCookies(DevToolsCommandId command_id) {
if (!host_)
return Response::InternalError("Could not connect to view");
+
new GetCookiesCommand(
host_,
base::Bind(&NetworkHandler::SendGetCookiesResponse,
@@ -228,6 +284,44 @@ Response NetworkHandler::GetCookies(DevToolsCommandId command_id) {
return Response::OK();
}
+Response NetworkHandler::SetCookie(DevToolsCommandId command_id,
+ const std::string& url, const std::string& name,
+ const std::string& value, const std::string* domain,
+ const std::string* path, bool* secure, bool* httpOnly,
+ const std::string* sameSite, double* expires) {
+ if (!host_)
+ return Response::InternalError("Could not connect to view");
+
+ net::CookieSameSite sameSiteEnum = net::CookieSameSite::DEFAULT_MODE;
+ if (sameSite && *sameSite == "lax")
dgozman 2016/08/09 01:07:24 There are generated constants for all enums in pro
allada 2016/08/10 02:46:54 Done.
+ sameSiteEnum = net::CookieSameSite::LAX_MODE;
+ else if (sameSite && *sameSite == "strict")
+ sameSiteEnum = net::CookieSameSite::STRICT_MODE;
+
+ base::Time expirationDate;
+ if (expires)
+ expirationDate = (*expires == 0)
+ ? base::Time::UnixEpoch()
+ : base::Time::FromDoubleT(*expires);
+
+ SetCookieOnUI(
+ host_->GetSiteInstance()->GetBrowserContext()->GetResourceContext(),
+ host_->GetProcess()->GetStoragePartition()->GetURLRequestContext(),
+ GURL(url), name, value,
+ domain ? *domain : std::string(), path ? *path : std::string(),
+ secure ? *secure : false, httpOnly ? *httpOnly : false,
+ sameSiteEnum, expirationDate,
+ base::Bind(&NetworkHandler::SendSetCookieResponse,
+ weak_factory_.GetWeakPtr(),
+ command_id));
+ return Response::OK();
+}
+
+void NetworkHandler::SendSetCookieResponse(DevToolsCommandId command_id) {
+ client_->SendSetCookieResponse(command_id,
+ SetCookieResponse::Create());
+}
+
void NetworkHandler::SendGetCookiesResponse(
DevToolsCommandId command_id,
const net::CookieList& cookie_list) {

Powered by Google App Engine
This is Rietveld 408576698