1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/browsing_data/cookies_tree_model.h" 6 7#include <string> 8 9#include "base/message_loop/message_loop.h" 10#include "base/prefs/pref_service.h" 11#include "chrome/browser/browsing_data/mock_browsing_data_appcache_helper.h" 12#include "chrome/browser/browsing_data/mock_browsing_data_cookie_helper.h" 13#include "chrome/browser/browsing_data/mock_browsing_data_database_helper.h" 14#include "chrome/browser/browsing_data/mock_browsing_data_file_system_helper.h" 15#include "chrome/browser/browsing_data/mock_browsing_data_flash_lso_helper.h" 16#include "chrome/browser/browsing_data/mock_browsing_data_indexed_db_helper.h" 17#include "chrome/browser/browsing_data/mock_browsing_data_local_storage_helper.h" 18#include "chrome/browser/browsing_data/mock_browsing_data_quota_helper.h" 19#include "chrome/browser/browsing_data/mock_browsing_data_server_bound_cert_helper.h" 20#include "chrome/browser/content_settings/cookie_settings.h" 21#include "chrome/browser/content_settings/host_content_settings_map.h" 22#include "chrome/browser/content_settings/mock_settings_observer.h" 23#include "chrome/browser/extensions/extension_special_storage_policy.h" 24#include "chrome/test/base/testing_profile.h" 25#include "content/public/browser/notification_details.h" 26#include "content/public/browser/notification_types.h" 27#include "content/public/test/test_browser_thread_bundle.h" 28#include "net/url_request/url_request_context.h" 29#include "net/url_request/url_request_context_getter.h" 30#include "testing/gtest/include/gtest/gtest.h" 31 32#include "base/strings/utf_string_conversions.h" 33 34using ::testing::_; 35using content::BrowserThread; 36 37namespace { 38 39class CookiesTreeModelTest : public testing::Test { 40 public: 41 virtual ~CookiesTreeModelTest() { 42 // Avoid memory leaks. 43 special_storage_policy_ = NULL; 44 profile_.reset(); 45 base::MessageLoop::current()->RunUntilIdle(); 46 } 47 48 virtual void SetUp() OVERRIDE { 49 profile_.reset(new TestingProfile()); 50 mock_browsing_data_cookie_helper_ = 51 new MockBrowsingDataCookieHelper(profile_->GetRequestContext()); 52 mock_browsing_data_database_helper_ = 53 new MockBrowsingDataDatabaseHelper(profile_.get()); 54 mock_browsing_data_local_storage_helper_ = 55 new MockBrowsingDataLocalStorageHelper(profile_.get()); 56 mock_browsing_data_session_storage_helper_ = 57 new MockBrowsingDataLocalStorageHelper(profile_.get()); 58 mock_browsing_data_appcache_helper_ = 59 new MockBrowsingDataAppCacheHelper(profile_.get()); 60 mock_browsing_data_indexed_db_helper_ = 61 new MockBrowsingDataIndexedDBHelper(); 62 mock_browsing_data_file_system_helper_ = 63 new MockBrowsingDataFileSystemHelper(profile_.get()); 64 mock_browsing_data_quota_helper_ = 65 new MockBrowsingDataQuotaHelper(profile_.get()); 66 mock_browsing_data_server_bound_cert_helper_ = 67 new MockBrowsingDataServerBoundCertHelper(); 68 mock_browsing_data_flash_lso_helper_ = 69 new MockBrowsingDataFlashLSOHelper(profile_.get()); 70 71 scoped_refptr<CookieSettings> cookie_settings = 72 new CookieSettings(profile_->GetHostContentSettingsMap(), 73 profile_->GetPrefs()); 74 special_storage_policy_ = 75 new ExtensionSpecialStoragePolicy(cookie_settings.get()); 76 } 77 78 virtual void TearDown() OVERRIDE { 79 mock_browsing_data_server_bound_cert_helper_ = NULL; 80 mock_browsing_data_quota_helper_ = NULL; 81 mock_browsing_data_file_system_helper_ = NULL; 82 mock_browsing_data_indexed_db_helper_ = NULL; 83 mock_browsing_data_appcache_helper_ = NULL; 84 mock_browsing_data_session_storage_helper_ = NULL; 85 mock_browsing_data_local_storage_helper_ = NULL; 86 mock_browsing_data_database_helper_ = NULL; 87 mock_browsing_data_flash_lso_helper_ = NULL; 88 base::MessageLoop::current()->RunUntilIdle(); 89 } 90 91 scoped_ptr<CookiesTreeModel> CreateCookiesTreeModelWithInitialSample() { 92 LocalDataContainer* container = new LocalDataContainer( 93 mock_browsing_data_cookie_helper_.get(), 94 mock_browsing_data_database_helper_.get(), 95 mock_browsing_data_local_storage_helper_.get(), 96 mock_browsing_data_session_storage_helper_.get(), 97 mock_browsing_data_appcache_helper_.get(), 98 mock_browsing_data_indexed_db_helper_.get(), 99 mock_browsing_data_file_system_helper_.get(), 100 mock_browsing_data_quota_helper_.get(), 101 mock_browsing_data_server_bound_cert_helper_.get(), 102 mock_browsing_data_flash_lso_helper_.get()); 103 104 CookiesTreeModel* cookies_model = 105 new CookiesTreeModel(container, special_storage_policy_.get(), false); 106 mock_browsing_data_cookie_helper_-> 107 AddCookieSamples(GURL("http://foo1"), "A=1"); 108 mock_browsing_data_cookie_helper_-> 109 AddCookieSamples(GURL("http://foo2"), "B=1"); 110 mock_browsing_data_cookie_helper_-> 111 AddCookieSamples(GURL("http://foo3"), "C=1"); 112 mock_browsing_data_cookie_helper_->Notify(); 113 mock_browsing_data_database_helper_->AddDatabaseSamples(); 114 mock_browsing_data_database_helper_->Notify(); 115 mock_browsing_data_local_storage_helper_->AddLocalStorageSamples(); 116 mock_browsing_data_local_storage_helper_->Notify(); 117 mock_browsing_data_session_storage_helper_->AddLocalStorageSamples(); 118 mock_browsing_data_session_storage_helper_->Notify(); 119 mock_browsing_data_indexed_db_helper_->AddIndexedDBSamples(); 120 mock_browsing_data_indexed_db_helper_->Notify(); 121 mock_browsing_data_file_system_helper_->AddFileSystemSamples(); 122 mock_browsing_data_file_system_helper_->Notify(); 123 mock_browsing_data_quota_helper_->AddQuotaSamples(); 124 mock_browsing_data_quota_helper_->Notify(); 125 mock_browsing_data_server_bound_cert_helper_->AddServerBoundCertSample( 126 "sbc1"); 127 mock_browsing_data_server_bound_cert_helper_->AddServerBoundCertSample( 128 "sbc2"); 129 mock_browsing_data_server_bound_cert_helper_->Notify(); 130 mock_browsing_data_flash_lso_helper_->AddFlashLSODomain("xyz.com"); 131 mock_browsing_data_flash_lso_helper_->Notify(); 132 133 { 134 SCOPED_TRACE("Initial State 3 cookies, 2 databases, 2 local storages, " 135 "2 session storages, 2 indexed DBs, 3 filesystems, " 136 "2 quotas, 2 server bound certs, 1 Flash LSO"); 137 // 51 because there's the root, then 138 // foo1 -> cookies -> a, 139 // foo2 -> cookies -> b, 140 // foo3 -> cookies -> c, 141 // dbhost1 -> database -> db1, 142 // dbhost2 -> database -> db2, 143 // host1 -> localstorage -> http://host1:1/, 144 // -> sessionstorage -> http://host1:1/, 145 // host2 -> localstorage -> http://host2:2/. 146 // -> sessionstorage -> http://host2:2/, 147 // idbhost1 -> indexeddb -> http://idbhost1:1/, 148 // idbhost2 -> indexeddb -> http://idbhost2:2/, 149 // fshost1 -> filesystem -> http://fshost1:1/, 150 // fshost2 -> filesystem -> http://fshost2:1/, 151 // fshost3 -> filesystem -> http://fshost3:1/, 152 // quotahost1 -> quotahost1, 153 // quotahost2 -> quotahost2, 154 // sbc1 -> sbcerts -> sbc1, 155 // sbc2 -> sbcerts -> sbc2. 156 // xyz.com -> flash_lsos 157 EXPECT_EQ(53, cookies_model->GetRoot()->GetTotalNodeCount()); 158 EXPECT_EQ("A,B,C", GetDisplayedCookies(cookies_model)); 159 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model)); 160 EXPECT_EQ("http://host1:1/,http://host2:2/", 161 GetDisplayedLocalStorages(cookies_model)); 162 EXPECT_EQ("http://host1:1/,http://host2:2/", 163 GetDisplayedSessionStorages(cookies_model)); 164 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 165 GetDisplayedIndexedDBs(cookies_model)); 166 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 167 GetDisplayedFileSystems(cookies_model)); 168 EXPECT_EQ("quotahost1,quotahost2", 169 GetDisplayedQuotas(cookies_model)); 170 EXPECT_EQ("sbc1,sbc2", 171 GetDisplayedServerBoundCerts(cookies_model)); 172 EXPECT_EQ("xyz.com", 173 GetDisplayedFlashLSOs(cookies_model)); 174 } 175 return make_scoped_ptr(cookies_model); 176 } 177 178 std::string GetNodesOfChildren( 179 const CookieTreeNode* node, 180 CookieTreeNode::DetailedInfo::NodeType node_type) { 181 if (!node->empty()) { 182 std::string retval; 183 for (int i = 0; i < node->child_count(); ++i) { 184 retval += GetNodesOfChildren(node->GetChild(i), node_type); 185 } 186 return retval; 187 } 188 189 if (node->GetDetailedInfo().node_type != node_type) 190 return std::string(); 191 192 switch (node_type) { 193 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE: 194 return node->GetDetailedInfo(). 195 session_storage_info->origin_url.spec() + ","; 196 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE: 197 return node->GetDetailedInfo(). 198 local_storage_info->origin_url.spec() + ","; 199 case CookieTreeNode::DetailedInfo::TYPE_DATABASE: 200 return node->GetDetailedInfo().database_info->database_name + ","; 201 case CookieTreeNode::DetailedInfo::TYPE_COOKIE: 202 return node->GetDetailedInfo().cookie->Name() + ","; 203 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE: 204 return node->GetDetailedInfo().appcache_info->manifest_url.spec() + 205 ","; 206 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB: 207 return node->GetDetailedInfo().indexed_db_info->origin_.spec() + 208 ","; 209 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM: 210 return node->GetDetailedInfo().file_system_info->origin.spec() + 211 ","; 212 case CookieTreeNode::DetailedInfo::TYPE_QUOTA: 213 return node->GetDetailedInfo().quota_info->host + ","; 214 case CookieTreeNode::DetailedInfo::TYPE_SERVER_BOUND_CERT: 215 return node->GetDetailedInfo( 216 ).server_bound_cert->server_identifier() + ","; 217 case CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO: 218 return node->GetDetailedInfo().flash_lso_domain + ","; 219 default: 220 return std::string(); 221 } 222 } 223 224 std::string GetCookiesOfChildren(const CookieTreeNode* node) { 225 return GetNodesOfChildren(node, CookieTreeNode::DetailedInfo::TYPE_COOKIE); 226 } 227 228 std::string GetDatabasesOfChildren(const CookieTreeNode* node) { 229 return GetNodesOfChildren(node, 230 CookieTreeNode::DetailedInfo::TYPE_DATABASE); 231 } 232 233 std::string GetLocalStoragesOfChildren(const CookieTreeNode* node) { 234 return GetNodesOfChildren(node, 235 CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE); 236 } 237 238 std::string GetSessionStoragesOfChildren(const CookieTreeNode* node) { 239 return GetNodesOfChildren( 240 node, CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE); 241 } 242 243 std::string GetIndexedDBsOfChildren(const CookieTreeNode* node) { 244 return GetNodesOfChildren( 245 node, CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB); 246 } 247 248 std::string GetFileSystemsOfChildren(const CookieTreeNode* node) { 249 return GetNodesOfChildren( 250 node, CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM); 251 } 252 253 std::string GetFileQuotaOfChildren(const CookieTreeNode* node) { 254 return GetNodesOfChildren( 255 node, CookieTreeNode::DetailedInfo::TYPE_QUOTA); 256 } 257 258 std::string GetFlashLSOsOfChildren(const CookieTreeNode* node) { 259 return GetNodesOfChildren( 260 node, CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO); 261 } 262 263 // Get the nodes names displayed in the view (if we had one) in the order 264 // they are displayed, as a comma seperated string. 265 // Ex: EXPECT_STREQ("X,Y", GetDisplayedNodes(cookies_view, type).c_str()); 266 std::string GetDisplayedNodes(CookiesTreeModel* cookies_model, 267 CookieTreeNode::DetailedInfo::NodeType type) { 268 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>( 269 cookies_model->GetRoot()); 270 std::string retval = GetNodesOfChildren(root, type); 271 if (retval.length() && retval[retval.length() - 1] == ',') 272 retval.erase(retval.length() - 1); 273 return retval; 274 } 275 276 std::string GetDisplayedCookies(CookiesTreeModel* cookies_model) { 277 return GetDisplayedNodes(cookies_model, 278 CookieTreeNode::DetailedInfo::TYPE_COOKIE); 279 } 280 281 std::string GetDisplayedDatabases(CookiesTreeModel* cookies_model) { 282 return GetDisplayedNodes(cookies_model, 283 CookieTreeNode::DetailedInfo::TYPE_DATABASE); 284 } 285 286 std::string GetDisplayedLocalStorages(CookiesTreeModel* cookies_model) { 287 return GetDisplayedNodes(cookies_model, 288 CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE); 289 } 290 291 std::string GetDisplayedSessionStorages(CookiesTreeModel* cookies_model) { 292 return GetDisplayedNodes( 293 cookies_model, CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE); 294 } 295 296 std::string GetDisplayedAppCaches(CookiesTreeModel* cookies_model) { 297 return GetDisplayedNodes(cookies_model, 298 CookieTreeNode::DetailedInfo::TYPE_APPCACHE); 299 } 300 301 std::string GetDisplayedIndexedDBs(CookiesTreeModel* cookies_model) { 302 return GetDisplayedNodes(cookies_model, 303 CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB); 304 } 305 306 std::string GetDisplayedFileSystems(CookiesTreeModel* cookies_model) { 307 return GetDisplayedNodes(cookies_model, 308 CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM); 309 } 310 311 std::string GetDisplayedQuotas(CookiesTreeModel* cookies_model) { 312 return GetDisplayedNodes(cookies_model, 313 CookieTreeNode::DetailedInfo::TYPE_QUOTA); 314 } 315 316 std::string GetDisplayedServerBoundCerts(CookiesTreeModel* cookies_model) { 317 return GetDisplayedNodes( 318 cookies_model, CookieTreeNode::DetailedInfo::TYPE_SERVER_BOUND_CERT); 319 } 320 321 std::string GetDisplayedFlashLSOs(CookiesTreeModel* cookies_model) { 322 return GetDisplayedNodes( 323 cookies_model, CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO); 324 } 325 326 // Do not call on the root. 327 void DeleteStoredObjects(CookieTreeNode* node) { 328 node->DeleteStoredObjects(); 329 CookieTreeNode* parent_node = node->parent(); 330 DCHECK(parent_node); 331 delete parent_node->GetModel()->Remove(parent_node, node); 332 } 333 334 protected: 335 content::TestBrowserThreadBundle thread_bundle_; 336 scoped_ptr<TestingProfile> profile_; 337 scoped_refptr<MockBrowsingDataCookieHelper> 338 mock_browsing_data_cookie_helper_; 339 scoped_refptr<MockBrowsingDataDatabaseHelper> 340 mock_browsing_data_database_helper_; 341 scoped_refptr<MockBrowsingDataLocalStorageHelper> 342 mock_browsing_data_local_storage_helper_; 343 scoped_refptr<MockBrowsingDataLocalStorageHelper> 344 mock_browsing_data_session_storage_helper_; 345 scoped_refptr<MockBrowsingDataAppCacheHelper> 346 mock_browsing_data_appcache_helper_; 347 scoped_refptr<MockBrowsingDataIndexedDBHelper> 348 mock_browsing_data_indexed_db_helper_; 349 scoped_refptr<MockBrowsingDataFileSystemHelper> 350 mock_browsing_data_file_system_helper_; 351 scoped_refptr<MockBrowsingDataQuotaHelper> 352 mock_browsing_data_quota_helper_; 353 scoped_refptr<MockBrowsingDataServerBoundCertHelper> 354 mock_browsing_data_server_bound_cert_helper_; 355 scoped_refptr<MockBrowsingDataFlashLSOHelper> 356 mock_browsing_data_flash_lso_helper_; 357 358 scoped_refptr<ExtensionSpecialStoragePolicy> special_storage_policy_; 359}; 360 361TEST_F(CookiesTreeModelTest, RemoveAll) { 362 scoped_ptr<CookiesTreeModel> cookies_model( 363 CreateCookiesTreeModelWithInitialSample()); 364 365 // Reset the selection of the first row. 366 { 367 SCOPED_TRACE("Before removing"); 368 EXPECT_EQ("A,B,C", 369 GetDisplayedCookies(cookies_model.get())); 370 EXPECT_EQ("db1,db2", 371 GetDisplayedDatabases(cookies_model.get())); 372 EXPECT_EQ("http://host1:1/,http://host2:2/", 373 GetDisplayedLocalStorages(cookies_model.get())); 374 EXPECT_EQ("http://host1:1/,http://host2:2/", 375 GetDisplayedSessionStorages(cookies_model.get())); 376 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 377 GetDisplayedIndexedDBs(cookies_model.get())); 378 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 379 GetDisplayedFileSystems(cookies_model.get())); 380 EXPECT_EQ("quotahost1,quotahost2", 381 GetDisplayedQuotas(cookies_model.get())); 382 EXPECT_EQ("sbc1,sbc2", 383 GetDisplayedServerBoundCerts(cookies_model.get())); 384 EXPECT_EQ("xyz.com", 385 GetDisplayedFlashLSOs(cookies_model.get())); 386 } 387 388 mock_browsing_data_cookie_helper_->Reset(); 389 mock_browsing_data_database_helper_->Reset(); 390 mock_browsing_data_local_storage_helper_->Reset(); 391 mock_browsing_data_session_storage_helper_->Reset(); 392 mock_browsing_data_indexed_db_helper_->Reset(); 393 mock_browsing_data_file_system_helper_->Reset(); 394 395 cookies_model->DeleteAllStoredObjects(); 396 397 // Make sure the nodes are also deleted from the model's cache. 398 // http://crbug.com/43249 399 cookies_model->UpdateSearchResults(base::string16()); 400 401 { 402 // 2 nodes - root and app 403 SCOPED_TRACE("After removing"); 404 EXPECT_EQ(1, cookies_model->GetRoot()->GetTotalNodeCount()); 405 EXPECT_EQ(0, cookies_model->GetRoot()->child_count()); 406 EXPECT_EQ(std::string(), GetDisplayedCookies(cookies_model.get())); 407 EXPECT_TRUE(mock_browsing_data_cookie_helper_->AllDeleted()); 408 EXPECT_TRUE(mock_browsing_data_database_helper_->AllDeleted()); 409 EXPECT_TRUE(mock_browsing_data_local_storage_helper_->AllDeleted()); 410 EXPECT_FALSE(mock_browsing_data_session_storage_helper_->AllDeleted()); 411 EXPECT_TRUE(mock_browsing_data_indexed_db_helper_->AllDeleted()); 412 EXPECT_TRUE(mock_browsing_data_file_system_helper_->AllDeleted()); 413 EXPECT_TRUE(mock_browsing_data_server_bound_cert_helper_->AllDeleted()); 414 EXPECT_TRUE(mock_browsing_data_flash_lso_helper_->AllDeleted()); 415 } 416} 417 418TEST_F(CookiesTreeModelTest, Remove) { 419 scoped_ptr<CookiesTreeModel> cookies_model( 420 CreateCookiesTreeModelWithInitialSample()); 421 422 // Children start out arranged as follows: 423 // 424 // 0. `foo1` 425 // 1. `foo2` 426 // 2. `foo3` 427 // 3. `fshost1` 428 // 4. `fshost2` 429 // 5. `fshost3` 430 // 6. `gdbhost1` 431 // 7. `gdbhost2` 432 // 8. `host1` 433 // 9. `host2` 434 // 10. `idbhost1` 435 // 11. `idbhost2` 436 // 12. `quotahost1` 437 // 13. `quotahost2` 438 // 14. `sbc1` 439 // 15. `sbc2` 440 // 16. `xyz.com` 441 // 442 // Here, we'll remove them one by one, starting from the end, and 443 // check that the state makes sense. 444 445 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(16)); 446 { 447 SCOPED_TRACE("`xyz.com` removed."); 448 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 449 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 450 EXPECT_EQ("http://host1:1/,http://host2:2/", 451 GetDisplayedLocalStorages(cookies_model.get())); 452 EXPECT_EQ("http://host1:1/,http://host2:2/", 453 GetDisplayedSessionStorages(cookies_model.get())); 454 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 455 GetDisplayedFileSystems(cookies_model.get())); 456 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 457 GetDisplayedIndexedDBs(cookies_model.get())); 458 EXPECT_EQ("quotahost1,quotahost2", 459 GetDisplayedQuotas(cookies_model.get())); 460 EXPECT_EQ("sbc1,sbc2", 461 GetDisplayedServerBoundCerts(cookies_model.get())); 462 EXPECT_EQ(51, cookies_model->GetRoot()->GetTotalNodeCount()); 463 } 464 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(15)); 465 { 466 SCOPED_TRACE("`sbc2` removed."); 467 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 468 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 469 EXPECT_EQ("http://host1:1/,http://host2:2/", 470 GetDisplayedLocalStorages(cookies_model.get())); 471 EXPECT_EQ("http://host1:1/,http://host2:2/", 472 GetDisplayedSessionStorages(cookies_model.get())); 473 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 474 GetDisplayedFileSystems(cookies_model.get())); 475 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 476 GetDisplayedIndexedDBs(cookies_model.get())); 477 EXPECT_EQ("quotahost1,quotahost2", 478 GetDisplayedQuotas(cookies_model.get())); 479 EXPECT_EQ("sbc1", 480 GetDisplayedServerBoundCerts(cookies_model.get())); 481 EXPECT_EQ(48, cookies_model->GetRoot()->GetTotalNodeCount()); 482 } 483 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(14)); 484 { 485 SCOPED_TRACE("`sbc1` removed."); 486 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 487 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 488 EXPECT_EQ("http://host1:1/,http://host2:2/", 489 GetDisplayedLocalStorages(cookies_model.get())); 490 EXPECT_EQ("http://host1:1/,http://host2:2/", 491 GetDisplayedSessionStorages(cookies_model.get())); 492 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 493 GetDisplayedFileSystems(cookies_model.get())); 494 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 495 GetDisplayedIndexedDBs(cookies_model.get())); 496 EXPECT_EQ("quotahost1,quotahost2", 497 GetDisplayedQuotas(cookies_model.get())); 498 EXPECT_EQ(45, cookies_model->GetRoot()->GetTotalNodeCount()); 499 } 500 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(13)); 501 { 502 SCOPED_TRACE("`quotahost2` removed."); 503 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 504 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 505 EXPECT_EQ("http://host1:1/,http://host2:2/", 506 GetDisplayedLocalStorages(cookies_model.get())); 507 EXPECT_EQ("http://host1:1/,http://host2:2/", 508 GetDisplayedSessionStorages(cookies_model.get())); 509 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 510 GetDisplayedFileSystems(cookies_model.get())); 511 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 512 GetDisplayedIndexedDBs(cookies_model.get())); 513 EXPECT_EQ("quotahost1", 514 GetDisplayedQuotas(cookies_model.get())); 515 EXPECT_EQ(43, cookies_model->GetRoot()->GetTotalNodeCount()); 516 } 517 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(12)); 518 { 519 SCOPED_TRACE("`quotahost1` removed."); 520 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 521 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 522 EXPECT_EQ("http://host1:1/,http://host2:2/", 523 GetDisplayedLocalStorages(cookies_model.get())); 524 EXPECT_EQ("http://host1:1/,http://host2:2/", 525 GetDisplayedSessionStorages(cookies_model.get())); 526 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 527 GetDisplayedFileSystems(cookies_model.get())); 528 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 529 GetDisplayedIndexedDBs(cookies_model.get())); 530 EXPECT_EQ(41, cookies_model->GetRoot()->GetTotalNodeCount()); 531 } 532 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(11)); 533 { 534 SCOPED_TRACE("`idbhost2` removed."); 535 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 536 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 537 EXPECT_EQ("http://host1:1/,http://host2:2/", 538 GetDisplayedLocalStorages(cookies_model.get())); 539 EXPECT_EQ("http://host1:1/,http://host2:2/", 540 GetDisplayedSessionStorages(cookies_model.get())); 541 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 542 GetDisplayedFileSystems(cookies_model.get())); 543 EXPECT_EQ("http://idbhost1:1/", 544 GetDisplayedIndexedDBs(cookies_model.get())); 545 EXPECT_EQ(38, cookies_model->GetRoot()->GetTotalNodeCount()); 546 } 547 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(10)); 548 { 549 SCOPED_TRACE("`idbhost1` removed."); 550 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 551 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 552 EXPECT_EQ("http://host1:1/,http://host2:2/", 553 GetDisplayedLocalStorages(cookies_model.get())); 554 EXPECT_EQ("http://host1:1/,http://host2:2/", 555 GetDisplayedSessionStorages(cookies_model.get())); 556 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 557 GetDisplayedFileSystems(cookies_model.get())); 558 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 559 EXPECT_EQ(35, cookies_model->GetRoot()->GetTotalNodeCount()); 560 } 561 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(9)); 562 { 563 SCOPED_TRACE("`host2` removed."); 564 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 565 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 566 EXPECT_EQ("http://host1:1/", 567 GetDisplayedLocalStorages(cookies_model.get())); 568 EXPECT_EQ("http://host1:1/", 569 GetDisplayedSessionStorages(cookies_model.get())); 570 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 571 GetDisplayedFileSystems(cookies_model.get())); 572 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 573 EXPECT_EQ(30, cookies_model->GetRoot()->GetTotalNodeCount()); 574 } 575 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(8)); 576 { 577 SCOPED_TRACE("`host1` removed."); 578 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 579 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 580 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get())); 581 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get())); 582 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 583 GetDisplayedFileSystems(cookies_model.get())); 584 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 585 EXPECT_EQ(25, cookies_model->GetRoot()->GetTotalNodeCount()); 586 } 587 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(7)); 588 { 589 SCOPED_TRACE("`gdbhost2` removed."); 590 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 591 EXPECT_EQ("db1", GetDisplayedDatabases(cookies_model.get())); 592 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get())); 593 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get())); 594 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 595 GetDisplayedFileSystems(cookies_model.get())); 596 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 597 EXPECT_EQ(22, cookies_model->GetRoot()->GetTotalNodeCount()); 598 } 599 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(6)); 600 { 601 SCOPED_TRACE("`gdbhost1` removed."); 602 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 603 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get())); 604 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get())); 605 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get())); 606 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 607 GetDisplayedFileSystems(cookies_model.get())); 608 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 609 EXPECT_EQ(19, cookies_model->GetRoot()->GetTotalNodeCount()); 610 } 611 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(5)); 612 { 613 SCOPED_TRACE("`fshost3` removed."); 614 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 615 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get())); 616 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get())); 617 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get())); 618 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/", 619 GetDisplayedFileSystems(cookies_model.get())); 620 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 621 EXPECT_EQ(16, cookies_model->GetRoot()->GetTotalNodeCount()); 622 } 623 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(4)); 624 { 625 SCOPED_TRACE("`fshost2` removed."); 626 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 627 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get())); 628 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get())); 629 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get())); 630 EXPECT_EQ("http://fshost1:1/", 631 GetDisplayedFileSystems(cookies_model.get())); 632 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 633 EXPECT_EQ(13, cookies_model->GetRoot()->GetTotalNodeCount()); 634 } 635 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(3)); 636 { 637 SCOPED_TRACE("`fshost1` removed."); 638 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 639 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get())); 640 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get())); 641 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get())); 642 EXPECT_EQ("", GetDisplayedFileSystems(cookies_model.get())); 643 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 644 EXPECT_EQ(10, cookies_model->GetRoot()->GetTotalNodeCount()); 645 } 646 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(2)); 647 { 648 SCOPED_TRACE("`foo3` removed."); 649 EXPECT_STREQ("A,B", GetDisplayedCookies(cookies_model.get()).c_str()); 650 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get())); 651 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get())); 652 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get())); 653 EXPECT_EQ("", GetDisplayedFileSystems(cookies_model.get())); 654 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 655 EXPECT_EQ(7, cookies_model->GetRoot()->GetTotalNodeCount()); 656 } 657 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(1)); 658 { 659 SCOPED_TRACE("`foo2` removed."); 660 EXPECT_STREQ("A", GetDisplayedCookies(cookies_model.get()).c_str()); 661 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get())); 662 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get())); 663 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get())); 664 EXPECT_EQ("", GetDisplayedFileSystems(cookies_model.get())); 665 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 666 EXPECT_EQ(4, cookies_model->GetRoot()->GetTotalNodeCount()); 667 } 668 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(0)); 669 { 670 SCOPED_TRACE("`foo1` removed."); 671 EXPECT_STREQ("", GetDisplayedCookies(cookies_model.get()).c_str()); 672 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get())); 673 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get())); 674 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get())); 675 EXPECT_EQ("", GetDisplayedFileSystems(cookies_model.get())); 676 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get())); 677 EXPECT_EQ(1, cookies_model->GetRoot()->GetTotalNodeCount()); 678 } 679} 680 681TEST_F(CookiesTreeModelTest, RemoveCookiesNode) { 682 scoped_ptr<CookiesTreeModel> cookies_model( 683 CreateCookiesTreeModelWithInitialSample()); 684 685 DeleteStoredObjects( 686 cookies_model->GetRoot()->GetChild(0)->GetChild(0)); 687 { 688 SCOPED_TRACE("First origin removed"); 689 EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 690 // 51 because in this case, the origin remains, although the COOKIES 691 // node beneath it has been deleted. 692 EXPECT_EQ(51, cookies_model->GetRoot()->GetTotalNodeCount()); 693 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 694 EXPECT_EQ("http://host1:1/,http://host2:2/", 695 GetDisplayedLocalStorages(cookies_model.get())); 696 EXPECT_EQ("http://host1:1/,http://host2:2/", 697 GetDisplayedSessionStorages(cookies_model.get())); 698 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 699 GetDisplayedIndexedDBs(cookies_model.get())); 700 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 701 GetDisplayedFileSystems(cookies_model.get())); 702 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(cookies_model.get())); 703 EXPECT_EQ("sbc1,sbc2", GetDisplayedServerBoundCerts(cookies_model.get())); 704 } 705 706 DeleteStoredObjects( 707 cookies_model->GetRoot()->GetChild(6)->GetChild(0)); 708 { 709 SCOPED_TRACE("First database removed"); 710 EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 711 EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get())); 712 EXPECT_EQ("http://host1:1/,http://host2:2/", 713 GetDisplayedLocalStorages(cookies_model.get())); 714 EXPECT_EQ("http://host1:1/,http://host2:2/", 715 GetDisplayedSessionStorages(cookies_model.get())); 716 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 717 GetDisplayedIndexedDBs(cookies_model.get())); 718 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 719 GetDisplayedFileSystems(cookies_model.get())); 720 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(cookies_model.get())); 721 EXPECT_EQ("sbc1,sbc2", GetDisplayedServerBoundCerts(cookies_model.get())); 722 EXPECT_EQ(49, cookies_model->GetRoot()->GetTotalNodeCount()); 723 } 724 725 DeleteStoredObjects( 726 cookies_model->GetRoot()->GetChild(8)->GetChild(0)); 727 { 728 SCOPED_TRACE("First origin removed"); 729 EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str()); 730 EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get())); 731 EXPECT_EQ("http://host2:2/", 732 GetDisplayedLocalStorages(cookies_model.get())); 733 EXPECT_EQ("http://host1:1/,http://host2:2/", 734 GetDisplayedSessionStorages(cookies_model.get())); 735 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 736 GetDisplayedIndexedDBs(cookies_model.get())); 737 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 738 GetDisplayedFileSystems(cookies_model.get())); 739 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(cookies_model.get())); 740 EXPECT_EQ("sbc1,sbc2", GetDisplayedServerBoundCerts(cookies_model.get())); 741 EXPECT_EQ(47, cookies_model->GetRoot()->GetTotalNodeCount()); 742 } 743} 744 745TEST_F(CookiesTreeModelTest, RemoveCookieNode) { 746 scoped_ptr<CookiesTreeModel> cookies_model( 747 CreateCookiesTreeModelWithInitialSample()); 748 749 DeleteStoredObjects( 750 cookies_model->GetRoot()->GetChild(1)->GetChild(0)); 751 { 752 SCOPED_TRACE("Second origin COOKIES node removed"); 753 EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_model.get()).c_str()); 754 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get())); 755 EXPECT_EQ("http://host1:1/,http://host2:2/", 756 GetDisplayedLocalStorages(cookies_model.get())); 757 EXPECT_EQ("http://host1:1/,http://host2:2/", 758 GetDisplayedSessionStorages(cookies_model.get())); 759 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 760 GetDisplayedIndexedDBs(cookies_model.get())); 761 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 762 GetDisplayedFileSystems(cookies_model.get())); 763 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(cookies_model.get())); 764 EXPECT_EQ("sbc1,sbc2", GetDisplayedServerBoundCerts(cookies_model.get())); 765 // 51 because in this case, the origin remains, although the COOKIES 766 // node beneath it has been deleted. 767 EXPECT_EQ(51, cookies_model->GetRoot()->GetTotalNodeCount()); 768 } 769 770 DeleteStoredObjects( 771 cookies_model->GetRoot()->GetChild(6)->GetChild(0)); 772 { 773 SCOPED_TRACE("First database removed"); 774 EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_model.get()).c_str()); 775 EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get())); 776 EXPECT_EQ("http://host1:1/,http://host2:2/", 777 GetDisplayedLocalStorages(cookies_model.get())); 778 EXPECT_EQ("http://host1:1/,http://host2:2/", 779 GetDisplayedSessionStorages(cookies_model.get())); 780 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 781 GetDisplayedIndexedDBs(cookies_model.get())); 782 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 783 GetDisplayedFileSystems(cookies_model.get())); 784 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(cookies_model.get())); 785 EXPECT_EQ("sbc1,sbc2", GetDisplayedServerBoundCerts(cookies_model.get())); 786 EXPECT_EQ(49, cookies_model->GetRoot()->GetTotalNodeCount()); 787 } 788 789 DeleteStoredObjects( 790 cookies_model->GetRoot()->GetChild(8)->GetChild(0)); 791 { 792 SCOPED_TRACE("First origin removed"); 793 EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_model.get()).c_str()); 794 EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get())); 795 EXPECT_EQ("http://host2:2/", 796 GetDisplayedLocalStorages(cookies_model.get())); 797 EXPECT_EQ("http://host1:1/,http://host2:2/", 798 GetDisplayedSessionStorages(cookies_model.get())); 799 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 800 GetDisplayedIndexedDBs(cookies_model.get())); 801 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 802 GetDisplayedFileSystems(cookies_model.get())); 803 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(cookies_model.get())); 804 EXPECT_EQ("sbc1,sbc2", GetDisplayedServerBoundCerts(cookies_model.get())); 805 EXPECT_EQ(47, cookies_model->GetRoot()->GetTotalNodeCount()); 806 } 807} 808 809TEST_F(CookiesTreeModelTest, RemoveSingleCookieNode) { 810 LocalDataContainer* container = 811 new LocalDataContainer(mock_browsing_data_cookie_helper_.get(), 812 mock_browsing_data_database_helper_.get(), 813 mock_browsing_data_local_storage_helper_.get(), 814 mock_browsing_data_session_storage_helper_.get(), 815 mock_browsing_data_appcache_helper_.get(), 816 mock_browsing_data_indexed_db_helper_.get(), 817 mock_browsing_data_file_system_helper_.get(), 818 mock_browsing_data_quota_helper_.get(), 819 mock_browsing_data_server_bound_cert_helper_.get(), 820 mock_browsing_data_flash_lso_helper_.get()); 821 CookiesTreeModel cookies_model( 822 container, special_storage_policy_.get(), false); 823 824 mock_browsing_data_cookie_helper_-> 825 AddCookieSamples(GURL("http://foo1"), "A=1"); 826 mock_browsing_data_cookie_helper_-> 827 AddCookieSamples(GURL("http://foo2"), "B=1"); 828 mock_browsing_data_cookie_helper_-> 829 AddCookieSamples(GURL("http://foo3"), "C=1"); 830 mock_browsing_data_cookie_helper_-> 831 AddCookieSamples(GURL("http://foo3"), "D=1"); 832 mock_browsing_data_cookie_helper_->Notify(); 833 mock_browsing_data_database_helper_->AddDatabaseSamples(); 834 mock_browsing_data_database_helper_->Notify(); 835 mock_browsing_data_local_storage_helper_->AddLocalStorageSamples(); 836 mock_browsing_data_local_storage_helper_->Notify(); 837 mock_browsing_data_session_storage_helper_->AddLocalStorageSamples(); 838 mock_browsing_data_session_storage_helper_->Notify(); 839 mock_browsing_data_indexed_db_helper_->AddIndexedDBSamples(); 840 mock_browsing_data_indexed_db_helper_->Notify(); 841 mock_browsing_data_file_system_helper_->AddFileSystemSamples(); 842 mock_browsing_data_file_system_helper_->Notify(); 843 mock_browsing_data_quota_helper_->AddQuotaSamples(); 844 mock_browsing_data_quota_helper_->Notify(); 845 846 { 847 SCOPED_TRACE("Initial State 4 cookies, 2 databases, 2 local storages, " 848 "2 session storages, 2 indexed DBs, 3 file systems, " 849 "2 quotas."); 850 // 46 because there's the root, then 851 // foo1 -> cookies -> a, 852 // foo2 -> cookies -> b, 853 // foo3 -> cookies -> c,d 854 // dbhost1 -> database -> db1, 855 // dbhost2 -> database -> db2, 856 // host1 -> localstorage -> http://host1:1/, 857 // -> sessionstorage -> http://host1:1/, 858 // host2 -> localstorage -> http://host2:2/, 859 // -> sessionstorage -> http://host2:2/, 860 // idbhost1 -> sessionstorage -> http://idbhost1:1/, 861 // idbhost2 -> sessionstorage -> http://idbhost2:2/, 862 // fshost1 -> filesystem -> http://fshost1:1/, 863 // fshost2 -> filesystem -> http://fshost2:1/, 864 // fshost3 -> filesystem -> http://fshost3:1/, 865 // quotahost1 -> quotahost1, 866 // quotahost2 -> quotahost2. 867 EXPECT_EQ(46, cookies_model.GetRoot()->GetTotalNodeCount()); 868 EXPECT_STREQ("A,B,C,D", GetDisplayedCookies(&cookies_model).c_str()); 869 EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model)); 870 EXPECT_EQ("http://host1:1/,http://host2:2/", 871 GetDisplayedLocalStorages(&cookies_model)); 872 EXPECT_EQ("http://host1:1/,http://host2:2/", 873 GetDisplayedSessionStorages(&cookies_model)); 874 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 875 GetDisplayedIndexedDBs(&cookies_model)); 876 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 877 GetDisplayedFileSystems(&cookies_model)); 878 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(&cookies_model)); 879 } 880 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(2)); 881 { 882 SCOPED_TRACE("Third origin removed"); 883 EXPECT_STREQ("A,B", GetDisplayedCookies(&cookies_model).c_str()); 884 EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model)); 885 EXPECT_EQ("http://host1:1/,http://host2:2/", 886 GetDisplayedLocalStorages(&cookies_model)); 887 EXPECT_EQ("http://host1:1/,http://host2:2/", 888 GetDisplayedSessionStorages(&cookies_model)); 889 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 890 GetDisplayedIndexedDBs(&cookies_model)); 891 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 892 GetDisplayedFileSystems(&cookies_model)); 893 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(&cookies_model)); 894 EXPECT_EQ(42, cookies_model.GetRoot()->GetTotalNodeCount()); 895 } 896} 897 898TEST_F(CookiesTreeModelTest, RemoveSingleCookieNodeOf3) { 899 LocalDataContainer* container = 900 new LocalDataContainer(mock_browsing_data_cookie_helper_.get(), 901 mock_browsing_data_database_helper_.get(), 902 mock_browsing_data_local_storage_helper_.get(), 903 mock_browsing_data_session_storage_helper_.get(), 904 mock_browsing_data_appcache_helper_.get(), 905 mock_browsing_data_indexed_db_helper_.get(), 906 mock_browsing_data_file_system_helper_.get(), 907 mock_browsing_data_quota_helper_.get(), 908 mock_browsing_data_server_bound_cert_helper_.get(), 909 mock_browsing_data_flash_lso_helper_.get()); 910 CookiesTreeModel cookies_model( 911 container, special_storage_policy_.get(), false); 912 913 mock_browsing_data_cookie_helper_-> 914 AddCookieSamples(GURL("http://foo1"), "A=1"); 915 mock_browsing_data_cookie_helper_-> 916 AddCookieSamples(GURL("http://foo2"), "B=1"); 917 mock_browsing_data_cookie_helper_-> 918 AddCookieSamples(GURL("http://foo3"), "C=1"); 919 mock_browsing_data_cookie_helper_-> 920 AddCookieSamples(GURL("http://foo3"), "D=1"); 921 mock_browsing_data_cookie_helper_-> 922 AddCookieSamples(GURL("http://foo3"), "E=1"); 923 mock_browsing_data_cookie_helper_->Notify(); 924 mock_browsing_data_database_helper_->AddDatabaseSamples(); 925 mock_browsing_data_database_helper_->Notify(); 926 mock_browsing_data_local_storage_helper_->AddLocalStorageSamples(); 927 mock_browsing_data_local_storage_helper_->Notify(); 928 mock_browsing_data_session_storage_helper_->AddLocalStorageSamples(); 929 mock_browsing_data_session_storage_helper_->Notify(); 930 mock_browsing_data_indexed_db_helper_->AddIndexedDBSamples(); 931 mock_browsing_data_indexed_db_helper_->Notify(); 932 mock_browsing_data_file_system_helper_->AddFileSystemSamples(); 933 mock_browsing_data_file_system_helper_->Notify(); 934 mock_browsing_data_quota_helper_->AddQuotaSamples(); 935 mock_browsing_data_quota_helper_->Notify(); 936 937 { 938 SCOPED_TRACE("Initial State 5 cookies, 2 databases, 2 local storages, " 939 "2 session storages, 2 indexed DBs, 3 filesystems, " 940 "2 quotas."); 941 // 47 because there's the root, then 942 // foo1 -> cookies -> a, 943 // foo2 -> cookies -> b, 944 // foo3 -> cookies -> c,d,e 945 // dbhost1 -> database -> db1, 946 // dbhost2 -> database -> db2, 947 // host1 -> localstorage -> http://host1:1/, 948 // -> sessionstorage -> http://host1:1/, 949 // host2 -> localstorage -> http://host2:2/, 950 // -> sessionstorage -> http://host2:2/, 951 // idbhost1 -> sessionstorage -> http://idbhost1:1/, 952 // idbhost2 -> sessionstorage -> http://idbhost2:2/, 953 // fshost1 -> filesystem -> http://fshost1:1/, 954 // fshost2 -> filesystem -> http://fshost2:1/, 955 // fshost3 -> filesystem -> http://fshost3:1/, 956 // quotahost1 -> quotahost1, 957 // quotahost2 -> quotahost2. 958 EXPECT_EQ(47, cookies_model.GetRoot()->GetTotalNodeCount()); 959 EXPECT_STREQ("A,B,C,D,E", GetDisplayedCookies(&cookies_model).c_str()); 960 EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model)); 961 EXPECT_EQ("http://host1:1/,http://host2:2/", 962 GetDisplayedLocalStorages(&cookies_model)); 963 EXPECT_EQ("http://host1:1/,http://host2:2/", 964 GetDisplayedSessionStorages(&cookies_model)); 965 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 966 GetDisplayedIndexedDBs(&cookies_model)); 967 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 968 GetDisplayedFileSystems(&cookies_model)); 969 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(&cookies_model)); 970 } 971 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(2)->GetChild(0)-> 972 GetChild(1)); 973 { 974 SCOPED_TRACE("Middle cookie in third origin removed"); 975 EXPECT_STREQ("A,B,C,E", GetDisplayedCookies(&cookies_model).c_str()); 976 EXPECT_EQ(46, cookies_model.GetRoot()->GetTotalNodeCount()); 977 EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model)); 978 EXPECT_EQ("http://host1:1/,http://host2:2/", 979 GetDisplayedLocalStorages(&cookies_model)); 980 EXPECT_EQ("http://host1:1/,http://host2:2/", 981 GetDisplayedSessionStorages(&cookies_model)); 982 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/", 983 GetDisplayedIndexedDBs(&cookies_model)); 984 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 985 GetDisplayedFileSystems(&cookies_model)); 986 EXPECT_EQ("quotahost1,quotahost2", GetDisplayedQuotas(&cookies_model)); 987 } 988} 989 990TEST_F(CookiesTreeModelTest, RemoveSecondOrigin) { 991 LocalDataContainer* container = 992 new LocalDataContainer(mock_browsing_data_cookie_helper_.get(), 993 mock_browsing_data_database_helper_.get(), 994 mock_browsing_data_local_storage_helper_.get(), 995 mock_browsing_data_session_storage_helper_.get(), 996 mock_browsing_data_appcache_helper_.get(), 997 mock_browsing_data_indexed_db_helper_.get(), 998 mock_browsing_data_file_system_helper_.get(), 999 mock_browsing_data_quota_helper_.get(), 1000 mock_browsing_data_server_bound_cert_helper_.get(), 1001 mock_browsing_data_flash_lso_helper_.get()); 1002 CookiesTreeModel cookies_model( 1003 container, special_storage_policy_.get(), false); 1004 1005 mock_browsing_data_cookie_helper_-> 1006 AddCookieSamples(GURL("http://foo1"), "A=1"); 1007 mock_browsing_data_cookie_helper_-> 1008 AddCookieSamples(GURL("http://foo2"), "B=1"); 1009 mock_browsing_data_cookie_helper_-> 1010 AddCookieSamples(GURL("http://foo3"), "C=1"); 1011 mock_browsing_data_cookie_helper_-> 1012 AddCookieSamples(GURL("http://foo3"), "D=1"); 1013 mock_browsing_data_cookie_helper_-> 1014 AddCookieSamples(GURL("http://foo3"), "E=1"); 1015 mock_browsing_data_cookie_helper_->Notify(); 1016 1017 { 1018 SCOPED_TRACE("Initial State 5 cookies"); 1019 // 12 because there's the root, then foo1 -> cookies -> a, 1020 // foo2 -> cookies -> b, foo3 -> cookies -> c,d,e 1021 EXPECT_EQ(12, cookies_model.GetRoot()->GetTotalNodeCount()); 1022 EXPECT_STREQ("A,B,C,D,E", GetDisplayedCookies(&cookies_model).c_str()); 1023 } 1024 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(1)); 1025 { 1026 SCOPED_TRACE("Second origin removed"); 1027 EXPECT_STREQ("A,C,D,E", GetDisplayedCookies(&cookies_model).c_str()); 1028 // Left with root -> foo1 -> cookies -> a, foo3 -> cookies -> c,d,e 1029 EXPECT_EQ(9, cookies_model.GetRoot()->GetTotalNodeCount()); 1030 } 1031} 1032 1033TEST_F(CookiesTreeModelTest, OriginOrdering) { 1034 LocalDataContainer* container = 1035 new LocalDataContainer(mock_browsing_data_cookie_helper_.get(), 1036 mock_browsing_data_database_helper_.get(), 1037 mock_browsing_data_local_storage_helper_.get(), 1038 mock_browsing_data_session_storage_helper_.get(), 1039 mock_browsing_data_appcache_helper_.get(), 1040 mock_browsing_data_indexed_db_helper_.get(), 1041 mock_browsing_data_file_system_helper_.get(), 1042 mock_browsing_data_quota_helper_.get(), 1043 mock_browsing_data_server_bound_cert_helper_.get(), 1044 mock_browsing_data_flash_lso_helper_.get()); 1045 CookiesTreeModel cookies_model( 1046 container, special_storage_policy_.get(), false); 1047 1048 mock_browsing_data_cookie_helper_-> 1049 AddCookieSamples(GURL("http://a.foo2.com"), "A=1"); 1050 mock_browsing_data_cookie_helper_-> 1051 AddCookieSamples(GURL("http://foo2.com"), "B=1"); 1052 mock_browsing_data_cookie_helper_-> 1053 AddCookieSamples(GURL("http://b.foo1.com"), "C=1"); 1054 // Leading dot on the foo4 1055 mock_browsing_data_cookie_helper_->AddCookieSamples( 1056 GURL("http://foo4.com"), "D=1; domain=.foo4.com; path=/;"); 1057 mock_browsing_data_cookie_helper_-> 1058 AddCookieSamples(GURL("http://a.foo1.com"), "E=1"); 1059 mock_browsing_data_cookie_helper_-> 1060 AddCookieSamples(GURL("http://foo1.com"), "F=1"); 1061 mock_browsing_data_cookie_helper_-> 1062 AddCookieSamples(GURL("http://foo3.com"), "G=1"); 1063 mock_browsing_data_cookie_helper_-> 1064 AddCookieSamples(GURL("http://foo4.com"), "H=1"); 1065 mock_browsing_data_cookie_helper_->Notify(); 1066 1067 { 1068 SCOPED_TRACE("Initial State 8 cookies"); 1069 EXPECT_EQ(23, cookies_model.GetRoot()->GetTotalNodeCount()); 1070 EXPECT_STREQ("F,E,C,B,A,G,D,H", 1071 GetDisplayedCookies(&cookies_model).c_str()); 1072 } 1073 // Delete "E" 1074 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(1)); 1075 { 1076 EXPECT_STREQ("F,C,B,A,G,D,H", GetDisplayedCookies(&cookies_model).c_str()); 1077 } 1078} 1079 1080TEST_F(CookiesTreeModelTest, ContentSettings) { 1081 GURL host("http://xyz.com/"); 1082 LocalDataContainer* container = 1083 new LocalDataContainer(mock_browsing_data_cookie_helper_.get(), 1084 mock_browsing_data_database_helper_.get(), 1085 mock_browsing_data_local_storage_helper_.get(), 1086 mock_browsing_data_session_storage_helper_.get(), 1087 mock_browsing_data_appcache_helper_.get(), 1088 mock_browsing_data_indexed_db_helper_.get(), 1089 mock_browsing_data_file_system_helper_.get(), 1090 mock_browsing_data_quota_helper_.get(), 1091 mock_browsing_data_server_bound_cert_helper_.get(), 1092 mock_browsing_data_flash_lso_helper_.get()); 1093 CookiesTreeModel cookies_model( 1094 container, special_storage_policy_.get(), false); 1095 1096 mock_browsing_data_cookie_helper_->AddCookieSamples(host, "A=1"); 1097 mock_browsing_data_cookie_helper_->Notify(); 1098 1099 TestingProfile profile; 1100 HostContentSettingsMap* content_settings = 1101 profile.GetHostContentSettingsMap(); 1102 CookieSettings* cookie_settings = 1103 CookieSettings::Factory::GetForProfile(&profile).get(); 1104 MockSettingsObserver observer; 1105 1106 CookieTreeRootNode* root = 1107 static_cast<CookieTreeRootNode*>(cookies_model.GetRoot()); 1108 CookieTreeHostNode* origin = 1109 root->GetOrCreateHostNode(host); 1110 1111 EXPECT_EQ(1, origin->child_count()); 1112 EXPECT_TRUE(origin->CanCreateContentException()); 1113 EXPECT_CALL(observer, 1114 OnContentSettingsChanged( 1115 content_settings, 1116 CONTENT_SETTINGS_TYPE_COOKIES, 1117 false, 1118 ContentSettingsPattern::FromURLNoWildcard(host), 1119 ContentSettingsPattern::Wildcard(), 1120 false)); 1121 EXPECT_CALL(observer, 1122 OnContentSettingsChanged(content_settings, 1123 CONTENT_SETTINGS_TYPE_COOKIES, 1124 false, 1125 ContentSettingsPattern::FromURL(host), 1126 ContentSettingsPattern::Wildcard(), 1127 false)); 1128 origin->CreateContentException( 1129 cookie_settings, CONTENT_SETTING_SESSION_ONLY); 1130 EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(host, host)); 1131 EXPECT_TRUE(cookie_settings->IsCookieSessionOnly(host)); 1132} 1133 1134TEST_F(CookiesTreeModelTest, FileSystemFilter) { 1135 scoped_ptr<CookiesTreeModel> cookies_model( 1136 CreateCookiesTreeModelWithInitialSample()); 1137 1138 cookies_model->UpdateSearchResults(ASCIIToUTF16("fshost1")); 1139 EXPECT_EQ("http://fshost1:1/", 1140 GetDisplayedFileSystems(cookies_model.get())); 1141 1142 cookies_model->UpdateSearchResults(ASCIIToUTF16("fshost2")); 1143 EXPECT_EQ("http://fshost2:2/", 1144 GetDisplayedFileSystems(cookies_model.get())); 1145 1146 cookies_model->UpdateSearchResults(ASCIIToUTF16("fshost3")); 1147 EXPECT_EQ("http://fshost3:3/", 1148 GetDisplayedFileSystems(cookies_model.get())); 1149 1150 cookies_model->UpdateSearchResults(base::string16()); 1151 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/", 1152 GetDisplayedFileSystems(cookies_model.get())); 1153} 1154 1155TEST_F(CookiesTreeModelTest, CookiesFilter) { 1156 LocalDataContainer* container = 1157 new LocalDataContainer(mock_browsing_data_cookie_helper_.get(), 1158 mock_browsing_data_database_helper_.get(), 1159 mock_browsing_data_local_storage_helper_.get(), 1160 mock_browsing_data_session_storage_helper_.get(), 1161 mock_browsing_data_appcache_helper_.get(), 1162 mock_browsing_data_indexed_db_helper_.get(), 1163 mock_browsing_data_file_system_helper_.get(), 1164 mock_browsing_data_quota_helper_.get(), 1165 mock_browsing_data_server_bound_cert_helper_.get(), 1166 mock_browsing_data_flash_lso_helper_.get()); 1167 CookiesTreeModel cookies_model( 1168 container, special_storage_policy_.get(), false); 1169 1170 mock_browsing_data_cookie_helper_-> 1171 AddCookieSamples(GURL("http://123.com"), "A=1"); 1172 mock_browsing_data_cookie_helper_-> 1173 AddCookieSamples(GURL("http://foo1.com"), "B=1"); 1174 mock_browsing_data_cookie_helper_-> 1175 AddCookieSamples(GURL("http://foo2.com"), "C=1"); 1176 mock_browsing_data_cookie_helper_-> 1177 AddCookieSamples(GURL("http://foo3.com"), "D=1"); 1178 mock_browsing_data_cookie_helper_->Notify(); 1179 EXPECT_EQ("A,B,C,D", GetDisplayedCookies(&cookies_model)); 1180 1181 cookies_model.UpdateSearchResults(base::string16(ASCIIToUTF16("foo"))); 1182 EXPECT_EQ("B,C,D", GetDisplayedCookies(&cookies_model)); 1183 1184 cookies_model.UpdateSearchResults(base::string16(ASCIIToUTF16("2"))); 1185 EXPECT_EQ("A,C", GetDisplayedCookies(&cookies_model)); 1186 1187 cookies_model.UpdateSearchResults(base::string16(ASCIIToUTF16("foo3"))); 1188 EXPECT_EQ("D", GetDisplayedCookies(&cookies_model)); 1189 1190 cookies_model.UpdateSearchResults(base::string16()); 1191 EXPECT_EQ("A,B,C,D", GetDisplayedCookies(&cookies_model)); 1192} 1193 1194} // namespace 1195