150 lines, 76 LOC, 52 covered (68%)
5 | 1 | /* ***** BEGIN LICENSE BLOCK ***** |
2 | * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
|
3 | * |
|
4 | * The contents of this file are subject to the Mozilla Public License Version |
|
5 | * 1.1 (the "License"); you may not use this file except in compliance with |
|
6 | * the License. You may obtain a copy of the License at |
|
7 | * http://www.mozilla.org/MPL/ |
|
8 | * |
|
9 | * Software distributed under the License is distributed on an "AS IS" basis, |
|
10 | * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
|
11 | * for the specific language governing rights and limitations under the |
|
12 | * License. |
|
13 | * |
|
14 | * The Original Code is Weave. |
|
15 | * |
|
16 | * The Initial Developer of the Original Code is Mozilla. |
|
17 | * Portions created by the Initial Developer are Copyright (C) 2008 |
|
18 | * the Initial Developer. All Rights Reserved. |
|
19 | * |
|
20 | * Contributor(s): |
|
21 | * Dan Mills <thunder@mozilla.com> |
|
22 | * |
|
23 | * Alternatively, the contents of this file may be used under the terms of |
|
24 | * either the GNU General Public License Version 2 or later (the "GPL"), or |
|
25 | * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
|
26 | * in which case the provisions of the GPL or the LGPL are applicable instead |
|
27 | * of those above. If you wish to allow use of your version of this file only |
|
28 | * under the terms of either the GPL or the LGPL, and not to allow others to |
|
29 | * use your version of this file under the terms of the MPL, indicate your |
|
30 | * decision by deleting the provisions above and replace them with the notice |
|
31 | * and other provisions required by the GPL or the LGPL. If you do not delete |
|
32 | * the provisions above, a recipient may use your version of this file under |
|
33 | * the terms of any one of the MPL, the GPL or the LGPL. |
|
34 | * |
|
35 | * ***** END LICENSE BLOCK ***** */ |
|
36 | ||
60 | 37 | const EXPORTED_SYMBOLS = ["PlacesItem", "Bookmark", "BookmarkFolder", |
65 | 38 | "BookmarkMicsum", "BookmarkQuery", "Livemark", "BookmarkSeparator"]; |
39 | ||
20 | 40 | const Cc = Components.classes; |
20 | 41 | const Ci = Components.interfaces; |
20 | 42 | const Cr = Components.results; |
20 | 43 | const Cu = Components.utils; |
44 | ||
25 | 45 | Cu.import("resource://weave/util.js"); |
25 | 46 | Cu.import("resource://weave/base_records/crypto.js"); |
47 | ||
56 | 48 | function PlacesItem(uri, type) { |
276 | 49 | CryptoWrapper.call(this, uri); |
230 | 50 | this.type = type || "item"; |
51 | } |
|
10 | 52 | PlacesItem.prototype = { |
10 | 53 | decrypt: function PlacesItem_decrypt(passphrase) { |
54 | // Do the normal CryptoWrapper decrypt, but change types before returning |
|
55 | let clear = CryptoWrapper.prototype.decrypt.apply(this, arguments); |
|
56 | ||
57 | // Convert the abstract places item to the actual object type |
|
58 | if (!this.deleted) |
|
59 | this.__proto__ = this.getTypeObject(this.type).prototype; |
|
60 | ||
61 | return clear; |
|
62 | }, |
|
63 | ||
10 | 64 | getTypeObject: function PlacesItem_getTypeObject(type) { |
65 | switch (type) { |
|
66 | case "bookmark": |
|
67 | return Bookmark; |
|
68 | case "microsummary": |
|
69 | return BookmarkMicsum; |
|
70 | case "query": |
|
71 | return BookmarkQuery; |
|
72 | case "folder": |
|
73 | return BookmarkFolder; |
|
74 | case "livemark": |
|
75 | return Livemark; |
|
76 | case "separator": |
|
77 | return BookmarkSeparator; |
|
78 | case "item": |
|
79 | return PlacesItem; |
|
80 | } |
|
81 | throw "Unknown places item object type: " + type; |
|
82 | }, |
|
83 | ||
15 | 84 | __proto__: CryptoWrapper.prototype, |
25 | 85 | _logName: "Record.PlacesItem", |
86 | }; |
|
87 | ||
75 | 88 | Utils.deferGetSet(PlacesItem, "cleartext", ["hasDupe", "parentid", "parentName", |
40 | 89 | "predecessorid", "type"]); |
90 | ||
47 | 91 | function Bookmark(uri, type) { |
370 | 92 | PlacesItem.call(this, uri, type || "bookmark"); |
93 | } |
|
10 | 94 | Bookmark.prototype = { |
15 | 95 | __proto__: PlacesItem.prototype, |
25 | 96 | _logName: "Record.Bookmark", |
97 | }; |
|
98 | ||
75 | 99 | Utils.deferGetSet(Bookmark, "cleartext", ["title", "bmkUri", "description", |
55 | 100 | "loadInSidebar", "tags", "keyword"]); |
101 | ||
10 | 102 | function BookmarkMicsum(uri) { |
103 | Bookmark.call(this, uri, "microsummary"); |
|
104 | } |
|
10 | 105 | BookmarkMicsum.prototype = { |
15 | 106 | __proto__: Bookmark.prototype, |
25 | 107 | _logName: "Record.BookmarkMicsum", |
108 | }; |
|
109 | ||
70 | 110 | Utils.deferGetSet(BookmarkMicsum, "cleartext", ["generatorUri", "staticTitle"]); |
111 | ||
10 | 112 | function BookmarkQuery(uri) { |
113 | Bookmark.call(this, uri, "query"); |
|
114 | } |
|
10 | 115 | BookmarkQuery.prototype = { |
15 | 116 | __proto__: Bookmark.prototype, |
25 | 117 | _logName: "Record.BookmarkQuery", |
118 | }; |
|
119 | ||
55 | 120 | Utils.deferGetSet(BookmarkQuery, "cleartext", ["folderName"]); |
121 | ||
19 | 122 | function BookmarkFolder(uri, type) { |
90 | 123 | PlacesItem.call(this, uri, type || "folder"); |
124 | } |
|
10 | 125 | BookmarkFolder.prototype = { |
15 | 126 | __proto__: PlacesItem.prototype, |
25 | 127 | _logName: "Record.Folder", |
128 | }; |
|
129 | ||
70 | 130 | Utils.deferGetSet(BookmarkFolder, "cleartext", ["description", "title"]); |
131 | ||
10 | 132 | function Livemark(uri) { |
133 | BookmarkFolder.call(this, uri, "livemark"); |
|
134 | } |
|
10 | 135 | Livemark.prototype = { |
15 | 136 | __proto__: BookmarkFolder.prototype, |
25 | 137 | _logName: "Record.Livemark", |
138 | }; |
|
139 | ||
70 | 140 | Utils.deferGetSet(Livemark, "cleartext", ["siteUri", "feedUri"]); |
141 | ||
10 | 142 | function BookmarkSeparator(uri) { |
143 | PlacesItem.call(this, uri, "separator"); |
|
144 | } |
|
10 | 145 | BookmarkSeparator.prototype = { |
15 | 146 | __proto__: PlacesItem.prototype, |
25 | 147 | _logName: "Record.Separator", |
148 | }; |
|
149 | ||
40 | 150 | Utils.deferGetSet(BookmarkSeparator, "cleartext", "pos"); |