home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2005 December / maximum-cd-2005-12.iso / Software / Apps / FirefoxSetup1.0.7.exe / browser.xpi / install.js
Encoding:
JavaScript  |  2005-09-15  |  29.5 KB  |  734 lines

  1. // this function verifies disk space in kilobytes
  2. function verifyDiskSpace(dirPath, spaceRequired)
  3. {
  4.   var spaceAvailable;
  5.  
  6.   // Get the available disk space on the given path
  7.   spaceAvailable = fileGetDiskSpaceAvailable(dirPath);
  8.  
  9.   // Convert the available disk space into kilobytes
  10.   spaceAvailable = parseInt(spaceAvailable / 1024);
  11.  
  12.   // do the verification
  13.   if(spaceAvailable < spaceRequired)
  14.   {
  15.     logComment("Insufficient disk space: " + dirPath);
  16.     logComment("  required : " + spaceRequired + " K");
  17.     logComment("  available: " + spaceAvailable + " K");
  18.     return(false);
  19.   }
  20.  
  21.   return(true);
  22. }
  23.  
  24. // this function deletes a file if it exists
  25. function deleteThisFile(dirKey, file)
  26. {
  27.   var fFileToDelete;
  28.  
  29.   fFileToDelete = getFolder(dirKey, file);
  30.   logComment("File to delete: " + fFileToDelete);
  31.   if(File.isFile(fFileToDelete))
  32.   {
  33.     File.remove(fFileToDelete);
  34.     return(true);
  35.   }
  36.   else
  37.     return(false);
  38. }
  39.  
  40. // this function deletes a folder if it exists
  41. function deleteThisFolder(dirKey, folder, recursiveDelete)
  42. {
  43.   var fToDelete;
  44.  
  45.   if(typeof recursiveDelete == "undefined")
  46.     recursiveDelete = true;
  47.  
  48.   fToDelete = getFolder(dirKey, folder);
  49.   logComment("folder to delete: " + fToDelete);
  50.   if(File.isDirectory(fToDelete))
  51.   {
  52.     File.dirRemove(fToDelete, recursiveDelete);
  53.     return(true);
  54.   }
  55.   else
  56.     return(false);
  57. }
  58.  
  59. // OS type detection
  60. // which platform?
  61. function getPlatform()
  62. {
  63.   var platformStr;
  64.   var platformNode;
  65.  
  66.   if('platform' in Install)
  67.   {
  68.     platformStr = new String(Install.platform);
  69.  
  70.     if (!platformStr.search(/^Macintosh/))
  71.       platformNode = 'mac';
  72.     else if (!platformStr.search(/^Win/))
  73.       platformNode = 'win';
  74.     else if (!platformStr.search(/^OS\/2/))
  75.       platformNode = 'win';
  76.     else
  77.       platformNode = 'unix';
  78.   }
  79.   else
  80.   {
  81.     var fOSMac  = getFolder("Mac System");
  82.     var fOSWin  = getFolder("Win System");
  83.  
  84.     logComment("fOSMac: "  + fOSMac);
  85.     logComment("fOSWin: "  + fOSWin);
  86.  
  87.     if(fOSMac != null)
  88.       platformNode = 'mac';
  89.     else if(fOSWin != null)
  90.       platformNode = 'win';
  91.     else
  92.       platformNode = 'unix';
  93.   }
  94.  
  95.   return platformNode;
  96. }
  97.  
  98. function registerProgramFolderKey(winreg, fFolderPath)
  99. {
  100.   var subkey;
  101.   var err;
  102.   var szCurrentMozillaVersion;
  103.  
  104.   /* set the Program Folder Path in the Mozilla key in the Windows Registry */
  105.   winreg.createKey("SOFTWARE\\Mozilla","");
  106.  
  107.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox";
  108.   winreg.createKey(subkey,"");
  109.   err     = winreg.setValueString(subkey, "CurrentVersion", "1.0.7 (en-US)");
  110.  
  111.   subkey  = "SOFTWARE\\Mozilla\\Mozilla";
  112.   szCurrentMozillaVersion = winreg.getValueString(subkey, "CurrentVersion");
  113.   logComment("szCurrentMozillaVersion: " + szCurrentMozillaVersion);
  114.  
  115.   if((szCurrentMozillaVersion == "") || (szCurrentMozillaVersion == null))
  116.   {
  117.     // A Mozilla\CurrentVersion key must be set so that Java can work. 
  118.     // (bug 229627)
  119.     subkey  = "SOFTWARE\\Mozilla\\Mozilla";
  120.     winreg.createKey(subkey,"");
  121.     err     = winreg.setValueString(subkey, "CurrentVersion", "1.7.12");
  122.   }
  123.  
  124.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.7 (en-US)";
  125.   winreg.createKey(subkey,"");
  126.  
  127.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.7 (en-US)\\Main";
  128.   winreg.createKey(subkey,"");
  129.   err     = winreg.setValueString(subkey, "Program Folder Path", fFolderPath);
  130. }
  131.  
  132. function createShortcuts() 
  133. {
  134.   var subkey;
  135.   var valname;
  136.   var szStartMenuPrograms;
  137.   var szStartMenu;
  138.   var szFolderDesktop;
  139.   var szFolderQuickLaunch;
  140.   var szFolderAppData;
  141.   var winreg;
  142.   var fTemp;
  143.   var fProgram;
  144.   var fDefShortcuts;
  145.   var fileExe;
  146.   var scExeDesc;
  147.   var scFolderName;
  148.   var fFolderDesktop;
  149.   var fFolderPrograms;
  150.   var fFolderProgramsStr;
  151.   var fFolderQuickLaunch;
  152.   var is_winnt;
  153.   var szCurrentVersion;
  154.   var folderQuickLaunchExists;
  155.  
  156.   winreg               = getWinRegistry();
  157.   fProgram             = getFolder("Program");
  158.   fDefShortcuts        = getFolder("Program","defaults/shortcuts");
  159.   fTemp                = fProgram + "firefox.exe";
  160.   fileExe              = getFolder("file:///", fTemp);
  161.   scExeDesc            = "Mozilla Firefox";
  162.   scFolderName         = "Mozilla Firefox";
  163.   scSafeModeDesc       = "Mozilla Firefox (Safe Mode)";
  164.   scSafeModeParam      = "-safe-mode";
  165.  
  166.   if (winreg) {
  167.     // determine if the script is running under NT or not
  168.     winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  169.     subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  170.     szCurrentVersion    = winreg.getValueString(subkey, "CurrentVersion");
  171.     logComment("szCurrentVersion: " + szCurrentVersion);
  172.     is_winnt = szCurrentVersion != "";
  173.     logComment("is_winnt value: " + is_winnt);
  174.  
  175.     // Locate the various folders we're about to install shortcuts into.     
  176.     if(!is_winnt || restrictedAccess) {
  177.       winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  178.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  179.       szStartMenuPrograms = winreg.getValueString(subkey, "Programs");
  180.       szStartMenu         = winreg.getValueString(subkey, "Start Menu");
  181.       szFolderDesktop     = winreg.getValueString(subkey, "Desktop");
  182.       }
  183.     else {
  184.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  185.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  186.       szStartMenuPrograms = winreg.getValueString(subkey, "Common Programs");
  187.       szStartMenu         = winreg.getValueString(subkey, "Common Start Menu");
  188.       szFolderDesktop     = winreg.getValueString(subkey, "Common Desktop");
  189.     }
  190.  
  191.     // Locate the Start Menu Programs Folder
  192.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  193.     subkey              = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.7 (en-US)\\Main";
  194.     fFolderProgramsStr  = winreg.getValueString(subkey, "Program Folder Path");
  195.     fFolderPrograms = getFolder("file:///", fFolderProgramsStr || szStartMenuPrograms);
  196.  
  197.     // Locate the Desktop Folder
  198.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  199.     fFolderDesktop = getFolder("file:///", szFolderDesktop);
  200.  
  201.     // Locate the Quick Launch folder
  202.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  203.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  204.     szFolderAppData     = winreg.getValueString(subkey, "AppData");
  205.     szFolderQuickLaunch = szFolderAppData + "\\Microsoft\\Internet Explorer\\Quick Launch";
  206.     fFolderQuickLaunch  = getFolder("file:///", szFolderQuickLaunch);
  207.     folderQuickLaunchExists = File.isDirectory(fFolderQuickLaunch);
  208.     if(!folderQuickLaunchExists) {
  209.       subkey                  = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\GrpConv\\MapGroups";
  210.       szFolderQuickLaunch     = winreg.getValueString(subkey, "Quick Launch");
  211.       folderQuickLaunchExists = File.isDirectory(fFolderPrograms);
  212.       if(folderQuickLaunchExists)
  213.         fFolderQuickLaunch = getFolder("file:///", szFolderQuickLaunch);
  214.     }
  215.     logComment("folderQuickLaunchExists: " + folderQuickLaunchExists);
  216.  
  217.     logComment("Folder StartMenuPrograms: " + szStartMenuPrograms);
  218.     logComment("Folder StartMenu        : " + szStartMenu);
  219.     logComment("Folder FolderDesktop    : " + szFolderDesktop);
  220.     logComment("Folder FolderQuickLaunch: " + szFolderQuickLaunch);
  221.     logComment("fileExe                 : " + fileExe);
  222.     logComment("fFolderPrograms         : " + fFolderPrograms);
  223.     logComment("scExeDesc               : " + scExeDesc);
  224.     logComment("fProgram                : " + fProgram);
  225.  
  226.     // Explicitly create the fFolderPrograms even though the windowsShortcut 
  227.     // function creates the folder. This is so that the folder creation gets 
  228.     // logged for uninstall to remove it.
  229.     if(winreg.getValueNumber(subkey, "Create Start Menu Shortcut") != 0 && !File.exists(fFolderPrograms))
  230.       File.dirCreate(fFolderPrograms);
  231.     if(winreg.getValueNumber(subkey, "Create Start Menu Shortcut") != 0 && !File.exists(fDefShortcuts))
  232.       File.dirCreate(fDefShortcuts);
  233.  
  234.     // Create the Shortcuts
  235.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  236.     subkey              = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.7 (en-US)\\Main";
  237.     if (winreg.getValueNumber(subkey, "Create Desktop Shortcut") != 0)
  238.       File.windowsShortcut(fileExe, fFolderDesktop, scExeDesc, fProgram, "", fileExe, 0);
  239.     if (winreg.getValueNumber(subkey, "Create Start Menu Shortcut") != 0) {
  240.       File.windowsShortcut(fileExe, fFolderPrograms, scExeDesc, fProgram, "", fileExe, 0);
  241.       File.windowsShortcut(fileExe, fFolderPrograms,  scSafeModeDesc, fProgram, scSafeModeParam,  fileExe, 0);
  242.     }
  243.     if (winreg.getValueNumber(subkey, "Create Quick Launch Shortcut") != 0 && folderQuickLaunchExists)
  244.       File.windowsShortcut(fileExe, fFolderQuickLaunch, scExeDesc, fProgram,  "", fileExe, 0);
  245.     // Always create the default shortcuts. 
  246.     File.windowsShortcut(fileExe, fDefShortcuts,    scExeDesc,      fProgram, "",               fileExe, 0);
  247.     File.windowsShortcut(fileExe, fDefShortcuts,    scSafeModeDesc, fProgram, scSafeModeParam,  fileExe, 0);
  248.  
  249.     if(!restrictedAccess) {
  250.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  251.       registerProgramFolderKey(winreg, fFolderPrograms);
  252.  
  253.       // This is so that Windows Media Player works with us      
  254.       var subkey = "SOFTWARE\\Microsoft\\MediaPlayer\\ShimInclusionList\\firefox.exe";
  255.       winreg.createKey(subkey, "");
  256.     }
  257.  
  258.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  259.     registerProgramFolderKey(winreg, fFolderPrograms);
  260.   }
  261.   else
  262.     logComment("winreg is null");
  263. }
  264.  
  265. function IsWinnt()
  266. {
  267.   /* Determines if the script is running under NT or not.
  268.    *
  269.    */
  270.   var winreg = getWinRegistry();
  271.   var subkey;
  272.   var szCurrentVersion;
  273.  
  274.   winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  275.   subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  276.   szCurrentVersion    = winreg.getValueString(subkey, "CurrentVersion");
  277.   logComment("szCurrentVersion: " + szCurrentVersion);
  278.   
  279.   return szCurrentVersion != "";
  280. }
  281.  
  282. function registerMainKeys(winreg)
  283. {
  284.   var subkey;  //the name of the subkey you are poking around in
  285.   var data;
  286.   var err;
  287.  
  288.   winreg.createKey("SOFTWARE\\Mozilla","");
  289.  
  290.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox";
  291.   winreg.createKey(subkey,"");
  292.   err     = winreg.setValueString(subkey, "CurrentVersion", "1.0.7 (en-US)");
  293.  
  294.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.7 (en-US)";
  295.   winreg.createKey(subkey,"");
  296.  
  297.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.7 (en-US)\\Main";
  298.   winreg.createKey(subkey,"");
  299.  
  300.   err     = winreg.setValueString(subkey, "Install Directory", fProgram);
  301.  
  302.   // The following keys are required to be created to supply information
  303.   // about the location of the Gecko Embedded Client to 3rd party apps.
  304.   // "SOFTWARE\\Mozilla" must not be localized!
  305.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox 1.0.7";
  306.   winreg.createKey(subkey,"");
  307.   err     = winreg.setValueString(subkey, "GeckoVer", "1.0.1");
  308.  
  309.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox 1.0.7\\Extensions";
  310.   winreg.createKey(subkey,"");
  311.   err     = winreg.setValueString(subkey, "Components", fProgram + "Components");
  312.   err     = winreg.setValueString(subkey, "Plugins", fProgram + "Plugins");
  313.  
  314.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox 1.0.7\\bin";
  315.   winreg.createKey(subkey,"");
  316.   err     = winreg.setValueString(subkey, "PathToExe", fProgram + "firefox.exe");
  317.  
  318.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.7 (en-US)\\Main";
  319.   err     = winreg.setValueString(subkey, "PathToExe", fProgram + "firefox.exe");
  320.  
  321.   // Register as a windows XP internet browser
  322.   if( IsWinnt() )
  323.   {
  324.     subkey = "Software\\Clients\\StartMenuInternet\\firefox.exe";
  325.     winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  326.  
  327.     winreg.createKey(subkey, "");
  328.     winreg.createKey(subkey + "\\DefaultIcon", "");
  329.     winreg.createKey(subkey + "\\shell", "");
  330.     winreg.createKey(subkey + "\\shell\\open", "");
  331.     winreg.createKey(subkey + "\\shell\\open\\command", "");
  332.     winreg.createKey(subkey + "\\InstallInfo", "");
  333.     winreg.setValueString(subkey, "", "Mozilla Firefox");
  334.  
  335.     // path does not need to be quoted per MS doc
  336.     data = fProgram + "firefox.exe,0";
  337.     winreg.setValueString(subkey + "\\DefaultIcon", "", data);
  338.  
  339.     data = "\"" + fProgram + "firefox.exe\"";
  340.     winreg.setValueString(subkey + "\\shell\\open\\command", "", data);
  341.  
  342.     data = "\"" + fProgram + "uninstall\\UninstallFirefox.exe\" /ua \"1.0.7 (en-US)\" /hs browser";
  343.     winreg.setValueString(subkey + "\\InstallInfo", "HideIconsCommand", data);
  344.  
  345.     winreg.setValueNumber(subkey + "\\InstallInfo", "IconsVisible", 1);
  346.  
  347.     data = "\"" + fProgram + "firefox.exe\" -silent -nosplash -setDefaultBrowser ";
  348.     winreg.setValueString(subkey + "\\InstallInfo", "ReinstallCommand", data);
  349.  
  350.     data = "\"" + fProgram + "uninstall\\UninstallFirefox.exe\" /ua \"1.0.7 (en-US)\" /ss browser";
  351.     winreg.setValueString(subkey + "\\InstallInfo", "ShowIconsCommand", data);
  352.   }
  353. }
  354.  
  355. function updateWinReg()
  356. {
  357.   //Notes:
  358.   // can't use a double backslash before subkey - Windows already puts it in.
  359.   // subkeys have to exist before values can be put in.
  360.   var winreg = getWinRegistry();
  361.   var subkey;  //the name of the subkey you are poking around in
  362.   var err;
  363.   var ikwDefined;
  364.  
  365.   if(winreg != null) 
  366.   {
  367.     /* This will check to see if the user has restricted access or not.
  368.      * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable.  If
  369.      * it is, then access is not restricted.  This is only used to
  370.      * determine which Desktop, Programs, and Start Menu folders
  371.      * are to used: common or per user
  372.      */
  373.     restrictedAccess = false;
  374.     ikwDefined = typeof(winreg.isKeyWritable);
  375.     logComment("winreg.isKeyWritable(): " + ikwDefined);
  376.     if(ikwDefined == "function")
  377.     {
  378.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  379.       if(!winreg.isKeyWritable("SOFTWARE"))
  380.         restrictedAccess = true;
  381.     }
  382.  
  383.     logComment("restrictedAccess value: " + restrictedAccess);
  384.     if(!restrictedAccess)
  385.     {
  386.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  387.       registerMainKeys(winreg);
  388.  
  389.       // set the App Paths key here
  390.       subkey  = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\firefox.exe";
  391.       winreg.createKey(subkey,"");
  392.       err     = winreg.setValueString(subkey, "", fProgram + "firefox.exe");
  393.       err     = winreg.setValueString(subkey, "Path", fProgram);
  394.  
  395.       // XPInstall content type mappings. 
  396.       subkey = "SOFTWARE\\Classes\\MIME\\Database\\Content Type\\application/x-xpinstall;app=firefox"
  397.       winreg.createKey(subkey, "");
  398.       winreg.setValueString(subkey, "Extension", ".xpi");
  399.     }
  400.  
  401.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  402.     registerMainKeys(winreg);
  403.   }
  404. }
  405.  
  406. function upgradeCleanup()
  407. {
  408.   // Remove Chrome directory cruft
  409.   deleteThisFile("Chrome",      "US.jar");
  410.   deleteThisFile("Chrome",      "en-win.jar");
  411.   // Remove chrome and overlay registries, to remove bogus dependencies
  412.   // on any of the above files which may cause the app not to start. 
  413.   // XXXben Erk. This will effectively disable all global extensions...
  414.   //        we need to come up with a way to preserve global extensions 
  415.   //        across app versions...
  416.   deleteThisFile("Chrome",      "chrome.rdf");
  417.   deleteThisFolder("Chrome",    "overlayinfo");
  418.  
  419.   // Remove defunct components 
  420.   deleteThisFile("Components",  "compreg.dat");
  421.   deleteThisFile("Components",  "xpti.dat");
  422.   deleteThisFile("Components",  "nsBackgroundUpdateService.js");
  423.  
  424.   // Remove defunct defaults files. 
  425.   deleteThisFile("Program",        "defaults/pref/all.js");
  426.   deleteThisFile("Program",     "defaults/pref/security-prefs.js");
  427.   deleteThisFile("Program",     "defaults/pref/winpref.js");
  428.   deleteThisFile("Program",     "defaults/pref/xpinstall.js");
  429.   deleteThisFile("Program",     "defaults/pref/bug307259.js");
  430.   deleteThisFolder("Program",   "defaults/profile/US");
  431.   
  432.   // These files are related to app patches and will interfere with the 
  433.   // UA/app version strings if we do not remove them. 
  434.   deleteThisFile("Program",        "defaults/pref/bug259708.js");
  435.   
  436.   // Remove non-linked xpt files for rev'd interfaces; this prevents a
  437.   // conflict if you had previously installed a zip build in the app directory.
  438.   deleteThisFile("Components",  "autocomplete.xpt");
  439.  
  440.   // Now clean up Uninstall entries that may be laying around in the
  441.   // registry for older versions of the software that we're overwriting/
  442.   // upgrading...
  443.   var wr = getWinRegistry();
  444.   wr.setRootKey(wr.HKEY_LOCAL_MACHINE);
  445.   var i = 0; 
  446.   const uninstallKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
  447.   do {
  448.     var key = wr.enumKeys(uninstallKey, i++);
  449.     if (!key)
  450.       break;
  451.     key = uninstallKey + "\\" + key;
  452.     
  453.     // For us to remove the entry from the ARP uninstall list, the install 
  454.     // folder paths must *match* and the display version strings must *NOT
  455.     // MATCH* - i.e. we don't want to remove the entry we just created for
  456.     // this version.
  457.     var itemInstallFolder = wr.getValueString(key, "InstallLocation");
  458.     var thisInstallFolder = wr.getValueString("SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.7 (en-US)\\Main", 
  459.                                               "Install Directory");
  460.     var itemInstallFolderShortName = File.windowsGetShortName(getFolder("file:///", itemInstallFolder));
  461.     var thisInstallFolderShortName = File.windowsGetShortName(getFolder("file:///", thisInstallFolder));
  462.     
  463.     var itemDisplayVersion = wr.getValueString(key, "DisplayVersion");
  464.     var thisDisplayVersion = "1.0.7 (en-US)";
  465.  
  466.     // It is possible that a user might have installed several products into
  467.     // the same directory that have the same "DisplayVersion" (e.g. "1.0")... 
  468.     // in this case we don't want to trash the Uninstall info for the others
  469.     // so we have to be sure to make sure Comment matches... we use Comment
  470.     // instead of DisplayName since DisplayName varies from version to version
  471.     // as it contains the version number, and this instance of javascript is
  472.     // crippled so as not to contain any useful string parsing.
  473.     var itemComment = wr.getValueString(key, "Comment");
  474.     var thisComment = "Mozilla Firefox";
  475.  
  476.     if ((itemComment == thisComment || itemComment == "The Browser, Reloaded.") && 
  477.         itemInstallFolderShortName == thisInstallFolderShortName &&
  478.         thisDisplayVersion != itemDisplayVersion && 
  479.         wr.isKeyWritable(key)) {
  480.       wr.deleteKey(key);
  481.       logComment("Removing obsolete uninstall key with upgrade: " + key);
  482.     }
  483.   }
  484.   while (true);
  485. }
  486.  
  487. function copyFlashXPT()
  488. {
  489.   /*
  490.    * Check if Netscape Navigator (pre 6.0) is installed and if the
  491.    * flash player is installed in Netscape's plugin folder. If it is,
  492.    * try to copy the flashplayer.xpt file into our plugins folder to
  493.    * make ensure that flash is scriptable if we're using it from
  494.    * Netscape's plugins folder.
  495.    */
  496.  
  497.   var winreg = getWinRegistry();
  498.  
  499.   winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  500.   var subkey = "Software\\Netscape\\Netscape Navigator";
  501.   var nsver = winreg.getValueString(subkey, "CurrentVersion");
  502.  
  503.   if (!nsver)
  504.     return;
  505.  
  506.   subkey += "\\" + nsver + "\\Main";
  507.  
  508.   var navPluginsDir = winreg.getValueString(subkey, "Plugins Directory");
  509.  
  510.   if (!navPluginsDir)
  511.     return;
  512.  
  513.   var navFlashXPT = getFolder("file:///", navPluginsDir + "\\flashplayer.xpt");
  514.  
  515.   if (!File.exists(navFlashXPT))
  516.     return;
  517.  
  518.   var target = getFolder("file:///", fProgram + "\\plugins\\flashplayer.xpt");
  519.  
  520.   // Copy the file flashplayer.xpt from Netscape's plugin directory to
  521.   // Firefox's plugin directory.
  522.   File.copy(navFlashXPT, target);
  523.  
  524.   logComment("Copied Flash xpt file from '" + navFlashXPT + "' to '" + target +
  525.              "'");
  526. }
  527.  
  528. function copyQuickTimeXPT()
  529. {
  530.   /*
  531.    * Check if QuickTime is installed and copy
  532.    * nsIQTScriptablePlugin.xpt from its plugins directory into our
  533.    * plugins directory. If we don't do this, QuickTime will load in
  534.    * Firefox, but it won't be scriptable.
  535.    */
  536.  
  537.   var winreg = getWinRegistry();
  538.  
  539.   winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  540.   var subkey = "Software\\Apple Computer, Inc.\\QuickTime";
  541.   var qtdir = winreg.getValueString(subkey, "InstallDir");
  542.  
  543.   if (!qtdir)
  544.     return;
  545.  
  546.   var qtXPT = getFolder("file:///",
  547.                         qtdir + "\\Plugins\\nsIQTScriptablePlugin.xpt");
  548.  
  549.   if (!File.exists(qtXPT))
  550.     return;
  551.  
  552.   var target = getFolder("file:///",
  553.                          fProgram + "\\plugins\\nsIQTScriptablePlugin.xpt");
  554.  
  555.   // Copy the file nsIQTScriptablePlugin.xpt from the QuickTime
  556.   // installation directory to Firefox's plugin directory.
  557.   File.copy(qtXPT, target);
  558.  
  559.   logComment("Copied QuickTime xpt file from '" + qtXPT + "' to '" + target +
  560.              "'");
  561. }
  562.  
  563. // main
  564. var srDest;
  565. var err;
  566. var err2;
  567. var fProgram;
  568. var fWindowsSystem;
  569. var fileComponentRegStr;
  570. var fileComponentReg;
  571. var restrictedAccess;
  572. var fileToRegister;
  573. var args;
  574. var gGreLocal = false;
  575.  
  576. args = new String(Install.arguments);
  577. logComment("args: " + args);
  578.  
  579. // If -gGreLocal is passed in, then we need to *not* cleanup GRE files if they
  580. // exist in the browser dir.
  581. // The default is to delete any GRE files because we default GRE will be global.
  582. if(args == "-greLocal")
  583.   gGreLocal = true;
  584.  
  585. srDest = 2255;
  586. err    = initInstall("Mozilla Firefox", "Firefox", "1.0.7"); 
  587. logComment("initInstall: " + err);
  588.  
  589. fProgram  = getFolder("Program");
  590. fWindowsSystem = getFolder("Win System");
  591. logComment("fProgram: " + fProgram);
  592.  
  593. if(verifyDiskSpace(fProgram, srDest))
  594. {
  595.   setPackageFolder(fProgram);
  596.  
  597.   upgradeCleanup();
  598.   err = addDirectory("",
  599.                      "1.0.7",
  600.                      "bin",              // dir name in jar to extract 
  601.                      fProgram,           // Where to put this file (Returned from GetFolder) 
  602.                      "",                 // subdir name to create relative to fProgram
  603.                      true);              // Force Flag 
  604.   logComment("addDirectory() of Program returned: " + err);
  605.  
  606.   // check return value
  607.   if( err == SUCCESS )
  608.   {
  609.     fileToRegister = getFolder(fProgram, "AccessibleMarshal.dll");
  610.     err2           = File.windowsRegisterServer(fileToRegister);
  611.     logComment("windowsRegisterServer() returned: " + err2);
  612.     updateWinReg();  // Finish registering above marshalling dll's
  613.  
  614.     createShortcuts();
  615.  
  616.     // we don't want to fail on errors for the above two
  617.     resetError();
  618.  
  619.     // register chrome
  620.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "browser.jar"), "content/browser/");
  621.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome", "classic.jar"), "skin/classic/browser/");
  622.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "browser.jar"), "content/browser-region/");
  623.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "browser.jar"), "content/browser-platform/");
  624.  
  625.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "toolkit.jar"), "content/passwordmgr/");
  626.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "toolkit.jar"), "content/mozapps/");
  627.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome", "classic.jar"), "skin/classic/mozapps/");
  628.     
  629.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/autoconfig/");
  630.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/necko/");
  631.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/cookie/");
  632.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/wallet/");
  633.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/xbl-marquee/");
  634.  
  635.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","toolkit.jar"),"content/global/");
  636.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","toolkit.jar"),"content/global-region/");
  637.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","toolkit.jar"),"content/global-platform/");
  638.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/global/");
  639.  
  640.     // XXXben Stuff that will become obsolete
  641.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/navigator/");
  642.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/navigator-region/");
  643.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/navigator-platform/");
  644.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/navigator/");
  645.  
  646.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/communicator/");
  647.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/communicator-region/");
  648.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/communicator-platform/");
  649.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/communicator/");
  650.  
  651.     // Create the uninstall folder. 
  652.     err = File.dirCreate(getFolder("Program", "uninstall"));
  653.     logComment("dirCreate() of Program/uninstall returned: " + err);
  654.  
  655.     // We need to register the psm chrome files.
  656.     // We're checking to see if they exist first in case
  657.     // they were not built and packaged up.
  658.     var pki = getFolder("Chrome", "pippki.jar");
  659.     if(File.exists(pki)) 
  660.       registerChrome(CONTENT | DELAYED_CHROME, pki, "content/pippki/");
  661.  
  662.     var nss = getFolder("Chrome", "pipnss.jar");
  663.     if(File.exists(nss)) 
  664.       registerChrome(CONTENT | DELAYED_CHROME, nss, "content/pipnss/");
  665.  
  666.     copyFlashXPT();
  667.     copyQuickTimeXPT();
  668.     
  669.     /* Log files that are created after the installer is done, so they can be uninstalled */
  670.     logComment("Installing: "    + fProgram + ".autoreg");
  671.     logComment("Installing: "    + fProgram + "Xpcs Registry.dat");
  672.     logComment("Installing: "    + fProgram + "xpcom.log");
  673.     logComment("Create Folder: " + fProgram + "components");
  674.     logComment("Installing: "    + fProgram + "components\\xpti.dat");
  675.     logComment("Installing: "    + fProgram + "components\\xptitemp.dat");
  676.     logComment("Installing: "    + fProgram + "components\\compreg.dat");
  677.     logComment("Create Folder: " + fProgram + "components\\Netscape");
  678.     logComment("Create Folder: " + fProgram + "components\\Netscape\\MozillaTrunk");
  679.     logComment("Installing: "    + fProgram + "components\\Netscape\\MozillaTrunk\\manifest.ini");
  680.     logComment("Installing: "    + fProgram + "components\\Netscape\\MozillaTrunk\\permdata.box");
  681.     logComment("Installing: "    + fProgram + "components\\Netscape\\MozillaTrunk\\Talkback.ini");
  682.     logComment("Create Folder: " + fProgram + "chrome");
  683.     logComment("Installing: "    + fProgram + "chrome\\installed-chrome.txt");
  684.     logComment("Installing: "    + fProgram + "chrome\\chrome.rdf");
  685.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo");
  686.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\cookie");
  687.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\cookie\\content");
  688.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\cookie\\content\\overlays.rdf");
  689.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\inspector");
  690.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\inspector\\content");
  691.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\inspector\\content\\overlays.rdf");
  692.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\communicator");
  693.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\communicator\\content");
  694.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\communicator\\content\\overlays.rdf");
  695.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\editor");
  696.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\editor\\content");
  697.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\editor\\content\\overlays.rdf");
  698.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\messenger");
  699.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\messenger\\content");
  700.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\messenger\\content\\overlays.rdf");
  701.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\navigator");
  702.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\navigator\\content");
  703.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\navigator\\content\\overlays.rdf");
  704.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\navigator\\skin");
  705.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\navigator\\skin\\stylesheets.rdf");
  706.     logComment("Create Folder: " + fProgram + "uninstall");
  707.  
  708.     err = getLastError();
  709.     if (err == SUCCESS)
  710.     {
  711.       err = performInstall();
  712.       logComment("performInstall() returned: " + err);
  713.       if (File.exists(getFolder(fProgram, "xpicleanup.dat")))
  714.       {
  715.         logComment("incomplete install, manually launch cleanup utility");
  716.         initInstall("Post-install Cleanup Utility", "Browser/xpicleanup", "1.0.7");
  717.         cleanupUtility = getFolder(fProgram, "xpicleanup.exe");
  718.         err = File.execute(cleanupUtility);
  719.         logComment("execute() returned: " + err);
  720.         err = performInstall();
  721.       }
  722.     }
  723.     else
  724.       cancelInstall(err);
  725.   }
  726.   else
  727.     cancelInstall(err);
  728. }
  729. else
  730.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  731.  
  732.  
  733. // end main
  734.