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