1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/cookies_tree_model.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/content_settings/stub_settings_observer.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/mock_browsing_data_appcache_helper.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/mock_browsing_data_database_helper.h"
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/mock_browsing_data_indexed_db_helper.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/mock_browsing_data_local_storage_helper.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_details.h"
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/url_request/url_request_context.h"
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "net/url_request/url_request_context_getter.h"
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CookiesTreeModelTest : public testing::Test {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  CookiesTreeModelTest() : ui_thread_(BrowserThread::UI, &message_loop_),
27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                           io_thread_(BrowserThread::IO, &message_loop_) {
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~CookiesTreeModelTest() {
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    profile_.reset(new TestingProfile());
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    profile_->CreateRequestContext();
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    mock_browsing_data_database_helper_ =
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MockBrowsingDataDatabaseHelper(profile_.get());
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    mock_browsing_data_local_storage_helper_ =
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MockBrowsingDataLocalStorageHelper(profile_.get());
403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    mock_browsing_data_session_storage_helper_ =
413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      new MockBrowsingDataLocalStorageHelper(profile_.get());
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    mock_browsing_data_appcache_helper_ =
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MockBrowsingDataAppCacheHelper(profile_.get());
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    mock_browsing_data_indexed_db_helper_ =
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      new MockBrowsingDataIndexedDBHelper(profile_.get());
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CookiesTreeModel* CreateCookiesTreeModelWithInitialSample() {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    net::CookieMonster* monster = profile_->GetCookieMonster();
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    monster->SetCookie(GURL("http://foo1"), "A=1");
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    monster->SetCookie(GURL("http://foo2"), "B=1");
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    monster->SetCookie(GURL("http://foo3"), "C=1");
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CookiesTreeModel* cookies_model = new CookiesTreeModel(
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        monster, mock_browsing_data_database_helper_,
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        mock_browsing_data_local_storage_helper_,
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        mock_browsing_data_session_storage_helper_,
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        mock_browsing_data_appcache_helper_,
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        mock_browsing_data_indexed_db_helper_,
59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        false);
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    mock_browsing_data_database_helper_->AddDatabaseSamples();
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    mock_browsing_data_database_helper_->Notify();
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    mock_browsing_data_local_storage_helper_->AddLocalStorageSamples();
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    mock_browsing_data_local_storage_helper_->Notify();
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    mock_browsing_data_session_storage_helper_->AddLocalStorageSamples();
653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    mock_browsing_data_session_storage_helper_->Notify();
663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    mock_browsing_data_indexed_db_helper_->AddIndexedDBSamples();
673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    mock_browsing_data_indexed_db_helper_->Notify();
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    {
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      SCOPED_TRACE("Initial State 3 cookies, 2 databases, 2 local storages, "
703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                   "2 session storages, 2 indexed DBs");
713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      // 32 because there's the root, then foo1 -> cookies -> a,
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // foo2 -> cookies -> b, foo3 -> cookies -> c,
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // host1 -> localstorage -> http://host1:1/,
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // host2 -> localstorage -> http://host2:2/.
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      // host1 -> sessionstorage -> http://host1:1/,
773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      // host2 -> sessionstorage -> http://host2:2/,
783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      // idbhost1 -> indexeddb -> http://idbhost1:1/,
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      // idbhost2 -> indexeddb -> http://idbhost2:2/.
803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      EXPECT_EQ(32, cookies_model->GetRoot()->GetTotalNodeCount());
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model));
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_EQ("http://host1:1/,http://host2:2/",
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                GetDisplayedLocalStorages(cookies_model));
843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      EXPECT_EQ("http://host1:1/,http://host2:2/",
853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                GetDisplayedSessionStorages(cookies_model));
863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                GetDisplayedIndexedDBs(cookies_model));
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return cookies_model;
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Get the cookie names in the cookie list, as a comma seperated string.
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // (Note that the CookieMonster cookie list is sorted by domain.)
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Ex:
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //   monster->SetCookie(GURL("http://b"), "X=1")
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //   monster->SetCookie(GURL("http://a"), "Y=1")
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //   EXPECT_STREQ("Y,X", GetMonsterCookies(monster).c_str());
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetMonsterCookies(net::CookieMonster* monster) {
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<std::string> parts;
10021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    net::CookieList cookie_list = monster->GetAllCookies();
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (size_t i = 0; i < cookie_list.size(); ++i)
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      parts.push_back(cookie_list[i].Name());
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return JoinString(parts, ',');
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetNodesOfChildren(
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const CookieTreeNode* node,
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      CookieTreeNode::DetailedInfo::NodeType node_type) {
109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (node->child_count()) {
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      std::string retval;
111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      for (int i = 0; i < node->child_count(); ++i) {
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        retval += GetNodesOfChildren(node->GetChild(i), node_type);
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      }
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return retval;
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    } else {
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      if (node->GetDetailedInfo().node_type == node_type) {
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        switch (node_type) {
1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE:
1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick            return node->GetDetailedInfo().session_storage_info->origin + ",";
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE:
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            return node->GetDetailedInfo().local_storage_info->origin + ",";
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          case CookieTreeNode::DetailedInfo::TYPE_DATABASE:
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            return node->GetDetailedInfo().database_info->database_name + ",";
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            return node->GetDetailedInfo().cookie->Name() + ",";
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          case CookieTreeNode::DetailedInfo::TYPE_APPCACHE:
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            return node->GetDetailedInfo().appcache_info->manifest_url.spec() +
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   ",";
1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB:
1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick            return node->GetDetailedInfo().indexed_db_info->origin + ",";
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          default:
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            return "";
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        }
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      } else {
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        return "";
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      }
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetCookiesOfChildren(const CookieTreeNode* node) {
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return GetNodesOfChildren(node, CookieTreeNode::DetailedInfo::TYPE_COOKIE);
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetDatabasesOfChildren(const CookieTreeNode* node) {
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return GetNodesOfChildren(node,
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              CookieTreeNode::DetailedInfo::TYPE_DATABASE);
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetLocalStoragesOfChildren(const CookieTreeNode* node) {
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return GetNodesOfChildren(node,
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE);
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  std::string GetSessionStoragesOfChildren(const CookieTreeNode* node) {
1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return GetNodesOfChildren(
1563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        node, CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE);
1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  std::string GetIndexedDBsOfChildren(const CookieTreeNode* node) {
1603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return GetNodesOfChildren(
1613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        node, CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB);
1623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Get the nodes names displayed in the view (if we had one) in the order
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // they are displayed, as a comma seperated string.
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Ex: EXPECT_STREQ("X,Y", GetDisplayedNodes(cookies_view, type).c_str());
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetDisplayedNodes(CookiesTreeModel* cookies_model,
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                CookieTreeNode::DetailedInfo::NodeType type) {
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        cookies_model->GetRoot());
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string retval = GetNodesOfChildren(root, type);
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (retval.length() && retval[retval.length() - 1] == ',')
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      retval.erase(retval.length() - 1);
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return retval;
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetDisplayedCookies(CookiesTreeModel* cookies_model) {
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return GetDisplayedNodes(cookies_model,
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             CookieTreeNode::DetailedInfo::TYPE_COOKIE);
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetDisplayedDatabases(CookiesTreeModel* cookies_model) {
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return GetDisplayedNodes(cookies_model,
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             CookieTreeNode::DetailedInfo::TYPE_DATABASE);
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetDisplayedLocalStorages(CookiesTreeModel* cookies_model) {
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return GetDisplayedNodes(cookies_model,
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE);
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  std::string GetDisplayedSessionStorages(CookiesTreeModel* cookies_model) {
1933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return GetDisplayedNodes(
1943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        cookies_model, CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE);
1953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetDisplayedAppCaches(CookiesTreeModel* cookies_model) {
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return GetDisplayedNodes(cookies_model,
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             CookieTreeNode::DetailedInfo::TYPE_APPCACHE);
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  std::string GetDisplayedIndexedDBs(CookiesTreeModel* cookies_model) {
2033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return GetDisplayedNodes(cookies_model,
2043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                             CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB);
2053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
2063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Do not call on the root.
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void DeleteStoredObjects(CookieTreeNode* node) {
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    node->DeleteStoredObjects();
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    CookieTreeNode* parent_node = node->parent();
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DCHECK(parent_node);
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    delete parent_node->GetModel()->Remove(parent_node, node);
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MessageLoop message_loop_;
217731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  BrowserThread ui_thread_;
218731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  BrowserThread io_thread_;
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<TestingProfile> profile_;
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<MockBrowsingDataDatabaseHelper>
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      mock_browsing_data_database_helper_;
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<MockBrowsingDataLocalStorageHelper>
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      mock_browsing_data_local_storage_helper_;
2253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  scoped_refptr<MockBrowsingDataLocalStorageHelper>
2263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      mock_browsing_data_session_storage_helper_;
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<MockBrowsingDataAppCacheHelper>
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      mock_browsing_data_appcache_helper_;
2293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  scoped_refptr<MockBrowsingDataIndexedDBHelper>
2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      mock_browsing_data_indexed_db_helper_;
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CookiesTreeModelTest, RemoveAll) {
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<CookiesTreeModel> cookies_model(
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      CreateCookiesTreeModelWithInitialSample());
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::CookieMonster* monster = profile_->GetCookieMonster();
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Reset the selection of the first row.
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Before removing");
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(GetMonsterCookies(monster),
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedCookies(cookies_model.get()));
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db1,db2",
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedDatabases(cookies_model.get()));
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
2473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
2493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_database_helper_->Reset();
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_local_storage_helper_->Reset();
2553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_session_storage_helper_->Reset();
2563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_indexed_db_helper_->Reset();
257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  cookies_model->DeleteAllStoredObjects();
259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("After removing");
262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(1, cookies_model->GetRoot()->GetTotalNodeCount());
263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    EXPECT_EQ(0, cookies_model->GetRoot()->child_count());
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(std::string(""), GetMonsterCookies(monster));
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(GetMonsterCookies(monster),
266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedCookies(cookies_model.get()));
267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(mock_browsing_data_database_helper_->AllDeleted());
268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(mock_browsing_data_local_storage_helper_->AllDeleted());
2693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_FALSE(mock_browsing_data_session_storage_helper_->AllDeleted());
2703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_TRUE(mock_browsing_data_indexed_db_helper_->AllDeleted());
271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CookiesTreeModelTest, Remove) {
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<CookiesTreeModel> cookies_model(
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      CreateCookiesTreeModelWithInitialSample());
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::CookieMonster* monster = profile_->GetCookieMonster();
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(0));
280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("First cookie origin removed");
282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get()));
285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
2873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
2883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
2893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
2903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
2913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(29, cookies_model->GetRoot()->GetTotalNodeCount());
292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(2));
295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("First database origin removed");
297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
3023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
3033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
3043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
3053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
3063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(26, cookies_model->GetRoot()->GetTotalNodeCount());
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(3));
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("First local storage origin removed");
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host2:2/",
316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
3173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host2:2/",
3183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
3193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
3203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
3213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(21, cookies_model->GetRoot()->GetTotalNodeCount());
3223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
3233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
3243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(4));
3253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  {
3263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    SCOPED_TRACE("First IndexedDB origin removed");
3273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
3283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
3293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
3303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host2:2/",
3313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedLocalStorages(cookies_model.get()));
3323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host2:2/",
3333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
3343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost2:2/",
3353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
3363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(18, cookies_model->GetRoot()->GetTotalNodeCount());
337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
340c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CookiesTreeModelTest, RemoveCookiesNode) {
341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<CookiesTreeModel> cookies_model(
342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      CreateCookiesTreeModelWithInitialSample());
343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::CookieMonster* monster = profile_->GetCookieMonster();
344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(0)->GetChild(0));
346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("First origin removed");
348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
3503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // 28 because in this case, the origin remains, although the COOKIES
351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // node beneath it has been deleted. So, we have
352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // root -> foo1 -> cookies -> a, foo2, foo3 -> cookies -> c
353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // host1 -> localstorage -> http://host1:1/,
3553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // host2 -> localstorage -> http://host2:2/,
3563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // idbhost1 -> sessionstorage -> http://idbhost1:1/,
3573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // idbhost2 -> sessionstorage -> http://idbhost2:2/.
3583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(30, cookies_model->GetRoot()->GetTotalNodeCount());
359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get()));
360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
3623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
3633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
3643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
3653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(3)->GetChild(0));
369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("First database removed");
371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
3763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
3773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
3783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
3793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
3803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(28, cookies_model->GetRoot()->GetTotalNodeCount());
381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(5)->GetChild(0));
384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("First origin removed");
386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host2:2/",
390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
3913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
3923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
3933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
3943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
3953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(26, cookies_model->GetRoot()->GetTotalNodeCount());
396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
399c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CookiesTreeModelTest, RemoveCookieNode) {
400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<CookiesTreeModel> cookies_model(
401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      CreateCookiesTreeModelWithInitialSample());
402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::CookieMonster* monster = profile_->GetCookieMonster();
403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(1)->GetChild(0));
405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Second origin COOKIES node removed");
407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_model.get()).c_str());
409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get()));
410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
4123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
4133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
4143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
4153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
4163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // 28 because in this case, the origin remains, although the COOKIES
417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // node beneath it has been deleted. So, we have
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // root -> foo1 -> cookies -> a, foo2, foo3 -> cookies -> c
419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // host1 -> localstorage -> http://host1:1/,
421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // host2 -> localstorage -> http://host2:2/.
4223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // host1 -> sessionstorage -> http://host1:1/,
4233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // host2 -> sessionstorage -> http://host2:2/,
4243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // idbhost1 -> sessionstorage -> http://idbhost1:1/,
4253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // idbhost2 -> sessionstorage -> http://idbhost2:2/.
4263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(30, cookies_model->GetRoot()->GetTotalNodeCount());
427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(3)->GetChild(0));
430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("First database removed");
432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_model.get()).c_str());
434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
4373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
4383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
4393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
4403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
4413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(28, cookies_model->GetRoot()->GetTotalNodeCount());
442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model->GetRoot()->GetChild(5)->GetChild(0));
445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("First origin removed");
447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_model.get()).c_str());
449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host2:2/",
451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(cookies_model.get()));
4523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
4533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(cookies_model.get()));
4543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
4553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(cookies_model.get()));
4563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(26, cookies_model->GetRoot()->GetTotalNodeCount());
457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
460c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CookiesTreeModelTest, RemoveSingleCookieNode) {
461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::CookieMonster* monster = profile_->GetCookieMonster();
462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo1"), "A=1");
463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo2"), "B=1");
464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo3"), "C=1");
465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo3"), "D=1");
466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CookiesTreeModel cookies_model(monster,
467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 mock_browsing_data_database_helper_,
468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 mock_browsing_data_local_storage_helper_,
4693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                 mock_browsing_data_session_storage_helper_,
4703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                 mock_browsing_data_appcache_helper_,
471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                 mock_browsing_data_indexed_db_helper_,
472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                 false);
473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_database_helper_->AddDatabaseSamples();
474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_database_helper_->Notify();
475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_local_storage_helper_->AddLocalStorageSamples();
476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_local_storage_helper_->Notify();
4773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_session_storage_helper_->AddLocalStorageSamples();
4783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_session_storage_helper_->Notify();
4793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_indexed_db_helper_->AddIndexedDBSamples();
4803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_indexed_db_helper_->Notify();
481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
4833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    SCOPED_TRACE("Initial State 4 cookies, 2 databases, 2 local storages, "
4843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        "2 session storages, 2 indexed DBs");
4853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // 33 because there's the root, then foo1 -> cookies -> a,
486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // foo2 -> cookies -> b, foo3 -> cookies -> c,d
487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // host1 -> localstorage -> http://host1:1/,
489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // host2 -> localstorage -> http://host2:2/.
4903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // host1 -> sessionstorage -> http://host1:1/,
4913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // host2 -> sessionstorage -> http://host2:2/,
4923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // idbhost1 -> sessionstorage -> http://idbhost1:1/,
4933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // idbhost2 -> sessionstorage -> http://idbhost2:2/.
4943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(33, cookies_model.GetRoot()->GetTotalNodeCount());
495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B,C,D", GetMonsterCookies(monster).c_str());
496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B,C,D", GetDisplayedCookies(&cookies_model).c_str());
497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model));
498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(&cookies_model));
5003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
5013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(&cookies_model));
5023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
5033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(&cookies_model));
504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model.GetRoot()->GetChild(2));
506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Third origin removed");
508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B", GetMonsterCookies(monster).c_str());
509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B", GetDisplayedCookies(&cookies_model).c_str());
510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model));
511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(&cookies_model));
5133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
5143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(&cookies_model));
5153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
5163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(&cookies_model));
5173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(29, cookies_model.GetRoot()->GetTotalNodeCount());
518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
521c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CookiesTreeModelTest, RemoveSingleCookieNodeOf3) {
522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::CookieMonster* monster = profile_->GetCookieMonster();
523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo1"), "A=1");
524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo2"), "B=1");
525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo3"), "C=1");
526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo3"), "D=1");
527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo3"), "E=1");
528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CookiesTreeModel cookies_model(monster,
529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 mock_browsing_data_database_helper_,
530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 mock_browsing_data_local_storage_helper_,
5313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                 mock_browsing_data_session_storage_helper_,
5323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                 mock_browsing_data_appcache_helper_,
533ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                 mock_browsing_data_indexed_db_helper_,
534ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                 false);
535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_database_helper_->AddDatabaseSamples();
536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_database_helper_->Notify();
537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_local_storage_helper_->AddLocalStorageSamples();
538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  mock_browsing_data_local_storage_helper_->Notify();
5393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_session_storage_helper_->AddLocalStorageSamples();
5403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_session_storage_helper_->Notify();
5413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_indexed_db_helper_->AddIndexedDBSamples();
5423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  mock_browsing_data_indexed_db_helper_->Notify();
543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
5453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    SCOPED_TRACE("Initial State 5 cookies, 2 databases, 2 local storages, "
5463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                 "2 session storages, 2 indexed DBs");
5473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // 34 because there's the root, then foo1 -> cookies -> a,
548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // foo2 -> cookies -> b, foo3 -> cookies -> c,d,e
549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // host1 -> localstorage -> http://host1:1/,
551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // host2 -> localstorage -> http://host2:2/.
5523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // host1 -> sessionstorage -> http://host1:1/,
5533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // host2 -> sessionstorage -> http://host2:2/,
5543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // idbhost1 -> sessionstorage -> http://idbhost1:1/,
5553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // idbhost2 -> sessionstorage -> http://idbhost2:2/.
5563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(34, cookies_model.GetRoot()->GetTotalNodeCount());
557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B,C,D,E", GetMonsterCookies(monster).c_str());
558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B,C,D,E", GetDisplayedCookies(&cookies_model).c_str());
559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model));
560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(&cookies_model));
5623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
5633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(&cookies_model));
5643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
5653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(&cookies_model));
566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model.GetRoot()->GetChild(2)->GetChild(0)->
568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetChild(1));
569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Middle cookie in third origin removed");
571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B,C,E", GetMonsterCookies(monster).c_str());
572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B,C,E", GetDisplayedCookies(&cookies_model).c_str());
5733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ(33, cookies_model.GetRoot()->GetTotalNodeCount());
574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model));
575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("http://host1:1/,http://host2:2/",
576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              GetDisplayedLocalStorages(&cookies_model));
5773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://host1:1/,http://host2:2/",
5783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedSessionStorages(&cookies_model));
5793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
5803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              GetDisplayedIndexedDBs(&cookies_model));
581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
584c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CookiesTreeModelTest, RemoveSecondOrigin) {
585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::CookieMonster* monster = profile_->GetCookieMonster();
586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo1"), "A=1");
587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo2"), "B=1");
588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo3"), "C=1");
589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo3"), "D=1");
590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo3"), "E=1");
591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CookiesTreeModel cookies_model(monster,
592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 mock_browsing_data_database_helper_,
593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 mock_browsing_data_local_storage_helper_,
5943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                 mock_browsing_data_session_storage_helper_,
5953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                 mock_browsing_data_appcache_helper_,
596ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                 mock_browsing_data_indexed_db_helper_,
597ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                 false);
598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Initial State 5 cookies");
600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // 11 because there's the root, then foo1 -> cookies -> a,
601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // foo2 -> cookies -> b, foo3 -> cookies -> c,d,e
602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(12, cookies_model.GetRoot()->GetTotalNodeCount());
603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B,C,D,E", GetMonsterCookies(monster).c_str());
604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,B,C,D,E", GetDisplayedCookies(&cookies_model).c_str());
605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model.GetRoot()->GetChild(1));
607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Second origin removed");
609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,C,D,E", GetMonsterCookies(monster).c_str());
610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("A,C,D,E", GetDisplayedCookies(&cookies_model).c_str());
611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Left with root -> foo1 -> cookies -> a, foo3 -> cookies -> c,d,e
612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(9, cookies_model.GetRoot()->GetTotalNodeCount());
613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
616c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CookiesTreeModelTest, OriginOrdering) {
617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::CookieMonster* monster = profile_->GetCookieMonster();
618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://a.foo2.com"), "A=1");
619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo2.com"), "B=1");
620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://b.foo1.com"), "C=1");
621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo4.com"), "D=1; domain=.foo4.com;"
622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      " path=/;");  // Leading dot on the foo4
623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://a.foo1.com"), "E=1");
624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo1.com"), "F=1");
625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo3.com"), "G=1");
626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(GURL("http://foo4.com"), "H=1");
627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CookiesTreeModel cookies_model(monster,
629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MockBrowsingDataDatabaseHelper(profile_.get()),
630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MockBrowsingDataLocalStorageHelper(profile_.get()),
6313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      new MockBrowsingDataLocalStorageHelper(profile_.get()),
6323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      new MockBrowsingDataAppCacheHelper(profile_.get()),
633ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      new MockBrowsingDataIndexedDBHelper(profile_.get()),
634ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      false);
635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SCOPED_TRACE("Initial State 8 cookies");
6383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // CookieMonster orders cookies by pathlength, then by creation time.
6393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    // All paths are length 1.
6403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_STREQ("A,B,C,D,E,F,G,H", GetMonsterCookies(monster).c_str());
641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("F,E,C,B,A,G,D,H",
642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        GetDisplayedCookies(&cookies_model).c_str());
643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DeleteStoredObjects(cookies_model.GetRoot()->GetChild(1));  // Delete "E"
645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
6463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    EXPECT_STREQ("A,B,C,D,F,G,H", GetMonsterCookies(monster).c_str());
647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_STREQ("F,C,B,A,G,D,H", GetDisplayedCookies(&cookies_model).c_str());
648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
651c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(CookiesTreeModelTest, ContentSettings) {
652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GURL host("http://example.com/");
65321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ContentSettingsPattern pattern("[*.]example.com");
654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::CookieMonster* monster = profile_->GetCookieMonster();
655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  monster->SetCookie(host, "A=1");
656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CookiesTreeModel cookies_model(monster,
658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MockBrowsingDataDatabaseHelper(profile_.get()),
659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MockBrowsingDataLocalStorageHelper(profile_.get()),
6603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      new MockBrowsingDataLocalStorageHelper(profile_.get()),
6613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      new MockBrowsingDataAppCacheHelper(profile_.get()),
662ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      new MockBrowsingDataIndexedDBHelper(profile_.get()),
663ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      false);
664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestingProfile profile;
666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  HostContentSettingsMap* content_settings =
667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      profile.GetHostContentSettingsMap();
668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StubSettingsObserver observer;
669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CookieTreeRootNode* root =
671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      static_cast<CookieTreeRootNode*>(cookies_model.GetRoot());
672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CookieTreeOriginNode* origin = root->GetOrCreateOriginNode(host);
673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
674ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(1, origin->child_count());
675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(origin->CanCreateContentException());
676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  origin->CreateContentException(
677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      content_settings, CONTENT_SETTING_SESSION_ONLY);
678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(2, observer.counter);
680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(pattern, observer.last_pattern);
681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(CONTENT_SETTING_SESSION_ONLY,
6823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      content_settings->GetContentSetting(
6833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          host, CONTENT_SETTINGS_TYPE_COOKIES, ""));
684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
687