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

Side by Side Diff: net/cookies/cookie_monster.cc

Issue 1411813003: Teach URLRequest about initiator checks for First-Party-Only cookies. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Feedback. Created 4 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Portions of this code based on Mozilla: 5 // Portions of this code based on Mozilla:
6 // (netwerk/cookie/src/nsCookieService.cpp) 6 // (netwerk/cookie/src/nsCookieService.cpp)
7 /* ***** BEGIN LICENSE BLOCK ***** 7 /* ***** BEGIN LICENSE BLOCK *****
8 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 8 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
9 * 9 *
10 * The contents of this file are subject to the Mozilla Public License Version 10 * The contents of this file are subject to the Mozilla Public License Version
(...skipping 969 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 new GetAllCookiesForURLWithOptionsTask(this, url, options, callback); 980 new GetAllCookiesForURLWithOptionsTask(this, url, options, callback);
981 981
982 DoCookieTaskForURL(task, url); 982 DoCookieTaskForURL(task, url);
983 } 983 }
984 984
985 void CookieMonster::GetAllCookiesForURLAsync( 985 void CookieMonster::GetAllCookiesForURLAsync(
986 const GURL& url, 986 const GURL& url,
987 const GetCookieListCallback& callback) { 987 const GetCookieListCallback& callback) {
988 CookieOptions options; 988 CookieOptions options;
989 options.set_include_httponly(); 989 options.set_include_httponly();
990 options.set_include_first_party_only(); 990 options.set_include_first_party_only_cookies();
991 scoped_refptr<GetAllCookiesForURLWithOptionsTask> task = 991 scoped_refptr<GetAllCookiesForURLWithOptionsTask> task =
992 new GetAllCookiesForURLWithOptionsTask(this, url, options, callback); 992 new GetAllCookiesForURLWithOptionsTask(this, url, options, callback);
993 993
994 DoCookieTaskForURL(task, url); 994 DoCookieTaskForURL(task, url);
995 } 995 }
996 996
997 void CookieMonster::DeleteAllAsync(const DeleteCallback& callback) { 997 void CookieMonster::DeleteAllAsync(const DeleteCallback& callback) {
998 scoped_refptr<DeleteAllTask> task = new DeleteAllTask(this, callback); 998 scoped_refptr<DeleteAllTask> task = new DeleteAllTask(this, callback);
999 999
1000 DoCookieTask(task); 1000 DoCookieTask(task);
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1156 scoped_ptr<CanonicalCookie> cc; 1156 scoped_ptr<CanonicalCookie> cc;
1157 cc.reset(CanonicalCookie::Create( 1157 cc.reset(CanonicalCookie::Create(
1158 url, name, value, domain, path, creation_time, expiration_time, secure, 1158 url, name, value, domain, path, creation_time, expiration_time, secure,
1159 http_only, first_party_only, enforce_strict_secure, priority)); 1159 http_only, first_party_only, enforce_strict_secure, priority));
1160 1160
1161 if (!cc.get()) 1161 if (!cc.get())
1162 return false; 1162 return false;
1163 1163
1164 CookieOptions options; 1164 CookieOptions options;
1165 options.set_include_httponly(); 1165 options.set_include_httponly();
1166 options.set_include_first_party_only(); 1166 options.set_include_first_party_only_cookies();
1167 if (enforce_strict_secure) 1167 if (enforce_strict_secure)
1168 options.set_enforce_strict_secure(); 1168 options.set_enforce_strict_secure();
1169 return SetCanonicalCookie(&cc, creation_time, options); 1169 return SetCanonicalCookie(&cc, creation_time, options);
1170 } 1170 }
1171 1171
1172 bool CookieMonster::ImportCookies(const CookieList& list) { 1172 bool CookieMonster::ImportCookies(const CookieList& list) {
1173 base::AutoLock autolock(lock_); 1173 base::AutoLock autolock(lock_);
1174 MarkCookieStoreAsInitialized(); 1174 MarkCookieStoreAsInitialized();
1175 if (ShouldFetchAllCookiesWhenFetchingAnyCookie()) 1175 if (ShouldFetchAllCookiesWhenFetchingAnyCookie())
1176 FetchAllCookiesIfNecessary(); 1176 FetchAllCookiesIfNecessary();
1177 for (CookieList::const_iterator iter = list.begin(); iter != list.end(); 1177 for (CookieList::const_iterator iter = list.begin(); iter != list.end();
1178 ++iter) { 1178 ++iter) {
1179 scoped_ptr<CanonicalCookie> cookie(new CanonicalCookie(*iter)); 1179 scoped_ptr<CanonicalCookie> cookie(new CanonicalCookie(*iter));
1180 CookieOptions options; 1180 CookieOptions options;
1181 options.set_include_httponly(); 1181 options.set_include_httponly();
1182 options.set_include_first_party_only(); 1182 options.set_include_first_party_only_cookies();
1183 if (!SetCanonicalCookie(&cookie, cookie->CreationDate(), options)) 1183 if (!SetCanonicalCookie(&cookie, cookie->CreationDate(), options))
1184 return false; 1184 return false;
1185 } 1185 }
1186 return true; 1186 return true;
1187 } 1187 }
1188 1188
1189 CookieList CookieMonster::GetAllCookies() { 1189 CookieList CookieMonster::GetAllCookies() {
1190 base::AutoLock autolock(lock_); 1190 base::AutoLock autolock(lock_);
1191 1191
1192 // This function is being called to scrape the cookie list for management UI 1192 // This function is being called to scrape the cookie list for management UI
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
1385 1385
1386 void CookieMonster::DeleteCookie(const GURL& url, 1386 void CookieMonster::DeleteCookie(const GURL& url,
1387 const std::string& cookie_name) { 1387 const std::string& cookie_name) {
1388 base::AutoLock autolock(lock_); 1388 base::AutoLock autolock(lock_);
1389 1389
1390 if (!HasCookieableScheme(url)) 1390 if (!HasCookieableScheme(url))
1391 return; 1391 return;
1392 1392
1393 CookieOptions options; 1393 CookieOptions options;
1394 options.set_include_httponly(); 1394 options.set_include_httponly();
1395 options.set_include_first_party_only(); 1395 options.set_include_first_party_only_cookies();
1396 // Get the cookies for this host and its domain(s). 1396 // Get the cookies for this host and its domain(s).
1397 std::vector<CanonicalCookie*> cookies; 1397 std::vector<CanonicalCookie*> cookies;
1398 FindCookiesForHostAndDomain(url, options, true, &cookies); 1398 FindCookiesForHostAndDomain(url, options, true, &cookies);
1399 std::set<CanonicalCookie*> matching_cookies; 1399 std::set<CanonicalCookie*> matching_cookies;
1400 1400
1401 for (std::vector<CanonicalCookie*>::const_iterator it = cookies.begin(); 1401 for (std::vector<CanonicalCookie*>::const_iterator it = cookies.begin();
1402 it != cookies.end(); ++it) { 1402 it != cookies.end(); ++it) {
1403 if ((*it)->Name() != cookie_name) 1403 if ((*it)->Name() != cookie_name)
1404 continue; 1404 continue;
1405 if (url.path().find((*it)->Path())) 1405 if (url.path().find((*it)->Path()))
(...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after
2477 : kDefaultCookieableSchemesCount - 1; 2477 : kDefaultCookieableSchemesCount - 1;
2478 2478
2479 SetCookieableSchemes(kDefaultCookieableSchemes, num_schemes); 2479 SetCookieableSchemes(kDefaultCookieableSchemes, num_schemes);
2480 } 2480 }
2481 #endif 2481 #endif
2482 2482
2483 void CookieMonster::RunCallbacks(const CanonicalCookie& cookie, bool removed) { 2483 void CookieMonster::RunCallbacks(const CanonicalCookie& cookie, bool removed) {
2484 lock_.AssertAcquired(); 2484 lock_.AssertAcquired();
2485 CookieOptions opts; 2485 CookieOptions opts;
2486 opts.set_include_httponly(); 2486 opts.set_include_httponly();
2487 opts.set_include_first_party_only(); 2487 opts.set_include_first_party_only_cookies();
2488 // Note that the callbacks in hook_map_ are wrapped with MakeAsync(), so they 2488 // Note that the callbacks in hook_map_ are wrapped with MakeAsync(), so they
2489 // are guaranteed to not take long - they just post a RunAsync task back to 2489 // are guaranteed to not take long - they just post a RunAsync task back to
2490 // the appropriate thread's message loop and return. It is important that this 2490 // the appropriate thread's message loop and return. It is important that this
2491 // method not run user-supplied callbacks directly, since the CookieMonster 2491 // method not run user-supplied callbacks directly, since the CookieMonster
2492 // lock is held and it is easy to accidentally introduce deadlocks. 2492 // lock is held and it is easy to accidentally introduce deadlocks.
2493 for (CookieChangedHookMap::iterator it = hook_map_.begin(); 2493 for (CookieChangedHookMap::iterator it = hook_map_.begin();
2494 it != hook_map_.end(); ++it) { 2494 it != hook_map_.end(); ++it) {
2495 std::pair<GURL, std::string> key = it->first; 2495 std::pair<GURL, std::string> key = it->first;
2496 if (cookie.IncludeForRequestURL(key.first, opts) && 2496 if (cookie.IncludeForRequestURL(key.first, opts) &&
2497 cookie.Name() == key.second) { 2497 cookie.Name() == key.second) {
2498 it->second->Notify(cookie, removed); 2498 it->second->Notify(cookie, removed);
2499 } 2499 }
2500 } 2500 }
2501 } 2501 }
2502 2502
2503 } // namespace net 2503 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698