mkaply%us.ibm.com 4adf46bd77 CCK - NPOB - Fix separator and some positioning
git-svn-id: svn://10.0.0.236/trunk@256116 18797224-902f-48f8-a5cc-f745e15eee43
2009-02-05 16:22:00 +00:00

378 lines
12 KiB
JavaScript
Executable File

const Cc = Components.classes;
const Ci = Components.interfaces;
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
const gPrefService = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
const gPrefBranch = gPrefService.getBranch(null).QueryInterface(Ci.nsIPrefBranch2);
const gDefPrefBranch = gPrefService.getDefaultBranch(null);
const gObserver = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
const gConsoleService = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
const gBundleService = Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService );
const gPermMgr = Cc["@mozilla.org/permissionmanager;1"].getService(Ci.nsIPermissionManager);
const gIOService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
const gCCKBundle = gBundleService.createBundle("chrome://cck/content/cck.properties");
function CCKService() {
}
CCKService.prototype = {
bookmarks: null,
livemarks: null,
annoService: null,
observe: function(aSubject, aTopic, aData) {
switch(aTopic) {
case "app-startup":
gObserver.addObserver(this,"profile-after-change",false);
gObserver.addObserver(this,"profile-before-change",false);
gObserver.addObserver(this,"xpcom-shutdown",false);
gObserver.addObserver(this,"final-ui-startup",false);
break;
case "xpcom-shutdown":
gObserver.removeObserver(this,"profile-after-change");
gObserver.removeObserver(this,"profile-before-change");
gObserver.removeObserver(this,"final-ui-startup");
gObserver.removeObserver(this,"xpcom-shutdown");
break;
case "profile-before-change":
this.uninit();
break;
case "profile-after-change":
this.bookmarks = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Ci.nsINavBookmarksService);
this.livemarks = Cc["@mozilla.org/browser/livemark-service;2"].getService(Ci.nsILivemarkService);
this.annoService = Cc["@mozilla.org/browser/annotation-service;1"].getService(Ci.nsIAnnotationService);
break;
case "final-ui-startup":
this.init();
break;
}
},
init: function() {
var i;
var id = this.getString("id");
var version = this.getString("version");
var prefName;
i=1;
do {
prefName = this.getString("LockPref" + i);
if (prefName) {
if ((prefName == "browser.startup.homepage") ||
(prefName == "browser.search.defaultenginename") ||
(prefName == "browser.search.order.1") ||
(prefName == "browser.throbber.url")) {
var url = this.getString(prefName);
if (url) {
gDefPrefBranch.setCharPref(prefName, url);
} else {
url = gDefPrefBranch.getComplexValue(prefName, Ci.nsIPrefLocalizedString).data;
gDefPrefBranch.setCharPref(prefName, url);
}
}
gPrefBranch.lockPref(prefName);
}
i++;
} while (prefName);
/* Windows only */
if ("@mozilla.org/windows-registry-key;1" in Cc) {
var RegName, RootKey, Key, Name, NameValue, Type;
i=1;
do {
RegName = this.getString("RegName" + i);
if (!RegName) {
break;
}
RootKey = this.getString("RootKey" + i);
Key = this.getString("Key" + i);
Name = this.getString("Name" + i);
NameValue = this.getString("NameValue" + i);
Type = this.getString("Type" + i);
this.addRegistryKey(RootKey, Key, Name, NameValue, Type);
i++;
} while (RegName)
}
var CertName, CertTrust;
i=1;
do {
CertName = this.getString("Cert" + i);
if (!CertName)
break;
CertTrust = this.getString("CertTrust" + i);
if (!CertTrust)
CertTrust = "C,C,C";
this.addCertificate(CertName, CertTrust);
i++;
} while (CertName)
var sites;
sites = this.getString("PopupAllowedSites");
if (sites)
this.updatePermissions(sites, "popup", 1);
sites = this.getString("InstallAllowedSites");
if (sites)
this.updatePermissions(sites, "install", 1);
sites = this.getString("CookieAllowedSites");
if (sites)
this.updatePermissions(sites, "cookie", 1);
sites = this.getString("PopupDeniedSites");
if (sites)
this.updatePermissions(sites, "popup", 2);
sites = this.getString("InstallDeniedSites");
if (sites)
this.updatePermissions(sites, "install", 2);
sites = this.getString("CookieDeniedSites");
if (sites)
this.updatePermissions(sites, "cookie", 2);
var mybookmarks = this.annoService.getItemsWithAnnotation(id + "/" + version, {});
/* Don't recreate any bookmarks if some are already there. Note that */
/* if the user delete them all, we recreate */
if (mybookmarks.length > 0) {
return;
}
var ToolbarLocation;
ToolbarLocation = this.getString("ToolbarLocation");
if ((ToolbarLocation) && (ToolbarLocation == "First")) {
this.addBookmarks("Toolbar", this.bookmarks.toolbarFolder, 1, id + "/" + version);
this.addFolder("Toolbar", this.bookmarks.toolbarFolder, 1, id + "/" + version);
} else {
this.addFolder("Toolbar", this.bookmarks.toolbarFolder, -1, id + "/" + version);
this.addBookmarks("Toolbar", this.bookmarks.toolbarFolder, -1, id + "/" + version);
}
var BookmarkLocation;
BookmarkLocation = this.getString("BookmarkLocation");
if ((BookmarkLocation) && (BookmarkLocation == "First")) {
this.addBookmarks("", this.bookmarks.bookmarksMenuFolder, 1, id + "/" + version);
this.addFolder("Bookmark", this.bookmarks.bookmarksMenuFolder, 1, id + "/" + version);
} else {
this.addFolder("Bookmark", this.bookmarks.bookmarksMenuFolder, -1, id + "/" + version);
this.addBookmarks("", this.bookmarks.bookmarksMenuFolder, -1, id + "/" + version);
}
},
/* This function cleans up SOME CCK stuff if we are disabled or uninstalled */
uninit: function() {
var id = this.getString("id");
var version = this.getString("version");
var rdfs = Components.classes["@mozilla.org/rdf/rdf-service;1"]
.getService(Components.interfaces.nsIRDFService);
var extensionDS= Components.classes["@mozilla.org/extensions/manager;1"]
.getService(Components.interfaces.nsIExtensionManager).datasource;
var extension = rdfs.GetResource("urn:mozilla:item:" + id);
var opTypeArc = rdfs.GetResource("http://www.mozilla.org/2004/em-rdf#opType");
var opType = extensionDS.GetTarget(extension, opTypeArc, true);
if (opType) {
opType = opType.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
if (opType && ((opType == "needs-uninstall") || (opType == "needs-disable") || (opType == "needs-upgrade"))) {
var i = 1;
var prefName;
do {
prefName = this.getString("LockPref" + i);
if (prefName && prefName.length) {
gPrefBranch.unlockPref(prefName);
}
i++;
} while (prefName && prefName.length);
var mybookmarks = this.annoService.getItemsWithAnnotation(id + "/" + version, {});
for (var i = 0; i < mybookmarks.length; i++) {
try {
this.bookmarks.removeItem(mybookmarks[i]);
} catch (ex) {
/* This could fail if we removed the folder before the boomark */
}
}
}
}
},
addRegistryKey: function(RootKey, Key, Name, NameValue, Type) {
const nsIWindowsRegKey = Ci.nsIWindowsRegKey;
try {
var key = Cc["@mozilla.org/windows-registry-key;1"]
.createInstance(nsIWindowsRegKey);
var rootKey;
switch (RootKey) {
case "HKEY_CLASSES_ROOT":
rootKey = nsIWindowsRegKey.ROOT_KEY_CLASSES_ROOT;
break;
case "HKEY_CURRENT_USER":
rootKey = nsIWindowsRegKey.ROOT_KEY_CURRENT_USER;
break;
default:
rootKey = nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE;
break;
}
key.create(rootKey, Key, nsIWindowsRegKey.ACCESS_WRITE);
switch (Type) {
case "REG_DWORD":
key.writeIntValue(Name, NameValue);
break;
case "REG_QWORD":
key.writeInt64Value(Name, NameValue);
break;
case "REG_BINARY":
key.writeBinaryValue(Name, NameValue);
break;
case "REG_SZ":
default:
key.writeStringValue(Name, NameValue);
break;
}
key.close();
} catch (ex) {
/* This could fail if you don't have the right authority on Windows */
}
},
addCertificate: function(CertName, CertTrust) {
var certDB = Cc["@mozilla.org/security/x509certdb;1"].getService(Ci.nsIX509CertDB2);
var scriptableStream=Cc["@mozilla.org/scriptableinputstream;1"].getService(Ci.nsIScriptableInputStream);
var channel = gIOService.newChannel("chrome://cck/content/" + CertName, null, null);
var input=channel.open();
scriptableStream.init(input);
var certfile=scriptableStream.read(input.available());
scriptableStream.close();
input.close();
var beginCert = "-----BEGIN CERTIFICATE-----";
var endCert = "-----END CERTIFICATE-----";
certfile = certfile.replace(/[\r\n]/g, "");
var begin = certfile.indexOf(beginCert);
var end = certfile.indexOf(endCert);
var cert = certfile.substring(begin + beginCert.length, end);
certDB.addCertFromBase64(cert, CertTrust, "");
},
updatePermissions: function(sites, type, permission) {
var sitesArray = sites.split(",");
for (var i=0; i < sitesArray.length; i++) {
try {
var uri = gIOService.newURI("http://" + sitesArray[i], null, null);
gPermMgr.add(uri, type, permission);
} catch (ex) {}
}
},
addBookmarks: function(prefix, container, location, inId) {
var BookmarkTitle;
var BookmarkURL;
// items are added in reverse order if we are set to "First"
var start, end, increment;
var i = 1;
var numBookmarks = 0;
var curtem;
while (1) {
var title = this.getString(prefix + "BookmarkTitle" + i);
if (!title)
break;
i++;
numBookmarks++;
}
if (location == -1) {
start = 1;
end = numBookmarks+1;
increment = 1;
} else {
start = numBookmarks;
end = 0;
increment = -1;
}
for (var i=start; i!=end; i+=increment) {
BookmarkTitle = this.getString(prefix + "BookmarkTitle" + i);
if (BookmarkTitle) {
BookmarkURL = this.getString(prefix + "BookmarkURL" + i);
var bmtype = this.getString(prefix + "BookmarkType" + i);
var curitem;
if (bmtype == "separator") {
curitem = this.bookmarks.insertSeparator(container, location);
} else if (BookmarkURL) {
if (bmtype == "live") {
curitem = this.livemarks.createLivemark(container, BookmarkTitle, null, this.makeURI(BookmarkURL), location);
}else {
curitem = this.bookmarks.insertBookmark(container, this.makeURI(BookmarkURL), location, BookmarkTitle);
}
}
if (curitem) {
this.annoService.setItemAnnotation(curitem, inId, "true", 0, this.annoService.EXPIRE_NEVER);
}
}
}
},
addFolder: function(prefix, container, location, inId) {
var BookmarkFolder;
// items are added in reverse order if we are set to "First"
var start, end, increment;
if (location == -1) {
start = 1;
end = 6;
increment = 1;
} else {
start = 5;
end = 0;
increment = -1;
}
// Bookmarks folder with bookmarks
for (var i=start; i!=end; i+=increment) {
BookmarkFolder = this.getString(prefix + "Folder" + i);
if (BookmarkFolder) {
var newfolder = this.bookmarks.createFolder(container, BookmarkFolder, location);
this.annoService.setItemAnnotation(newfolder, inId, "true", 0, this.annoService.EXPIRE_NEVER);
this.addBookmarks(prefix + "Folder" + i + ".", newfolder, 0, inId);
}
}
},
getString: function(id) {
try {
var string = gCCKBundle.GetStringFromName(id);
if (string.length) {
return string;
}
} catch (ex) {}
return undefined;
},
makeURI: function(aURL, aOriginCharset, aBaseURI) {
try {
var uri = gIOService.newURI(aURL, aOriginCharset, aBaseURI);
return uri;
} catch (ex) {
this.log(ex);
this.log(aURL);
}
return null;
},
log: function(string) {
gConsoleService.logStringMessage(string);
},
classDescription: "CCK Service - %OrganizationName%",
contractID: "@mozilla.org/cck-service-%OrganizationName%;2",
classID: Components.ID("%uuid%"),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
_xpcom_categories: [{
category: "app-startup",
service: true
}]
}
function NSGetModule(compMgr, fileSpec) {
return XPCOMUtils.generateModule([CCKService]);
}