Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / browsing_data / cookies_tree_model_unittest.cc
blob9b733f4a6a3c8d8dec6a35db47dc3140605c9510
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.
5 #include "chrome/browser/browsing_data/cookies_tree_model.h"
7 #include <string>
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"
32 #include "base/strings/utf_string_conversions.h"
34 using ::testing::_;
35 using content::BrowserThread;
37 namespace {
39 class 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();
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(profile_.get());
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());
71 scoped_refptr<CookieSettings> cookie_settings =
72 new CookieSettings(profile_->GetHostContentSettingsMap(),
73 profile_->GetPrefs());
74 special_storage_policy_ =
75 new ExtensionSpecialStoragePolicy(cookie_settings.get());
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();
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());
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();
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));
175 return make_scoped_ptr(cookies_model);
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);
186 return retval;
189 if (node->GetDetailedInfo().node_type != node_type)
190 return std::string();
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();
224 std::string GetCookiesOfChildren(const CookieTreeNode* node) {
225 return GetNodesOfChildren(node, CookieTreeNode::DetailedInfo::TYPE_COOKIE);
228 std::string GetDatabasesOfChildren(const CookieTreeNode* node) {
229 return GetNodesOfChildren(node,
230 CookieTreeNode::DetailedInfo::TYPE_DATABASE);
233 std::string GetLocalStoragesOfChildren(const CookieTreeNode* node) {
234 return GetNodesOfChildren(node,
235 CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE);
238 std::string GetSessionStoragesOfChildren(const CookieTreeNode* node) {
239 return GetNodesOfChildren(
240 node, CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE);
243 std::string GetIndexedDBsOfChildren(const CookieTreeNode* node) {
244 return GetNodesOfChildren(
245 node, CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB);
248 std::string GetFileSystemsOfChildren(const CookieTreeNode* node) {
249 return GetNodesOfChildren(
250 node, CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM);
253 std::string GetFileQuotaOfChildren(const CookieTreeNode* node) {
254 return GetNodesOfChildren(
255 node, CookieTreeNode::DetailedInfo::TYPE_QUOTA);
258 std::string GetFlashLSOsOfChildren(const CookieTreeNode* node) {
259 return GetNodesOfChildren(
260 node, CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO);
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;
276 std::string GetDisplayedCookies(CookiesTreeModel* cookies_model) {
277 return GetDisplayedNodes(cookies_model,
278 CookieTreeNode::DetailedInfo::TYPE_COOKIE);
281 std::string GetDisplayedDatabases(CookiesTreeModel* cookies_model) {
282 return GetDisplayedNodes(cookies_model,
283 CookieTreeNode::DetailedInfo::TYPE_DATABASE);
286 std::string GetDisplayedLocalStorages(CookiesTreeModel* cookies_model) {
287 return GetDisplayedNodes(cookies_model,
288 CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE);
291 std::string GetDisplayedSessionStorages(CookiesTreeModel* cookies_model) {
292 return GetDisplayedNodes(
293 cookies_model, CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE);
296 std::string GetDisplayedAppCaches(CookiesTreeModel* cookies_model) {
297 return GetDisplayedNodes(cookies_model,
298 CookieTreeNode::DetailedInfo::TYPE_APPCACHE);
301 std::string GetDisplayedIndexedDBs(CookiesTreeModel* cookies_model) {
302 return GetDisplayedNodes(cookies_model,
303 CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB);
306 std::string GetDisplayedFileSystems(CookiesTreeModel* cookies_model) {
307 return GetDisplayedNodes(cookies_model,
308 CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM);
311 std::string GetDisplayedQuotas(CookiesTreeModel* cookies_model) {
312 return GetDisplayedNodes(cookies_model,
313 CookieTreeNode::DetailedInfo::TYPE_QUOTA);
316 std::string GetDisplayedServerBoundCerts(CookiesTreeModel* cookies_model) {
317 return GetDisplayedNodes(
318 cookies_model, CookieTreeNode::DetailedInfo::TYPE_SERVER_BOUND_CERT);
321 std::string GetDisplayedFlashLSOs(CookiesTreeModel* cookies_model) {
322 return GetDisplayedNodes(
323 cookies_model, CookieTreeNode::DetailedInfo::TYPE_FLASH_LSO);
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);
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_;
358 scoped_refptr<ExtensionSpecialStoragePolicy> special_storage_policy_;
361 TEST_F(CookiesTreeModelTest, RemoveAll) {
362 scoped_ptr<CookiesTreeModel> cookies_model(
363 CreateCookiesTreeModelWithInitialSample());
365 // Reset the selection of the first row.
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()));
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();
395 cookies_model->DeleteAllStoredObjects();
397 // Make sure the nodes are also deleted from the model's cache.
398 // http://crbug.com/43249
399 cookies_model->UpdateSearchResults(base::string16());
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());
418 TEST_F(CookiesTreeModelTest, Remove) {
419 scoped_ptr<CookiesTreeModel> cookies_model(
420 CreateCookiesTreeModelWithInitialSample());
422 // Children start out arranged as follows:
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`
442 // Here, we'll remove them one by one, starting from the end, and
443 // check that the state makes sense.
445 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(16));
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());
464 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(15));
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());
483 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(14));
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());
500 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(13));
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());
517 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(12));
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());
532 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(11));
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());
547 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(10));
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());
561 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(9));
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());
575 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(8));
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());
587 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(7));
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());
599 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(6));
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());
611 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(5));
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());
623 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(4));
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());
635 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(3));
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());
646 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(2));
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());
657 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(1));
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());
668 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(0));
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());
681 TEST_F(CookiesTreeModelTest, RemoveCookiesNode) {
682 scoped_ptr<CookiesTreeModel> cookies_model(
683 CreateCookiesTreeModelWithInitialSample());
685 DeleteStoredObjects(
686 cookies_model->GetRoot()->GetChild(0)->GetChild(0));
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()));
706 DeleteStoredObjects(
707 cookies_model->GetRoot()->GetChild(6)->GetChild(0));
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());
725 DeleteStoredObjects(
726 cookies_model->GetRoot()->GetChild(8)->GetChild(0));
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());
745 TEST_F(CookiesTreeModelTest, RemoveCookieNode) {
746 scoped_ptr<CookiesTreeModel> cookies_model(
747 CreateCookiesTreeModelWithInitialSample());
749 DeleteStoredObjects(
750 cookies_model->GetRoot()->GetChild(1)->GetChild(0));
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());
770 DeleteStoredObjects(
771 cookies_model->GetRoot()->GetChild(6)->GetChild(0));
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());
789 DeleteStoredObjects(
790 cookies_model->GetRoot()->GetChild(8)->GetChild(0));
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());
809 TEST_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);
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();
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));
880 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(2));
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());
898 TEST_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);
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();
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));
971 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(2)->GetChild(0)->
972 GetChild(1));
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));
990 TEST_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);
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();
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());
1024 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(1));
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());
1033 TEST_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);
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();
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());
1073 // Delete "E"
1074 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(1));
1076 EXPECT_STREQ("F,C,B,A,G,D,H", GetDisplayedCookies(&cookies_model).c_str());
1080 TEST_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);
1096 mock_browsing_data_cookie_helper_->AddCookieSamples(host, "A=1");
1097 mock_browsing_data_cookie_helper_->Notify();
1099 TestingProfile profile;
1100 HostContentSettingsMap* content_settings =
1101 profile.GetHostContentSettingsMap();
1102 CookieSettings* cookie_settings =
1103 CookieSettings::Factory::GetForProfile(&profile).get();
1104 MockSettingsObserver observer;
1106 CookieTreeRootNode* root =
1107 static_cast<CookieTreeRootNode*>(cookies_model.GetRoot());
1108 CookieTreeHostNode* origin =
1109 root->GetOrCreateHostNode(host);
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));
1134 TEST_F(CookiesTreeModelTest, FileSystemFilter) {
1135 scoped_ptr<CookiesTreeModel> cookies_model(
1136 CreateCookiesTreeModelWithInitialSample());
1138 cookies_model->UpdateSearchResults(base::ASCIIToUTF16("fshost1"));
1139 EXPECT_EQ("http://fshost1:1/",
1140 GetDisplayedFileSystems(cookies_model.get()));
1142 cookies_model->UpdateSearchResults(base::ASCIIToUTF16("fshost2"));
1143 EXPECT_EQ("http://fshost2:2/",
1144 GetDisplayedFileSystems(cookies_model.get()));
1146 cookies_model->UpdateSearchResults(base::ASCIIToUTF16("fshost3"));
1147 EXPECT_EQ("http://fshost3:3/",
1148 GetDisplayedFileSystems(cookies_model.get()));
1150 cookies_model->UpdateSearchResults(base::string16());
1151 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
1152 GetDisplayedFileSystems(cookies_model.get()));
1155 TEST_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);
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));
1181 cookies_model.UpdateSearchResults(base::string16(base::ASCIIToUTF16("foo")));
1182 EXPECT_EQ("B,C,D", GetDisplayedCookies(&cookies_model));
1184 cookies_model.UpdateSearchResults(base::string16(base::ASCIIToUTF16("2")));
1185 EXPECT_EQ("A,C", GetDisplayedCookies(&cookies_model));
1187 cookies_model.UpdateSearchResults(base::string16(base::ASCIIToUTF16("foo3")));
1188 EXPECT_EQ("D", GetDisplayedCookies(&cookies_model));
1190 cookies_model.UpdateSearchResults(base::string16());
1191 EXPECT_EQ("A,B,C,D", GetDisplayedCookies(&cookies_model));
1194 } // namespace