mkaply%us.ibm.com 080c772c38 CCK only - not part of build - properly support welcome and upgrade page
git-svn-id: svn://10.0.0.236/trunk@245778 18797224-902f-48f8-a5cc-f745e15eee43
2008-02-15 13:40:50 +00:00

871 lines
29 KiB
JavaScript
Executable File

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is the Client Customization Kit (CCK).
*
* The Initial Developer of the Original Code is
* Giorgio Maone <g.maone@informaction.com>
* Portions created by the Initial Developer are Copyright (C) 2005
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* IBM Corp.
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
function CCKService() {
this.register();
}
CCKService.prototype={
get wrappedJSObject() {
return this;
}
,
QueryInterface: function(iid) {
this.queryInterfaceSupport(iid,SERVICE_IIDS);
return this;
}
,
// nsIObserver implementation
observe: function(subject, topic, data) {
//dump(SERVICE_NAME+" notified of "+subject+","+topic+","+data); //DDEBUG
switch(topic) {
case "xpcom-shutdown":
this.unregister();
break;
case "profile-after-change":
this.init();
break;
case "profile-before-change":
this.uninit();
break;
}
}
,
register: function() {
const osvr=Components.classes['@mozilla.org/observer-service;1'].getService(
Components.interfaces.nsIObserverService);
osvr.addObserver(this,"xpcom-shutdown",false);
osvr.addObserver(this,"profile-after-change",false);
osvr.addObserver(this,"profile-before-change",false);
}
,
unregister: function() {
const osvr=Components.classes['@mozilla.org/observer-service;1'].getService(
Components.interfaces.nsIObserverService);
osvr.removeObserver(this,"xpcom-shutdown");
osvr.removeObserver(this,"profile-after-change");
osvr.removeObserver(this,"profile-before-change");
}
,
_inited: false
,
init: function() {
if(this._inited) return;
this._inited=true;
var prefbranch;
var defprefbranch;
try {
prefbranch=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
defprefbranch = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService)
.getDefaultBranch(null);
} catch (ex) {
return;
}
var sbs;
var bundle;
var pm;
var ioService;
var id;
try {
sbs = Components.classes["@mozilla.org/intl/stringbundle;1"]
.getService(Components.interfaces.nsIStringBundleService );
bundle = sbs.createBundle("chrome://cck/content/cck.properties");
pm = Components.classes["@mozilla.org/permissionmanager;1"].getService(Components.interfaces.nsIPermissionManager);
ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
} catch (ex) {
return;
}
var id = bundle.GetStringFromName("id");
var version = bundle.GetStringFromName("version");
if ("@mozilla.org/windows-registry-key;1" in Components.classes) {
const nsIWindowsRegKey = Components.interfaces.nsIWindowsRegKey;
var i = 1;
var RegName, RootKey, Key, Name, NameValue, Type;
do {
/* This could fail if you don't have the right authority on Windows */
try {
RegName = bundle.GetStringFromName("RegName" + i);
RootKey = bundle.GetStringFromName("RootKey" + i);
Key = bundle.GetStringFromName("Key" + i);
Name = bundle.GetStringFromName("Name" + i);
NameValue = bundle.GetStringFromName("NameValue" + i);
Type = bundle.GetStringFromName("Type" + i);
} catch (ex) {
RegName = "";
}
if (RegName && RegName.length) {
try {
var key = Components.classes["@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) {}
}
i++;
} while (RegName && RegName.length)
}
const nsIX509CertDB2 = Components.interfaces.nsIX509CertDB2;
const nsX509CertDBContractID = "@mozilla.org/security/x509certdb;1";
var certDB = Components.classes[nsX509CertDBContractID].getService(nsIX509CertDB2);
var i = 1;
var CertName, CertTrust;
do {
try {
CertName = bundle.GetStringFromName("Cert" + i);
} catch (ex) {
CertName = "";
}
try {
CertTrust = bundle.GetStringFromName("CertTrust" + i);
} catch (ex) {
CertTrust = "C,C,C";
}
if (CertName && CertName.length) {
var ioService=Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var scriptableStream=Components.classes["@mozilla.org/scriptableinputstream;1"]
.getService(Components.interfaces.nsIScriptableInputStream);
var channel=ioService.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, "");
}
i++;
} while (CertName && CertName.length)
var popupAllowedSites;
try {
popupAllowedSites = bundle.GetStringFromName("PopupAllowedSites");
} catch (ex) {}
if (popupAllowedSites) {
var popupAllowedSitesArray = popupAllowedSites.split(",");
for (var i=0; i < popupAllowedSitesArray.length; i++) {
try {
var uri = ioService.newURI("http://" + popupAllowedSitesArray[i], null, null);
pm.add(uri, "popup", 1);
} catch (ex) {}
}
}
var installAllowedSites;
try {
installAllowedSites = bundle.GetStringFromName("InstallAllowedSites");
} catch (ex) {}
if (popupAllowedSites) {
var installAllowedSitesArray = installAllowedSites.split(",");
for (var i=0; i < installAllowedSitesArray.length; i++) {
try {
var uri = ioService.newURI("http://" + installAllowedSitesArray[i], null, null);
pm.add(uri, "install", 1);
} catch (ex) {}
}
}
var i = 1;
var prefName;
do {
try {
prefName = bundle.GetStringFromName("LockPref" + i);
} catch (ex) {
prefName = "";
}
if (prefName && prefName.length) {
if ((prefName == "browser.startup.homepage") || (prefName == "browser.throbber.url")) {
var url = bundle.GetStringFromName(prefName);
if (url) {
defprefbranch.setCharPref(prefName, url);
} else {
url = defprefbranch.getComplexValue(prefName,
Components.interfaces.nsIPrefLocalizedString).data;
defprefbranch.setCharPref(prefName, url);
}
}
prefbranch.lockPref(prefName);
}
i++;
} while (prefName && prefName.length);
var FF2 = false;
try {
var bookmarks = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
.getService(Components.interfaces.nsINavBookmarksService);
} catch (ex) {
FF2 = true;
}
var OrgName = bundle.GetStringFromName("OrganizationName");
if (FF2) {
var cckinited = false;
try {
cckinited = prefbranch.getBoolPref("cck." + OrgName + ".initialized");
} catch (ex) {
try {
cckinited = prefbranch.getBoolPref("cck.initialized");
prefbranch.setBoolPref("cck." + OrgName + ".initialized", cckinited);
prefbranch.deleteBranch("cck.initialized");
} catch (ex) {
cckinited = false;
}
}
/* DO BOOKMARK STUFF */
} else {
/* reset the old pref */
try {
prefbranch.clearUserPref("cck." + OrgName + ".initialized");
} catch (ex) {
/* Might not be there, but we try every time */
}
}
/* Only do bookmarks if we haven't been inited to avoid duplicated */
if (!cckinited || bookmarks) {
if (bookmarks) {
var annosvc = Components.classes["@mozilla.org/browser/annotation-service;1"]
.getService(Components.interfaces.nsIAnnotationService);
var mybookmarks = annosvc.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;
}
} else {
var RDF;
var BMSVC;
var bmRoot;
try {
RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService)
BMSVC = RDF.GetDataSource("rdf:bookmarks").QueryInterface(Components.interfaces.nsIBookmarksService);
BMSVC.readBookmarks();
bmRoot = RDF.GetResource("NC:BookmarksRoot");
} catch (ex) {
return false;
}
try {
BMSVC.QueryInterface(Components.interfaces.nsIBookmarksService_MOZILLA_1_8_BRANCH);
} catch (ex) {}
}
var ToolbarLocation;
var tbIndex = -1; // last
try {
ToolbarLocation = bundle.GetStringFromName("ToolbarLocation");
} catch (ex) {}
if ((ToolbarLocation) && (ToolbarLocation == "First")) {
tbIndex = 1;
if (bookmarks) {
addBookmarksPlaces(bundle, "Toolbar", bookmarks.toolbarFolder, tbIndex, id + "/" + version);
addFolderPlaces(bundle, "Toolbar", bookmarks.toolbarFolder, tbIndex, id + "/" + version);
} else {
addBookmarks(bundle, BMSVC, "Toolbar", BMSVC.getBookmarksToolbarFolder(), tbIndex);
addFolder(bundle, BMSVC, "Toolbar", BMSVC.getBookmarksToolbarFolder(), tbIndex);
}
} else {
if (bookmarks) {
addFolderPlaces(bundle, "Toolbar", bookmarks.toolbarFolder, tbIndex, id + "/" + version);
addBookmarksPlaces(bundle, "Toolbar", bookmarks.toolbarFolder, tbIndex, id + "/" + version);
} else {
addFolder(bundle, BMSVC, "Toolbar", BMSVC.getBookmarksToolbarFolder(), tbIndex);
addBookmarks(bundle, BMSVC, "Toolbar", BMSVC.getBookmarksToolbarFolder(), tbIndex);
}
}
var BookmarkLocation;
var bmIndex = -1; // last
try {
BookmarkLocation = bundle.GetStringFromName("BookmarkLocation");
} catch (ex) {}
if ((BookmarkLocation) && (BookmarkLocation == "First")) {
bmIndex = 1;
if (bookmarks) {
addBookmarksPlaces(bundle, "", bookmarks.bookmarksMenuFolder, bmIndex, id + "/" + version);
addFolderPlaces(bundle, "Bookmark", bookmarks.bookmarksMenuFolder, bmIndex, id + "/" + version);
} else {
addBookmarks(bundle, BMSVC, "", bmRoot, bmIndex);
addFolder(bundle, BMSVC, "Bookmark", bmRoot, bmIndex);
}
} else {
if (bookmarks) {
addFolderPlaces(bundle, "Bookmark", bookmarks.bookmarksMenuFolder, bmIndex, id + "/" + version);
addBookmarksPlaces(bundle, "", bookmarks.bookmarksMenuFolder, bmIndex, id + "/" + version);
} else {
addFolder(bundle, BMSVC, "Bookmark", bmRoot, bmIndex);
addBookmarks(bundle, BMSVC, "", bmRoot, bmIndex);
}
}
/* Only set initialized if we are in the old case */
if (!bookmarks) {
OrgName = bundle.GetStringFromName("OrganizationName");
prefbranch.setBoolPref("cck." + OrgName + ".initialized", true);
}
}
}
,
uninit: function() {
var prefbranch;
try {
prefbranch=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
} catch (ex) {
return;
}
var sbs;
var bundle;
try {
sbs = Components.classes["@mozilla.org/intl/stringbundle;1"]
.getService(Components.interfaces.nsIStringBundleService );
bundle = sbs.createBundle("chrome://cck/content/cck.properties");
} catch (ex) {
return;
}
var id = bundle.GetStringFromName("id");
var version = bundle.GetStringFromName("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 {
try {
prefName = bundle.GetStringFromName("LockPref" + i);
} catch (ex) {
prefName = "";
}
if (prefName && prefName.length) {
prefbranch.unlockPref(prefName);
}
i++;
} while (prefName && prefName.length);
var annosvc = Components.classes["@mozilla.org/browser/annotation-service;1"]
.getService(Components.interfaces.nsIAnnotationService);
var bookmarks = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
.getService(Components.interfaces.nsINavBookmarksService);
var mybookmarks = annosvc.getItemsWithAnnotation(id + "/" + version, {});
for (var i = 0; i < mybookmarks.length; i++) {
try {
bookmarks.removeItem(mybookmarks[i]);
} catch (ex) {
/* This could fail if we removed the folder before the boomark */
}
}
}
}
}
}
function addBookmarks(bundle, BMSVC, prefix, folder, location)
{
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;
while (1) {
try {
var title = bundle.GetStringFromName(prefix + "BookmarkTitle" + i);
} catch (ex) {
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) {
try {
BookmarkTitle = bundle.GetStringFromName(prefix + "BookmarkTitle" + i);
} catch (ex) {
BookmarkTitle = "";
}
if ((BookmarkTitle) && (BookmarkTitle.length)) {
try {
BookmarkURL = bundle.GetStringFromName(prefix + "BookmarkURL" + i);
} catch (ex) {
BookmarkURL = "";
}
if ((BookmarkURL) && (BookmarkURL.length)) {
var bmtype;
try {
bmtype = bundle.GetStringFromName(prefix + "BookmarkType" + i);
} catch (ex) {
bmtype = "";
}
if (bmtype == "live") {
BMSVC.createLivemarkInContainer(BookmarkTitle, "", BookmarkURL, "", folder, location);
} else if (bmtype == "separator") {
try {
BMSVC.createSeparatorInContainer(folder, -1);
} catch (ex) {}
} else {
if (BMSVC.createBookmarkInContainer.length == 8)
BMSVC.createBookmarkInContainer(BookmarkTitle, BookmarkURL, "", "", "", "", folder, location);
else
BMSVC.createBookmarkInContainer(BookmarkTitle, BookmarkURL, "", "", "", folder, location);
}
}
}
}
}
function addBookmarksPlaces(bundle, prefix, container, location, inId)
{
var bookmarks = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
.getService(Components.interfaces.nsINavBookmarksService);
var livemarks = Components.classes["@mozilla.org/browser/livemark-service;2"]
.getService(Components.interfaces.nsILivemarkService);
var annosvc = Components.classes["@mozilla.org/browser/annotation-service;1"]
.getService(Components.interfaces.nsIAnnotationService);
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) {
try {
var title = bundle.GetStringFromName(prefix + "BookmarkTitle" + i);
} catch (ex) {
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) {
try {
BookmarkTitle = bundle.GetStringFromName(prefix + "BookmarkTitle" + i);
} catch (ex) {
BookmarkTitle = "";
}
if ((BookmarkTitle) && (BookmarkTitle.length)) {
try {
BookmarkURL = bundle.GetStringFromName(prefix + "BookmarkURL" + i);
} catch (ex) {
BookmarkURL = "";
}
if ((BookmarkURL) && (BookmarkURL.length)) {
var bmtype;
try {
bmtype = bundle.GetStringFromName(prefix + "BookmarkType" + i);
} catch (ex) {
bmtype = "";
}
var curitem;
if (bmtype == "live") {
curitem = livemarks.createLivemark(container, BookmarkTitle, null, makeURI(BookmarkURL), -1);
} else if (bmtype == "separator") {
curitem = bookmarks.insertSeparator(container, -1);
} else {
curitem = bookmarks.insertBookmark(container, makeURI(BookmarkURL), location, BookmarkTitle);
}
if (curitem) {
annosvc.setItemAnnotation(curitem, inId, "true", 0,
annosvc.EXPIRE_NEVER);
}
}
}
}
}
function addFolder(bundle, BMSVC, prefix, folder, location)
{
var BookmarkFolder;
var BookmarkTitle;
var BookmarkURL;
// 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) {
try {
BookmarkFolder = bundle.GetStringFromName(prefix + "Folder" + i);
} catch (ex) {
BookmarkFolder = "";
}
if ((BookmarkFolder) && (BookmarkFolder.length)) {
var newfolder;
newfolder = BMSVC.createFolderInContainer(BookmarkFolder, folder, location);
var j = 1;
var numBookmarks = 0;
while (1) {
try {
var title = bundle.GetStringFromName(prefix + "Folder" + i + ".BookmarkTitle" + j);
} catch (ex) {
break;
}
j++;
numBookmarks++;
}
for (var j=1; j<=numBookmarks; j++) {
try {
BookmarkTitle = bundle.GetStringFromName(prefix + "Folder" + i + ".BookmarkTitle" + j);
} catch (ex) {
BookmarkTitle = "";
}
if ((BookmarkTitle) && (BookmarkTitle.length)) {
try {
BookmarkURL = bundle.GetStringFromName(prefix + "Folder" + i + ".BookmarkURL" + j);
} catch (ex) {
BookmarkURL = "";
}
if ((BookmarkURL) && (BookmarkURL.length)) {
var bmtype;
try {
bmtype = bundle.GetStringFromName(prefix + "Folder" + i + ".BookmarkType" + j);
} catch (ex) {
bmtype = "";
}
if (bmtype == "live") {
BMSVC.createLivemarkInContainer(BookmarkTitle, "", BookmarkURL, "", newfolder, -1);
} else if (bmtype == "separator") {
try {
BMSVC.createSeparatorInContainer(newfolder, -1);
} catch (ex) {}
} else {
if (BMSVC.createBookmarkInContainer.length == 8)
BMSVC.createBookmarkInContainer(BookmarkTitle, BookmarkURL, "", "", "", "", newfolder, -1);
else
BMSVC.createBookmarkInContainer(BookmarkTitle, BookmarkURL, "", "", "", newfolder, -1);
}
}
}
}
}
}
}
function addFolderPlaces(bundle, prefix, container, location, inId)
{
var bookmarks = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
.getService(Components.interfaces.nsINavBookmarksService);
var livemarks = Components.classes["@mozilla.org/browser/livemark-service;2"]
.getService(Components.interfaces.nsILivemarkService);
var annosvc = Components.classes["@mozilla.org/browser/annotation-service;1"]
.getService(Components.interfaces.nsIAnnotationService);
var BookmarkFolder;
var BookmarkTitle;
var BookmarkURL;
var curitem;
// 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) {
try {
BookmarkFolder = bundle.GetStringFromName(prefix + "Folder" + i);
} catch (ex) {
BookmarkFolder = "";
}
if ((BookmarkFolder) && (BookmarkFolder.length)) {
var newfolder;
newfolder = bookmarks.createFolder(container, BookmarkFolder, location);
annosvc.setItemAnnotation(newfolder, inId, "true", 0,
annosvc.EXPIRE_NEVER);
var j = 1;
var numBookmarks = 0;
while (1) {
try {
var title = bundle.GetStringFromName(prefix + "Folder" + i + ".BookmarkTitle" + j);
} catch (ex) {
break;
}
j++;
numBookmarks++;
}
for (var j=1; j<=numBookmarks; j++) {
try {
BookmarkTitle = bundle.GetStringFromName(prefix + "Folder" + i + ".BookmarkTitle" + j);
} catch (ex) {
BookmarkTitle = "";
}
if ((BookmarkTitle) && (BookmarkTitle.length)) {
try {
BookmarkURL = bundle.GetStringFromName(prefix + "Folder" + i + ".BookmarkURL" + j);
} catch (ex) {
BookmarkURL = "";
}
if ((BookmarkURL) && (BookmarkURL.length)) {
var bmtype;
try {
bmtype = bundle.GetStringFromName(prefix + "Folder" + i + ".BookmarkType" + j);
} catch (ex) {
bmtype = "";
}
if (bmtype == "live") {
curitem = livemarks.createLivemark(newfolder, BookmarkTitle, null, makeURI(BookmarkURL), -1);
} else if (bmtype == "separator") {
try {
curitem = bookmarks.insertSeparator(newfolder, -1);
} catch (ex) {}
} else {
curitem = bookmarks.insertBookmark(newfolder, makeURI(BookmarkURL), location, BookmarkTitle);
}
if (curitem) {
annosvc.setItemAnnotation(curitem, inId, "true", 0,
annosvc.EXPIRE_NEVER);
}
}
}
}
}
}
}
function makeURI(aURL, aOriginCharset, aBaseURI)
{
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
return ioService.newURI(aURL, aOriginCharset, aBaseURI);
}
// XPCOM Scaffolding code
// component defined in this file
const SERVICE_NAME="CCK Service - %OrganizationName%";
const SERVICE_ID="%uuid%";
const SERVICE_CTRID = "@mozilla.org/cck-service-%OrganizationName%;1";
const SERVICE_CONSTRUCTOR=CCKService;
const SERVICE_CID = Components.ID(SERVICE_ID);
// interfaces implemented by this component
const SERVICE_IIDS =
[
Components.interfaces.nsIObserver,
Components.interfaces.nsISupports,
Components.interfaces.nsISupportsWeakReference
];
// Factory object
const SERVICE_FACTORY = {
_instance: new SERVICE_CONSTRUCTOR(),
createInstance: function (outer, iid) {
if (outer != null)
throw Components.results.NS_ERROR_NO_AGGREGATION;
xpcom_checkInterfaces(iid,SERVICE_IIDS,Components.results.NS_ERROR_INVALID_ARG);
// kept this for flexibility sake, but we're really adopting an
// early instantiation and late init singleton pattern
return this._instance==null?this._instance=new SERVICE_CONSTRUCTOR():this._instance;
}
};
function xpcom_checkInterfaces(iid,iids,ex) {
for(var j=iids.length; j-- >0;) {
if(iid.equals(iids[j])) return true;
}
throw ex;
}
// Module
var Module = new Object();
Module.firstTime=true;
Module.registerSelf = function (compMgr, fileSpec, location, type) {
if(this.firstTime) {
debug("*** Registering "+SERVICE_CTRID+".\n");
compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar
).registerFactoryLocation(SERVICE_CID,
SERVICE_NAME,
SERVICE_CTRID,
fileSpec,
location,
type);
Components.classes['@mozilla.org/categorymanager;1'].getService(
Components.interfaces.nsICategoryManager
).addCategoryEntry("app-startup",
SERVICE_NAME, "service," + SERVICE_CTRID, true, true, null);
this.firstTime=false;
}
}
Module.unregisterSelf = function(compMgr, fileSpec, location) {
compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar
).unregisterFactoryLocation(SERVICE_CID, fileSpec);
Components.classes['@mozilla.org/categorymanager;1'].getService(
Components.interfaces.nsICategoryManager
).deleteCategoryEntry("app-startup",SERVICE_NAME, true);
}
Module.getClassObject = function (compMgr, cid, iid) {
if(cid.equals(SERVICE_CID))
return SERVICE_FACTORY;
if (!iid.equals(Components.interfaces.nsIFactory))
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
throw Components.results.NS_ERROR_NO_INTERFACE;
}
Module.canUnload = function(compMgr) {
return true;
}
// entrypoint
function NSGetModule(compMgr, fileSpec) {
return Module;
}