annotate components/nttAddonCompatibilityService.js @ 0:dada0ac40a8f

initial import
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Tue, 02 Dec 2008 20:31:01 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
1 const Cc = Components.classes;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
2 const Ci = Components.interfaces;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
3 const Cr = Components.results;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
4
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
5 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
6
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
7 const PREFIX_NS_EM = "http://www.mozilla.org/2004/em-rdf#";
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
8 const PREFIX_ITEM_URI = "urn:mozilla:item:";
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
9 const RDFURI_INSTALL_MANIFEST_ROOT = "urn:mozilla:install-manifest";
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
10 const FILE_INSTALL_MANIFEST = "install.rdf";
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
11 const TOOLKIT_ID = "toolkit@mozilla.org"
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
12
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
13 var gEM = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
14 var gRDF = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
15 var gApp = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
16 var gVC = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
17 var gCheckCompatibility = true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
18 var gCheckUpdateSecurity = true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
19 var gPrefs = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
20
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
21 function EM_NS(property) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
22 return PREFIX_NS_EM + property;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
23 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
24
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
25 function EM_R(property) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
26 return gRDF.GetResource(EM_NS(property));
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
27 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
28
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
29 function getRDFProperty(ds, source, property) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
30 var value = ds.GetTarget(source, EM_R(property), true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
31 if (value && value instanceof Ci.nsIRDFLiteral)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
32 return value.Value;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
33 return null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
34 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
35
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
36 function removeRDFProperty(ds, source, property) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
37 var arc = EM_R(property);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
38 var targets = ds.GetTargets(source, arc, true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
39 while (targets.hasMoreElements())
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
40 ds.Unassert(source, arc, targets.getNext());
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
41 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
42
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
43 function extractXPI(xpi) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
44 // XXX For 1.9 final we can switch to just extracting/compressing install.rdf
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
45 var zipReader = Cc["@mozilla.org/libjar/zip-reader;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
46 createInstance(Ci.nsIZipReader);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
47 zipReader.open(xpi);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
48 if (!zipReader.hasEntry(FILE_INSTALL_MANIFEST)) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
49 zipReader.close();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
50 return null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
51 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
52 var dirs = Cc["@mozilla.org/file/directory_service;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
53 getService(Ci.nsIProperties);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
54 var file = dirs.get("TmpD", Ci.nsILocalFile);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
55 file.append("tmpxpi");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
56 file.createUnique(Ci.nsIFile.DIRECTORY_TYPE, 0755);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
57 var entries = zipReader.findEntries("*");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
58 while (entries.hasMore()) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
59 var path = entries.getNext();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
60 var entry = zipReader.getEntry(path);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
61 if (path.substring(path.length - 1) == "/")
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
62 path = path.substring(0, entry.length - 1);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
63 var parts = path.split("/");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
64 var target = file.clone();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
65 for (var i = 0; i < parts.length; i++)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
66 target.append(parts[i]);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
67 if (entry.isDirectory) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
68 if (!target.exists())
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
69 target.create(Ci.nsIFile.DIRECTORY_TYPE, 0755);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
70 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
71 else {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
72 var parent = target.parent;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
73 if (!parent.exists())
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
74 parent.create(Ci.nsIFile.DIRECTORY_TYPE, 0755);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
75 zipReader.extract(path, target);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
76 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
77 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
78 zipReader.close();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
79 return file;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
80 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
81
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
82 function loadManifest(file) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
83 var ioServ = Cc["@mozilla.org/network/io-service;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
84 getService(Ci.nsIIOService);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
85 var fph = ioServ.getProtocolHandler("file")
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
86 .QueryInterface(Ci.nsIFileProtocolHandler);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
87 return gRDF.GetDataSourceBlocking(fph.getURLSpecFromFile(file));
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
88 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
89
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
90 function recursiveUpdate(zipWriter, path, dir) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
91 var entries = dir.directoryEntries;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
92 while (entries.hasMoreElements()) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
93 var entry = entries.getNext().QueryInterface(Ci.nsIFile);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
94 if (entry.isDirectory()) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
95 var newPath = path + entry.leafName + "/";
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
96 zipWriter.addEntryDirectory(newPath, entry.lastModifiedTime, false);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
97 recursiveUpdate(zipWriter, newPath, entry);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
98 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
99 else {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
100 zipWriter.addEntryFile(path + entry.leafName, Ci.nsIZipWriter.COMPRESSION_NONE,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
101 entry, false);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
102 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
103 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
104 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
105
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
106 function updateXPI(xpi, file) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
107 // XXX For 1.9 final we can switch to just extracting/compressing install.rdf
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
108 var zipWriter = Cc["@mozilla.org/zipwriter;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
109 createInstance(Ci.nsIZipWriter);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
110 zipWriter.open(xpi, 0x04 | 0x08 | 0x20);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
111 recursiveUpdate(zipWriter, "", file);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
112 zipWriter.close();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
113 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
114
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
115 function nttAddonUpdateChecker(addon) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
116 this.addon = addon;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
117 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
118
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
119 nttAddonUpdateChecker.prototype = {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
120 addon: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
121 busy: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
122
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
123 checkForUpdates: function() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
124 this.busy = true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
125 LOG("Searching for compatibility information for " + this.addon.id);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
126 gEM.update([this.addon], 1,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
127 Ci.nsIExtensionManager.UPDATE_SYNC_COMPATIBILITY, this);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
128
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
129 // Spin an event loop to wait for the update check to complete.
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
130 var tm = Cc["@mozilla.org/thread-manager;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
131 getService(Ci.nsIThreadManager);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
132 var thread = tm.currentThread;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
133 while (this.busy)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
134 thread.processNextEvent(true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
135 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
136
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
137 // nsIAddonUpdateCheckListener implementation
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
138 onUpdateStarted: function() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
139 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
140
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
141 onUpdateEnded: function() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
142 this.busy = false;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
143 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
144
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
145 onAddonUpdateStarted: function(addon) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
146 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
147
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
148 onAddonUpdateEnded: function(addon, status) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
149 if (status & Ci.nsIAddonUpdateCheckListener.STATUS_DATA_FOUND) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
150 LOG("Found new compatibility information for " + addon.id + ": " + addon.minAppVersion + " " + addon.maxAppVersion);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
151 this.addon.minAppVersion = addon.minAppVersion;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
152 this.addon.maxAppVersion = addon.maxAppVersion;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
153 this.addon.targetAppID = addon.targetAppID;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
154 this.addon.overrideVersions();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
155 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
156 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
157 };
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
158
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
159 function nttAddonDetail() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
160 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
161
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
162 nttAddonDetail.prototype = {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
163 datasource: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
164 root: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
165
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
166 xpi: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
167 file: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
168
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
169 id: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
170 name: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
171 version: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
172 type: Ci.nsIUpdateItem.TYPE_EXTENSION,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
173 updateRDF: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
174 updateKey: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
175 iconURL: "chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png",
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
176
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
177 installLocationKey: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
178 xpiURL: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
179 xpiHash: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
180
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
181 appResource: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
182 targetAppID: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
183 minAppVersion: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
184 maxAppVersion: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
185
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
186 init: function() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
187 if (!this.id)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
188 this.id = getRDFProperty(this.datasource, this.root, "id");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
189 this.name = getRDFProperty(this.datasource, this.root, "name");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
190 this.version = getRDFProperty(this.datasource, this.root, "version");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
191 this.updateRDF = getRDFProperty(this.datasource, this.root, "updateURL");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
192 this.updateKey = getRDFProperty(this.datasource, this.root, "updateKey");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
193
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
194 var apps = this.datasource.GetTargets(this.root, EM_R("targetApplication"), true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
195 while (apps.hasMoreElements()) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
196 var app = apps.getNext().QueryInterface(Ci.nsIRDFResource);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
197 var id = getRDFProperty(this.datasource, app, "id");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
198 if (id == gApp.ID || id == TOOLKIT_ID) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
199 this.minAppVersion = getRDFProperty(this.datasource, app, "minVersion");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
200 this.maxAppVersion = getRDFProperty(this.datasource, app, "maxVersion");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
201 if (this.minAppVersion && this.maxAppVersion) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
202 this.appResource = app;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
203 this.targetAppID = id;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
204 if (id == gApp.ID)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
205 break;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
206 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
207 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
208 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
209 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
210
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
211 initWithXPI: function(xpi) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
212 this.xpi = xpi;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
213 this.file = extractXPI(xpi);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
214 var rdf = this.file.clone();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
215 rdf.append(FILE_INSTALL_MANIFEST);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
216 this.datasource = loadManifest(rdf);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
217 this.root = gRDF.GetResource(RDFURI_INSTALL_MANIFEST_ROOT);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
218 this.init();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
219 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
220
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
221 initWithDataSource: function(ds, root, id) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
222 this.datasource = ds;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
223 this.root = root;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
224 this.id = id;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
225 this.init();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
226 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
227
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
228 cleanup: function() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
229 if (this.file && this.file.exists)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
230 this.file.remove(true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
231 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
232
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
233 overrideVersions: function() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
234 removeRDFProperty(this.datasource, this.appResource, "minVersion");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
235 this.datasource.Assert(this.appResource, EM_R("minVersion"), gRDF.GetLiteral(this.minAppVersion), true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
236 removeRDFProperty(this.datasource, this.appResource, "maxVersion");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
237 this.datasource.Assert(this.appResource, EM_R("maxVersion"), gRDF.GetLiteral(this.maxAppVersion), true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
238 this.datasource.QueryInterface(Ci.nsIRDFRemoteDataSource).Flush();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
239 if (this.xpi && this.file)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
240 updateXPI(this.xpi, this.file);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
241 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
242
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
243 overrideCompatibility: function(ignorePrefs) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
244 if (!this.isValid())
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
245 return;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
246
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
247 var changed = false;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
248
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
249 if (gCheckCompatibility || ignorePrefs) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
250 var version = (gApp.ID == this.targetAppID) ? gApp.version : gApp.platformVersion;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
251 if (gVC.compare(version, this.minAppVersion) < 0) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
252 LOG("minVersion " + this.minAppVersion + " is too high, reducing to " + version);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
253 if (!this.datasource.GetTarget(this.appResource, EM_R("oldMinVersion"), true))
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
254 this.datasource.Assert(this.appResource, EM_R("oldMinVersion"), gRDF.GetLiteral(this.minAppVersion), true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
255 removeRDFProperty(this.datasource, this.appResource, "minVersion");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
256 this.datasource.Assert(this.appResource, EM_R("minVersion"), gRDF.GetLiteral(version), true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
257 this.minAppVersion = version;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
258 changed = true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
259 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
260 else if (gVC.compare(version, this.maxAppVersion) > 0) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
261 LOG("maxVersion " + this.maxAppVersion + " is too low, increasing to " + version);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
262 if (!this.datasource.GetTarget(this.appResource, EM_R("oldMaxVersion"), true))
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
263 this.datasource.Assert(this.appResource, EM_R("oldMaxVersion"), gRDF.GetLiteral(this.maxAppVersion), true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
264 removeRDFProperty(this.datasource, this.appResource, "maxVersion");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
265 this.datasource.Assert(this.appResource, EM_R("maxVersion"), gRDF.GetLiteral(version), true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
266 this.maxAppVersion = version;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
267 changed = true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
268 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
269
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
270 if (changed && !this.xpi) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
271 // This updates any UI bound to the datasource
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
272 var compatprop = EM_R("compatible");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
273 var truth = gRDF.GetLiteral("true");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
274 this.datasource.Assert(this.root, compatprop, truth, true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
275 this.datasource.Unassert(this.root, compatprop, truth);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
276 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
277 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
278
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
279 if (!this.isUpdateSecure(ignorePrefs)) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
280 LOG("Addon is insecure, removing update URL");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
281 removeRDFProperty(this.datasource, this.root, "updateURL");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
282 this.updateRDF = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
283 changed = true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
284
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
285 // This updates any UI bound to the datasource
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
286 compatprop = EM_R("providesUpdatesSecurely");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
287 truth = gRDF.GetLiteral("true");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
288 this.datasource.Assert(this.root, compatprop, truth, true);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
289 this.datasource.Unassert(this.root, compatprop, truth);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
290 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
291
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
292 if (changed) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
293 this.datasource.QueryInterface(Ci.nsIRDFRemoteDataSource).Flush();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
294 if (this.xpi && this.file)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
295 updateXPI(this.xpi, this.file);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
296 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
297 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
298
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
299 isValid: function() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
300 return !!this.appResource;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
301 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
302
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
303 isCompatible: function(ignorePrefs) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
304 if (!gCheckCompatibility && !ignorePrefs)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
305 return true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
306
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
307 var version = (gApp.ID == this.targetAppID) ? gApp.version : gApp.platformVersion;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
308 if (gVC.compare(version, this.minAppVersion) < 0)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
309 return false;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
310 if (gVC.compare(version, this.maxAppVersion) > 0)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
311 return false;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
312 return true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
313 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
314
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
315 isUpdateSecure: function(ignorePrefs) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
316 if (!gCheckUpdateSecurity && !ignorePrefs)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
317 return true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
318
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
319 if (!this.updateRDF)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
320 return true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
321 if (this.updateKey)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
322 return true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
323 return (this.updateRDF.substring(0, 6) == "https:");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
324 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
325
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
326 needsOverride: function(ignorePrefs) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
327 return (!this.isCompatible(ignorePrefs) || !this.isUpdateSecure(ignorePrefs));
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
328 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
329
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
330 QueryInterface: XPCOMUtils.generateQI([Ci.nttIAddon, Ci.nsIUpdateItem]),
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
331 };
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
332
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
333 function nttAddonCompatibilityService() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
334 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
335
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
336 nttAddonCompatibilityService.prototype = {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
337 id: null,
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
338
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
339 init: function() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
340 Components.utils.import("resource://nightly/Logging.jsm");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
341
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
342 gEM = Cc["@mozilla.org/extensions/manager;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
343 getService(Ci.nsIExtensionManager);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
344 gRDF = Cc["@mozilla.org/rdf/rdf-service;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
345 getService(Ci.nsIRDFService);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
346 gApp = Cc["@mozilla.org/xre/app-info;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
347 getService(Ci.nsIXULAppInfo).QueryInterface(Ci.nsIXULRuntime);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
348 gVC = Cc["@mozilla.org/xpcom/version-comparator;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
349 getService(Ci.nsIVersionComparator);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
350 if (gVC.compare(gApp.platformVersion, "1.9b5") >= 0)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
351 this.id = gEM.addInstallListener(this);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
352 gPrefs = Components.classes["@mozilla.org/preferences-service;1"]
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
353 .getService(Components.interfaces.nsIPrefService)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
354 .getBranch("extensions.")
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
355 .QueryInterface(Components.interfaces.nsIPrefBranch2);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
356 try {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
357 gCheckCompatibility = gPrefs.getBoolPref("checkCompatibility");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
358 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
359 catch (e) { }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
360 try {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
361 gCheckUpdateSecurity = gPrefs.getBoolPref("checkUpdateSecurity");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
362 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
363 catch (e) { }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
364 gPrefs.addObserver("", this, false);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
365 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
366
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
367 // nsIAddonCompatibilityService implementation
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
368 getAddonForID: function(id) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
369 var addon = new nttAddonDetail();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
370 addon.initWithDataSource(gEM.datasource, gRDF.GetResource(PREFIX_ITEM_URI + id), id);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
371 return addon;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
372 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
373
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
374 confirmOverride: function(addons, count) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
375 var wm = Cc["@mozilla.org/appshell/window-mediator;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
376 getService(Ci.nsIWindowMediator);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
377 win = wm.getMostRecentWindow("Extension:Manager");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
378 if (win && win.top)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
379 win = win.top;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
380
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
381 var params = Cc["@mozilla.org/array;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
382 createInstance(Ci.nsIMutableArray);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
383 for (var i = 0; i < addons.length; i++)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
384 params.appendElement(addons[i], false);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
385 var ww = Cc["@mozilla.org/embedcomp/window-watcher;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
386 getService(Ci.nsIWindowWatcher);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
387 ww.openWindow(win, "chrome://nightly/content/extensions/incompatible.xul", "",
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
388 "chrome,centerscreen,modal,dialog,titlebar", params);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
389 return true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
390 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
391
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
392 // nsIAddonInstallListener implementation
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
393 onDownloadStarted: function(addon) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
394 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
395
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
396 onDownloadProgress: function(addon, value, maxValue) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
397 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
398
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
399 onDownloadEnded: function(addon) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
400 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
401
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
402 onInstallStarted: function(addon) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
403 LOG("Install Started for " + addon.xpiURL);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
404 var ioServ = Cc["@mozilla.org/network/io-service;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
405 getService(Ci.nsIIOService);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
406 var fph = ioServ.getProtocolHandler("file")
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
407 .QueryInterface(Ci.nsIFileProtocolHandler);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
408 var file = fph.getFileFromURLSpec(addon.xpiURL);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
409 if (file.exists()) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
410 try {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
411 var addon = new nttAddonDetail();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
412 addon.initWithXPI(file);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
413 if (addon.isValid()) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
414 if (!addon.isCompatible(false)) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
415 // Check if there are remote updates available
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
416 var checker = new nttAddonUpdateChecker(addon);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
417 checker.checkForUpdates();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
418 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
419
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
420 if (addon.needsOverride(false))
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
421 this.confirmOverride([addon], 1);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
422 else
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
423 LOG("Add-on is already compatible: '" + addon.updateRDF + "' " + addon.minAppVersion + "-" + addon.maxAppVersion);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
424 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
425 else {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
426 WARN("Add-on seems to be invalid");
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
427 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
428 addon.cleanup();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
429 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
430 catch (e) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
431 ERROR("Exception during compatibility check " + e);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
432 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
433 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
434 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
435
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
436 onCompatibilityCheckStarted: function(addon) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
437 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
438
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
439 onCompatibilityCheckEnded: function(addon, status) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
440 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
441
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
442 onInstallEnded: function(addon, status) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
443 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
444
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
445 onInstallsCompleted: function() {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
446 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
447
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
448 // nsIObserver implementation
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
449 observe: function(subject, topic, data) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
450 switch (topic) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
451 case "app-startup":
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
452 var os = Cc["@mozilla.org/observer-service;1"].
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
453 getService(Ci.nsIObserverService);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
454 os.addObserver(this, "profile-after-change", false);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
455 os.addObserver(this, "quit-application", false);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
456 break;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
457 case "profile-after-change":
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
458 this.init();
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
459 break;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
460 case "quit-application":
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
461 if (this.id)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
462 gEM.removeInstallListenerAt(this.id);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
463 gEM = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
464 gRDF = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
465 gApp = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
466 gVC = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
467 gPrefs.removeObserver("", this);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
468 gPrefs = null;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
469 break;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
470 case "nsPref:changed":
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
471 switch (data) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
472 case "checkCompatibility":
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
473 try {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
474 gCheckCompatibility = gPrefs.getBoolPref(data);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
475 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
476 catch (e) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
477 gCheckCompatibility = true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
478 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
479 break;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
480 case "checkUpdateSecurity":
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
481 try {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
482 gCheckUpdateSecurity = gPrefs.getBoolPref(data);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
483 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
484 catch (e) {
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
485 gCheckUpdateSecurity = true;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
486 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
487 break;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
488 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
489 break;
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
490 default:
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
491 WARN("Unknown event " + topic);
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
492 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
493 },
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
494
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
495 classDescription: "Nightly Tester Install Monitor",
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
496 contractID: "@oxymoronical.com/nightly/addoncompatibility;1",
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
497 classID: Components.ID("{801207d5-037c-4565-80ed-ede8f7a7c100}"),
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
498 QueryInterface: XPCOMUtils.generateQI([Ci.nttIAddonCompatibilityService, Ci.nsIAddonInstallListener, Ci.nsIObserver]),
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
499 _xpcom_categories: [{
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
500 category: "app-startup",
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
501 service: true
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
502 }]
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
503 }
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
504
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
505 function NSGetModule(compMgr, fileSpec)
dada0ac40a8f initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
506 XPCOMUtils.generateModule([nttAddonCompatibilityService]);