Data Flow
- Extension retrieves manifest from URL, records origin
Extension parses manifest into in-memory variables
variable
|
type
|
produced from value
|
launchURI
|
nsIURI
|
app.origin + app.manifest.launch_path
|
iconURI
|
nsIURI
|
app.origin + app.manifest.icons[${biggest_icon_index}]
|
appName
|
string
|
app.manifest.name
|
appNameAsFilename
|
string
|
${appName} (regex applied to remove unprintables)
|
developerName
|
string
|
app.developer.name
|
shortDescription
|
string
|
app.manifest.description (unprintables regex; trimmed)
|
versionStr
|
string
|
(currently static value "Developer Preview")
|
Windows-specific
variable
|
type
|
produced from value
|
appNameAsFilename
|
string
|
${appNameAsFilename} (Windows filename regex applied)
|
installDir
|
nsIFile
|
launchURI values + ${appNameAsFilename}
|
XULDir
|
nsIFile
|
installDir
|
uninstallerFile
|
nsIFile
|
installDir + "uninstall.exe"
|
iconFile
|
nsIFile
|
installDir + "chrome\icons\default\" + ${appNameAsFilename} + ".ico"
|
installerDir
|
nsIFile
|
Unique dir name produced as "temp dir + ${appNameAsFilename}"
|
firefoxFile
|
nsIFile
|
Dir of current running process + "firefox.exe"
|
desktopShortcut
|
nsIFile
|
Desktop + ${appNameAsFilename} + ".lnk"
|
startMenuShortcut
|
nsIFile
|
Start Menu + ${appNameAsFilename} + ".lnk"
|
uninstallSubkeyStr
|
string
|
${launchURI} values
|
Mac-specific
variable
|
type
|
produced from value
|
appNameAsFilename
|
string
|
${appNameAsFilename} (Mac filename regex applied)
|
installDir
|
nsILocalFile
|
"~/Applications" + ${appNameAsFilename} + ".app"
|
XULDir
|
nsIFile
|
${installDir} + "XUL"
|
iconFile
|
nsIFile
|
${installDir} + "Contents\Resources\appicon.icns"
|
Extension sets up substitution values for file copies
subst string
|
produced from value
|
$NAME_AS_XUL_APP_PROPERTY
|
${appName}
|
$VERSION_AS_XUL_APP_PROPERTY
|
${versionStr}
|
$ORIGIN_AS_XUL_APP_PROPERTY
|
${launchURI}.prePath
|
$NAME_AS_JS_STRING
|
makeJSString(${appName})
|
$LAUNCH_PATH_AS_XML_STRING
|
makeXMLString(${launchURI}.spec)
|
Windows-specific
subst string
|
produced from value
|
$PROFILE_DIR
|
${installDir}.parent.leafName
|
$NAME_AS_XUL_APP_PROPERTY
|
${appName}.replace("\\", "")
|
Mac-specific
subst string
|
produced from value
|
$PROFILE_DIR
|
"Mozilla/" + ${appNameAsFilename}
|
$NAME_AS_FILENAME
|
${appNameAsFilename}
|
$FILENAME_AS_XML
|
makeXMLString(${appNameAsFilename})
|
$REVERSED_APPDOMAIN
|
createInvertedDNSIdentifier(${launchURI})
|
Extension clears previous installation
- Extension removes ${installDir}
Windows-specific
- Extension removes HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${uninstallKey}
- Extension removes ${desktopShortcut}
- Extension removes ${startMenuShortcut}
Mac-specific
Extension retrieves app icon
Windows-specific
- Extension downloads icon from ${iconURI} into memory
- Extension converts icon to image/vnd.microsoft.icon
- Extension writes icon to ${iconFile}
Mac-specific
- Extension downloads icon from ${iconURI} into temporary file (${icon})
- Extension calls "sips -s format icns ${icon} --out ${iconFile} -z 128 128
Extension copies files to disk, performs text substitutions
application.ini (renamed from newapp_template.ini)
|
$NAME_AS_XUL_APP_PROPERTY
|
$VERSION_AS_XUL_APP_PROPERTY
|
$ORIGIN_AS_XUL_APP_PROPERTY
|
$PROFILE_DIR
|
window.js
|
$NAME_AS_JS_STRING
|
window.xul
|
$NAME_AS_XML_STRING
|
Mac-specific
- foxlauncher is renamed to $NAME_AS_FILENAME
Info.plist
|
$NAME_AS_JS_STRING
|
$FILENAME_AS_XML
|
$REVERSED_APPDOMAIN
|
Extension performs additional install steps
Windows-specific
Extension writes registry key values
- Key: HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Value name
|
Value
|
Type
|
DisplayName
|
${appName}
|
string (REG_SZ)
|
ShortcutName
|
${appNameAsFilename}
|
string (REG_SZ)
|
DisplayIcon
|
${iconFile}.path
|
string (REG_SZ)
|
UninstallString
|
${launchURI} values
|
string (REG_SZ)
|
InstallLocation
|
${installDir}.path
|
string (REG_SZ)
|
NoModify
|
1
|
int (REG_DWORD)
|
NoRepair
|
1
|
int (REG_DWORD)
|
RegOwner
|
(Want this to be BrowserID)
|
string (REG_SZ)
|
UrlUpdateInfo
|
Not sure yet
|
string (REG_SZ)
|
Publisher
|
${developerName}
|
string (REG_SZ)
|
DisplayVersion
|
${versionStr}
|
string (REG_SZ)
|
InstallSource
|
Not sure yet (should be app store URL)
|
string (REG_SZ)
|
Comments
|
${shortDescription}
|
string (REG_SZ)
|
HelpLink
|
Not sure yet
|
string (REG_SZ)
|
URLInfoAbout
|
${launchURI}.prePath
|
string (REG_SZ)
|
Contact
|
Not sure yet
|
string (REG_SZ)
|
Readme
|
Not sure yet
|
string (REG_SZ)
|
Extension copies NSIS installer to ${installerDir}
Extension runs installer
* ${installerDir}\install.exe
* /S
* /FIREFOX_PATH=
* ${firefoxFile}.path
* /ORIGIN_SCHEME=
* ${launchURI}.scheme
* /ORIGIN_HOST=
* ${launchURI}.host
* /ORIGIN_PORT=
* ${launchURI}.port
- Installer reads registry values
* InstallLocation
* ShortcutName
* ShortcutComment
* DisplayIcon
- Installer creates a shortcut in InstallLocation named ShortcutName.lnk with description set to ShortcutComment and icon set to DisplayIcon
- Shortcut points to: FIREFOX_PATH -app ${path generated from origin info}\application.ini
- Installer creates an uninstaller at InstallLocation\uninstall.exe
- Uninstaller reads similar registry keys and command-line args and performs following operations
* Delete shortcuts
* Remove InstallLocation
* Remove registry key
Extension copies shortcut (created by installer) from ${installDir} to ${desktopShortcut} and ${startMenuShortcut}