home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 August (Alt) / CHIP 2005-08.1.iso / program / code / Firefox_1.0.5.exe / browser.xpi / install.js
Encoding:
JavaScript  |  2005-07-11  |  29.5 KB  |  733 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.5 (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.9");
  122.   }
  123.  
  124.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.5 (en-US)";
  125.   winreg.createKey(subkey,"");
  126.  
  127.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.5 (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.5 (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.5 (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.5 (en-US)");
  293.  
  294.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.5 (en-US)";
  295.   winreg.createKey(subkey,"");
  296.  
  297.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.5 (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.5";
  306.   winreg.createKey(subkey,"");
  307.   err     = winreg.setValueString(subkey, "GeckoVer", "1.0.1");
  308.  
  309.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox 1.0.5\\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.5\\bin";
  315.   winreg.createKey(subkey,"");
  316.   err     = winreg.setValueString(subkey, "PathToExe", fProgram + "firefox.exe");
  317.  
  318.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.5 (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.5 (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.5 (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.   deleteThisFolder("Program",   "defaults/profile/US");
  430.   
  431.   // These files are related to app patches and will interfere with the 
  432.   // UA/app version strings if we do not remove them. 
  433.   deleteThisFile("Program",        "defaults/pref/bug259708.js");
  434.   
  435.   // Remove non-linked xpt files for rev'd interfaces; this prevents a
  436.   // conflict if you had previously installed a zip build in the app directory.
  437.   deleteThisFile("Components",  "autocomplete.xpt");
  438.  
  439.   // Now clean up Uninstall entries that may be laying around in the
  440.   // registry for older versions of the software that we're overwriting/
  441.   // upgrading...
  442.   var wr = getWinRegistry();
  443.   wr.setRootKey(wr.HKEY_LOCAL_MACHINE);
  444.   var i = 0; 
  445.   const uninstallKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
  446.   do {
  447.     var key = wr.enumKeys(uninstallKey, i++);
  448.     if (!key)
  449.       break;
  450.     key = uninstallKey + "\\" + key;
  451.     
  452.     // For us to remove the entry from the ARP uninstall list, the install 
  453.     // folder paths must *match* and the display version strings must *NOT
  454.     // MATCH* - i.e. we don't want to remove the entry we just created for
  455.     // this version.
  456.     var itemInstallFolder = wr.getValueString(key, "InstallLocation");
  457.     var thisInstallFolder = wr.getValueString("SOFTWARE\\Mozilla\\Mozilla Firefox\\1.0.5 (en-US)\\Main", 
  458.                                               "Install Directory");
  459.     var itemInstallFolderShortName = File.windowsGetShortName(getFolder("file:///", itemInstallFolder));
  460.     var thisInstallFolderShortName = File.windowsGetShortName(getFolder("file:///", thisInstallFolder));
  461.     
  462.     var itemDisplayVersion = wr.getValueString(key, "DisplayVersion");
  463.     var thisDisplayVersion = "1.0.5 (en-US)";
  464.  
  465.     // It is possible that a user might have installed several products into
  466.     // the same directory that have the same "DisplayVersion" (e.g. "1.0")... 
  467.     // in this case we don't want to trash the Uninstall info for the others
  468.     // so we have to be sure to make sure Comment matches... we use Comment
  469.     // instead of DisplayName since DisplayName varies from version to version
  470.     // as it contains the version number, and this instance of javascript is
  471.     // crippled so as not to contain any useful string parsing.
  472.     var itemComment = wr.getValueString(key, "Comment");
  473.     var thisComment = "Mozilla Firefox";
  474.  
  475.     if ((itemComment == thisComment || itemComment == "The Browser, Reloaded.") && 
  476.         itemInstallFolderShortName == thisInstallFolderShortName &&
  477.         thisDisplayVersion != itemDisplayVersion && 
  478.         wr.isKeyWritable(key)) {
  479.       wr.deleteKey(key);
  480.       logComment("Removing obsolete uninstall key with upgrade: " + key);
  481.     }
  482.   }
  483.   while (true);
  484. }
  485.  
  486. function copyFlashXPT()
  487. {
  488.   /*
  489.    * Check if Netscape Navigator (pre 6.0) is installed and if the
  490.    * flash player is installed in Netscape's plugin folder. If it is,
  491.    * try to copy the flashplayer.xpt file into our plugins folder to
  492.    * make ensure that flash is scriptable if we're using it from
  493.    * Netscape's plugins folder.
  494.    */
  495.  
  496.   var winreg = getWinRegistry();
  497.  
  498.   winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  499.   var subkey = "Software\\Netscape\\Netscape Navigator";
  500.   var nsver = winreg.getValueString(subkey, "CurrentVersion");
  501.  
  502.   if (!nsver)
  503.     return;
  504.  
  505.   subkey += "\\" + nsver + "\\Main";
  506.  
  507.   var navPluginsDir = winreg.getValueString(subkey, "Plugins Directory");
  508.  
  509.   if (!navPluginsDir)
  510.     return;
  511.  
  512.   var navFlashXPT = getFolder("file:///", navPluginsDir + "\\flashplayer.xpt");
  513.  
  514.   if (!File.exists(navFlashXPT))
  515.     return;
  516.  
  517.   var target = getFolder("file:///", fProgram + "\\plugins\\flashplayer.xpt");
  518.  
  519.   // Copy the file flashplayer.xpt from Netscape's plugin directory to
  520.   // Firefox's plugin directory.
  521.   File.copy(navFlashXPT, target);
  522.  
  523.   logComment("Copied Flash xpt file from '" + navFlashXPT + "' to '" + target +
  524.              "'");
  525. }
  526.  
  527. function copyQuickTimeXPT()
  528. {
  529.   /*
  530.    * Check if QuickTime is installed and copy
  531.    * nsIQTScriptablePlugin.xpt from its plugins directory into our
  532.    * plugins directory. If we don't do this, QuickTime will load in
  533.    * Firefox, but it won't be scriptable.
  534.    */
  535.  
  536.   var winreg = getWinRegistry();
  537.  
  538.   winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  539.   var subkey = "Software\\Apple Computer, Inc.\\QuickTime";
  540.   var qtdir = winreg.getValueString(subkey, "InstallDir");
  541.  
  542.   if (!qtdir)
  543.     return;
  544.  
  545.   var qtXPT = getFolder("file:///",
  546.                         qtdir + "\\Plugins\\nsIQTScriptablePlugin.xpt");
  547.  
  548.   if (!File.exists(qtXPT))
  549.     return;
  550.  
  551.   var target = getFolder("file:///",
  552.                          fProgram + "\\plugins\\nsIQTScriptablePlugin.xpt");
  553.  
  554.   // Copy the file nsIQTScriptablePlugin.xpt from the QuickTime
  555.   // installation directory to Firefox's plugin directory.
  556.   File.copy(qtXPT, target);
  557.  
  558.   logComment("Copied QuickTime xpt file from '" + qtXPT + "' to '" + target +
  559.              "'");
  560. }
  561.  
  562. // main
  563. var srDest;
  564. var err;
  565. var err2;
  566. var fProgram;
  567. var fWindowsSystem;
  568. var fileComponentRegStr;
  569. var fileComponentReg;
  570. var restrictedAccess;
  571. var fileToRegister;
  572. var args;
  573. var gGreLocal = false;
  574.  
  575. args = new String(Install.arguments);
  576. logComment("args: " + args);
  577.  
  578. // If -gGreLocal is passed in, then we need to *not* cleanup GRE files if they
  579. // exist in the browser dir.
  580. // The default is to delete any GRE files because we default GRE will be global.
  581. if(args == "-greLocal")
  582.   gGreLocal = true;
  583.  
  584. srDest = 2255;
  585. err    = initInstall("Mozilla Firefox", "Firefox", "1.0.5"); 
  586. logComment("initInstall: " + err);
  587.  
  588. fProgram  = getFolder("Program");
  589. fWindowsSystem = getFolder("Win System");
  590. logComment("fProgram: " + fProgram);
  591.  
  592. if(verifyDiskSpace(fProgram, srDest))
  593. {
  594.   setPackageFolder(fProgram);
  595.  
  596.   upgradeCleanup();
  597.   err = addDirectory("",
  598.                      "1.0.5",
  599.                      "bin",              // dir name in jar to extract 
  600.                      fProgram,           // Where to put this file (Returned from GetFolder) 
  601.                      "",                 // subdir name to create relative to fProgram
  602.                      true);              // Force Flag 
  603.   logComment("addDirectory() of Program returned: " + err);
  604.  
  605.   // check return value
  606.   if( err == SUCCESS )
  607.   {
  608.     fileToRegister = getFolder(fProgram, "AccessibleMarshal.dll");
  609.     err2           = File.windowsRegisterServer(fileToRegister);
  610.     logComment("windowsRegisterServer() returned: " + err2);
  611.     updateWinReg();  // Finish registering above marshalling dll's
  612.  
  613.     createShortcuts();
  614.  
  615.     // we don't want to fail on errors for the above two
  616.     resetError();
  617.  
  618.     // register chrome
  619.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "browser.jar"), "content/browser/");
  620.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome", "classic.jar"), "skin/classic/browser/");
  621.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "browser.jar"), "content/browser-region/");
  622.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "browser.jar"), "content/browser-platform/");
  623.  
  624.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "toolkit.jar"), "content/passwordmgr/");
  625.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "toolkit.jar"), "content/mozapps/");
  626.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome", "classic.jar"), "skin/classic/mozapps/");
  627.     
  628.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/autoconfig/");
  629.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/necko/");
  630.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/cookie/");
  631.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/wallet/");
  632.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/xbl-marquee/");
  633.  
  634.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","toolkit.jar"),"content/global/");
  635.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","toolkit.jar"),"content/global-region/");
  636.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","toolkit.jar"),"content/global-platform/");
  637.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/global/");
  638.  
  639.     // XXXben Stuff that will become obsolete
  640.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/navigator/");
  641.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/navigator-region/");
  642.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/navigator-platform/");
  643.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/navigator/");
  644.  
  645.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/communicator/");
  646.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/communicator-region/");
  647.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","comm.jar"),"content/communicator-platform/");
  648.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","classic.jar"),"skin/classic/communicator/");
  649.  
  650.     // Create the uninstall folder. 
  651.     err = File.dirCreate(getFolder("Program", "uninstall"));
  652.     logComment("dirCreate() of Program/uninstall returned: " + err);
  653.  
  654.     // We need to register the psm chrome files.
  655.     // We're checking to see if they exist first in case
  656.     // they were not built and packaged up.
  657.     var pki = getFolder("Chrome", "pippki.jar");
  658.     if(File.exists(pki)) 
  659.       registerChrome(CONTENT | DELAYED_CHROME, pki, "content/pippki/");
  660.  
  661.     var nss = getFolder("Chrome", "pipnss.jar");
  662.     if(File.exists(nss)) 
  663.       registerChrome(CONTENT | DELAYED_CHROME, nss, "content/pipnss/");
  664.  
  665.     copyFlashXPT();
  666.     copyQuickTimeXPT();
  667.     
  668.     /* Log files that are created after the installer is done, so they can be uninstalled */
  669.     logComment("Installing: "    + fProgram + ".autoreg");
  670.     logComment("Installing: "    + fProgram + "Xpcs Registry.dat");
  671.     logComment("Installing: "    + fProgram + "xpcom.log");
  672.     logComment("Create Folder: " + fProgram + "components");
  673.     logComment("Installing: "    + fProgram + "components\\xpti.dat");
  674.     logComment("Installing: "    + fProgram + "components\\xptitemp.dat");
  675.     logComment("Installing: "    + fProgram + "components\\compreg.dat");
  676.     logComment("Create Folder: " + fProgram + "components\\Netscape");
  677.     logComment("Create Folder: " + fProgram + "components\\Netscape\\MozillaTrunk");
  678.     logComment("Installing: "    + fProgram + "components\\Netscape\\MozillaTrunk\\manifest.ini");
  679.     logComment("Installing: "    + fProgram + "components\\Netscape\\MozillaTrunk\\permdata.box");
  680.     logComment("Installing: "    + fProgram + "components\\Netscape\\MozillaTrunk\\Talkback.ini");
  681.     logComment("Create Folder: " + fProgram + "chrome");
  682.     logComment("Installing: "    + fProgram + "chrome\\installed-chrome.txt");
  683.     logComment("Installing: "    + fProgram + "chrome\\chrome.rdf");
  684.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo");
  685.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\cookie");
  686.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\cookie\\content");
  687.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\cookie\\content\\overlays.rdf");
  688.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\inspector");
  689.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\inspector\\content");
  690.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\inspector\\content\\overlays.rdf");
  691.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\communicator");
  692.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\communicator\\content");
  693.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\communicator\\content\\overlays.rdf");
  694.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\editor");
  695.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\editor\\content");
  696.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\editor\\content\\overlays.rdf");
  697.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\messenger");
  698.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\messenger\\content");
  699.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\messenger\\content\\overlays.rdf");
  700.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\navigator");
  701.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\navigator\\content");
  702.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\navigator\\content\\overlays.rdf");
  703.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\navigator\\skin");
  704.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\navigator\\skin\\stylesheets.rdf");
  705.     logComment("Create Folder: " + fProgram + "uninstall");
  706.  
  707.     err = getLastError();
  708.     if (err == SUCCESS)
  709.     {
  710.       err = performInstall();
  711.       logComment("performInstall() returned: " + err);
  712.       if (File.exists(getFolder(fProgram, "xpicleanup.dat")))
  713.       {
  714.         logComment("incomplete install, manually launch cleanup utility");
  715.         initInstall("Post-install Cleanup Utility", "Browser/xpicleanup", "1.0.5");
  716.         cleanupUtility = getFolder(fProgram, "xpicleanup.exe");
  717.         err = File.execute(cleanupUtility);
  718.         logComment("execute() returned: " + err);
  719.         err = performInstall();
  720.       }
  721.     }
  722.     else
  723.       cancelInstall(err);
  724.   }
  725.   else
  726.     cancelInstall(err);
  727. }
  728. else
  729.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  730.  
  731.  
  732. // end main
  733.