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

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

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « net/cert/nss_cert_database.cc ('k') | net/disk_cache/blockfile/backend_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 50
51 #include "base/basictypes.h" 51 #include "base/basictypes.h"
52 #include "base/bind.h" 52 #include "base/bind.h"
53 #include "base/callback.h" 53 #include "base/callback.h"
54 #include "base/logging.h" 54 #include "base/logging.h"
55 #include "base/memory/scoped_ptr.h" 55 #include "base/memory/scoped_ptr.h"
56 #include "base/memory/scoped_vector.h" 56 #include "base/memory/scoped_vector.h"
57 #include "base/message_loop/message_loop.h" 57 #include "base/message_loop/message_loop.h"
58 #include "base/message_loop/message_loop_proxy.h" 58 #include "base/message_loop/message_loop_proxy.h"
59 #include "base/metrics/histogram.h" 59 #include "base/metrics/histogram.h"
60 #include "base/profiler/scoped_tracker.h"
60 #include "base/strings/string_util.h" 61 #include "base/strings/string_util.h"
61 #include "base/strings/stringprintf.h" 62 #include "base/strings/stringprintf.h"
62 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 63 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
63 #include "net/cookies/canonical_cookie.h" 64 #include "net/cookies/canonical_cookie.h"
64 #include "net/cookies/cookie_util.h" 65 #include "net/cookies/cookie_util.h"
65 #include "net/cookies/parsed_cookie.h" 66 #include "net/cookies/parsed_cookie.h"
66 67
67 using base::Time; 68 using base::Time;
68 using base::TimeDelta; 69 using base::TimeDelta;
69 using base::TimeTicks; 70 using base::TimeTicks;
(...skipping 1366 matching lines...) Expand 10 before | Expand all | Expand 10 after
1436 1437
1437 void CookieMonster::InitStore() { 1438 void CookieMonster::InitStore() {
1438 DCHECK(store_.get()) << "Store must exist to initialize"; 1439 DCHECK(store_.get()) << "Store must exist to initialize";
1439 1440
1440 // We bind in the current time so that we can report the wall-clock time for 1441 // We bind in the current time so that we can report the wall-clock time for
1441 // loading cookies. 1442 // loading cookies.
1442 store_->Load(base::Bind(&CookieMonster::OnLoaded, this, TimeTicks::Now())); 1443 store_->Load(base::Bind(&CookieMonster::OnLoaded, this, TimeTicks::Now()));
1443 } 1444 }
1444 1445
1445 void CookieMonster::ReportLoaded() { 1446 void CookieMonster::ReportLoaded() {
1447 // TODO(pkasting): Remove ScopedTracker below once crbug.com/457528 is fixed.
1448 tracked_objects::ScopedTracker tracking_profile(
1449 FROM_HERE_WITH_EXPLICIT_FUNCTION("457528 CookieMonster::ReportLoaded"));
1446 if (delegate_.get()) 1450 if (delegate_.get())
1447 delegate_->OnLoaded(); 1451 delegate_->OnLoaded();
1448 } 1452 }
1449 1453
1450 void CookieMonster::OnLoaded(TimeTicks beginning_time, 1454 void CookieMonster::OnLoaded(TimeTicks beginning_time,
1451 const std::vector<CanonicalCookie*>& cookies) { 1455 const std::vector<CanonicalCookie*>& cookies) {
1452 StoreLoadedCookies(cookies); 1456 StoreLoadedCookies(cookies);
1453 histogram_time_blocked_on_load_->AddTime(TimeTicks::Now() - beginning_time); 1457 histogram_time_blocked_on_load_->AddTime(TimeTicks::Now() - beginning_time);
1454 1458
1455 // Invoke the task queue of cookie request. 1459 // Invoke the task queue of cookie request.
1456 InvokeQueue(); 1460 InvokeQueue();
1457 1461
1458 ReportLoaded(); 1462 ReportLoaded();
1459 } 1463 }
1460 1464
1461 void CookieMonster::OnKeyLoaded(const std::string& key, 1465 void CookieMonster::OnKeyLoaded(const std::string& key,
1462 const std::vector<CanonicalCookie*>& cookies) { 1466 const std::vector<CanonicalCookie*>& cookies) {
1463 // This function does its own separate locking. 1467 // This function does its own separate locking.
1464 StoreLoadedCookies(cookies); 1468 StoreLoadedCookies(cookies);
1465 1469
1466 std::deque<scoped_refptr<CookieMonsterTask> > tasks_pending_for_key; 1470 std::deque<scoped_refptr<CookieMonsterTask> > tasks_pending_for_key;
1467 1471
1468 // We need to do this repeatedly until no more tasks were added to the queue 1472 // We need to do this repeatedly until no more tasks were added to the queue
1469 // during the period where we release the lock. 1473 // during the period where we release the lock.
1470 while (true) { 1474 while (true) {
1475 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is
1476 // fixed.
1477 tracked_objects::ScopedTracker tracking_profile1(
1478 FROM_HERE_WITH_EXPLICIT_FUNCTION("456373 CookieMonster::OnKeyLoaded1"));
1471 { 1479 {
1472 base::AutoLock autolock(lock_); 1480 base::AutoLock autolock(lock_);
1473 std::map<std::string, std::deque<scoped_refptr<CookieMonsterTask> > > 1481 std::map<std::string, std::deque<scoped_refptr<CookieMonsterTask> > >
1474 ::iterator it = tasks_pending_for_key_.find(key); 1482 ::iterator it = tasks_pending_for_key_.find(key);
1475 if (it == tasks_pending_for_key_.end()) { 1483 if (it == tasks_pending_for_key_.end()) {
1476 keys_loaded_.insert(key); 1484 keys_loaded_.insert(key);
1477 return; 1485 return;
1478 } 1486 }
1479 if (it->second.empty()) { 1487 if (it->second.empty()) {
1480 keys_loaded_.insert(key); 1488 keys_loaded_.insert(key);
1481 tasks_pending_for_key_.erase(it); 1489 tasks_pending_for_key_.erase(it);
1482 return; 1490 return;
1483 } 1491 }
1484 it->second.swap(tasks_pending_for_key); 1492 it->second.swap(tasks_pending_for_key);
1485 } 1493 }
1486 1494
1495 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is
1496 // fixed.
1497 tracked_objects::ScopedTracker tracking_profile2(
1498 FROM_HERE_WITH_EXPLICIT_FUNCTION("456373 CookieMonster::OnKeyLoaded2"));
1487 while (!tasks_pending_for_key.empty()) { 1499 while (!tasks_pending_for_key.empty()) {
1488 scoped_refptr<CookieMonsterTask> task = tasks_pending_for_key.front(); 1500 scoped_refptr<CookieMonsterTask> task = tasks_pending_for_key.front();
1489 task->Run(); 1501 task->Run();
1490 tasks_pending_for_key.pop_front(); 1502 tasks_pending_for_key.pop_front();
1491 } 1503 }
1492 } 1504 }
1493 } 1505 }
1494 1506
1495 void CookieMonster::StoreLoadedCookies( 1507 void CookieMonster::StoreLoadedCookies(
1496 const std::vector<CanonicalCookie*>& cookies) { 1508 const std::vector<CanonicalCookie*>& cookies) {
1509 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is fixed.
1510 tracked_objects::ScopedTracker tracking_profile(
1511 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1512 "456373 CookieMonster::StoreLoadedCookies"));
1497 // Initialize the store and sync in any saved persistent cookies. We don't 1513 // Initialize the store and sync in any saved persistent cookies. We don't
1498 // care if it's expired, insert it so it can be garbage collected, removed, 1514 // care if it's expired, insert it so it can be garbage collected, removed,
1499 // and sync'd. 1515 // and sync'd.
1500 base::AutoLock autolock(lock_); 1516 base::AutoLock autolock(lock_);
1501 1517
1502 CookieItVector cookies_with_control_chars; 1518 CookieItVector cookies_with_control_chars;
1503 1519
1504 for (std::vector<CanonicalCookie*>::const_iterator it = cookies.begin(); 1520 for (std::vector<CanonicalCookie*>::const_iterator it = cookies.begin();
1505 it != cookies.end(); ++it) { 1521 it != cookies.end(); ++it) {
1506 int64 cookie_creation_time = (*it)->CreationDate().ToInternalValue(); 1522 int64 cookie_creation_time = (*it)->CreationDate().ToInternalValue();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1544 // none of our other constraints are violated. 1560 // none of our other constraints are violated.
1545 // In particular, the backing store might have given us duplicate cookies. 1561 // In particular, the backing store might have given us duplicate cookies.
1546 1562
1547 // This method could be called multiple times due to priority loading, thus 1563 // This method could be called multiple times due to priority loading, thus
1548 // cookies loaded in previous runs will be validated again, but this is OK 1564 // cookies loaded in previous runs will be validated again, but this is OK
1549 // since they are expected to be much fewer than total DB. 1565 // since they are expected to be much fewer than total DB.
1550 EnsureCookiesMapIsValid(); 1566 EnsureCookiesMapIsValid();
1551 } 1567 }
1552 1568
1553 void CookieMonster::InvokeQueue() { 1569 void CookieMonster::InvokeQueue() {
1570 // TODO(pkasting): Remove ScopedTracker below once crbug.com/457528 is fixed.
1571 tracked_objects::ScopedTracker tracking_profile(
1572 FROM_HERE_WITH_EXPLICIT_FUNCTION("457528 CookieMonster::InvokeQueue"));
1554 while (true) { 1573 while (true) {
1555 scoped_refptr<CookieMonsterTask> request_task; 1574 scoped_refptr<CookieMonsterTask> request_task;
1556 { 1575 {
1557 base::AutoLock autolock(lock_); 1576 base::AutoLock autolock(lock_);
1558 if (tasks_pending_.empty()) { 1577 if (tasks_pending_.empty()) {
1559 loaded_ = true; 1578 loaded_ = true;
1560 creation_times_.clear(); 1579 creation_times_.clear();
1561 keys_loaded_.clear(); 1580 keys_loaded_.clear();
1562 break; 1581 break;
1563 } 1582 }
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after
2341 it != hook_map_.end(); ++it) { 2360 it != hook_map_.end(); ++it) {
2342 std::pair<GURL, std::string> key = it->first; 2361 std::pair<GURL, std::string> key = it->first;
2343 if (cookie.IncludeForRequestURL(key.first, opts) && 2362 if (cookie.IncludeForRequestURL(key.first, opts) &&
2344 cookie.Name() == key.second) { 2363 cookie.Name() == key.second) {
2345 it->second->Notify(cookie, removed); 2364 it->second->Notify(cookie, removed);
2346 } 2365 }
2347 } 2366 }
2348 } 2367 }
2349 2368
2350 } // namespace net 2369 } // namespace net
OLDNEW
« no previous file with comments | « net/cert/nss_cert_database.cc ('k') | net/disk_cache/blockfile/backend_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698