Compare commits
1 Commits
Fix_For_Bu
...
src
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
258dc9fead |
39
mozilla/xpinstall/Makefile.in
Normal file
39
mozilla/xpinstall/Makefile.in
Normal file
@@ -0,0 +1,39 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (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/NPL/
|
||||
#
|
||||
# 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 Mozilla Communicator client code,
|
||||
# released March 31, 1998.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape Communications
|
||||
# Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
# Contributors:
|
||||
# Daniel Veditz <dveditz@netscape.com>
|
||||
# Douglas Turner <dougt@netscape.com>
|
||||
|
||||
|
||||
DEPTH = ..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
DIRS = public
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
|
||||
BIN
mozilla/xpinstall/macbuild/xpinstall.mcp
Normal file
BIN
mozilla/xpinstall/macbuild/xpinstall.mcp
Normal file
Binary file not shown.
BIN
mozilla/xpinstall/macbuild/xpinstallIDL.mcp
Normal file
BIN
mozilla/xpinstall/macbuild/xpinstallIDL.mcp
Normal file
Binary file not shown.
30
mozilla/xpinstall/makefile.win
Normal file
30
mozilla/xpinstall/makefile.win
Normal file
@@ -0,0 +1,30 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (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/NPL/
|
||||
#
|
||||
# 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 Mozilla Communicator client code,
|
||||
# released March 31, 1998.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape Communications
|
||||
# Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
# Contributors:
|
||||
# Daniel Veditz <dveditz@netscape.com>
|
||||
# Douglas Turner <dougt@netscape.com>
|
||||
|
||||
|
||||
DEPTH=..
|
||||
|
||||
DIRS= public res src
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
33
mozilla/xpinstall/notifier/SoftwareUpdate-Source-1.rdf
Normal file
33
mozilla/xpinstall/notifier/SoftwareUpdate-Source-1.rdf
Normal file
@@ -0,0 +1,33 @@
|
||||
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:NC="http://home.netscape.com/NC-rdf#">
|
||||
|
||||
<RDF:Bag ID="NC:SoftwareUpdateRoot">
|
||||
<RDF:li>
|
||||
<RDF:Bag ID="NC:NewSoftwareToday" NC:title="New Software">
|
||||
|
||||
<RDF:li>
|
||||
<RDF:Description ID="AimUpdate344">
|
||||
<NC:type resource="http://home.netscape.com/NC-rdf#SoftwarePackage" />
|
||||
<NC:title>AOL AIM</NC:title>
|
||||
<NC:description>An Instant Message Client</NC:description>
|
||||
<NC:version>3.4.1.12</NC:version>
|
||||
<NC:registryKey>/AOL/AIM/</NC:registryKey>
|
||||
<NC:url>http://home.netscape.com/index.html</NC:url>
|
||||
</RDF:Description>
|
||||
</RDF:li>
|
||||
|
||||
<RDF:li>
|
||||
<RDF:Description ID="PGPPlugin345">
|
||||
<NC:type resource="http://home.netscape.com/NC-rdf#SoftwarePackage" />
|
||||
<NC:title>PGP Plugin For Mozilla</NC:title>
|
||||
<NC:description>A high grade encryption plugin</NC:description>
|
||||
<NC:version>1.1.2.0</NC:version>
|
||||
<NC:registryKey>/PGP/ROCKS/</NC:registryKey>
|
||||
<NC:url>http://home.netscape.com/index.html</NC:url>
|
||||
</RDF:Description>
|
||||
</RDF:li>
|
||||
|
||||
</RDF:Bag>
|
||||
</RDF:li>
|
||||
</RDF:Bag>
|
||||
</RDF:RDF>
|
||||
57
mozilla/xpinstall/notifier/SoftwareUpdate.css
Normal file
57
mozilla/xpinstall/notifier/SoftwareUpdate.css
Normal file
@@ -0,0 +1,57 @@
|
||||
window {
|
||||
display: block;
|
||||
}
|
||||
|
||||
tree {
|
||||
display: table;
|
||||
background-color: #FFFFFF;
|
||||
border: none;
|
||||
border-spacing: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
treecol {
|
||||
display: table-column;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
treeitem {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
treehead {
|
||||
display: table-header-group;
|
||||
}
|
||||
|
||||
treebody {
|
||||
display: table-row-group;
|
||||
}
|
||||
|
||||
treecell {
|
||||
display: table-cell;
|
||||
font-family: Verdana, Sans-Serif;
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
||||
treecell[selectedcell] {
|
||||
background-color: yellow;
|
||||
}
|
||||
|
||||
|
||||
treehead treeitem treecell {
|
||||
background-color: #c0c0c0;
|
||||
border: outset 1px;
|
||||
border-color: white #707070 #707070 white;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
treeitem[type="http://home.netscape.com/NC-rdf#SoftwarePackage"] > treecell > titledbutton {
|
||||
list-style-image: url("resource:/res/rdf/SoftwareUpdatePackage.gif");
|
||||
}
|
||||
|
||||
treeitem[type="http://home.netscape.com/NC-rdf#Folder"] > treecell > titledbutton {
|
||||
list-style-image: url("resource:/res/rdf/bookmark-folder-closed.gif");
|
||||
|
||||
treeitem[type="http://home.netscape.com/NC-rdf#Folder"][open="true"] > treecell > titledbutton {
|
||||
list-style-image: url("resource:/res/rdf/bookmark-folder-open.gif");
|
||||
}
|
||||
123
mozilla/xpinstall/notifier/SoftwareUpdate.js
Normal file
123
mozilla/xpinstall/notifier/SoftwareUpdate.js
Normal file
@@ -0,0 +1,123 @@
|
||||
// the rdf service
|
||||
var RDF = Components.classes['component://netscape/rdf/rdf-service'].getService();
|
||||
RDF = RDF.QueryInterface(Components.interfaces.nsIRDFService);
|
||||
|
||||
function getAttr(registry,service,attr_name)
|
||||
{
|
||||
var attr = registry.GetTarget(service,
|
||||
RDF.GetResource('http://home.netscape.com/NC-rdf#' + attr_name),
|
||||
true);
|
||||
if (attr)
|
||||
attr = attr.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||
|
||||
if (attr)
|
||||
attr = attr.Value;
|
||||
|
||||
return attr;
|
||||
}
|
||||
|
||||
function Init()
|
||||
{
|
||||
// this is the main rdf file.
|
||||
|
||||
var mainRegistry = RDF.GetDataSource('resource://res/rdf/SoftwareUpdates.rdf');
|
||||
|
||||
var mainContainer = Components.classes['component://netscape/rdf/container'].createInstance();
|
||||
mainContainer = mainContainer.QueryInterface(Components.interfaces.nsIRDFContainer);
|
||||
|
||||
mainContainer.Init(mainRegistry, RDF.GetResource('NC:SoftwareUpdateDataSources'));
|
||||
|
||||
// Now enumerate all of the softwareupdate datasources.
|
||||
var mainEnumerator = mainContainer.GetElements();
|
||||
while (mainEnumerator.HasMoreElements())
|
||||
{
|
||||
var aDistributor = mainEnumerator.GetNext();
|
||||
aDistributor = aDistributor.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
|
||||
var distributorContainer = Components.classes['component://netscape/rdf/container'].createInstance();
|
||||
distributorContainer = distributorContainer.QueryInterface(Components.interfaces.nsIRDFContainer);
|
||||
|
||||
var distributorRegistry = RDF.GetDataSource(aDistributor.Value);
|
||||
var distributorResource = RDF.GetResource('NC:SoftwareUpdateRoot');
|
||||
|
||||
distributorContainer.Init(distributorRegistry, distributorResource);
|
||||
|
||||
// Now enumerate all of the distributorContainer's packages.
|
||||
|
||||
var distributorEnumerator = distributorContainer.GetElements();
|
||||
|
||||
while (distributorEnumerator.HasMoreElements())
|
||||
{
|
||||
var aPackage = distributorEnumerator.GetNext();
|
||||
aPackage = aPackage.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
|
||||
// remove any that we do not want.
|
||||
|
||||
if (getAttr(distributorRegistry, aPackage, 'title') == "AOL AIM")
|
||||
{
|
||||
//distributorContainer.RemoveElement(aPackage, true);
|
||||
}
|
||||
}
|
||||
var tree = document.getElementById('tree');
|
||||
|
||||
// Add it to the tree control's composite datasource.
|
||||
tree.database.AddDataSource(distributorRegistry);
|
||||
|
||||
}
|
||||
|
||||
// Install all of the stylesheets in the softwareupdate Registry into the
|
||||
// panel.
|
||||
|
||||
// TODO
|
||||
|
||||
// XXX hack to force the tree to rebuild
|
||||
var treebody = document.getElementById('NC:SoftwareUpdateRoot');
|
||||
treebody.setAttribute('id', 'NC:SoftwareUpdateRoot');
|
||||
}
|
||||
|
||||
|
||||
function OpenURL(event, node)
|
||||
{
|
||||
if (node.getAttribute('type') == "http://home.netscape.com/NC-rdf#SoftwarePackage")
|
||||
{
|
||||
url = node.getAttribute('url');
|
||||
|
||||
/*window.open(url,'bookmarks');*/
|
||||
|
||||
var toolkitCore = XPAppCoresManager.Find("ToolkitCore");
|
||||
if (!toolkitCore)
|
||||
{
|
||||
toolkitCore = new ToolkitCore();
|
||||
if (toolkitCore)
|
||||
{
|
||||
toolkitCore.Init("ToolkitCore");
|
||||
}
|
||||
}
|
||||
|
||||
if (toolkitCore)
|
||||
{
|
||||
toolkitCore.ShowWindow(url,window);
|
||||
}
|
||||
|
||||
dump("OpenURL(" + url + ")\n");
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// To get around "window.onload" not working in viewer.
|
||||
function Boot()
|
||||
{
|
||||
var tree = document.getElementById('tree');
|
||||
if (tree == null) {
|
||||
setTimeout(Boot, 0);
|
||||
}
|
||||
else {
|
||||
Init();
|
||||
}
|
||||
}
|
||||
|
||||
setTimeout('Boot()', 0);
|
||||
|
||||
30
mozilla/xpinstall/notifier/SoftwareUpdate.xul
Normal file
30
mozilla/xpinstall/notifier/SoftwareUpdate.xul
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="resource:/res/rdf/sidebar.css" type="text/css"?>
|
||||
<?xml-stylesheet href="resource:/res/rdf/SoftwareUpdate.css" type="text/css"?>
|
||||
<window
|
||||
xmlns:html="http://www.w3.org/TR/REC-html40"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<html:script src="SoftwareUpdate.js"/>
|
||||
|
||||
<tree id="tree"
|
||||
flex="100%"
|
||||
datasources="rdf:softwareupdates"
|
||||
ondblclick="return OpenURL(event, event.target.parentNode);">
|
||||
|
||||
<treecol rdf:resource="http://home.netscape.com/NC-rdf#title" />
|
||||
<treecol rdf:resource="http://home.netscape.com/NC-rdf#description" />
|
||||
<treecol rdf:resource="http://home.netscape.com/NC-rdf#version" />
|
||||
|
||||
<treehead>
|
||||
<treeitem>
|
||||
<treecell>Title</treecell>
|
||||
<treecell>Description</treecell>
|
||||
<treecell>Version</treecell>
|
||||
</treeitem>
|
||||
</treehead>
|
||||
|
||||
<treebody id="NC:SoftwareUpdateRoot" rdf:containment="http://home.netscape.com/NC-rdf#child" />
|
||||
</tree>
|
||||
</window>
|
||||
BIN
mozilla/xpinstall/notifier/SoftwareUpdatePackage.gif
Normal file
BIN
mozilla/xpinstall/notifier/SoftwareUpdatePackage.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 201 B |
7
mozilla/xpinstall/notifier/SoftwareUpdates.rdf
Normal file
7
mozilla/xpinstall/notifier/SoftwareUpdates.rdf
Normal file
@@ -0,0 +1,7 @@
|
||||
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:NC="http://home.netscape.com/softwareupdate-schema#">
|
||||
|
||||
<RDF:Bag ID="NC:SoftwareUpdateDataSources">
|
||||
<RDF:li resource="resource:/res/rdf/SoftwareUpdate-Source-1.rdf" />
|
||||
</RDF:Bag>
|
||||
</RDF:RDF>
|
||||
6
mozilla/xpinstall/public/MANIFEST
Normal file
6
mozilla/xpinstall/public/MANIFEST
Normal file
@@ -0,0 +1,6 @@
|
||||
#
|
||||
# This is a list of local files which get copied to the mozilla:dist directory
|
||||
#
|
||||
|
||||
nsISoftwareUpdate.h
|
||||
nsSoftwareUpdateIIDs.h
|
||||
47
mozilla/xpinstall/public/Makefile.in
Normal file
47
mozilla/xpinstall/public/Makefile.in
Normal file
@@ -0,0 +1,47 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (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/NPL/
|
||||
#
|
||||
# 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 Mozilla Communicator client code,
|
||||
# released March 31, 1998.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape Communications
|
||||
# Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
# Contributors:
|
||||
# Daniel Veditz <dveditz@netscape.com>
|
||||
# Douglas Turner <dougt@netscape.com>
|
||||
|
||||
DEPTH = ../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
MODULE = xpinstall
|
||||
|
||||
XPIDLSRCS = nsIXPInstallProgress.idl
|
||||
|
||||
EXPORTS = \
|
||||
nsIDOMInstallTriggerGlobal.h \
|
||||
nsIDOMInstallVersion.h \
|
||||
nsSoftwareUpdateIIDs.h \
|
||||
nsISoftwareUpdate.h \
|
||||
$(NULL)
|
||||
|
||||
EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS))
|
||||
|
||||
include $(topsrcdir)/config/config.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
113
mozilla/xpinstall/public/idl/Install.idl
Normal file
113
mozilla/xpinstall/public/idl/Install.idl
Normal file
@@ -0,0 +1,113 @@
|
||||
interface Install
|
||||
{
|
||||
/* IID: { 0x18c2f988, 0xb09f, 0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53}} */
|
||||
|
||||
const int BAD_PACKAGE_NAME = -200;
|
||||
const int UNEXPECTED_ERROR = -201;
|
||||
const int ACCESS_DENIED = -202;
|
||||
const int TOO_MANY_CERTIFICATES = -203; /* Installer file must have 1 certificate */
|
||||
const int NO_INSTALLER_CERTIFICATE = -204; /* Installer file must have a certificate */
|
||||
const int NO_CERTIFICATE = -205; /* Extracted file is not signed */
|
||||
const int NO_MATCHING_CERTIFICATE = -206; /* Extracted file does not match installer certificate */
|
||||
const int UNKNOWN_JAR_FILE = -207; /* JAR file has not been opened */
|
||||
const int INVALID_ARGUMENTS = -208; /* Bad arguments to a function */
|
||||
const int ILLEGAL_RELATIVE_PATH = -209; /* Illegal relative path */
|
||||
const int USER_CANCELLED = -210; /* User cancelled */
|
||||
const int INSTALL_NOT_STARTED = -211;
|
||||
const int SILENT_MODE_DENIED = -212;
|
||||
const int NO_SUCH_COMPONENT = -213; /* no such component in the registry. */
|
||||
const int FILE_DOES_NOT_EXIST = -214; /* File cannot be deleted as it does not exist */
|
||||
const int FILE_READ_ONLY = -215; /* File cannot be deleted as it is read only. */
|
||||
const int FILE_IS_DIRECTORY = -216; /* File cannot be deleted as it is a directory */
|
||||
const int NETWORK_FILE_IS_IN_USE = -217; /* File on the network is in-use */
|
||||
const int APPLE_SINGLE_ERR = -218; /* error in AppleSingle unpacking */
|
||||
const int INVALID_PATH_ERR = -219; /* GetFolder() did not like the folderID */
|
||||
const int PATCH_BAD_DIFF = -220; /* error in GDIFF patch */
|
||||
const int PATCH_BAD_CHECKSUM_TARGET = -221; /* source file doesn't checksum */
|
||||
const int PATCH_BAD_CHECKSUM_RESULT = -222; /* final patched file fails checksum */
|
||||
const int UNINSTALL_FAILED = -223; /* error while uninstalling a package */
|
||||
const int GESTALT_UNKNOWN_ERR = -5550;
|
||||
const int GESTALT_INVALID_ARGUMENT = -5551;
|
||||
|
||||
const int SUCCESS = 0;
|
||||
const int REBOOT_NEEDED = 999;
|
||||
|
||||
/* install types */
|
||||
const int LIMITED_INSTALL = 0;
|
||||
const int FULL_INSTALL = 1;
|
||||
const int NO_STATUS_DLG = 2;
|
||||
const int NO_FINALIZE_DLG = 4;
|
||||
|
||||
// these should not be public...
|
||||
/* message IDs*/
|
||||
const int SU_INSTALL_FILE_UNEXPECTED_MSG_ID = 0;
|
||||
const int SU_DETAILS_REPLACE_FILE_MSG_ID = 1;
|
||||
const int SU_DETAILS_INSTALL_FILE_MSG_ID = 2;
|
||||
//////////////////////////
|
||||
|
||||
readonly attribute wstring UserPackageName;
|
||||
readonly attribute wstring RegPackageName;
|
||||
|
||||
void Install();
|
||||
|
||||
void AbortInstall();
|
||||
|
||||
long AddDirectory( in wstring regName,
|
||||
in wstring version,
|
||||
in wstring jarSource,
|
||||
in InstallFolder folder,
|
||||
in wstring subdir,
|
||||
in boolean forceMode );
|
||||
|
||||
|
||||
long AddSubcomponent( in wstring regName,
|
||||
in wstring version,
|
||||
in wstring jarSource,
|
||||
in InstallFolder folder,
|
||||
in wstring targetName,
|
||||
in boolean forceMode );
|
||||
|
||||
long DeleteComponent( in wstring registryName);
|
||||
|
||||
long DeleteFile( in InstallFolder folder,
|
||||
in wstring relativeFileName );
|
||||
|
||||
long DiskSpaceAvailable( in InstallFolder folder );
|
||||
|
||||
long Execute(in wstring jarSource, in wstring args);
|
||||
|
||||
long FinalizeInstall();
|
||||
|
||||
long Gestalt (in wstring selector);
|
||||
|
||||
InstallFolder GetComponentFolder( in wstring regName,
|
||||
in wstring subdirectory);
|
||||
|
||||
InstallFolder GetFolder(in wstring targetFolder,
|
||||
in wstring subdirectory);
|
||||
|
||||
long GetLastError();
|
||||
|
||||
long GetWinProfile(in InstallFolder folder, in wstring file);
|
||||
|
||||
long GetWinRegistry();
|
||||
|
||||
long Patch( in wstring regName,
|
||||
in wstring version,
|
||||
in wstring jarSource,
|
||||
in InstallFolder folder,
|
||||
in wstring targetName );
|
||||
|
||||
void ResetError();
|
||||
|
||||
void SetPackageFolder( in InstallFolder folder );
|
||||
|
||||
long StartInstall( in wstring userPackageName,
|
||||
in wstring packageName,
|
||||
in wstring version,
|
||||
in long flags );
|
||||
|
||||
long Uninstall( in wstring packageName);
|
||||
|
||||
};
|
||||
24
mozilla/xpinstall/public/idl/InstallTrigger.idl
Normal file
24
mozilla/xpinstall/public/idl/InstallTrigger.idl
Normal file
@@ -0,0 +1,24 @@
|
||||
interface InstallTriggerGlobal
|
||||
{
|
||||
/* IID: { 0x18c2f987, 0xb09f, 0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53}} */
|
||||
|
||||
const int MAJOR_DIFF = 4;
|
||||
const int MINOR_DIFF = 3;
|
||||
const int REL_DIFF = 2;
|
||||
const int BLD_DIFF = 1;
|
||||
const int EQUAL = 0;
|
||||
|
||||
boolean UpdateEnabled ();
|
||||
|
||||
long StartSoftwareUpdate(in wstring URL);
|
||||
|
||||
long ConditionalSoftwareUpdate( in wstring URL,
|
||||
in wstring regName,
|
||||
in long diffLevel,
|
||||
in wstring version,
|
||||
in long mode);
|
||||
|
||||
long CompareVersion( in wstring regName, in wstring version );
|
||||
|
||||
};
|
||||
34
mozilla/xpinstall/public/idl/InstallVersion.idl
Normal file
34
mozilla/xpinstall/public/idl/InstallVersion.idl
Normal file
@@ -0,0 +1,34 @@
|
||||
interface InstallVersion
|
||||
{
|
||||
/* IID: { 0x18c2f986, 0xb09f, 0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53}} */
|
||||
|
||||
const int EQUAL = 0;
|
||||
const int BLD_DIFF = 1;
|
||||
const int BLD_DIFF_MINUS = -1;
|
||||
const int REL_DIFF = 2;
|
||||
const int REL_DIFF_MINUS = -2;
|
||||
const int MINOR_DIFF = 3;
|
||||
const int MINOR_DIFF_MINUS = -3;
|
||||
const int MAJOR_DIFF = 4;
|
||||
const int MAJOR_DIFF_MINUS = -4;
|
||||
|
||||
attribute int major;
|
||||
attribute int minor;
|
||||
attribute int release;
|
||||
attribute int build;
|
||||
|
||||
void InstallVersion();
|
||||
|
||||
void init(in wstring versionString);
|
||||
/*
|
||||
void init(in int major, in int minor, in int release, in int build);
|
||||
*/
|
||||
wstring toString();
|
||||
|
||||
/* int compareTo(in wstring version);
|
||||
int compareTo(in int major, in int minor, in int release, in int build);
|
||||
*/
|
||||
int compareTo(in InstallVersion versionObject);
|
||||
|
||||
};
|
||||
36
mozilla/xpinstall/public/makefile.win
Normal file
36
mozilla/xpinstall/public/makefile.win
Normal file
@@ -0,0 +1,36 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (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/NPL/
|
||||
#
|
||||
# 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 Mozilla Communicator client code,
|
||||
# released March 31, 1998.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape Communications
|
||||
# Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
# Contributors:
|
||||
# Daniel Veditz <dveditz@netscape.com>
|
||||
# Douglas Turner <dougt@netscape.com>
|
||||
|
||||
MODULE=xpinstall
|
||||
DEPTH=..\..
|
||||
|
||||
EXPORTS= nsIDOMInstallTriggerGlobal.h \
|
||||
nsIDOMInstallVersion.h \
|
||||
nsSoftwareUpdateIIDs.h \
|
||||
nsISoftwareUpdate.h
|
||||
|
||||
XPIDLSRCS = .\nsIXPInstallProgress.idl
|
||||
|
||||
include <$(DEPTH)\config\config.mak>
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
1
mozilla/xpinstall/public/nsIDOMInstall.h
Normal file
1
mozilla/xpinstall/public/nsIDOMInstall.h
Normal file
@@ -0,0 +1 @@
|
||||
#error
|
||||
96
mozilla/xpinstall/public/nsIDOMInstallTriggerGlobal.h
Normal file
96
mozilla/xpinstall/public/nsIDOMInstallTriggerGlobal.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
/* AUTO-GENERATED. DO NOT EDIT!!! */
|
||||
|
||||
#ifndef nsIDOMInstallTriggerGlobal_h__
|
||||
#define nsIDOMInstallTriggerGlobal_h__
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIScriptContext.h"
|
||||
|
||||
|
||||
#define NS_IDOMINSTALLTRIGGERGLOBAL_IID \
|
||||
{ 0x18c2f987, 0xb09f, 0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53}}
|
||||
|
||||
class nsIDOMInstallTriggerGlobal : public nsISupports {
|
||||
public:
|
||||
static const nsIID& IID() { static nsIID iid = NS_IDOMINSTALLTRIGGERGLOBAL_IID; return iid; }
|
||||
enum {
|
||||
MAJOR_DIFF = 4,
|
||||
MINOR_DIFF = 3,
|
||||
REL_DIFF = 2,
|
||||
BLD_DIFF = 1,
|
||||
EQUAL = 0
|
||||
};
|
||||
|
||||
NS_IMETHOD UpdateEnabled(PRBool* aReturn)=0;
|
||||
|
||||
NS_IMETHOD StartSoftwareUpdate(const nsString& aURL, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD StartSoftwareUpdate(const nsString& aURL, PRInt32 aFlags, PRInt32* aReturn)=0;
|
||||
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, nsIDOMInstallVersion* aVersion, PRInt32 aMode, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32 aMode, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn)=0;
|
||||
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn)=0;
|
||||
};
|
||||
|
||||
|
||||
#define NS_DECL_IDOMINSTALLTRIGGERGLOBAL \
|
||||
NS_IMETHOD UpdateEnabled(PRBool* aReturn); \
|
||||
NS_IMETHOD StartSoftwareUpdate(const nsString& aURL, PRInt32 aFlags, PRInt32* aReturn); \
|
||||
NS_IMETHOD StartSoftwareUpdate(const nsString& aURL, PRInt32* aReturn); \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn); \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, nsIDOMInstallVersion* aVersion, PRInt32 aMode, PRInt32* aReturn); \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32 aMode, PRInt32* aReturn); \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn); \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn); \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn); \
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn); \
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn); \
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn); \
|
||||
|
||||
|
||||
|
||||
#define NS_FORWARD_IDOMINSTALLTRIGGERGLOBAL(_to) \
|
||||
NS_IMETHOD UpdateEnabled(PRBool* aReturn) { return _to##UpdateEnabled(aReturn); } \
|
||||
NS_IMETHOD StartSoftwareUpdate(const nsString& aURL, PRInt32 aFlags, PRInt32* aReturn) { return _to##StartSoftwareUpdate(aURL, aFlags, aReturn); } \
|
||||
NS_IMETHOD StartSoftwareUpdate(const nsString& aURL, PRInt32* aReturn) { return _to##StartSoftwareUpdate(aURL, aReturn); } \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn) { return _to##ConditionalSoftwareUpdate(aURL, aRegName, aDiffLevel, aVersion, aMode, aReturn); } \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, nsIDOMInstallVersion* aVersion, PRInt32 aMode, PRInt32* aReturn) { return _to##ConditionalSoftwareUpdate(aURL, aRegName, aDiffLevel, aVersion, aMode, aReturn); } \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, nsIDOMInstallVersion* aRegName, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn) { return _to##ConditionalSoftwareUpdate(aURL, aDiffLevel, aVersion, aMode, aReturn); } \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn) { return _to##ConditionalSoftwareUpdate(aURL, aDiffLevel, aVersion, aMode, aReturn); } \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn) { return _to##ConditionalSoftwareUpdate(aURL, aDiffLevel, aVersion, aReturn); } \
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn) { return _to##ConditionalSoftwareUpdate(aURL, aDiffLevel, aVersion, aReturn); } \
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn) { return _to##CompareVersion(aRegName, aMajor, aMinor, aRelease, aBuild, aReturn); } \
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn) { return _to##CompareVersion(aRegName, aVersion, aReturn); } \
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn) { return _to##CompareVersion(aRegName, aVersion, aReturn); } \
|
||||
|
||||
|
||||
extern nsresult NS_InitInstallTriggerGlobalClass(nsIScriptContext *aContext, void **aPrototype);
|
||||
|
||||
extern "C" NS_DOM nsresult NS_NewScriptInstallTriggerGlobal(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn);
|
||||
|
||||
#endif // nsIDOMInstallTriggerGlobal_h__
|
||||
107
mozilla/xpinstall/public/nsIDOMInstallVersion.h
Normal file
107
mozilla/xpinstall/public/nsIDOMInstallVersion.h
Normal file
@@ -0,0 +1,107 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
/* AUTO-GENERATED. DO NOT EDIT!!! */
|
||||
|
||||
#ifndef nsIDOMInstallVersion_h__
|
||||
#define nsIDOMInstallVersion_h__
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIScriptContext.h"
|
||||
|
||||
class nsIDOMInstallVersion;
|
||||
|
||||
#define NS_IDOMINSTALLVERSION_IID \
|
||||
{ 0x18c2f986, 0xb09f, 0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53}}
|
||||
|
||||
class nsIDOMInstallVersion : public nsISupports {
|
||||
public:
|
||||
static const nsIID& IID() { static nsIID iid = NS_IDOMINSTALLVERSION_IID; return iid; }
|
||||
enum {
|
||||
EQUAL = 0,
|
||||
BLD_DIFF = 1,
|
||||
BLD_DIFF_MINUS = -1,
|
||||
REL_DIFF = 2,
|
||||
REL_DIFF_MINUS = -2,
|
||||
MINOR_DIFF = 3,
|
||||
MINOR_DIFF_MINUS = -3,
|
||||
MAJOR_DIFF = 4,
|
||||
MAJOR_DIFF_MINUS = -4
|
||||
};
|
||||
|
||||
NS_IMETHOD GetMajor(PRInt32* aMajor)=0;
|
||||
NS_IMETHOD SetMajor(PRInt32 aMajor)=0;
|
||||
|
||||
NS_IMETHOD GetMinor(PRInt32* aMinor)=0;
|
||||
NS_IMETHOD SetMinor(PRInt32 aMinor)=0;
|
||||
|
||||
NS_IMETHOD GetRelease(PRInt32* aRelease)=0;
|
||||
NS_IMETHOD SetRelease(PRInt32 aRelease)=0;
|
||||
|
||||
NS_IMETHOD GetBuild(PRInt32* aBuild)=0;
|
||||
NS_IMETHOD SetBuild(PRInt32 aBuild)=0;
|
||||
|
||||
NS_IMETHOD Init(const nsString& aVersionString)=0;
|
||||
|
||||
NS_IMETHOD ToString(nsString& aReturn)=0;
|
||||
|
||||
NS_IMETHOD CompareTo(nsIDOMInstallVersion* aVersionObject, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD CompareTo(const nsString& aString, PRInt32* aReturn)=0;
|
||||
NS_IMETHOD CompareTo(PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn)=0;
|
||||
};
|
||||
|
||||
|
||||
#define NS_DECL_IDOMINSTALLVERSION \
|
||||
NS_IMETHOD GetMajor(PRInt32* aMajor); \
|
||||
NS_IMETHOD SetMajor(PRInt32 aMajor); \
|
||||
NS_IMETHOD GetMinor(PRInt32* aMinor); \
|
||||
NS_IMETHOD SetMinor(PRInt32 aMinor); \
|
||||
NS_IMETHOD GetRelease(PRInt32* aRelease); \
|
||||
NS_IMETHOD SetRelease(PRInt32 aRelease); \
|
||||
NS_IMETHOD GetBuild(PRInt32* aBuild); \
|
||||
NS_IMETHOD SetBuild(PRInt32 aBuild); \
|
||||
NS_IMETHOD Init(const nsString& aVersionString); \
|
||||
NS_IMETHOD ToString(nsString& aReturn); \
|
||||
NS_IMETHOD CompareTo(nsIDOMInstallVersion* aVersionObject, PRInt32* aReturn); \
|
||||
NS_IMETHOD CompareTo(const nsString& aString, PRInt32* aReturn); \
|
||||
NS_IMETHOD CompareTo(PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn); \
|
||||
|
||||
|
||||
|
||||
#define NS_FORWARD_IDOMINSTALLVERSION(_to) \
|
||||
NS_IMETHOD GetMajor(PRInt32* aMajor) { return _to##GetMajor(aMajor); } \
|
||||
NS_IMETHOD SetMajor(PRInt32 aMajor) { return _to##SetMajor(aMajor); } \
|
||||
NS_IMETHOD GetMinor(PRInt32* aMinor) { return _to##GetMinor(aMinor); } \
|
||||
NS_IMETHOD SetMinor(PRInt32 aMinor) { return _to##SetMinor(aMinor); } \
|
||||
NS_IMETHOD GetRelease(PRInt32* aRelease) { return _to##GetRelease(aRelease); } \
|
||||
NS_IMETHOD SetRelease(PRInt32 aRelease) { return _to##SetRelease(aRelease); } \
|
||||
NS_IMETHOD GetBuild(PRInt32* aBuild) { return _to##GetBuild(aBuild); } \
|
||||
NS_IMETHOD SetBuild(PRInt32 aBuild) { return _to##SetBuild(aBuild); } \
|
||||
NS_IMETHOD Init(const nsString& aVersionString) { return _to##Init(aVersionString); } \
|
||||
NS_IMETHOD ToString(nsString& aReturn) { return _to##ToString(aReturn); } \
|
||||
NS_IMETHOD CompareTo(nsIDOMInstallVersion* aVersionObject, PRInt32* aReturn) { return _to##CompareTo(aVersionObject, aReturn); } \
|
||||
NS_IMETHOD CompareTo(const nsString& aString, PRInt32* aReturn) { return _to##CompareTo(aString, aReturn); } \
|
||||
NS_IMETHOD CompareTo(PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn) { return _to##CompareTo(aMajor, aMinor, aRelease, aBuild, aReturn); } \
|
||||
|
||||
|
||||
extern nsresult NS_InitInstallVersionClass(nsIScriptContext *aContext, void **aPrototype);
|
||||
|
||||
extern "C" NS_DOM nsresult NS_NewScriptInstallVersion(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn);
|
||||
|
||||
#endif // nsIDOMInstallVersion_h__
|
||||
85
mozilla/xpinstall/public/nsISoftwareUpdate.h
Normal file
85
mozilla/xpinstall/public/nsISoftwareUpdate.h
Normal file
@@ -0,0 +1,85 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#ifndef nsISoftwareUpdate_h__
|
||||
#define nsISoftwareUpdate_h__
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsIFactory.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsIXPInstallProgress.h"
|
||||
|
||||
#define NS_IXPINSTALLCOMPONENT_PROGID NS_IAPPSHELLCOMPONENT_PROGID "/xpinstall"
|
||||
#define NS_IXPINSTALLCOMPONENT_CLASSNAME "Mozilla XPInstall Component"
|
||||
|
||||
|
||||
#define NS_ISOFTWAREUPDATE_IID \
|
||||
{ 0x18c2f992, \
|
||||
0xb09f, \
|
||||
0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53}\
|
||||
}
|
||||
|
||||
|
||||
class nsISoftwareUpdate : public nsISupports
|
||||
{
|
||||
public:
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISOFTWAREUPDATE_IID)
|
||||
|
||||
NS_IMETHOD InstallJar(const nsString& fromURL,
|
||||
const nsString& localFile,
|
||||
long flags) = 0;
|
||||
|
||||
NS_IMETHOD RegisterNotifier(nsIXPInstallProgress *notifier) = 0;
|
||||
|
||||
NS_IMETHOD InstallPending(void) = 0;
|
||||
|
||||
/* FIX: these should be in a private interface */
|
||||
NS_IMETHOD InstallJarCallBack() = 0;
|
||||
NS_IMETHOD GetTopLevelNotifier(nsIXPInstallProgress **notifier) = 0;
|
||||
};
|
||||
|
||||
|
||||
class nsSoftwareUpdateFactory : public nsIFactory
|
||||
{
|
||||
public:
|
||||
|
||||
nsSoftwareUpdateFactory();
|
||||
virtual ~nsSoftwareUpdateFactory();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_IMETHOD CreateInstance(nsISupports *aOuter,
|
||||
REFNSIID aIID,
|
||||
void **aResult);
|
||||
|
||||
NS_IMETHOD LockFactory(PRBool aLock);
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // nsISoftwareUpdate_h__
|
||||
|
||||
30
mozilla/xpinstall/public/nsIXPInstallProgress.idl
Normal file
30
mozilla/xpinstall/public/nsIXPInstallProgress.idl
Normal file
@@ -0,0 +1,30 @@
|
||||
/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
[uuid(eea90d40-b059-11d2-915e-c12b696c9333)]
|
||||
interface nsIXPInstallProgress : nsISupports
|
||||
{
|
||||
void BeforeJavascriptEvaluation();
|
||||
void AfterJavascriptEvaluation();
|
||||
void InstallStarted([const] in string UIPackageName);
|
||||
void ItemScheduled([const] in string message );
|
||||
void InstallFinalization([const] in string message, in long itemNum, in long totNum );
|
||||
void InstallAborted();
|
||||
};
|
||||
93
mozilla/xpinstall/public/nsIXPInstallProgressNotifier.h
Normal file
93
mozilla/xpinstall/public/nsIXPInstallProgressNotifier.h
Normal file
@@ -0,0 +1,93 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef nsIXPInstallProgressNotifier_h__
|
||||
#define nsIXPInstallProgressNotifier_h__
|
||||
|
||||
|
||||
class nsIXPInstallProgressNotifier
|
||||
{
|
||||
public:
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : BeforeJavascriptEvaluation
|
||||
// Description : This will be called when prior to the install script being evaluate
|
||||
// Return type : void
|
||||
// Argument : void
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual void BeforeJavascriptEvaluation(void) = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : AfterJavascriptEvaluation
|
||||
// Description : This will be called after the install script has being evaluated
|
||||
// Return type : void
|
||||
// Argument : void
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual void AfterJavascriptEvaluation(void) = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : InstallStarted
|
||||
// Description : This will be called when StartInstall has been called
|
||||
// Return type : void
|
||||
// Argument : char* UIPackageName - User Package Name
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual void InstallStarted(const char* UIPackageName) = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : ItemScheduled
|
||||
// Description : This will be called when items are being scheduled
|
||||
// Return type : Any value returned other than zero, will be treated as an error and the script will be aborted
|
||||
// Argument : The message that should be displayed to the user
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual long ItemScheduled( const char* message ) = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : InstallFinalization
|
||||
// Description : This will be called when the installation is in its Finalize stage
|
||||
// Return type : void
|
||||
// Argument : char* message - The message that should be displayed to the user
|
||||
// Argument : long itemNum - This is the current item number
|
||||
// Argument : long totNum - This is the total number of items
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual void InstallFinalization( const char* message, long itemNum, long totNum ) = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : InstallAborted
|
||||
// Description : This will be called when the install is aborted
|
||||
// Return type : void
|
||||
// Argument : void
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual void InstallAborted(void) = 0;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
64
mozilla/xpinstall/public/nsSoftwareUpdateIIDs.h
Normal file
64
mozilla/xpinstall/public/nsSoftwareUpdateIIDs.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#ifndef nsSoftwareUpdateIIDs_h___
|
||||
#define nsSoftwareUpdateIIDs_h___
|
||||
|
||||
#define NS_SoftwareUpdate_CID \
|
||||
{ /* 18c2f989-b09f-11d2-bcde-00805f0e1353 */ \
|
||||
0x18c2f989, \
|
||||
0xb09f, \
|
||||
0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53} \
|
||||
}
|
||||
|
||||
#define NS_SoftwareUpdateInstall_CID \
|
||||
{ /* 18c2f98b-b09f-11d2-bcde-00805f0e1353 */ \
|
||||
0x18c2f98b, \
|
||||
0xb09f, \
|
||||
0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53} \
|
||||
}
|
||||
|
||||
#define NS_SoftwareUpdateInstallTrigger_CID \
|
||||
{ /* 18c2f98d-b09f-11d2-bcde-00805f0e1353 */ \
|
||||
0x18c2f98d, \
|
||||
0xb09f, \
|
||||
0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53} \
|
||||
}
|
||||
|
||||
#define NS_SoftwareUpdateInstallVersion_CID \
|
||||
{ /* 18c2f98f-b09f-11d2-bcde-00805f0e1353 */ \
|
||||
0x18c2f98f, \
|
||||
0xb09f, \
|
||||
0x11d2, \
|
||||
{0xbc, 0xde, 0x00, 0x80, 0x5f, 0x0e, 0x13, 0x53} \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* nsSoftwareUpdateIIDs_h___ */
|
||||
|
||||
3
mozilla/xpinstall/res/MANIFEST
Normal file
3
mozilla/xpinstall/res/MANIFEST
Normal file
@@ -0,0 +1,3 @@
|
||||
progress.xul
|
||||
progress.css
|
||||
progress.html
|
||||
34
mozilla/xpinstall/res/Makefile.in
Normal file
34
mozilla/xpinstall/res/Makefile.in
Normal file
@@ -0,0 +1,34 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
include $(topsrcdir)/config/config.mk
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
EXPORT_RESOURCE_XPINSTALL = \
|
||||
$(srcdir)/progress.xul \
|
||||
$(srcdir)/progress.html \
|
||||
$(srcdir)/progress.css \
|
||||
$(NULL)
|
||||
|
||||
install::
|
||||
$(INSTALL) $(EXPORT_RESOURCE_XPINSTALL) $(DIST)/bin/res/xpinstall
|
||||
31
mozilla/xpinstall/res/makefile.win
Normal file
31
mozilla/xpinstall/res/makefile.win
Normal file
@@ -0,0 +1,31 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
|
||||
DEPTH=..\..
|
||||
IGNORE_MANIFEST=1
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
install:: $(DLL)
|
||||
$(MAKE_INSTALL) progress.xul $(DIST)\bin\res\xpinstall
|
||||
$(MAKE_INSTALL) progress.css $(DIST)\bin\res\xpinstall
|
||||
$(MAKE_INSTALL) progress.html $(DIST)\bin\res\xpinstall
|
||||
|
||||
clobber::
|
||||
rm -f $(DIST)\res\xpinstall\progress.xul
|
||||
rm -f $(DIST)\res\xpinstall\progress.css
|
||||
rm -f $(DIST)\res\xpinstall\progress.html
|
||||
3
mozilla/xpinstall/res/progress.css
Normal file
3
mozilla/xpinstall/res/progress.css
Normal file
@@ -0,0 +1,3 @@
|
||||
TD {
|
||||
font: 10pt sans-serif;
|
||||
}
|
||||
16
mozilla/xpinstall/res/progress.html
Normal file
16
mozilla/xpinstall/res/progress.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<body bgcolor="#C0C0C0" style="overflow:visible; margin: 0px; color-background: rgb(192,192,192);">
|
||||
<center>
|
||||
<table BORDER COLS=5 WIDTH="99%" style="color-background:rgb(192,192,192);">
|
||||
<tr>
|
||||
<td WIDTH="3%" NOWRAP style="border: 1px inset rgb(192,192,192);"> </td>
|
||||
<td WIDTH="3%" NOWRAP style="border: 1px inset rgb(192,192,192);"> </td>
|
||||
<td WIDTH="3%" NOWRAP style="border: 1px inset rgb(192,192,192);"> </td>
|
||||
<td WIDTH="10%" NOWRAP style="border: 1px inset rgb(192,192,192);"> </td>
|
||||
<td WIDTH="81%" NOWRAP style="border: 1px inset rgb(192,192,192);"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
67
mozilla/xpinstall/res/progress.xul
Normal file
67
mozilla/xpinstall/res/progress.xul
Normal file
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="../samples/xul.css" type="text/css"?>
|
||||
<?xml-stylesheet href="progress.css" type="text/css"?>
|
||||
|
||||
<!DOCTYPE window
|
||||
[
|
||||
<!ENTITY downloadWindow.title "XPInstall Progress">
|
||||
<!ENTITY status "Status:">
|
||||
<!ENTITY cancelButtonTitle "Cancel">
|
||||
]
|
||||
>
|
||||
|
||||
<window xmlns:html="http://www.w3.org/TR/REC-html40"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
title="XPInstall Progress"
|
||||
width="425"
|
||||
height="225">
|
||||
|
||||
<data>
|
||||
<broadcaster id="data.canceled" type="string" value="false"/>
|
||||
</data>
|
||||
|
||||
|
||||
<html:script>
|
||||
|
||||
function cancelInstall()
|
||||
{
|
||||
var cancelData = document.getElementById("data.canceled");
|
||||
cancelData.setAttribute( "value", "true");
|
||||
}
|
||||
|
||||
</html:script>
|
||||
|
||||
<html:center>
|
||||
<html:table style="width:100%;">
|
||||
|
||||
<html:tr>
|
||||
<html:td align="center">
|
||||
<html:input id="dialog.uiPackageName" readonly="" style="background-color:lightgray;width:300px;"/>
|
||||
</html:td>
|
||||
</html:tr>
|
||||
|
||||
<html:tr>
|
||||
<html:td nowrap="" style="border: 1px rgb(192,192,192);" align="center">
|
||||
<html:input id="dialog.currentAction" readonly="" style="background-color:lightgray;width:450px;"/>
|
||||
</html:td>
|
||||
</html:tr>
|
||||
|
||||
|
||||
<html:tr>
|
||||
<html:td align="center" width="15%" nowrap="" style="border: 1px rgb(192,192,192);">
|
||||
<progressmeter id="dialog.progress" mode="undetermined" style="width:300px;height:16px;">
|
||||
</progressmeter>
|
||||
</html:td>
|
||||
</html:tr>
|
||||
|
||||
<html:tr>
|
||||
<html:td align="center" width="3%" nowrap="" style="border: 1px rgb(192,192,192);">
|
||||
<html:button onclick="cancelInstall()" height="12">
|
||||
&cancelButtonTitle;
|
||||
</html:button>
|
||||
</html:td>
|
||||
</html:tr>
|
||||
</html:table>
|
||||
|
||||
</html:center>
|
||||
</window>
|
||||
61
mozilla/xpinstall/src/Makefile.in
Normal file
61
mozilla/xpinstall/src/Makefile.in
Normal file
@@ -0,0 +1,61 @@
|
||||
#!gmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (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/NPL/
|
||||
#
|
||||
# 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 Mozilla Communicator client code,
|
||||
# released March 31, 1998.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape Communications
|
||||
# Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
# Contributors:
|
||||
# Daniel Veditz <dveditz@netscape.com>
|
||||
# Douglas Turner <dougt@netscape.com>
|
||||
|
||||
DEPTH = ../..
|
||||
topsrcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
srcdir = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
MODULE = xpinstall
|
||||
LIBRARY_NAME = xpinstall
|
||||
IS_COMPONENT = 1
|
||||
REQUIRES = dom js netlib raptor xpcom
|
||||
|
||||
CPPSRCS = \
|
||||
nsSoftwareUpdate.cpp \
|
||||
nsInstall.cpp \
|
||||
nsInstallDelete.cpp \
|
||||
nsInstallExecute.cpp \
|
||||
nsInstallFile.cpp \
|
||||
nsInstallFolder.cpp \
|
||||
nsInstallPatch.cpp \
|
||||
nsInstallUninstall.cpp \
|
||||
nsInstallTrigger.cpp \
|
||||
nsInstallResources.cpp \
|
||||
nsJSInstall.cpp \
|
||||
nsJSInstallTriggerGlobal.cpp\
|
||||
nsSoftwareUpdateRun.cpp \
|
||||
nsSoftwareUpdateStream.cpp \
|
||||
nsTopProgressNotifier.cpp \
|
||||
nsLoggingProgressNotifier \
|
||||
ScheduledTasks.cpp \
|
||||
nsInstallFileOpItem.cpp \
|
||||
$(NULL)
|
||||
|
||||
INCLUDES += -I$(srcdir)/../public
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
1854
mozilla/xpinstall/src/PatchableAppleSingle.cpp
Normal file
1854
mozilla/xpinstall/src/PatchableAppleSingle.cpp
Normal file
File diff suppressed because it is too large
Load Diff
233
mozilla/xpinstall/src/PatchableAppleSingle.h
Normal file
233
mozilla/xpinstall/src/PatchableAppleSingle.h
Normal file
@@ -0,0 +1,233 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
|
||||
/*
|
||||
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
|
||||
* Version 1.0 (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/NPL/
|
||||
|
||||
*
|
||||
|
||||
* 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 Mozilla Communicator client code,
|
||||
|
||||
* released March 31, 1998.
|
||||
|
||||
*
|
||||
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
|
||||
* Corporation. Portions created by Netscape are
|
||||
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
|
||||
* Reserved.
|
||||
|
||||
*
|
||||
|
||||
* Contributors:
|
||||
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef SU_PAS_H
|
||||
|
||||
#define SU_PAS_H
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#include <Errors.h>
|
||||
|
||||
#include <Types.h>
|
||||
|
||||
#include <Files.h>
|
||||
|
||||
#include <Script.h>
|
||||
|
||||
#include <Resources.h>
|
||||
|
||||
|
||||
|
||||
typedef struct PASHeader /* header portion of Patchable AppleSingle */
|
||||
|
||||
{
|
||||
|
||||
UInt32 magicNum; /* internal file type tag = 0x00244200*/
|
||||
|
||||
UInt32 versionNum; /* format version: 1 = 0x00010000 */
|
||||
|
||||
UInt8 filler[16]; /* filler */
|
||||
|
||||
UInt16 numEntries; /* number of entries which follow */
|
||||
|
||||
} PASHeader ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct PASEntry /* one Patchable AppleSingle entry descriptor */
|
||||
|
||||
{
|
||||
|
||||
UInt32 entryID; /* entry type: see list, 0 invalid */
|
||||
|
||||
UInt32 entryOffset; /* offset, in bytes, from beginning */
|
||||
|
||||
/* of file to this entry's data */
|
||||
|
||||
UInt32 entryLength; /* length of data in octets */
|
||||
|
||||
|
||||
|
||||
} PASEntry;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct PASMiscInfo
|
||||
|
||||
{
|
||||
|
||||
short fileHasResFork;
|
||||
|
||||
short fileResAttrs;
|
||||
|
||||
OSType fileType;
|
||||
|
||||
OSType fileCreator;
|
||||
|
||||
UInt32 fileFlags;
|
||||
|
||||
|
||||
|
||||
} PASMiscInfo;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct PASResFork
|
||||
|
||||
{
|
||||
|
||||
short NumberOfTypes;
|
||||
|
||||
|
||||
|
||||
} PASResFork;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct PASResource
|
||||
|
||||
{
|
||||
|
||||
short attr;
|
||||
|
||||
short attrID;
|
||||
|
||||
OSType attrType;
|
||||
|
||||
Str255 attrName;
|
||||
|
||||
unsigned long length;
|
||||
|
||||
|
||||
|
||||
} PASResource;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if PRAGMA_ALIGN_SUPPORTED
|
||||
|
||||
#pragma options align=reset
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define kCreator 'MOSS'
|
||||
|
||||
#define kType 'PASf'
|
||||
|
||||
#define PAS_BUFFER_SIZE (1024*512)
|
||||
|
||||
|
||||
|
||||
#define PAS_MAGIC_NUM (0x00244200)
|
||||
|
||||
#define PAS_VERSION (0x00010000)
|
||||
|
||||
|
||||
|
||||
enum
|
||||
|
||||
{
|
||||
|
||||
ePas_Data = 1,
|
||||
|
||||
ePas_Misc,
|
||||
|
||||
ePas_Resource
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
extern "C" {
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Prototypes */
|
||||
|
||||
OSErr PAS_EncodeFile(FSSpec *inSpec, FSSpec *outSpec);
|
||||
|
||||
OSErr PAS_DecodeFile(FSSpec *inSpec, FSSpec *outSpec);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif /* SU_PAS_H */
|
||||
380
mozilla/xpinstall/src/ScheduledTasks.cpp
Normal file
380
mozilla/xpinstall/src/ScheduledTasks.cpp
Normal file
@@ -0,0 +1,380 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nscore.h"
|
||||
#include "NSReg.h"
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsFileStream.h"
|
||||
#include "nsInstall.h" // for error codes
|
||||
#include "prmem.h"
|
||||
#include "ScheduledTasks.h"
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#include <sys/stat.h>
|
||||
#include <windows.h>
|
||||
|
||||
BOOL WIN32_IsMoveFileExBroken()
|
||||
{
|
||||
/* the NT option MOVEFILE_DELAY_UNTIL_REBOOT is broken on
|
||||
* Windows NT 3.51 Service Pack 4 and NT 4.0 before Service Pack 2
|
||||
*/
|
||||
BOOL broken = FALSE;
|
||||
OSVERSIONINFO osinfo;
|
||||
|
||||
// they *all* appear broken--better to have one way that works.
|
||||
return TRUE;
|
||||
|
||||
osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
||||
if (GetVersionEx(&osinfo) && osinfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
|
||||
{
|
||||
if ( osinfo.dwMajorVersion == 3 && osinfo.dwMinorVersion == 51 )
|
||||
{
|
||||
if ( 0 == stricmp(osinfo.szCSDVersion,"Service Pack 4"))
|
||||
{
|
||||
broken = TRUE;
|
||||
}
|
||||
}
|
||||
else if ( osinfo.dwMajorVersion == 4 )
|
||||
{
|
||||
if (osinfo.szCSDVersion[0] == '\0' ||
|
||||
(0 == stricmp(osinfo.szCSDVersion,"Service Pack 1")))
|
||||
{
|
||||
broken = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return broken;
|
||||
}
|
||||
|
||||
|
||||
PRInt32 DoWindowsReplaceExistingFileStuff(const char* currentName, const char* finalName)
|
||||
{
|
||||
PRInt32 err = 0;
|
||||
|
||||
char* final = strdup(finalName);
|
||||
char* current = strdup(currentName);
|
||||
|
||||
/* couldn't delete, probably in use. Schedule for later */
|
||||
DWORD dwVersion, dwWindowsMajorVersion;
|
||||
|
||||
/* Get OS version info */
|
||||
dwVersion = GetVersion();
|
||||
dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
|
||||
|
||||
/* Get build numbers for Windows NT or Win32s */
|
||||
|
||||
if (dwVersion < 0x80000000) // Windows NT
|
||||
{
|
||||
/* On Windows NT */
|
||||
if ( WIN32_IsMoveFileExBroken() )
|
||||
{
|
||||
/* the MOVEFILE_DELAY_UNTIL_REBOOT option doesn't work on
|
||||
* NT 3.51 SP4 or on NT 4.0 until SP2
|
||||
*/
|
||||
struct stat statbuf;
|
||||
PRBool nameFound = PR_FALSE;
|
||||
char tmpname[_MAX_PATH];
|
||||
|
||||
strncpy( tmpname, finalName, _MAX_PATH );
|
||||
int len = strlen(tmpname);
|
||||
while (!nameFound && len < _MAX_PATH )
|
||||
{
|
||||
tmpname[len-1] = '~';
|
||||
tmpname[len] = '\0';
|
||||
if ( stat(tmpname, &statbuf) != 0 )
|
||||
nameFound = TRUE;
|
||||
else
|
||||
len++;
|
||||
}
|
||||
|
||||
if ( nameFound )
|
||||
{
|
||||
if ( MoveFile( finalName, tmpname ) )
|
||||
{
|
||||
if ( MoveFile( currentName, finalName ) )
|
||||
{
|
||||
DeleteFileNowOrSchedule(nsFileSpec(tmpname));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 2nd move failed, put old file back */
|
||||
MoveFile( tmpname, finalName );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* non-executable in use; schedule for later */
|
||||
return -1; // let the start registry stuff do our work!
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( MoveFileEx(currentName, finalName, MOVEFILE_DELAY_UNTIL_REBOOT) )
|
||||
{
|
||||
err = 0;
|
||||
}
|
||||
}
|
||||
else // Windows 95 or Win16
|
||||
{
|
||||
/*
|
||||
* Place an entry in the WININIT.INI file in the Windows directory
|
||||
* to delete finalName and rename currentName to be finalName at reboot
|
||||
*/
|
||||
|
||||
int strlen;
|
||||
char Src[_MAX_PATH]; // 8.3 name
|
||||
char Dest[_MAX_PATH]; // 8.3 name
|
||||
|
||||
strlen = GetShortPathName( (LPCTSTR)currentName, (LPTSTR)Src, (DWORD)sizeof(Src) );
|
||||
if ( strlen > 0 )
|
||||
{
|
||||
free(current);
|
||||
current = strdup(Src);
|
||||
}
|
||||
|
||||
strlen = GetShortPathName( (LPCTSTR) finalName, (LPTSTR) Dest, (DWORD) sizeof(Dest));
|
||||
if ( strlen > 0 )
|
||||
{
|
||||
free(final);
|
||||
final = strdup(Dest);
|
||||
}
|
||||
|
||||
/* NOTE: use OEM filenames! Even though it looks like a Windows
|
||||
* .INI file, WININIT.INI is processed under DOS
|
||||
*/
|
||||
|
||||
AnsiToOem( final, final );
|
||||
AnsiToOem( current, current );
|
||||
|
||||
if ( WritePrivateProfileString( "Rename", final, current, "WININIT.INI" ) )
|
||||
err = 0;
|
||||
}
|
||||
|
||||
free(final);
|
||||
free(current);
|
||||
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
REGERR DeleteFileNowOrSchedule(nsFileSpec& filename)
|
||||
{
|
||||
|
||||
REGERR result = 0;
|
||||
|
||||
filename.Delete(false);
|
||||
|
||||
if (filename.Exists())
|
||||
{
|
||||
RKEY newkey;
|
||||
HREG reg;
|
||||
if ( REGERR_OK == NR_RegOpen("", ®) )
|
||||
{
|
||||
if (REGERR_OK == NR_RegAddKey( reg, ROOTKEY_PRIVATE, REG_DELETE_LIST_KEY, &newkey) )
|
||||
{
|
||||
// FIX should be using nsPersistentFileDescriptor!!!
|
||||
|
||||
result = NR_RegSetEntry( reg, newkey, (char*)(const char*)filename.GetNativePathCString(), REGTYPE_ENTRY_FILE, nsnull, 0);
|
||||
if (result == REGERR_OK)
|
||||
result = nsInstall::REBOOT_NEEDED;
|
||||
}
|
||||
|
||||
NR_RegClose(reg);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
/* tmp file is the bad one that we want to replace with target. */
|
||||
|
||||
REGERR ReplaceFileNowOrSchedule(nsFileSpec& replacementFile, nsFileSpec& doomedFile )
|
||||
{
|
||||
REGERR result = 0;
|
||||
|
||||
if(replacementFile == doomedFile)
|
||||
{
|
||||
/* do not have to do anything */
|
||||
return result;
|
||||
}
|
||||
|
||||
doomedFile.Delete(false);
|
||||
|
||||
if (! doomedFile.Exists() )
|
||||
{
|
||||
// Now that we have move the existing file, we can move the mExtracedFile into place.
|
||||
nsFileSpec parentofFinalFile;
|
||||
|
||||
doomedFile.GetParent(parentofFinalFile);
|
||||
result = replacementFile.Move(parentofFinalFile);
|
||||
if ( NS_SUCCEEDED(result) )
|
||||
{
|
||||
char* leafName = doomedFile.GetLeafName();
|
||||
replacementFile.Rename(leafName);
|
||||
nsCRT::free(leafName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef _WINDOWS
|
||||
if (DoWindowsReplaceExistingFileStuff(replacementFile.GetNativePathCString(), doomedFile.GetNativePathCString()) == 0)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
RKEY newkey;
|
||||
HREG reg;
|
||||
|
||||
if ( REGERR_OK == NR_RegOpen("", ®) )
|
||||
{
|
||||
result = NR_RegAddKey( reg, ROOTKEY_PRIVATE, REG_REPLACE_LIST_KEY, &newkey);
|
||||
if ( result == REGERR_OK )
|
||||
{
|
||||
char* replacementFileName = (char*)(const char*)replacementFile.GetNativePathCString();
|
||||
result = NR_RegSetEntry( reg, newkey, (char*)(const char*)doomedFile.GetNativePathCString(), REGTYPE_ENTRY_FILE, replacementFileName, strlen(replacementFileName));
|
||||
if (result == REGERR_OK)
|
||||
result = nsInstall::REBOOT_NEEDED;
|
||||
}
|
||||
|
||||
NR_RegClose(reg);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void DeleteScheduledFiles(void);
|
||||
void ReplaceScheduledFiles(void);
|
||||
|
||||
extern "C" void PerformScheduledTasks(void *data)
|
||||
{
|
||||
DeleteScheduledFiles();
|
||||
ReplaceScheduledFiles();
|
||||
}
|
||||
|
||||
|
||||
void DeleteScheduledFiles(void)
|
||||
{
|
||||
HREG reg;
|
||||
|
||||
if (REGERR_OK == NR_RegOpen("", ®))
|
||||
{
|
||||
RKEY key;
|
||||
REGENUM state;
|
||||
|
||||
/* perform scheduled file deletions and replacements (PC only) */
|
||||
if (REGERR_OK == NR_RegGetKey(reg, ROOTKEY_PRIVATE, REG_DELETE_LIST_KEY,&key))
|
||||
{
|
||||
char buf[MAXREGNAMELEN];
|
||||
|
||||
while (REGERR_OK == NR_RegEnumEntries(reg, key, &state, buf, sizeof(buf), NULL ))
|
||||
{
|
||||
nsFileSpec doomedFile(buf);
|
||||
|
||||
doomedFile.Delete(PR_FALSE);
|
||||
|
||||
if (! doomedFile.Exists())
|
||||
{
|
||||
NR_RegDeleteEntry( reg, key, buf );
|
||||
}
|
||||
}
|
||||
|
||||
/* delete list node if empty */
|
||||
if (REGERR_NOMORE == NR_RegEnumEntries( reg, key, &state, buf, sizeof(buf), NULL ))
|
||||
{
|
||||
NR_RegDeleteKey(reg, ROOTKEY_PRIVATE, REG_DELETE_LIST_KEY);
|
||||
}
|
||||
}
|
||||
|
||||
NR_RegClose(reg);
|
||||
}
|
||||
}
|
||||
|
||||
void ReplaceScheduledFiles(void)
|
||||
{
|
||||
HREG reg;
|
||||
|
||||
if (REGERR_OK == NR_RegOpen("", ®))
|
||||
{
|
||||
RKEY key;
|
||||
REGENUM state;
|
||||
|
||||
/* replace files if any listed */
|
||||
if (REGERR_OK == NR_RegGetKey(reg, ROOTKEY_PRIVATE, REG_REPLACE_LIST_KEY, &key))
|
||||
{
|
||||
char tmpfile[MAXREGNAMELEN];
|
||||
char target[MAXREGNAMELEN];
|
||||
|
||||
state = 0;
|
||||
while (REGERR_OK == NR_RegEnumEntries(reg, key, &state, tmpfile, sizeof(tmpfile), NULL ))
|
||||
{
|
||||
|
||||
nsFileSpec replaceFile(tmpfile);
|
||||
|
||||
if (! replaceFile.Exists() )
|
||||
{
|
||||
NR_RegDeleteEntry( reg, key, tmpfile );
|
||||
}
|
||||
else if ( REGERR_OK != NR_RegGetEntryString( reg, key, tmpfile, target, sizeof(target) ) )
|
||||
{
|
||||
/* can't read target filename, corruption? */
|
||||
NR_RegDeleteEntry( reg, key, tmpfile );
|
||||
}
|
||||
else
|
||||
{
|
||||
nsFileSpec targetFile(target);
|
||||
|
||||
targetFile.Delete(PR_FALSE);
|
||||
|
||||
if (!targetFile.Exists())
|
||||
{
|
||||
nsFileSpec parentofTarget;
|
||||
targetFile.GetParent(parentofTarget);
|
||||
|
||||
nsresult result = replaceFile.Move(parentofTarget);
|
||||
if ( NS_SUCCEEDED(result) )
|
||||
{
|
||||
char* leafName = targetFile.GetLeafName();
|
||||
replaceFile.Rename(leafName);
|
||||
nsCRT::free(leafName);
|
||||
|
||||
NR_RegDeleteEntry( reg, key, tmpfile );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* delete list node if empty */
|
||||
if (REGERR_NOMORE == NR_RegEnumEntries(reg, key, &state, tmpfile, sizeof(tmpfile), NULL ))
|
||||
{
|
||||
NR_RegDeleteKey(reg, ROOTKEY_PRIVATE, REG_REPLACE_LIST_KEY);
|
||||
}
|
||||
}
|
||||
|
||||
NR_RegClose(reg);
|
||||
}
|
||||
}
|
||||
42
mozilla/xpinstall/src/ScheduledTasks.h
Normal file
42
mozilla/xpinstall/src/ScheduledTasks.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __SCHEDULEDTASKS_H__
|
||||
#define __SCHEDULEDTASKS_H__
|
||||
|
||||
|
||||
#include "NSReg.h"
|
||||
#include "nsFileSpec.h"
|
||||
|
||||
|
||||
REGERR DeleteFileNowOrSchedule(nsFileSpec& filename);
|
||||
REGERR ReplaceFileNowOrSchedule(nsFileSpec& tmpfile, nsFileSpec& target );
|
||||
|
||||
|
||||
extern "C" void PerformScheduledTasks(void *data);
|
||||
|
||||
|
||||
#endif
|
||||
135
mozilla/xpinstall/src/gdiff.h
Normal file
135
mozilla/xpinstall/src/gdiff.h
Normal file
@@ -0,0 +1,135 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
/*--------------------------------------------------------------
|
||||
* GDIFF.H
|
||||
*
|
||||
* Constants used in processing the GDIFF format
|
||||
*--------------------------------------------------------------*/
|
||||
|
||||
|
||||
#include "prio.h"
|
||||
#include "nsFileSpec.h"
|
||||
|
||||
#define GDIFF_MAGIC "\xD1\xFF\xD1\xFF"
|
||||
#define GDIFF_MAGIC_LEN 4
|
||||
#define GDIFF_VER 5
|
||||
#define GDIFF_EOF "\0"
|
||||
|
||||
#define GDIFF_VER_POS 4
|
||||
#define GDIFF_CS_POS 5
|
||||
#define GDIFF_CSLEN_POS 6
|
||||
|
||||
#define GDIFF_HEADERSIZE 7
|
||||
#define GDIFF_APPDATALEN 4
|
||||
|
||||
#define GDIFF_CS_NONE 0
|
||||
#define GDIFF_CS_MD5 1
|
||||
#define GDIFF_CS_SHA 2
|
||||
#define GDIFF_CS_CRC32 32
|
||||
|
||||
#define CRC32_LEN 4
|
||||
|
||||
/*--------------------------------------
|
||||
* GDIFF opcodes
|
||||
*------------------------------------*/
|
||||
#define ENDDIFF 0
|
||||
#define ADD8MAX 246
|
||||
#define ADD16 247
|
||||
#define ADD32 248
|
||||
#define COPY16BYTE 249
|
||||
#define COPY16SHORT 250
|
||||
#define COPY16LONG 251
|
||||
#define COPY32BYTE 252
|
||||
#define COPY32SHORT 253
|
||||
#define COPY32LONG 254
|
||||
#define COPY64 255
|
||||
|
||||
/* instruction sizes */
|
||||
#define ADD16SIZE 2
|
||||
#define ADD32SIZE 4
|
||||
#define COPY16BYTESIZE 3
|
||||
#define COPY16SHORTSIZE 4
|
||||
#define COPY16LONGSIZE 6
|
||||
#define COPY32BYTESIZE 5
|
||||
#define COPY32SHORTSIZE 6
|
||||
#define COPY32LONGSIZE 8
|
||||
#define COPY64SIZE 12
|
||||
|
||||
|
||||
/*--------------------------------------
|
||||
* error codes
|
||||
*------------------------------------*/
|
||||
#define GDIFF_OK 0
|
||||
#define GDIFF_ERR_UNKNOWN -1
|
||||
#define GDIFF_ERR_ARGS -2
|
||||
#define GDIFF_ERR_ACCESS -3
|
||||
#define GDIFF_ERR_MEM -4
|
||||
#define GDIFF_ERR_HEADER -5
|
||||
#define GDIFF_ERR_BADDIFF -6
|
||||
#define GDIFF_ERR_OPCODE -7
|
||||
#define GDIFF_ERR_OLDFILE -8
|
||||
#define GDIFF_ERR_CHKSUMTYPE -9
|
||||
#define GDIFF_ERR_CHECKSUM -10
|
||||
#define GDIFF_ERR_CHECKSUM_TARGET -11
|
||||
#define GDIFF_ERR_CHECKSUM_RESULT -12
|
||||
|
||||
|
||||
/*--------------------------------------
|
||||
* types
|
||||
*------------------------------------*/
|
||||
#ifndef AIX
|
||||
#ifdef OSF1
|
||||
#include <sys/types.h>
|
||||
#else
|
||||
typedef unsigned char uchar;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef struct _diffdata {
|
||||
PRFileDesc* fSrc;
|
||||
PRFileDesc* fOut;
|
||||
PRFileDesc* fDiff;
|
||||
uint8 checksumType;
|
||||
uint8 checksumLength;
|
||||
uchar* oldChecksum;
|
||||
uchar* newChecksum;
|
||||
PRBool bMacAppleSingle;
|
||||
PRBool bWin32BoundImage;
|
||||
uchar* databuf;
|
||||
uint32 bufsize;
|
||||
} DIFFDATA;
|
||||
|
||||
typedef DIFFDATA* pDIFFDATA;
|
||||
|
||||
|
||||
/*--------------------------------------
|
||||
* miscellaneous
|
||||
*------------------------------------*/
|
||||
|
||||
#define APPFLAG_W32BOUND "autoinstall:Win32PE"
|
||||
#define APPFLAG_APPLESINGLE "autoinstall:AppleSingle"
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
|
||||
111
mozilla/xpinstall/src/makefile.win
Normal file
111
mozilla/xpinstall/src/makefile.win
Normal file
@@ -0,0 +1,111 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (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/NPL/
|
||||
#
|
||||
# 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 Mozilla Communicator client code,
|
||||
# released March 31, 1998.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape Communications
|
||||
# Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
#
|
||||
# Contributors:
|
||||
# Daniel Veditz <dveditz@netscape.com>
|
||||
# Douglas Turner <dougt@netscape.com>
|
||||
|
||||
|
||||
DEPTH=..\..
|
||||
IGNORE_MANIFEST=1
|
||||
|
||||
MAKE_OBJ_TYPE = DLL
|
||||
MODULE=xpinstall
|
||||
|
||||
DLL=.\$(OBJDIR)\$(MODULE).dll
|
||||
|
||||
DEFINES=-D_IMPL_NS_DOM -DWIN32_LEAN_AND_MEAN
|
||||
|
||||
LCFLAGS = \
|
||||
$(LCFLAGS) \
|
||||
$(DEFINES) \
|
||||
$(NULL)
|
||||
|
||||
LINCS= \
|
||||
-I$(PUBLIC)\xpinstall \
|
||||
-I$(PUBLIC)\jar \
|
||||
-I$(PUBLIC)\libreg \
|
||||
-I$(PUBLIC)\netlib \
|
||||
-I$(PUBLIC)\xpcom \
|
||||
-I$(PUBLIC)\pref \
|
||||
-I$(PUBLIC)\rdf \
|
||||
-I$(PUBLIC)\js \
|
||||
-I$(PUBLIC)\dom \
|
||||
-I$(PUBLIC)\raptor \
|
||||
-I$(PUBLIC)\nspr2 \
|
||||
-I$(PUBLIC)\zlib \
|
||||
-I$(PUBLIC)\xpfe\components \
|
||||
$(NULL)
|
||||
|
||||
LLIBS = \
|
||||
$(DIST)\lib\jar50.lib \
|
||||
$(DIST)\lib\libreg32.lib \
|
||||
$(DIST)\lib\netlib.lib \
|
||||
$(DIST)\lib\xpcom.lib \
|
||||
$(DIST)\lib\js3250.lib \
|
||||
$(DIST)\lib\jsdombase_s.lib \
|
||||
$(DIST)\lib\jsdomevents_s.lib \
|
||||
$(DIST)\lib\zlib.lib \
|
||||
$(DIST)\lib\plc3.lib \
|
||||
$(LIBNSPR) \
|
||||
$(NULL)
|
||||
|
||||
|
||||
OBJS = \
|
||||
.\$(OBJDIR)\nsInstall.obj \
|
||||
.\$(OBJDIR)\nsInstallTrigger.obj \
|
||||
.\$(OBJDIR)\nsInstallVersion.obj \
|
||||
.\$(OBJDIR)\nsInstallFolder.obj \
|
||||
.\$(OBJDIR)\nsJSInstall.obj \
|
||||
.\$(OBJDIR)\nsJSInstallTriggerGlobal.obj \
|
||||
.\$(OBJDIR)\nsJSInstallVersion.obj \
|
||||
.\$(OBJDIR)\nsSoftwareUpdate.obj \
|
||||
.\$(OBJDIR)\nsSoftwareUpdateRun.obj \
|
||||
.\$(OBJDIR)\nsSoftwareUpdateStream.obj \
|
||||
.\$(OBJDIR)\nsInstallFile.obj \
|
||||
.\$(OBJDIR)\nsInstallDelete.obj \
|
||||
.\$(OBJDIR)\nsInstallExecute.obj \
|
||||
.\$(OBJDIR)\nsInstallPatch.obj \
|
||||
.\$(OBJDIR)\nsInstallUninstall.obj \
|
||||
.\$(OBJDIR)\nsInstallResources.obj \
|
||||
.\$(OBJDIR)\nsTopProgressNotifier.obj \
|
||||
.\$(OBJDIR)\nsLoggingProgressNotifier.obj\
|
||||
.\$(OBJDIR)\ScheduledTasks.obj \
|
||||
.\$(OBJDIR)\nsWinReg.obj \
|
||||
.\$(OBJDIR)\nsJSWinReg.obj \
|
||||
.\$(OBJDIR)\nsWinRegItem.obj \
|
||||
.\$(OBJDIR)\nsWinRegValue.obj \
|
||||
.\$(OBJDIR)\nsWinProfile.obj \
|
||||
.\$(OBJDIR)\nsJSWinProfile.obj \
|
||||
.\$(OBJDIR)\nsWinProfileItem.obj \
|
||||
.\$(OBJDIR)\nsInstallProgressDialog.obj \
|
||||
.\$(OBJDIR)\nsInstallFileOpItem.obj \
|
||||
$(NULL)
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
install:: $(DLL)
|
||||
$(MAKE_INSTALL) .\$(OBJDIR)\$(MODULE).lib $(DIST)\lib
|
||||
$(MAKE_INSTALL) .\$(OBJDIR)\$(MODULE).dll $(DIST)\bin\components
|
||||
|
||||
clobber::
|
||||
rm -f $(DIST)\lib\$(MODULE).lib
|
||||
rm -f $(DIST)\bin\components\$(MODULE).dll
|
||||
|
||||
1692
mozilla/xpinstall/src/nsInstall.cpp
Normal file
1692
mozilla/xpinstall/src/nsInstall.cpp
Normal file
File diff suppressed because it is too large
Load Diff
265
mozilla/xpinstall/src/nsInstall.h
Normal file
265
mozilla/xpinstall/src/nsInstall.h
Normal file
@@ -0,0 +1,265 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __NS_INSTALL_H__
|
||||
#define __NS_INSTALL_H__
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsISupports.h"
|
||||
|
||||
#include "jsapi.h"
|
||||
|
||||
#include "plevent.h"
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsVector.h"
|
||||
#include "nsHashtable.h"
|
||||
|
||||
#include "nsSoftwareUpdate.h"
|
||||
|
||||
#include "nsInstallObject.h"
|
||||
#include "nsInstallVersion.h"
|
||||
|
||||
#include "nsIXPInstallProgress.h"
|
||||
|
||||
|
||||
class nsInstallInfo
|
||||
{
|
||||
public:
|
||||
|
||||
nsInstallInfo(const nsString& fromURL, const nsString& localFile, long flags);
|
||||
|
||||
nsInstallInfo(nsVector* fromURL, nsVector* localFiles, long flags);
|
||||
|
||||
virtual ~nsInstallInfo();
|
||||
|
||||
nsString& GetFromURL(PRUint32 index = 0);
|
||||
|
||||
nsString& GetLocalFile(PRUint32 index = 0);
|
||||
|
||||
void GetArguments(nsString& args, PRUint32 index = 0);
|
||||
|
||||
long GetFlags();
|
||||
|
||||
PRBool IsMultipleTrigger();
|
||||
|
||||
static void DeleteVector(nsVector* vector);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
PRBool mMultipleTrigger;
|
||||
nsresult mError;
|
||||
|
||||
long mFlags;
|
||||
nsVector *mFromURLs;
|
||||
nsVector *mLocalFiles;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class nsInstall
|
||||
{
|
||||
friend class nsWinReg;
|
||||
friend class nsWinProfile;
|
||||
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
BAD_PACKAGE_NAME = -200,
|
||||
UNEXPECTED_ERROR = -201,
|
||||
ACCESS_DENIED = -202,
|
||||
TOO_MANY_CERTIFICATES = -203,
|
||||
NO_INSTALLER_CERTIFICATE = -204,
|
||||
NO_CERTIFICATE = -205,
|
||||
NO_MATCHING_CERTIFICATE = -206,
|
||||
UNKNOWN_JAR_FILE = -207,
|
||||
INVALID_ARGUMENTS = -208,
|
||||
ILLEGAL_RELATIVE_PATH = -209,
|
||||
USER_CANCELLED = -210,
|
||||
INSTALL_NOT_STARTED = -211,
|
||||
SILENT_MODE_DENIED = -212,
|
||||
NO_SUCH_COMPONENT = -213,
|
||||
FILE_DOES_NOT_EXIST = -214,
|
||||
FILE_READ_ONLY = -215,
|
||||
FILE_IS_DIRECTORY = -216,
|
||||
NETWORK_FILE_IS_IN_USE = -217,
|
||||
APPLE_SINGLE_ERR = -218,
|
||||
INVALID_PATH_ERR = -219,
|
||||
PATCH_BAD_DIFF = -220,
|
||||
PATCH_BAD_CHECKSUM_TARGET = -221,
|
||||
PATCH_BAD_CHECKSUM_RESULT = -222,
|
||||
UNINSTALL_FAILED = -223,
|
||||
GESTALT_UNKNOWN_ERR = -5550,
|
||||
GESTALT_INVALID_ARGUMENT = -5551,
|
||||
|
||||
SUCCESS = 0,
|
||||
REBOOT_NEEDED = 999,
|
||||
|
||||
LIMITED_INSTALL = 0,
|
||||
FULL_INSTALL = 1,
|
||||
NO_STATUS_DLG = 2,
|
||||
NO_FINALIZE_DLG = 4,
|
||||
|
||||
INSTALL_FILE_UNEXPECTED_MSG_ID = 0,
|
||||
DETAILS_REPLACE_FILE_MSG_ID = 1,
|
||||
DETAILS_INSTALL_FILE_MSG_ID = 2
|
||||
};
|
||||
|
||||
|
||||
nsInstall();
|
||||
virtual ~nsInstall();
|
||||
|
||||
PRInt32 SetScriptObject(void* aScriptObject);
|
||||
|
||||
PRInt32 SaveWinRegPrototype(void* aScriptObject);
|
||||
PRInt32 SaveWinProfilePrototype(void* aScriptObject);
|
||||
|
||||
JSObject* RetrieveWinRegPrototype(void);
|
||||
JSObject* RetrieveWinProfilePrototype(void);
|
||||
|
||||
PRInt32 GetUserPackageName(nsString& aUserPackageName);
|
||||
PRInt32 GetRegPackageName(nsString& aRegPackageName);
|
||||
|
||||
PRInt32 AbortInstall();
|
||||
|
||||
PRInt32 AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, const nsString& aFolder, const nsString& aSubdir, PRBool aForceMode, PRInt32* aReturn);
|
||||
PRInt32 AddDirectory(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, const nsString& aFolder, const nsString& aSubdir, PRInt32* aReturn);
|
||||
PRInt32 AddDirectory(const nsString& aRegName, const nsString& aJarSource, const nsString& aFolder, const nsString& aSubdir, PRInt32* aReturn);
|
||||
PRInt32 AddDirectory(const nsString& aJarSource, PRInt32* aReturn);
|
||||
|
||||
PRInt32 AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, const nsString& aFolder, const nsString& aTargetName, PRBool aForceMode, PRInt32* aReturn);
|
||||
PRInt32 AddSubcomponent(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, const nsString& aFolder, const nsString& aTargetName, PRInt32* aReturn);
|
||||
PRInt32 AddSubcomponent(const nsString& aRegName, const nsString& aJarSource, const nsString& aFolder, const nsString& aTargetName, PRInt32* aReturn);
|
||||
PRInt32 AddSubcomponent(const nsString& aJarSource, PRInt32* aReturn);
|
||||
|
||||
PRInt32 DeleteComponent(const nsString& aRegistryName, PRInt32* aReturn);
|
||||
PRInt32 DeleteFile(const nsString& aFolder, const nsString& aRelativeFileName, PRInt32* aReturn);
|
||||
PRInt32 DiskSpaceAvailable(const nsString& aFolder, PRInt32* aReturn);
|
||||
PRInt32 Execute(const nsString& aJarSource, const nsString& aArgs, PRInt32* aReturn);
|
||||
PRInt32 Execute(const nsString& aJarSource, PRInt32* aReturn);
|
||||
PRInt32 FinalizeInstall(PRInt32* aReturn);
|
||||
PRInt32 Gestalt(const nsString& aSelector, PRInt32* aReturn);
|
||||
PRInt32 GetComponentFolder(const nsString& aComponentName, const nsString& aSubdirectory, nsString** aFolder);
|
||||
PRInt32 GetComponentFolder(const nsString& aComponentName, nsString** aFolder);
|
||||
PRInt32 GetFolder(const nsString& aTargetFolder, const nsString& aSubdirectory, nsString** aFolder);
|
||||
PRInt32 GetFolder(const nsString& aTargetFolder, nsString** aFolder);
|
||||
PRInt32 GetLastError(PRInt32* aReturn);
|
||||
PRInt32 GetWinProfile(const nsString& aFolder, const nsString& aFile, JSContext* jscontext, JSClass* WinProfileClass, jsval* aReturn);
|
||||
PRInt32 GetWinRegistry(JSContext* jscontext, JSClass* WinRegClass, jsval* aReturn);
|
||||
PRInt32 Patch(const nsString& aRegName, const nsString& aVersion, const nsString& aJarSource, const nsString& aFolder, const nsString& aTargetName, PRInt32* aReturn);
|
||||
PRInt32 Patch(const nsString& aRegName, const nsString& aJarSource, const nsString& aFolder, const nsString& aTargetName, PRInt32* aReturn);
|
||||
PRInt32 ResetError();
|
||||
PRInt32 SetPackageFolder(const nsString& aFolder);
|
||||
PRInt32 StartInstall(const nsString& aUserPackageName, const nsString& aPackageName, const nsString& aVersion, PRInt32* aReturn);
|
||||
PRInt32 Uninstall(const nsString& aPackageName, PRInt32* aReturn);
|
||||
|
||||
PRInt32 FileOpDirCreate(nsFileSpec& aTarget, PRInt32* aReturn);
|
||||
PRInt32 FileOpDirGetParent(nsFileSpec& aTarget, nsFileSpec* aReturn);
|
||||
PRInt32 FileOpDirRemove(nsFileSpec& aTarget, PRInt32 aFlags, PRInt32* aReturn);
|
||||
PRInt32 FileOpDirRename(nsFileSpec& aSrc, nsFileSpec& aTarget, PRInt32* aReturn);
|
||||
PRInt32 FileOpFileCopy(nsFileSpec& aSrc, nsFileSpec& aTarget, PRInt32* aReturn);
|
||||
PRInt32 FileOpFileDelete(nsFileSpec& aTarget, PRInt32 aFlags, PRInt32* aReturn);
|
||||
PRInt32 FileOpFileExists(nsFileSpec& aTarget, PRBool* aReturn);
|
||||
PRInt32 FileOpFileExecute(nsFileSpec& aTarget, nsString& aParams, PRInt32* aReturn);
|
||||
PRInt32 FileOpFileGetNativeVersion(nsFileSpec& aTarget, nsString* aReturn);
|
||||
PRInt32 FileOpFileGetDiskSpaceAvailable(nsFileSpec& aTarget, PRUint32* aReturn);
|
||||
PRInt32 FileOpFileGetModDate(nsFileSpec& aTarget, nsFileSpec::TimeStamp* aReturn);
|
||||
PRInt32 FileOpFileGetSize(nsFileSpec& aTarget, PRUint32* aReturn);
|
||||
PRInt32 FileOpFileIsDirectory(nsFileSpec& aTarget, PRBool* aReturn);
|
||||
PRInt32 FileOpFileIsFile(nsFileSpec& aTarget, PRBool* aReturn);
|
||||
PRInt32 FileOpFileModDateChanged(nsFileSpec& aTarget, nsFileSpec::TimeStamp& aOldStamp, PRBool* aReturn);
|
||||
PRInt32 FileOpFileMove(nsFileSpec& aSrc, nsFileSpec& aTarget, PRInt32* aReturn);
|
||||
PRInt32 FileOpFileRename(nsFileSpec& aSrc, nsFileSpec& aTarget, PRInt32* aReturn);
|
||||
PRInt32 FileOpFileWinShortcutCreate(nsFileSpec& aTarget, PRInt32 aFlags, PRInt32* aReturn);
|
||||
PRInt32 FileOpFileMacAliasCreate(nsFileSpec& aTarget, PRInt32 aFlags, PRInt32* aReturn);
|
||||
PRInt32 FileOpFileUnixLinkCreate(nsFileSpec& aTarget, PRInt32 aFlags, PRInt32* aReturn);
|
||||
|
||||
PRInt32 ExtractFileFromJar(const nsString& aJarfile, nsFileSpec* aSuggestedName, nsFileSpec** aRealName);
|
||||
void AddPatch(nsHashKey *aKey, nsFileSpec* fileName);
|
||||
void GetPatch(nsHashKey *aKey, nsFileSpec* fileName);
|
||||
|
||||
void GetJarFileLocation(nsString& aFile);
|
||||
void SetJarFileLocation(const nsString& aFile);
|
||||
|
||||
void GetInstallArguments(nsString& args);
|
||||
void SetInstallArguments(const nsString& args);
|
||||
|
||||
|
||||
private:
|
||||
JSObject* mScriptObject;
|
||||
|
||||
JSObject* mWinRegObject;
|
||||
JSObject* mWinProfileObject;
|
||||
|
||||
nsString mJarFileLocation;
|
||||
void* mJarFileData;
|
||||
|
||||
nsString mInstallArguments;
|
||||
|
||||
PRBool mUserCancelled;
|
||||
|
||||
PRBool mUninstallPackage;
|
||||
PRBool mRegisterPackage;
|
||||
|
||||
nsString mRegistryPackageName; /* Name of the package we are installing */
|
||||
nsString mUIName; /* User-readable package name */
|
||||
|
||||
nsInstallVersion* mVersionInfo; /* Component version info */
|
||||
|
||||
nsVector* mInstalledFiles;
|
||||
nsHashtable* mPatchList;
|
||||
|
||||
nsIXPInstallProgress *mNotifier;
|
||||
|
||||
PRInt32 mLastError;
|
||||
|
||||
void ParseFlags(int flags);
|
||||
PRInt32 SanityCheck(void);
|
||||
void GetTime(nsString &aString);
|
||||
|
||||
|
||||
PRInt32 GetQualifiedRegName(const nsString& name, nsString& qualifiedRegName );
|
||||
PRInt32 GetQualifiedPackageName( const nsString& name, nsString& qualifiedName );
|
||||
|
||||
void CurrentUserNode(nsString& userRegNode);
|
||||
PRBool BadRegName(const nsString& regName);
|
||||
PRInt32 SaveError(PRInt32 errcode);
|
||||
|
||||
void CleanUp();
|
||||
|
||||
PRInt32 OpenJARFile(void);
|
||||
void CloseJARFile(void);
|
||||
PRInt32 ExtractDirEntries(const nsString& directory, nsVector *paths);
|
||||
|
||||
PRInt32 ScheduleForInstall(nsInstallObject* ob);
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
235
mozilla/xpinstall/src/nsInstallDelete.cpp
Normal file
235
mozilla/xpinstall/src/nsInstallDelete.cpp
Normal file
@@ -0,0 +1,235 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#include "prmem.h"
|
||||
|
||||
#include "nsFileSpec.h"
|
||||
|
||||
#include "VerReg.h"
|
||||
#include "ScheduledTasks.h"
|
||||
#include "nsInstallDelete.h"
|
||||
#include "nsInstallResources.h"
|
||||
|
||||
#include "nsInstall.h"
|
||||
#include "nsIDOMInstallVersion.h"
|
||||
|
||||
nsInstallDelete::nsInstallDelete( nsInstall* inInstall,
|
||||
const nsString& folderSpec,
|
||||
const nsString& inPartialPath,
|
||||
PRInt32 *error)
|
||||
|
||||
: nsInstallObject(inInstall)
|
||||
{
|
||||
if ((folderSpec == "null") || (inInstall == NULL))
|
||||
{
|
||||
*error = nsInstall::INVALID_ARGUMENTS;
|
||||
return;
|
||||
}
|
||||
|
||||
mDeleteStatus = DELETE_FILE;
|
||||
mFinalFile = nsnull;
|
||||
mRegistryName = "";
|
||||
|
||||
|
||||
mFinalFile = new nsFileSpec(folderSpec);
|
||||
*mFinalFile += inPartialPath;
|
||||
|
||||
*error = ProcessInstallDelete();
|
||||
}
|
||||
|
||||
nsInstallDelete::nsInstallDelete( nsInstall* inInstall,
|
||||
const nsString& inComponentName,
|
||||
PRInt32 *error)
|
||||
|
||||
: nsInstallObject(inInstall)
|
||||
{
|
||||
if (inInstall == NULL)
|
||||
{
|
||||
*error = nsInstall::INVALID_ARGUMENTS;
|
||||
return;
|
||||
}
|
||||
|
||||
mDeleteStatus = DELETE_COMPONENT;
|
||||
mFinalFile = nsnull;
|
||||
mRegistryName = inComponentName;
|
||||
|
||||
*error = ProcessInstallDelete();
|
||||
}
|
||||
|
||||
|
||||
nsInstallDelete::~nsInstallDelete()
|
||||
{
|
||||
if (mFinalFile == nsnull)
|
||||
delete mFinalFile;
|
||||
}
|
||||
|
||||
|
||||
PRInt32 nsInstallDelete::Prepare()
|
||||
{
|
||||
// no set-up necessary
|
||||
return nsInstall::SUCCESS;
|
||||
}
|
||||
|
||||
PRInt32 nsInstallDelete::Complete()
|
||||
{
|
||||
PRInt32 err = nsInstall::SUCCESS;
|
||||
|
||||
if (mInstall == NULL)
|
||||
return nsInstall::INVALID_ARGUMENTS;
|
||||
|
||||
if (mDeleteStatus == DELETE_COMPONENT)
|
||||
{
|
||||
char* temp = mRegistryName.ToNewCString();
|
||||
err = VR_Remove(temp);
|
||||
delete [] temp;
|
||||
}
|
||||
|
||||
if ((mDeleteStatus == DELETE_FILE) || (err == REGERR_OK))
|
||||
{
|
||||
err = NativeComplete();
|
||||
}
|
||||
else
|
||||
{
|
||||
err = nsInstall::UNEXPECTED_ERROR;
|
||||
}
|
||||
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void nsInstallDelete::Abort()
|
||||
{
|
||||
}
|
||||
|
||||
char* nsInstallDelete::toString()
|
||||
{
|
||||
char* buffer = new char[1024];
|
||||
|
||||
if (mDeleteStatus == DELETE_COMPONENT)
|
||||
{
|
||||
sprintf( buffer, nsInstallResources::GetDeleteComponentString(), nsAutoCString(mRegistryName));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mFinalFile)
|
||||
sprintf( buffer, nsInstallResources::GetDeleteFileString(), mFinalFile->GetCString());
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
PRBool
|
||||
nsInstallDelete::CanUninstall()
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsInstallDelete::RegisterPackageNode()
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
|
||||
PRInt32 nsInstallDelete::ProcessInstallDelete()
|
||||
{
|
||||
PRInt32 err;
|
||||
|
||||
char* tempCString = nsnull;
|
||||
|
||||
if (mDeleteStatus == DELETE_COMPONENT)
|
||||
{
|
||||
/* Check if the component is in the registry */
|
||||
tempCString = mRegistryName.ToNewCString();
|
||||
|
||||
err = VR_InRegistry( tempCString );
|
||||
|
||||
if (err != REGERR_OK)
|
||||
{
|
||||
return err;
|
||||
}
|
||||
else
|
||||
{
|
||||
char* tempRegistryString;
|
||||
|
||||
tempRegistryString = (char*)PR_Calloc(MAXREGPATHLEN, sizeof(char));
|
||||
|
||||
err = VR_GetPath( tempCString , MAXREGPATHLEN, tempRegistryString);
|
||||
|
||||
if (err == REGERR_OK)
|
||||
{
|
||||
if (mFinalFile)
|
||||
delete mFinalFile;
|
||||
|
||||
mFinalFile = new nsFileSpec(tempRegistryString);
|
||||
}
|
||||
|
||||
PR_FREEIF(tempRegistryString);
|
||||
}
|
||||
}
|
||||
|
||||
if(tempCString)
|
||||
delete [] tempCString;
|
||||
|
||||
if (mFinalFile->Exists())
|
||||
{
|
||||
if (mFinalFile->IsFile())
|
||||
{
|
||||
err = nsInstall::SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
err = nsInstall::FILE_IS_DIRECTORY;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
err = nsInstall::FILE_DOES_NOT_EXIST;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
|
||||
PRInt32 nsInstallDelete::NativeComplete()
|
||||
{
|
||||
if (mFinalFile->Exists())
|
||||
{
|
||||
if (mFinalFile->IsFile())
|
||||
{
|
||||
return DeleteFileNowOrSchedule(*mFinalFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
return nsInstall::FILE_IS_DIRECTORY;
|
||||
}
|
||||
}
|
||||
|
||||
return nsInstall::FILE_DOES_NOT_EXIST;
|
||||
}
|
||||
|
||||
78
mozilla/xpinstall/src/nsInstallDelete.h
Normal file
78
mozilla/xpinstall/src/nsInstallDelete.h
Normal file
@@ -0,0 +1,78 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef nsInstallDelete_h__
|
||||
#define nsInstallDelete_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsInstallObject.h"
|
||||
|
||||
#include "nsInstall.h"
|
||||
|
||||
#define DELETE_COMPONENT 1
|
||||
#define DELETE_FILE 2
|
||||
|
||||
class nsInstallDelete : public nsInstallObject
|
||||
{
|
||||
public:
|
||||
|
||||
nsInstallDelete( nsInstall* inInstall,
|
||||
const nsString& folderSpec,
|
||||
const nsString& inPartialPath,
|
||||
PRInt32 *error);
|
||||
|
||||
nsInstallDelete( nsInstall* inInstall,
|
||||
const nsString& ,
|
||||
PRInt32 *error);
|
||||
|
||||
virtual ~nsInstallDelete();
|
||||
|
||||
PRInt32 Prepare();
|
||||
PRInt32 Complete();
|
||||
void Abort();
|
||||
char* toString();
|
||||
|
||||
PRBool CanUninstall();
|
||||
PRBool RegisterPackageNode();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/* Private Fields */
|
||||
|
||||
nsFileSpec* mFinalFile;
|
||||
|
||||
nsString mRegistryName;
|
||||
PRInt32 mDeleteStatus;
|
||||
|
||||
PRInt32 ProcessInstallDelete();
|
||||
PRInt32 NativeComplete();
|
||||
|
||||
};
|
||||
|
||||
#endif /* nsInstallDelete_h__ */
|
||||
136
mozilla/xpinstall/src/nsInstallExecute.cpp
Normal file
136
mozilla/xpinstall/src/nsInstallExecute.cpp
Normal file
@@ -0,0 +1,136 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "prmem.h"
|
||||
|
||||
#include "nsFileSpec.h"
|
||||
|
||||
#include "VerReg.h"
|
||||
#include "nsInstallExecute.h"
|
||||
#include "nsInstallResources.h"
|
||||
#include "ScheduledTasks.h"
|
||||
|
||||
#include "nsInstall.h"
|
||||
#include "nsIDOMInstallVersion.h"
|
||||
|
||||
nsInstallExecute:: nsInstallExecute( nsInstall* inInstall,
|
||||
const nsString& inJarLocation,
|
||||
const nsString& inArgs,
|
||||
PRInt32 *error)
|
||||
|
||||
: nsInstallObject(inInstall)
|
||||
{
|
||||
if ((inInstall == nsnull) || (inJarLocation == "null"))
|
||||
{
|
||||
*error = nsInstall::INVALID_ARGUMENTS;
|
||||
return;
|
||||
}
|
||||
|
||||
mJarLocation = inJarLocation;
|
||||
mArgs = inArgs;
|
||||
mExecutableFile = nsnull;
|
||||
|
||||
}
|
||||
|
||||
|
||||
nsInstallExecute::~nsInstallExecute()
|
||||
{
|
||||
if (mExecutableFile)
|
||||
delete mExecutableFile;
|
||||
}
|
||||
|
||||
|
||||
|
||||
PRInt32 nsInstallExecute::Prepare()
|
||||
{
|
||||
if (mInstall == NULL || mJarLocation == "null")
|
||||
return nsInstall::INVALID_ARGUMENTS;
|
||||
|
||||
return mInstall->ExtractFileFromJar(mJarLocation, nsnull, &mExecutableFile);
|
||||
}
|
||||
|
||||
PRInt32 nsInstallExecute::Complete()
|
||||
{
|
||||
if (mExecutableFile == nsnull)
|
||||
return nsInstall::INVALID_ARGUMENTS;
|
||||
|
||||
nsFileSpec app( *mExecutableFile);
|
||||
|
||||
if (!app.Exists())
|
||||
{
|
||||
return nsInstall::INVALID_ARGUMENTS;
|
||||
}
|
||||
|
||||
PRInt32 result = app.Execute( mArgs );
|
||||
|
||||
DeleteFileNowOrSchedule( app );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void nsInstallExecute::Abort()
|
||||
{
|
||||
/* Get the names */
|
||||
if (mExecutableFile == nsnull)
|
||||
return;
|
||||
|
||||
DeleteFileNowOrSchedule(*mExecutableFile);
|
||||
}
|
||||
|
||||
char* nsInstallExecute::toString()
|
||||
{
|
||||
char* buffer = new char[1024];
|
||||
|
||||
// if the FileSpec is NULL, just us the in jar file name.
|
||||
|
||||
if (mExecutableFile == nsnull)
|
||||
{
|
||||
char *tempString = mJarLocation.ToNewCString();
|
||||
sprintf( buffer, nsInstallResources::GetExecuteString(), tempString);
|
||||
delete [] tempString;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf( buffer, nsInstallResources::GetExecuteString(), mExecutableFile->GetCString());
|
||||
}
|
||||
return buffer;
|
||||
|
||||
}
|
||||
|
||||
|
||||
PRBool
|
||||
nsInstallExecute::CanUninstall()
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsInstallExecute::RegisterPackageNode()
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
73
mozilla/xpinstall/src/nsInstallExecute.h
Normal file
73
mozilla/xpinstall/src/nsInstallExecute.h
Normal file
@@ -0,0 +1,73 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef nsInstallExecute_h__
|
||||
#define nsInstallExecute_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsInstallObject.h"
|
||||
|
||||
#include "nsInstall.h"
|
||||
#include "nsIDOMInstallVersion.h"
|
||||
|
||||
|
||||
class nsInstallExecute : public nsInstallObject
|
||||
{
|
||||
public:
|
||||
|
||||
nsInstallExecute( nsInstall* inInstall,
|
||||
const nsString& inJarLocation,
|
||||
const nsString& inArgs,
|
||||
PRInt32 *error);
|
||||
|
||||
|
||||
virtual ~nsInstallExecute();
|
||||
|
||||
PRInt32 Prepare();
|
||||
PRInt32 Complete();
|
||||
void Abort();
|
||||
char* toString();
|
||||
|
||||
PRBool CanUninstall();
|
||||
PRBool RegisterPackageNode();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
nsString mJarLocation; // Location in the JAR
|
||||
nsString mArgs; // command line arguments
|
||||
|
||||
nsFileSpec *mExecutableFile; // temporary file location
|
||||
|
||||
|
||||
PRInt32 NativeComplete(void);
|
||||
void NativeAbort(void);
|
||||
|
||||
};
|
||||
|
||||
#endif /* nsInstallExecute_h__ */
|
||||
366
mozilla/xpinstall/src/nsInstallFile.cpp
Normal file
366
mozilla/xpinstall/src/nsInstallFile.cpp
Normal file
@@ -0,0 +1,366 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nsInstallFile.h"
|
||||
#include "nsFileSpec.h"
|
||||
#include "VerReg.h"
|
||||
#include "ScheduledTasks.h"
|
||||
#include "nsInstall.h"
|
||||
#include "nsIDOMInstallVersion.h"
|
||||
#include "nsInstallResources.h"
|
||||
|
||||
/* Public Methods */
|
||||
|
||||
/* Constructor
|
||||
inInstall - softUpdate object we belong to
|
||||
inComponentName - full path of the registry component
|
||||
inVInfo - full version info
|
||||
inJarLocation - location inside the JAR file
|
||||
inFinalFileSpec - final location on disk
|
||||
*/
|
||||
|
||||
|
||||
nsInstallFile::nsInstallFile(nsInstall* inInstall,
|
||||
const nsString& inComponentName,
|
||||
const nsString& inVInfo,
|
||||
const nsString& inJarLocation,
|
||||
const nsString& folderSpec,
|
||||
const nsString& inPartialPath,
|
||||
PRBool forceInstall,
|
||||
PRInt32 *error)
|
||||
: nsInstallObject(inInstall)
|
||||
{
|
||||
mVersionRegistryName = nsnull;
|
||||
mJarLocation = nsnull;
|
||||
mExtracedFile = nsnull;
|
||||
mFinalFile = nsnull;
|
||||
mVersionInfo = nsnull;
|
||||
|
||||
mUpgradeFile = PR_FALSE;
|
||||
|
||||
if ((folderSpec == "null") || (inInstall == NULL))
|
||||
{
|
||||
*error = nsInstall::INVALID_ARGUMENTS;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check for existence of the newer version */
|
||||
|
||||
PRBool versionNewer = PR_FALSE; // Is this a newer version
|
||||
char* qualifiedRegNameString = inComponentName.ToNewCString();
|
||||
|
||||
if ( (forceInstall == PR_FALSE ) && (inVInfo != "") && ( VR_ValidateComponent( qualifiedRegNameString ) == 0 ) )
|
||||
{
|
||||
nsInstallVersion *newVersion = new nsInstallVersion();
|
||||
newVersion->Init(inVInfo);
|
||||
|
||||
VERSION versionStruct;
|
||||
|
||||
VR_GetVersion( qualifiedRegNameString, &versionStruct );
|
||||
|
||||
nsInstallVersion* oldVersion = new nsInstallVersion();
|
||||
|
||||
oldVersion->Init(versionStruct.major,
|
||||
versionStruct.minor,
|
||||
versionStruct.release,
|
||||
versionStruct.build);
|
||||
|
||||
PRInt32 areTheyEqual;
|
||||
newVersion->CompareTo(oldVersion, &areTheyEqual);
|
||||
|
||||
delete oldVersion;
|
||||
delete newVersion;
|
||||
|
||||
if (areTheyEqual == nsIDOMInstallVersion::MAJOR_DIFF_MINUS ||
|
||||
areTheyEqual == nsIDOMInstallVersion::MINOR_DIFF_MINUS ||
|
||||
areTheyEqual == nsIDOMInstallVersion::REL_DIFF_MINUS ||
|
||||
areTheyEqual == nsIDOMInstallVersion::BLD_DIFF_MINUS )
|
||||
{
|
||||
// the file to be installed is OLDER than what is on disk. Return error
|
||||
delete qualifiedRegNameString;
|
||||
*error = areTheyEqual;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
delete qualifiedRegNameString;
|
||||
|
||||
|
||||
mFinalFile = new nsFileSpec(folderSpec);
|
||||
*mFinalFile += inPartialPath;
|
||||
|
||||
mReplaceFile = mFinalFile->Exists();
|
||||
|
||||
if (mReplaceFile == PR_FALSE)
|
||||
{
|
||||
nsFileSpec parent;
|
||||
mFinalFile->GetParent(parent);
|
||||
nsFileSpec makeDirs(parent.GetCString(), PR_TRUE);
|
||||
}
|
||||
|
||||
mForceInstall = forceInstall;
|
||||
|
||||
mVersionRegistryName = new nsString(inComponentName);
|
||||
mJarLocation = new nsString(inJarLocation);
|
||||
mVersionInfo = new nsString(inVInfo);
|
||||
|
||||
nsString regPackageName;
|
||||
mInstall->GetRegPackageName(regPackageName);
|
||||
|
||||
// determine Child status
|
||||
if ( regPackageName == "" )
|
||||
{
|
||||
// in the "current communicator package" absolute pathnames (start
|
||||
// with slash) indicate shared files -- all others are children
|
||||
mChildFile = ( mVersionRegistryName->CharAt(0) != '/' );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// there is no "starts with" api in nsString. LAME!
|
||||
nsString startsWith;
|
||||
mVersionRegistryName->Left(startsWith, regPackageName.Length());
|
||||
|
||||
if (startsWith.Equals(regPackageName))
|
||||
{
|
||||
mChildFile = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mChildFile = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
nsInstallFile::~nsInstallFile()
|
||||
{
|
||||
if (mVersionRegistryName)
|
||||
delete mVersionRegistryName;
|
||||
|
||||
if (mJarLocation)
|
||||
delete mJarLocation;
|
||||
|
||||
if (mExtracedFile)
|
||||
delete mExtracedFile;
|
||||
|
||||
if (mFinalFile)
|
||||
delete mFinalFile;
|
||||
|
||||
if (mVersionInfo)
|
||||
delete mVersionInfo;
|
||||
}
|
||||
|
||||
/* Prepare
|
||||
* Extracts file out of the JAR archive
|
||||
*/
|
||||
PRInt32 nsInstallFile::Prepare()
|
||||
{
|
||||
if (mInstall == nsnull || mFinalFile == nsnull || mJarLocation == nsnull )
|
||||
return nsInstall::INVALID_ARGUMENTS;
|
||||
|
||||
return mInstall->ExtractFileFromJar(*mJarLocation, mFinalFile, &mExtracedFile);
|
||||
}
|
||||
|
||||
/* Complete
|
||||
* Completes the install:
|
||||
* - move the downloaded file to the final location
|
||||
* - updates the registry
|
||||
*/
|
||||
PRInt32 nsInstallFile::Complete()
|
||||
{
|
||||
PRInt32 err;
|
||||
|
||||
if (mInstall == nsnull || mVersionRegistryName == nsnull || mFinalFile == nsnull )
|
||||
{
|
||||
return nsInstall::INVALID_ARGUMENTS;
|
||||
}
|
||||
|
||||
err = CompleteFileMove();
|
||||
|
||||
if ( 0 == err || nsInstall::REBOOT_NEEDED == err )
|
||||
{
|
||||
err = RegisterInVersionRegistry();
|
||||
}
|
||||
|
||||
return err;
|
||||
|
||||
}
|
||||
|
||||
void nsInstallFile::Abort()
|
||||
{
|
||||
if (mExtracedFile != nsnull)
|
||||
mExtracedFile->Delete(PR_FALSE);
|
||||
}
|
||||
|
||||
char* nsInstallFile::toString()
|
||||
{
|
||||
char* buffer = new char[1024];
|
||||
|
||||
if (mFinalFile == nsnull)
|
||||
{
|
||||
sprintf( buffer, nsInstallResources::GetInstallFileString(), nsnull);
|
||||
}
|
||||
else if (mReplaceFile)
|
||||
{
|
||||
// we are replacing this file.
|
||||
|
||||
sprintf( buffer, nsInstallResources::GetReplaceFileString(), mFinalFile->GetCString());
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf( buffer, nsInstallResources::GetInstallFileString(), mFinalFile->GetCString());
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
PRInt32 nsInstallFile::CompleteFileMove()
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
if (mExtracedFile == nsnull)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( *mExtracedFile == *mFinalFile )
|
||||
{
|
||||
/* No need to rename, they are the same */
|
||||
result = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = ReplaceFileNowOrSchedule(*mExtracedFile, *mFinalFile );
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFile::RegisterInVersionRegistry()
|
||||
{
|
||||
int refCount;
|
||||
nsString regPackageName;
|
||||
mInstall->GetRegPackageName(regPackageName);
|
||||
|
||||
|
||||
// Register file and log for Uninstall
|
||||
|
||||
if (!mChildFile)
|
||||
{
|
||||
int found;
|
||||
if (regPackageName != "")
|
||||
{
|
||||
found = VR_UninstallFileExistsInList( (char*)(const char*)nsAutoCString(regPackageName) ,
|
||||
(char*)(const char*)nsAutoCString(*mVersionRegistryName));
|
||||
}
|
||||
else
|
||||
{
|
||||
found = VR_UninstallFileExistsInList( "", (char*)(const char*)nsAutoCString(*mVersionRegistryName) );
|
||||
}
|
||||
|
||||
if (found != REGERR_OK)
|
||||
mUpgradeFile = PR_FALSE;
|
||||
else
|
||||
mUpgradeFile = PR_TRUE;
|
||||
}
|
||||
else if (REGERR_OK == VR_InRegistry( (char*)(const char*)nsAutoCString(*mVersionRegistryName)))
|
||||
{
|
||||
mUpgradeFile = PR_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
mUpgradeFile = PR_FALSE;
|
||||
}
|
||||
|
||||
if ( REGERR_OK != VR_GetRefCount( (char*)(const char*)nsAutoCString(*mVersionRegistryName), &refCount ))
|
||||
{
|
||||
refCount = 0;
|
||||
}
|
||||
|
||||
VR_Install( (char*)(const char*)nsAutoCString(*mVersionRegistryName),
|
||||
(char*)(const char*)mFinalFile->GetNativePathCString(), // DO NOT CHANGE THIS.
|
||||
(char*)(const char*)nsAutoCString(*mVersionInfo),
|
||||
PR_FALSE );
|
||||
|
||||
if (mUpgradeFile)
|
||||
{
|
||||
if (refCount == 0)
|
||||
VR_SetRefCount( (char*)(const char*)nsAutoCString(*mVersionRegistryName), 1 );
|
||||
else
|
||||
VR_SetRefCount( (char*)(const char*)nsAutoCString(*mVersionRegistryName), refCount ); //FIX?? what should the ref count be/
|
||||
}
|
||||
else
|
||||
{
|
||||
if (refCount != 0)
|
||||
{
|
||||
VR_SetRefCount( (char*)(const char*)nsAutoCString(*mVersionRegistryName), refCount + 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mReplaceFile)
|
||||
VR_SetRefCount( (char*)(const char*)nsAutoCString(*mVersionRegistryName), 2 );
|
||||
else
|
||||
VR_SetRefCount( (char*)(const char*)nsAutoCString(*mVersionRegistryName), 1 );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !mChildFile && !mUpgradeFile )
|
||||
{
|
||||
if (regPackageName != "")
|
||||
{
|
||||
VR_UninstallAddFileToList( (char*)(const char*)nsAutoCString(regPackageName),
|
||||
(char*)(const char*)nsAutoCString(*mVersionRegistryName));
|
||||
}
|
||||
else
|
||||
{
|
||||
VR_UninstallAddFileToList( "", (char*)(const char*)nsAutoCString(*mVersionRegistryName) );
|
||||
}
|
||||
}
|
||||
|
||||
return nsInstall::SUCCESS;
|
||||
}
|
||||
|
||||
/* CanUninstall
|
||||
* InstallFile() installs files which can be uninstalled,
|
||||
* hence this function returns true.
|
||||
*/
|
||||
PRBool
|
||||
nsInstallFile::CanUninstall()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* RegisterPackageNode
|
||||
* InstallFile() installs files which need to be registered,
|
||||
* hence this function returns true.
|
||||
*/
|
||||
PRBool
|
||||
nsInstallFile::RegisterPackageNode()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
93
mozilla/xpinstall/src/nsInstallFile.h
Normal file
93
mozilla/xpinstall/src/nsInstallFile.h
Normal file
@@ -0,0 +1,93 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef nsInstallFile_h__
|
||||
#define nsInstallFile_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsInstallObject.h"
|
||||
|
||||
#include "nsInstall.h"
|
||||
#include "nsInstallVersion.h"
|
||||
|
||||
class nsInstallFile : public nsInstallObject
|
||||
{
|
||||
public:
|
||||
|
||||
/*************************************************************
|
||||
* Public Methods
|
||||
*
|
||||
* Constructor
|
||||
* inSoftUpdate - softUpdate object we belong to
|
||||
* inComponentName - full path of the registry component
|
||||
* inVInfo - full version info
|
||||
* inJarLocation - location inside the JAR file
|
||||
* inFinalFileSpec - final location on disk
|
||||
*************************************************************/
|
||||
nsInstallFile( nsInstall* inInstall,
|
||||
const nsString& inVRName,
|
||||
const nsString& inVInfo,
|
||||
const nsString& inJarLocation,
|
||||
const nsString& folderSpec,
|
||||
const nsString& inPartialPath,
|
||||
PRBool forceInstall,
|
||||
PRInt32 *error);
|
||||
|
||||
virtual ~nsInstallFile();
|
||||
|
||||
PRInt32 Prepare();
|
||||
PRInt32 Complete();
|
||||
void Abort();
|
||||
char* toString();
|
||||
|
||||
PRBool CanUninstall();
|
||||
PRBool RegisterPackageNode();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/* Private Fields */
|
||||
nsString* mVersionInfo; /* Version info for this file*/
|
||||
|
||||
nsString* mJarLocation; /* Location in the JAR */
|
||||
nsFileSpec* mExtracedFile; /* temporary file location */
|
||||
nsFileSpec* mFinalFile; /* final file destination */
|
||||
|
||||
nsString* mVersionRegistryName; /* full version path */
|
||||
|
||||
PRBool mForceInstall; /* whether install is forced */
|
||||
PRBool mReplaceFile; /* whether file exists */
|
||||
PRBool mChildFile; /* whether file is a child */
|
||||
PRBool mUpgradeFile; /* whether file is an upgrade */
|
||||
|
||||
|
||||
PRInt32 CompleteFileMove();
|
||||
PRInt32 RegisterInVersionRegistry();
|
||||
};
|
||||
|
||||
#endif /* nsInstallFile_h__ */
|
||||
38
mozilla/xpinstall/src/nsInstallFileOpEnums.h
Normal file
38
mozilla/xpinstall/src/nsInstallFileOpEnums.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsInstallFileOpEnums_h__
|
||||
#define nsInstallFileOpEnums_h__
|
||||
|
||||
typedef enum nsInstallFileOpEnums {
|
||||
NS_FOP_DIR_CREATE = 0,
|
||||
NS_FOP_DIR_REMOVE = 1,
|
||||
NS_FOP_DIR_RENAME = 2,
|
||||
NS_FOP_FILE_COPY = 3,
|
||||
NS_FOP_FILE_DELETE = 4,
|
||||
NS_FOP_FILE_EXECUTE = 5,
|
||||
NS_FOP_FILE_MOVE = 6,
|
||||
NS_FOP_FILE_RENAME = 7,
|
||||
NS_FOP_WIN_SHORTCUT_CREATE = 8,
|
||||
NS_FOP_MAC_ALIAS_CREATE = 9,
|
||||
NS_FOP_UNIX_LINK_CREATE = 10,
|
||||
NS_FOP_FILE_SET_STAT = 11
|
||||
|
||||
} nsInstallFileOpEnums;
|
||||
|
||||
#endif /* nsInstallFileOpEnums_h__ */
|
||||
316
mozilla/xpinstall/src/nsInstallFileOpItem.cpp
Normal file
316
mozilla/xpinstall/src/nsInstallFileOpItem.cpp
Normal file
@@ -0,0 +1,316 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "nspr.h"
|
||||
#include "nsInstall.h"
|
||||
#include "nsInstallFileOpEnums.h"
|
||||
#include "nsInstallFileOpItem.h"
|
||||
|
||||
/* Public Methods */
|
||||
|
||||
nsInstallFileOpItem::nsInstallFileOpItem(nsInstall* aInstallObj,
|
||||
PRInt32 aCommand,
|
||||
nsFileSpec& aTarget,
|
||||
PRInt32 aFlags,
|
||||
PRInt32* aReturn)
|
||||
:nsInstallObject(aInstallObj)
|
||||
{
|
||||
mIObj = aInstallObj;
|
||||
mCommand = aCommand;
|
||||
mFlags = aFlags;
|
||||
mSrc = nsnull;
|
||||
mParams = nsnull;
|
||||
mTarget = new nsFileSpec(aTarget);
|
||||
|
||||
*aReturn = NS_OK;
|
||||
}
|
||||
|
||||
nsInstallFileOpItem::nsInstallFileOpItem(nsInstall* aInstallObj,
|
||||
PRInt32 aCommand,
|
||||
nsFileSpec& aSrc,
|
||||
nsFileSpec& aTarget,
|
||||
PRInt32* aReturn)
|
||||
:nsInstallObject(aInstallObj)
|
||||
{
|
||||
mIObj = aInstallObj;
|
||||
mCommand = aCommand;
|
||||
mFlags = 0;
|
||||
mSrc = new nsFileSpec(aSrc);
|
||||
mParams = nsnull;
|
||||
mTarget = new nsFileSpec(aTarget);
|
||||
|
||||
*aReturn = NS_OK;
|
||||
}
|
||||
|
||||
nsInstallFileOpItem::nsInstallFileOpItem(nsInstall* aInstallObj,
|
||||
PRInt32 aCommand,
|
||||
nsFileSpec& aTarget,
|
||||
PRInt32* aReturn)
|
||||
:nsInstallObject(aInstallObj)
|
||||
{
|
||||
mIObj = aInstallObj;
|
||||
mCommand = aCommand;
|
||||
mFlags = 0;
|
||||
mSrc = nsnull;
|
||||
mParams = nsnull;
|
||||
mTarget = new nsFileSpec(aTarget);
|
||||
|
||||
*aReturn = NS_OK;
|
||||
}
|
||||
|
||||
nsInstallFileOpItem::nsInstallFileOpItem(nsInstall* aInstallObj,
|
||||
PRInt32 aCommand,
|
||||
nsFileSpec& aTarget,
|
||||
nsString& aParams,
|
||||
PRInt32* aReturn)
|
||||
:nsInstallObject(aInstallObj)
|
||||
{
|
||||
mIObj = aInstallObj;
|
||||
mCommand = aCommand;
|
||||
mFlags = 0;
|
||||
mSrc = nsnull;
|
||||
mParams = new nsString(aParams);
|
||||
mTarget = new nsFileSpec(aTarget);
|
||||
|
||||
*aReturn = NS_OK;
|
||||
}
|
||||
|
||||
nsInstallFileOpItem::~nsInstallFileOpItem()
|
||||
{
|
||||
if(mSrc)
|
||||
delete mSrc;
|
||||
if(mTarget)
|
||||
delete mTarget;
|
||||
}
|
||||
|
||||
PRInt32 nsInstallFileOpItem::Complete()
|
||||
{
|
||||
PRInt32 aReturn = NS_OK;
|
||||
|
||||
switch(mCommand)
|
||||
{
|
||||
case NS_FOP_DIR_CREATE:
|
||||
NativeFileOpDirCreate(mTarget);
|
||||
break;
|
||||
case NS_FOP_DIR_REMOVE:
|
||||
NativeFileOpDirRemove(mTarget, mFlags);
|
||||
break;
|
||||
case NS_FOP_DIR_RENAME:
|
||||
NativeFileOpDirRename(mSrc, mTarget);
|
||||
break;
|
||||
case NS_FOP_FILE_COPY:
|
||||
NativeFileOpFileCopy(mSrc, mTarget);
|
||||
break;
|
||||
case NS_FOP_FILE_DELETE:
|
||||
NativeFileOpFileDelete(mTarget, mFlags);
|
||||
break;
|
||||
case NS_FOP_FILE_EXECUTE:
|
||||
NativeFileOpFileExecute(mTarget, mParams);
|
||||
break;
|
||||
case NS_FOP_FILE_MOVE:
|
||||
NativeFileOpFileMove(mSrc, mTarget);
|
||||
break;
|
||||
case NS_FOP_FILE_RENAME:
|
||||
NativeFileOpFileRename(mSrc, mTarget);
|
||||
break;
|
||||
case NS_FOP_WIN_SHORTCUT_CREATE:
|
||||
NativeFileOpWinShortcutCreate();
|
||||
break;
|
||||
case NS_FOP_MAC_ALIAS_CREATE:
|
||||
NativeFileOpMacAliasCreate();
|
||||
break;
|
||||
case NS_FOP_UNIX_LINK_CREATE:
|
||||
NativeFileOpUnixLinkCreate();
|
||||
break;
|
||||
}
|
||||
return aReturn;
|
||||
}
|
||||
|
||||
float nsInstallFileOpItem::GetInstallOrder()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
char* nsInstallFileOpItem::toString()
|
||||
{
|
||||
nsString result;
|
||||
char* resultCString;
|
||||
|
||||
switch(mCommand)
|
||||
{
|
||||
case NS_FOP_FILE_COPY:
|
||||
result = "Copy file: ";
|
||||
result.Append(mSrc->GetNativePathCString());
|
||||
result.Append(" to ");
|
||||
result.Append(mTarget->GetNativePathCString());
|
||||
resultCString = result.ToNewCString();
|
||||
break;
|
||||
case NS_FOP_FILE_DELETE:
|
||||
result = "Delete file: ";
|
||||
result.Append(mTarget->GetNativePathCString());
|
||||
resultCString = result.ToNewCString();
|
||||
break;
|
||||
case NS_FOP_FILE_MOVE:
|
||||
result = "Move file: ";
|
||||
result.Append(mSrc->GetNativePathCString());
|
||||
result.Append(" to ");
|
||||
result.Append(mTarget->GetNativePathCString());
|
||||
resultCString = result.ToNewCString();
|
||||
break;
|
||||
case NS_FOP_FILE_RENAME:
|
||||
result = "Rename file: ";
|
||||
result.Append(mTarget->GetNativePathCString());
|
||||
resultCString = result.ToNewCString();
|
||||
break;
|
||||
case NS_FOP_DIR_CREATE:
|
||||
result = "Create Folder: ";
|
||||
result.Append(mTarget->GetNativePathCString());
|
||||
resultCString = result.ToNewCString();
|
||||
break;
|
||||
case NS_FOP_DIR_REMOVE:
|
||||
result = "Remove Folder: ";
|
||||
result.Append(mTarget->GetNativePathCString());
|
||||
resultCString = result.ToNewCString();
|
||||
break;
|
||||
case NS_FOP_WIN_SHORTCUT_CREATE:
|
||||
break;
|
||||
case NS_FOP_MAC_ALIAS_CREATE:
|
||||
break;
|
||||
case NS_FOP_UNIX_LINK_CREATE:
|
||||
break;
|
||||
case NS_FOP_FILE_SET_STAT:
|
||||
result = "Set file stat: ";
|
||||
result.Append(mTarget->GetNativePathCString());
|
||||
resultCString = result.ToNewCString();
|
||||
break;
|
||||
default:
|
||||
result = "Unkown file operation command!";
|
||||
resultCString = result.ToNewCString();
|
||||
break;
|
||||
}
|
||||
return resultCString;
|
||||
}
|
||||
|
||||
PRInt32 nsInstallFileOpItem::Prepare()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void nsInstallFileOpItem::Abort()
|
||||
{
|
||||
}
|
||||
|
||||
/* Private Methods */
|
||||
|
||||
/* CanUninstall
|
||||
* InstallFileOpItem() does not install any files which can be uninstalled,
|
||||
* hence this function returns false.
|
||||
*/
|
||||
PRBool
|
||||
nsInstallFileOpItem::CanUninstall()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* RegisterPackageNode
|
||||
* InstallFileOpItem() does notinstall files which need to be registered,
|
||||
* hence this function returns false.
|
||||
*/
|
||||
PRBool
|
||||
nsInstallFileOpItem::RegisterPackageNode()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
// File operation functions begin here
|
||||
//
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpDirCreate(nsFileSpec* aTarget)
|
||||
{
|
||||
aTarget->CreateDirectory();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpDirRemove(nsFileSpec* aTarget, PRInt32 aFlags)
|
||||
{
|
||||
aTarget->Delete(aFlags);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpDirRename(nsFileSpec* aSrc, nsFileSpec* aTarget)
|
||||
{
|
||||
aSrc->Rename(*aTarget);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpFileCopy(nsFileSpec* aSrc, nsFileSpec* aTarget)
|
||||
{
|
||||
aSrc->Copy(*aTarget);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpFileDelete(nsFileSpec* aTarget, PRInt32 aFlags)
|
||||
{
|
||||
aTarget->Delete(aFlags);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpFileExecute(nsFileSpec* aTarget, nsString* aParams)
|
||||
{
|
||||
aTarget->Execute(*aParams);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpFileMove(nsFileSpec* aSrc, nsFileSpec* aTarget)
|
||||
{
|
||||
aSrc->Move(*aTarget);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpFileRename(nsFileSpec* aSrc, nsFileSpec* aTarget)
|
||||
{
|
||||
aSrc->Rename(*aTarget);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpWinShortcutCreate()
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpMacAliasCreate()
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsInstallFileOpItem::NativeFileOpUnixLinkCreate()
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
111
mozilla/xpinstall/src/nsInstallFileOpItem.h
Normal file
111
mozilla/xpinstall/src/nsInstallFileOpItem.h
Normal file
@@ -0,0 +1,111 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsInstallFileOpItem_h__
|
||||
#define nsInstallFileOpItem_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsSoftwareUpdate.h"
|
||||
#include "nsInstallObject.h"
|
||||
#include "nsInstall.h"
|
||||
|
||||
class nsInstallFileOpItem : public nsInstallObject
|
||||
{
|
||||
public:
|
||||
/* Public Fields */
|
||||
|
||||
/* Public Methods */
|
||||
// used by:
|
||||
// FileOpFileDelete()
|
||||
nsInstallFileOpItem(nsInstall* installObj,
|
||||
PRInt32 aCommand,
|
||||
nsFileSpec& aTarget,
|
||||
PRInt32 aFlags,
|
||||
PRInt32* aReturn);
|
||||
|
||||
// used by:
|
||||
// FileOpDirRemove()
|
||||
// FileOpDirRename()
|
||||
// FileOpFileCopy()
|
||||
// FileOpFileMove()
|
||||
// FileOpFileRename()
|
||||
nsInstallFileOpItem(nsInstall* installObj,
|
||||
PRInt32 aCommand,
|
||||
nsFileSpec& aSrc,
|
||||
nsFileSpec& aTarget,
|
||||
PRInt32* aReturn);
|
||||
|
||||
// used by:
|
||||
// FileOpDirCreate()
|
||||
nsInstallFileOpItem(nsInstall* aInstallObj,
|
||||
PRInt32 aCommand,
|
||||
nsFileSpec& aTarget,
|
||||
PRInt32* aReturn);
|
||||
|
||||
// used by:
|
||||
// FileOpFileExecute()
|
||||
nsInstallFileOpItem(nsInstall* aInstallObj,
|
||||
PRInt32 aCommand,
|
||||
nsFileSpec& aTarget,
|
||||
nsString& aParams,
|
||||
PRInt32* aReturn);
|
||||
|
||||
~nsInstallFileOpItem();
|
||||
|
||||
PRInt32 Prepare(void);
|
||||
PRInt32 Complete();
|
||||
char* toString();
|
||||
void Abort();
|
||||
float GetInstallOrder();
|
||||
|
||||
/* should these be protected? */
|
||||
PRBool CanUninstall();
|
||||
PRBool RegisterPackageNode();
|
||||
|
||||
private:
|
||||
|
||||
/* Private Fields */
|
||||
|
||||
nsInstall* mIObj; // initiating Install object
|
||||
nsFileSpec* mSrc;
|
||||
nsFileSpec* mTarget;
|
||||
nsString* mParams;
|
||||
long mFStat;
|
||||
PRInt32 mFlags;
|
||||
PRInt32 mCommand;
|
||||
|
||||
/* Private Methods */
|
||||
|
||||
PRInt32 NativeFileOpDirCreate(nsFileSpec* aTarget);
|
||||
PRInt32 NativeFileOpDirRemove(nsFileSpec* aTarget, PRInt32 aFlags);
|
||||
PRInt32 NativeFileOpDirRename(nsFileSpec* aSrc, nsFileSpec* aTarget);
|
||||
PRInt32 NativeFileOpFileCopy(nsFileSpec* aSrc, nsFileSpec* aTarget);
|
||||
PRInt32 NativeFileOpFileDelete(nsFileSpec* aTarget, PRInt32 aFlags);
|
||||
PRInt32 NativeFileOpFileExecute(nsFileSpec* aTarget, nsString* aParams);
|
||||
PRInt32 NativeFileOpFileMove(nsFileSpec* aSrc, nsFileSpec* aTarget);
|
||||
PRInt32 NativeFileOpFileRename(nsFileSpec* aSrc, nsFileSpec* aTarget);
|
||||
PRInt32 NativeFileOpWinShortcutCreate();
|
||||
PRInt32 NativeFileOpMacAliasCreate();
|
||||
PRInt32 NativeFileOpUnixLinkCreate();
|
||||
|
||||
};
|
||||
|
||||
#endif /* nsInstallFileOpItem_h__ */
|
||||
|
||||
336
mozilla/xpinstall/src/nsInstallFolder.cpp
Normal file
336
mozilla/xpinstall/src/nsInstallFolder.cpp
Normal file
@@ -0,0 +1,336 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nsInstall.h"
|
||||
#include "nsInstallFolder.h"
|
||||
|
||||
#include "nscore.h"
|
||||
#include "prtypes.h"
|
||||
#include "nsRepository.h"
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsSpecialSystemDirectory.h"
|
||||
|
||||
#include "nsFileLocations.h"
|
||||
#include "nsIFileLocator.h"
|
||||
|
||||
struct DirectoryTable
|
||||
{
|
||||
char * directoryName; /* The formal directory name */
|
||||
PRInt32 folderEnum; /* Directory ID */
|
||||
};
|
||||
|
||||
struct DirectoryTable DirectoryTable[] =
|
||||
{
|
||||
{"Plugins", 100 },
|
||||
{"Program", 101 },
|
||||
{"Communicator", 102 },
|
||||
{"User Pick", 103 },
|
||||
{"Temporary", 104 },
|
||||
{"Installed", 105 },
|
||||
{"Current User", 106 },
|
||||
{"Preferences", 107 },
|
||||
{"OS Drive", 108 },
|
||||
{"file:///", 109 },
|
||||
|
||||
{"Components", 110 },
|
||||
{"Chrome", 111 },
|
||||
|
||||
{"Win System", 200 },
|
||||
{"Windows", 201 },
|
||||
|
||||
{"Mac System", 300 },
|
||||
{"Mac Desktop", 301 },
|
||||
{"Mac Trash", 302 },
|
||||
{"Mac Startup", 303 },
|
||||
{"Mac Shutdown", 304 },
|
||||
{"Mac Apple Menu", 305 },
|
||||
{"Mac Control Panel", 306 },
|
||||
{"Mac Extension", 307 },
|
||||
{"Mac Fonts", 308 },
|
||||
{"Mac Preferences", 309 },
|
||||
{"Mac Documents", 310 },
|
||||
|
||||
{"Unix Local", 400 },
|
||||
{"Unix Lib", 401 },
|
||||
|
||||
{"", -1 }
|
||||
};
|
||||
|
||||
|
||||
|
||||
nsInstallFolder::nsInstallFolder(const nsString& aFolderID)
|
||||
{
|
||||
mFileSpec = nsnull;
|
||||
SetDirectoryPath( aFolderID, "");
|
||||
}
|
||||
|
||||
nsInstallFolder::nsInstallFolder(const nsString& aFolderID, const nsString& aRelativePath)
|
||||
{
|
||||
mFileSpec = nsnull;
|
||||
|
||||
/*
|
||||
aFolderID can be either a Folder enum in which case we merely pass it to SetDirectoryPath, or
|
||||
it can be a Directory. If it is the later, it must already exist and of course be a directory
|
||||
not a file.
|
||||
*/
|
||||
|
||||
nsFileSpec dirCheck(aFolderID);
|
||||
if ( (dirCheck.Error() == NS_OK) && (dirCheck.IsDirectory()) && (dirCheck.Exists()))
|
||||
{
|
||||
nsString tempString = aFolderID;
|
||||
tempString += aRelativePath;
|
||||
mFileSpec = new nsFileSpec(tempString);
|
||||
|
||||
// make sure that the directory is created.
|
||||
nsFileSpec(mFileSpec->GetCString(), PR_TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetDirectoryPath( aFolderID, aRelativePath);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
nsInstallFolder::~nsInstallFolder()
|
||||
{
|
||||
if (mFileSpec != nsnull)
|
||||
delete mFileSpec;
|
||||
}
|
||||
|
||||
void
|
||||
nsInstallFolder::GetDirectoryPath(nsString& aDirectoryPath)
|
||||
{
|
||||
aDirectoryPath = "";
|
||||
|
||||
if (mFileSpec != nsnull)
|
||||
{
|
||||
// We want the a NATIVE path.
|
||||
aDirectoryPath.SetString(mFileSpec->GetCString());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsInstallFolder::SetDirectoryPath(const nsString& aFolderID, const nsString& aRelativePath)
|
||||
{
|
||||
if ( aFolderID.EqualsIgnoreCase("User Pick") )
|
||||
{
|
||||
PickDefaultDirectory();
|
||||
return;
|
||||
}
|
||||
else if ( aFolderID.EqualsIgnoreCase("Installed") )
|
||||
{
|
||||
mFileSpec = new nsFileSpec(aRelativePath, PR_TRUE); // creates the directories to the relative path.
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
PRInt32 folderDirSpecID = MapNameToEnum(aFolderID);
|
||||
|
||||
switch (folderDirSpecID)
|
||||
{
|
||||
case 100: /////////////////////////////////////////////////////////// Plugins
|
||||
SetAppShellDirectory(nsSpecialFileSpec::App_PluginsDirectory );
|
||||
break;
|
||||
|
||||
case 101: /////////////////////////////////////////////////////////// Program
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::OS_CurrentProcessDirectory ));
|
||||
break;
|
||||
|
||||
case 102: /////////////////////////////////////////////////////////// Communicator
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::OS_CurrentProcessDirectory ));
|
||||
break;
|
||||
|
||||
case 103: /////////////////////////////////////////////////////////// User Pick
|
||||
// we should never be here.
|
||||
mFileSpec = nsnull;
|
||||
break;
|
||||
|
||||
case 104: /////////////////////////////////////////////////////////// Temporary
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::OS_TemporaryDirectory ));
|
||||
break;
|
||||
|
||||
case 105: /////////////////////////////////////////////////////////// Installed
|
||||
// we should never be here.
|
||||
mFileSpec = nsnull;
|
||||
break;
|
||||
|
||||
case 106: /////////////////////////////////////////////////////////// Current User
|
||||
SetAppShellDirectory(nsSpecialFileSpec::App_UserProfileDirectory50 );
|
||||
break;
|
||||
|
||||
case 107: /////////////////////////////////////////////////////////// Preferences
|
||||
SetAppShellDirectory(nsSpecialFileSpec::App_PrefsDirectory50 );
|
||||
break;
|
||||
|
||||
case 108: /////////////////////////////////////////////////////////// OS Drive
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::OS_DriveDirectory ));
|
||||
break;
|
||||
|
||||
case 109: /////////////////////////////////////////////////////////// File URL
|
||||
{
|
||||
nsString tempFileURLString = aFolderID;
|
||||
tempFileURLString += aRelativePath;
|
||||
mFileSpec = new nsFileSpec( nsFileURL(tempFileURLString) );
|
||||
}
|
||||
break;
|
||||
|
||||
case 110: /////////////////////////////////////////////////////////// Components
|
||||
SetAppShellDirectory(nsSpecialFileSpec::App_ComponentsDirectory );
|
||||
break;
|
||||
|
||||
case 111: /////////////////////////////////////////////////////////// Chrome
|
||||
SetAppShellDirectory(nsSpecialFileSpec::App_ChromeDirectory );
|
||||
break;
|
||||
|
||||
case 200: /////////////////////////////////////////////////////////// Win System
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Win_SystemDirectory ));
|
||||
break;
|
||||
|
||||
case 201: /////////////////////////////////////////////////////////// Windows
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Win_WindowsDirectory ));
|
||||
break;
|
||||
|
||||
case 300: /////////////////////////////////////////////////////////// Mac System
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_SystemDirectory ));
|
||||
break;
|
||||
|
||||
case 301: /////////////////////////////////////////////////////////// Mac Desktop
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_DesktopDirectory ));
|
||||
break;
|
||||
|
||||
case 302: /////////////////////////////////////////////////////////// Mac Trash
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_TrashDirectory ));
|
||||
break;
|
||||
|
||||
case 303: /////////////////////////////////////////////////////////// Mac Startup
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_StartupDirectory ));
|
||||
break;
|
||||
|
||||
case 304: /////////////////////////////////////////////////////////// Mac Shutdown
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_StartupDirectory ));
|
||||
break;
|
||||
|
||||
case 305: /////////////////////////////////////////////////////////// Mac Apple Menu
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_AppleMenuDirectory ));
|
||||
break;
|
||||
|
||||
case 306: /////////////////////////////////////////////////////////// Mac Control Panel
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_ControlPanelDirectory ));
|
||||
break;
|
||||
|
||||
case 307: /////////////////////////////////////////////////////////// Mac Extension
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_ExtensionDirectory ));
|
||||
break;
|
||||
|
||||
case 308: /////////////////////////////////////////////////////////// Mac Fonts
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_FontsDirectory ));
|
||||
break;
|
||||
|
||||
case 309: /////////////////////////////////////////////////////////// Mac Preferences
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_PreferencesDirectory ));
|
||||
break;
|
||||
|
||||
case 310: /////////////////////////////////////////////////////////// Mac Documents
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Mac_DocumentsDirectory ));
|
||||
break;
|
||||
|
||||
case 400: /////////////////////////////////////////////////////////// Unix Local
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Unix_LocalDirectory ));
|
||||
break;
|
||||
|
||||
case 401: /////////////////////////////////////////////////////////// Unix Lib
|
||||
mFileSpec = new nsFileSpec( nsSpecialSystemDirectory( nsSpecialSystemDirectory::Unix_LibDirectory ));
|
||||
break;
|
||||
|
||||
|
||||
case -1:
|
||||
default:
|
||||
mFileSpec = nsnull;
|
||||
return;
|
||||
}
|
||||
#ifndef XP_MAC
|
||||
if (aRelativePath.Length() > 0)
|
||||
{
|
||||
nsString tempPath(aRelativePath);
|
||||
|
||||
if (aRelativePath.Last() != '/' || aRelativePath.Last() != '\\')
|
||||
tempPath += '/';
|
||||
|
||||
*mFileSpec += tempPath;
|
||||
}
|
||||
#endif
|
||||
// make sure that the directory is created.
|
||||
nsFileSpec(mFileSpec->GetCString(), PR_TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void nsInstallFolder::PickDefaultDirectory()
|
||||
{
|
||||
//FIX: Need to put up a dialog here and set mFileSpec
|
||||
return;
|
||||
}
|
||||
|
||||
/* MapNameToEnum
|
||||
* maps name from the directory table to its enum */
|
||||
PRInt32
|
||||
nsInstallFolder::MapNameToEnum(const nsString& name)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if ( name == "null")
|
||||
return -1;
|
||||
|
||||
while ( DirectoryTable[i].directoryName[0] != 0 )
|
||||
{
|
||||
if ( name.EqualsIgnoreCase(DirectoryTable[i].directoryName) )
|
||||
return DirectoryTable[i].folderEnum;
|
||||
i++;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
static NS_DEFINE_IID(kFileLocatorIID, NS_IFILELOCATOR_IID);
|
||||
static NS_DEFINE_IID(kFileLocatorCID, NS_FILELOCATOR_CID);
|
||||
|
||||
void
|
||||
nsInstallFolder::SetAppShellDirectory(PRUint32 value)
|
||||
{
|
||||
nsIFileLocator * appShellLocator;
|
||||
|
||||
nsresult rv = nsComponentManager::CreateInstance(kFileLocatorCID,
|
||||
nsnull,
|
||||
kFileLocatorIID,
|
||||
(void**) &appShellLocator);
|
||||
|
||||
if ( NS_SUCCEEDED(rv) )
|
||||
{
|
||||
mFileSpec = new nsFileSpec();
|
||||
appShellLocator->GetFileLocation(value, mFileSpec);
|
||||
NS_RELEASE(appShellLocator);
|
||||
}
|
||||
}
|
||||
58
mozilla/xpinstall/src/nsInstallFolder.h
Normal file
58
mozilla/xpinstall/src/nsInstallFolder.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __NS_INSTALLFOLDER_H__
|
||||
#define __NS_INSTALLFOLDER_H__
|
||||
|
||||
#include "nscore.h"
|
||||
#include "prtypes.h"
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsSpecialSystemDirectory.h"
|
||||
|
||||
class nsInstallFolder
|
||||
{
|
||||
public:
|
||||
|
||||
nsInstallFolder(const nsString& aFolderID);
|
||||
nsInstallFolder(const nsString& aFolderID, const nsString& aRelativePath);
|
||||
virtual ~nsInstallFolder();
|
||||
|
||||
void GetDirectoryPath(nsString& aDirectoryPath);
|
||||
|
||||
private:
|
||||
|
||||
nsFileSpec* mFileSpec;
|
||||
|
||||
void SetDirectoryPath(const nsString& aFolderID, const nsString& aRelativePath);
|
||||
void PickDefaultDirectory();
|
||||
PRInt32 MapNameToEnum(const nsString& name);
|
||||
void SetAppShellDirectory(PRUint32 value);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
52
mozilla/xpinstall/src/nsInstallObject.h
Normal file
52
mozilla/xpinstall/src/nsInstallObject.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsInstallObject_h__
|
||||
#define nsInstallObject_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
class nsInstall;
|
||||
|
||||
class nsInstallObject
|
||||
{
|
||||
public:
|
||||
/* Public Methods */
|
||||
nsInstallObject(nsInstall* inInstall) {mInstall = inInstall; }
|
||||
|
||||
/* Override with your set-up action */
|
||||
virtual PRInt32 Prepare() = 0;
|
||||
|
||||
/* Override with your Completion action */
|
||||
virtual PRInt32 Complete() = 0;
|
||||
|
||||
/* Override with an explanatory string for the progress dialog */
|
||||
virtual char* toString() = 0;
|
||||
|
||||
/* Override with your clean-up function */
|
||||
virtual void Abort() = 0;
|
||||
|
||||
/* should these be protected? */
|
||||
virtual PRBool CanUninstall() = 0;
|
||||
virtual PRBool RegisterPackageNode() = 0;
|
||||
|
||||
protected:
|
||||
nsInstall* mInstall;
|
||||
};
|
||||
|
||||
#endif /* nsInstallObject_h__ */
|
||||
986
mozilla/xpinstall/src/nsInstallPatch.cpp
Normal file
986
mozilla/xpinstall/src/nsInstallPatch.cpp
Normal file
@@ -0,0 +1,986 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "nsFileSpec.h"
|
||||
#include "prmem.h"
|
||||
#include "nsInstall.h"
|
||||
#include "nsInstallPatch.h"
|
||||
#include "nsInstallResources.h"
|
||||
#include "nsIDOMInstallVersion.h"
|
||||
#include "zlib.h"
|
||||
|
||||
#include "gdiff.h"
|
||||
|
||||
#include "VerReg.h"
|
||||
#include "ScheduledTasks.h"
|
||||
#include "plstr.h"
|
||||
#include "xp_file.h" /* for XP_PlatformFileToURL */
|
||||
|
||||
|
||||
#ifdef XP_MAC
|
||||
#include "PatchableAppleSingle.h"
|
||||
#endif
|
||||
|
||||
#define BUFSIZE 32768
|
||||
#define OPSIZE 1
|
||||
#define MAXCMDSIZE 12
|
||||
#define SRCFILE 0
|
||||
#define OUTFILE 1
|
||||
|
||||
#define getshort(s) (uint16)( ((uchar)*(s) << 8) + ((uchar)*((s)+1)) )
|
||||
|
||||
#define getlong(s) \
|
||||
(uint32)( ((uchar)*(s) << 24) + ((uchar)*((s)+1) << 16 ) + \
|
||||
((uchar)*((s)+2) << 8) + ((uchar)*((s)+3)) )
|
||||
|
||||
|
||||
|
||||
static int32 gdiff_parseHeader( pDIFFDATA dd );
|
||||
static int32 gdiff_validateFile( pDIFFDATA dd, int file );
|
||||
static int32 gdiff_valCRC32( pDIFFDATA dd, PRFileDesc* fh, uint32 chksum );
|
||||
static int32 gdiff_ApplyPatch( pDIFFDATA dd );
|
||||
static int32 gdiff_getdiff( pDIFFDATA dd, uchar *buffer, uint32 length );
|
||||
static int32 gdiff_add( pDIFFDATA dd, uint32 count );
|
||||
static int32 gdiff_copy( pDIFFDATA dd, uint32 position, uint32 count );
|
||||
static int32 gdiff_validateFile( pDIFFDATA dd, int file );
|
||||
|
||||
|
||||
nsInstallPatch::nsInstallPatch( nsInstall* inInstall,
|
||||
const nsString& inVRName,
|
||||
const nsString& inVInfo,
|
||||
const nsString& inJarLocation,
|
||||
PRInt32 *error)
|
||||
|
||||
: nsInstallObject(inInstall)
|
||||
{
|
||||
char tempTargetFile[MAXREGPATHLEN];
|
||||
char* tempVersionString = inVRName.ToNewCString();
|
||||
|
||||
PRInt32 err = VR_GetPath(tempVersionString, MAXREGPATHLEN, tempTargetFile );
|
||||
|
||||
delete [] tempVersionString;
|
||||
|
||||
if (err != REGERR_OK)
|
||||
{
|
||||
*error = nsInstall::NO_SUCH_COMPONENT;
|
||||
return;
|
||||
}
|
||||
nsString folderSpec(tempTargetFile);
|
||||
|
||||
mPatchFile = nsnull;
|
||||
mTargetFile = nsnull;
|
||||
mPatchedFile = nsnull;
|
||||
mRegistryName = new nsString(inVRName);
|
||||
mJarLocation = new nsString(inJarLocation);
|
||||
mTargetFile = new nsFileSpec(folderSpec);
|
||||
|
||||
mVersionInfo = new nsInstallVersion();
|
||||
|
||||
mVersionInfo->Init(inVInfo);
|
||||
|
||||
}
|
||||
|
||||
|
||||
nsInstallPatch::nsInstallPatch( nsInstall* inInstall,
|
||||
const nsString& inVRName,
|
||||
const nsString& inVInfo,
|
||||
const nsString& inJarLocation,
|
||||
const nsString& folderSpec,
|
||||
const nsString& inPartialPath,
|
||||
PRInt32 *error)
|
||||
|
||||
: nsInstallObject(inInstall)
|
||||
{
|
||||
if ((inInstall == nsnull) || (inVRName == "null") || (inJarLocation == "null"))
|
||||
{
|
||||
*error = nsInstall::INVALID_ARGUMENTS;
|
||||
return;
|
||||
}
|
||||
|
||||
mPatchFile = nsnull;
|
||||
mTargetFile = nsnull;
|
||||
mPatchedFile = nsnull;
|
||||
mRegistryName = new nsString(inVRName);
|
||||
mJarLocation = new nsString(inJarLocation);
|
||||
mVersionInfo = new nsInstallVersion();
|
||||
|
||||
mVersionInfo->Init(inVInfo);
|
||||
|
||||
mTargetFile = new nsFileSpec(folderSpec);
|
||||
if(inPartialPath != "null")
|
||||
*mTargetFile += inPartialPath;
|
||||
}
|
||||
|
||||
nsInstallPatch::~nsInstallPatch()
|
||||
{
|
||||
if (mVersionInfo)
|
||||
delete mVersionInfo;
|
||||
|
||||
if (mTargetFile)
|
||||
delete mTargetFile;
|
||||
|
||||
if (mJarLocation)
|
||||
delete mJarLocation;
|
||||
|
||||
if (mRegistryName)
|
||||
delete mRegistryName;
|
||||
|
||||
if (mPatchedFile)
|
||||
delete mPatchedFile;
|
||||
|
||||
if (mPatchFile)
|
||||
delete mPatchFile;
|
||||
|
||||
}
|
||||
|
||||
|
||||
PRInt32 nsInstallPatch::Prepare()
|
||||
{
|
||||
PRInt32 err;
|
||||
PRBool deleteOldSrc;
|
||||
|
||||
if (mTargetFile == nsnull)
|
||||
return nsInstall::INVALID_ARGUMENTS;
|
||||
|
||||
if (mTargetFile->Exists())
|
||||
{
|
||||
if (mTargetFile->IsFile())
|
||||
{
|
||||
err = nsInstall::SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
err = nsInstall::FILE_IS_DIRECTORY;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
err = nsInstall::FILE_DOES_NOT_EXIST;
|
||||
}
|
||||
|
||||
if (err != nsInstall::SUCCESS)
|
||||
{
|
||||
return err;
|
||||
}
|
||||
|
||||
err = mInstall->ExtractFileFromJar(*mJarLocation, mTargetFile, &mPatchFile);
|
||||
|
||||
|
||||
nsFileSpec *fileName = nsnull;
|
||||
nsVoidKey ikey( HashFilePath( nsFilePath(*mTargetFile) ) );
|
||||
|
||||
mInstall->GetPatch(&ikey, fileName);
|
||||
|
||||
if (fileName != nsnull)
|
||||
{
|
||||
deleteOldSrc = PR_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
fileName = mTargetFile;
|
||||
deleteOldSrc = PR_FALSE;
|
||||
}
|
||||
|
||||
err = NativePatch( *fileName, // the file to patch
|
||||
*mPatchFile, // the patch that was extracted from the jarfile
|
||||
&mPatchedFile); // the new patched file
|
||||
|
||||
if (err != nsInstall::SUCCESS)
|
||||
{
|
||||
return err;
|
||||
}
|
||||
|
||||
PR_ASSERT(mPatchedFile != nsnull);
|
||||
mInstall->AddPatch(&ikey, mPatchedFile );
|
||||
|
||||
if ( deleteOldSrc )
|
||||
{
|
||||
DeleteFileNowOrSchedule(*fileName );
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
PRInt32 nsInstallPatch::Complete()
|
||||
{
|
||||
if ((mInstall == nsnull) || (mVersionInfo == nsnull) || (mPatchedFile == nsnull) || (mTargetFile == nsnull))
|
||||
{
|
||||
return nsInstall::INVALID_ARGUMENTS;
|
||||
}
|
||||
|
||||
PRInt32 err = nsInstall::SUCCESS;
|
||||
|
||||
nsFileSpec *fileName = nsnull;
|
||||
nsVoidKey ikey( HashFilePath( nsFilePath(*mTargetFile) ) );
|
||||
|
||||
mInstall->GetPatch(&ikey, fileName);
|
||||
|
||||
if (fileName != nsnull && (*fileName == *mPatchedFile) )
|
||||
{
|
||||
// the patch has not been superceded--do final replacement
|
||||
err = ReplaceFileNowOrSchedule( *mTargetFile, *mPatchedFile);
|
||||
if ( 0 == err || nsInstall::REBOOT_NEEDED == err )
|
||||
{
|
||||
nsString tempVersionString;
|
||||
mVersionInfo->ToString(tempVersionString);
|
||||
|
||||
char* tempRegName = mRegistryName->ToNewCString();
|
||||
char* tempVersion = tempVersionString.ToNewCString();
|
||||
|
||||
err = VR_Install( tempRegName,
|
||||
(char*) (const char *) nsNSPRPath(*mTargetFile),
|
||||
tempVersion,
|
||||
PR_FALSE );
|
||||
|
||||
delete [] tempRegName;
|
||||
delete [] tempVersion;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
err = nsInstall::UNEXPECTED_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// nothing -- old intermediate patched file was
|
||||
// deleted by a superceding patch
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void nsInstallPatch::Abort()
|
||||
{
|
||||
nsFileSpec *fileName = nsnull;
|
||||
nsVoidKey ikey( HashFilePath( nsFilePath(*mTargetFile) ) );
|
||||
|
||||
mInstall->GetPatch(&ikey, fileName);
|
||||
|
||||
if (fileName != nsnull && (*fileName == *mPatchedFile) )
|
||||
{
|
||||
DeleteFileNowOrSchedule( *mPatchedFile );
|
||||
}
|
||||
}
|
||||
|
||||
char* nsInstallPatch::toString()
|
||||
{
|
||||
char* buffer = new char[1024];
|
||||
|
||||
// FIX! sprintf( buffer, nsInstallResources::GetPatchFileString(), mPatchedFile->GetCString());
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
PRBool
|
||||
nsInstallPatch::CanUninstall()
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsInstallPatch::RegisterPackageNode()
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
|
||||
PRInt32
|
||||
nsInstallPatch::NativePatch(const nsFileSpec &sourceFile, const nsFileSpec &patchFile, nsFileSpec **newFile)
|
||||
{
|
||||
|
||||
DIFFDATA *dd;
|
||||
PRInt32 status = GDIFF_ERR_MEM;
|
||||
char *tmpurl = NULL;
|
||||
char *realfile = PL_strdup(nsNSPRPath(sourceFile)); // needs to be sourceFile!!!
|
||||
nsFileSpec outFileSpec = sourceFile;
|
||||
|
||||
dd = (DIFFDATA *)PR_Calloc( 1, sizeof(DIFFDATA));
|
||||
if (dd != NULL)
|
||||
{
|
||||
dd->databuf = (uchar*)PR_Malloc(BUFSIZE);
|
||||
if (dd->databuf == NULL)
|
||||
{
|
||||
status = GDIFF_ERR_MEM;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
||||
dd->bufsize = BUFSIZE;
|
||||
|
||||
// validate patch header & check for special instructions
|
||||
dd->fDiff = PR_Open (nsNSPRPath(patchFile), PR_RDONLY, 0666);
|
||||
|
||||
|
||||
if (dd->fDiff != NULL)
|
||||
{
|
||||
status = gdiff_parseHeader(dd);
|
||||
} else {
|
||||
status = GDIFF_ERR_ACCESS;
|
||||
}
|
||||
|
||||
#ifdef dono
|
||||
#ifdef WIN32
|
||||
|
||||
/* unbind Win32 images */
|
||||
if ( dd->bWin32BoundImage && status == GDIFF_OK ) {
|
||||
tmpurl = WH_TempName( xpURL, NULL );
|
||||
if ( tmpurl != NULL ) {
|
||||
if (su_unbind( srcfile, srctype, tmpurl, xpURL ))
|
||||
{
|
||||
PL_strfree(realfile);
|
||||
realfile = tmpurl;
|
||||
realtype = xpURL;
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
status = GDIFF_ERR_MEM;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef XP_MAC
|
||||
|
||||
if ( dd->bMacAppleSingle && status == GDIFF_OK )
|
||||
{
|
||||
// create a tmp file, so that we can AppleSingle the src file
|
||||
nsSpecialSystemDirectory tempMacFile(nsSpecialSystemDirectory::OS_TemporaryDirectory);
|
||||
nsString srcName = sourceFile.GetLeafName();
|
||||
tempMacFile.SetLeafName(srcName);
|
||||
tempMacFile.MakeUnique();
|
||||
|
||||
// Encode!
|
||||
// Encode src file, and put into temp file
|
||||
FSSpec sourceSpec = sourceFile.GetFSSpec();
|
||||
FSSpec tempSpec = tempMacFile.GetFSSpec();
|
||||
|
||||
status = PAS_EncodeFile(&sourceSpec, &tempSpec);
|
||||
|
||||
if (status == noErr)
|
||||
{
|
||||
// set
|
||||
PL_strfree(realfile);
|
||||
realfile = PL_strdup(nsNSPRPath(tempMacFile));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
if (status != NS_OK)
|
||||
goto cleanup;
|
||||
|
||||
// make a unique file at the same location of our source file (FILENAME-ptch.EXT)
|
||||
nsString patchFileName = "-ptch";
|
||||
nsString newFileName = sourceFile.GetLeafName();
|
||||
|
||||
PRInt32 index;
|
||||
if ((index = newFileName.RFind(".")) > 0)
|
||||
{
|
||||
nsString extention;
|
||||
nsString fileName;
|
||||
newFileName.Right(extention, (newFileName.Length() - index) );
|
||||
newFileName.Left(fileName, (newFileName.Length() - (newFileName.Length() - index)));
|
||||
newFileName = fileName + patchFileName + extention;
|
||||
|
||||
} else {
|
||||
newFileName += patchFileName;
|
||||
}
|
||||
|
||||
|
||||
outFileSpec.SetLeafName(newFileName); //????
|
||||
outFileSpec.MakeUnique();
|
||||
|
||||
char *outFile = PL_strdup(nsNSPRPath(outFileSpec));
|
||||
|
||||
// apply patch to the source file
|
||||
dd->fSrc = PR_Open ( realfile, PR_RDONLY, 0666);
|
||||
dd->fOut = PR_Open ( outFile, PR_RDWR|PR_CREATE_FILE|PR_TRUNCATE, 0666);
|
||||
|
||||
if (dd->fSrc != NULL && dd->fOut != NULL)
|
||||
{
|
||||
status = gdiff_validateFile (dd, SRCFILE);
|
||||
|
||||
// specify why diff failed
|
||||
if (status == GDIFF_ERR_CHECKSUM)
|
||||
status = GDIFF_ERR_CHECKSUM_TARGET;
|
||||
|
||||
if (status == GDIFF_OK)
|
||||
status = gdiff_ApplyPatch(dd);
|
||||
|
||||
if (status == GDIFF_OK)
|
||||
status = gdiff_validateFile (dd, OUTFILE);
|
||||
|
||||
if (status == GDIFF_ERR_CHECKSUM)
|
||||
status = GDIFF_ERR_CHECKSUM_RESULT;
|
||||
|
||||
if (status == GDIFF_OK)
|
||||
{
|
||||
*newFile = &outFileSpec;
|
||||
if ( outFile != nsnull)
|
||||
PL_strfree( outFile );
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
status = GDIFF_ERR_ACCESS;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef XP_MAC
|
||||
if ( dd->bMacAppleSingle && status == GDIFF_OK )
|
||||
{
|
||||
// create another file, so that we can decode somewhere
|
||||
nsFileSpec anotherName = outFileSpec;
|
||||
anotherName.MakeUnique();
|
||||
|
||||
// Close the out file so that we can read it
|
||||
PR_Close( dd->fOut );
|
||||
dd->fOut = NULL;
|
||||
|
||||
|
||||
FSSpec outSpec = outFileSpec.GetFSSpec();
|
||||
FSSpec anotherSpec = anotherName.GetFSSpec();
|
||||
|
||||
|
||||
status = PAS_DecodeFile(&outSpec, &anotherSpec);
|
||||
if (status != noErr)
|
||||
{
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
nsFileSpec parent;
|
||||
|
||||
outFileSpec.GetParent(parent);
|
||||
|
||||
outFileSpec.Delete(PR_FALSE);
|
||||
anotherName.Copy(parent);
|
||||
|
||||
*newFile = &anotherName;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
cleanup:
|
||||
if ( dd != NULL )
|
||||
{
|
||||
if ( dd->fSrc != nsnull )
|
||||
PR_Close( dd->fSrc );
|
||||
|
||||
|
||||
if ( dd->fDiff != nsnull )
|
||||
PR_Close( dd->fDiff );
|
||||
|
||||
if ( dd->fOut != nsnull )
|
||||
{
|
||||
PR_Close( dd->fOut );
|
||||
}
|
||||
|
||||
if ( status != GDIFF_OK )
|
||||
//XP_FileRemove( outfile, outtype );
|
||||
newFile = NULL;
|
||||
|
||||
PR_FREEIF( dd->databuf );
|
||||
PR_FREEIF( dd->oldChecksum );
|
||||
PR_FREEIF( dd->newChecksum );
|
||||
PR_DELETE(dd);
|
||||
}
|
||||
|
||||
if ( tmpurl != NULL ) {
|
||||
//XP_FileRemove( tmpurl, xpURL );
|
||||
tmpurl = NULL;
|
||||
PR_DELETE( tmpurl );
|
||||
}
|
||||
|
||||
/* lets map any GDIFF error to nice SU errors */
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case GDIFF_OK:
|
||||
break;
|
||||
case GDIFF_ERR_HEADER:
|
||||
case GDIFF_ERR_BADDIFF:
|
||||
case GDIFF_ERR_OPCODE:
|
||||
case GDIFF_ERR_CHKSUMTYPE:
|
||||
status = nsInstall::PATCH_BAD_DIFF;
|
||||
break;
|
||||
case GDIFF_ERR_CHECKSUM_TARGET:
|
||||
status = nsInstall::PATCH_BAD_CHECKSUM_TARGET;
|
||||
break;
|
||||
case GDIFF_ERR_CHECKSUM_RESULT:
|
||||
status = nsInstall::PATCH_BAD_CHECKSUM_RESULT;
|
||||
break;
|
||||
case GDIFF_ERR_OLDFILE:
|
||||
case GDIFF_ERR_ACCESS:
|
||||
case GDIFF_ERR_MEM:
|
||||
case GDIFF_ERR_UNKNOWN:
|
||||
default:
|
||||
status = nsInstall::UNEXPECTED_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
return status;
|
||||
|
||||
// return -1; //old return value
|
||||
}
|
||||
|
||||
|
||||
void*
|
||||
nsInstallPatch::HashFilePath(const nsFilePath& aPath)
|
||||
{
|
||||
PRUint32 rv = 0;
|
||||
|
||||
char* cPath = PL_strdup(nsNSPRPath(aPath));
|
||||
|
||||
if(cPath != nsnull)
|
||||
{
|
||||
char ch;
|
||||
char* filePath = PL_strdup(cPath);
|
||||
PRUint32 cnt=0;
|
||||
|
||||
while ((ch = *filePath++) != 0)
|
||||
{
|
||||
// FYI: rv = rv*37 + ch
|
||||
rv = ((rv << 5) + (rv << 2) + rv) + ch;
|
||||
cnt++;
|
||||
}
|
||||
|
||||
for (PRUint32 i=0; i<=cnt; i++)
|
||||
*filePath--;
|
||||
PL_strfree(filePath);
|
||||
}
|
||||
|
||||
PL_strfree(cPath);
|
||||
|
||||
return (void*)rv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------
|
||||
* gdiff_parseHeader()
|
||||
*
|
||||
* reads and validates the GDIFF header info
|
||||
*---------------------------------------------------------
|
||||
*/
|
||||
static
|
||||
int32 gdiff_parseHeader( pDIFFDATA dd )
|
||||
{
|
||||
int32 err = GDIFF_OK;
|
||||
uint8 cslen;
|
||||
uint8 oldcslen;
|
||||
uint8 newcslen;
|
||||
uint32 nRead;
|
||||
uchar header[GDIFF_HEADERSIZE];
|
||||
|
||||
/* Read the fixed-size part of the header */
|
||||
|
||||
nRead = PR_Read (dd->fDiff, header, GDIFF_HEADERSIZE);
|
||||
if ( nRead != GDIFF_HEADERSIZE ||
|
||||
memcmp( header, GDIFF_MAGIC, GDIFF_MAGIC_LEN ) != 0 ||
|
||||
header[GDIFF_VER_POS] != GDIFF_VER )
|
||||
{
|
||||
err = GDIFF_ERR_HEADER;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* get the checksum information */
|
||||
|
||||
dd->checksumType = header[GDIFF_CS_POS];
|
||||
cslen = header[GDIFF_CSLEN_POS];
|
||||
|
||||
if ( cslen > 0 )
|
||||
{
|
||||
oldcslen = cslen / 2;
|
||||
newcslen = cslen - oldcslen;
|
||||
PR_ASSERT( newcslen == oldcslen );
|
||||
|
||||
dd->checksumLength = oldcslen;
|
||||
dd->oldChecksum = (uchar*)PR_MALLOC(oldcslen);
|
||||
dd->newChecksum = (uchar*)PR_MALLOC(newcslen);
|
||||
|
||||
if ( dd->oldChecksum != NULL && dd->newChecksum != NULL )
|
||||
{
|
||||
nRead = PR_Read (dd->fDiff, dd->oldChecksum, oldcslen);
|
||||
if ( nRead == oldcslen )
|
||||
{
|
||||
nRead = PR_Read (dd->fDiff, dd->newChecksum, newcslen);
|
||||
if ( nRead != newcslen ) {
|
||||
err = GDIFF_ERR_HEADER;
|
||||
}
|
||||
}
|
||||
else {
|
||||
err = GDIFF_ERR_HEADER;
|
||||
}
|
||||
}
|
||||
else {
|
||||
err = GDIFF_ERR_MEM;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* get application data, if any */
|
||||
|
||||
if ( err == GDIFF_OK )
|
||||
{
|
||||
uint32 appdataSize;
|
||||
uchar *buf;
|
||||
uchar lenbuf[GDIFF_APPDATALEN];
|
||||
|
||||
nRead = PR_Read(dd->fDiff, lenbuf, GDIFF_APPDATALEN);
|
||||
if ( nRead == GDIFF_APPDATALEN )
|
||||
{
|
||||
appdataSize = getlong(lenbuf);
|
||||
|
||||
if ( appdataSize > 0 )
|
||||
{
|
||||
buf = (uchar *)PR_MALLOC( appdataSize );
|
||||
|
||||
if ( buf != NULL )
|
||||
{
|
||||
nRead = PR_Read (dd->fDiff, buf, appdataSize);
|
||||
if ( nRead == appdataSize )
|
||||
{
|
||||
if ( 0 == memcmp( buf, APPFLAG_W32BOUND, appdataSize ) )
|
||||
dd->bWin32BoundImage = TRUE;
|
||||
|
||||
if ( 0 == memcmp( buf, APPFLAG_APPLESINGLE, appdataSize ) )
|
||||
dd->bMacAppleSingle = TRUE;
|
||||
}
|
||||
else {
|
||||
err = GDIFF_ERR_HEADER;
|
||||
}
|
||||
|
||||
PR_DELETE( buf );
|
||||
}
|
||||
else {
|
||||
err = GDIFF_ERR_MEM;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
err = GDIFF_ERR_HEADER;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (err);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------
|
||||
* gdiff_validateFile()
|
||||
*
|
||||
* computes the checksum of the file and compares it to
|
||||
* the value stored in the GDIFF header
|
||||
*---------------------------------------------------------
|
||||
*/
|
||||
static
|
||||
int32 gdiff_validateFile( pDIFFDATA dd, int file )
|
||||
{
|
||||
int32 result;
|
||||
PRFileDesc* fh;
|
||||
uchar* chksum;
|
||||
|
||||
/* which file are we dealing with? */
|
||||
if ( file == SRCFILE ) {
|
||||
fh = dd->fSrc;
|
||||
chksum = dd->oldChecksum;
|
||||
}
|
||||
else { /* OUTFILE */
|
||||
fh = dd->fOut;
|
||||
chksum = dd->newChecksum;
|
||||
}
|
||||
|
||||
/* make sure file's at beginning */
|
||||
PR_Seek( fh, 0, PR_SEEK_SET );
|
||||
|
||||
/* calculate appropriate checksum */
|
||||
switch (dd->checksumType)
|
||||
{
|
||||
case GDIFF_CS_NONE:
|
||||
result = GDIFF_OK;
|
||||
break;
|
||||
|
||||
|
||||
case GDIFF_CS_CRC32:
|
||||
if ( dd->checksumLength == CRC32_LEN )
|
||||
result = gdiff_valCRC32( dd, fh, getlong(chksum) );
|
||||
else
|
||||
result = GDIFF_ERR_HEADER;
|
||||
break;
|
||||
|
||||
|
||||
case GDIFF_CS_MD5:
|
||||
|
||||
|
||||
case GDIFF_CS_SHA:
|
||||
|
||||
|
||||
default:
|
||||
/* unsupported checksum type */
|
||||
result = GDIFF_ERR_CHKSUMTYPE;
|
||||
break;
|
||||
}
|
||||
|
||||
/* reset file position to beginning and return status */
|
||||
PR_Seek( fh, 0, PR_SEEK_SET );
|
||||
return (result);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------
|
||||
* gdiff_valCRC32()
|
||||
*
|
||||
* computes the checksum of the file and compares it to
|
||||
* the passed in checksum. Assumes file is positioned at
|
||||
* beginning.
|
||||
*---------------------------------------------------------
|
||||
*/
|
||||
static
|
||||
int32 gdiff_valCRC32( pDIFFDATA dd, PRFileDesc* fh, uint32 chksum )
|
||||
{
|
||||
uint32 crc;
|
||||
uint32 nRead;
|
||||
|
||||
crc = crc32(0L, Z_NULL, 0);
|
||||
|
||||
nRead = PR_Read (fh, dd->databuf, dd->bufsize);
|
||||
while ( nRead > 0 )
|
||||
{
|
||||
crc = crc32( crc, dd->databuf, nRead );
|
||||
nRead = PR_Read (fh, dd->databuf, dd->bufsize);
|
||||
}
|
||||
|
||||
if ( crc == chksum )
|
||||
return GDIFF_OK;
|
||||
else
|
||||
return GDIFF_ERR_CHECKSUM;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------
|
||||
* gdiff_ApplyPatch()
|
||||
*
|
||||
* Combines patch data with source file to produce the
|
||||
* new target file. Assumes all three files have been
|
||||
* opened, GDIFF header read, and all other setup complete
|
||||
*
|
||||
* The GDIFF patch is processed sequentially which random
|
||||
* access is neccessary for the source file.
|
||||
*---------------------------------------------------------
|
||||
*/
|
||||
static
|
||||
int32 gdiff_ApplyPatch( pDIFFDATA dd )
|
||||
{
|
||||
int32 err;
|
||||
XP_Bool done;
|
||||
uint32 position;
|
||||
uint32 count;
|
||||
uchar opcode;
|
||||
uchar cmdbuf[MAXCMDSIZE];
|
||||
|
||||
done = FALSE;
|
||||
while ( !done ) {
|
||||
err = gdiff_getdiff( dd, &opcode, OPSIZE );
|
||||
if ( err != GDIFF_OK )
|
||||
break;
|
||||
|
||||
switch (opcode)
|
||||
{
|
||||
case ENDDIFF:
|
||||
done = TRUE;
|
||||
break;
|
||||
|
||||
case ADD16:
|
||||
err = gdiff_getdiff( dd, cmdbuf, ADD16SIZE );
|
||||
if ( err == GDIFF_OK ) {
|
||||
err = gdiff_add( dd, getshort( cmdbuf ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case ADD32:
|
||||
err = gdiff_getdiff( dd, cmdbuf, ADD32SIZE );
|
||||
if ( err == GDIFF_OK ) {
|
||||
err = gdiff_add( dd, getlong( cmdbuf ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case COPY16BYTE:
|
||||
err = gdiff_getdiff( dd, cmdbuf, COPY16BYTESIZE );
|
||||
if ( err == GDIFF_OK ) {
|
||||
position = getshort( cmdbuf );
|
||||
count = *(cmdbuf + sizeof(short));
|
||||
err = gdiff_copy( dd, position, count );
|
||||
}
|
||||
break;
|
||||
|
||||
case COPY16SHORT:
|
||||
err = gdiff_getdiff( dd, cmdbuf, COPY16SHORTSIZE );
|
||||
if ( err == GDIFF_OK ) {
|
||||
position = getshort( cmdbuf );
|
||||
count = getshort(cmdbuf + sizeof(short));
|
||||
err = gdiff_copy( dd, position, count );
|
||||
}
|
||||
break;
|
||||
|
||||
case COPY16LONG:
|
||||
err = gdiff_getdiff( dd, cmdbuf, COPY16LONGSIZE );
|
||||
if ( err == GDIFF_OK ) {
|
||||
position = getshort( cmdbuf );
|
||||
count = getlong(cmdbuf + sizeof(short));
|
||||
err = gdiff_copy( dd, position, count );
|
||||
}
|
||||
break;
|
||||
|
||||
case COPY32BYTE:
|
||||
err = gdiff_getdiff( dd, cmdbuf, COPY32BYTESIZE );
|
||||
if ( err == GDIFF_OK ) {
|
||||
position = getlong( cmdbuf );
|
||||
count = *(cmdbuf + sizeof(long));
|
||||
err = gdiff_copy( dd, position, count );
|
||||
}
|
||||
break;
|
||||
|
||||
case COPY32SHORT:
|
||||
err = gdiff_getdiff( dd, cmdbuf, COPY32SHORTSIZE );
|
||||
if ( err == GDIFF_OK ) {
|
||||
position = getlong( cmdbuf );
|
||||
count = getshort(cmdbuf + sizeof(long));
|
||||
err = gdiff_copy( dd, position, count );
|
||||
}
|
||||
break;
|
||||
|
||||
case COPY32LONG:
|
||||
err = gdiff_getdiff( dd, cmdbuf, COPY32LONGSIZE );
|
||||
if ( err == GDIFF_OK ) {
|
||||
position = getlong( cmdbuf );
|
||||
count = getlong(cmdbuf + sizeof(long));
|
||||
err = gdiff_copy( dd, position, count );
|
||||
}
|
||||
break;
|
||||
|
||||
case COPY64:
|
||||
/* we don't support 64-bit file positioning yet */
|
||||
err = GDIFF_ERR_OPCODE;
|
||||
break;
|
||||
|
||||
default:
|
||||
err = gdiff_add( dd, opcode );
|
||||
break;
|
||||
}
|
||||
|
||||
if ( err != GDIFF_OK )
|
||||
done = TRUE;
|
||||
}
|
||||
|
||||
/* return status */
|
||||
return (err);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------
|
||||
* gdiff_getdiff()
|
||||
*
|
||||
* reads the next "length" bytes of the diff into "buffer"
|
||||
*
|
||||
* XXX: need a diff buffer to optimize reads!
|
||||
*---------------------------------------------------------
|
||||
*/
|
||||
static
|
||||
int32 gdiff_getdiff( pDIFFDATA dd, uchar *buffer, uint32 length )
|
||||
{
|
||||
uint32 bytesRead;
|
||||
|
||||
bytesRead = PR_Read (dd->fDiff, buffer, length);
|
||||
if ( bytesRead != length )
|
||||
return GDIFF_ERR_BADDIFF;
|
||||
|
||||
return GDIFF_OK;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------
|
||||
* gdiff_add()
|
||||
*
|
||||
* append "count" bytes from diff file to new file
|
||||
*---------------------------------------------------------
|
||||
*/
|
||||
static
|
||||
int32 gdiff_add( pDIFFDATA dd, uint32 count )
|
||||
{
|
||||
int32 err = GDIFF_OK;
|
||||
uint32 nRead;
|
||||
uint32 chunksize;
|
||||
|
||||
while ( count > 0 ) {
|
||||
chunksize = ( count > dd->bufsize) ? dd->bufsize : count;
|
||||
nRead = PR_Read (dd->fDiff, dd->databuf, chunksize);
|
||||
if ( nRead != chunksize ) {
|
||||
err = GDIFF_ERR_BADDIFF;
|
||||
break;
|
||||
}
|
||||
|
||||
PR_Write (dd->fOut, dd->databuf, chunksize);
|
||||
|
||||
count -= chunksize;
|
||||
}
|
||||
|
||||
return (err);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------
|
||||
* gdiff_copy()
|
||||
*
|
||||
* copy "count" bytes from "position" in source file
|
||||
*---------------------------------------------------------
|
||||
*/
|
||||
static
|
||||
int32 gdiff_copy( pDIFFDATA dd, uint32 position, uint32 count )
|
||||
{
|
||||
int32 err = GDIFF_OK;
|
||||
uint32 nRead;
|
||||
uint32 chunksize;
|
||||
|
||||
PR_Seek (dd->fSrc, position, PR_SEEK_SET);
|
||||
|
||||
while ( count > 0 ) {
|
||||
chunksize = (count > dd->bufsize) ? dd->bufsize : count;
|
||||
|
||||
nRead = PR_Read (dd->fSrc, dd->databuf, chunksize);
|
||||
if ( nRead != chunksize ) {
|
||||
err = GDIFF_ERR_OLDFILE;
|
||||
break;
|
||||
}
|
||||
|
||||
PR_Write (dd->fOut, dd->databuf, chunksize);
|
||||
|
||||
count -= chunksize;
|
||||
}
|
||||
|
||||
return (err);
|
||||
}
|
||||
|
||||
79
mozilla/xpinstall/src/nsInstallPatch.h
Normal file
79
mozilla/xpinstall/src/nsInstallPatch.h
Normal file
@@ -0,0 +1,79 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsInstallPatch_h__
|
||||
#define nsInstallPatch_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsInstallObject.h"
|
||||
|
||||
#include "nsInstall.h"
|
||||
#include "nsInstallFolder.h"
|
||||
#include "nsInstallVersion.h"
|
||||
|
||||
|
||||
class nsInstallPatch : public nsInstallObject
|
||||
{
|
||||
public:
|
||||
|
||||
nsInstallPatch( nsInstall* inInstall,
|
||||
const nsString& inVRName,
|
||||
const nsString& inVInfo,
|
||||
const nsString& inJarLocation,
|
||||
const nsString& folderSpec,
|
||||
const nsString& inPartialPath,
|
||||
PRInt32 *error);
|
||||
|
||||
nsInstallPatch( nsInstall* inInstall,
|
||||
const nsString& inVRName,
|
||||
const nsString& inVInfo,
|
||||
const nsString& inJarLocation,
|
||||
PRInt32 *error);
|
||||
|
||||
virtual ~nsInstallPatch();
|
||||
|
||||
PRInt32 Prepare();
|
||||
PRInt32 Complete();
|
||||
void Abort();
|
||||
char* toString();
|
||||
|
||||
PRBool CanUninstall();
|
||||
PRBool RegisterPackageNode();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
nsInstallVersion *mVersionInfo;
|
||||
|
||||
nsFileSpec *mTargetFile;
|
||||
nsFileSpec *mPatchFile;
|
||||
nsFileSpec *mPatchedFile;
|
||||
|
||||
nsString *mJarLocation;
|
||||
nsString *mRegistryName;
|
||||
|
||||
|
||||
|
||||
PRInt32 NativePatch(const nsFileSpec &sourceFile, const nsFileSpec &patchfile, nsFileSpec **newFile);
|
||||
void* HashFilePath(const nsFilePath& aPath);
|
||||
};
|
||||
|
||||
#endif /* nsInstallPatch_h__ */
|
||||
343
mozilla/xpinstall/src/nsInstallProgressDialog.cpp
Normal file
343
mozilla/xpinstall/src/nsInstallProgressDialog.cpp
Normal file
@@ -0,0 +1,343 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#include "nsIXPInstallProgress.h"
|
||||
#include "nsInstallProgressDialog.h"
|
||||
|
||||
#include "nsIAppShellComponentImpl.h"
|
||||
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIDocumentViewer.h"
|
||||
#include "nsIContent.h"
|
||||
#include "nsINameSpaceManager.h"
|
||||
#include "nsIContentViewer.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsINetService.h"
|
||||
|
||||
#include "nsIWebShell.h"
|
||||
#include "nsIWebShellWindow.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID( kAppShellServiceCID, NS_APPSHELL_SERVICE_CID );
|
||||
static NS_DEFINE_IID( kNetServiceCID, NS_NETSERVICE_CID );
|
||||
|
||||
// Utility to set element attribute.
|
||||
static nsresult setAttribute( nsIDOMXULDocument *doc,
|
||||
const char *id,
|
||||
const char *name,
|
||||
const nsString &value ) {
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
if ( doc ) {
|
||||
// Find specified element.
|
||||
nsCOMPtr<nsIDOMElement> elem;
|
||||
rv = doc->GetElementById( id, getter_AddRefs( elem ) );
|
||||
if ( elem ) {
|
||||
// Set the text attribute.
|
||||
rv = elem->SetAttribute( name, value );
|
||||
if ( NS_SUCCEEDED( rv ) ) {
|
||||
} else {
|
||||
DEBUG_PRINTF( PR_STDOUT, "%s %d: SetAttribute failed, rv=0x%X\n",
|
||||
__FILE__, (int)__LINE__, (int)rv );
|
||||
}
|
||||
} else {
|
||||
DEBUG_PRINTF( PR_STDOUT, "%s %d: GetElementById failed, rv=0x%X\n",
|
||||
__FILE__, (int)__LINE__, (int)rv );
|
||||
}
|
||||
} else {
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
// Utility to get element attribute.
|
||||
static nsresult getAttribute( nsIDOMXULDocument *doc,
|
||||
const char *id,
|
||||
const char *name,
|
||||
nsString &value ) {
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
if ( doc ) {
|
||||
// Find specified element.
|
||||
nsCOMPtr<nsIDOMElement> elem;
|
||||
rv = doc->GetElementById( id, getter_AddRefs( elem ) );
|
||||
if ( elem ) {
|
||||
// Set the text attribute.
|
||||
rv = elem->GetAttribute( name, value );
|
||||
if ( NS_SUCCEEDED( rv ) ) {
|
||||
} else {
|
||||
DEBUG_PRINTF( PR_STDOUT, "%s %d: SetAttribute failed, rv=0x%X\n",
|
||||
__FILE__, (int)__LINE__, (int)rv );
|
||||
}
|
||||
} else {
|
||||
DEBUG_PRINTF( PR_STDOUT, "%s %d: GetElementById failed, rv=0x%X\n",
|
||||
__FILE__, (int)__LINE__, (int)rv );
|
||||
}
|
||||
} else {
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
nsInstallProgressDialog::nsInstallProgressDialog()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
mWindow = nsnull;
|
||||
mDocument = nsnull;
|
||||
|
||||
}
|
||||
|
||||
nsInstallProgressDialog::~nsInstallProgressDialog()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ADDREF( nsInstallProgressDialog );
|
||||
NS_IMPL_RELEASE( nsInstallProgressDialog );
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallProgressDialog::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if (aIID.Equals(nsIXPInstallProgress::GetIID())) {
|
||||
*aInstancePtr = (void*) ((nsInstallProgressDialog*)this);
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(nsIXULWindowCallbacks::GetIID())) {
|
||||
*aInstancePtr = (void*) ((nsIXULWindowCallbacks*)this);
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(kISupportsIID)) {
|
||||
*aInstancePtr = (void*) (nsISupports*)((nsIXPInstallProgress*)this);
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallProgressDialog::BeforeJavascriptEvaluation()
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
// Get app shell service.
|
||||
nsIAppShellService *appShell;
|
||||
rv = nsServiceManager::GetService( kAppShellServiceCID,
|
||||
nsIAppShellService::GetIID(),
|
||||
(nsISupports**)&appShell );
|
||||
|
||||
if ( NS_SUCCEEDED( rv ) )
|
||||
{
|
||||
// Open "progress" dialog.
|
||||
nsIURL *url;
|
||||
rv = NS_NewURL( &url, "resource:/res/xpinstall/progress.xul" );
|
||||
|
||||
if ( NS_SUCCEEDED(rv) )
|
||||
{
|
||||
|
||||
nsIWebShellWindow *newWindow;
|
||||
|
||||
rv = appShell->CreateTopLevelWindow( nsnull,
|
||||
url,
|
||||
PR_TRUE,
|
||||
newWindow,
|
||||
nsnull,
|
||||
this, // callbacks??
|
||||
0,
|
||||
0 );
|
||||
|
||||
if ( NS_SUCCEEDED( rv ) )
|
||||
{
|
||||
mWindow = newWindow;
|
||||
NS_RELEASE( newWindow );
|
||||
|
||||
if (mWindow != nsnull)
|
||||
mWindow->Show(PR_TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_PRINTF( PR_STDOUT, "Error creating progress dialog, rv=0x%X\n", (int)rv );
|
||||
}
|
||||
NS_RELEASE( url );
|
||||
}
|
||||
|
||||
nsServiceManager::ReleaseService( kAppShellServiceCID, appShell );
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_PRINTF( PR_STDOUT, "Unable to get app shell service, rv=0x%X\n", (int)rv );
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallProgressDialog::AfterJavascriptEvaluation()
|
||||
{
|
||||
if (mWindow)
|
||||
{
|
||||
mWindow->Close();
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallProgressDialog::InstallStarted(const char *UIPackageName)
|
||||
{
|
||||
setAttribute( mDocument, "dialog.uiPackageName", "value", nsString(UIPackageName) );
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallProgressDialog::ItemScheduled(const char *message)
|
||||
{
|
||||
PRInt32 maxChars = 40;
|
||||
|
||||
nsString theMessage(message);
|
||||
PRInt32 len = theMessage.Length();
|
||||
if (len > maxChars)
|
||||
{
|
||||
PRInt32 offset = (len/2) - ((len - maxChars)/2);
|
||||
PRInt32 count = (len - maxChars);
|
||||
theMessage.Cut(offset, count);
|
||||
theMessage.Insert(nsString("..."), offset);
|
||||
}
|
||||
setAttribute( mDocument, "dialog.currentAction", "value", theMessage );
|
||||
|
||||
nsString aValue;
|
||||
getAttribute( mDocument, "data.canceled", "value", aValue );
|
||||
|
||||
if (aValue.EqualsIgnoreCase("true"))
|
||||
return -1;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallProgressDialog::InstallFinalization(const char *message, PRInt32 itemNum, PRInt32 totNum)
|
||||
{
|
||||
|
||||
PRInt32 maxChars = 40;
|
||||
|
||||
nsString theMessage(message);
|
||||
PRInt32 len = theMessage.Length();
|
||||
if (len > maxChars)
|
||||
{
|
||||
PRInt32 offset = (len/2) - ((len - maxChars)/2);
|
||||
PRInt32 count = (len - maxChars);
|
||||
theMessage.Cut(offset, count);
|
||||
theMessage.Insert(nsString("..."), offset);
|
||||
}
|
||||
|
||||
setAttribute( mDocument, "dialog.currentAction", "value", theMessage );
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
char buf[16];
|
||||
|
||||
PR_snprintf( buf, sizeof buf, "%lu", totNum );
|
||||
setAttribute( mDocument, "dialog.progress", "max", buf );
|
||||
|
||||
if (totNum != 0)
|
||||
{
|
||||
PR_snprintf( buf, sizeof buf, "%lu", ((totNum-itemNum)/totNum) );
|
||||
}
|
||||
else
|
||||
{
|
||||
PR_snprintf( buf, sizeof buf, "%lu", 0 );
|
||||
}
|
||||
setAttribute( mDocument, "dialog.progress", "value", buf );
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallProgressDialog::InstallAborted()
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Do startup stuff from C++ side.
|
||||
NS_IMETHODIMP
|
||||
nsInstallProgressDialog::ConstructBeforeJavaScript(nsIWebShell *aWebShell)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
// Get content viewer from the web shell.
|
||||
nsCOMPtr<nsIContentViewer> contentViewer;
|
||||
rv = aWebShell ? aWebShell->GetContentViewer(getter_AddRefs(contentViewer))
|
||||
: NS_ERROR_NULL_POINTER;
|
||||
|
||||
if ( contentViewer ) {
|
||||
// Up-cast to a document viewer.
|
||||
nsCOMPtr<nsIDocumentViewer> docViewer( do_QueryInterface( contentViewer, &rv ) );
|
||||
if ( docViewer ) {
|
||||
// Get the document from the doc viewer.
|
||||
nsCOMPtr<nsIDocument> document;
|
||||
rv = docViewer->GetDocument(*getter_AddRefs(document));
|
||||
if ( document ) {
|
||||
// Upcast to XUL document.
|
||||
mDocument = do_QueryInterface( document, &rv );
|
||||
if ( ! mDocument )
|
||||
{
|
||||
DEBUG_PRINTF( PR_STDOUT, "%s %d: Upcast to nsIDOMXULDocument failed, rv=0x%X\n",
|
||||
__FILE__, (int)__LINE__, (int)rv );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_PRINTF( PR_STDOUT, "%s %d: GetDocument failed, rv=0x%X\n",
|
||||
__FILE__, (int)__LINE__, (int)rv );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_PRINTF( PR_STDOUT, "%s %d: Upcast to nsIDocumentViewer failed, rv=0x%X\n",
|
||||
__FILE__, (int)__LINE__, (int)rv );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_PRINTF( PR_STDOUT, "%s %d: GetContentViewer failed, rv=0x%X\n",
|
||||
__FILE__, (int)__LINE__, (int)rv );
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
67
mozilla/xpinstall/src/nsInstallProgressDialog.h
Normal file
67
mozilla/xpinstall/src/nsInstallProgressDialog.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
#ifndef __nsInstallProgressDialog_h__
|
||||
#define __nsInstallProgressDialog_h__
|
||||
|
||||
#include "nsIXPInstallProgress.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsISupportsUtils.h"
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include "nsIWebShell.h"
|
||||
#include "nsIWebShellWindow.h"
|
||||
#include "nsIXULWindowCallbacks.h"
|
||||
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIDOMXULDocument.h"
|
||||
|
||||
|
||||
class nsInstallProgressDialog : public nsIXPInstallProgress, public nsIXULWindowCallbacks
|
||||
{
|
||||
public:
|
||||
|
||||
nsInstallProgressDialog();
|
||||
virtual ~nsInstallProgressDialog();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
|
||||
NS_IMETHOD BeforeJavascriptEvaluation();
|
||||
NS_IMETHOD AfterJavascriptEvaluation();
|
||||
NS_IMETHOD InstallStarted(const char *UIPackageName);
|
||||
NS_IMETHOD ItemScheduled(const char *message);
|
||||
NS_IMETHOD InstallFinalization(const char *message, PRInt32 itemNum, PRInt32 totNum);
|
||||
NS_IMETHOD InstallAborted();
|
||||
|
||||
// Declare implementations of nsIXULWindowCallbacks interface functions.
|
||||
NS_IMETHOD ConstructBeforeJavaScript(nsIWebShell *aWebShell);
|
||||
NS_IMETHOD ConstructAfterJavaScript(nsIWebShell *aWebShell) { return NS_OK; }
|
||||
|
||||
private:
|
||||
|
||||
nsCOMPtr<nsIDOMXULDocument> mDocument;
|
||||
nsCOMPtr<nsIWebShellWindow> mWindow;
|
||||
};
|
||||
#endif
|
||||
67
mozilla/xpinstall/src/nsInstallResources.cpp
Normal file
67
mozilla/xpinstall/src/nsInstallResources.cpp
Normal file
@@ -0,0 +1,67 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nsInstallResources.h"
|
||||
|
||||
char* nsInstallResources::GetInstallFileString(void)
|
||||
{
|
||||
return "Installing: %s";
|
||||
}
|
||||
|
||||
char* nsInstallResources::GetReplaceFileString(void)
|
||||
{
|
||||
return "Replacing %s";
|
||||
}
|
||||
|
||||
char* nsInstallResources::GetDeleteFileString(void)
|
||||
{
|
||||
return "Deleting file: %s";
|
||||
}
|
||||
|
||||
char* nsInstallResources::GetDeleteComponentString(void)
|
||||
{
|
||||
return "Deleting component: %s";
|
||||
}
|
||||
|
||||
char* nsInstallResources::GetExecuteString(void)
|
||||
{
|
||||
return "Executing: %s";
|
||||
}
|
||||
|
||||
char* nsInstallResources::GetExecuteWithArgsString(void)
|
||||
{
|
||||
return "Executing: %s with argument: %s";
|
||||
}
|
||||
|
||||
char* nsInstallResources::GetPatchFileString(void)
|
||||
{
|
||||
return "Patching: %s";
|
||||
}
|
||||
|
||||
char* nsInstallResources::GetUninstallString(void)
|
||||
{
|
||||
return "Uninstalling: %s";
|
||||
}
|
||||
|
||||
45
mozilla/xpinstall/src/nsInstallResources.h
Normal file
45
mozilla/xpinstall/src/nsInstallResources.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __NS_INSTALLRESOURCES_H__
|
||||
#define __NS_INSTALLRESOURCES_H__
|
||||
|
||||
class nsInstallResources
|
||||
{
|
||||
public:
|
||||
|
||||
static char* GetInstallFileString(void);
|
||||
static char* GetReplaceFileString(void);
|
||||
static char* GetDeleteFileString(void);
|
||||
static char* GetDeleteComponentString(void);
|
||||
static char* GetExecuteString(void);
|
||||
static char* GetExecuteWithArgsString(void);
|
||||
static char* GetPatchFileString(void);
|
||||
static char* GetUninstallString(void);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
359
mozilla/xpinstall/src/nsInstallTrigger.cpp
Normal file
359
mozilla/xpinstall/src/nsInstallTrigger.cpp
Normal file
@@ -0,0 +1,359 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
||||
* Netscape Communications Corporation. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include "nsSoftwareUpdate.h"
|
||||
#include "nsSoftwareUpdateStream.h"
|
||||
#include "nsInstallTrigger.h"
|
||||
#include "nsIDOMInstallTriggerGlobal.h"
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsIFactory.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
|
||||
#include "nsIPref.h"
|
||||
|
||||
#include "nsRepository.h"
|
||||
#include "nsIServiceManager.h"
|
||||
|
||||
#include "nsSpecialSystemDirectory.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
|
||||
static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID);
|
||||
|
||||
static NS_DEFINE_IID(kIInstallTrigger_IID, NS_IDOMINSTALLTRIGGERGLOBAL_IID);
|
||||
static NS_DEFINE_IID(kIInstallTrigger_CID, NS_SoftwareUpdateInstallTrigger_CID);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
nsInstallTrigger::nsInstallTrigger()
|
||||
{
|
||||
mScriptObject = nsnull;
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
nsInstallTrigger::~nsInstallTrigger()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL)
|
||||
{
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if ( aIID.Equals(kIScriptObjectOwnerIID))
|
||||
{
|
||||
*aInstancePtr = (void*) ((nsIScriptObjectOwner*)this);
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
else if ( aIID.Equals(kIInstallTrigger_IID) )
|
||||
{
|
||||
*aInstancePtr = (void*) ((nsIDOMInstallTriggerGlobal*)this);
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
else if ( aIID.Equals(kISupportsIID) )
|
||||
{
|
||||
*aInstancePtr = (void*)(nsISupports*)(nsIScriptObjectOwner*)this;
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_NOINTERFACE;
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF(nsInstallTrigger)
|
||||
NS_IMPL_RELEASE(nsInstallTrigger)
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
|
||||
{
|
||||
NS_PRECONDITION(nsnull != aScriptObject, "null arg");
|
||||
nsresult res = NS_OK;
|
||||
|
||||
if (nsnull == mScriptObject)
|
||||
{
|
||||
nsIScriptGlobalObject *global = aContext->GetGlobalObject();
|
||||
|
||||
res = NS_NewScriptInstallTriggerGlobal( aContext,
|
||||
(nsISupports *)(nsIDOMInstallTriggerGlobal*)this,
|
||||
(nsISupports *)global,
|
||||
&mScriptObject);
|
||||
NS_IF_RELEASE(global);
|
||||
|
||||
}
|
||||
|
||||
|
||||
*aScriptObject = mScriptObject;
|
||||
return res;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::SetScriptObject(void *aScriptObject)
|
||||
{
|
||||
mScriptObject = aScriptObject;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static NS_DEFINE_IID(kPrefsIID, NS_IPREF_IID);
|
||||
static NS_DEFINE_IID(kPrefsCID, NS_PREF_CID);
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::UpdateEnabled(PRBool* aReturn)
|
||||
{
|
||||
nsIPref * prefs;
|
||||
|
||||
nsresult rv = nsServiceManager::GetService(kPrefsCID,
|
||||
kPrefsIID,
|
||||
(nsISupports**) &prefs);
|
||||
|
||||
|
||||
if ( NS_SUCCEEDED(rv) )
|
||||
{
|
||||
rv = prefs->GetBoolPref( (const char*) AUTOUPDATE_ENABLE_PREF, aReturn);
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
{
|
||||
*aReturn = PR_FALSE;
|
||||
}
|
||||
|
||||
NS_RELEASE(prefs);
|
||||
}
|
||||
else
|
||||
{
|
||||
*aReturn = PR_FALSE; /* no prefs manager. set to false */
|
||||
}
|
||||
|
||||
//FIX!!!!!!!!!!
|
||||
*aReturn = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::StartSoftwareUpdate(const nsString& aURL, PRInt32 aFlags, PRInt32* aReturn)
|
||||
{
|
||||
nsString localFile;
|
||||
CreateTempFileFromURL(aURL, localFile);
|
||||
|
||||
// start the download (this will clean itself up)
|
||||
nsSoftwareUpdateListener *downloader = new nsSoftwareUpdateListener(aURL, localFile, aFlags);
|
||||
|
||||
*aReturn = NS_OK; // maybe we should do something more.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::StartSoftwareUpdate(const nsString& aURL, PRInt32* aReturn)
|
||||
{
|
||||
nsString localFile;
|
||||
CreateTempFileFromURL(aURL, localFile);
|
||||
|
||||
// start the download (this will clean itself up)
|
||||
nsSoftwareUpdateListener *downloader = new nsSoftwareUpdateListener(aURL, localFile, 0);
|
||||
|
||||
*aReturn = NS_OK; // maybe we should do something more.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, nsIDOMInstallVersion* aVersion, PRInt32 aMode, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32 aMode, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::CompareVersion(const nsString& aRegName, PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::CompareVersion(const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTrigger::CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// this will take a nsIUrl, and create a temporary file. If it is local, we just us it.
|
||||
|
||||
void
|
||||
nsInstallTrigger::CreateTempFileFromURL(const nsString& aURL, nsString& tempFileString)
|
||||
{
|
||||
// Checking to see if the url is local
|
||||
|
||||
if ( aURL.EqualsIgnoreCase("file://", 7) )
|
||||
{
|
||||
tempFileString.SetString( nsNSPRPath(nsFileURL(aURL)) );
|
||||
}
|
||||
else
|
||||
{
|
||||
nsSpecialSystemDirectory tempFile(nsSpecialSystemDirectory::OS_TemporaryDirectory);
|
||||
|
||||
PRInt32 result = aURL.RFind("/");
|
||||
if (result != -1)
|
||||
{
|
||||
nsString jarName;
|
||||
|
||||
aURL.Right(jarName, (aURL.Length() - result) );
|
||||
|
||||
PRInt32 argOffset = jarName.RFind("?");
|
||||
|
||||
if (argOffset != -1)
|
||||
{
|
||||
// we need to remove ? and everything after it
|
||||
jarName.Truncate(argOffset);
|
||||
}
|
||||
|
||||
|
||||
tempFile += jarName;
|
||||
}
|
||||
else
|
||||
{
|
||||
tempFile += "xpinstall.jar";
|
||||
}
|
||||
|
||||
tempFile.MakeUnique();
|
||||
|
||||
tempFileString.SetString( nsNSPRPath( nsFilePath(tempFile) ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
nsInstallTriggerFactory::nsInstallTriggerFactory(void)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
nsInstallTriggerFactory::~nsInstallTriggerFactory(void)
|
||||
{
|
||||
NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction");
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTriggerFactory::QueryInterface(const nsIID &aIID, void **aResult)
|
||||
{
|
||||
if (! aResult)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aResult = nsnull;
|
||||
|
||||
if (aIID.Equals(kISupportsIID)) {
|
||||
*aResult = NS_STATIC_CAST(nsISupports*, this);
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
} else if (aIID.Equals(kIFactoryIID)) {
|
||||
*aResult = NS_STATIC_CAST(nsIFactory*, this);
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_NOINTERFACE;
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF(nsInstallTriggerFactory);
|
||||
NS_IMPL_RELEASE(nsInstallTriggerFactory);
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTriggerFactory::CreateInstance(nsISupports *aOuter, REFNSIID aIID, void **aResult)
|
||||
{
|
||||
if (! aResult)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
*aResult = nsnull;
|
||||
|
||||
nsresult rv;
|
||||
|
||||
nsInstallTrigger *inst = new nsInstallTrigger();
|
||||
|
||||
if (! inst)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
if (NS_FAILED(rv = inst->QueryInterface(aIID, aResult)))
|
||||
{
|
||||
// We didn't get the right interface.
|
||||
NS_ERROR("didn't support the interface you wanted");
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallTriggerFactory::LockFactory(PRBool aLock)
|
||||
{
|
||||
// Not implemented in simplest case.
|
||||
return NS_OK;
|
||||
}
|
||||
72
mozilla/xpinstall/src/nsInstallTrigger.h
Normal file
72
mozilla/xpinstall/src/nsInstallTrigger.h
Normal file
@@ -0,0 +1,72 @@
|
||||
#ifndef __NS_INSTALLTRIGGER_H__
|
||||
#define __NS_INSTALLTRIGGER_H__
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIFactory.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsIScriptObjectOwner.h"
|
||||
|
||||
#include "nsIDOMInstallTriggerGlobal.h"
|
||||
#include "nsSoftwareUpdate.h"
|
||||
|
||||
#include "prtypes.h"
|
||||
#include "nsHashtable.h"
|
||||
#include "nsVector.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class nsInstallTrigger: public nsIScriptObjectOwner, public nsIDOMInstallTriggerGlobal
|
||||
{
|
||||
public:
|
||||
static const nsIID& IID() { static nsIID iid = NS_SoftwareUpdateInstallTrigger_CID; return iid; }
|
||||
|
||||
nsInstallTrigger();
|
||||
~nsInstallTrigger();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
|
||||
NS_IMETHOD SetScriptObject(void* aScriptObject);
|
||||
|
||||
NS_IMETHOD UpdateEnabled(PRBool* aReturn);
|
||||
NS_IMETHOD StartSoftwareUpdate(const nsString& aURL, PRInt32 aFlags, PRInt32* aReturn);
|
||||
NS_IMETHOD StartSoftwareUpdate(const nsString& aURL, PRInt32* aReturn);
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn);
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, PRInt32 aDiffLevel, nsIDOMInstallVersion* aVersion, PRInt32 aMode, PRInt32* aReturn);
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32 aMode, PRInt32* aReturn);
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32 aMode, PRInt32* aReturn);
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn);
|
||||
NS_IMETHOD ConditionalSoftwareUpdate(const nsString& aURL, const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn);
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn);
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, const nsString& aVersion, PRInt32* aReturn);
|
||||
NS_IMETHOD CompareVersion(const nsString& aRegName, nsIDOMInstallVersion* aVersion, PRInt32* aReturn);
|
||||
|
||||
|
||||
private:
|
||||
void *mScriptObject;
|
||||
void CreateTempFileFromURL(const nsString& aURL, nsString& tempFileString);
|
||||
|
||||
};
|
||||
|
||||
|
||||
class nsInstallTriggerFactory : public nsIFactory
|
||||
{
|
||||
public:
|
||||
|
||||
nsInstallTriggerFactory();
|
||||
~nsInstallTriggerFactory();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_IMETHOD CreateInstance(nsISupports *aOuter,
|
||||
REFNSIID aIID,
|
||||
void **aResult);
|
||||
|
||||
NS_IMETHOD LockFactory(PRBool aLock);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
196
mozilla/xpinstall/src/nsInstallUninstall.cpp
Normal file
196
mozilla/xpinstall/src/nsInstallUninstall.cpp
Normal file
@@ -0,0 +1,196 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nsInstall.h"
|
||||
#include "nsInstallUninstall.h"
|
||||
#include "nsInstallResources.h"
|
||||
#include "VerReg.h"
|
||||
#include "prmem.h"
|
||||
#include "nsFileSpec.h"
|
||||
#include "ScheduledTasks.h"
|
||||
|
||||
extern "C" NS_EXPORT PRInt32 SU_Uninstall(char *regPackageName);
|
||||
REGERR su_UninstallProcessItem(char *component_path);
|
||||
|
||||
|
||||
nsInstallUninstall::nsInstallUninstall( nsInstall* inInstall,
|
||||
const nsString& regName,
|
||||
PRInt32 *error)
|
||||
|
||||
: nsInstallObject(inInstall)
|
||||
{
|
||||
if (regName == "null")
|
||||
{
|
||||
*error = nsInstall::INVALID_ARGUMENTS;
|
||||
return;
|
||||
}
|
||||
|
||||
mRegName.SetString(regName);
|
||||
|
||||
char* userName = (char*)PR_Malloc(MAXREGPATHLEN);
|
||||
PRInt32 err = VR_GetUninstallUserName( (char*) (const char*) nsAutoCString(regName),
|
||||
userName,
|
||||
MAXREGPATHLEN );
|
||||
|
||||
mUIName.SetString(userName);
|
||||
|
||||
if (err != REGERR_OK)
|
||||
{
|
||||
*error = nsInstall::NO_SUCH_COMPONENT;
|
||||
}
|
||||
|
||||
PR_FREEIF(userName);
|
||||
|
||||
}
|
||||
|
||||
nsInstallUninstall::~nsInstallUninstall()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PRInt32 nsInstallUninstall::Prepare()
|
||||
{
|
||||
// no set-up necessary
|
||||
return nsInstall::SUCCESS;
|
||||
}
|
||||
|
||||
PRInt32 nsInstallUninstall::Complete()
|
||||
{
|
||||
PRInt32 err = nsInstall::SUCCESS;
|
||||
|
||||
if (mInstall == NULL)
|
||||
return nsInstall::INVALID_ARGUMENTS;
|
||||
|
||||
err = SU_Uninstall( (char*)(const char*) nsAutoCString(mRegName) );
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void nsInstallUninstall::Abort()
|
||||
{
|
||||
}
|
||||
|
||||
char* nsInstallUninstall::toString()
|
||||
{
|
||||
char* buffer = new char[1024];
|
||||
|
||||
char* temp = mUIName.ToNewCString();
|
||||
sprintf( buffer, nsInstallResources::GetUninstallString(), temp);
|
||||
delete [] temp;
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
PRBool
|
||||
nsInstallUninstall::CanUninstall()
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsInstallUninstall::RegisterPackageNode()
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
extern "C" NS_EXPORT PRInt32 SU_Uninstall(char *regPackageName)
|
||||
{
|
||||
REGERR status = REGERR_FAIL;
|
||||
char pathbuf[MAXREGPATHLEN+1] = {0};
|
||||
char sharedfilebuf[MAXREGPATHLEN+1] = {0};
|
||||
REGENUM state = 0;
|
||||
int32 length;
|
||||
int32 err;
|
||||
|
||||
if (regPackageName == NULL)
|
||||
return REGERR_PARAM;
|
||||
|
||||
if (pathbuf == NULL)
|
||||
return REGERR_PARAM;
|
||||
|
||||
/* Get next path from Registry */
|
||||
status = VR_Enum( regPackageName, &state, pathbuf, MAXREGPATHLEN );
|
||||
|
||||
/* if we got a good path */
|
||||
while (status == REGERR_OK)
|
||||
{
|
||||
char component_path[2*MAXREGPATHLEN+1] = {0};
|
||||
strcat(component_path, regPackageName);
|
||||
length = strlen(regPackageName);
|
||||
if (component_path[length - 1] != '/')
|
||||
strcat(component_path, "/");
|
||||
strcat(component_path, pathbuf);
|
||||
err = su_UninstallProcessItem(component_path);
|
||||
status = VR_Enum( regPackageName, &state, pathbuf, MAXREGPATHLEN );
|
||||
}
|
||||
|
||||
err = VR_Remove(regPackageName);
|
||||
// there is a problem here. It looks like if the file is refcounted, we still blow away the reg key
|
||||
// FIX!
|
||||
state = 0;
|
||||
status = VR_UninstallEnumSharedFiles( regPackageName, &state, sharedfilebuf, MAXREGPATHLEN );
|
||||
while (status == REGERR_OK)
|
||||
{
|
||||
err = su_UninstallProcessItem(sharedfilebuf);
|
||||
err = VR_UninstallDeleteFileFromList(regPackageName, sharedfilebuf);
|
||||
status = VR_UninstallEnumSharedFiles( regPackageName, &state, sharedfilebuf, MAXREGPATHLEN );
|
||||
}
|
||||
|
||||
err = VR_UninstallDeleteSharedFilesKey(regPackageName);
|
||||
err = VR_UninstallDestroy(regPackageName);
|
||||
return err;
|
||||
}
|
||||
|
||||
REGERR su_UninstallProcessItem(char *component_path)
|
||||
{
|
||||
int refcount;
|
||||
int err;
|
||||
char filepath[MAXREGPATHLEN];
|
||||
|
||||
err = VR_GetPath(component_path, sizeof(filepath), filepath);
|
||||
if ( err == REGERR_OK )
|
||||
{
|
||||
err = VR_GetRefCount(component_path, &refcount);
|
||||
if ( err == REGERR_OK )
|
||||
{
|
||||
--refcount;
|
||||
if (refcount > 0)
|
||||
err = VR_SetRefCount(component_path, refcount);
|
||||
else
|
||||
{
|
||||
err = VR_Remove(component_path);
|
||||
DeleteFileNowOrSchedule(nsFileSpec(filepath));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* delete node and file */
|
||||
err = VR_Remove(component_path);
|
||||
DeleteFileNowOrSchedule(nsFileSpec(filepath));
|
||||
}
|
||||
}
|
||||
return err;
|
||||
}
|
||||
63
mozilla/xpinstall/src/nsInstallUninstall.h
Normal file
63
mozilla/xpinstall/src/nsInstallUninstall.h
Normal file
@@ -0,0 +1,63 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef nsInstallUninstall_h__
|
||||
#define nsInstallUninstall_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
#include "nsString.h"
|
||||
#include "nsInstallObject.h"
|
||||
#include "nsInstall.h"
|
||||
|
||||
class nsInstallUninstall : public nsInstallObject
|
||||
{
|
||||
public:
|
||||
|
||||
nsInstallUninstall( nsInstall* inInstall,
|
||||
const nsString& regName,
|
||||
PRInt32 *error);
|
||||
|
||||
|
||||
virtual ~nsInstallUninstall();
|
||||
|
||||
PRInt32 Prepare();
|
||||
PRInt32 Complete();
|
||||
void Abort();
|
||||
char* toString();
|
||||
|
||||
PRBool CanUninstall();
|
||||
PRBool RegisterPackageNode();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
nsString mRegName; // Registry name of package
|
||||
nsString mUIName; // User name of package
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif /* nsInstallUninstall_h__ */
|
||||
399
mozilla/xpinstall/src/nsInstallVersion.cpp
Normal file
399
mozilla/xpinstall/src/nsInstallVersion.cpp
Normal file
@@ -0,0 +1,399 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
||||
* Netscape Communications Corporation. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include "nsSoftwareUpdate.h"
|
||||
|
||||
#include "nsInstallVersion.h"
|
||||
#include "nsIDOMInstallVersion.h"
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsIFactory.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
|
||||
#include "prprf.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
|
||||
static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID);
|
||||
|
||||
static NS_DEFINE_IID(kIInstallVersion_IID, NS_IDOMINSTALLVERSION_IID);
|
||||
|
||||
|
||||
nsInstallVersion::nsInstallVersion()
|
||||
{
|
||||
mScriptObject = nsnull;
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
nsInstallVersion::~nsInstallVersion()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
||||
{
|
||||
if (aInstancePtr == NULL)
|
||||
{
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aInstancePtr = NULL;
|
||||
|
||||
if ( aIID.Equals(kIScriptObjectOwnerIID))
|
||||
{
|
||||
*aInstancePtr = (void*) ((nsIScriptObjectOwner*)this);
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
else if ( aIID.Equals(kIInstallVersion_IID) )
|
||||
{
|
||||
*aInstancePtr = (void*) ((nsIDOMInstallVersion*)this);
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
else if ( aIID.Equals(kISupportsIID) )
|
||||
{
|
||||
*aInstancePtr = (void*)(nsISupports*)(nsIScriptObjectOwner*)this;
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_NOINTERFACE;
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ADDREF(nsInstallVersion)
|
||||
NS_IMPL_RELEASE(nsInstallVersion)
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
|
||||
{
|
||||
NS_PRECONDITION(nsnull != aScriptObject, "null arg");
|
||||
nsresult res = NS_OK;
|
||||
|
||||
if (nsnull == mScriptObject)
|
||||
{
|
||||
res = NS_NewScriptInstallVersion(aContext,
|
||||
(nsISupports *)(nsIDOMInstallVersion*)this,
|
||||
nsnull,
|
||||
&mScriptObject);
|
||||
}
|
||||
|
||||
|
||||
*aScriptObject = mScriptObject;
|
||||
return res;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::SetScriptObject(void *aScriptObject)
|
||||
{
|
||||
mScriptObject = aScriptObject;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// this will go away when our constructors can have parameters.
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::Init(PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild)
|
||||
{
|
||||
major = aMajor;
|
||||
minor = aMinor;
|
||||
release = aRelease;
|
||||
build = aBuild;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::Init(const nsString& version)
|
||||
{
|
||||
PRInt32 errorCode;
|
||||
PRInt32 aMajor, aMinor, aRelease, aBuild;
|
||||
|
||||
major = minor = release = build = 0;
|
||||
|
||||
errorCode = nsInstallVersion::StringToVersionNumbers(version, &aMajor, &aMinor, &aRelease, &aBuild);
|
||||
if (NS_SUCCEEDED(errorCode))
|
||||
{
|
||||
Init(aMajor, aMinor, aRelease, aBuild);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::GetMajor(PRInt32* aMajor)
|
||||
{
|
||||
*aMajor = major;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::SetMajor(PRInt32 aMajor)
|
||||
{
|
||||
major = aMajor;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::GetMinor(PRInt32* aMinor)
|
||||
{
|
||||
*aMinor = minor;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::SetMinor(PRInt32 aMinor)
|
||||
{
|
||||
minor = aMinor;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::GetRelease(PRInt32* aRelease)
|
||||
{
|
||||
*aRelease = release;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::SetRelease(PRInt32 aRelease)
|
||||
{
|
||||
release = aRelease;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::GetBuild(PRInt32* aBuild)
|
||||
{
|
||||
*aBuild = build;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::SetBuild(PRInt32 aBuild)
|
||||
{
|
||||
build = aBuild;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::CompareTo(nsIDOMInstallVersion* aVersion, PRInt32* aReturn)
|
||||
{
|
||||
PRInt32 aMajor, aMinor, aRelease, aBuild;
|
||||
|
||||
aVersion->GetMajor(&aMajor);
|
||||
aVersion->GetMinor(&aMinor);
|
||||
aVersion->GetRelease(&aRelease);
|
||||
aVersion->GetBuild(&aBuild);
|
||||
|
||||
CompareTo(aMajor, aMinor, aRelease, aBuild, aReturn);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::CompareTo(const nsString& aAString, PRInt32* aReturn)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::CompareTo(PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn)
|
||||
{
|
||||
int diff;
|
||||
|
||||
if ( major == aMajor )
|
||||
{
|
||||
if ( minor == aMinor )
|
||||
{
|
||||
if ( release == aRelease )
|
||||
{
|
||||
if ( build == aBuild )
|
||||
diff = EQUAL;
|
||||
else if ( build > aBuild )
|
||||
diff = BLD_DIFF;
|
||||
else
|
||||
diff = BLD_DIFF_MINUS;
|
||||
}
|
||||
else if ( release > aRelease )
|
||||
diff = REL_DIFF;
|
||||
else
|
||||
diff = REL_DIFF_MINUS;
|
||||
}
|
||||
else if ( minor > aMinor )
|
||||
diff = MINOR_DIFF;
|
||||
else
|
||||
diff = MINOR_DIFF_MINUS;
|
||||
}
|
||||
else if ( major > aMajor )
|
||||
diff = MAJOR_DIFF;
|
||||
else
|
||||
diff = MAJOR_DIFF_MINUS;
|
||||
|
||||
*aReturn = diff;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersion::ToString(nsString& aReturn)
|
||||
{
|
||||
char *result=NULL;
|
||||
result = PR_sprintf_append(result, "%d.%d.%d.%d", major, minor, release, build);
|
||||
|
||||
aReturn = result;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
nsInstallVersion::StringToVersionNumbers(const nsString& version, PRInt32 *aMajor, PRInt32 *aMinor, PRInt32 *aRelease, PRInt32 *aBuild)
|
||||
{
|
||||
PRInt32 errorCode;
|
||||
|
||||
int dot = version.Find('.', 0);
|
||||
|
||||
if ( dot == -1 )
|
||||
{
|
||||
*aMajor = version.ToInteger(&errorCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
nsString majorStr;
|
||||
version.Mid(majorStr, 0, dot);
|
||||
*aMajor = majorStr.ToInteger(&errorCode);
|
||||
|
||||
int prev = dot+1;
|
||||
dot = version.Find('.',prev);
|
||||
if ( dot == -1 )
|
||||
{
|
||||
nsString minorStr;
|
||||
version.Mid(minorStr, prev, version.Length() - prev);
|
||||
*aMinor = minorStr.ToInteger(&errorCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
nsString minorStr;
|
||||
version.Mid(minorStr, prev, dot - prev);
|
||||
*aMinor = minorStr.ToInteger(&errorCode);
|
||||
|
||||
prev = dot+1;
|
||||
dot = version.Find('.',prev);
|
||||
if ( dot == -1 )
|
||||
{
|
||||
nsString releaseStr;
|
||||
version.Mid(releaseStr, prev, version.Length() - prev);
|
||||
*aRelease = releaseStr.ToInteger(&errorCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
nsString releaseStr;
|
||||
version.Mid(releaseStr, prev, dot - prev);
|
||||
*aRelease = releaseStr.ToInteger(&errorCode);
|
||||
|
||||
prev = dot+1;
|
||||
if ( version.Length() > dot )
|
||||
{
|
||||
nsString buildStr;
|
||||
version.Mid(buildStr, prev, version.Length() - prev);
|
||||
*aBuild = buildStr.ToInteger(&errorCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return errorCode;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsInstallVersionFactory::nsInstallVersionFactory(void)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
nsInstallVersionFactory::~nsInstallVersionFactory(void)
|
||||
{
|
||||
NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction");
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersionFactory::QueryInterface(const nsIID &aIID, void **aResult)
|
||||
{
|
||||
if (! aResult)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
// Always NULL result, in case of failure
|
||||
*aResult = nsnull;
|
||||
|
||||
if (aIID.Equals(kISupportsIID)) {
|
||||
*aResult = NS_STATIC_CAST(nsISupports*, this);
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
} else if (aIID.Equals(kIFactoryIID)) {
|
||||
*aResult = NS_STATIC_CAST(nsIFactory*, this);
|
||||
AddRef();
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_NOINTERFACE;
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF(nsInstallVersionFactory);
|
||||
NS_IMPL_RELEASE(nsInstallVersionFactory);
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersionFactory::CreateInstance(nsISupports *aOuter, REFNSIID aIID, void **aResult)
|
||||
{
|
||||
if (aResult == NULL)
|
||||
{
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
*aResult = NULL;
|
||||
|
||||
/* do I have to use iSupports? */
|
||||
nsInstallVersion *inst = new nsInstallVersion();
|
||||
|
||||
if (inst == NULL)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
nsresult result = inst->QueryInterface(aIID, aResult);
|
||||
|
||||
if (NS_FAILED(result))
|
||||
delete inst;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsInstallVersionFactory::LockFactory(PRBool aLock)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
76
mozilla/xpinstall/src/nsInstallVersion.h
Normal file
76
mozilla/xpinstall/src/nsInstallVersion.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#ifndef __NS_INSTALLVERSION_H__
|
||||
#define __NS_INSTALLVERSION_H__
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIFactory.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsIScriptObjectOwner.h"
|
||||
|
||||
#include "nsIDOMInstallVersion.h"
|
||||
#include "nsSoftwareUpdate.h"
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
class nsInstallVersion: public nsIScriptObjectOwner, public nsIDOMInstallVersion
|
||||
{
|
||||
public:
|
||||
static const nsIID& IID() { static nsIID iid = NS_SoftwareUpdateInstallVersion_CID; return iid; }
|
||||
|
||||
nsInstallVersion();
|
||||
virtual ~nsInstallVersion();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
|
||||
NS_IMETHOD SetScriptObject(void* aScriptObject);
|
||||
|
||||
NS_IMETHOD Init(PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild);
|
||||
NS_IMETHOD Init(const nsString& aVersionString);
|
||||
|
||||
NS_IMETHOD GetMajor(PRInt32* aMajor);
|
||||
NS_IMETHOD SetMajor(PRInt32 aMajor);
|
||||
|
||||
NS_IMETHOD GetMinor(PRInt32* aMinor);
|
||||
NS_IMETHOD SetMinor(PRInt32 aMinor);
|
||||
|
||||
NS_IMETHOD GetRelease(PRInt32* aRelease);
|
||||
NS_IMETHOD SetRelease(PRInt32 aRelease);
|
||||
|
||||
NS_IMETHOD GetBuild(PRInt32* aBuild);
|
||||
NS_IMETHOD SetBuild(PRInt32 aBuild);
|
||||
|
||||
NS_IMETHOD ToString(nsString& aReturn);
|
||||
NS_IMETHOD CompareTo(nsIDOMInstallVersion* aVersion, PRInt32* aReturn);
|
||||
NS_IMETHOD CompareTo(const nsString& aString, PRInt32* aReturn);
|
||||
NS_IMETHOD CompareTo(PRInt32 aMajor, PRInt32 aMinor, PRInt32 aRelease, PRInt32 aBuild, PRInt32* aReturn);
|
||||
|
||||
static nsresult StringToVersionNumbers(const nsString& version, PRInt32 *aMajor, PRInt32 *aMinor, PRInt32 *aRelease, PRInt32 *aBuild);
|
||||
|
||||
private:
|
||||
void *mScriptObject;
|
||||
PRInt32 major;
|
||||
PRInt32 minor;
|
||||
PRInt32 release;
|
||||
PRInt32 build;
|
||||
};
|
||||
|
||||
|
||||
class nsInstallVersionFactory : public nsIFactory
|
||||
{
|
||||
public:
|
||||
|
||||
nsInstallVersionFactory();
|
||||
virtual ~nsInstallVersionFactory();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_IMETHOD CreateInstance(nsISupports *aOuter,
|
||||
REFNSIID aIID,
|
||||
void **aResult);
|
||||
|
||||
NS_IMETHOD LockFactory(PRBool aLock);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
2450
mozilla/xpinstall/src/nsJSInstall.cpp
Normal file
2450
mozilla/xpinstall/src/nsJSInstall.cpp
Normal file
File diff suppressed because it is too large
Load Diff
665
mozilla/xpinstall/src/nsJSInstallTriggerGlobal.cpp
Normal file
665
mozilla/xpinstall/src/nsJSInstallTriggerGlobal.cpp
Normal file
@@ -0,0 +1,665 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
/* AUTO-GENERATED. DO NOT EDIT!!! */
|
||||
|
||||
#include "jsapi.h"
|
||||
#include "nsJSUtils.h"
|
||||
#include "nscore.h"
|
||||
#include "nsIScriptContext.h"
|
||||
#include "nsIJSScriptObject.h"
|
||||
#include "nsIScriptObjectOwner.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
#include "nsIPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIDOMInstallVersion.h"
|
||||
#include "nsIDOMInstallTriggerGlobal.h"
|
||||
|
||||
extern void ConvertJSValToStr(nsString& aString,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
extern void ConvertStrToJSVal(const nsString& aProp,
|
||||
JSContext* aContext,
|
||||
jsval* aReturn);
|
||||
|
||||
extern PRBool ConvertJSValToBool(PRBool* aProp,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
extern PRBool ConvertJSValToObj(nsISupports** aSupports,
|
||||
REFNSIID aIID,
|
||||
const nsString& aTypeName,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID);
|
||||
static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID);
|
||||
static NS_DEFINE_IID(kIScriptGlobalObjectIID, NS_ISCRIPTGLOBALOBJECT_IID);
|
||||
static NS_DEFINE_IID(kIInstallTriggerGlobalIID, NS_IDOMINSTALLTRIGGERGLOBAL_IID);
|
||||
|
||||
NS_DEF_PTR(nsIDOMInstallTriggerGlobal);
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
//
|
||||
// InstallTriggerGlobal Properties Getter
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
GetInstallTriggerGlobalProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
||||
{
|
||||
nsIDOMInstallTriggerGlobal *a = (nsIDOMInstallTriggerGlobal*)JS_GetPrivate(cx, obj);
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == a) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (JSVAL_IS_INT(id)) {
|
||||
switch(JSVAL_TO_INT(id)) {
|
||||
case 0:
|
||||
default:
|
||||
return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp);
|
||||
}
|
||||
}
|
||||
else {
|
||||
return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp);
|
||||
}
|
||||
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
//
|
||||
// InstallTriggerGlobal Properties Setter
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
SetInstallTriggerGlobalProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
||||
{
|
||||
nsIDOMInstallTriggerGlobal *a = (nsIDOMInstallTriggerGlobal*)JS_GetPrivate(cx, obj);
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == a) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (JSVAL_IS_INT(id)) {
|
||||
switch(JSVAL_TO_INT(id)) {
|
||||
case 0:
|
||||
default:
|
||||
return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp);
|
||||
}
|
||||
}
|
||||
else {
|
||||
return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp);
|
||||
}
|
||||
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// InstallTriggerGlobal finalizer
|
||||
//
|
||||
PR_STATIC_CALLBACK(void)
|
||||
FinalizeInstallTriggerGlobal(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
nsJSUtils::nsGenericFinalize(cx, obj);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// InstallTriggerGlobal enumerate
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
EnumerateInstallTriggerGlobal(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
return nsJSUtils::nsGenericEnumerate(cx, obj);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// InstallTriggerGlobal resolve
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
ResolveInstallTriggerGlobal(JSContext *cx, JSObject *obj, jsval id)
|
||||
{
|
||||
return nsJSUtils::nsGenericResolve(cx, obj, id);
|
||||
}
|
||||
|
||||
//
|
||||
// Native method UpdateEnabled
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
InstallTriggerGlobalUpdateEnabled(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMInstallTriggerGlobal *nativeThis = (nsIDOMInstallTriggerGlobal*)JS_GetPrivate(cx, obj);
|
||||
JSBool rBool = JS_FALSE;
|
||||
PRBool nativeRet;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == nativeThis) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (argc >= 0) {
|
||||
|
||||
if (NS_OK != nativeThis->UpdateEnabled(&nativeRet)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = BOOLEAN_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else {
|
||||
JS_ReportError(cx, "Function UpdateEnabled requires 0 parameters");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method StartSoftwareUpdate
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
InstallTriggerGlobalStartSoftwareUpdate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMInstallTriggerGlobal *nativeThis = (nsIDOMInstallTriggerGlobal*)JS_GetPrivate(cx, obj);
|
||||
JSBool rBool = JS_FALSE;
|
||||
PRInt32 nativeRet;
|
||||
nsAutoString b0;
|
||||
PRInt32 b1;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == nativeThis) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (argc >= 2)
|
||||
{
|
||||
// public int StartSoftwareUpdate(String url,
|
||||
// int flag);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
|
||||
if(!JS_ValueToInt32(cx, argv[1], (int32 *)&b1))
|
||||
{
|
||||
JS_ReportError(cx, "2nd parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if(NS_OK != nativeThis->StartSoftwareUpdate(b0, b1, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else if(argc >= 1)
|
||||
{
|
||||
// public int StartSoftwareUpdate(String url);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
|
||||
if(NS_OK != nativeThis->StartSoftwareUpdate(b0, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "Function StartSoftwareUpdate requires 2 parameters");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method ConditionalSoftwareUpdate
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
InstallTriggerGlobalConditionalSoftwareUpdate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMInstallTriggerGlobal *nativeThis = (nsIDOMInstallTriggerGlobal*)JS_GetPrivate(cx, obj);
|
||||
JSBool rBool = JS_FALSE;
|
||||
PRInt32 nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1;
|
||||
nsAutoString b2str;
|
||||
PRInt32 b2int;
|
||||
nsAutoString b3str;
|
||||
PRInt32 b3int;
|
||||
PRInt32 b4;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == nativeThis) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 5)
|
||||
{
|
||||
// public int ConditionalSoftwareUpdate(String url,
|
||||
// String registryName,
|
||||
// int diffLevel,
|
||||
// String version, --OR-- VersionInfo version
|
||||
// int mode);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
|
||||
if(!JS_ValueToInt32(cx, argv[2], (int32 *)&b2int))
|
||||
{
|
||||
JS_ReportError(cx, "3rd parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if(!JS_ValueToInt32(cx, argv[4], (int32 *)&b4))
|
||||
{
|
||||
JS_ReportError(cx, "5th parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if(JSVAL_IS_OBJECT(argv[3]))
|
||||
{
|
||||
JSObject* jsobj = JSVAL_TO_OBJECT(argv[3]);
|
||||
JSClass* jsclass = JS_GetClass(cx, jsobj);
|
||||
if((nsnull != jsclass) && (jsclass->flags & JSCLASS_HAS_PRIVATE))
|
||||
{
|
||||
nsIDOMInstallVersion* version = (nsIDOMInstallVersion*)JS_GetPrivate(cx, jsobj);
|
||||
|
||||
if(NS_OK != nativeThis->ConditionalSoftwareUpdate(b0, b1, b2int, version, b4, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertJSValToStr(b3str, cx, argv[3]);
|
||||
if(NS_OK != nativeThis->ConditionalSoftwareUpdate(b0, b1, b2int, b3str, b4, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else if(argc >= 4)
|
||||
{
|
||||
// public int ConditionalSoftwareUpdate(String url,
|
||||
// String registryName,
|
||||
// String version, --OR-- VersionInfo version
|
||||
// int mode);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
|
||||
if(!JS_ValueToInt32(cx, argv[3], (int32 *)&b3int))
|
||||
{
|
||||
JS_ReportError(cx, "4th parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if(JSVAL_IS_OBJECT(argv[2]))
|
||||
{
|
||||
JSObject* jsobj = JSVAL_TO_OBJECT(argv[2]);
|
||||
JSClass* jsclass = JS_GetClass(cx, jsobj);
|
||||
if((nsnull != jsclass) && (jsclass->flags & JSCLASS_HAS_PRIVATE))
|
||||
{
|
||||
nsIDOMInstallVersion* version = (nsIDOMInstallVersion*)JS_GetPrivate(cx, jsobj);
|
||||
|
||||
if(NS_OK != nativeThis->ConditionalSoftwareUpdate(b0, b1, version, b3int, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertJSValToStr(b2str, cx, argv[2]);
|
||||
if(NS_OK != nativeThis->ConditionalSoftwareUpdate(b0, b1, b2str, b3int, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else if(argc >= 3)
|
||||
{
|
||||
// public int ConditionalSoftwareUpdate(String url,
|
||||
// String registryName,
|
||||
// String version); --OR-- VersionInfo version
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
|
||||
if(JSVAL_IS_OBJECT(argv[2]))
|
||||
{
|
||||
JSObject* jsobj = JSVAL_TO_OBJECT(argv[2]);
|
||||
JSClass* jsclass = JS_GetClass(cx, jsobj);
|
||||
if((nsnull != jsclass) && (jsclass->flags & JSCLASS_HAS_PRIVATE))
|
||||
{
|
||||
nsIDOMInstallVersion* version = (nsIDOMInstallVersion*)JS_GetPrivate(cx, jsobj);
|
||||
|
||||
if(NS_OK != nativeThis->ConditionalSoftwareUpdate(b0, b1, version, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertJSValToStr(b2str, cx, argv[2]);
|
||||
if(NS_OK != nativeThis->ConditionalSoftwareUpdate(b0, b1, b2str, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "Function ConditionalSoftwareUpdate requires 5 parameters");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method CompareVersion
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
InstallTriggerGlobalCompareVersion(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMInstallTriggerGlobal *nativeThis = (nsIDOMInstallTriggerGlobal*)JS_GetPrivate(cx, obj);
|
||||
JSBool rBool = JS_FALSE;
|
||||
PRInt32 nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1str;
|
||||
PRInt32 b1int;
|
||||
PRInt32 b2int;
|
||||
PRInt32 b3int;
|
||||
PRInt32 b4int;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == nativeThis) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 5)
|
||||
{
|
||||
// public int CompareVersion(String registryName,
|
||||
// int major,
|
||||
// int minor,
|
||||
// int release,
|
||||
// int build);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
|
||||
if(!JS_ValueToInt32(cx, argv[1], (int32 *)&b1int))
|
||||
{
|
||||
JS_ReportError(cx, "2th parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
if(!JS_ValueToInt32(cx, argv[2], (int32 *)&b2int))
|
||||
{
|
||||
JS_ReportError(cx, "3th parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
if(!JS_ValueToInt32(cx, argv[3], (int32 *)&b3int))
|
||||
{
|
||||
JS_ReportError(cx, "4th parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
if(!JS_ValueToInt32(cx, argv[4], (int32 *)&b4int))
|
||||
{
|
||||
JS_ReportError(cx, "5th parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if(NS_OK != nativeThis->CompareVersion(b0, b1int, b2int, b3int, b4int, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else if(argc >= 2)
|
||||
{
|
||||
// public int CompareVersion(String registryName,
|
||||
// String version); --OR-- VersionInfo version
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
|
||||
if(JSVAL_IS_OBJECT(argv[1]))
|
||||
{
|
||||
JSObject* jsobj = JSVAL_TO_OBJECT(argv[1]);
|
||||
JSClass* jsclass = JS_GetClass(cx, jsobj);
|
||||
if((nsnull != jsclass) && (jsclass->flags & JSCLASS_HAS_PRIVATE))
|
||||
{
|
||||
nsIDOMInstallVersion* version = (nsIDOMInstallVersion*)JS_GetPrivate(cx, jsobj);
|
||||
|
||||
if(NS_OK != nativeThis->CompareVersion(b0, version, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertJSValToStr(b1str, cx, argv[1]);
|
||||
if(NS_OK != nativeThis->CompareVersion(b0, b1str, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "Function CompareVersion requires 5 parameters");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
//
|
||||
// class for InstallTriggerGlobal
|
||||
//
|
||||
JSClass InstallTriggerGlobalClass = {
|
||||
"InstallTriggerGlobal",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
GetInstallTriggerGlobalProperty,
|
||||
SetInstallTriggerGlobalProperty,
|
||||
EnumerateInstallTriggerGlobal,
|
||||
ResolveInstallTriggerGlobal,
|
||||
JS_ConvertStub,
|
||||
FinalizeInstallTriggerGlobal
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// InstallTriggerGlobal class properties
|
||||
//
|
||||
static JSPropertySpec InstallTriggerGlobalProperties[] =
|
||||
{
|
||||
{0}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// InstallTriggerGlobal class methods
|
||||
//
|
||||
static JSFunctionSpec InstallTriggerGlobalMethods[] =
|
||||
{
|
||||
{"UpdateEnabled", InstallTriggerGlobalUpdateEnabled, 0},
|
||||
{"StartSoftwareUpdate", InstallTriggerGlobalStartSoftwareUpdate, 2},
|
||||
{"ConditionalSoftwareUpdate", InstallTriggerGlobalConditionalSoftwareUpdate, 5},
|
||||
{"CompareVersion", InstallTriggerGlobalCompareVersion, 5},
|
||||
{0}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// InstallTriggerGlobal constructor
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
InstallTriggerGlobal(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// InstallTriggerGlobal class initialization
|
||||
//
|
||||
nsresult NS_InitInstallTriggerGlobalClass(nsIScriptContext *aContext, void **aPrototype)
|
||||
{
|
||||
JSContext *jscontext = (JSContext *)aContext->GetNativeContext();
|
||||
JSObject *proto = nsnull;
|
||||
JSObject *constructor = nsnull;
|
||||
JSObject *parent_proto = nsnull;
|
||||
JSObject *global = JS_GetGlobalObject(jscontext);
|
||||
jsval vp;
|
||||
|
||||
if ((PR_TRUE != JS_LookupProperty(jscontext, global, "InstallTriggerGlobal", &vp)) ||
|
||||
!JSVAL_IS_OBJECT(vp) ||
|
||||
((constructor = JSVAL_TO_OBJECT(vp)) == nsnull) ||
|
||||
(PR_TRUE != JS_LookupProperty(jscontext, JSVAL_TO_OBJECT(vp), "prototype", &vp)) ||
|
||||
!JSVAL_IS_OBJECT(vp)) {
|
||||
|
||||
proto = JS_InitClass(jscontext, // context
|
||||
global, // global object
|
||||
parent_proto, // parent proto
|
||||
&InstallTriggerGlobalClass, // JSClass
|
||||
InstallTriggerGlobal, // JSNative ctor
|
||||
0, // ctor args
|
||||
InstallTriggerGlobalProperties, // proto props
|
||||
InstallTriggerGlobalMethods, // proto funcs
|
||||
nsnull, // ctor props (static)
|
||||
nsnull); // ctor funcs (static)
|
||||
if (nsnull == proto) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if ((PR_TRUE == JS_LookupProperty(jscontext, global, "InstallTriggerGlobal", &vp)) &&
|
||||
JSVAL_IS_OBJECT(vp) &&
|
||||
((constructor = JSVAL_TO_OBJECT(vp)) != nsnull)) {
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallTriggerGlobal::MAJOR_DIFF);
|
||||
JS_SetProperty(jscontext, constructor, "MAJOR_DIFF", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallTriggerGlobal::MINOR_DIFF);
|
||||
JS_SetProperty(jscontext, constructor, "MINOR_DIFF", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallTriggerGlobal::REL_DIFF);
|
||||
JS_SetProperty(jscontext, constructor, "REL_DIFF", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallTriggerGlobal::BLD_DIFF);
|
||||
JS_SetProperty(jscontext, constructor, "BLD_DIFF", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallTriggerGlobal::EQUAL);
|
||||
JS_SetProperty(jscontext, constructor, "EQUAL", &vp);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else if ((nsnull != constructor) && JSVAL_IS_OBJECT(vp)) {
|
||||
proto = JSVAL_TO_OBJECT(vp);
|
||||
}
|
||||
else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (aPrototype) {
|
||||
*aPrototype = proto;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Method for creating a new InstallTriggerGlobal JavaScript object
|
||||
//
|
||||
extern "C" NS_DOM nsresult NS_NewScriptInstallTriggerGlobal(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn)
|
||||
{
|
||||
NS_PRECONDITION(nsnull != aContext && nsnull != aSupports && nsnull != aReturn, "null argument to NS_NewScriptInstallTriggerGlobal");
|
||||
JSObject *proto;
|
||||
JSObject *parent;
|
||||
nsIScriptObjectOwner *owner;
|
||||
JSContext *jscontext = (JSContext *)aContext->GetNativeContext();
|
||||
nsresult result = NS_OK;
|
||||
nsIDOMInstallTriggerGlobal *aInstallTriggerGlobal;
|
||||
|
||||
if (nsnull == aParent) {
|
||||
parent = nsnull;
|
||||
}
|
||||
else if (NS_OK == aParent->QueryInterface(kIScriptObjectOwnerIID, (void**)&owner)) {
|
||||
if (NS_OK != owner->GetScriptObject(aContext, (void **)&parent)) {
|
||||
NS_RELEASE(owner);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
NS_RELEASE(owner);
|
||||
}
|
||||
else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (NS_OK != NS_InitInstallTriggerGlobalClass(aContext, (void **)&proto)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
result = aSupports->QueryInterface(kIInstallTriggerGlobalIID, (void **)&aInstallTriggerGlobal);
|
||||
if (NS_OK != result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// create a js object for this class
|
||||
*aReturn = JS_NewObject(jscontext, &InstallTriggerGlobalClass, proto, parent);
|
||||
if (nsnull != *aReturn) {
|
||||
// connect the native object to the js object
|
||||
JS_SetPrivate(jscontext, (JSObject *)*aReturn, aInstallTriggerGlobal);
|
||||
}
|
||||
else {
|
||||
NS_RELEASE(aInstallTriggerGlobal);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
659
mozilla/xpinstall/src/nsJSInstallVersion.cpp
Normal file
659
mozilla/xpinstall/src/nsJSInstallVersion.cpp
Normal file
@@ -0,0 +1,659 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
/* AUTO-GENERATED. DO NOT EDIT!!! */
|
||||
|
||||
#include "jsapi.h"
|
||||
#include "nsJSUtils.h"
|
||||
#include "nscore.h"
|
||||
#include "nsIScriptContext.h"
|
||||
#include "nsIJSScriptObject.h"
|
||||
#include "nsIScriptObjectOwner.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
#include "nsIPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIDOMInstallVersion.h"
|
||||
#include "nsIScriptNameSpaceManager.h"
|
||||
#include "nsRepository.h"
|
||||
#include "nsDOMCID.h"
|
||||
|
||||
extern void ConvertJSValToStr(nsString& aString,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
extern void ConvertStrToJSVal(const nsString& aProp,
|
||||
JSContext* aContext,
|
||||
jsval* aReturn);
|
||||
|
||||
extern PRBool ConvertJSValToBool(PRBool* aProp,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
extern PRBool ConvertJSValToObj(nsISupports** aSupports,
|
||||
REFNSIID aIID,
|
||||
const nsString& aTypeName,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
void ConvertJSvalToVersionString(nsString& versionString, JSContext* cx, jsval* argument);
|
||||
|
||||
|
||||
static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID);
|
||||
static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID);
|
||||
static NS_DEFINE_IID(kIScriptGlobalObjectIID, NS_ISCRIPTGLOBALOBJECT_IID);
|
||||
static NS_DEFINE_IID(kIInstallVersionIID, NS_IDOMINSTALLVERSION_IID);
|
||||
|
||||
NS_DEF_PTR(nsIDOMInstallVersion);
|
||||
|
||||
//
|
||||
// InstallVersion property ids
|
||||
//
|
||||
enum InstallVersion_slots {
|
||||
INSTALLVERSION_MAJOR = -1,
|
||||
INSTALLVERSION_MINOR = -2,
|
||||
INSTALLVERSION_RELEASE = -3,
|
||||
INSTALLVERSION_BUILD = -4
|
||||
};
|
||||
|
||||
/***********************************************************************/
|
||||
//
|
||||
// InstallVersion Properties Getter
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
GetInstallVersionProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
||||
{
|
||||
nsIDOMInstallVersion *a = (nsIDOMInstallVersion*)JS_GetPrivate(cx, obj);
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == a) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (JSVAL_IS_INT(id)) {
|
||||
switch(JSVAL_TO_INT(id)) {
|
||||
case INSTALLVERSION_MAJOR:
|
||||
{
|
||||
PRInt32 prop;
|
||||
if (NS_OK == a->GetMajor(&prop)) {
|
||||
*vp = INT_TO_JSVAL(prop);
|
||||
}
|
||||
else {
|
||||
return JS_FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case INSTALLVERSION_MINOR:
|
||||
{
|
||||
PRInt32 prop;
|
||||
if (NS_OK == a->GetMinor(&prop)) {
|
||||
*vp = INT_TO_JSVAL(prop);
|
||||
}
|
||||
else {
|
||||
return JS_FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case INSTALLVERSION_RELEASE:
|
||||
{
|
||||
PRInt32 prop;
|
||||
if (NS_OK == a->GetRelease(&prop)) {
|
||||
*vp = INT_TO_JSVAL(prop);
|
||||
}
|
||||
else {
|
||||
return JS_FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case INSTALLVERSION_BUILD:
|
||||
{
|
||||
PRInt32 prop;
|
||||
if (NS_OK == a->GetBuild(&prop)) {
|
||||
*vp = INT_TO_JSVAL(prop);
|
||||
}
|
||||
else {
|
||||
return JS_FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp);
|
||||
}
|
||||
}
|
||||
else {
|
||||
return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp);
|
||||
}
|
||||
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
//
|
||||
// InstallVersion Properties Setter
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
SetInstallVersionProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
||||
{
|
||||
nsIDOMInstallVersion *a = (nsIDOMInstallVersion*)JS_GetPrivate(cx, obj);
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == a) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (JSVAL_IS_INT(id)) {
|
||||
switch(JSVAL_TO_INT(id)) {
|
||||
case INSTALLVERSION_MAJOR:
|
||||
{
|
||||
PRInt32 prop;
|
||||
int32 temp;
|
||||
if (JSVAL_IS_NUMBER(*vp) && JS_ValueToInt32(cx, *vp, &temp)) {
|
||||
prop = (PRInt32)temp;
|
||||
}
|
||||
else {
|
||||
JS_ReportError(cx, "Parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
a->SetMajor(prop);
|
||||
|
||||
break;
|
||||
}
|
||||
case INSTALLVERSION_MINOR:
|
||||
{
|
||||
PRInt32 prop;
|
||||
int32 temp;
|
||||
if (JSVAL_IS_NUMBER(*vp) && JS_ValueToInt32(cx, *vp, &temp)) {
|
||||
prop = (PRInt32)temp;
|
||||
}
|
||||
else {
|
||||
JS_ReportError(cx, "Parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
a->SetMinor(prop);
|
||||
|
||||
break;
|
||||
}
|
||||
case INSTALLVERSION_RELEASE:
|
||||
{
|
||||
PRInt32 prop;
|
||||
int32 temp;
|
||||
if (JSVAL_IS_NUMBER(*vp) && JS_ValueToInt32(cx, *vp, &temp)) {
|
||||
prop = (PRInt32)temp;
|
||||
}
|
||||
else {
|
||||
JS_ReportError(cx, "Parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
a->SetRelease(prop);
|
||||
|
||||
break;
|
||||
}
|
||||
case INSTALLVERSION_BUILD:
|
||||
{
|
||||
PRInt32 prop;
|
||||
int32 temp;
|
||||
if (JSVAL_IS_NUMBER(*vp) && JS_ValueToInt32(cx, *vp, &temp)) {
|
||||
prop = (PRInt32)temp;
|
||||
}
|
||||
else {
|
||||
JS_ReportError(cx, "Parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
a->SetBuild(prop);
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp);
|
||||
}
|
||||
}
|
||||
else {
|
||||
return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp);
|
||||
}
|
||||
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// InstallVersion finalizer
|
||||
//
|
||||
PR_STATIC_CALLBACK(void)
|
||||
FinalizeInstallVersion(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
nsJSUtils::nsGenericFinalize(cx, obj);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// InstallVersion enumerate
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
EnumerateInstallVersion(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
return nsJSUtils::nsGenericEnumerate(cx, obj);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// InstallVersion resolve
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
ResolveInstallVersion(JSContext *cx, JSObject *obj, jsval id)
|
||||
{
|
||||
return nsJSUtils::nsGenericResolve(cx, obj, id);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method Init
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
InstallVersionInit(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMInstallVersion *nativeThis = (nsIDOMInstallVersion*)JS_GetPrivate(cx, obj);
|
||||
JSBool rBool = JS_FALSE;
|
||||
nsAutoString b0;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == nativeThis) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (argc >= 1) {
|
||||
|
||||
nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]);
|
||||
|
||||
if (NS_OK != nativeThis->Init(b0)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = JSVAL_VOID;
|
||||
}
|
||||
else {
|
||||
JS_ReportError(cx, "Function init requires 1 parameters");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method ToString
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
InstallVersionToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMInstallVersion *nativeThis = (nsIDOMInstallVersion*)JS_GetPrivate(cx, obj);
|
||||
JSBool rBool = JS_FALSE;
|
||||
nsAutoString nativeRet;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == nativeThis) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if (argc >= 0) {
|
||||
|
||||
if (NS_OK != nativeThis->ToString(nativeRet)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
nsJSUtils::nsConvertStringToJSVal(nativeRet, cx, rval);
|
||||
}
|
||||
else {
|
||||
JS_ReportError(cx, "Function toString requires 0 parameters");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method CompareTo
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
InstallVersionCompareTo(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMInstallVersion *nativeThis = (nsIDOMInstallVersion*)JS_GetPrivate(cx, obj);
|
||||
JSBool rBool = JS_FALSE;
|
||||
PRInt32 nativeRet;
|
||||
nsString b0str;
|
||||
PRInt32 b0int;
|
||||
PRInt32 b1int;
|
||||
PRInt32 b2int;
|
||||
PRInt32 b3int;
|
||||
nsIDOMInstallVersionPtr versionObj;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == nativeThis) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 4)
|
||||
{
|
||||
// public int CompareTo(int major,
|
||||
// int minor,
|
||||
// int release,
|
||||
// int build);
|
||||
|
||||
if(!JSVAL_IS_INT(argv[0]))
|
||||
{
|
||||
JS_ReportError(cx, "1st parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
else if(!JSVAL_IS_INT(argv[1]))
|
||||
{
|
||||
JS_ReportError(cx, "2nd parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
else if(!JSVAL_IS_INT(argv[2]))
|
||||
{
|
||||
JS_ReportError(cx, "3rd parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
else if(!JSVAL_IS_INT(argv[3]))
|
||||
{
|
||||
JS_ReportError(cx, "4th parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
b0int = JSVAL_TO_INT(argv[0]);
|
||||
b1int = JSVAL_TO_INT(argv[1]);
|
||||
b2int = JSVAL_TO_INT(argv[2]);
|
||||
b3int = JSVAL_TO_INT(argv[3]);
|
||||
|
||||
if(NS_OK != nativeThis->CompareTo(b0int, b1int, b2int, b3int, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else if(argc >= 1)
|
||||
{
|
||||
// public int AddDirectory(String version); --OR-- VersionInfo version
|
||||
|
||||
if(JSVAL_IS_OBJECT(argv[0]))
|
||||
{
|
||||
if(JS_FALSE == ConvertJSValToObj((nsISupports **)&versionObj,
|
||||
kIInstallVersionIID,
|
||||
"InstallVersion",
|
||||
cx,
|
||||
argv[0]))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if(NS_OK != nativeThis->CompareTo(versionObj, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertJSValToStr(b0str, cx, argv[0]);
|
||||
|
||||
if(NS_OK != nativeThis->CompareTo(b0str, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "Function compareTo requires 4 parameters");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
//
|
||||
// class for InstallVersion
|
||||
//
|
||||
JSClass InstallVersionClass = {
|
||||
"InstallVersion",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
GetInstallVersionProperty,
|
||||
SetInstallVersionProperty,
|
||||
EnumerateInstallVersion,
|
||||
ResolveInstallVersion,
|
||||
JS_ConvertStub,
|
||||
FinalizeInstallVersion
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// InstallVersion class properties
|
||||
//
|
||||
static JSPropertySpec InstallVersionProperties[] =
|
||||
{
|
||||
{"major", INSTALLVERSION_MAJOR, JSPROP_ENUMERATE},
|
||||
{"minor", INSTALLVERSION_MINOR, JSPROP_ENUMERATE},
|
||||
{"release", INSTALLVERSION_RELEASE, JSPROP_ENUMERATE},
|
||||
{"build", INSTALLVERSION_BUILD, JSPROP_ENUMERATE},
|
||||
{0}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// InstallVersion class methods
|
||||
//
|
||||
static JSFunctionSpec InstallVersionMethods[] =
|
||||
{
|
||||
{"init", InstallVersionInit, 1},
|
||||
{"toString", InstallVersionToString, 0},
|
||||
{"compareTo", InstallVersionCompareTo, 1},
|
||||
{0}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// InstallVersion constructor
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
InstallVersion(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsresult result;
|
||||
nsIID classID;
|
||||
nsIScriptContext* context = (nsIScriptContext*)JS_GetContextPrivate(cx);
|
||||
nsIScriptNameSpaceManager* manager;
|
||||
nsIDOMInstallVersion *nativeThis;
|
||||
nsIScriptObjectOwner *owner = nsnull;
|
||||
|
||||
static NS_DEFINE_IID(kIDOMInstallVersionIID, NS_IDOMINSTALLVERSION_IID);
|
||||
|
||||
result = context->GetNameSpaceManager(&manager);
|
||||
if (NS_OK != result) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
result = manager->LookupName("InstallVersion", PR_TRUE, classID);
|
||||
NS_RELEASE(manager);
|
||||
if (NS_OK != result) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
result = nsRepository::CreateInstance(classID,
|
||||
nsnull,
|
||||
kIDOMInstallVersionIID,
|
||||
(void **)&nativeThis);
|
||||
if (NS_OK != result) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
// XXX We should be calling Init() on the instance
|
||||
|
||||
result = nativeThis->QueryInterface(kIScriptObjectOwnerIID, (void **)&owner);
|
||||
if (NS_OK != result) {
|
||||
NS_RELEASE(nativeThis);
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
owner->SetScriptObject((void *)obj);
|
||||
JS_SetPrivate(cx, obj, nativeThis);
|
||||
|
||||
NS_RELEASE(owner);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// InstallVersion class initialization
|
||||
//
|
||||
nsresult NS_InitInstallVersionClass(nsIScriptContext *aContext, void **aPrototype)
|
||||
{
|
||||
JSContext *jscontext = (JSContext *)aContext->GetNativeContext();
|
||||
JSObject *proto = nsnull;
|
||||
JSObject *constructor = nsnull;
|
||||
JSObject *parent_proto = nsnull;
|
||||
JSObject *global = JS_GetGlobalObject(jscontext);
|
||||
jsval vp;
|
||||
|
||||
if ((PR_TRUE != JS_LookupProperty(jscontext, global, "InstallVersion", &vp)) ||
|
||||
!JSVAL_IS_OBJECT(vp) ||
|
||||
((constructor = JSVAL_TO_OBJECT(vp)) == nsnull) ||
|
||||
(PR_TRUE != JS_LookupProperty(jscontext, JSVAL_TO_OBJECT(vp), "prototype", &vp)) ||
|
||||
!JSVAL_IS_OBJECT(vp)) {
|
||||
|
||||
proto = JS_InitClass(jscontext, // context
|
||||
global, // global object
|
||||
parent_proto, // parent proto
|
||||
&InstallVersionClass, // JSClass
|
||||
InstallVersion, // JSNative ctor
|
||||
0, // ctor args
|
||||
InstallVersionProperties, // proto props
|
||||
InstallVersionMethods, // proto funcs
|
||||
nsnull, // ctor props (static)
|
||||
nsnull); // ctor funcs (static)
|
||||
if (nsnull == proto) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if ((PR_TRUE == JS_LookupProperty(jscontext, global, "InstallVersion", &vp)) &&
|
||||
JSVAL_IS_OBJECT(vp) &&
|
||||
((constructor = JSVAL_TO_OBJECT(vp)) != nsnull)) {
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallVersion::EQUAL);
|
||||
JS_SetProperty(jscontext, constructor, "EQUAL", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallVersion::BLD_DIFF);
|
||||
JS_SetProperty(jscontext, constructor, "BLD_DIFF", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallVersion::BLD_DIFF_MINUS);
|
||||
JS_SetProperty(jscontext, constructor, "BLD_DIFF_MINUS", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallVersion::REL_DIFF);
|
||||
JS_SetProperty(jscontext, constructor, "REL_DIFF", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallVersion::REL_DIFF_MINUS);
|
||||
JS_SetProperty(jscontext, constructor, "REL_DIFF_MINUS", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallVersion::MINOR_DIFF);
|
||||
JS_SetProperty(jscontext, constructor, "MINOR_DIFF", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallVersion::MINOR_DIFF_MINUS);
|
||||
JS_SetProperty(jscontext, constructor, "MINOR_DIFF_MINUS", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallVersion::MAJOR_DIFF);
|
||||
JS_SetProperty(jscontext, constructor, "MAJOR_DIFF", &vp);
|
||||
|
||||
vp = INT_TO_JSVAL(nsIDOMInstallVersion::MAJOR_DIFF_MINUS);
|
||||
JS_SetProperty(jscontext, constructor, "MAJOR_DIFF_MINUS", &vp);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else if ((nsnull != constructor) && JSVAL_IS_OBJECT(vp)) {
|
||||
proto = JSVAL_TO_OBJECT(vp);
|
||||
}
|
||||
else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (aPrototype) {
|
||||
*aPrototype = proto;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Method for creating a new InstallVersion JavaScript object
|
||||
//
|
||||
extern "C" NS_DOM nsresult NS_NewScriptInstallVersion(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn)
|
||||
{
|
||||
NS_PRECONDITION(nsnull != aContext && nsnull != aSupports && nsnull != aReturn, "null argument to NS_NewScriptInstallVersion");
|
||||
JSObject *proto;
|
||||
JSObject *parent;
|
||||
nsIScriptObjectOwner *owner;
|
||||
JSContext *jscontext = (JSContext *)aContext->GetNativeContext();
|
||||
nsresult result = NS_OK;
|
||||
nsIDOMInstallVersion *aInstallVersion;
|
||||
|
||||
if (nsnull == aParent) {
|
||||
parent = nsnull;
|
||||
}
|
||||
else if (NS_OK == aParent->QueryInterface(kIScriptObjectOwnerIID, (void**)&owner)) {
|
||||
if (NS_OK != owner->GetScriptObject(aContext, (void **)&parent)) {
|
||||
NS_RELEASE(owner);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
NS_RELEASE(owner);
|
||||
}
|
||||
else {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (NS_OK != NS_InitInstallVersionClass(aContext, (void **)&proto)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
result = aSupports->QueryInterface(kIInstallVersionIID, (void **)&aInstallVersion);
|
||||
if (NS_OK != result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// create a js object for this class
|
||||
*aReturn = JS_NewObject(jscontext, &InstallVersionClass, proto, parent);
|
||||
if (nsnull != *aReturn) {
|
||||
// connect the native object to the js object
|
||||
JS_SetPrivate(jscontext, (JSObject *)*aReturn, aInstallVersion);
|
||||
}
|
||||
else {
|
||||
NS_RELEASE(aInstallVersion);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
207
mozilla/xpinstall/src/nsJSWinProfile.cpp
Normal file
207
mozilla/xpinstall/src/nsJSWinProfile.cpp
Normal file
@@ -0,0 +1,207 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "jsapi.h"
|
||||
#include "nscore.h"
|
||||
#include "nsIScriptContext.h"
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsInstall.h"
|
||||
#include "nsWinProfile.h"
|
||||
#include "nsJSWinProfile.h"
|
||||
|
||||
extern void ConvertJSValToStr(nsString& aString,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
extern void ConvertStrToJSVal(const nsString& aProp,
|
||||
JSContext* aContext,
|
||||
jsval* aReturn);
|
||||
|
||||
extern PRBool ConvertJSValToBool(PRBool* aProp,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
extern PRBool ConvertJSValToObj(nsISupports** aSupports,
|
||||
REFNSIID aIID,
|
||||
const nsString& aTypeName,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
|
||||
static void PR_CALLBACK WinProfileCleanup(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
nsWinProfile *nativeThis = (nsWinProfile*)JS_GetPrivate(cx, obj);
|
||||
delete nativeThis;
|
||||
}
|
||||
|
||||
/***********************************************************************************/
|
||||
// Native mothods for WinProfile functions
|
||||
|
||||
//
|
||||
// Native method GetString
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinProfileGetString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinProfile *nativeThis = (nsWinProfile*)JS_GetPrivate(cx, obj);
|
||||
nsString nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 2)
|
||||
{
|
||||
// public int getString ( String section,
|
||||
// String key);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
|
||||
nativeThis->getString(b0, b1, &nativeRet);
|
||||
|
||||
ConvertStrToJSVal(nativeRet, cx, rval);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "WinProfile.getString() parameters error");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// Native method WriteString
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinProfileWriteString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinProfile *nativeThis = (nsWinProfile*)JS_GetPrivate(cx, obj);
|
||||
PRInt32 nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1;
|
||||
nsAutoString b2;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 3)
|
||||
{
|
||||
// public int writeString ( String section,
|
||||
// String key,
|
||||
// String value);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
ConvertJSValToStr(b2, cx, argv[2]);
|
||||
|
||||
if(NS_OK != nativeThis->writeString(b0, b1, b2, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "WinProfile.writeString() parameters error");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// WinProfile constructor
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinProfile(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
/***********************************************************************/
|
||||
//
|
||||
// class for WinProfile
|
||||
//
|
||||
JSClass WinProfileClass = {
|
||||
"WinProfile",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_EnumerateStub,
|
||||
JS_ResolveStub,
|
||||
JS_ConvertStub,
|
||||
WinProfileCleanup
|
||||
};
|
||||
|
||||
|
||||
static JSConstDoubleSpec winprofile_constants[] =
|
||||
{
|
||||
{0}
|
||||
};
|
||||
|
||||
//
|
||||
// WinProfile class methods
|
||||
//
|
||||
static JSFunctionSpec WinProfileMethods[] =
|
||||
{
|
||||
{"getString", WinProfileGetString, 2},
|
||||
{"writeString", WinProfileWriteString, 3},
|
||||
{0}
|
||||
};
|
||||
|
||||
PRInt32
|
||||
InitWinProfilePrototype(JSContext *jscontext, JSObject *global, JSObject **winProfilePrototype)
|
||||
{
|
||||
*winProfilePrototype = JS_InitClass( jscontext, // context
|
||||
global, // global object
|
||||
nsnull, // parent proto
|
||||
&WinProfileClass, // JSClass
|
||||
nsnull, // JSNative ctor
|
||||
0, // ctor args
|
||||
nsnull, // proto props
|
||||
nsnull, // proto funcs
|
||||
nsnull, // ctor props (static)
|
||||
WinProfileMethods); // ctor funcs (static)
|
||||
|
||||
if(nsnull == *winProfilePrototype)
|
||||
{
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if(PR_FALSE == JS_DefineConstDoubles(jscontext, *winProfilePrototype, winprofile_constants))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
25
mozilla/xpinstall/src/nsJSWinProfile.h
Normal file
25
mozilla/xpinstall/src/nsJSWinProfile.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef __NS_JSWINPROTOTYPE_H__
|
||||
#define __NS_JSWINPROTOTYPE_H__
|
||||
|
||||
PRInt32
|
||||
InitWinProfilePrototype(JSContext *jscontext, JSObject *global, JSObject **winRegPrototype);
|
||||
|
||||
#endif
|
||||
514
mozilla/xpinstall/src/nsJSWinReg.cpp
Normal file
514
mozilla/xpinstall/src/nsJSWinReg.cpp
Normal file
@@ -0,0 +1,514 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "jsapi.h"
|
||||
#include "nscore.h"
|
||||
#include "nsIScriptContext.h"
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsInstall.h"
|
||||
#include "nsWinReg.h"
|
||||
#include "nsJSWinReg.h"
|
||||
|
||||
static void PR_CALLBACK WinRegCleanup(JSContext *cx, JSObject *obj);
|
||||
|
||||
extern void ConvertJSValToStr(nsString& aString,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
extern void ConvertStrToJSVal(const nsString& aProp,
|
||||
JSContext* aContext,
|
||||
jsval* aReturn);
|
||||
|
||||
extern PRBool ConvertJSValToBool(PRBool* aProp,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
extern PRBool ConvertJSValToObj(nsISupports** aSupports,
|
||||
REFNSIID aIID,
|
||||
const nsString& aTypeName,
|
||||
JSContext* aContext,
|
||||
jsval aValue);
|
||||
|
||||
|
||||
static void PR_CALLBACK WinRegCleanup(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
delete nativeThis;
|
||||
}
|
||||
|
||||
/***********************************************************************************/
|
||||
// Native mothods for WinReg functions
|
||||
|
||||
//
|
||||
// Native method SetRootKey
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinRegSetRootKey(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
JSBool rBool = JS_FALSE;
|
||||
PRInt32 b0;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 1)
|
||||
{
|
||||
// public int setRootKey(PRInt32 key);
|
||||
|
||||
if(!JS_ValueToInt32(cx, argv[0], (int32 *)&b0))
|
||||
{
|
||||
JS_ReportError(cx, "Parameter must be a number");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if(NS_OK != nativeThis->setRootKey(b0))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = JSVAL_VOID;
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "Function SetRootKey requires 1 parameters");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method CreateKey
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinRegCreateKey(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
PRInt32 nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 2)
|
||||
{
|
||||
// public int createKey ( String subKey,
|
||||
// String className);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
|
||||
if(NS_OK != nativeThis->createKey(b0, b1, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "WinReg.CreateKey() parameters error");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// Native method DeleteKey
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinRegDeleteKey(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
PRInt32 nativeRet;
|
||||
nsAutoString b0;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 1)
|
||||
{
|
||||
// public int deleteKey ( String subKey);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
|
||||
if(NS_OK != nativeThis->deleteKey(b0, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "WinReg.DeleteKey() parameters error");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method DeleteValue
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinRegDeleteValue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
PRInt32 nativeRet;
|
||||
nsString b0;
|
||||
nsString b1;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 2)
|
||||
{
|
||||
// public int deleteValue ( String subKey,
|
||||
// String valueName);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
|
||||
if(NS_OK != nativeThis->deleteValue(b0, b1, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "WinReg.DeleteValue() parameters error");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// Native method SetValueString
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinRegSetValueString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
PRInt32 nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1;
|
||||
nsAutoString b2;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 3)
|
||||
{
|
||||
// public int setValueString ( String subKey,
|
||||
// String valueName,
|
||||
// String value);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
ConvertJSValToStr(b2, cx, argv[2]);
|
||||
|
||||
if(NS_OK != nativeThis->setValueString(b0, b1, b2, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "WinReg.SetValueString() parameters error");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// Native method GetValueString
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinRegGetValueString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
nsString* nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 2)
|
||||
{
|
||||
// public int getValueString ( String subKey,
|
||||
// String valueName);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
|
||||
if(NS_OK != nativeThis->getValueString(b0, b1, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "WinReg.GetValueString() parameters error");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// Native method SetValue
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinRegSetValue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
PRInt32 nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1;
|
||||
// nsWinRegItem *b2;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 3)
|
||||
{
|
||||
// public int setValue ( String subKey,
|
||||
// String valueName,
|
||||
// nsWinRegItem *value);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
|
||||
// fix: this parameter is an object, not a string.
|
||||
// A way needs to be figured out to convert the JSVAL to this object type
|
||||
// ConvertJSValToStr(b2, cx, argv[2]);
|
||||
|
||||
// if(NS_OK != nativeThis->setValue(b0, b1, b2, &nativeRet))
|
||||
// {
|
||||
// return JS_FALSE;
|
||||
// }
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "WinReg.SetValue() parameters error");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// Native method GetValue
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinRegGetValue(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
nsWinRegValue *nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
if(argc >= 2)
|
||||
{
|
||||
// public int getValue ( String subKey,
|
||||
// String valueName);
|
||||
|
||||
ConvertJSValToStr(b0, cx, argv[0]);
|
||||
ConvertJSValToStr(b1, cx, argv[1]);
|
||||
|
||||
if(NS_OK != nativeThis->getValue(b0, b1, &nativeRet))
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
}
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "WinReg.GetValue() parameters error");
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// Native method InstallObject
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinRegInstallObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsWinReg *nativeThis = (nsWinReg*)JS_GetPrivate(cx, obj);
|
||||
nsInstall *nativeRet;
|
||||
nsAutoString b0;
|
||||
nsAutoString b1;
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if(nsnull == nativeThis)
|
||||
{
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
// public int installObject ();
|
||||
|
||||
nativeRet = nativeThis->installObject();
|
||||
|
||||
*rval = INT_TO_JSVAL(nativeRet);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// WinReg constructor
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
WinReg(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
//
|
||||
// class for WinReg
|
||||
//
|
||||
JSClass WinRegClass = {
|
||||
"WinReg",
|
||||
JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_PropertyStub,
|
||||
JS_EnumerateStub,
|
||||
JS_ResolveStub,
|
||||
JS_ConvertStub,
|
||||
WinRegCleanup
|
||||
};
|
||||
|
||||
static JSConstDoubleSpec winreg_constants[] =
|
||||
{
|
||||
{ nsWinReg::HKEY_CLASSES_ROOT, "HKEY_CLASSES_ROOT" },
|
||||
{ nsWinReg::HKEY_CURRENT_USER, "HKEY_CURRENT_USER" },
|
||||
{ nsWinReg::HKEY_LOCAL_MACHINE, "HKEY_LOCAL_MACHINE" },
|
||||
{ nsWinReg::HKEY_USERS, "HKEY_USERS" },
|
||||
{0}
|
||||
};
|
||||
|
||||
//
|
||||
// WinReg class methods
|
||||
//
|
||||
static JSFunctionSpec WinRegMethods[] =
|
||||
{
|
||||
{"setRootKey", WinRegSetRootKey, 1},
|
||||
{"createKey", WinRegCreateKey, 2},
|
||||
{"deleteKey", WinRegDeleteKey, 1},
|
||||
{"deleteValue", WinRegDeleteValue, 2},
|
||||
{"setValueString", WinRegSetValueString, 3},
|
||||
{"getValueString", WinRegGetValueString, 2},
|
||||
{"setValue", WinRegSetValue, 3},
|
||||
{"getValue", WinRegGetValue, 2},
|
||||
{"installObject", WinRegInstallObject, 0},
|
||||
{0}
|
||||
};
|
||||
|
||||
PRInt32
|
||||
InitWinRegPrototype(JSContext *jscontext, JSObject *global, JSObject **winRegPrototype)
|
||||
{
|
||||
*winRegPrototype = JS_InitClass( jscontext, // context
|
||||
global, // global object
|
||||
nsnull, // parent proto
|
||||
&WinRegClass, // JSClass
|
||||
nsnull, // JSNative ctor
|
||||
0, // ctor args
|
||||
nsnull, // proto props
|
||||
nsnull, // proto funcs
|
||||
nsnull, // ctor props (static)
|
||||
WinRegMethods); // ctor funcs (static)
|
||||
|
||||
if(nsnull == *winRegPrototype)
|
||||
{
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if(PR_FALSE == JS_DefineConstDoubles(jscontext, *winRegPrototype, winreg_constants))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
25
mozilla/xpinstall/src/nsJSWinReg.h
Normal file
25
mozilla/xpinstall/src/nsJSWinReg.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef __NS_JSWINREG_H__
|
||||
#define __NS_JSWINREG_H__
|
||||
|
||||
PRInt32
|
||||
InitWinRegPrototype(JSContext *jscontext, JSObject *global, JSObject **winRegPrototype);
|
||||
|
||||
#endif
|
||||
134
mozilla/xpinstall/src/nsLoggingProgressNotifier.cpp
Normal file
134
mozilla/xpinstall/src/nsLoggingProgressNotifier.cpp
Normal file
@@ -0,0 +1,134 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nsIXPInstallProgress.h"
|
||||
#include "nsLoggingProgressNotifier.h"
|
||||
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsFileStream.h"
|
||||
#include "nsSpecialSystemDirectory.h"
|
||||
|
||||
#include "nspr.h"
|
||||
|
||||
|
||||
|
||||
nsLoggingProgressNotifier::nsLoggingProgressNotifier()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
}
|
||||
|
||||
nsLoggingProgressNotifier::~nsLoggingProgressNotifier()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsLoggingProgressNotifier, nsIXPInstallProgress::GetIID());
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsLoggingProgressNotifier::BeforeJavascriptEvaluation()
|
||||
{
|
||||
nsSpecialSystemDirectory logFile(nsSpecialSystemDirectory::OS_CurrentProcessDirectory);
|
||||
logFile += "Install.log";
|
||||
|
||||
mLogStream = new nsOutputFileStream(logFile, PR_WRONLY | PR_CREATE_FILE | PR_APPEND, 0744 );
|
||||
mLogStream->seek(logFile.GetFileSize());
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsLoggingProgressNotifier::AfterJavascriptEvaluation()
|
||||
{
|
||||
char* time;
|
||||
GetTime(&time);
|
||||
|
||||
*mLogStream << nsEndl;
|
||||
*mLogStream << " Finished Installation " << time << nsEndl << nsEndl;
|
||||
|
||||
PL_strfree(time);
|
||||
|
||||
mLogStream->close();
|
||||
delete mLogStream;
|
||||
mLogStream = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsLoggingProgressNotifier::InstallStarted(const char* UIPackageName)
|
||||
{
|
||||
if (mLogStream == nsnull) return -1;
|
||||
|
||||
char* time;
|
||||
GetTime(&time);
|
||||
|
||||
*mLogStream << "---------------------------------------------------------------------------" << nsEndl;
|
||||
*mLogStream << UIPackageName << nsEndl;
|
||||
*mLogStream << "---------------------------------------------------------------------------" << nsEndl;
|
||||
*mLogStream << nsEndl;
|
||||
*mLogStream << " Starting Installation at " << nsAutoCString(time) << nsEndl;
|
||||
*mLogStream << nsEndl;
|
||||
|
||||
|
||||
PL_strfree(time);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsLoggingProgressNotifier::ItemScheduled(const char* message )
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsLoggingProgressNotifier::InstallFinalization(const char* message, PRInt32 itemNum, PRInt32 totNum )
|
||||
{
|
||||
if (mLogStream == nsnull) return -1;
|
||||
|
||||
*mLogStream << " Item [" << (itemNum+1) << "/" << totNum << "]\t" << message << nsEndl;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsLoggingProgressNotifier::InstallAborted()
|
||||
{
|
||||
if (mLogStream == nsnull) return -1;
|
||||
|
||||
char* time;
|
||||
GetTime(&time);
|
||||
|
||||
*mLogStream << " Aborted Installation at " << time << nsEndl << nsEndl;
|
||||
|
||||
PL_strfree(time);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
nsLoggingProgressNotifier::GetTime(char** aString)
|
||||
{
|
||||
PRExplodedTime et;
|
||||
char line[256];
|
||||
PR_ExplodeTime(PR_Now(), PR_LocalTimeParameters, &et);
|
||||
PR_FormatTimeUSEnglish(line, sizeof(line), "%m/%d/%Y %H:%M:%S", &et);
|
||||
*aString = PL_strdup(line);
|
||||
}
|
||||
|
||||
55
mozilla/xpinstall/src/nsLoggingProgressNotifier.h
Normal file
55
mozilla/xpinstall/src/nsLoggingProgressNotifier.h
Normal file
@@ -0,0 +1,55 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef nsLoggingProgressNotifier_H__
|
||||
#define nsLoggingProgressNotifier_H__
|
||||
|
||||
#include "nsIXPInstallProgress.h"
|
||||
#include "nsFileStream.h"
|
||||
|
||||
|
||||
class nsLoggingProgressNotifier : public nsIXPInstallProgress
|
||||
{
|
||||
public:
|
||||
|
||||
nsLoggingProgressNotifier();
|
||||
virtual ~nsLoggingProgressNotifier();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_IMETHOD BeforeJavascriptEvaluation();
|
||||
NS_IMETHOD AfterJavascriptEvaluation();
|
||||
NS_IMETHOD InstallStarted(const char* UIPackageName);
|
||||
NS_IMETHOD ItemScheduled(const char* message );
|
||||
NS_IMETHOD InstallFinalization(const char* message, PRInt32 itemNum, PRInt32 totNum );
|
||||
NS_IMETHOD InstallAborted();
|
||||
|
||||
private:
|
||||
void GetTime(char** aString);
|
||||
nsOutputFileStream *mLogStream;
|
||||
};
|
||||
|
||||
#endif
|
||||
666
mozilla/xpinstall/src/nsSoftwareUpdate.cpp
Normal file
666
mozilla/xpinstall/src/nsSoftwareUpdate.cpp
Normal file
@@ -0,0 +1,666 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
||||
* Netscape Communications Corporation. All Rights Reserved.
|
||||
*/
|
||||
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsIFactory.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsIComponentManager.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include "nspr.h"
|
||||
#include "nsVector.h"
|
||||
#include "VerReg.h"
|
||||
#include "nsSpecialSystemDirectory.h"
|
||||
|
||||
#include "nsInstall.h"
|
||||
#include "nsSoftwareUpdateIIDs.h"
|
||||
#include "nsSoftwareUpdate.h"
|
||||
#include "nsSoftwareUpdateRun.h"
|
||||
#include "nsInstallTrigger.h"
|
||||
#include "nsInstallVersion.h"
|
||||
#include "ScheduledTasks.h"
|
||||
|
||||
#include "nsTopProgressNotifier.h"
|
||||
#include "nsLoggingProgressNotifier.h"
|
||||
#include "nsInstallProgressDialog.h"
|
||||
|
||||
#include "nsIAppShellComponent.h"
|
||||
#include "nsIRegistry.h"
|
||||
|
||||
/* For Javascript Namespace Access */
|
||||
#include "nsDOMCID.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsINameSpaceManager.h"
|
||||
#include "nsIScriptObjectOwner.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
#include "nsIScriptNameSetRegistry.h"
|
||||
#include "nsIScriptNameSpaceManager.h"
|
||||
#include "nsIScriptExternalNameSet.h"
|
||||
|
||||
#include "nsIEventQueueService.h"
|
||||
#include "nsProxyObjectManager.h"
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Globals
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
|
||||
static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID);
|
||||
|
||||
static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID);
|
||||
|
||||
static NS_DEFINE_IID(kIScriptNameSetRegistryIID, NS_ISCRIPTNAMESETREGISTRY_IID);
|
||||
static NS_DEFINE_IID(kCScriptNameSetRegistryCID, NS_SCRIPT_NAMESET_REGISTRY_CID);
|
||||
static NS_DEFINE_IID(kIScriptExternalNameSetIID, NS_ISCRIPTEXTERNALNAMESET_IID);
|
||||
|
||||
static NS_DEFINE_IID(kISoftwareUpdate_IID, NS_ISOFTWAREUPDATE_IID);
|
||||
static NS_DEFINE_IID(kSoftwareUpdate_CID, NS_SoftwareUpdate_CID);
|
||||
|
||||
static NS_DEFINE_IID(kIInstallTrigger_IID, NS_IDOMINSTALLTRIGGERGLOBAL_IID);
|
||||
static NS_DEFINE_IID(kInstallTrigger_CID, NS_SoftwareUpdateInstallTrigger_CID);
|
||||
|
||||
static NS_DEFINE_IID(kIInstallVersion_IID, NS_IDOMINSTALLVERSION_IID);
|
||||
static NS_DEFINE_IID(kInstallVersion_CID, NS_SoftwareUpdateInstallVersion_CID);
|
||||
|
||||
static NS_DEFINE_IID(kProxyObjectManagerIID, NS_IPROXYEVENT_MANAGER_IID);
|
||||
static NS_DEFINE_IID(kEventQueueServiceIID, NS_IEVENTQUEUESERVICE_IID);
|
||||
|
||||
|
||||
nsSoftwareUpdate::nsSoftwareUpdate()
|
||||
{
|
||||
#ifdef NS_DEBUG
|
||||
printf("XPInstall Component created\n");
|
||||
#endif
|
||||
|
||||
NS_INIT_ISUPPORTS();
|
||||
|
||||
/***************************************/
|
||||
/* Create us a queue */
|
||||
/***************************************/
|
||||
mInstalling = nsnull;
|
||||
|
||||
mJarInstallQueue = new nsVector();
|
||||
|
||||
/***************************************/
|
||||
/* Add us to the Javascript Name Space */
|
||||
/***************************************/
|
||||
|
||||
new nsSoftwareUpdateNameSet();
|
||||
|
||||
/***************************************/
|
||||
/* Register us with NetLib */
|
||||
/***************************************/
|
||||
// FIX
|
||||
|
||||
|
||||
/***************************************/
|
||||
/* Startup the Version Registry */
|
||||
/***************************************/
|
||||
|
||||
NR_StartupRegistry(); /* startup the registry; if already started, this will essentially be a noop */
|
||||
|
||||
nsSpecialSystemDirectory appDir(nsSpecialSystemDirectory::OS_CurrentProcessDirectory);
|
||||
VR_SetRegDirectory( appDir.GetNativePathCString() );
|
||||
|
||||
/***************************************/
|
||||
/* Stupid Hack to test js env*/
|
||||
/***************************************/
|
||||
// FIX: HACK HACK HACK!
|
||||
#if 0
|
||||
nsSpecialSystemDirectory jarFile(nsSpecialSystemDirectory::OS_TemporaryDirectory);
|
||||
jarFile += "test.jar";
|
||||
if (jarFile.Exists())
|
||||
{
|
||||
InstallJar(nsString(nsFileURL(jarFile)), "", "");
|
||||
}
|
||||
#endif
|
||||
/***************************************/
|
||||
/* Perform Scheduled Tasks */
|
||||
/***************************************/
|
||||
|
||||
PR_CreateThread(PR_USER_THREAD,
|
||||
PerformScheduledTasks,
|
||||
nsnull,
|
||||
PR_PRIORITY_NORMAL,
|
||||
PR_GLOBAL_THREAD,
|
||||
PR_UNJOINABLE_THREAD,
|
||||
0);
|
||||
|
||||
/***************************************/
|
||||
/* Create a top level observer */
|
||||
/***************************************/
|
||||
|
||||
mTopLevelObserver = new nsTopProgressNotifier();
|
||||
|
||||
nsLoggingProgressNotifier *logger = new nsLoggingProgressNotifier();
|
||||
RegisterNotifier(logger);
|
||||
|
||||
nsIProxyObjectManager *manager;
|
||||
nsInstallProgressDialog *dialog = new nsInstallProgressDialog();
|
||||
nsInstallProgressDialog *proxy;
|
||||
nsISupports *dialogBase;
|
||||
|
||||
nsresult rv = dialog->QueryInterface(kISupportsIID, (void**)&dialogBase);
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = nsServiceManager::GetService( NS_XPCOMPROXY_PROGID,
|
||||
kProxyObjectManagerIID,
|
||||
(nsISupports **)&manager);
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
// I am assuming that the thread that starts us up is the UI thread. this will/may break
|
||||
// I need to make a generic way of getting at the UI event queue.
|
||||
|
||||
nsIEventQueueService *eventQService;
|
||||
rv = nsServiceManager::GetService(NS_EVENTQUEUESERVICE_PROGID,
|
||||
kEventQueueServiceIID,
|
||||
(nsISupports **)&eventQService);
|
||||
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsIEventQueue *eventQ;
|
||||
eventQService->GetThreadEventQueue(PR_GetCurrentThread(), &eventQ);
|
||||
|
||||
PLEventQueue *plEventQ;
|
||||
eventQ->GetPLEventQueue(&plEventQ);
|
||||
|
||||
rv = manager->GetProxyObject(plEventQ, nsIXPInstallProgress::GetIID(), dialogBase, PROXY_SYNC, (void**)&proxy);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
RegisterNotifier(proxy);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dialog)
|
||||
dialog->Release();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
nsSoftwareUpdate::~nsSoftwareUpdate()
|
||||
{
|
||||
#ifdef NS_DEBUG
|
||||
printf("*** XPInstall Component destroyed\n");
|
||||
#endif
|
||||
|
||||
if (mJarInstallQueue != nsnull)
|
||||
{
|
||||
PRUint32 i=0;
|
||||
for (; i < mJarInstallQueue->GetSize(); i++)
|
||||
{
|
||||
nsInstallInfo* element = (nsInstallInfo*)mJarInstallQueue->Get(i);
|
||||
//FIX: need to add to registry....
|
||||
delete element;
|
||||
}
|
||||
|
||||
mJarInstallQueue->RemoveAll();
|
||||
delete (mJarInstallQueue);
|
||||
mJarInstallQueue = nsnull;
|
||||
}
|
||||
|
||||
NR_ShutdownRegistry();
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF( nsSoftwareUpdate );
|
||||
NS_IMPL_RELEASE( nsSoftwareUpdate );
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdate::QueryInterface( REFNSIID anIID, void **anInstancePtr )
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
/* Check for place to return result. */
|
||||
|
||||
if ( !anInstancePtr )
|
||||
{
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Initialize result. */
|
||||
*anInstancePtr = 0;
|
||||
/* Check for IIDs we support and cast this appropriately. */
|
||||
if ( anIID.Equals( nsISoftwareUpdate::GetIID() ) )
|
||||
{
|
||||
*anInstancePtr = (void*) ( (nsISoftwareUpdate*)this );
|
||||
NS_ADDREF_THIS();
|
||||
}
|
||||
else if ( anIID.Equals( nsIAppShellComponent::GetIID() ) )
|
||||
{
|
||||
*anInstancePtr = (void*) ( (nsIAppShellComponent*)this );
|
||||
NS_ADDREF_THIS();
|
||||
}
|
||||
else if ( anIID.Equals( kISupportsIID ) )
|
||||
{
|
||||
*anInstancePtr = (void*) ( (nsISupports*) (nsISoftwareUpdate*) this );
|
||||
NS_ADDREF_THIS();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Not an interface we support. */\
|
||||
rv = NS_NOINTERFACE;
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdate::Initialize( nsIAppShellService *anAppShell, nsICmdLineService *aCmdLineService )
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
rv = nsServiceManager::RegisterService( NS_IXPINSTALLCOMPONENT_PROGID, ( (nsISupports*) (nsISoftwareUpdate*) this ) );
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdate::Shutdown()
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
rv = nsServiceManager::ReleaseService( NS_IXPINSTALLCOMPONENT_PROGID, ( (nsISupports*) (nsISoftwareUpdate*) this ) );
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdate::RegisterNotifier(nsIXPInstallProgress *notifier)
|
||||
{
|
||||
// we are going to ignore the returned ID and enforce that once you
|
||||
// register a notifier, you can not remove it. This should at some
|
||||
// point be fixed.
|
||||
|
||||
(void) mTopLevelObserver->RegisterNotifier(notifier);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdate::GetTopLevelNotifier(nsIXPInstallProgress **notifier)
|
||||
{
|
||||
*notifier = mTopLevelObserver;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdate::InstallJar( const nsString& fromURL,
|
||||
const nsString& localFile,
|
||||
long flags)
|
||||
{
|
||||
nsInstallInfo *installInfo = new nsInstallInfo(fromURL, localFile, flags);
|
||||
|
||||
mJarInstallQueue->Add( installInfo );
|
||||
|
||||
RunNextInstall();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdate::InstallPending(void)
|
||||
{
|
||||
if (mInstalling || mJarInstallQueue->GetSize() > 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdate::InstallJarCallBack()
|
||||
{
|
||||
nsInstallInfo *nextInstall = (nsInstallInfo*)mJarInstallQueue->Get(0);
|
||||
|
||||
if (nextInstall != nsnull)
|
||||
delete nextInstall;
|
||||
|
||||
mJarInstallQueue->Remove(0);
|
||||
|
||||
mInstalling = PR_FALSE;
|
||||
|
||||
return RunNextInstall();
|
||||
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
nsSoftwareUpdate::RunNextInstall()
|
||||
{
|
||||
if (mInstalling == PR_TRUE)
|
||||
return NS_OK;
|
||||
|
||||
mInstalling = PR_TRUE;
|
||||
|
||||
// check to see if there is anything in our queue
|
||||
if (mJarInstallQueue->GetSize() <= 0)
|
||||
{
|
||||
mInstalling = PR_FALSE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsInstallInfo *nextInstall = (nsInstallInfo*)mJarInstallQueue->Get(0);
|
||||
|
||||
if (nextInstall->IsMultipleTrigger() == PR_FALSE)
|
||||
{
|
||||
RunInstall( nextInstall );
|
||||
}
|
||||
else
|
||||
{
|
||||
; // should we do something different?!
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
static PRInt32 gSoftwareUpdateLock = 0;
|
||||
|
||||
nsSoftwareUpdateFactory::nsSoftwareUpdateFactory(void)
|
||||
{
|
||||
NS_INIT_ISUPPORTS();
|
||||
}
|
||||
|
||||
nsSoftwareUpdateFactory::~nsSoftwareUpdateFactory(void)
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsSoftwareUpdateFactory,kIFactoryIID)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateFactory::CreateInstance(nsISupports *aOuter, REFNSIID aIID, void **aResult)
|
||||
{
|
||||
if (aResult == NULL)
|
||||
{
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
*aResult = NULL;
|
||||
|
||||
nsSoftwareUpdate *inst = new nsSoftwareUpdate();
|
||||
|
||||
if (inst == NULL)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
nsresult result = inst->QueryInterface(aIID, aResult);
|
||||
|
||||
if (NS_FAILED(result))
|
||||
{
|
||||
*aResult = NULL;
|
||||
}
|
||||
|
||||
NS_ADDREF(inst); // Are we sure that we need to addref???
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateFactory::LockFactory(PRBool aLock)
|
||||
{
|
||||
if (aLock)
|
||||
PR_AtomicIncrement(&gSoftwareUpdateLock);
|
||||
else
|
||||
PR_AtomicDecrement(&gSoftwareUpdateLock);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// nsSoftwareUpdateNameSet
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
nsSoftwareUpdateNameSet::nsSoftwareUpdateNameSet()
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
|
||||
nsIScriptNameSetRegistry *scriptNameSet;
|
||||
nsresult result = nsServiceManager::GetService(kCScriptNameSetRegistryCID,
|
||||
kIScriptNameSetRegistryIID,
|
||||
(nsISupports **)&scriptNameSet);
|
||||
if (NS_SUCCEEDED(result))
|
||||
{
|
||||
scriptNameSet->AddExternalNameSet(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
nsSoftwareUpdateNameSet::~nsSoftwareUpdateNameSet()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsSoftwareUpdateNameSet, kIScriptExternalNameSetIID);
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateNameSet::InitializeClasses(nsIScriptContext* aScriptContext)
|
||||
{
|
||||
nsresult result = NS_OK;
|
||||
|
||||
result = NS_InitInstallVersionClass(aScriptContext, nsnull);
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
result = NS_InitInstallTriggerGlobalClass(aScriptContext, nsnull);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateNameSet::AddNameSet(nsIScriptContext* aScriptContext)
|
||||
{
|
||||
nsresult result = NS_OK;
|
||||
nsIScriptNameSpaceManager* manager;
|
||||
|
||||
result = aScriptContext->GetNameSpaceManager(&manager);
|
||||
if (NS_SUCCEEDED(result))
|
||||
{
|
||||
result = manager->RegisterGlobalName("InstallVersion",
|
||||
kInstallVersion_CID,
|
||||
PR_TRUE);
|
||||
|
||||
if (NS_FAILED(result)) return result;
|
||||
|
||||
result = manager->RegisterGlobalName("InstallTrigger",
|
||||
kInstallTrigger_CID,
|
||||
PR_FALSE);
|
||||
|
||||
}
|
||||
|
||||
if (manager != nsnull)
|
||||
NS_RELEASE(manager);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// DLL Entry Points:
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
extern "C" NS_EXPORT PRBool
|
||||
NSCanUnload(nsISupports* aServMgr)
|
||||
{
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
extern "C" NS_EXPORT nsresult
|
||||
NSRegisterSelf(nsISupports* aServMgr, const char *path)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsIServiceManager> servMgr(do_QueryInterface(aServMgr, &rv));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsIComponentManager* compMgr;
|
||||
rv = servMgr->GetService(kComponentManagerCID,
|
||||
nsIComponentManager::GetIID(),
|
||||
(nsISupports**)&compMgr);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
printf("*** XPInstall is being registered\n");
|
||||
#endif
|
||||
|
||||
rv = compMgr->RegisterComponent( kSoftwareUpdate_CID,
|
||||
NS_IXPINSTALLCOMPONENT_CLASSNAME,
|
||||
NS_IXPINSTALLCOMPONENT_PROGID,
|
||||
path,
|
||||
PR_TRUE,
|
||||
PR_TRUE );
|
||||
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
nsIRegistry *registry;
|
||||
rv = servMgr->GetService( NS_REGISTRY_PROGID,
|
||||
nsIRegistry::GetIID(),
|
||||
(nsISupports**)®istry );
|
||||
|
||||
if ( NS_SUCCEEDED( rv ) )
|
||||
{
|
||||
registry->Open();
|
||||
char buffer[256];
|
||||
char *cid = nsSoftwareUpdate::GetCID().ToString();
|
||||
PR_snprintf( buffer,
|
||||
sizeof buffer,
|
||||
"%s/%s",
|
||||
NS_IAPPSHELLCOMPONENT_KEY,
|
||||
cid ? cid : "unknown" );
|
||||
delete [] cid;
|
||||
|
||||
nsIRegistry::Key key;
|
||||
rv = registry->AddSubtree( nsIRegistry::Common,
|
||||
buffer,
|
||||
&key );
|
||||
servMgr->ReleaseService( NS_REGISTRY_PROGID, registry );
|
||||
}
|
||||
|
||||
rv = compMgr->RegisterComponent(kInstallTrigger_CID, NULL, NULL, path, PR_TRUE, PR_TRUE);
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
|
||||
rv = compMgr->RegisterComponent(kInstallVersion_CID, NULL, NULL, path, PR_TRUE, PR_TRUE);
|
||||
|
||||
done:
|
||||
(void)servMgr->ReleaseService(kComponentManagerCID, compMgr);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
extern "C" NS_EXPORT nsresult
|
||||
NSUnregisterSelf(nsISupports* aServMgr, const char *path)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsIServiceManager> servMgr(do_QueryInterface(aServMgr, &rv));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsIComponentManager* compMgr;
|
||||
rv = servMgr->GetService(kComponentManagerCID,
|
||||
nsIComponentManager::GetIID(),
|
||||
(nsISupports**)&compMgr);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
printf("*** XPInstall is being unregistered\n");
|
||||
#endif
|
||||
|
||||
rv = compMgr->UnregisterComponent(kSoftwareUpdate_CID, path);
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
rv = compMgr->UnregisterComponent(kInstallTrigger_CID, path);
|
||||
if (NS_FAILED(rv)) goto done;
|
||||
rv = compMgr->UnregisterComponent(kInstallVersion_CID, path);
|
||||
|
||||
done:
|
||||
(void)servMgr->ReleaseService(kComponentManagerCID, compMgr);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern "C" NS_EXPORT nsresult
|
||||
NSGetFactory(nsISupports* serviceMgr,
|
||||
const nsCID &aClass,
|
||||
const char *aClassName,
|
||||
const char *aProgID,
|
||||
nsIFactory **aFactory)
|
||||
{
|
||||
|
||||
if (aFactory == NULL)
|
||||
{
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
*aFactory = NULL;
|
||||
nsISupports *inst;
|
||||
|
||||
|
||||
if (aClass.Equals(kInstallTrigger_CID) )
|
||||
{
|
||||
inst = new nsInstallTriggerFactory();
|
||||
}
|
||||
else if (aClass.Equals(kInstallVersion_CID) )
|
||||
{
|
||||
inst = new nsInstallVersionFactory();
|
||||
}
|
||||
else if (aClass.Equals(kSoftwareUpdate_CID) )
|
||||
{
|
||||
inst = new nsSoftwareUpdateFactory();
|
||||
}
|
||||
else
|
||||
{
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
}
|
||||
|
||||
|
||||
if (inst == NULL)
|
||||
{
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
|
||||
nsresult res = inst->QueryInterface(kIFactoryIID, (void**) aFactory);
|
||||
|
||||
if (NS_FAILED(res))
|
||||
{
|
||||
delete inst;
|
||||
}
|
||||
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
|
||||
77
mozilla/xpinstall/src/nsSoftwareUpdate.h
Normal file
77
mozilla/xpinstall/src/nsSoftwareUpdate.h
Normal file
@@ -0,0 +1,77 @@
|
||||
|
||||
#ifndef nsSoftwareUpdate_h___
|
||||
#define nsSoftwareUpdate_h___
|
||||
|
||||
#include "nsSoftwareUpdateIIDs.h"
|
||||
#include "nsISoftwareUpdate.h"
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsIFactory.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsString.h"
|
||||
#include "nsVector.h"
|
||||
|
||||
class nsInstallInfo;
|
||||
|
||||
#include "nsIScriptExternalNameSet.h"
|
||||
#include "nsIAppShellComponent.h"
|
||||
#include "nsIXPInstallProgress.h"
|
||||
#include "nsTopProgressNotifier.h"
|
||||
|
||||
class nsSoftwareUpdate: public nsIAppShellComponent, public nsISoftwareUpdate
|
||||
{
|
||||
public:
|
||||
|
||||
NS_DEFINE_STATIC_CID_ACCESSOR( NS_SoftwareUpdate_CID );
|
||||
|
||||
nsSoftwareUpdate();
|
||||
virtual ~nsSoftwareUpdate();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_IAPPSHELLCOMPONENT
|
||||
|
||||
NS_IMETHOD InstallJar(const nsString& fromURL,
|
||||
const nsString& localFile,
|
||||
long flags);
|
||||
|
||||
NS_IMETHOD RegisterNotifier(nsIXPInstallProgress *notifier);
|
||||
|
||||
NS_IMETHOD InstallPending(void);
|
||||
|
||||
NS_IMETHOD InstallJarCallBack();
|
||||
NS_IMETHOD GetTopLevelNotifier(nsIXPInstallProgress **notifier);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
nsresult RunNextInstall();
|
||||
nsresult DeleteScheduledNodes();
|
||||
|
||||
PRBool mInstalling;
|
||||
nsVector* mJarInstallQueue;
|
||||
nsTopProgressNotifier *mTopLevelObserver;
|
||||
};
|
||||
|
||||
|
||||
class nsSoftwareUpdateNameSet : public nsIScriptExternalNameSet
|
||||
{
|
||||
public:
|
||||
nsSoftwareUpdateNameSet();
|
||||
virtual ~nsSoftwareUpdateNameSet();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_IMETHOD InitializeClasses(nsIScriptContext* aScriptContext);
|
||||
NS_IMETHOD AddNameSet(nsIScriptContext* aScriptContext);
|
||||
};
|
||||
|
||||
#define AUTOUPDATE_ENABLE_PREF "autoupdate.enabled"
|
||||
#define AUTOUPDATE_CONFIRM_PREF "autoupdate.confirm_install"
|
||||
#define CHARSET_HEADER "Charset"
|
||||
#define CONTENT_ENCODING_HEADER "Content-encoding"
|
||||
#define INSTALLER_HEADER "Install-Script"
|
||||
#define MOCHA_CONTEXT_PREFIX "autoinstall:"
|
||||
#define REG_SOFTUPDT_DIR "Netscape/Communicator/SoftwareUpdate/"
|
||||
#define LAST_REGPACK_TIME "LastRegPackTime"
|
||||
|
||||
|
||||
#endif
|
||||
362
mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp
Normal file
362
mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp
Normal file
@@ -0,0 +1,362 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nsSoftwareUpdate.h"
|
||||
#include "nsSoftwareUpdateRun.h"
|
||||
#include "nsSoftwareUpdateIIDs.h"
|
||||
|
||||
#include "nsInstall.h"
|
||||
#include "zipfile.h"
|
||||
|
||||
#include "nsRepository.h"
|
||||
#include "nsIServiceManager.h"
|
||||
|
||||
#include "nsSpecialSystemDirectory.h"
|
||||
#include "nsFileStream.h"
|
||||
|
||||
#include "nspr.h"
|
||||
#include "jsapi.h"
|
||||
|
||||
#include "nsIEventQueueService.h"
|
||||
|
||||
|
||||
static NS_DEFINE_IID(kISoftwareUpdateIID, NS_ISOFTWAREUPDATE_IID);
|
||||
static NS_DEFINE_IID(kSoftwareUpdateCID, NS_SoftwareUpdate_CID);
|
||||
|
||||
|
||||
|
||||
|
||||
static JSClass global_class =
|
||||
{
|
||||
"global", JSCLASS_HAS_PRIVATE,
|
||||
JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
|
||||
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub
|
||||
};
|
||||
|
||||
|
||||
extern PRInt32 InitXPInstallObjects(JSContext *jscontext, JSObject *global, const char* jarfile, const char* args);
|
||||
|
||||
// Defined in this file:
|
||||
static void XPInstallErrorReporter(JSContext *cx, const char *message, JSErrorReport *report);
|
||||
static nsresult GetInstallScriptFromJarfile(const char* jarFile, char** scriptBuffer, PRUint32 *scriptLength);
|
||||
static nsresult SetupInstallContext(const char* jarFile, const char* args, JSRuntime **jsRT, JSContext **jsCX, JSObject **jsGlob);
|
||||
|
||||
extern "C" void RunInstallOnThread(void *data);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : XPInstallErrorReporter
|
||||
// Description : Prints error message to stdout
|
||||
// Return type : void
|
||||
// Argument : JSContext *cx
|
||||
// Argument : const char *message
|
||||
// Argument : JSErrorReport *report
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
static void
|
||||
XPInstallErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
|
||||
{
|
||||
int i, j, k, n;
|
||||
|
||||
fputs("xpinstall: ", stderr);
|
||||
if (!report)
|
||||
{
|
||||
fprintf(stderr, "%s\n", message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (report->filename)
|
||||
fprintf(stderr, "%s, ", report->filename);
|
||||
if (report->lineno)
|
||||
fprintf(stderr, "line %u: ", report->lineno);
|
||||
fputs(message, stderr);
|
||||
if (!report->linebuf)
|
||||
{
|
||||
putc('\n', stderr);
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf(stderr, ":\n%s\n", report->linebuf);
|
||||
n = report->tokenptr - report->linebuf;
|
||||
for (i = j = 0; i < n; i++) {
|
||||
if (report->linebuf[i] == '\t') {
|
||||
for (k = (j + 8) & ~7; j < k; j++)
|
||||
putc('.', stderr);
|
||||
continue;
|
||||
}
|
||||
putc('.', stderr);
|
||||
j++;
|
||||
}
|
||||
fputs("^\n", stderr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : GetInstallScriptFromJarfile
|
||||
// Description : Extracts and reads in a install.js file from a passed jar file.
|
||||
// Return type : static nsresult
|
||||
// Argument : const char* jarFile - native filepath
|
||||
// Argument : char** scriptBuffer - must be deleted via delete []
|
||||
// Argument : PRUint32 *scriptLength
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static nsresult
|
||||
GetInstallScriptFromJarfile(const char* jarFile, char** scriptBuffer, PRUint32 *scriptLength)
|
||||
{
|
||||
// Open the jarfile.
|
||||
void* hZip;
|
||||
|
||||
*scriptBuffer = nsnull;
|
||||
*scriptLength = 0;
|
||||
|
||||
nsresult rv = ZIP_OpenArchive(jarFile , &hZip);
|
||||
|
||||
if (rv != ZIP_OK)
|
||||
return rv;
|
||||
|
||||
|
||||
// Read manifest file for Install Script filename.
|
||||
//FIX: need to do.
|
||||
|
||||
// Extract the install.js file to the temporary directory
|
||||
nsSpecialSystemDirectory installJSFileSpec(nsSpecialSystemDirectory::OS_TemporaryDirectory);
|
||||
installJSFileSpec += "install.js";
|
||||
installJSFileSpec.MakeUnique();
|
||||
|
||||
// Extract the install.js file.
|
||||
rv = ZIP_ExtractFile( hZip, "install.js", nsNSPRPath(installJSFileSpec) );
|
||||
if (rv != ZIP_OK)
|
||||
{
|
||||
ZIP_CloseArchive(&hZip);
|
||||
return rv;
|
||||
}
|
||||
|
||||
// Read it into a buffer
|
||||
char* buffer;
|
||||
PRUint32 bufferLength;
|
||||
PRUint32 readLength;
|
||||
|
||||
nsInputFileStream fileStream(installJSFileSpec);
|
||||
(fileStream.GetIStream())->GetLength(&bufferLength);
|
||||
buffer = new char[bufferLength + 1];
|
||||
|
||||
rv = (fileStream.GetIStream())->Read(buffer, bufferLength, &readLength);
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
*scriptBuffer = buffer;
|
||||
*scriptLength = readLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
delete [] buffer;
|
||||
}
|
||||
|
||||
ZIP_CloseArchive(&hZip);
|
||||
fileStream.close();
|
||||
installJSFileSpec.Delete(PR_FALSE);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : SetupInstallContext
|
||||
// Description : Creates a Javascript runtime and adds our xpinstall objects to it.
|
||||
// Return type : static nsresult
|
||||
// Argument : const char* jarFile - native filepath to where jar exists on disk
|
||||
// Argument : const char* args - any arguments passed into the javascript context
|
||||
// Argument : JSRuntime **jsRT - Must be deleted via JS_DestroyRuntime
|
||||
// Argument : JSContext **jsCX - Must be deleted via JS_DestroyContext
|
||||
// Argument : JSObject **jsGlob
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
static nsresult SetupInstallContext(const char* jarFile,
|
||||
const char* args,
|
||||
JSRuntime **jsRT,
|
||||
JSContext **jsCX,
|
||||
JSObject **jsGlob)
|
||||
{
|
||||
JSRuntime *rt;
|
||||
JSContext *cx;
|
||||
JSObject *glob;
|
||||
|
||||
*jsRT = nsnull;
|
||||
*jsCX = nsnull;
|
||||
*jsGlob = nsnull;
|
||||
|
||||
// JS init
|
||||
rt = JS_Init(8L * 1024L * 1024L);
|
||||
if (!rt)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// new context
|
||||
cx = JS_NewContext(rt, 8192);
|
||||
if (!rt)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
JS_SetErrorReporter(cx, XPInstallErrorReporter);
|
||||
|
||||
// new global object
|
||||
glob = JS_NewObject(cx, &global_class, nsnull, nsnull);
|
||||
|
||||
// Init standard classes
|
||||
JS_InitStandardClasses(cx, glob);
|
||||
|
||||
// Add our Install class to this context
|
||||
InitXPInstallObjects(cx, glob, jarFile, args);
|
||||
|
||||
// Fix: We have to add Version and Trigger to this context!!
|
||||
|
||||
|
||||
*jsRT = rt;
|
||||
*jsCX = cx;
|
||||
*jsGlob = glob;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : RunInstall
|
||||
// Description : Creates our Install Thread.
|
||||
// Return type : PRInt32
|
||||
// Argument : nsInstallInfo *installInfo
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
PRInt32 RunInstall(nsInstallInfo *installInfo)
|
||||
{
|
||||
if (installInfo->GetFlags() == 0x00000001)
|
||||
{
|
||||
RunInstallOnThread((void *)installInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
PR_CreateThread(PR_USER_THREAD,
|
||||
RunInstallOnThread,
|
||||
(void*)installInfo,
|
||||
PR_PRIORITY_NORMAL,
|
||||
PR_GLOBAL_THREAD,
|
||||
PR_UNJOINABLE_THREAD,
|
||||
0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Function name : RunInstallOnThread
|
||||
// Description : called by starting thread. It directly calls the C api for xpinstall,
|
||||
// : and once that returns, it calls the completion routine to notify installation
|
||||
// : completion.
|
||||
// Return type : extern "C"
|
||||
// Argument : void *data
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
extern "C" void RunInstallOnThread(void *data)
|
||||
{
|
||||
nsInstallInfo *installInfo = (nsInstallInfo*)data;
|
||||
|
||||
char *scriptBuffer;
|
||||
PRUint32 scriptLength;
|
||||
|
||||
JSRuntime *rt;
|
||||
JSContext *cx;
|
||||
JSObject *glob;
|
||||
|
||||
nsISoftwareUpdate *softwareUpdate;
|
||||
|
||||
nsresult rv = nsServiceManager::GetService( kSoftwareUpdateCID,
|
||||
kISoftwareUpdateIID,
|
||||
(nsISupports**)&softwareUpdate);
|
||||
|
||||
nsIXPInstallProgress *notifier;
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
softwareUpdate->GetTopLevelNotifier(¬ifier);
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(notifier)
|
||||
notifier->BeforeJavascriptEvaluation();
|
||||
|
||||
|
||||
nsString args;
|
||||
installInfo->GetArguments(args);
|
||||
|
||||
|
||||
rv = GetInstallScriptFromJarfile( nsAutoCString( installInfo->GetLocalFile() ),
|
||||
&scriptBuffer,
|
||||
&scriptLength);
|
||||
|
||||
if (NS_FAILED(rv) || scriptBuffer == nsnull)
|
||||
{
|
||||
goto bail;
|
||||
}
|
||||
|
||||
|
||||
|
||||
rv = SetupInstallContext( nsAutoCString( installInfo->GetLocalFile() ),
|
||||
nsAutoCString( args ),
|
||||
&rt, &cx, &glob);
|
||||
if (NS_FAILED(rv))
|
||||
{
|
||||
delete [] scriptBuffer;
|
||||
goto bail;
|
||||
}
|
||||
|
||||
// Go ahead and run!!
|
||||
jsval rval;
|
||||
|
||||
JS_EvaluateScript(cx,
|
||||
glob,
|
||||
scriptBuffer,
|
||||
scriptLength,
|
||||
nsnull,
|
||||
0,
|
||||
&rval);
|
||||
|
||||
|
||||
|
||||
delete [] scriptBuffer;
|
||||
|
||||
JS_DestroyContext(cx);
|
||||
JS_DestroyRuntime(rt);
|
||||
|
||||
|
||||
if(notifier)
|
||||
notifier->AfterJavascriptEvaluation();
|
||||
|
||||
|
||||
bail:
|
||||
softwareUpdate->InstallJarCallBack();
|
||||
}
|
||||
6
mozilla/xpinstall/src/nsSoftwareUpdateRun.h
Normal file
6
mozilla/xpinstall/src/nsSoftwareUpdateRun.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef __NS_SoftwareUpdateRun_H__
|
||||
#define __NS_SoftwareUpdateRun_H__
|
||||
|
||||
PRInt32 RunInstall(nsInstallInfo *installInfo);
|
||||
|
||||
#endif
|
||||
162
mozilla/xpinstall/src/nsSoftwareUpdateStream.cpp
Normal file
162
mozilla/xpinstall/src/nsSoftwareUpdateStream.cpp
Normal file
@@ -0,0 +1,162 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are Copyright (C) 1998
|
||||
* Netscape Communications Corporation. All Rights Reserved.
|
||||
*/
|
||||
|
||||
#include "nsSoftwareUpdateStream.h"
|
||||
#include "nscore.h"
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsVector.h"
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsIServiceManager.h"
|
||||
|
||||
#include "nsIURL.h"
|
||||
#include "nsINetlibURL.h"
|
||||
#include "nsINetService.h"
|
||||
#include "nsIInputStream.h"
|
||||
#include "nsIStreamListener.h"
|
||||
|
||||
#include "nsISoftwareUpdate.h"
|
||||
#include "nsSoftwareUpdateIIDs.h"
|
||||
|
||||
|
||||
static NS_DEFINE_IID(kISoftwareUpdateIID, NS_ISOFTWAREUPDATE_IID);
|
||||
static NS_DEFINE_IID(kSoftwareUpdateCID, NS_SoftwareUpdate_CID);
|
||||
|
||||
|
||||
nsSoftwareUpdateListener::nsSoftwareUpdateListener(const nsString& fromURL, const nsString& localFile, long flags)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
|
||||
mFromURL = fromURL;
|
||||
mLocalFile = localFile;
|
||||
mFlags = flags;
|
||||
|
||||
mOutFileDesc = PR_Open(nsAutoCString(localFile), PR_CREATE_FILE | PR_RDWR, 0744);
|
||||
|
||||
if(mOutFileDesc == NULL)
|
||||
{
|
||||
mResult = -1;
|
||||
};
|
||||
|
||||
mResult = nsServiceManager::GetService( kSoftwareUpdateCID,
|
||||
kISoftwareUpdateIID,
|
||||
(nsISupports**)&mSoftwareUpdate);
|
||||
|
||||
if (NS_FAILED(mResult))
|
||||
return;
|
||||
|
||||
nsIURL *pURL = nsnull;
|
||||
mResult = NS_NewURL(&pURL, fromURL);
|
||||
|
||||
if (NS_FAILED(mResult))
|
||||
return;
|
||||
|
||||
mResult = NS_OpenURL(pURL, this);
|
||||
}
|
||||
|
||||
nsSoftwareUpdateListener::~nsSoftwareUpdateListener()
|
||||
{
|
||||
mSoftwareUpdate->Release();
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ISUPPORTS( nsSoftwareUpdateListener, kIStreamListenerIID )
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateListener::GetBindInfo(nsIURL* aURL, nsStreamBindingInfo* info)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateListener::OnProgress( nsIURL* aURL,
|
||||
PRUint32 Progress,
|
||||
PRUint32 ProgressMax)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateListener::OnStatus(nsIURL* aURL,
|
||||
const PRUnichar* aMsg)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateListener::OnStartBinding(nsIURL* aURL,
|
||||
const char *aContentType)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateListener::OnStopBinding(nsIURL* aURL,
|
||||
nsresult status,
|
||||
const PRUnichar* aMsg)
|
||||
{
|
||||
switch( status )
|
||||
{
|
||||
|
||||
case NS_BINDING_SUCCEEDED:
|
||||
PR_Close(mOutFileDesc);
|
||||
mSoftwareUpdate->InstallJar(mFromURL,
|
||||
mLocalFile,
|
||||
mFlags );
|
||||
break;
|
||||
|
||||
case NS_BINDING_FAILED:
|
||||
case NS_BINDING_ABORTED:
|
||||
mResult = status;
|
||||
PR_Close(mOutFileDesc);
|
||||
break;
|
||||
|
||||
default:
|
||||
mResult = NS_ERROR_ILLEGAL_VALUE;
|
||||
}
|
||||
|
||||
return mResult;
|
||||
}
|
||||
|
||||
#define BUF_SIZE 1024
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSoftwareUpdateListener::OnDataAvailable(nsIURL* aURL, nsIInputStream *pIStream, PRUint32 length)
|
||||
{
|
||||
PRUint32 len;
|
||||
nsresult err;
|
||||
char buffer[BUF_SIZE];
|
||||
|
||||
do
|
||||
{
|
||||
err = pIStream->Read(buffer, BUF_SIZE, &len);
|
||||
|
||||
if (mResult == 0 && err == 0)
|
||||
{
|
||||
if ( PR_Write(mOutFileDesc, buffer, len) == -1 )
|
||||
{
|
||||
/* Error */
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
} while (len > 0 && err == NS_OK);
|
||||
|
||||
return 0;
|
||||
}
|
||||
74
mozilla/xpinstall/src/nsSoftwareUpdateStream.h
Normal file
74
mozilla/xpinstall/src/nsSoftwareUpdateStream.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef _NS_SOFTWAREUPDATESTREAM_H__
|
||||
#define _NS_SOFTWAREUPDATESTREAM_H__
|
||||
|
||||
#include "nsInstall.h"
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsIURL.h"
|
||||
#include "nsINetlibURL.h"
|
||||
#include "nsINetService.h"
|
||||
#include "nsIInputStream.h"
|
||||
#include "nsIStreamListener.h"
|
||||
|
||||
#include "nsISoftwareUpdate.h"
|
||||
|
||||
static NS_DEFINE_IID(kInetServiceIID, NS_INETSERVICE_IID);
|
||||
static NS_DEFINE_IID(kInetServiceCID, NS_NETSERVICE_CID);
|
||||
static NS_DEFINE_IID(kInetLibURLIID, NS_INETLIBURL_IID);
|
||||
static NS_DEFINE_IID(kIStreamListenerIID, NS_ISTREAMLISTENER_IID);
|
||||
|
||||
class nsSoftwareUpdateListener : public nsIStreamListener
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
nsSoftwareUpdateListener(const nsString& fromURL, const nsString& localFile, long flags);
|
||||
|
||||
NS_IMETHOD GetBindInfo(nsIURL* aURL, nsStreamBindingInfo* info);
|
||||
NS_IMETHOD OnProgress(nsIURL* aURL, PRUint32 Progress, PRUint32 ProgressMax);
|
||||
NS_IMETHOD OnStatus(nsIURL* aURL, const PRUnichar* aMsg);
|
||||
NS_IMETHOD OnStartBinding(nsIURL* aURL, const char *aContentType);
|
||||
NS_IMETHOD OnDataAvailable(nsIURL* aURL, nsIInputStream *pIStream, PRUint32 length);
|
||||
NS_IMETHOD OnStopBinding(nsIURL* aURL, nsresult status, const PRUnichar* aMsg);
|
||||
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
virtual ~nsSoftwareUpdateListener();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
nsISoftwareUpdate *mSoftwareUpdate;
|
||||
PRFileDesc *mOutFileDesc;
|
||||
|
||||
nsString mFromURL;
|
||||
nsString mLocalFile;
|
||||
long mFlags;
|
||||
|
||||
PRInt32 mResult;
|
||||
};
|
||||
|
||||
#endif
|
||||
169
mozilla/xpinstall/src/nsTopProgressNotifier.cpp
Normal file
169
mozilla/xpinstall/src/nsTopProgressNotifier.cpp
Normal file
@@ -0,0 +1,169 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nsIXPInstallProgress.h"
|
||||
#include "nsTopProgressNotifier.h"
|
||||
|
||||
nsTopProgressNotifier::nsTopProgressNotifier()
|
||||
{
|
||||
mNotifiers = new nsVector();
|
||||
}
|
||||
|
||||
nsTopProgressNotifier::~nsTopProgressNotifier()
|
||||
{
|
||||
if (mNotifiers)
|
||||
{
|
||||
PRUint32 i=0;
|
||||
for (; i < mNotifiers->GetSize(); i++)
|
||||
{
|
||||
nsIXPInstallProgress* element = (nsIXPInstallProgress*)mNotifiers->Get(i);
|
||||
delete element;
|
||||
}
|
||||
|
||||
mNotifiers->RemoveAll();
|
||||
delete (mNotifiers);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsTopProgressNotifier, nsIXPInstallProgress::GetIID());
|
||||
|
||||
|
||||
long
|
||||
nsTopProgressNotifier::RegisterNotifier(nsIXPInstallProgress * newNotifier)
|
||||
{
|
||||
return mNotifiers->Add( newNotifier );
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
nsTopProgressNotifier::UnregisterNotifier(long id)
|
||||
{
|
||||
mNotifiers->Set(id, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTopProgressNotifier::BeforeJavascriptEvaluation()
|
||||
{
|
||||
if (mNotifiers)
|
||||
{
|
||||
PRUint32 i=0;
|
||||
for (; i < mNotifiers->GetSize(); i++)
|
||||
{
|
||||
nsIXPInstallProgress* element = (nsIXPInstallProgress*)mNotifiers->Get(i);
|
||||
if (element != NULL)
|
||||
element->BeforeJavascriptEvaluation();
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTopProgressNotifier::AfterJavascriptEvaluation(void)
|
||||
{
|
||||
if (mNotifiers)
|
||||
{
|
||||
PRUint32 i=0;
|
||||
for (; i < mNotifiers->GetSize(); i++)
|
||||
{
|
||||
nsIXPInstallProgress* element = (nsIXPInstallProgress*)mNotifiers->Get(i);
|
||||
if (element != NULL)
|
||||
element->AfterJavascriptEvaluation();
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTopProgressNotifier::InstallStarted(const char* UIPackageName)
|
||||
{
|
||||
if (mNotifiers)
|
||||
{
|
||||
PRUint32 i=0;
|
||||
for (; i < mNotifiers->GetSize(); i++)
|
||||
{
|
||||
nsIXPInstallProgress* element = (nsIXPInstallProgress*)mNotifiers->Get(i);
|
||||
if (element != NULL)
|
||||
element->InstallStarted(UIPackageName);
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTopProgressNotifier::ItemScheduled( const char* message )
|
||||
{
|
||||
long rv = 0;
|
||||
|
||||
if (mNotifiers)
|
||||
{
|
||||
PRUint32 i=0;
|
||||
for (; i < mNotifiers->GetSize(); i++)
|
||||
{
|
||||
nsIXPInstallProgress* element = (nsIXPInstallProgress*)mNotifiers->Get(i);
|
||||
if (element != NULL)
|
||||
if (element->ItemScheduled( message ) != 0)
|
||||
rv = -1;
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTopProgressNotifier::InstallFinalization( const char* message, PRInt32 itemNum, PRInt32 totNum )
|
||||
{
|
||||
if (mNotifiers)
|
||||
{
|
||||
PRUint32 i=0;
|
||||
for (; i < mNotifiers->GetSize(); i++)
|
||||
{
|
||||
nsIXPInstallProgress* element = (nsIXPInstallProgress*)mNotifiers->Get(i);
|
||||
if (element != NULL)
|
||||
element->InstallFinalization( message, itemNum, totNum );
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsTopProgressNotifier::InstallAborted(void)
|
||||
{
|
||||
if (mNotifiers)
|
||||
{
|
||||
PRUint32 i=0;
|
||||
for (; i < mNotifiers->GetSize(); i++)
|
||||
{
|
||||
nsIXPInstallProgress* element = (nsIXPInstallProgress*)mNotifiers->Get(i);
|
||||
if (element != NULL)
|
||||
element->InstallAborted();
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
57
mozilla/xpinstall/src/nsTopProgressNotifier.h
Normal file
57
mozilla/xpinstall/src/nsTopProgressNotifier.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#ifndef nsTopProgressNotifier_h__
|
||||
#define nsTopProgressNotifier_h__
|
||||
|
||||
#include "nsIXPInstallProgress.h"
|
||||
#include "nsVector.h"
|
||||
|
||||
|
||||
class nsTopProgressNotifier : public nsIXPInstallProgress
|
||||
{
|
||||
public:
|
||||
|
||||
nsTopProgressNotifier();
|
||||
virtual ~nsTopProgressNotifier();
|
||||
|
||||
long RegisterNotifier(nsIXPInstallProgress * newNotifier);
|
||||
void UnregisterNotifier(long id);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
|
||||
NS_IMETHOD BeforeJavascriptEvaluation();
|
||||
NS_IMETHOD AfterJavascriptEvaluation();
|
||||
NS_IMETHOD InstallStarted(const char* UIPackageName);
|
||||
NS_IMETHOD ItemScheduled(const char* message );
|
||||
NS_IMETHOD InstallFinalization(const char* message, PRInt32 itemNum, PRInt32 totNum );
|
||||
NS_IMETHOD InstallAborted();
|
||||
|
||||
private:
|
||||
nsVector *mNotifiers;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
144
mozilla/xpinstall/src/nsWinProfile.cpp
Normal file
144
mozilla/xpinstall/src/nsWinProfile.cpp
Normal file
@@ -0,0 +1,144 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "nsWinProfile.h"
|
||||
#include "nsWinProfileItem.h"
|
||||
#include "nspr.h"
|
||||
#include <windows.h>
|
||||
|
||||
/* Public Methods */
|
||||
|
||||
nsWinProfile::nsWinProfile( nsInstall* suObj, const nsString& folder, const nsString& file )
|
||||
{
|
||||
filename = new nsString(folder);
|
||||
if(filename->Last() != '\\')
|
||||
{
|
||||
filename->Append("\\");
|
||||
}
|
||||
filename->Append(file);
|
||||
|
||||
su = suObj;
|
||||
|
||||
// principal = suObj->GetPrincipal();
|
||||
// privMgr = nsPrivilegeManager::getPrivilegeManager();
|
||||
// impersonation = nsTarget::findTarget(IMPERSONATOR);
|
||||
// target = (nsUserTarget*)nsTarget::findTarget(INSTALL_PRIV);
|
||||
}
|
||||
|
||||
nsWinProfile::~nsWinProfile()
|
||||
{
|
||||
delete filename;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinProfile::getString(nsString section, nsString key, nsString* aReturn)
|
||||
{
|
||||
return nativeGetString(section, key, aReturn);
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinProfile::writeString(nsString section, nsString key, nsString value, PRInt32* aReturn)
|
||||
{
|
||||
nsWinProfileItem* wi = new nsWinProfileItem(this, section, key, value);
|
||||
|
||||
*aReturn = NS_OK;
|
||||
|
||||
if(wi == NULL)
|
||||
return PR_FALSE;
|
||||
|
||||
su->ScheduleForInstall(wi);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsString* nsWinProfile::getFilename()
|
||||
{
|
||||
return filename;
|
||||
}
|
||||
|
||||
nsInstall* nsWinProfile::installObject()
|
||||
{
|
||||
return su;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinProfile::finalWriteString( nsString section, nsString key, nsString value )
|
||||
{
|
||||
/* do we need another security check here? */
|
||||
return nativeWriteString(section, key, value);
|
||||
}
|
||||
|
||||
/* Private Methods */
|
||||
|
||||
#define STRBUFLEN 255
|
||||
|
||||
PRInt32
|
||||
nsWinProfile::nativeGetString(nsString section, nsString key, nsString* aReturn )
|
||||
{
|
||||
int numChars;
|
||||
char valbuf[STRBUFLEN];
|
||||
char* sectionCString;
|
||||
char* keyCString;
|
||||
char* filenameCString;
|
||||
|
||||
/* make sure conversions worked */
|
||||
if(section.First() != '\0' && key.First() != '\0' && filename->First() != '\0')
|
||||
{
|
||||
sectionCString = section.ToNewCString();
|
||||
keyCString = key.ToNewCString();
|
||||
filenameCString = filename->ToNewCString();
|
||||
|
||||
numChars = GetPrivateProfileString(sectionCString, keyCString, "", valbuf, STRBUFLEN, filenameCString);
|
||||
|
||||
*aReturn = valbuf;
|
||||
|
||||
delete [] sectionCString;
|
||||
delete [] keyCString;
|
||||
delete [] filenameCString;
|
||||
}
|
||||
|
||||
return numChars;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinProfile::nativeWriteString( nsString section, nsString key, nsString value )
|
||||
{
|
||||
char* sectionCString;
|
||||
char* keyCString;
|
||||
char* valueCString;
|
||||
char* filenameCString;
|
||||
int success = 0;
|
||||
|
||||
/* make sure conversions worked */
|
||||
if(section.First() != '\0' && key.First() != '\0' && filename->First() != '\0')
|
||||
{
|
||||
sectionCString = section.ToNewCString();
|
||||
keyCString = key.ToNewCString();
|
||||
valueCString = value.ToNewCString();
|
||||
filenameCString = filename->ToNewCString();
|
||||
|
||||
success = WritePrivateProfileString( sectionCString, keyCString, valueCString, filenameCString );
|
||||
|
||||
delete [] sectionCString;
|
||||
delete [] keyCString;
|
||||
delete [] valueCString;
|
||||
delete [] filenameCString;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
72
mozilla/xpinstall/src/nsWinProfile.h
Normal file
72
mozilla/xpinstall/src/nsWinProfile.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsWinProfile_h__
|
||||
#define nsWinProfile_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
#include "nsInstall.h"
|
||||
|
||||
class nsWinProfile
|
||||
{
|
||||
public:
|
||||
|
||||
/* Public Fields */
|
||||
|
||||
/* Public Methods */
|
||||
|
||||
nsWinProfile( nsInstall* suObj, const nsString& folder, const nsString& file );
|
||||
~nsWinProfile();
|
||||
|
||||
/**
|
||||
* Schedules a write into a windows "ini" file. "Value" can be
|
||||
* null to delete the value, but we don't support deleting an entire
|
||||
* section via a null "key". The actual write takes place during
|
||||
* SoftwareUpdate.FinalizeInstall();
|
||||
*
|
||||
* @return false for failure, true for success
|
||||
*/
|
||||
PRInt32 writeString( nsString section, nsString key, nsString value, PRInt32* aReturn );
|
||||
|
||||
/**
|
||||
* Reads a value from a windows "ini" file. We don't support using
|
||||
* a null "key" to return a list of keys--you have to know what you want
|
||||
*
|
||||
* @return String value from INI, "" if not found, null if error
|
||||
*/
|
||||
PRInt32 getString( nsString section, nsString key, nsString* aReturn );
|
||||
|
||||
nsString* getFilename();
|
||||
nsInstall* installObject();
|
||||
|
||||
PRInt32 finalWriteString( nsString section, nsString key, nsString value );
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/* Private Fields */
|
||||
nsString* filename;
|
||||
nsInstall* su;
|
||||
|
||||
/* Private Methods */
|
||||
PRInt32 nativeWriteString( nsString section, nsString key, nsString value );
|
||||
PRInt32 nativeGetString( nsString section, nsString key, nsString* aReturn );
|
||||
};
|
||||
|
||||
#endif /* nsWinProfile_h__ */
|
||||
107
mozilla/xpinstall/src/nsWinProfileItem.cpp
Normal file
107
mozilla/xpinstall/src/nsWinProfileItem.cpp
Normal file
@@ -0,0 +1,107 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
|
||||
#include "nsWinProfileItem.h"
|
||||
#include "nspr.h"
|
||||
#include <windows.h>
|
||||
|
||||
/* Public Methods */
|
||||
|
||||
nsWinProfileItem::nsWinProfileItem(nsWinProfile* profileObj,
|
||||
nsString sectionName,
|
||||
nsString keyName,
|
||||
nsString val) : nsInstallObject(profileObj->installObject())
|
||||
{
|
||||
profile = profileObj;
|
||||
section = new nsString(sectionName);
|
||||
key = new nsString(keyName);
|
||||
value = new nsString(val);
|
||||
}
|
||||
|
||||
nsWinProfileItem::~nsWinProfileItem()
|
||||
{
|
||||
delete profile;
|
||||
delete section;
|
||||
delete key;
|
||||
delete value;
|
||||
}
|
||||
|
||||
PRInt32 nsWinProfileItem::Complete()
|
||||
{
|
||||
profile->finalWriteString(*section, *key, *value);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
float nsWinProfileItem::GetInstallOrder()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
char* nsWinProfileItem::toString()
|
||||
{
|
||||
char* resultCString;
|
||||
nsString* result;
|
||||
nsString* filename = new nsString(*profile->getFilename());
|
||||
|
||||
result = new nsString("Write ");
|
||||
result->Append(*filename);
|
||||
result->Append(": [");
|
||||
result->Append(*section);
|
||||
result->Append("] ");
|
||||
result->Append(*key);
|
||||
result->Append("=");
|
||||
result->Append(*value);
|
||||
|
||||
resultCString = result->ToNewCString();
|
||||
delete result;
|
||||
delete filename;
|
||||
|
||||
return resultCString;
|
||||
}
|
||||
|
||||
void nsWinProfileItem::Abort()
|
||||
{
|
||||
}
|
||||
|
||||
PRInt32 nsWinProfileItem::Prepare()
|
||||
{
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
|
||||
/* CanUninstall
|
||||
* WinProfileItem() does not install any files which can be uninstalled,
|
||||
* hence this function returns false.
|
||||
*/
|
||||
PRBool
|
||||
nsWinProfileItem::CanUninstall()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* RegisterPackageNode
|
||||
* WinProfileItem() installs files which need to be registered,
|
||||
* hence this function returns true.
|
||||
*/
|
||||
PRBool
|
||||
nsWinProfileItem::RegisterPackageNode()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
79
mozilla/xpinstall/src/nsWinProfileItem.h
Normal file
79
mozilla/xpinstall/src/nsWinProfileItem.h
Normal file
@@ -0,0 +1,79 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsWinProfileItem_h__
|
||||
#define nsWinProfileItem_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
#include "nsSoftwareUpdate.h"
|
||||
#include "nsInstallObject.h"
|
||||
#include "nsWinProfile.h"
|
||||
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
class nsWinProfileItem : public nsInstallObject {
|
||||
|
||||
public:
|
||||
|
||||
/* Public Fields */
|
||||
|
||||
/* Public Methods */
|
||||
|
||||
nsWinProfileItem(nsWinProfile* profileObj,
|
||||
nsString sectionName,
|
||||
nsString keyName,
|
||||
nsString val);
|
||||
|
||||
~nsWinProfileItem();
|
||||
|
||||
/**
|
||||
* Completes the install:
|
||||
* - writes the data into the .INI file
|
||||
*/
|
||||
PRInt32 Complete();
|
||||
|
||||
float GetInstallOrder();
|
||||
|
||||
char* toString();
|
||||
|
||||
// no need for special clean-up
|
||||
void Abort();
|
||||
|
||||
// no need for set-up
|
||||
PRInt32 Prepare();
|
||||
|
||||
/* should these be protected? */
|
||||
PRBool CanUninstall();
|
||||
PRBool RegisterPackageNode();
|
||||
|
||||
private:
|
||||
|
||||
/* Private Fields */
|
||||
nsWinProfile* profile; // initiating profile object
|
||||
nsString* section; // Name of section
|
||||
nsString* key; // Name of key
|
||||
nsString* value; // data to write
|
||||
|
||||
/* Private Methods */
|
||||
|
||||
};
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* nsWinProfileItem_h__ */
|
||||
414
mozilla/xpinstall/src/nsWinReg.cpp
Normal file
414
mozilla/xpinstall/src/nsWinReg.cpp
Normal file
@@ -0,0 +1,414 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "nsWinReg.h"
|
||||
#include "nsWinRegItem.h"
|
||||
#include <windows.h> /* is this needed? */
|
||||
|
||||
/* Public Methods */
|
||||
|
||||
nsWinReg::nsWinReg(nsInstall* suObj)
|
||||
{
|
||||
su = suObj;
|
||||
|
||||
// principal = suObj->GetPrincipal();
|
||||
// privMgr = nsPrivilegeManager::getPrivilegeManager();
|
||||
// impersonation = nsTarget::findTarget(IMPERSONATOR);
|
||||
// target = (nsUserTarget*)nsTarget::findTarget(INSTALL_PRIV);
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::setRootKey(PRInt32 key)
|
||||
{
|
||||
rootkey = key;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::createKey(nsString subkey, nsString classname, PRInt32* aReturn)
|
||||
{
|
||||
// resolvePrivileges();
|
||||
|
||||
nsWinRegItem* wi = new nsWinRegItem(this, rootkey, NS_WIN_REG_CREATE, subkey, classname, "null");
|
||||
if(wi == nsnull)
|
||||
{
|
||||
// return (-1);
|
||||
// *aReturn = SaveError( result );
|
||||
return NS_OK;
|
||||
}
|
||||
su->ScheduleForInstall(wi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::deleteKey(nsString subkey, PRInt32* aReturn)
|
||||
{
|
||||
// resolvePrivileges();
|
||||
|
||||
nsWinRegItem* wi = new nsWinRegItem(this, rootkey, NS_WIN_REG_DELETE, subkey, "null", "null");
|
||||
if(wi == nsnull)
|
||||
{
|
||||
// return (-1);
|
||||
// *aReturn = SaveError( result );
|
||||
return NS_OK;
|
||||
}
|
||||
su->ScheduleForInstall(wi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::deleteValue(nsString subkey, nsString valname, PRInt32* aReturn)
|
||||
{
|
||||
// resolvePrivileges();
|
||||
|
||||
nsWinRegItem* wi = new nsWinRegItem(this, rootkey, NS_WIN_REG_DELETE_VAL, subkey, valname, "null");
|
||||
if(wi == nsnull)
|
||||
{
|
||||
// return (-1);
|
||||
// *aReturn = SaveError( result );
|
||||
return NS_OK;
|
||||
}
|
||||
su->ScheduleForInstall(wi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::setValueString(nsString subkey, nsString valname, nsString value, PRInt32* aReturn)
|
||||
{
|
||||
// resolvePrivileges();
|
||||
|
||||
nsWinRegItem* wi = new nsWinRegItem(this, rootkey, NS_WIN_REG_SET_VAL_STRING, subkey, valname, value);
|
||||
if(wi == nsnull)
|
||||
{
|
||||
// return (-1);
|
||||
// *aReturn = SaveError( result );
|
||||
return NS_OK;
|
||||
}
|
||||
su->ScheduleForInstall(wi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::getValueString(nsString subkey, nsString valname, nsString** aReturn)
|
||||
{
|
||||
// resolvePrivileges();
|
||||
|
||||
// return nativeGetValueString(subkey, valname);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::setValue(nsString subkey, nsString valname, nsWinRegValue* value, PRInt32* aReturn)
|
||||
{
|
||||
// resolvePrivileges();
|
||||
|
||||
// fix: need to figure out what to do with nsWinRegValue class.
|
||||
// nsWinRegItem* wi = new nsWinRegItem(this, rootkey, NS_WIN_REG_SET_VAL, subkey, valname, (nsWinRegValue*)value);
|
||||
// if(wi == nsnull)
|
||||
// {
|
||||
// return (-1);
|
||||
// *aReturn = SaveError(-1);
|
||||
// return NS_OK;
|
||||
// }
|
||||
// su->ScheduleForInstall(wi);
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::getValue(nsString subkey, nsString valname, nsWinRegValue** aReturn)
|
||||
{
|
||||
// resolvePrivileges();
|
||||
|
||||
// return nativeGetValue(subkey, valname);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsInstall* nsWinReg::installObject()
|
||||
{
|
||||
return su;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::finalCreateKey(PRInt32 root, nsString subkey, nsString classname, PRInt32* aReturn)
|
||||
{
|
||||
setRootKey(root);
|
||||
*aReturn = nativeCreateKey(subkey, classname);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::finalDeleteKey(PRInt32 root, nsString subkey, PRInt32* aReturn)
|
||||
{
|
||||
setRootKey(root);
|
||||
*aReturn = nativeDeleteKey(subkey);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::finalDeleteValue(PRInt32 root, nsString subkey, nsString valname, PRInt32* aReturn)
|
||||
{
|
||||
setRootKey(root);
|
||||
*aReturn = nativeDeleteValue(subkey, valname);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::finalSetValueString(PRInt32 root, nsString subkey, nsString valname, nsString value, PRInt32* aReturn)
|
||||
{
|
||||
setRootKey(root);
|
||||
*aReturn = nativeSetValueString(subkey, valname, value);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::finalSetValue(PRInt32 root, nsString subkey, nsString valname, nsWinRegValue* value, PRInt32* aReturn)
|
||||
{
|
||||
setRootKey(root);
|
||||
*aReturn = nativeSetValue(subkey, valname, value);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
/* Private Methods */
|
||||
|
||||
PRInt32
|
||||
nsWinReg::nativeCreateKey(nsString subkey, nsString classname)
|
||||
{
|
||||
HKEY root, newkey;
|
||||
LONG result;
|
||||
ULONG disposition;
|
||||
char* subkeyCString = subkey.ToNewCString();
|
||||
char* classnameCString = classname.ToNewCString();
|
||||
|
||||
#ifdef WIN32
|
||||
root = (HKEY)rootkey;
|
||||
result = RegCreateKeyEx(root, subkeyCString, 0, classnameCString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, nsnull, &newkey, &disposition);
|
||||
|
||||
if(ERROR_SUCCESS == result)
|
||||
{
|
||||
RegCloseKey( newkey );
|
||||
}
|
||||
#endif
|
||||
|
||||
delete [] subkeyCString;
|
||||
delete [] classnameCString;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::nativeDeleteKey(nsString subkey)
|
||||
{
|
||||
HKEY root;
|
||||
LONG result;
|
||||
char* subkeyCString = subkey.ToNewCString();
|
||||
|
||||
#ifdef WIN32
|
||||
root = (HKEY) rootkey;
|
||||
result = RegDeleteKey( root, subkeyCString );
|
||||
#endif
|
||||
|
||||
delete [] subkeyCString;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::nativeDeleteValue(nsString subkey, nsString valname)
|
||||
{
|
||||
#if defined (WIN32) || defined (XP_OS2)
|
||||
HKEY root, newkey;
|
||||
LONG result;
|
||||
char* subkeyCString = subkey.ToNewCString();
|
||||
char* valnameCString = valname.ToNewCString();
|
||||
|
||||
root = (HKEY) rootkey;
|
||||
result = RegOpenKeyEx( root, subkeyCString, 0, KEY_WRITE, &newkey);
|
||||
|
||||
if ( ERROR_SUCCESS == result )
|
||||
{
|
||||
result = RegDeleteValue( newkey, valnameCString );
|
||||
RegCloseKey( newkey );
|
||||
}
|
||||
|
||||
delete [] subkeyCString;
|
||||
delete [] valnameCString;
|
||||
|
||||
return result;
|
||||
#else
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
#endif
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsWinReg::nativeSetValueString(nsString subkey, nsString valname, nsString value)
|
||||
{
|
||||
HKEY root;
|
||||
HKEY newkey;
|
||||
LONG result;
|
||||
DWORD length;
|
||||
|
||||
char* subkeyCString = subkey.ToNewCString();
|
||||
char* valnameCString = valname.ToNewCString();
|
||||
char* valueCString = value.ToNewCString();
|
||||
|
||||
length = subkey.Length();
|
||||
|
||||
#ifdef WIN32
|
||||
root = (HKEY) rootkey;
|
||||
result = RegOpenKeyEx( root, subkeyCString, 0, KEY_ALL_ACCESS, &newkey);
|
||||
|
||||
if(ERROR_SUCCESS == result)
|
||||
{
|
||||
result = RegSetValueEx( newkey, valnameCString, 0, REG_SZ, (unsigned char*)valueCString, length );
|
||||
RegCloseKey( newkey );
|
||||
}
|
||||
#endif
|
||||
|
||||
delete [] subkeyCString;
|
||||
delete [] valnameCString;
|
||||
delete [] valueCString;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#define STRBUFLEN 255
|
||||
|
||||
nsString*
|
||||
nsWinReg::nativeGetValueString(nsString subkey, nsString valname)
|
||||
{
|
||||
unsigned char valbuf[STRBUFLEN];
|
||||
HKEY root;
|
||||
HKEY newkey;
|
||||
LONG result;
|
||||
DWORD type = REG_SZ;
|
||||
DWORD length = STRBUFLEN;
|
||||
nsString* value;
|
||||
char* subkeyCString = subkey.ToNewCString();
|
||||
char* valnameCString = valname.ToNewCString();
|
||||
|
||||
|
||||
#ifdef WIN32
|
||||
root = (HKEY) rootkey;
|
||||
result = RegOpenKeyEx( root, subkeyCString, 0, KEY_ALL_ACCESS, &newkey );
|
||||
|
||||
if ( ERROR_SUCCESS == result ) {
|
||||
result = RegQueryValueEx( newkey, valnameCString, nsnull, &type, valbuf, &length );
|
||||
|
||||
RegCloseKey( newkey );
|
||||
}
|
||||
|
||||
if(ERROR_SUCCESS == result && type == REG_SZ)
|
||||
{
|
||||
value = new nsString((char*)valbuf);
|
||||
}
|
||||
#endif
|
||||
|
||||
delete [] subkeyCString;
|
||||
delete [] valnameCString;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
PRInt32
|
||||
nsWinReg::nativeSetValue(nsString subkey, nsString valname, nsWinRegValue* value)
|
||||
{
|
||||
#if defined (WIN32) || defined (XP_OS2)
|
||||
HKEY root;
|
||||
HKEY newkey;
|
||||
LONG result;
|
||||
DWORD length;
|
||||
DWORD type;
|
||||
unsigned char* data;
|
||||
char* subkeyCString = subkey.ToNewCString();
|
||||
char* valnameCString = valname.ToNewCString();
|
||||
|
||||
|
||||
root = (HKEY) rootkey;
|
||||
result = RegOpenKeyEx( root, subkeyCString, 0, KEY_ALL_ACCESS, &newkey );
|
||||
|
||||
if(ERROR_SUCCESS == result)
|
||||
{
|
||||
type = (DWORD)value->type;
|
||||
data = (unsigned char*)value->data;
|
||||
length = (DWORD)value->data_length;
|
||||
|
||||
result = RegSetValueEx( newkey, valnameCString, 0, type, data, length);
|
||||
RegCloseKey( newkey );
|
||||
}
|
||||
|
||||
delete [] subkeyCString;
|
||||
delete [] valnameCString;
|
||||
|
||||
return result;
|
||||
#else
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
#endif
|
||||
}
|
||||
|
||||
nsWinRegValue*
|
||||
nsWinReg::nativeGetValue(nsString subkey, nsString valname)
|
||||
{
|
||||
#if defined (WIN32) || defined (XP_OS2)
|
||||
unsigned char valbuf[STRBUFLEN];
|
||||
HKEY root;
|
||||
HKEY newkey;
|
||||
LONG result;
|
||||
DWORD length=STRBUFLEN;
|
||||
DWORD type;
|
||||
nsString* data;
|
||||
nsWinRegValue* value = nsnull;
|
||||
char* subkeyCString = subkey.ToNewCString();
|
||||
char* valnameCString = valname.ToNewCString();
|
||||
|
||||
root = (HKEY) rootkey;
|
||||
result = RegOpenKeyEx( root, subkeyCString, 0, KEY_ALL_ACCESS, &newkey );
|
||||
|
||||
if(ERROR_SUCCESS == result)
|
||||
{
|
||||
result = RegQueryValueEx( newkey, valnameCString, nsnull, &type, valbuf, &length );
|
||||
|
||||
if ( ERROR_SUCCESS == result ) {
|
||||
data = new nsString((char*)valbuf);
|
||||
length = data->Length();
|
||||
value = new nsWinRegValue(type, (void*)data, length);
|
||||
}
|
||||
|
||||
RegCloseKey( newkey );
|
||||
}
|
||||
|
||||
delete [] subkeyCString;
|
||||
delete [] valnameCString;
|
||||
|
||||
return value;
|
||||
#else
|
||||
return nsnull;
|
||||
#endif
|
||||
}
|
||||
|
||||
// PRBool
|
||||
// nsWinReg::resolvePrivileges()
|
||||
// {
|
||||
// if(privMgr->enablePrivilege(impersonation, 1) &&
|
||||
// privMgr->enablePrivilege(target, principal, 1))
|
||||
// return TRUE;
|
||||
// else
|
||||
// return FALSE;
|
||||
// }
|
||||
|
||||
103
mozilla/xpinstall/src/nsWinReg.h
Normal file
103
mozilla/xpinstall/src/nsWinReg.h
Normal file
@@ -0,0 +1,103 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef __NS_WINREG_H__
|
||||
#define __NS_WINREG_H__
|
||||
|
||||
#include "nsWinRegEnums.h"
|
||||
#include "nsWinRegValue.h"
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsISupports.h"
|
||||
|
||||
#include "jsapi.h"
|
||||
|
||||
#include "plevent.h"
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsFileSpec.h"
|
||||
#include "nsVector.h"
|
||||
#include "nsHashtable.h"
|
||||
|
||||
#include "nsSoftwareUpdate.h"
|
||||
|
||||
#include "nsInstallObject.h"
|
||||
#include "nsInstallVersion.h"
|
||||
#include "nsInstall.h"
|
||||
|
||||
class nsWinReg
|
||||
{
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
HKEY_CLASSES_ROOT = 0x80000000,
|
||||
HKEY_CURRENT_USER = 0x80000001,
|
||||
HKEY_LOCAL_MACHINE = 0x80000002,
|
||||
HKEY_USERS = 0x80000003
|
||||
};
|
||||
|
||||
/* Public Fields */
|
||||
|
||||
/* Public Methods */
|
||||
|
||||
nsWinReg(nsInstall* suObj);
|
||||
|
||||
PRInt32 setRootKey(PRInt32 key);
|
||||
PRInt32 createKey(nsString subkey, nsString classname, PRInt32* aReturn);
|
||||
PRInt32 deleteKey(nsString subkey, PRInt32* aReturn);
|
||||
PRInt32 deleteValue(nsString subkey, nsString valname, PRInt32* aReturn);
|
||||
PRInt32 setValueString(nsString subkey, nsString valname, nsString value, PRInt32* aReturn);
|
||||
PRInt32 getValueString(nsString subkey, nsString valname, nsString** aReturn);
|
||||
PRInt32 setValue(nsString subkey, nsString valname, nsWinRegValue* value, PRInt32* aReturn);
|
||||
PRInt32 getValue(nsString subkey, nsString valname, nsWinRegValue** aReturn);
|
||||
|
||||
nsInstall* installObject(void);
|
||||
|
||||
PRInt32 finalCreateKey(PRInt32 root, nsString subkey, nsString classname, PRInt32* aReturn);
|
||||
PRInt32 finalDeleteKey(PRInt32 root, nsString subkey, PRInt32* aReturn);
|
||||
PRInt32 finalDeleteValue(PRInt32 root, nsString subkey, nsString valname, PRInt32* aReturn);
|
||||
PRInt32 finalSetValueString(PRInt32 root, nsString subkey, nsString valname, nsString value, PRInt32* aReturn);
|
||||
PRInt32 finalSetValue(PRInt32 root, nsString subkey, nsString valname, nsWinRegValue* value, PRInt32* aReturn);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
/* Private Fields */
|
||||
PRInt32 rootkey;
|
||||
// nsPrincipal* principal;
|
||||
// nsPrivilegeManager* privMgr;
|
||||
// nsTarget* impersonation;
|
||||
nsInstall* su;
|
||||
|
||||
// nsUserTarget* target;
|
||||
|
||||
/* Private Methods */
|
||||
PRInt32 nativeCreateKey(nsString subkey, nsString classname);
|
||||
PRInt32 nativeDeleteKey(nsString subkey);
|
||||
PRInt32 nativeDeleteValue(nsString subkey, nsString valname);
|
||||
|
||||
PRInt32 nativeSetValueString(nsString subkey, nsString valname, nsString value);
|
||||
nsString* nativeGetValueString(nsString subkey, nsString valname);
|
||||
|
||||
PRInt32 nativeSetValue(nsString subkey, nsString valname, nsWinRegValue* value);
|
||||
nsWinRegValue* nativeGetValue(nsString subkey, nsString valname);
|
||||
// PRBool resolvePrivileges();
|
||||
};
|
||||
|
||||
#endif /* __NS_WINREG_H__ */
|
||||
46
mozilla/xpinstall/src/nsWinRegEnums.h
Normal file
46
mozilla/xpinstall/src/nsWinRegEnums.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsWinRegEnums_h__
|
||||
#define nsWinRegEnums_h__
|
||||
|
||||
typedef enum nsWinRegEnum {
|
||||
NS_WIN_REG_CREATE = 1,
|
||||
NS_WIN_REG_DELETE = 2,
|
||||
NS_WIN_REG_DELETE_VAL = 3,
|
||||
NS_WIN_REG_SET_VAL_STRING = 4,
|
||||
NS_WIN_REG_SET_VAL = 5
|
||||
|
||||
} nsWinRegEnum;
|
||||
|
||||
|
||||
typedef enum nsWinRegValueEnum {
|
||||
NS_WIN_REG_SZ = 1,
|
||||
NS_WIN_REG_EXPAND_SZ = 2,
|
||||
NS_WIN_REG_BINARY = 3,
|
||||
NS_WIN_REG_DWORD = 4,
|
||||
NS_WIN_REG_DWORD_LITTLE_ENDIAN = 4,
|
||||
NS_WIN_REG_DWORD_BIG_ENDIAN = 5,
|
||||
NS_WIN_REG_LINK = 6,
|
||||
NS_WIN_REG_MULTI_SZ = 7,
|
||||
NS_WIN_REG_RESOURCE_LIST = 8,
|
||||
NS_WIN_REG_FULL_RESOURCE_DESCRIPTOR = 9,
|
||||
NS_WIN_REG_RESOURCE_REQUIREMENTS_LIST = 10
|
||||
} nsWinRegValueEnum;
|
||||
|
||||
#endif /* nsWinRegEnums_h__ */
|
||||
255
mozilla/xpinstall/src/nsWinRegItem.cpp
Normal file
255
mozilla/xpinstall/src/nsWinRegItem.cpp
Normal file
@@ -0,0 +1,255 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "nsWinRegItem.h"
|
||||
#include "nspr.h"
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h> /* is this needed? */
|
||||
#endif
|
||||
|
||||
/* Public Methods */
|
||||
|
||||
nsWinRegItem::nsWinRegItem(nsWinReg* regObj, PRInt32 root, PRInt32 action, nsString sub, nsString valname, nsString val)
|
||||
: nsInstallObject(regObj->installObject())
|
||||
{
|
||||
reg = regObj;
|
||||
command = action;
|
||||
rootkey = root;
|
||||
|
||||
/* I'm assuming we need to copy these */
|
||||
subkey = new nsString(sub);
|
||||
name = new nsString(valname);
|
||||
value = new nsString(val);
|
||||
}
|
||||
|
||||
nsWinRegItem::~nsWinRegItem()
|
||||
{
|
||||
delete reg;
|
||||
delete subkey;
|
||||
delete name;
|
||||
delete value;
|
||||
}
|
||||
|
||||
PRInt32 nsWinRegItem::Complete()
|
||||
{
|
||||
PRInt32 aReturn = NS_OK;
|
||||
|
||||
switch (command)
|
||||
{
|
||||
case NS_WIN_REG_CREATE:
|
||||
reg->finalCreateKey(rootkey, *subkey, *name, &aReturn);
|
||||
break;
|
||||
case NS_WIN_REG_DELETE:
|
||||
reg->finalDeleteKey(rootkey, *subkey, &aReturn);
|
||||
break;
|
||||
case NS_WIN_REG_DELETE_VAL:
|
||||
reg->finalDeleteValue(rootkey, *subkey, *name, &aReturn);
|
||||
break;
|
||||
case NS_WIN_REG_SET_VAL_STRING:
|
||||
reg->finalSetValueString(rootkey, *subkey, *name, *(nsString*)value, &aReturn);
|
||||
break;
|
||||
case NS_WIN_REG_SET_VAL:
|
||||
reg->finalSetValue(rootkey, *subkey, *name, (nsWinRegValue*)value, &aReturn);
|
||||
break;
|
||||
}
|
||||
return aReturn;
|
||||
}
|
||||
|
||||
float nsWinRegItem::GetInstallOrder()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
#define kCRK "Create Registry Key "
|
||||
#define kDRK "Delete Registry key "
|
||||
#define kDRV "Delete Registry value "
|
||||
#define kSRV "Store Registry value "
|
||||
#define kUNK "Unknown "
|
||||
|
||||
char* nsWinRegItem::toString()
|
||||
{
|
||||
nsString* keyString;
|
||||
nsString* result;
|
||||
char* resultCString;
|
||||
|
||||
switch(command)
|
||||
{
|
||||
case NS_WIN_REG_CREATE:
|
||||
keyString = keystr(rootkey, subkey, nsnull);
|
||||
result = new nsString(kCRK);
|
||||
result->Append(*keyString);
|
||||
resultCString = result->ToNewCString();
|
||||
delete keyString;
|
||||
delete result;
|
||||
return resultCString;
|
||||
case NS_WIN_REG_DELETE:
|
||||
keyString = keystr(rootkey, subkey, nsnull);
|
||||
result = new nsString(kDRK);
|
||||
result->Append(*keyString);
|
||||
resultCString = result->ToNewCString();
|
||||
delete keyString;
|
||||
delete result;
|
||||
return resultCString;
|
||||
case NS_WIN_REG_DELETE_VAL:
|
||||
keyString = keystr(rootkey, subkey, name);
|
||||
result = new nsString(kDRV);
|
||||
result->Append(*keyString);
|
||||
resultCString = result->ToNewCString();
|
||||
delete keyString;
|
||||
delete result;
|
||||
return resultCString;
|
||||
case NS_WIN_REG_SET_VAL_STRING:
|
||||
keyString = keystr(rootkey, subkey, name);
|
||||
result = new nsString(kSRV);
|
||||
result->Append(*keyString);
|
||||
resultCString = result->ToNewCString();
|
||||
delete keyString;
|
||||
delete result;
|
||||
return resultCString;
|
||||
case NS_WIN_REG_SET_VAL:
|
||||
keyString = keystr(rootkey, subkey, name);
|
||||
result = new nsString(kSRV);
|
||||
result->Append(*keyString);
|
||||
resultCString = result->ToNewCString();
|
||||
delete keyString;
|
||||
delete result;
|
||||
return resultCString;
|
||||
default:
|
||||
keyString = keystr(rootkey, subkey, name);
|
||||
result = new nsString(kUNK);
|
||||
result->Append(*keyString);
|
||||
resultCString = result->ToNewCString();
|
||||
delete keyString;
|
||||
delete result;
|
||||
return resultCString;
|
||||
}
|
||||
}
|
||||
|
||||
PRInt32 nsWinRegItem::Prepare()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void nsWinRegItem::Abort()
|
||||
{
|
||||
}
|
||||
|
||||
/* Private Methods */
|
||||
|
||||
nsString* nsWinRegItem::keystr(PRInt32 root, nsString* subkey, nsString* name)
|
||||
{
|
||||
nsString* rootstr;
|
||||
nsString* finalstr;
|
||||
char* istr;
|
||||
|
||||
switch(root)
|
||||
{
|
||||
case (int)(HKEY_CLASSES_ROOT) :
|
||||
rootstr = new nsString("\\HKEY_CLASSES_ROOT\\");
|
||||
break;
|
||||
case (int)(HKEY_CURRENT_USER) :
|
||||
rootstr = new nsString("\\HKEY_CURRENT_USER\\");
|
||||
break;
|
||||
case (int)(HKEY_LOCAL_MACHINE) :
|
||||
rootstr = new nsString("\\HKEY_LOCAL_MACHINE\\");
|
||||
break;
|
||||
case (int)(HKEY_USERS) :
|
||||
rootstr = new nsString("\\HKEY_USERS\\");
|
||||
break;
|
||||
default:
|
||||
istr = itoa(root);
|
||||
rootstr = new nsString("\\#");
|
||||
rootstr->Append(istr);
|
||||
rootstr->Append("\\");
|
||||
PR_DELETE(istr);
|
||||
break;
|
||||
}
|
||||
|
||||
finalstr = new nsString(*rootstr);
|
||||
if(name != nsnull)
|
||||
{
|
||||
finalstr->Append(*subkey);
|
||||
finalstr->Append(" [");
|
||||
finalstr->Append(*name);
|
||||
finalstr->Append("]");
|
||||
}
|
||||
delete rootstr;
|
||||
return finalstr;
|
||||
}
|
||||
|
||||
|
||||
char* nsWinRegItem::itoa(PRInt32 n)
|
||||
{
|
||||
char* s;
|
||||
int i, sign;
|
||||
if((sign = n) < 0)
|
||||
n = -n;
|
||||
i = 0;
|
||||
|
||||
s = (char*)PR_CALLOC(sizeof(char));
|
||||
|
||||
do
|
||||
{
|
||||
s = (char*)PR_REALLOC(s, (i+1)*sizeof(char));
|
||||
s[i++] = n%10 + '0';
|
||||
s[i] = '\0';
|
||||
} while ((n/=10) > 0);
|
||||
|
||||
if(sign < 0)
|
||||
{
|
||||
s = (char*)PR_REALLOC(s, (i+1)*sizeof(char));
|
||||
s[i++] = '-';
|
||||
}
|
||||
s[i] = '\0';
|
||||
reverseString(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
void nsWinRegItem::reverseString(char* s)
|
||||
{
|
||||
int c, i, j;
|
||||
|
||||
for(i=0, j=strlen(s)-1; i<j; i++, j--)
|
||||
{
|
||||
c = s[i];
|
||||
s[i] = s[j];
|
||||
s[j] = c;
|
||||
}
|
||||
}
|
||||
|
||||
/* CanUninstall
|
||||
* WinRegItem() does not install any files which can be uninstalled,
|
||||
* hence this function returns false.
|
||||
*/
|
||||
PRBool
|
||||
nsWinRegItem:: CanUninstall()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* RegisterPackageNode
|
||||
* WinRegItem() installs files which need to be registered,
|
||||
* hence this function returns true.
|
||||
*/
|
||||
PRBool
|
||||
nsWinRegItem:: RegisterPackageNode()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
82
mozilla/xpinstall/src/nsWinRegItem.h
Normal file
82
mozilla/xpinstall/src/nsWinRegItem.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsWinRegItem_h__
|
||||
#define nsWinRegItem_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
#include "nsSoftwareUpdate.h"
|
||||
#include "nsInstallObject.h"
|
||||
#include "nsWinReg.h"
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
class nsWinRegItem : public nsInstallObject {
|
||||
|
||||
public:
|
||||
|
||||
/* Public Fields */
|
||||
|
||||
/* Public Methods */
|
||||
nsWinRegItem(nsWinReg* regObj,
|
||||
PRInt32 root,
|
||||
PRInt32 action,
|
||||
nsString sub,
|
||||
nsString valname,
|
||||
nsString val);
|
||||
|
||||
~nsWinRegItem();
|
||||
|
||||
PRInt32 Prepare(void);
|
||||
|
||||
PRInt32 Complete();
|
||||
|
||||
char* toString();
|
||||
|
||||
void Abort();
|
||||
|
||||
float GetInstallOrder();
|
||||
|
||||
|
||||
/* should these be protected? */
|
||||
PRBool CanUninstall();
|
||||
PRBool RegisterPackageNode();
|
||||
|
||||
private:
|
||||
|
||||
/* Private Fields */
|
||||
|
||||
nsWinReg* reg; // initiating WinReg object
|
||||
PRInt32 rootkey;
|
||||
PRInt32 command;
|
||||
nsString* subkey; // Name of section
|
||||
nsString* name; // Name of key
|
||||
void* value; // data to write
|
||||
|
||||
/* Private Methods */
|
||||
|
||||
nsString* keystr(PRInt32 root, nsString* subkey, nsString* name);
|
||||
|
||||
char* itoa(PRInt32 n);
|
||||
void reverseString(char* s);
|
||||
};
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* nsWinRegItem_h__ */
|
||||
24
mozilla/xpinstall/src/nsWinRegValue.cpp
Normal file
24
mozilla/xpinstall/src/nsWinRegValue.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "nsWinRegValue.h"
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
|
||||
PR_END_EXTERN_C
|
||||
56
mozilla/xpinstall/src/nsWinRegValue.h
Normal file
56
mozilla/xpinstall/src/nsWinRegValue.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#ifndef nsWinRegValue_h__
|
||||
#define nsWinRegValue_h__
|
||||
|
||||
#include "prtypes.h"
|
||||
|
||||
|
||||
PR_BEGIN_EXTERN_C
|
||||
|
||||
struct nsWinRegValue {
|
||||
|
||||
public:
|
||||
|
||||
/* Public Fields */
|
||||
PRInt32 type;
|
||||
void* data;
|
||||
PRInt32 data_length;
|
||||
|
||||
/* Public Methods */
|
||||
nsWinRegValue(PRInt32 datatype, void* regdata, PRInt32 len)
|
||||
{
|
||||
type = datatype;
|
||||
data = regdata;
|
||||
data_length = len;
|
||||
}
|
||||
|
||||
/* should we copy the regdata? */
|
||||
private:
|
||||
|
||||
/* Private Fields */
|
||||
|
||||
|
||||
/* Private Methods */
|
||||
|
||||
};
|
||||
|
||||
PR_END_EXTERN_C
|
||||
|
||||
#endif /* nsWinRegValue_h__ */
|
||||
49
mozilla/xpinstall/standalone/makefile.win
Normal file
49
mozilla/xpinstall/standalone/makefile.win
Normal file
@@ -0,0 +1,49 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public License
|
||||
# Version 1.0 (the "NPL"); you may not use this file except in
|
||||
# compliance with the NPL. You may obtain a copy of the NPL at
|
||||
# http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
# for the specific language governing rights and limitations under the
|
||||
# NPL.
|
||||
#
|
||||
# The Initial Developer of this code under the NPL is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
# Reserved.
|
||||
DEPTH=..\..
|
||||
|
||||
MAKE_OBJ_TYPE = EXE
|
||||
PROGRAM = .\$(OBJDIR)\xpinstall.exe
|
||||
|
||||
OBJS = \
|
||||
.\$(OBJDIR)\standalone.obj \
|
||||
.\$(OBJDIR)\nsSimpleConsoleProgressNotifier.obj \
|
||||
$(NULL)
|
||||
|
||||
LLIBS = \
|
||||
$(DIST)\lib\xpinstall.lib \
|
||||
$(DIST)\lib\raptorbase.lib \
|
||||
$(DIST)\lib\xpcom32.lib \
|
||||
$(LIBNSPR) \
|
||||
$(NULL)
|
||||
|
||||
LINCS = \
|
||||
-I$(PUBLIC)\xpcom \
|
||||
-I$(PUBLIC)\xpinstall \
|
||||
-I$(PUBLIC)\raptor \
|
||||
$(NULL)
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
export:: $(PROGRAM)
|
||||
$(MAKE_INSTALL) $(PROGRAM) $(DIST)\bin
|
||||
|
||||
clobber::
|
||||
rm -f $(DIST)\bin\xpinstall.exe
|
||||
|
||||
$(PROGRAM):: $(OBJS) $(LLIBS)
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
#include "nsIXPInstallProgressNotifier.h"
|
||||
#include "nsSimpleConsoleProgressNotifier.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
nsSimpleConsoleProgressNotifier::nsSimpleConsoleProgressNotifier()
|
||||
{}
|
||||
|
||||
nsSimpleConsoleProgressNotifier::~nsSimpleConsoleProgressNotifier()
|
||||
{}
|
||||
|
||||
void
|
||||
nsSimpleConsoleProgressNotifier::BeforeJavascriptEvaluation(void)
|
||||
{
|
||||
printf("Prior to evaluation of Install Script\n");
|
||||
}
|
||||
|
||||
void
|
||||
nsSimpleConsoleProgressNotifier::AfterJavascriptEvaluation(void)
|
||||
{
|
||||
printf("After evaluation of Install Script\n");
|
||||
}
|
||||
|
||||
void
|
||||
nsSimpleConsoleProgressNotifier::InstallStarted(const char* UIPackageName)
|
||||
{
|
||||
printf("Installing: %s\n", UIPackageName);
|
||||
}
|
||||
|
||||
long
|
||||
nsSimpleConsoleProgressNotifier::ItemScheduled(const char* message )
|
||||
{
|
||||
printf("Scheduled Item:\t%s\n", message);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
nsSimpleConsoleProgressNotifier::InstallFinalization(const char* message, long itemNum, long totNum )
|
||||
{
|
||||
printf("Item: %s\t(%ld of %ld) Installed.\n", message, itemNum, totNum );
|
||||
}
|
||||
|
||||
void
|
||||
nsSimpleConsoleProgressNotifier::InstallAborted(void)
|
||||
{
|
||||
printf("Installation aborted.\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*
|
||||
* Contributors:
|
||||
* Daniel Veditz <dveditz@netscape.com>
|
||||
* Douglas Turner <dougt@netscape.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef nsSimpleConsoleProgressNotifier_H__
|
||||
#define nsSimpleConsoleProgressNotifier_H__
|
||||
|
||||
#include "nsIXPInstallProgressNotifier.h"
|
||||
|
||||
class nsSimpleConsoleProgressNotifier : public nsIXPInstallProgressNotifier
|
||||
{
|
||||
public:
|
||||
|
||||
nsSimpleConsoleProgressNotifier();
|
||||
virtual ~nsSimpleConsoleProgressNotifier();
|
||||
|
||||
void BeforeJavascriptEvaluation(void);
|
||||
void AfterJavascriptEvaluation(void);
|
||||
void InstallStarted(const char* UIPackageName);
|
||||
long ItemScheduled(const char* message );
|
||||
void InstallFinalization(const char* message, long itemNum, long totNum );
|
||||
void InstallAborted(void);
|
||||
};
|
||||
|
||||
#endif
|
||||
141
mozilla/xpinstall/standalone/standalone.cpp
Normal file
141
mozilla/xpinstall/standalone/standalone.cpp
Normal file
@@ -0,0 +1,141 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "nsRepository.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsCOMPtr.h"
|
||||
|
||||
#include "nsSpecialSystemDirectory.h"
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nspr.h"
|
||||
|
||||
#include "nsSimpleConsoleProgressNotifier.h"
|
||||
|
||||
/*********************************************
|
||||
SoftwareUpdate
|
||||
*********************************************/
|
||||
#include "nsISoftwareUpdate.h"
|
||||
#include "nsSoftwareUpdateIIDs.h"
|
||||
|
||||
static nsISoftwareUpdate *softwareUpdate= NULL;
|
||||
static NS_DEFINE_IID(kFileLocatorIID, NS_IFILELOCATOR_IID);
|
||||
static NS_DEFINE_IID(kFileLocatorCID, NS_FILELOCATOR_CID);
|
||||
/*********************************************/
|
||||
|
||||
|
||||
extern "C" void
|
||||
NS_SetupRegistry()
|
||||
{
|
||||
// Autoregistration happens here. The rest of RegisterComponent() calls should happen
|
||||
// only for dlls not in the components directory.
|
||||
|
||||
// Create exeDir/"components"
|
||||
nsSpecialSystemDirectory sysdir(nsSpecialSystemDirectory::OS_CurrentProcessDirectory);
|
||||
sysdir += "components";
|
||||
const char *componentsDir = sysdir.GetCString(); // native path
|
||||
if (componentsDir != NULL)
|
||||
{
|
||||
#ifdef XP_PC
|
||||
/* The PC version of the directory from filePath is of the form
|
||||
* /y|/moz/mozilla/dist/bin/components
|
||||
* We need to remove the initial / and change the | to :
|
||||
* for all this to work with NSPR.
|
||||
*/
|
||||
#endif /* XP_PC */
|
||||
printf("nsComponentManager: Using components dir: %s\n", componentsDir);
|
||||
|
||||
#ifdef XP_MAC
|
||||
nsComponentManager::AutoRegister(nsIComponentManager::NS_Startup, nsnull);
|
||||
#else
|
||||
nsComponentManager::AutoRegister(nsIComponentManager::NS_Startup, componentsDir);
|
||||
#endif /* XP_MAC */
|
||||
// XXX Look for user specific components
|
||||
// XXX UNIX: ~/.mozilla/components
|
||||
}
|
||||
}
|
||||
/***************************************************************************/
|
||||
|
||||
static void
|
||||
xpinstall_usage(int argc, char *argv[])
|
||||
{
|
||||
fprintf(stderr, "Usage: %s [-f flags] [-a arguments] filename\n", argv[0]);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
|
||||
for (int i = 1; i < argc; i++)
|
||||
{
|
||||
if (argv[i][0] != '-')
|
||||
break;
|
||||
|
||||
switch (argv[i][1])
|
||||
{
|
||||
case 'f':
|
||||
if (argv[i][2] == '\0' && i == argc)
|
||||
{
|
||||
fputs("ERROR: missing path after -f\n", stderr);
|
||||
xpinstall_usage(argc, argv);
|
||||
return 1;
|
||||
}
|
||||
//foo = argv[i + 1];
|
||||
i++;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "unknown option %s\n", argv[i]);
|
||||
xpinstall_usage(argc, argv);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_SetupRegistry();
|
||||
|
||||
|
||||
|
||||
nsresult rv = nsComponentManager::CreateInstance(kSoftwareUpdateCID,
|
||||
nsnull,
|
||||
kISoftwareUpdateIID,
|
||||
(void**) &softwareUpdate);
|
||||
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
|
||||
nsSimpleConsoleProgressNotifier *progress = new nsSimpleConsoleProgressNotifier();
|
||||
|
||||
softwareUpdate->RegisterNotifier(progress);
|
||||
|
||||
|
||||
nsFileSpec jarFile(argv[i]);
|
||||
nsFileURL jarFileURL(jarFile);
|
||||
|
||||
softwareUpdate->InstallJar( nsString( jarFileURL.GetAsString() ) ,
|
||||
nsString( nsNSPRPath(jarFile) ),
|
||||
0x00000001);
|
||||
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,67 +0,0 @@
|
||||
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Sean Su <ssu@netscape.com>
|
||||
*/
|
||||
|
||||
#ifndef _DIALOGS_H_
|
||||
#define _DIALOGS_H_
|
||||
|
||||
LRESULT CALLBACK DlgProcMain(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
LRESULT CALLBACK DlgProcWelcome(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcLicense(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcSetupType(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcSelectComponents(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcSelectAdditionalComponents(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcWindowsIntegration(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcProgramFolder(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcDownloadOptions(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcAdvancedSettings(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcSiteSelector(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcStartInstall(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcReboot(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK DlgProcMessage(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
LRESULT CALLBACK NewListBoxWndProc( HWND, UINT, WPARAM, LPARAM);
|
||||
LRESULT CALLBACK DlgProcUpgrade(HWND hDlg, UINT msg, WPARAM wParam, LONG lParam);
|
||||
|
||||
void ToggleCheck(HWND hwndListBox, DWORD dwIndex, DWORD dwACFlag);
|
||||
void AskCancelDlg(HWND hDlg);
|
||||
void lbAddItem(HWND hList, siC *siCComponent);
|
||||
HWND InstantiateDialog(HWND hParent, DWORD dwDlgID, LPSTR szTitle, WNDPROC wpDlgProc);
|
||||
void DlgSequenceNext(void);
|
||||
void DlgSequencePrev(void);
|
||||
void PaintGradientShade(HWND hWnd, HDC hdc);
|
||||
BOOL BrowseForDirectory(HWND hDlg, char *szCurrDir);
|
||||
LRESULT CALLBACK BrowseHookProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
void ShowMessage(LPSTR szMessage, BOOL bShow);
|
||||
void DrawCheck(LPDRAWITEMSTRUCT lpdis, DWORD dwACFlag);
|
||||
void InvalidateLBCheckbox(HWND hwndListBox);
|
||||
void ProcessWindowsMessages(void);
|
||||
BOOL CheckWizardStateCustom(DWORD dwDefault);
|
||||
void SunJavaDependencyHack(DWORD dwIndex, BOOL bSelected, DWORD dwACFlag);
|
||||
LPSTR GetStartInstallMessage(void);
|
||||
void AppendStringWOAmpersand(LPSTR szInputString, DWORD dwInputStringSize, LPSTR szString);
|
||||
void TruncateString(HWND hWnd, LPSTR szInPath, DWORD dwInPathBufSize, LPSTR szOutPath, DWORD dwOutPathBufSize);
|
||||
void SaveDownloadOptions(HWND hDlg, HWND hwndCBSiteSelector);
|
||||
WNDPROC SubclassWindow( HWND hWnd, WNDPROC NewWndProc);
|
||||
LRESULT CALLBACK ListBoxBrowseWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
#endif
|
||||
@@ -1,95 +0,0 @@
|
||||
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Sean Su <ssu@netscape.com>
|
||||
*/
|
||||
|
||||
#ifndef _EXTERN_H_
|
||||
#define _EXTERN_H_
|
||||
|
||||
#include "setup.h"
|
||||
|
||||
/* external global variables */
|
||||
extern HINSTANCE hInst;
|
||||
extern HINSTANCE hSetupRscInst;
|
||||
extern HINSTANCE hSDInst;
|
||||
extern HINSTANCE hXPIStubInst;
|
||||
|
||||
extern HBITMAP hbmpBoxChecked;
|
||||
extern HBITMAP hbmpBoxCheckedDisabled;
|
||||
extern HBITMAP hbmpBoxUnChecked;
|
||||
|
||||
extern HANDLE hAccelTable;
|
||||
|
||||
extern HWND hDlgCurrent;
|
||||
extern HWND hDlgMessage;
|
||||
extern HWND hWndMain;
|
||||
|
||||
extern SDI_NETINSTALL pfnNetInstall;
|
||||
|
||||
extern LPSTR szEGlobalAlloc;
|
||||
extern LPSTR szEStringLoad;
|
||||
extern LPSTR szEDllLoad;
|
||||
extern LPSTR szEStringNull;
|
||||
extern LPSTR szTempSetupPath;
|
||||
|
||||
extern LPSTR szSetupDir;
|
||||
extern LPSTR szTempDir;
|
||||
extern LPSTR szOSTempDir;
|
||||
extern LPSTR szFileIniConfig;
|
||||
|
||||
extern LPSTR szSiteSelectorDescription;
|
||||
|
||||
extern DWORD dwWizardState;
|
||||
extern DWORD dwSetupType;
|
||||
extern DWORD dwScreenX;
|
||||
extern DWORD dwScreenY;
|
||||
|
||||
extern ULONG ulOSType;
|
||||
|
||||
extern DWORD dwTempSetupType;
|
||||
extern DWORD gdwUpgradeValue;
|
||||
|
||||
extern BOOL bSDUserCanceled;
|
||||
extern BOOL bIdiArchivesExists;
|
||||
extern BOOL bCreateDestinationDir;
|
||||
extern BOOL bReboot;
|
||||
|
||||
extern setupGen sgProduct;
|
||||
extern diS diSetup;
|
||||
extern diW diWelcome;
|
||||
extern diL diLicense;
|
||||
extern diST diSetupType;
|
||||
extern diSC diSelectComponents;
|
||||
extern diSC diSelectAdditionalComponents;
|
||||
extern diWI diWindowsIntegration;
|
||||
extern diPF diProgramFolder;
|
||||
extern diDO diDownloadOptions;
|
||||
extern diAS diAdvancedSettings;
|
||||
extern diSI diStartInstall;
|
||||
extern diR diReboot;
|
||||
extern siSD siSDObject;
|
||||
extern siCF siCFXpcomFile;
|
||||
extern siC *siComponents;
|
||||
extern ssi *ssiSiteSelector;
|
||||
extern char *SetupFileList[];
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,186 +0,0 @@
|
||||
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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 Mozilla Communicator client code,
|
||||
* released March 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Sean Su <ssu@netscape.com>
|
||||
*/
|
||||
|
||||
#ifndef _EXTRA_H_
|
||||
#define _EXTRA_H_
|
||||
|
||||
typedef struct diskSpaceNode dsN;
|
||||
struct diskSpaceNode
|
||||
{
|
||||
ULONGLONG ullSpaceRequired;
|
||||
LPSTR szPath;
|
||||
dsN *Next;
|
||||
dsN *Prev;
|
||||
};
|
||||
|
||||
typedef struct structVer
|
||||
{
|
||||
ULONGLONG ullMajor;
|
||||
ULONGLONG ullMinor;
|
||||
ULONGLONG ullRelease;
|
||||
ULONGLONG ullBuild;
|
||||
} verBlock;
|
||||
|
||||
BOOL InitDialogClass(HINSTANCE hInstance, HINSTANCE hSetupRscInst);
|
||||
BOOL InitApplication(HINSTANCE hInstance, HINSTANCE hSetupRscInst);
|
||||
BOOL InitInstance(HINSTANCE hInstance, DWORD dwCmdShow);
|
||||
void PrintError(LPSTR szMsg, DWORD dwErrorCodeSH);
|
||||
void FreeMemory(void **vPointer);
|
||||
void *NS_GlobalAlloc(DWORD dwMaxBuf);
|
||||
HRESULT Initialize(HINSTANCE hInstance);
|
||||
HRESULT NS_LoadStringAlloc(HANDLE hInstance, DWORD dwID, LPSTR *szStringBuf, DWORD dwStringBuf);
|
||||
HRESULT NS_LoadString(HANDLE hInstance, DWORD dwID, LPSTR szStringBuf, DWORD dwStringBuf);
|
||||
HRESULT WinSpawn(LPSTR szClientName, LPSTR szParameters, LPSTR szCurrentDir, int iShowCmd, BOOL bWait);
|
||||
HRESULT ParseConfigIni(LPSTR lpszCmdLine);
|
||||
HRESULT DecryptString(LPSTR szOutputStr, LPSTR szInputStr);
|
||||
HRESULT DecryptVariable(LPSTR szVariable, DWORD dwVariableSize);
|
||||
HRESULT InitSetupGeneral(void);
|
||||
HRESULT InitDlgWelcome(diW *diDialog);
|
||||
HRESULT InitDlgLicense(diL *diDialog);
|
||||
HRESULT InitDlgSetupType(diST *diDialog);
|
||||
HRESULT InitDlgSelectComponents(diSC *diDialog, DWORD dwSM);
|
||||
HRESULT InitDlgWindowsIntegration(diWI *diDialog);
|
||||
HRESULT InitDlgProgramFolder(diPF *diDialog);
|
||||
HRESULT InitDlgStartInstall(diSI *diDialog);
|
||||
HRESULT InitDlgSiteSelector(diAS *diDialog);
|
||||
HRESULT InitSDObject(void);
|
||||
void DeInitSDObject(void);
|
||||
siC *CreateSiCNode(void);
|
||||
void SiCNodeInsert(siC **siCHead, siC *siCTemp);
|
||||
void SiCNodeDelete(siC *siCTemp);
|
||||
siCD *CreateSiCDepNode(void);
|
||||
void SiCDepNodeDelete(siCD *siCDepTemp);
|
||||
void SiCDepNodeInsert(siCD **siCDepHead, siCD *siCDepTemp);
|
||||
HRESULT SiCNodeGetAttributes(DWORD dwIndex, BOOL bIncludeInvisible, DWORD dwACFlag);
|
||||
void SiCNodeSetAttributes(DWORD dwIndex, DWORD dwAttributes, BOOL bSet, BOOL bIncludeInvisible, DWORD dwACFlag);
|
||||
void SiCNodeSetItemsSelected(DWORD dwItems, DWORD *dwItemsSelected);
|
||||
char *SiCNodeGetDescriptionShort(DWORD dwIndex, BOOL bIncludeInvisible, DWORD dwACFlag);
|
||||
char *SiCNodeGetDescriptionLong(DWORD dwIndex, BOOL bIncludeInvisible, DWORD dwACFlag);
|
||||
siC *SiCNodeGetObject(DWORD dwIndex, BOOL bIncludeInvisibleObjs, DWORD dwACFlag);
|
||||
ULONGLONG SiCNodeGetInstallSize(DWORD dwIndex, BOOL bIncludeInvisible, DWORD dwACFlag);
|
||||
ULONGLONG SiCNodeGetInstallSizeSystem(DWORD dwIndex, BOOL bIncludeInvisible, DWORD dwACFlag);
|
||||
ULONGLONG SiCNodeGetInstallSizeArchive(DWORD dwIndex, BOOL bIncludeInvisible, DWORD dwACFlag);
|
||||
void InitSiComponents(char *szFileIni);
|
||||
HRESULT ParseComponentAttributes(char *szBuf);
|
||||
void InitSiteSelector(char *szFileIni);
|
||||
void DeInitSiCDependencies(siCD *siCDDependencies);
|
||||
BOOL ResolveDependencies(DWORD dwIndex);
|
||||
BOOL ResolveComponentDependency(siCD *siCDInDependency);
|
||||
void ResolveDependees(LPSTR szToggledDescriptionShort);
|
||||
BOOL ResolveComponentDependee(siCD *siCDInDependee);
|
||||
void STGetComponents(LPSTR szSection, st *stSetupType, LPSTR szFileIni);
|
||||
HRESULT InitSXpcomFile(void);
|
||||
void DeInitSXpcomFile(void);
|
||||
void DeInitialize(void);
|
||||
void DeInitDlgWelcome(diW *diDialog);
|
||||
void DeInitDlgLicense(diL *diDialog);
|
||||
void DeInitDlgSetupType(diST *diDialog);
|
||||
void DeInitDlgSelectComponents(diSC *diDialog);
|
||||
void DeInitDlgWindowsIntegration(diWI *diDialog);
|
||||
void DeInitDlgProgramFolder(diPF *diDialog);
|
||||
void DeInitDlgStartInstall(diSI *diDialog);
|
||||
void DeInitDlgSiteSelector(diAS *diDialog);
|
||||
void DetermineOSVersion(void);
|
||||
void DeInitSiComponents(void);
|
||||
void DeInitSetupGeneral(void);
|
||||
HRESULT InitializeSmartDownload(void);
|
||||
HRESULT DeInitializeSmartDownload(void);
|
||||
HRESULT ParseSetupIni(void);
|
||||
HRESULT GetConfigIni(void);
|
||||
void CleanTempFiles(void);
|
||||
void OutputSetupTitle(HDC hDC);
|
||||
HRESULT SdArchives(LPSTR szFileIdi, LPSTR szDownloadDir);
|
||||
long RetrieveArchives(void);
|
||||
long RetrieveRedirectFile(void);
|
||||
/* HRESULT SmartUpdateJars(void); */
|
||||
void ParsePath(LPSTR szInput, LPSTR szOutput, DWORD dwLength, DWORD dwType);
|
||||
void RemoveBackSlash(LPSTR szInput);
|
||||
void AppendBackSlash(LPSTR szInput, DWORD dwInputSize);
|
||||
void RemoveSlash(LPSTR szInput);
|
||||
void AppendSlash(LPSTR szInput, DWORD dwInputSize);
|
||||
BOOL DeleteIdiGetConfigIni(void);
|
||||
BOOL DeleteIdiGetArchives(void);
|
||||
BOOL DeleteIdiGetRedirect(void);
|
||||
BOOL DeleteIdiFileIniConfig(void);
|
||||
void DeleteArchives(void);
|
||||
BOOL DeleteIniRedirect(void);
|
||||
HRESULT LaunchApps(void);
|
||||
HRESULT FileExists(LPSTR szFile);
|
||||
int ExtractDirEntries(char* directory,void* vZip);
|
||||
BOOL LocateJar(siC *siCObject, LPSTR szPath, DWORD dwPathSize, BOOL bIncludeTempDir);
|
||||
HRESULT AddArchiveToIdiFile(siC *siCObject, char *szSComponent, char *szSFile, char *szFileIdiGetArchives);
|
||||
int SiCNodeGetIndexDS(char *szInDescriptionShort);
|
||||
void ViewSiComponents(void);
|
||||
BOOL IsWin95Debute(void);
|
||||
ULONGLONG GetDiskSpaceRequired(DWORD dwType);
|
||||
ULONGLONG GetDiskSpaceAvailable(LPSTR szPath);
|
||||
HRESULT VerifyDiskSpace(void);
|
||||
HRESULT ErrorMsgDiskSpace(ULONGLONG ullDSAvailable, ULONGLONG ullDSRequired, LPSTR szPath, BOOL bCrutialMsg);
|
||||
void SetCustomType(void);
|
||||
void GetAlternateArchiveSearchPath(LPSTR lpszCmdLine);
|
||||
BOOL NeedReboot(void);
|
||||
BOOL LocatePreviousPath(LPSTR szMainSectionName, LPSTR szPath, DWORD dwPathSize);
|
||||
BOOL LocatePathNscpReg(LPSTR szSection, LPSTR szPath, DWORD dwPathSize);
|
||||
BOOL LocatePathWinReg(LPSTR szSection, LPSTR szPath, DWORD dwPathSize);
|
||||
BOOL LocatePath(LPSTR szSection, LPSTR szPath, DWORD dwPathSize);
|
||||
int VR_GetPath(char *component_path, unsigned long sizebuf, char *buf);
|
||||
dsN *CreateDSNode();
|
||||
void DsNodeInsert(dsN **dsNHead, dsN *dsNTemp);
|
||||
void DsNodeDelete(dsN **dsNTemp);
|
||||
void DeInitDSNode(dsN **dsnComponentDSRequirement);
|
||||
void UpdatePathDiskSpaceRequired(LPSTR szPath, ULONGLONG ullInstallSize, dsN **dsnComponentDSRequirement);
|
||||
HRESULT InitComponentDiskSpaceInfo(dsN **dsnComponentDSRequirement);
|
||||
HRESULT CheckInstances();
|
||||
long RandomSelect(void);
|
||||
void TranslateVersionStr(LPSTR szVersion, verBlock *vbVersion);
|
||||
BOOL GetFileVersion(LPSTR szFile, verBlock *vbVersion);
|
||||
BOOL CheckLegacy(HWND hDlg);
|
||||
int CompareVersion(verBlock vbVersionOld, verBlock vbVersionNew);
|
||||
COLORREF DecryptFontColor(LPSTR szColor);
|
||||
ssi *CreateSsiSiteSelectorNode();
|
||||
void SsiSiteSelectorNodeInsert(ssi **ssiHead, ssi *ssiTemp);
|
||||
void SsiSiteSelectorNodeDelete(ssi *ssiTemp);
|
||||
ssi* SsiGetNode(LPSTR szDescription);
|
||||
void UpdateSiteSelector(void);
|
||||
DWORD GetAdditionalComponentsCount(void);
|
||||
DWORD GetTotalArchivesToDownload();
|
||||
void RemoveQuotes(LPSTR lpszSrc, LPSTR lpszDest, int iDestSize);
|
||||
LPSTR GetFirstNonSpace(LPSTR lpszString);
|
||||
int GetArgC(LPSTR lpszCommandLine);
|
||||
LPSTR GetArgV(LPSTR lpszCommandLine, int iIndex, LPSTR lpszDest, int iDestSize);
|
||||
void ParseCommandLine(LPSTR lpszCmdLine);
|
||||
void SetSetupRunMode(LPSTR szMode);
|
||||
void Delay(DWORD dwSeconds);
|
||||
siCD *InitWinInitNodes(char *szInFile);
|
||||
void UpdateWininit(LPSTR szUninstallFilename);
|
||||
char *GetSaveInstallerPath(char *szBuf, DWORD dwBufSize);
|
||||
void SaveInstallerFiles(void);
|
||||
void ResetComponentAttributes(char *szFileIni);
|
||||
BOOL IsInList(DWORD dwCurrentItem, DWORD dwItems, DWORD *dwItemsSelected);
|
||||
int LocateExistingPath(char *szPath, char *szExistingPath, DWORD dwExistingPathSize);
|
||||
|
||||
BOOL bSDInit;
|
||||
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user