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"
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"
29 class CookiesTreeModelTest
: public testing::Test
{
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_
,
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.)
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()) {
126 for (int i
= 0; i
< node
->child_count(); ++i
) {
127 retval
+= GetNodesOfChildren(node
->GetChild(i
), node_type
);
131 if (node
->GetDetailedInfo().node_type
== 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() +
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() +
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);
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();
240 delete parent_node
->GetModel()->Remove(parent_node
, node
);
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()));
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:
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_
,
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_
,
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)->
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_
,
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()),
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()),
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,
873 EXPECT_CALL(observer
,
874 OnContentSettingsChanged(content_settings
,
875 CONTENT_SETTINGS_TYPE_COOKIES
, 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));