Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 var tests = [];
9 /*
11 Backup/restore tests example:
13 var myTest = {
14 populate: function () { ... add bookmarks ... },
15 validate: function () { ... query for your bookmarks ... }
16 }
18 this.push(myTest);
20 */
22 /*
24 test summary:
25 - create folders with content
26 - create a query bookmark for those folders
27 - backs up bookmarks
28 - restores bookmarks
29 - confirms that the query has the new ids for the same folders
31 scenarios:
32 - 1 folder (folder shortcut)
33 - n folders (single query)
34 - n folders (multiple queries)
36 */
38 const DEFAULT_INDEX = PlacesUtils.bookmarks.DEFAULT_INDEX;
40 var test = {
41 _testRootId: null,
42 _testRootTitle: "test root",
43 _folderIds: [],
44 _bookmarkURIs: [],
45 _count: 3,
47 populate: function populate() {
48 // folder to hold this test
49 PlacesUtils.bookmarks.removeFolderChildren(PlacesUtils.toolbarFolderId);
50 this._testRootId =
51 PlacesUtils.bookmarks.createFolder(PlacesUtils.toolbarFolderId,
52 this._testRootTitle, DEFAULT_INDEX);
54 // create test folders each with a bookmark
55 for (var i = 0; i < this._count; i++) {
56 var folderId =
57 PlacesUtils.bookmarks.createFolder(this._testRootId, "folder" + i, DEFAULT_INDEX);
58 this._folderIds.push(folderId)
60 var bookmarkURI = uri("http://" + i);
61 PlacesUtils.bookmarks.insertBookmark(folderId, bookmarkURI,
62 DEFAULT_INDEX, "bookmark" + i);
63 this._bookmarkURIs.push(bookmarkURI);
64 }
66 // create a query URI with 1 folder (ie: folder shortcut)
67 this._queryURI1 = uri("place:folder=" + this._folderIds[0] + "&queryType=1");
68 this._queryTitle1 = "query1";
69 PlacesUtils.bookmarks.insertBookmark(this._testRootId, this._queryURI1,
70 DEFAULT_INDEX, this._queryTitle1);
72 // create a query URI with _count folders
73 this._queryURI2 = uri("place:folder=" + this._folderIds.join("&folder=") + "&queryType=1");
74 this._queryTitle2 = "query2";
75 PlacesUtils.bookmarks.insertBookmark(this._testRootId, this._queryURI2,
76 DEFAULT_INDEX, this._queryTitle2);
78 // create a query URI with _count queries (each with a folder)
79 // first get a query object for each folder
80 var queries = this._folderIds.map(function(aFolderId) {
81 var query = PlacesUtils.history.getNewQuery();
82 query.setFolders([aFolderId], 1);
83 return query;
84 });
85 var options = PlacesUtils.history.getNewQueryOptions();
86 options.queryType = options.QUERY_TYPE_BOOKMARKS;
87 this._queryURI3 =
88 uri(PlacesUtils.history.queriesToQueryString(queries, queries.length, options));
89 this._queryTitle3 = "query3";
90 PlacesUtils.bookmarks.insertBookmark(this._testRootId, this._queryURI3,
91 DEFAULT_INDEX, this._queryTitle3);
92 },
94 clean: function () {},
96 validate: function validate() {
97 // Throw a wrench in the works by inserting some new bookmarks,
98 // ensuring folder ids won't be the same, when restoring.
99 for (var i = 0; i < 10; i++) {
100 PlacesUtils.bookmarks.
101 insertBookmark(PlacesUtils.bookmarksMenuFolderId, uri("http://aaaa"+i), DEFAULT_INDEX, "");
102 }
104 var toolbar =
105 PlacesUtils.getFolderContents(PlacesUtils.toolbarFolderId,
106 false, true).root;
107 do_check_true(toolbar.childCount, 1);
109 var folderNode = toolbar.getChild(0);
110 do_check_eq(folderNode.type, folderNode.RESULT_TYPE_FOLDER);
111 do_check_eq(folderNode.title, this._testRootTitle);
112 folderNode.QueryInterface(Ci.nsINavHistoryQueryResultNode);
113 folderNode.containerOpen = true;
115 // |_count| folders + the query node
116 do_check_eq(folderNode.childCount, this._count+3);
118 for (var i = 0; i < this._count; i++) {
119 var subFolder = folderNode.getChild(i);
120 do_check_eq(subFolder.title, "folder"+i);
121 subFolder.QueryInterface(Ci.nsINavHistoryContainerResultNode);
122 subFolder.containerOpen = true;
123 do_check_eq(subFolder.childCount, 1);
124 var child = subFolder.getChild(0);
125 do_check_eq(child.title, "bookmark"+i);
126 do_check_true(uri(child.uri).equals(uri("http://" + i)))
127 }
129 // validate folder shortcut
130 this.validateQueryNode1(folderNode.getChild(this._count));
132 // validate folders query
133 this.validateQueryNode2(folderNode.getChild(this._count + 1));
135 // validate multiple queries query
136 this.validateQueryNode3(folderNode.getChild(this._count + 2));
138 // clean up
139 folderNode.containerOpen = false;
140 toolbar.containerOpen = false;
141 },
143 validateQueryNode1: function validateQueryNode1(aNode) {
144 do_check_eq(aNode.title, this._queryTitle1);
145 do_check_true(PlacesUtils.nodeIsFolder(aNode));
147 aNode.QueryInterface(Ci.nsINavHistoryContainerResultNode);
148 aNode.containerOpen = true;
149 do_check_eq(aNode.childCount, 1);
150 var child = aNode.getChild(0);
151 do_check_true(uri(child.uri).equals(uri("http://0")))
152 do_check_eq(child.title, "bookmark0")
153 aNode.containerOpen = false;
154 },
156 validateQueryNode2: function validateQueryNode2(aNode) {
157 do_check_eq(aNode.title, this._queryTitle2);
158 do_check_true(PlacesUtils.nodeIsQuery(aNode));
160 aNode.QueryInterface(Ci.nsINavHistoryContainerResultNode);
161 aNode.containerOpen = true;
162 do_check_eq(aNode.childCount, this._count);
163 for (var i = 0; i < aNode.childCount; i++) {
164 var child = aNode.getChild(i);
165 do_check_true(uri(child.uri).equals(uri("http://" + i)))
166 do_check_eq(child.title, "bookmark" + i)
167 }
168 aNode.containerOpen = false;
169 },
171 validateQueryNode3: function validateQueryNode3(aNode) {
172 do_check_eq(aNode.title, this._queryTitle3);
173 do_check_true(PlacesUtils.nodeIsQuery(aNode));
175 aNode.QueryInterface(Ci.nsINavHistoryContainerResultNode);
176 aNode.containerOpen = true;
177 do_check_eq(aNode.childCount, this._count);
178 for (var i = 0; i < aNode.childCount; i++) {
179 var child = aNode.getChild(i);
180 do_check_true(uri(child.uri).equals(uri("http://" + i)))
181 do_check_eq(child.title, "bookmark" + i)
182 }
183 aNode.containerOpen = false;
184 }
185 }
186 tests.push(test);
188 function run_test() {
189 run_next_test();
190 }
192 add_task(function () {
193 // make json file
194 let jsonFile = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.json");
196 // populate db
197 tests.forEach(function(aTest) {
198 aTest.populate();
199 // sanity
200 aTest.validate();
201 });
203 // export json to file
204 yield BookmarkJSONUtils.exportToFile(jsonFile);
206 // clean
207 tests.forEach(function(aTest) {
208 aTest.clean();
209 });
211 // restore json file
212 yield BookmarkJSONUtils.importFromFile(jsonFile, true);
214 // validate
215 tests.forEach(function(aTest) {
216 aTest.validate();
217 });
219 // clean up
220 yield OS.File.remove(jsonFile);
221 });