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/mock_browsing_data_cookie_helper.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/canonical_cookie.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cookies/parsed_cookie.h"
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockBrowsingDataCookieHelper::MockBrowsingDataCookieHelper(
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestContextGetter* request_context_getter)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : BrowsingDataCookieHelper(request_context_getter) {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockBrowsingDataCookieHelper::~MockBrowsingDataCookieHelper() {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockBrowsingDataCookieHelper::StartFetching(
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const net::CookieMonster::GetCookieListCallback &callback) {
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_FALSE(callback.is_null());
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_TRUE(callback_.is_null());
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  callback_ = callback;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockBrowsingDataCookieHelper::DeleteCookie(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const net::CanonicalCookie& cookie) {
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_FALSE(callback_.is_null());
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string key = cookie.Name() + "=" + cookie.Value();
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_TRUE(cookies_.find(key) != cookies_.end());
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cookies_[key] = false;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockBrowsingDataCookieHelper::AddCookieSamples(
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const GURL& url, const std::string& cookie_line) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef net::CookieList::const_iterator cookie_iterator;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::ParsedCookie pc(cookie_line);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<net::CanonicalCookie> cc(new net::CanonicalCookie(url, pc));
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (cc.get()) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (cookie_iterator cookie = cookie_list_.begin();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cookie != cookie_list_.end(); ++cookie) {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (cookie->Name() == cc->Name() &&
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          cookie->Domain() == cc->Domain() &&
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          cookie->Path() == cc->Path()) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookie_list_.push_back(*cc);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cookies_[cookie_line] = true;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockBrowsingDataCookieHelper::Notify() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!callback_.is_null())
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    callback_.Run(cookie_list_);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockBrowsingDataCookieHelper::Reset() {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (std::map<const std::string, bool>::iterator i = cookies_.begin();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       i != cookies_.end(); ++i)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    i->second = true;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MockBrowsingDataCookieHelper::AllDeleted() {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (std::map<const std::string, bool>::const_iterator i = cookies_.begin();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       i != cookies_.end(); ++i)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (i->second)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
73