15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_cookie_helper.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/run_loop.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/test/test_browser_thread_bundle.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/parsed_cookie.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Test expectations for a given cookie.
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class CookieExpectation {
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public:
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  CookieExpectation() : matched_(false) {}
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool MatchesCookie(const net::CanonicalCookie& cookie) const {
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (!source_.empty() && source_ != cookie.Source())
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      return false;
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (!domain_.empty() && domain_ != cookie.Domain())
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      return false;
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (!path_.empty() && path_ != cookie.Path())
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      return false;
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (!name_.empty() && name_ != cookie.Name())
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      return false;
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (!value_.empty() && value_ != cookie.Value())
3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      return false;
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return true;
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  std::string source_;
3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  std::string domain_;
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  std::string path_;
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  std::string name_;
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  std::string value_;
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool matched_;
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)};
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Matches a CookieExpectation against a Cookie.
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class CookieMatcher {
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public:
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  explicit CookieMatcher(const net::CanonicalCookie& cookie)
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      : cookie_(cookie) {}
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool operator()(const CookieExpectation& expectation) {
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return expectation.MatchesCookie(cookie_);
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  net::CanonicalCookie cookie_;
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)};
5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Unary predicate to determine whether an expectation has been matched.
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)bool ExpectationIsMatched(const CookieExpectation& expectation) {
5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return expectation.matched_;
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowsingDataCookieHelperTest : public testing::Test {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
63a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  BrowsingDataCookieHelperTest()
64a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch      : testing_profile_(new TestingProfile()) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void SetUp() OVERRIDE { cookie_expectations_.clear(); }
6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Adds an expectation for a cookie that satisfies the given parameters.
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void AddCookieExpectation(const char* source,
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                            const char* domain,
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                            const char* path,
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                            const char* name,
7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                            const char* value) {
7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    CookieExpectation matcher;
7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (source)
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      matcher.source_ = source;
7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (domain)
7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      matcher.domain_ = domain;
8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (path)
8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      matcher.path_ = path;
8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (name)
8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      matcher.name_ = name;
8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (value)
8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      matcher.value_ = value;
8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    cookie_expectations_.push_back(matcher);
8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Checks the existing expectations, and then clears all existing
9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // expectations.
9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void CheckCookieExpectations() {
9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    ASSERT_EQ(cookie_expectations_.size(), cookie_list_.size());
9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    // For each cookie, look for a matching expectation.
9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    for (net::CookieList::iterator it = cookie_list_.begin();
9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)         it != cookie_list_.end();
9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)         ++it) {
9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      CookieMatcher matcher(*it);
9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      std::vector<CookieExpectation>::iterator match = std::find_if(
10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)          cookie_expectations_.begin(), cookie_expectations_.end(), matcher);
10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      if (match != cookie_expectations_.end())
10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        match->matched_ = true;
10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    }
10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    // Check that each expectation has been matched.
10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    unsigned long match_count = std::count_if(cookie_expectations_.begin(),
10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                              cookie_expectations_.end(),
10803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                              ExpectationIsMatched);
10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    EXPECT_EQ(cookie_expectations_.size(), match_count);
11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    cookie_expectations_.clear();
11203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateCookiesForTest() {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<net::CookieMonster> cookie_monster =
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        testing_profile_->GetCookieMonster();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_monster->SetCookieWithOptionsAsync(
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GURL("http://www.google.com"), "A=1", net::CookieOptions(),
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        net::CookieMonster::SetCookiesCallback());
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_monster->SetCookieWithOptionsAsync(
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GURL("http://www.gmail.google.com"), "B=1", net::CookieOptions(),
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        net::CookieMonster::SetCookiesCallback());
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateCookiesForDomainCookieTest() {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<net::CookieMonster> cookie_monster =
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        testing_profile_->GetCookieMonster();
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_monster->SetCookieWithOptionsAsync(
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GURL("http://www.google.com"), "A=1", net::CookieOptions(),
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        net::CookieMonster::SetCookiesCallback());
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_monster->SetCookieWithOptionsAsync(
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GURL("http://www.google.com"), "A=2; Domain=.www.google.com ",
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        net::CookieOptions(), net::CookieMonster::SetCookiesCallback());
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void FetchCallback(const net::CookieList& cookies) {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_list_ = cookies;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(NULL, "www.google.com", NULL, "A", NULL);
14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(NULL, "www.gmail.google.com", NULL, "B", NULL);
14103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    CheckCookieExpectations();
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DomainCookieCallback(const net::CookieList& cookies) {
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_list_ = cookies;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(NULL, "www.google.com", NULL, "A", "1");
14803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(NULL, ".www.google.com", NULL, "A", "2");
14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    CheckCookieExpectations();
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DeleteCallback(const net::CookieList& cookies) {
15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    cookie_list_ = cookies;
15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(NULL, "www.gmail.google.com", NULL, "B", NULL);
15503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    CheckCookieExpectations();
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CannedUniqueCallback(const net::CookieList& cookies) {
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_list_ = cookies;
16003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(
16103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        "http://www.google.com/", "www.google.com", "/", "A", NULL);
16203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    CheckCookieExpectations();
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CannedReplaceCookieCallback(const net::CookieList& cookies) {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_list_ = cookies;
16703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(
16803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        "http://www.google.com/", "www.google.com", "/", "A", "2");
16903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(
17003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        "http://www.google.com/", "www.google.com", "/example/0", "A", "4");
17103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(
17203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        "http://www.google.com/", ".google.com", "/", "A", "6");
17303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(
17403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        "http://www.google.com/", ".google.com", "/example/1", "A", "8");
17503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(
17603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        "http://www.google.com/", ".www.google.com", "/", "A", "10");
17703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    CheckCookieExpectations();
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CannedDomainCookieCallback(const net::CookieList& cookies) {
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_list_ = cookies;
18203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(
18303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        "http://www.google.com/", "www.google.com", NULL, "A", NULL);
18403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddCookieExpectation(
18503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        "http://www.google.com/", ".www.google.com", NULL, "A", NULL);
18603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    CheckCookieExpectations();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CannedDifferentFramesCallback(const net::CookieList& cookie_list) {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(3U, cookie_list.size());
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void DeleteCookie(BrowsingDataCookieHelper* helper, const GURL origin) {
19403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    for (net::CookieList::iterator it = cookie_list_.begin();
19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)         it != cookie_list_.end();
19603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)         ++it) {
19703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      if (it->Source() == net::CanonicalCookie::GetCookieSourceFromURL(origin))
19803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        helper->DeleteCookie(*it);
19903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    }
20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::TestBrowserThreadBundle thread_bundle_;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<TestingProfile> testing_profile_;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  std::vector<CookieExpectation> cookie_expectations_;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CookieList cookie_list_;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, FetchData) {
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateCookiesForTest();
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<BrowsingDataCookieHelper> cookie_helper(
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new BrowsingDataCookieHelper(testing_profile_->GetRequestContext()));
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie_helper->StartFetching(
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::FetchCallback,
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
218a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  base::RunLoop().RunUntilIdle();
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, DomainCookie) {
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateCookiesForDomainCookieTest();
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<BrowsingDataCookieHelper> cookie_helper(
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new BrowsingDataCookieHelper(testing_profile_->GetRequestContext()));
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie_helper->StartFetching(
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::DomainCookieCallback,
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
229a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  base::RunLoop().RunUntilIdle();
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, DeleteCookie) {
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateCookiesForTest();
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<BrowsingDataCookieHelper> cookie_helper(
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new BrowsingDataCookieHelper(testing_profile_->GetRequestContext()));
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie_helper->StartFetching(
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::FetchCallback,
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
240a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  base::RunLoop().RunUntilIdle();
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CanonicalCookie cookie = cookie_list_[0];
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie_helper->DeleteCookie(cookie);
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie_helper->StartFetching(
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::DeleteCallback,
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
248a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  base::RunLoop().RunUntilIdle();
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedDeleteCookie) {
2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CreateCookiesForTest();
2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<CannedBrowsingDataCookieHelper> helper(
2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      new CannedBrowsingDataCookieHelper(
2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          testing_profile_->GetRequestContext()));
2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const GURL origin1("http://www.google.com");
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const GURL origin2("http://www.gmail.google.com");
2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  helper->AddChangedCookie(origin1, origin1, "A=1", net::CookieOptions());
2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  helper->AddChangedCookie(origin2, origin2, "B=1", net::CookieOptions());
2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  helper->StartFetching(
2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::FetchCallback,
2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 base::Unretained(this)));
2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(2u, helper->GetCookieCount());
2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
27103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  DeleteCookie(helper.get(), origin1);
2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(1u, helper->GetCookieCount());
2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  helper->StartFetching(
2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::DeleteCallback,
2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 base::Unretained(this)));
2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedDomainCookie) {
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL origin("http://www.google.com");
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CookieList cookie;
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<CannedBrowsingDataCookieHelper> helper(
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new CannedBrowsingDataCookieHelper(
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          testing_profile_->GetRequestContext()));
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=1", net::CookieOptions());
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=1; Domain=.www.google.com",
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try adding invalid cookies that will be ignored.
293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  helper->AddChangedCookie(origin, origin, std::string(), net::CookieOptions());
294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  helper->AddChangedCookie(origin,
295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           origin,
296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           "C=bad guy; Domain=wrongdomain.com",
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->StartFetching(
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::CannedDomainCookieCallback,
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie = cookie_list_;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->Reset();
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddReadCookies(origin, origin, cookie);
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->StartFetching(
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::CannedDomainCookieCallback,
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedUnique) {
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL origin("http://www.google.com");
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CookieList cookie;
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<CannedBrowsingDataCookieHelper> helper(
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new CannedBrowsingDataCookieHelper(
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          testing_profile_->GetRequestContext()));
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=1", net::CookieOptions());
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=1", net::CookieOptions());
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->StartFetching(
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::CannedUniqueCallback,
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie = cookie_list_;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->Reset();
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddReadCookies(origin, origin, cookie);
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddReadCookies(origin, origin, cookie);
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->StartFetching(
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::CannedUniqueCallback,
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedReplaceCookie) {
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL origin("http://www.google.com");
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CookieList cookie;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<CannedBrowsingDataCookieHelper> helper(
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new CannedBrowsingDataCookieHelper(
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          testing_profile_->GetRequestContext()));
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=1", net::CookieOptions());
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=2", net::CookieOptions());
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=3; Path=/example/0",
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=4; Path=/example/0",
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=5; Domain=google.com",
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin, "A=6; Domain=google.com",
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin,
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           "A=7; Domain=google.com; Path=/example/1",
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin,
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           "A=8; Domain=google.com; Path=/example/1",
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin,
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          "A=9; Domain=www.google.com",
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(origin, origin,
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           "A=10; Domain=www.google.com",
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->StartFetching(
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::CannedReplaceCookieCallback,
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookie = cookie_list_;
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->Reset();
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddReadCookies(origin, origin, cookie);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddReadCookies(origin, origin, cookie);
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->StartFetching(
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::CannedReplaceCookieCallback,
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedEmpty) {
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL url_google("http://www.google.com");
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<CannedBrowsingDataCookieHelper> helper(
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new CannedBrowsingDataCookieHelper(
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          testing_profile_->GetRequestContext()));
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(url_google, url_google, "a=1",
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          net::CookieOptions());
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(helper->empty());
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->Reset();
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CookieList cookies;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::ParsedCookie pc("a=1");
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<net::CanonicalCookie> cookie(
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new net::CanonicalCookie(url_google, pc));
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookies.push_back(*cookie);
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddReadCookies(url_google, url_google, cookies);
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(helper->empty());
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->Reset();
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedDifferentFrames) {
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL frame1_url("http://www.google.com");
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL frame2_url("http://www.google.de");
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request_url("http://www.google.com");
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<CannedBrowsingDataCookieHelper> helper(
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new CannedBrowsingDataCookieHelper(
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          testing_profile_->GetRequestContext()));
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(helper->empty());
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(frame1_url, request_url, "a=1",
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(frame1_url, request_url, "b=1",
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(frame2_url, request_url, "c=1",
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->StartFetching(
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&BrowsingDataCookieHelperTest::CannedDifferentFramesCallback,
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BrowsingDataCookieHelperTest, CannedGetCookieCount) {
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The URL in the omnibox is a frame URL. This is not necessarily the request
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URL, since websites usually include other resources.
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL frame1_url("http://www.google.com");
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL frame2_url("http://www.google.de");
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The request URL used for all cookies that are added to the |helper|.
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request1_url("http://static.google.com/foo/res1.html");
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL request2_url("http://static.google.com/bar/res2.html");
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string cookie_domain(".www.google.com");
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string cookie_pair1("A=1");
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string cookie_pair2("B=1");
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The cookie pair used for adding a cookie that overrides the cookie created
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // with |cookie_pair1|. The cookie-name of |cookie_pair3| must match the
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // cookie-name of |cookie-pair1|.
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string cookie_pair3("A=2");
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The cookie pair used for adding a non host-only cookie. The cookie-name
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // must match the cookie-name of |cookie_pair1| in order to add a host-only
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // and a non host-only cookie with the same name below.
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string cookie_pair4("A=3");
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<CannedBrowsingDataCookieHelper> helper(
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new CannedBrowsingDataCookieHelper(
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          testing_profile_->GetRequestContext()));
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add two different cookies (distinguished by the tuple [cookie-name,
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // domain-value, path-value]) for a HTTP request to |frame1_url| and verify
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that the cookie count is increased to two. The set-cookie-string consists
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // only of the cookie-pair. This means that the host and the default-path of
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the |request_url| are used as domain-value and path-value for the added
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // cookies.
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0U, helper->GetCookieCount());
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(frame1_url, frame1_url, cookie_pair1,
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1U, helper->GetCookieCount());
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(frame1_url, frame1_url, cookie_pair2,
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2U, helper->GetCookieCount());
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Use a different frame URL for adding another cookie that will replace one
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // of the previously added cookies. This could happen during an automatic
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // redirect e.g. |frame1_url| redirects to |frame2_url| and a cookie set by a
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // request to |frame1_url| is updated.
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(frame2_url, frame1_url, cookie_pair3,
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2U, helper->GetCookieCount());
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add two more cookies that are set while loading resources. The two cookies
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // below have a differnt path-value since the request URLs have different
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // paths.
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(frame2_url, request1_url, cookie_pair3,
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(3U, helper->GetCookieCount());
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(frame2_url, request2_url, cookie_pair3,
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(4U, helper->GetCookieCount());
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Host-only and domain cookies are treated as seperate items. This means that
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the following two cookie-strings are stored as two separate cookies, even
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // though they have the same name and are send with the same request:
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   "A=1;
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   "A=3; Domain=www.google.com"
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a domain cookie and check if it increases the cookie count.
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper->AddChangedCookie(frame2_url, frame1_url,
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           cookie_pair4 + "; Domain=" + cookie_domain,
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           net::CookieOptions());
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(5U, helper->GetCookieCount());
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
504