summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2013-08-07 11:04:47 +0100
committerBen Murdoch <benm@google.com>2013-08-07 11:04:47 +0100
commit3240926e260ce088908e02ac07a6cf7b0c0cbf44 (patch)
tree5ff5fa16b2fb9278c6d731b3d19123731f3f8626 /net
parent3b21a50ee4fe6f71bb117cbee9998a4f465eea9d (diff)
downloadchromium_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.cc70
-rw-r--r--net/cookies/cookie_monster.h15
-rw-r--r--net/cookies/cookie_monster_unittest.cc72
-rw-r--r--net/dns/host_resolver_impl.cc4
-rw-r--r--net/tools/fetch/fetch_client.cc3
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(