diff options
author | Ben Murdoch <benm@google.com> | 2013-08-07 11:04:47 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2013-08-07 11:04:47 +0100 |
commit | 3240926e260ce088908e02ac07a6cf7b0c0cbf44 (patch) | |
tree | 5ff5fa16b2fb9278c6d731b3d19123731f3f8626 /net | |
parent | 3b21a50ee4fe6f71bb117cbee9998a4f465eea9d (diff) | |
download | chromium_org-3240926e260ce088908e02ac07a6cf7b0c0cbf44.tar.gz |
Merge from Chromium at DEPS revision r216133
This commit was generated by merge_to_master.py.
Change-Id: I541d5d1d8520b6b3829fbc1fa18552bf9ad4a5c7
Diffstat (limited to 'net')
-rw-r--r-- | net/cookies/cookie_monster.cc | 70 | ||||
-rw-r--r-- | net/cookies/cookie_monster.h | 15 | ||||
-rw-r--r-- | net/cookies/cookie_monster_unittest.cc | 72 | ||||
-rw-r--r-- | net/dns/host_resolver_impl.cc | 4 | ||||
-rw-r--r-- | net/tools/fetch/fetch_client.cc | 3 |
5 files changed, 158 insertions, 6 deletions
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc index e090095c97..f24637735f 100644 --- a/net/cookies/cookie_monster.cc +++ b/net/cookies/cookie_monster.cc @@ -629,6 +629,47 @@ void CookieMonster::DeleteAllForHostTask::Run() { } } +// Task class for DeleteAllCreatedBetweenForHost call. +class CookieMonster::DeleteAllCreatedBetweenForHostTask + : public CookieMonster::CookieMonsterTask { + public: + DeleteAllCreatedBetweenForHostTask( + CookieMonster* cookie_monster, + Time delete_begin, + Time delete_end, + const GURL& url, + const CookieMonster::DeleteCallback& callback) + : CookieMonsterTask(cookie_monster), + delete_begin_(delete_begin), + delete_end_(delete_end), + url_(url), + callback_(callback) { + } + + // CookieMonster::CookieMonsterTask: + virtual void Run() OVERRIDE; + + protected: + virtual ~DeleteAllCreatedBetweenForHostTask() {} + + private: + Time delete_begin_; + Time delete_end_; + GURL url_; + CookieMonster::DeleteCallback callback_; + + DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenForHostTask); +}; + +void CookieMonster::DeleteAllCreatedBetweenForHostTask::Run() { + int num_deleted = this->cookie_monster()->DeleteAllCreatedBetweenForHost( + delete_begin_, delete_end_, url_); + if (!callback_.is_null()) { + this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run, + base::Unretained(&callback_), num_deleted)); + } +} + // Task class for DeleteCanonicalCookie call. class CookieMonster::DeleteCanonicalCookieTask : public CookieMonster::CookieMonsterTask { @@ -845,7 +886,7 @@ void CookieMonster::SetCookieWithDetailsAsync( const std::string& value, const std::string& domain, const std::string& path, - const base::Time& expiration_time, + const Time& expiration_time, bool secure, bool http_only, CookiePriority priority, @@ -912,6 +953,18 @@ void CookieMonster::DeleteAllCreatedBetweenAsync( DoCookieTask(task); } +void CookieMonster::DeleteAllCreatedBetweenForHostAsync( + const Time delete_begin, + const Time delete_end, + const GURL& url, + const DeleteCallback& callback) { + scoped_refptr<DeleteAllCreatedBetweenForHostTask> task = + new DeleteAllCreatedBetweenForHostTask( + this, delete_begin, delete_end, url, callback); + + DoCookieTaskForURL(task, url); +} + void CookieMonster::DeleteAllForHostAsync( const GURL& url, const DeleteCallback& callback) { scoped_refptr<DeleteAllForHostTask> task = @@ -1148,7 +1201,9 @@ int CookieMonster::DeleteAllCreatedBetween(const Time& delete_begin, return num_deleted; } -int CookieMonster::DeleteAllForHost(const GURL& url) { +int CookieMonster::DeleteAllCreatedBetweenForHost(const Time delete_begin, + const Time delete_end, + const GURL& url) { base::AutoLock autolock(lock_); if (!HasCookieableScheme(url)) @@ -1168,7 +1223,11 @@ int CookieMonster::DeleteAllForHost(const GURL& url) { const CanonicalCookie* const cc = curit->second; // Delete only on a match as a host cookie. - if (cc->IsHostCookie() && cc->IsDomainMatch(host)) { + if (cc->IsHostCookie() && cc->IsDomainMatch(host) && + cc->CreationDate() >= delete_begin && + // The assumption that null |delete_end| is equivalent to + // Time::Max() is confusing. + (delete_end.is_null() || cc->CreationDate() < delete_end)) { num_deleted++; InternalDeleteCookie(curit, true, DELETE_COOKIE_EXPLICIT); @@ -1177,6 +1236,11 @@ int CookieMonster::DeleteAllForHost(const GURL& url) { return num_deleted; } +int CookieMonster::DeleteAllForHost(const GURL& url) { + return DeleteAllCreatedBetweenForHost(Time(), Time::Max(), url); +} + + bool CookieMonster::DeleteCanonicalCookie(const CanonicalCookie& cookie) { base::AutoLock autolock(lock_); diff --git a/net/cookies/cookie_monster.h b/net/cookies/cookie_monster.h index d248f1007e..eaf89d3381 100644 --- a/net/cookies/cookie_monster.h +++ b/net/cookies/cookie_monster.h @@ -201,6 +201,14 @@ class NET_EXPORT CookieMonster : public CookieStore { void DeleteAllForHostAsync(const GURL& url, const DeleteCallback& callback); + // Same as DeleteAllForHostAsync, except it deletes cookies between + // [|delete_begin|, |delete_end|). + // Returns the number of cookies deleted. + void DeleteAllCreatedBetweenForHostAsync(const base::Time delete_begin, + const base::Time delete_end, + const GURL& url, + const DeleteCallback& callback); + // Deletes one specific cookie. void DeleteCanonicalCookieAsync(const CanonicalCookie& cookie, const DeleteCookieCallback& callback); @@ -304,6 +312,7 @@ class NET_EXPORT CookieMonster : public CookieStore { // For queueing the cookie monster calls. class CookieMonsterTask; class DeleteAllCreatedBetweenTask; + class DeleteAllCreatedBetweenForHostTask; class DeleteAllForHostTask; class DeleteAllTask; class DeleteCookieTask; @@ -320,6 +329,9 @@ class NET_EXPORT CookieMonster : public CookieStore { // For SetCookieWithCreationTime. FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, TestCookieDeleteAllCreatedBetweenTimestamps); + // For SetCookieWithCreationTime. + FRIEND_TEST_ALL_PREFIXES(MultiThreadedCookieMonsterTest, + ThreadCheckDeleteAllCreatedBetweenForHost); // For gargage collection constants. FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, TestHostGarbageCollection); @@ -405,6 +417,9 @@ class NET_EXPORT CookieMonster : public CookieStore { const base::Time& delete_end); int DeleteAllForHost(const GURL& url); + int DeleteAllCreatedBetweenForHost(const base::Time delete_begin, + const base::Time delete_end, + const GURL& url); bool DeleteCanonicalCookie(const CanonicalCookie& cookie); diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc index d6fce6c336..d1ce04f388 100644 --- a/net/cookies/cookie_monster_unittest.cc +++ b/net/cookies/cookie_monster_unittest.cc @@ -189,7 +189,21 @@ class CookieMonsterTest : public CookieStoreTest<CookieMonsterTestTraits> { return callback.result(); } - int DeleteAllForHost(CookieMonster*cm, + int DeleteAllCreatedBetweenForHost(CookieMonster* cm, + const base::Time delete_begin, + const base::Time delete_end, + const GURL& url) { + DCHECK(cm); + IntResultCookieCallback callback; + cm->DeleteAllCreatedBetweenForHostAsync( + delete_begin, delete_end, url, + base::Bind(&IntResultCookieCallback::Run, base::Unretained(&callback))); + RunFor(kTimeout); + EXPECT_TRUE(callback.did_run()); + return callback.result(); + } + + int DeleteAllForHost(CookieMonster* cm, const GURL& url) { DCHECK(cm); IntResultCookieCallback callback; @@ -201,7 +215,7 @@ class CookieMonsterTest : public CookieStoreTest<CookieMonsterTestTraits> { return callback.result(); } - bool DeleteCanonicalCookie(CookieMonster*cm, const CanonicalCookie& cookie) { + bool DeleteCanonicalCookie(CookieMonster* cm, const CanonicalCookie& cookie) { DCHECK(cm); BoolResultCookieCallback callback; cm->DeleteCanonicalCookieAsync( @@ -2360,6 +2374,16 @@ class MultiThreadedCookieMonsterTest : public CookieMonsterTest { base::Bind(&IntResultCookieCallback::Run, base::Unretained(callback))); } + void DeleteAllCreatedBetweenForHostTask(CookieMonster* cm, + const base::Time delete_begin, + const base::Time delete_end, + const GURL& url, + IntResultCookieCallback* callback) { + cm->DeleteAllCreatedBetweenForHostAsync( + delete_begin, delete_end, url, + base::Bind(&IntResultCookieCallback::Run, base::Unretained(callback))); + } + void DeleteCanonicalCookieTask(CookieMonster* cm, const CanonicalCookie& cookie, BoolResultCookieCallback* callback) { @@ -2510,6 +2534,50 @@ TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteAllForHost) { EXPECT_EQ(1, callback.result()); } +TEST_F(MultiThreadedCookieMonsterTest, + ThreadCheckDeleteAllCreatedBetweenForHost) { + scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); + GURL url_not_google("http://www.notgoogle.com"); + + CookieOptions options; + Time now = Time::Now(); + // ago1 < ago2 < ago3 < now. + Time ago1 = now - TimeDelta::FromDays(101); + Time ago2 = now - TimeDelta::FromDays(100); + Time ago3 = now - TimeDelta::FromDays(99); + + // These 3 cookies match the first deletion. + EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); + EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "C=D", options)); + EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "Y=Z", options)); + + // This cookie does not match host. + EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_not_google, "E=F", options)); + + // This cookie does not match time range: [ago3, inf], for first deletion, but + // matches for the second deletion. + EXPECT_TRUE(cm->SetCookieWithCreationTime(url_google_, "G=H", ago2)); + + // 1. First set of deletions. + EXPECT_EQ( + 3, // Deletes A=B, C=D, Y=Z + DeleteAllCreatedBetweenForHost( + cm.get(), ago3, Time::Max(), url_google_)); + + EXPECT_TRUE(SetCookieWithOptions(cm.get(), url_google_, "A=B", options)); + IntResultCookieCallback callback(&other_thread_); + + // 2. Second set of deletions. + base::Closure task = base::Bind( + &net::MultiThreadedCookieMonsterTest::DeleteAllCreatedBetweenForHostTask, + base::Unretained(this), + cm, ago1, Time(), url_google_, + &callback); + RunOnOtherThread(task); + EXPECT_TRUE(callback.did_run()); + EXPECT_EQ(2, callback.result()); // Deletes A=B, G=H. +} + TEST_F(MultiThreadedCookieMonsterTest, ThreadCheckDeleteCanonicalCookie) { scoped_refptr<CookieMonster> cm(new CookieMonster(NULL, NULL)); CookieOptions options; diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc index 607386b0ec..1063177329 100644 --- a/net/dns/host_resolver_impl.cc +++ b/net/dns/host_resolver_impl.cc @@ -1400,8 +1400,10 @@ class HostResolverImpl::Job : public PrioritizedDispatcher::Job { resolver_->resolved_known_ipv6_hostname_ = true; bool got_ipv6_address = false; for (size_t i = 0; i < addr_list.size(); ++i) { - if (addr_list[i].GetFamily() == ADDRESS_FAMILY_IPV6) + if (addr_list[i].GetFamily() == ADDRESS_FAMILY_IPV6) { got_ipv6_address = true; + break; + } } UMA_HISTOGRAM_BOOLEAN("Net.UnspecResolvedIPv6", got_ipv6_address); } diff --git a/net/tools/fetch/fetch_client.cc b/net/tools/fetch/fetch_client.cc index f0bec35ff7..12fae24399 100644 --- a/net/tools/fetch/fetch_client.cc +++ b/net/tools/fetch/fetch_client.cc @@ -25,6 +25,7 @@ #include "net/http/http_network_session.h" #include "net/http/http_request_info.h" #include "net/http/http_server_properties_impl.h" +#include "net/http/http_stream_factory.h" #include "net/http/http_transaction.h" #include "net/http/transport_security_state.h" #include "net/proxy/proxy_service.h" @@ -143,6 +144,8 @@ int main(int argc, char** argv) { // Do work here. base::MessageLoop loop(base::MessageLoop::TYPE_IO); + net::HttpStreamFactory::EnableNpnHttp2Draft04(); + scoped_ptr<net::HostResolver> host_resolver( net::HostResolver::CreateDefaultResolver(NULL)); scoped_ptr<net::CertVerifier> cert_verifier( |