Print Preview: Changing displayed error message when PDF Viewer is missing.
[chromium-blink-merge.git] / chrome / browser / cookies_tree_model_unittest.cc
blobe80b326deb4ed242e34f7a6f8c994015183241d4
1 // Copyright (c) 2011 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/cookies_tree_model.h"
7 #include <string>
9 #include "chrome/browser/content_settings/host_content_settings_map.h"
10 #include "chrome/browser/content_settings/mock_settings_observer.h"
11 #include "chrome/browser/mock_browsing_data_appcache_helper.h"
12 #include "chrome/browser/mock_browsing_data_database_helper.h"
13 #include "chrome/browser/mock_browsing_data_file_system_helper.h"
14 #include "chrome/browser/mock_browsing_data_indexed_db_helper.h"
15 #include "chrome/browser/mock_browsing_data_local_storage_helper.h"
16 #include "chrome/test/testing_profile.h"
17 #include "content/common/notification_details.h"
18 #include "content/common/notification_type.h"
19 #include "net/url_request/url_request_context.h"
20 #include "net/url_request/url_request_context_getter.h"
21 #include "testing/gtest/include/gtest/gtest.h"
23 #include "base/utf_string_conversions.h"
25 using ::testing::_;
27 namespace {
29 class CookiesTreeModelTest : public testing::Test {
30 public:
31 CookiesTreeModelTest() : ui_thread_(BrowserThread::UI, &message_loop_),
32 io_thread_(BrowserThread::IO, &message_loop_) {
35 virtual ~CookiesTreeModelTest() {
38 virtual void SetUp() {
39 profile_.reset(new TestingProfile());
40 profile_->CreateRequestContext();
41 mock_browsing_data_database_helper_ =
42 new MockBrowsingDataDatabaseHelper(profile_.get());
43 mock_browsing_data_local_storage_helper_ =
44 new MockBrowsingDataLocalStorageHelper(profile_.get());
45 mock_browsing_data_session_storage_helper_ =
46 new MockBrowsingDataLocalStorageHelper(profile_.get());
47 mock_browsing_data_appcache_helper_ =
48 new MockBrowsingDataAppCacheHelper(profile_.get());
49 mock_browsing_data_indexed_db_helper_ =
50 new MockBrowsingDataIndexedDBHelper(profile_.get());
51 mock_browsing_data_file_system_helper_ =
52 new MockBrowsingDataFileSystemHelper(profile_.get());
55 CookiesTreeModel* CreateCookiesTreeModelWithInitialSample() {
56 net::CookieMonster* monster = profile_->GetCookieMonster();
57 monster->SetCookie(GURL("http://foo1"), "A=1");
58 monster->SetCookie(GURL("http://foo2"), "B=1");
59 monster->SetCookie(GURL("http://foo3"), "C=1");
60 CookiesTreeModel* cookies_model = new CookiesTreeModel(
61 monster, mock_browsing_data_database_helper_,
62 mock_browsing_data_local_storage_helper_,
63 mock_browsing_data_session_storage_helper_,
64 mock_browsing_data_appcache_helper_,
65 mock_browsing_data_indexed_db_helper_,
66 mock_browsing_data_file_system_helper_,
67 false);
68 mock_browsing_data_database_helper_->AddDatabaseSamples();
69 mock_browsing_data_database_helper_->Notify();
70 mock_browsing_data_local_storage_helper_->AddLocalStorageSamples();
71 mock_browsing_data_local_storage_helper_->Notify();
72 mock_browsing_data_session_storage_helper_->AddLocalStorageSamples();
73 mock_browsing_data_session_storage_helper_->Notify();
74 mock_browsing_data_indexed_db_helper_->AddIndexedDBSamples();
75 mock_browsing_data_indexed_db_helper_->Notify();
76 mock_browsing_data_file_system_helper_->AddFileSystemSamples();
77 mock_browsing_data_file_system_helper_->Notify();
79 SCOPED_TRACE("Initial State 3 cookies, 2 databases, 2 local storages, "
80 "2 session storages, 2 indexed DBs, 3 filesystems");
81 // 41 because there's the root, then foo1 -> cookies -> a,
82 // foo2 -> cookies -> b, foo3 -> cookies -> c,
83 // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
84 // fshost1 -> filesystem -> http://fshost1:1/,
85 // fshost2 -> filesystem -> http://fshost2:1/,
86 // fshost3 -> filesystem -> http://fshost3:1/,
87 // host1 -> localstorage -> http://host1:1/,
88 // host2 -> localstorage -> http://host2:2/.
89 // host1 -> sessionstorage -> http://host1:1/,
90 // host2 -> sessionstorage -> http://host2:2/,
91 // idbhost1 -> indexeddb -> http://idbhost1:1/,
92 // idbhost2 -> indexeddb -> http://idbhost2:2/.
93 EXPECT_EQ(41, cookies_model->GetRoot()->GetTotalNodeCount());
94 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model));
95 EXPECT_EQ("http://host1:1/,http://host2:2/",
96 GetDisplayedLocalStorages(cookies_model));
97 EXPECT_EQ("http://host1:1/,http://host2:2/",
98 GetDisplayedSessionStorages(cookies_model));
99 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
100 GetDisplayedIndexedDBs(cookies_model));
101 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
102 GetDisplayedFileSystems(cookies_model));
104 return cookies_model;
107 // Get the cookie names in the cookie list, as a comma seperated string.
108 // (Note that the CookieMonster cookie list is sorted by domain.)
109 // Ex:
110 // monster->SetCookie(GURL("http://b"), "X=1")
111 // monster->SetCookie(GURL("http://a"), "Y=1")
112 // EXPECT_STREQ("Y,X", GetMonsterCookies(monster).c_str());
113 std::string GetMonsterCookies(net::CookieMonster* monster) {
114 std::vector<std::string> parts;
115 net::CookieList cookie_list = monster->GetAllCookies();
116 for (size_t i = 0; i < cookie_list.size(); ++i)
117 parts.push_back(cookie_list[i].Name());
118 return JoinString(parts, ',');
121 std::string GetNodesOfChildren(
122 const CookieTreeNode* node,
123 CookieTreeNode::DetailedInfo::NodeType node_type) {
124 if (node->child_count()) {
125 std::string retval;
126 for (int i = 0; i < node->child_count(); ++i) {
127 retval += GetNodesOfChildren(node->GetChild(i), node_type);
129 return retval;
130 } else {
131 if (node->GetDetailedInfo().node_type == node_type) {
132 switch (node_type) {
133 case CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE:
134 return node->GetDetailedInfo().session_storage_info->origin + ",";
135 case CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE:
136 return node->GetDetailedInfo().local_storage_info->origin + ",";
137 case CookieTreeNode::DetailedInfo::TYPE_DATABASE:
138 return node->GetDetailedInfo().database_info->database_name + ",";
139 case CookieTreeNode::DetailedInfo::TYPE_COOKIE:
140 return node->GetDetailedInfo().cookie->Name() + ",";
141 case CookieTreeNode::DetailedInfo::TYPE_APPCACHE:
142 return node->GetDetailedInfo().appcache_info->manifest_url.spec() +
143 ",";
144 case CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB:
145 return node->GetDetailedInfo().indexed_db_info->origin + ",";
146 case CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM:
147 return node->GetDetailedInfo().file_system_info->origin.spec() +
148 ",";
149 default:
150 return "";
152 } else {
153 return "";
158 std::string GetCookiesOfChildren(const CookieTreeNode* node) {
159 return GetNodesOfChildren(node, CookieTreeNode::DetailedInfo::TYPE_COOKIE);
162 std::string GetDatabasesOfChildren(const CookieTreeNode* node) {
163 return GetNodesOfChildren(node,
164 CookieTreeNode::DetailedInfo::TYPE_DATABASE);
167 std::string GetLocalStoragesOfChildren(const CookieTreeNode* node) {
168 return GetNodesOfChildren(node,
169 CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE);
172 std::string GetSessionStoragesOfChildren(const CookieTreeNode* node) {
173 return GetNodesOfChildren(
174 node, CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE);
177 std::string GetIndexedDBsOfChildren(const CookieTreeNode* node) {
178 return GetNodesOfChildren(
179 node, CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB);
182 std::string GetFileSystemsOfChildren(const CookieTreeNode* node) {
183 return GetNodesOfChildren(
184 node, CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM);
187 // Get the nodes names displayed in the view (if we had one) in the order
188 // they are displayed, as a comma seperated string.
189 // Ex: EXPECT_STREQ("X,Y", GetDisplayedNodes(cookies_view, type).c_str());
190 std::string GetDisplayedNodes(CookiesTreeModel* cookies_model,
191 CookieTreeNode::DetailedInfo::NodeType type) {
192 CookieTreeRootNode* root = static_cast<CookieTreeRootNode*>(
193 cookies_model->GetRoot());
194 std::string retval = GetNodesOfChildren(root, type);
195 if (retval.length() && retval[retval.length() - 1] == ',')
196 retval.erase(retval.length() - 1);
197 return retval;
200 std::string GetDisplayedCookies(CookiesTreeModel* cookies_model) {
201 return GetDisplayedNodes(cookies_model,
202 CookieTreeNode::DetailedInfo::TYPE_COOKIE);
205 std::string GetDisplayedDatabases(CookiesTreeModel* cookies_model) {
206 return GetDisplayedNodes(cookies_model,
207 CookieTreeNode::DetailedInfo::TYPE_DATABASE);
210 std::string GetDisplayedLocalStorages(CookiesTreeModel* cookies_model) {
211 return GetDisplayedNodes(cookies_model,
212 CookieTreeNode::DetailedInfo::TYPE_LOCAL_STORAGE);
215 std::string GetDisplayedSessionStorages(CookiesTreeModel* cookies_model) {
216 return GetDisplayedNodes(
217 cookies_model, CookieTreeNode::DetailedInfo::TYPE_SESSION_STORAGE);
220 std::string GetDisplayedAppCaches(CookiesTreeModel* cookies_model) {
221 return GetDisplayedNodes(cookies_model,
222 CookieTreeNode::DetailedInfo::TYPE_APPCACHE);
225 std::string GetDisplayedIndexedDBs(CookiesTreeModel* cookies_model) {
226 return GetDisplayedNodes(cookies_model,
227 CookieTreeNode::DetailedInfo::TYPE_INDEXED_DB);
230 std::string GetDisplayedFileSystems(CookiesTreeModel* cookies_model) {
231 return GetDisplayedNodes(cookies_model,
232 CookieTreeNode::DetailedInfo::TYPE_FILE_SYSTEM);
235 // Do not call on the root.
236 void DeleteStoredObjects(CookieTreeNode* node) {
237 node->DeleteStoredObjects();
238 CookieTreeNode* parent_node = node->parent();
239 DCHECK(parent_node);
240 delete parent_node->GetModel()->Remove(parent_node, node);
243 protected:
244 MessageLoop message_loop_;
245 BrowserThread ui_thread_;
246 BrowserThread io_thread_;
248 scoped_ptr<TestingProfile> profile_;
249 scoped_refptr<MockBrowsingDataDatabaseHelper>
250 mock_browsing_data_database_helper_;
251 scoped_refptr<MockBrowsingDataLocalStorageHelper>
252 mock_browsing_data_local_storage_helper_;
253 scoped_refptr<MockBrowsingDataLocalStorageHelper>
254 mock_browsing_data_session_storage_helper_;
255 scoped_refptr<MockBrowsingDataAppCacheHelper>
256 mock_browsing_data_appcache_helper_;
257 scoped_refptr<MockBrowsingDataIndexedDBHelper>
258 mock_browsing_data_indexed_db_helper_;
259 scoped_refptr<MockBrowsingDataFileSystemHelper>
260 mock_browsing_data_file_system_helper_;
263 TEST_F(CookiesTreeModelTest, RemoveAll) {
264 scoped_ptr<CookiesTreeModel> cookies_model(
265 CreateCookiesTreeModelWithInitialSample());
266 net::CookieMonster* monster = profile_->GetCookieMonster();
268 // Reset the selection of the first row.
270 SCOPED_TRACE("Before removing");
271 EXPECT_EQ(GetMonsterCookies(monster),
272 GetDisplayedCookies(cookies_model.get()));
273 EXPECT_EQ("db1,db2",
274 GetDisplayedDatabases(cookies_model.get()));
275 EXPECT_EQ("http://host1:1/,http://host2:2/",
276 GetDisplayedLocalStorages(cookies_model.get()));
277 EXPECT_EQ("http://host1:1/,http://host2:2/",
278 GetDisplayedSessionStorages(cookies_model.get()));
279 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
280 GetDisplayedIndexedDBs(cookies_model.get()));
281 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
282 GetDisplayedFileSystems(cookies_model.get()));
285 mock_browsing_data_database_helper_->Reset();
286 mock_browsing_data_local_storage_helper_->Reset();
287 mock_browsing_data_session_storage_helper_->Reset();
288 mock_browsing_data_indexed_db_helper_->Reset();
289 mock_browsing_data_file_system_helper_->Reset();
291 cookies_model->DeleteAllStoredObjects();
294 SCOPED_TRACE("After removing");
295 EXPECT_EQ(1, cookies_model->GetRoot()->GetTotalNodeCount());
296 EXPECT_EQ(0, cookies_model->GetRoot()->child_count());
297 EXPECT_EQ(std::string(""), GetMonsterCookies(monster));
298 EXPECT_EQ(GetMonsterCookies(monster),
299 GetDisplayedCookies(cookies_model.get()));
300 EXPECT_TRUE(mock_browsing_data_database_helper_->AllDeleted());
301 EXPECT_TRUE(mock_browsing_data_local_storage_helper_->AllDeleted());
302 EXPECT_FALSE(mock_browsing_data_session_storage_helper_->AllDeleted());
303 EXPECT_TRUE(mock_browsing_data_indexed_db_helper_->AllDeleted());
304 EXPECT_TRUE(mock_browsing_data_file_system_helper_->AllDeleted());
308 TEST_F(CookiesTreeModelTest, Remove) {
309 scoped_ptr<CookiesTreeModel> cookies_model(
310 CreateCookiesTreeModelWithInitialSample());
311 net::CookieMonster* monster = profile_->GetCookieMonster();
313 // Children start out arranged as follows:
315 // 0. `foo1`
316 // 1. `foo2`
317 // 2. `foo3`
318 // 3. `fshost1`
319 // 4. `fshost2`
320 // 5. `fshost3`
321 // 6. `gdbhost1`
322 // 7. `gdbhost2`
323 // 8. `host1`
324 // 9. `host2`
325 // 10. `idbhost1`
326 // 11. `idbhost2`
328 // Here, we'll remove them one by one, starting from the end, and
329 // check that the state makes sense.
331 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(11));
333 SCOPED_TRACE("`idbhost2` removed.");
334 EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
335 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str());
336 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get()));
337 EXPECT_EQ("http://host1:1/,http://host2:2/",
338 GetDisplayedLocalStorages(cookies_model.get()));
339 EXPECT_EQ("http://host1:1/,http://host2:2/",
340 GetDisplayedSessionStorages(cookies_model.get()));
341 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
342 GetDisplayedFileSystems(cookies_model.get()));
343 EXPECT_EQ("http://idbhost1:1/",
344 GetDisplayedIndexedDBs(cookies_model.get()));
345 EXPECT_EQ(38, cookies_model->GetRoot()->GetTotalNodeCount());
347 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(10));
349 SCOPED_TRACE("`idbhost1` removed.");
350 EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
351 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str());
352 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get()));
353 EXPECT_EQ("http://host1:1/,http://host2:2/",
354 GetDisplayedLocalStorages(cookies_model.get()));
355 EXPECT_EQ("http://host1:1/,http://host2:2/",
356 GetDisplayedSessionStorages(cookies_model.get()));
357 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
358 GetDisplayedFileSystems(cookies_model.get()));
359 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
360 EXPECT_EQ(35, cookies_model->GetRoot()->GetTotalNodeCount());
362 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(9));
364 SCOPED_TRACE("`host2` removed.");
365 EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
366 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str());
367 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get()));
368 EXPECT_EQ("http://host1:1/",
369 GetDisplayedLocalStorages(cookies_model.get()));
370 EXPECT_EQ("http://host1:1/",
371 GetDisplayedSessionStorages(cookies_model.get()));
372 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
373 GetDisplayedFileSystems(cookies_model.get()));
374 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
375 EXPECT_EQ(30, cookies_model->GetRoot()->GetTotalNodeCount());
377 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(8));
379 SCOPED_TRACE("`host1` removed.");
380 EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
381 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str());
382 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get()));
383 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get()));
384 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get()));
385 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
386 GetDisplayedFileSystems(cookies_model.get()));
387 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
388 EXPECT_EQ(25, cookies_model->GetRoot()->GetTotalNodeCount());
390 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(7));
392 SCOPED_TRACE("`gdbhost2` removed.");
393 EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
394 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str());
395 EXPECT_EQ("db1", GetDisplayedDatabases(cookies_model.get()));
396 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get()));
397 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get()));
398 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
399 GetDisplayedFileSystems(cookies_model.get()));
400 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
401 EXPECT_EQ(22, cookies_model->GetRoot()->GetTotalNodeCount());
403 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(6));
405 SCOPED_TRACE("`gdbhost1` removed.");
406 EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
407 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str());
408 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get()));
409 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get()));
410 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get()));
411 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
412 GetDisplayedFileSystems(cookies_model.get()));
413 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
414 EXPECT_EQ(19, cookies_model->GetRoot()->GetTotalNodeCount());
416 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(5));
418 SCOPED_TRACE("`fshost3` removed.");
419 EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
420 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str());
421 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get()));
422 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get()));
423 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get()));
424 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/",
425 GetDisplayedFileSystems(cookies_model.get()));
426 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
427 EXPECT_EQ(16, cookies_model->GetRoot()->GetTotalNodeCount());
429 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(4));
431 SCOPED_TRACE("`fshost2` removed.");
432 EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
433 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str());
434 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get()));
435 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get()));
436 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get()));
437 EXPECT_EQ("http://fshost1:1/",
438 GetDisplayedFileSystems(cookies_model.get()));
439 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
440 EXPECT_EQ(13, cookies_model->GetRoot()->GetTotalNodeCount());
442 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(3));
444 SCOPED_TRACE("`fshost1` removed.");
445 EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
446 EXPECT_STREQ("A,B,C", GetDisplayedCookies(cookies_model.get()).c_str());
447 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get()));
448 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get()));
449 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get()));
450 EXPECT_EQ("", GetDisplayedFileSystems(cookies_model.get()));
451 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
452 EXPECT_EQ(10, cookies_model->GetRoot()->GetTotalNodeCount());
454 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(2));
456 SCOPED_TRACE("`foo3` removed.");
457 EXPECT_STREQ("A,B", GetMonsterCookies(monster).c_str());
458 EXPECT_STREQ("A,B", GetDisplayedCookies(cookies_model.get()).c_str());
459 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get()));
460 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get()));
461 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get()));
462 EXPECT_EQ("", GetDisplayedFileSystems(cookies_model.get()));
463 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
464 EXPECT_EQ(7, cookies_model->GetRoot()->GetTotalNodeCount());
466 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(1));
468 SCOPED_TRACE("`foo2` removed.");
469 EXPECT_STREQ("A", GetMonsterCookies(monster).c_str());
470 EXPECT_STREQ("A", GetDisplayedCookies(cookies_model.get()).c_str());
471 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get()));
472 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get()));
473 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get()));
474 EXPECT_EQ("", GetDisplayedFileSystems(cookies_model.get()));
475 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
476 EXPECT_EQ(4, cookies_model->GetRoot()->GetTotalNodeCount());
478 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(0));
480 SCOPED_TRACE("`foo1` removed.");
481 EXPECT_STREQ("", GetMonsterCookies(monster).c_str());
482 EXPECT_STREQ("", GetDisplayedCookies(cookies_model.get()).c_str());
483 EXPECT_EQ("", GetDisplayedDatabases(cookies_model.get()));
484 EXPECT_EQ("", GetDisplayedLocalStorages(cookies_model.get()));
485 EXPECT_EQ("", GetDisplayedSessionStorages(cookies_model.get()));
486 EXPECT_EQ("", GetDisplayedFileSystems(cookies_model.get()));
487 EXPECT_EQ("", GetDisplayedIndexedDBs(cookies_model.get()));
488 EXPECT_EQ(1, cookies_model->GetRoot()->GetTotalNodeCount());
492 TEST_F(CookiesTreeModelTest, RemoveCookiesNode) {
493 scoped_ptr<CookiesTreeModel> cookies_model(
494 CreateCookiesTreeModelWithInitialSample());
495 net::CookieMonster* monster = profile_->GetCookieMonster();
497 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(0)->GetChild(0));
499 SCOPED_TRACE("First origin removed");
500 EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
501 EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
502 // 39 because in this case, the origin remains, although the COOKIES
503 // node beneath it has been deleted. So, we have
504 // root -> foo1 -> cookies -> a, foo2, foo3 -> cookies -> c
505 // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
506 // fshost1 -> filesystem -> http://fshost1:1/,
507 // fshost2 -> filesystem -> http://fshost2:1/,
508 // fshost3 -> filesystem -> http://fshost3:1/,
509 // host1 -> localstorage -> http://host1:1/,
510 // host2 -> localstorage -> http://host2:2/,
511 // idbhost1 -> sessionstorage -> http://idbhost1:1/,
512 // idbhost2 -> sessionstorage -> http://idbhost2:2/.
513 EXPECT_EQ(39, cookies_model->GetRoot()->GetTotalNodeCount());
514 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get()));
515 EXPECT_EQ("http://host1:1/,http://host2:2/",
516 GetDisplayedLocalStorages(cookies_model.get()));
517 EXPECT_EQ("http://host1:1/,http://host2:2/",
518 GetDisplayedSessionStorages(cookies_model.get()));
519 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
520 GetDisplayedIndexedDBs(cookies_model.get()));
521 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
522 GetDisplayedFileSystems(cookies_model.get()));
525 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(6)->GetChild(0));
527 SCOPED_TRACE("First database removed");
528 EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
529 EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
530 EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
531 EXPECT_EQ("http://host1:1/,http://host2:2/",
532 GetDisplayedLocalStorages(cookies_model.get()));
533 EXPECT_EQ("http://host1:1/,http://host2:2/",
534 GetDisplayedSessionStorages(cookies_model.get()));
535 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
536 GetDisplayedIndexedDBs(cookies_model.get()));
537 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
538 GetDisplayedFileSystems(cookies_model.get()));
539 EXPECT_EQ(37, cookies_model->GetRoot()->GetTotalNodeCount());
542 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(8)->GetChild(0));
544 SCOPED_TRACE("First origin removed");
545 EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
546 EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_model.get()).c_str());
547 EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
548 EXPECT_EQ("http://host2:2/",
549 GetDisplayedLocalStorages(cookies_model.get()));
550 EXPECT_EQ("http://host1:1/,http://host2:2/",
551 GetDisplayedSessionStorages(cookies_model.get()));
552 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
553 GetDisplayedIndexedDBs(cookies_model.get()));
554 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
555 GetDisplayedFileSystems(cookies_model.get()));
556 EXPECT_EQ(35, cookies_model->GetRoot()->GetTotalNodeCount());
560 TEST_F(CookiesTreeModelTest, RemoveCookieNode) {
561 scoped_ptr<CookiesTreeModel> cookies_model(
562 CreateCookiesTreeModelWithInitialSample());
563 net::CookieMonster* monster = profile_->GetCookieMonster();
565 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(1)->GetChild(0));
567 SCOPED_TRACE("Second origin COOKIES node removed");
568 EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
569 EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_model.get()).c_str());
570 EXPECT_EQ("db1,db2", GetDisplayedDatabases(cookies_model.get()));
571 EXPECT_EQ("http://host1:1/,http://host2:2/",
572 GetDisplayedLocalStorages(cookies_model.get()));
573 EXPECT_EQ("http://host1:1/,http://host2:2/",
574 GetDisplayedSessionStorages(cookies_model.get()));
575 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
576 GetDisplayedIndexedDBs(cookies_model.get()));
577 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
578 GetDisplayedFileSystems(cookies_model.get()));
579 // 39 because in this case, the origin remains, although the COOKIES
580 // node beneath it has been deleted. So, we have
581 // root -> foo1 -> cookies -> a, foo2, foo3 -> cookies -> c
582 // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
583 // fshost1 -> filesystem -> http://fshost1:1/,
584 // fshost2 -> filesystem -> http://fshost2:1/,
585 // fshost3 -> filesystem -> http://fshost3:1/,
586 // host1 -> localstorage -> http://host1:1/,
587 // host2 -> localstorage -> http://host2:2/,
588 // host1 -> sessionstorage -> http://host1:1/,
589 // host2 -> sessionstorage -> http://host2:2/,
590 // idbhost1 -> sessionstorage -> http://idbhost1:1/,
591 // idbhost2 -> sessionstorage -> http://idbhost2:2/.
592 EXPECT_EQ(39, cookies_model->GetRoot()->GetTotalNodeCount());
595 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(6)->GetChild(0));
597 SCOPED_TRACE("First database removed");
598 EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
599 EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_model.get()).c_str());
600 EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
601 EXPECT_EQ("http://host1:1/,http://host2:2/",
602 GetDisplayedLocalStorages(cookies_model.get()));
603 EXPECT_EQ("http://host1:1/,http://host2:2/",
604 GetDisplayedSessionStorages(cookies_model.get()));
605 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
606 GetDisplayedIndexedDBs(cookies_model.get()));
607 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
608 GetDisplayedFileSystems(cookies_model.get()));
609 EXPECT_EQ(37, cookies_model->GetRoot()->GetTotalNodeCount());
612 DeleteStoredObjects(cookies_model->GetRoot()->GetChild(8)->GetChild(0));
614 SCOPED_TRACE("First origin removed");
615 EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
616 EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_model.get()).c_str());
617 EXPECT_EQ("db2", GetDisplayedDatabases(cookies_model.get()));
618 EXPECT_EQ("http://host2:2/",
619 GetDisplayedLocalStorages(cookies_model.get()));
620 EXPECT_EQ("http://host1:1/,http://host2:2/",
621 GetDisplayedSessionStorages(cookies_model.get()));
622 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
623 GetDisplayedIndexedDBs(cookies_model.get()));
624 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
625 GetDisplayedFileSystems(cookies_model.get()));
626 EXPECT_EQ(35, cookies_model->GetRoot()->GetTotalNodeCount());
630 TEST_F(CookiesTreeModelTest, RemoveSingleCookieNode) {
631 net::CookieMonster* monster = profile_->GetCookieMonster();
632 monster->SetCookie(GURL("http://foo1"), "A=1");
633 monster->SetCookie(GURL("http://foo2"), "B=1");
634 monster->SetCookie(GURL("http://foo3"), "C=1");
635 monster->SetCookie(GURL("http://foo3"), "D=1");
636 CookiesTreeModel cookies_model(monster,
637 mock_browsing_data_database_helper_,
638 mock_browsing_data_local_storage_helper_,
639 mock_browsing_data_session_storage_helper_,
640 mock_browsing_data_appcache_helper_,
641 mock_browsing_data_indexed_db_helper_,
642 mock_browsing_data_file_system_helper_,
643 false);
644 mock_browsing_data_database_helper_->AddDatabaseSamples();
645 mock_browsing_data_database_helper_->Notify();
646 mock_browsing_data_local_storage_helper_->AddLocalStorageSamples();
647 mock_browsing_data_local_storage_helper_->Notify();
648 mock_browsing_data_session_storage_helper_->AddLocalStorageSamples();
649 mock_browsing_data_session_storage_helper_->Notify();
650 mock_browsing_data_indexed_db_helper_->AddIndexedDBSamples();
651 mock_browsing_data_indexed_db_helper_->Notify();
652 mock_browsing_data_file_system_helper_->AddFileSystemSamples();
653 mock_browsing_data_file_system_helper_->Notify();
656 SCOPED_TRACE("Initial State 4 cookies, 2 databases, 2 local storages, "
657 "2 session storages, 2 indexed DBs, 3 file systems");
658 // 42 because there's the root, then foo1 -> cookies -> a,
659 // foo2 -> cookies -> b, foo3 -> cookies -> c,d
660 // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
661 // fshost1 -> filesystem -> http://fshost1:1/,
662 // fshost2 -> filesystem -> http://fshost2:1/,
663 // fshost3 -> filesystem -> http://fshost3:1/,
664 // host1 -> localstorage -> http://host1:1/,
665 // host1 -> sessionstorage -> http://host1:1/,
666 // host2 -> sessionstorage -> http://host2:2/,
667 // idbhost1 -> sessionstorage -> http://idbhost1:1/,
668 // idbhost2 -> sessionstorage -> http://idbhost2:2/.
669 EXPECT_EQ(42, cookies_model.GetRoot()->GetTotalNodeCount());
670 EXPECT_STREQ("A,B,C,D", GetMonsterCookies(monster).c_str());
671 EXPECT_STREQ("A,B,C,D", GetDisplayedCookies(&cookies_model).c_str());
672 EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model));
673 EXPECT_EQ("http://host1:1/,http://host2:2/",
674 GetDisplayedLocalStorages(&cookies_model));
675 EXPECT_EQ("http://host1:1/,http://host2:2/",
676 GetDisplayedSessionStorages(&cookies_model));
677 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
678 GetDisplayedIndexedDBs(&cookies_model));
679 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
680 GetDisplayedFileSystems(&cookies_model));
682 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(2));
684 SCOPED_TRACE("Third origin removed");
685 EXPECT_STREQ("A,B", GetMonsterCookies(monster).c_str());
686 EXPECT_STREQ("A,B", GetDisplayedCookies(&cookies_model).c_str());
687 EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model));
688 EXPECT_EQ("http://host1:1/,http://host2:2/",
689 GetDisplayedLocalStorages(&cookies_model));
690 EXPECT_EQ("http://host1:1/,http://host2:2/",
691 GetDisplayedSessionStorages(&cookies_model));
692 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
693 GetDisplayedIndexedDBs(&cookies_model));
694 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
695 GetDisplayedFileSystems(&cookies_model));
696 EXPECT_EQ(38, cookies_model.GetRoot()->GetTotalNodeCount());
700 TEST_F(CookiesTreeModelTest, RemoveSingleCookieNodeOf3) {
701 net::CookieMonster* monster = profile_->GetCookieMonster();
702 monster->SetCookie(GURL("http://foo1"), "A=1");
703 monster->SetCookie(GURL("http://foo2"), "B=1");
704 monster->SetCookie(GURL("http://foo3"), "C=1");
705 monster->SetCookie(GURL("http://foo3"), "D=1");
706 monster->SetCookie(GURL("http://foo3"), "E=1");
707 CookiesTreeModel cookies_model(monster,
708 mock_browsing_data_database_helper_,
709 mock_browsing_data_local_storage_helper_,
710 mock_browsing_data_session_storage_helper_,
711 mock_browsing_data_appcache_helper_,
712 mock_browsing_data_indexed_db_helper_,
713 mock_browsing_data_file_system_helper_,
714 false);
715 mock_browsing_data_database_helper_->AddDatabaseSamples();
716 mock_browsing_data_database_helper_->Notify();
717 mock_browsing_data_local_storage_helper_->AddLocalStorageSamples();
718 mock_browsing_data_local_storage_helper_->Notify();
719 mock_browsing_data_session_storage_helper_->AddLocalStorageSamples();
720 mock_browsing_data_session_storage_helper_->Notify();
721 mock_browsing_data_indexed_db_helper_->AddIndexedDBSamples();
722 mock_browsing_data_indexed_db_helper_->Notify();
723 mock_browsing_data_file_system_helper_->AddFileSystemSamples();
724 mock_browsing_data_file_system_helper_->Notify();
727 SCOPED_TRACE("Initial State 5 cookies, 2 databases, 2 local storages, "
728 "2 session storages, 2 indexed DBs");
729 // 43 because there's the root, then foo1 -> cookies -> a,
730 // foo2 -> cookies -> b, foo3 -> cookies -> c,d,e
731 // dbhost1 -> database -> db1, dbhost2 -> database -> db2,
732 // fshost1 -> filesystem -> http://fshost1:1/,
733 // fshost2 -> filesystem -> http://fshost2:1/,
734 // fshost3 -> filesystem -> http://fshost3:1/,
735 // host1 -> localstorage -> http://host1:1/,
736 // host2 -> localstorage -> http://host2:2/,
737 // host1 -> sessionstorage -> http://host1:1/,
738 // host2 -> sessionstorage -> http://host2:2/,
739 // idbhost1 -> sessionstorage -> http://idbhost1:1/,
740 // idbhost2 -> sessionstorage -> http://idbhost2:2/.
741 EXPECT_EQ(43, cookies_model.GetRoot()->GetTotalNodeCount());
742 EXPECT_STREQ("A,B,C,D,E", GetMonsterCookies(monster).c_str());
743 EXPECT_STREQ("A,B,C,D,E", GetDisplayedCookies(&cookies_model).c_str());
744 EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model));
745 EXPECT_EQ("http://host1:1/,http://host2:2/",
746 GetDisplayedLocalStorages(&cookies_model));
747 EXPECT_EQ("http://host1:1/,http://host2:2/",
748 GetDisplayedSessionStorages(&cookies_model));
749 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
750 GetDisplayedIndexedDBs(&cookies_model));
751 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
752 GetDisplayedFileSystems(&cookies_model));
754 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(2)->GetChild(0)->
755 GetChild(1));
757 SCOPED_TRACE("Middle cookie in third origin removed");
758 EXPECT_STREQ("A,B,C,E", GetMonsterCookies(monster).c_str());
759 EXPECT_STREQ("A,B,C,E", GetDisplayedCookies(&cookies_model).c_str());
760 EXPECT_EQ(42, cookies_model.GetRoot()->GetTotalNodeCount());
761 EXPECT_EQ("db1,db2", GetDisplayedDatabases(&cookies_model));
762 EXPECT_EQ("http://host1:1/,http://host2:2/",
763 GetDisplayedLocalStorages(&cookies_model));
764 EXPECT_EQ("http://host1:1/,http://host2:2/",
765 GetDisplayedSessionStorages(&cookies_model));
766 EXPECT_EQ("http://idbhost1:1/,http://idbhost2:2/",
767 GetDisplayedIndexedDBs(&cookies_model));
768 EXPECT_EQ("http://fshost1:1/,http://fshost2:2/,http://fshost3:3/",
769 GetDisplayedFileSystems(&cookies_model));
773 TEST_F(CookiesTreeModelTest, RemoveSecondOrigin) {
774 net::CookieMonster* monster = profile_->GetCookieMonster();
775 monster->SetCookie(GURL("http://foo1"), "A=1");
776 monster->SetCookie(GURL("http://foo2"), "B=1");
777 monster->SetCookie(GURL("http://foo3"), "C=1");
778 monster->SetCookie(GURL("http://foo3"), "D=1");
779 monster->SetCookie(GURL("http://foo3"), "E=1");
780 CookiesTreeModel cookies_model(monster,
781 mock_browsing_data_database_helper_,
782 mock_browsing_data_local_storage_helper_,
783 mock_browsing_data_session_storage_helper_,
784 mock_browsing_data_appcache_helper_,
785 mock_browsing_data_indexed_db_helper_,
786 mock_browsing_data_file_system_helper_,
787 false);
789 SCOPED_TRACE("Initial State 5 cookies");
790 // 11 because there's the root, then foo1 -> cookies -> a,
791 // foo2 -> cookies -> b, foo3 -> cookies -> c,d,e
792 EXPECT_EQ(12, cookies_model.GetRoot()->GetTotalNodeCount());
793 EXPECT_STREQ("A,B,C,D,E", GetMonsterCookies(monster).c_str());
794 EXPECT_STREQ("A,B,C,D,E", GetDisplayedCookies(&cookies_model).c_str());
796 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(1));
798 SCOPED_TRACE("Second origin removed");
799 EXPECT_STREQ("A,C,D,E", GetMonsterCookies(monster).c_str());
800 EXPECT_STREQ("A,C,D,E", GetDisplayedCookies(&cookies_model).c_str());
801 // Left with root -> foo1 -> cookies -> a, foo3 -> cookies -> c,d,e
802 EXPECT_EQ(9, cookies_model.GetRoot()->GetTotalNodeCount());
806 TEST_F(CookiesTreeModelTest, OriginOrdering) {
807 net::CookieMonster* monster = profile_->GetCookieMonster();
808 monster->SetCookie(GURL("http://a.foo2.com"), "A=1");
809 monster->SetCookie(GURL("http://foo2.com"), "B=1");
810 monster->SetCookie(GURL("http://b.foo1.com"), "C=1");
811 monster->SetCookie(GURL("http://foo4.com"), "D=1; domain=.foo4.com;"
812 " path=/;"); // Leading dot on the foo4
813 monster->SetCookie(GURL("http://a.foo1.com"), "E=1");
814 monster->SetCookie(GURL("http://foo1.com"), "F=1");
815 monster->SetCookie(GURL("http://foo3.com"), "G=1");
816 monster->SetCookie(GURL("http://foo4.com"), "H=1");
818 CookiesTreeModel cookies_model(monster,
819 new MockBrowsingDataDatabaseHelper(profile_.get()),
820 new MockBrowsingDataLocalStorageHelper(profile_.get()),
821 new MockBrowsingDataLocalStorageHelper(profile_.get()),
822 new MockBrowsingDataAppCacheHelper(profile_.get()),
823 new MockBrowsingDataIndexedDBHelper(profile_.get()),
824 new MockBrowsingDataFileSystemHelper(profile_.get()),
825 false);
828 SCOPED_TRACE("Initial State 8 cookies");
829 // CookieMonster orders cookies by pathlength, then by creation time.
830 // All paths are length 1.
831 EXPECT_STREQ("A,B,C,D,E,F,G,H", GetMonsterCookies(monster).c_str());
832 EXPECT_STREQ("F,E,C,B,A,G,D,H",
833 GetDisplayedCookies(&cookies_model).c_str());
835 DeleteStoredObjects(cookies_model.GetRoot()->GetChild(1)); // Delete "E"
837 EXPECT_STREQ("A,B,C,D,F,G,H", GetMonsterCookies(monster).c_str());
838 EXPECT_STREQ("F,C,B,A,G,D,H", GetDisplayedCookies(&cookies_model).c_str());
842 TEST_F(CookiesTreeModelTest, ContentSettings) {
843 GURL host("http://example.com/");
844 ContentSettingsPattern pattern =
845 ContentSettingsPattern::FromString("[*.]example.com");
846 net::CookieMonster* monster = profile_->GetCookieMonster();
847 monster->SetCookie(host, "A=1");
849 CookiesTreeModel cookies_model(monster,
850 new MockBrowsingDataDatabaseHelper(profile_.get()),
851 new MockBrowsingDataLocalStorageHelper(profile_.get()),
852 new MockBrowsingDataLocalStorageHelper(profile_.get()),
853 new MockBrowsingDataAppCacheHelper(profile_.get()),
854 new MockBrowsingDataIndexedDBHelper(profile_.get()),
855 new MockBrowsingDataFileSystemHelper(profile_.get()),
856 false);
858 TestingProfile profile;
859 HostContentSettingsMap* content_settings =
860 profile.GetHostContentSettingsMap();
861 MockSettingsObserver observer;
863 CookieTreeRootNode* root =
864 static_cast<CookieTreeRootNode*>(cookies_model.GetRoot());
865 CookieTreeOriginNode* origin = root->GetOrCreateOriginNode(host);
867 EXPECT_EQ(1, origin->child_count());
868 EXPECT_TRUE(origin->CanCreateContentException());
869 EXPECT_CALL(observer,
870 OnContentSettingsChanged(content_settings,
871 CONTENT_SETTINGS_TYPE_COOKIES, false,
872 _, false));
873 EXPECT_CALL(observer,
874 OnContentSettingsChanged(content_settings,
875 CONTENT_SETTINGS_TYPE_COOKIES, false,
876 pattern, false));
877 origin->CreateContentException(
878 content_settings, CONTENT_SETTING_SESSION_ONLY);
879 EXPECT_EQ(CONTENT_SETTING_SESSION_ONLY,
880 content_settings->GetCookieContentSetting(host, host, true));
883 } // namespace