home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2005 October / Gamestar_77_2005-10_dvd.iso / Programy / nsb-install-8-0.exe / chrome / browser.jar / content / browser / pref / pref-sitecontrols.js < prev    next >
Encoding:
Text File  |  2005-07-29  |  23.6 KB  |  750 lines

  1. const DEBUG_SITECONTROLS_PANEL = false;
  2.  
  3. var kSITEPREF = 'browser.preferences.selectedSite';
  4. var siteList = null;
  5. var _elementIDs = [ 'trustRatingsAuto_default', 'useTrustRatings', 'trustRatingsAuto',
  6.                     'displayWarnings', 'updateInterval', 
  7.                     'showBlockedCount', 'playBlockedSound', 'showEngineIcon' ];
  8.  
  9. var controlledFields = [ 'displayEngine', 'displayEngine_Gecko', 'displayEngine_Trident',
  10.                          'allowPopups', 'requestedPopupsInTab',
  11.                          'allowImages', 'imagesFromOrigOnly',
  12.                          'enableActiveX', 'enableJava', 'enableJavaScript',
  13.                          'jsMoveResize', 'jsRaiseLower', 'jsContextMenu',
  14.                          'jsHideStatusBar', 'jsStatusBarText', 'jsChangeImages',
  15.                          'allowCookies', 'cookiesFromOrigOnly' ];
  16. //'showBlockedCount', 'playBlockedSound',
  17. var controlledButtons = [ 'advancedJavaScript' ];
  18. //                'viewCookies', 'clearCookies' ];
  19. //'viewPasswords', 'clearPasswords',
  20. var bFormDisabled = false;
  21. var gPrefTabsSelectInit = false;
  22.  
  23. /**
  24.  * Initialize the Site Controls prefs panel
  25.  **/
  26. function Startup() {
  27.     debug('Startup()');
  28.  
  29.     if (!sitecontrols.SCSVC) {
  30.         alert('Site Controls service was not initiallized!');
  31.         return;
  32.     }
  33.  
  34.     // This should ensure that the sitecontrols object stays around
  35.     // even when switching between panels
  36.     if ('sitecontrols' in window.top) sitecontrols = window.top.sitecontrols;
  37.     else window.top.sitecontrols = sitecontrols;
  38.  
  39.     disableForm();
  40.     setTimeout('delayedStartup()', 100);
  41. }
  42.  
  43. function delayedStartup() {
  44.     siteList = document.getElementById('siteList');
  45.     RefreshTree();
  46.  
  47.     // See if there is a current site we should auto-select
  48.     var currentSite = null;
  49.     var controlledSite = null;
  50.     try {
  51.         currentSite = sitecontrols.PREF.getCharPref(kSITEPREF);
  52.         controlledSite = sitecontrols.getControlledSiteFromHost(currentSite);
  53.         debug('currentSite: '+currentSite+' controlledSite: '+controlledSite);
  54.     } catch(ex) { }
  55.     if (controlledSite) {
  56.         // See if the current starting host exists in our list
  57.         var thisSite = getSiteAtIndex(0);
  58.         var found = false;
  59.         var i = 0;
  60.         while (!found && thisSite) {
  61.             if (thisSite == controlledSite) {
  62.                 debug('matched: '+thisSite);
  63.                 siteList.tree.view.selection.select(i);
  64.                 found = true;
  65.                 break;
  66.             }
  67.             i++;
  68.             thisSite = getSiteAtIndex(i);
  69.         }
  70.         if (!found) {
  71.             debug('no match for '+controlledSite+' - using default');
  72.             siteList.tree.view.selection.select(0);
  73.         }
  74.     } else {
  75.         // Just select the first item, which will be 'Default'
  76.         siteList.tree.view.selection.select(0);
  77.     }
  78.  
  79.     parent.hPrefWindow.registerOKCallbackFunc(onSiteControlsOK);
  80.  
  81.     document.updateSiteControl = updateSiteControl;
  82.     
  83.     gPrefTabsSelectInit = true;
  84.     SetPrefTabs();
  85.  
  86.     // need to force this radio selection because nested radiogroup don't behave properly
  87.     var prefService = Components.classes["@mozilla.org/preferences-service;1"]
  88.                                 .getService(Components.interfaces.nsIPrefBranch);
  89.     var trustPref = prefService.getBoolPref("trustsettings.partnerratings");
  90.     if(!trustPref) {
  91.         document.getElementById('useTrustRatings_no').setAttribute('selected', 'true');
  92.     }
  93.  
  94.     enableDisableTrustRatings();
  95.     document.getElementById('trustRatingsNo_default').selectedIndex =
  96.         document.getElementById('trustRatingsAuto_default').selectedIndex;
  97.  
  98.     // MERC - JCH: Set the following check boxes: pop-up blocking sound, pop-up blocking count,
  99.     // and show engine icon on status bar. These values are not site-specific.
  100.     if (prefService != null) {
  101.         document.getElementById('showBlockedCount').checked = 
  102.             prefService.getBoolPref("privacy.popups.show_count");
  103.  
  104.         document.getElementById('playBlockedSound').checked = 
  105.             prefService.getBoolPref("privacy.popups.sound_enabled");
  106.  
  107.         document.getElementById('showEngineIcon').checked = 
  108.             prefService.getBoolPref("browser.show_engine_icon");
  109.     }
  110. }
  111.  
  112. /**
  113.  * Refresh the site list tree from the internal datasource
  114.  **/
  115. function RefreshTree() {
  116.     debug('RefreshTree()');
  117.     var datasources = siteList.db.GetDataSources();
  118.     while (datasources.hasMoreElements()) {
  119.         var ds = datasources.getNext();
  120.  
  121.         try {
  122.             ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
  123.             ds.Refresh(true);
  124.         } catch (ex) {
  125.             // This probably means the resource is not there because the
  126.             // list is filtered... do nothing
  127.         }
  128.     }
  129.  
  130.     // MERC - JCH: Needed to get the merged datasource instead of 
  131.     // just the profile datasource
  132.     //sitecontrols.SCSVC.startMergeDefaultSiteControls();
  133.     //sitecontrols.SCSVC.removeNegativeEntriesFromDataSource();
  134.     //sitecontrols.SCSVC.loadData();
  135.  
  136.     siteList.tree.builder.rebuild();
  137.     siteList.refreshList();
  138. }
  139.  
  140. // Make sure the MasterListSelection and SiteListSelection functions are
  141. // mutually exclusive
  142. var selectionMutex = 0;
  143. var selectedTree = null;
  144.  
  145. function MasterListSelection(index) {
  146.     if (index < 0) return;
  147.  
  148.     // Respect mutex
  149.     if (selectionMutex) return;
  150.     // Establish mutex
  151.     selectionMutex++;
  152.  
  153.     selectedTree = document.getElementById('masterList');
  154.  
  155.     debug('[][][] MasterListSelection('+index+')');
  156.  
  157.     // Clear the selection in the sitelist tree
  158.     siteList.tree.view.selection.clearSelection();
  159.  
  160.     var selectedItem = document.getElementById('masterList').view.getItemAtIndex(index);
  161.     var site = selectedItem.firstChild.firstChild.getAttribute('value');
  162.     loadSite(site);
  163.  
  164.     // Release mutex
  165.     selectionMutex--;
  166. }
  167.  
  168. /**
  169.  * Handler for selection of a site in the site list
  170.  **/
  171. function SiteListSelection(index) {
  172.     if (index < 0) return;
  173.     var site = getSiteAtIndex(index);
  174.     if (site == null) return;
  175.  
  176.     // Respect mutex
  177.     if (selectionMutex) return;
  178.     // Establish mutex
  179.     selectionMutex++;
  180.  
  181.     selectedTree = siteList.tree;
  182.  
  183.     debug('[][][] SiteListSelection('+index+')');
  184.  
  185.     // Clear the selection in the masterList tree
  186.     document.getElementById('masterList').view.selection.clearSelection();
  187.  
  188.     loadSite(site);
  189.  
  190.     // Remember which site is currently selected
  191.     sitecontrols.PREF.setCharPref(kSITEPREF, getSelectedSite());
  192.  
  193.     // Release mutex
  194.     selectionMutex--;
  195. }
  196.  
  197. /**
  198.  * Print debug output to the console
  199.  **/
  200. function debug(msg) {
  201.     if (DEBUG_SITECONTROLS_PANEL)
  202.         dump('pref-sitecontrols.js: '+msg+'\n');
  203. }
  204.  
  205. /**
  206.  * Return the name of the site at the specified index in the site list
  207.  **/
  208. function getSiteAtIndex(index) {
  209.     if (index < 0) return null;
  210.     var siteRes;
  211.     try {
  212.         siteRes = siteList.tree.view.getResourceAtIndex(index);
  213.     } catch (ex) {
  214.         return null;
  215.     }
  216.     if (!siteRes) return null;
  217.     var titleProp = sitecontrols.RDF.GetResource(sitecontrols.SC_NS+'title');
  218.     var titleRes = sitecontrols.SCDS.GetTarget(siteRes, titleProp, true);
  219.     var titleLit = titleRes.QueryInterface(Components.interfaces.nsIRDFLiteral);
  220.     return titleLit.Value;
  221. }
  222.  
  223. /**
  224.  * Return the name of the currently selected site
  225.  **/
  226. function getSelectedSite() {
  227.     if (selectedTree == siteList.tree)
  228.         return getSiteAtIndex(siteList.tree.currentIndex);
  229.     else {
  230.         var ml = selectedTree;
  231.         var item = ml.view.getItemAtIndex(ml.currentIndex);
  232.         return item.firstChild.firstChild.getAttribute('value');
  233.     }
  234. }
  235.  
  236. /**
  237.  * Load all of the site control values for the specified site into the UI
  238.  **/
  239. function loadSite(site) {
  240.     if (site) {
  241.         if (bFormDisabled) enableForm();
  242.     } else {
  243.         disableForm();
  244.         return;
  245.     }
  246.  
  247.     //var site = getSiteAtIndex(index);
  248.     debug('loadSite('+site+')');
  249.     //document.getElementById('sitegroupcaption').label = site+' Controls';
  250.     var sc = sitecontrols.SCSVC;
  251.  
  252.     var displayEngine = sc.readSiteControl(site,'displayEngine');
  253.     debug('displayEngine: '+displayEngine);
  254.     document.getElementById('displayEngine').selectedIndex = (displayEngine=='Gecko')?0:1;
  255.  
  256.     var allowPopups = sc.readSiteControl(site,'allowPopups');
  257.     debug('allowPopups: '+allowPopups);
  258.     document.getElementById('allowPopups').checked = eval(allowPopups);
  259.  
  260.     var requestedPopupsInTab = sc.readSiteControl(site,'requestedPopupsInTab');
  261.     debug('requestedPopupsInTab: '+requestedPopupsInTab);
  262.     document.getElementById('requestedPopupsInTab').checked = eval(requestedPopupsInTab);
  263.  
  264.     var allowImages = sc.readSiteControl(site,'allowImages');
  265.     debug('allowImages: '+allowImages);
  266.     document.getElementById('allowImages').checked = eval(allowImages);
  267.  
  268.     if (displayEngine=='Gecko') {
  269.         var imagesFromOrigOnly = sc.readSiteControl(site,'imagesFromOrigOnly');
  270.         debug('imagesFromOrigOnly: '+imagesFromOrigOnly);
  271.         document.getElementById('imagesFromOrigOnly').checked = eval(imagesFromOrigOnly);
  272.         document.getElementById('imagesFromOrigOnly').disabled = false;
  273.     } else {
  274.         var imagesFromOrigOnly = sc.readSiteControl(site,'imagesFromOrigOnly');
  275.         debug('imagesFromOrigOnly: '+imagesFromOrigOnly);
  276.         document.getElementById('imagesFromOrigOnly').checked = false;
  277.         document.getElementById('imagesFromOrigOnly').disabled = true;
  278.     }
  279.     
  280.     var enableActiveX = sc.readSiteControl(site,'enableActiveX');
  281.     debug('enableActiveX: '+enableActiveX);
  282.     document.getElementById('enableActiveX').checked = eval(enableActiveX);
  283.     
  284.     var enableJava = sc.readSiteControl(site,'enableJava');
  285.     debug('enableJava: '+enableJava);
  286.     document.getElementById('enableJava').checked = eval(enableJava);
  287.  
  288.     var enableJavaScript = sc.readSiteControl(site,'enableJavaScript');
  289.     debug('enableJavaScript: '+enableJavaScript);
  290.     document.getElementById('enableJavaScript').checked = eval(enableJavaScript);
  291.     //document.getElementById('enableJavaScript').setAttribute('label',
  292.     //    (displayEngine=='Gecko')?'Enable JavaScript':'Enable JavaScript/VBScript');
  293.  
  294.     var jsMoveResize = sc.readSiteControl(site,'jsMoveResize');
  295.     debug('jsMoveResize: '+jsMoveResize);
  296.     document.getElementById('jsMoveResize').checked = eval(jsMoveResize);
  297.  
  298.     var jsRaiseLower = sc.readSiteControl(site,'jsRaiseLower');
  299.     debug('jsRaiseLower: '+jsRaiseLower);
  300.     document.getElementById('jsRaiseLower').checked = eval(jsRaiseLower);
  301.  
  302.     var jsContextMenu = sc.readSiteControl(site,'jsContextMenu');
  303.     debug('jsContextMenu: '+jsContextMenu);
  304.     document.getElementById('jsContextMenu').checked = eval(jsContextMenu);
  305.  
  306.     var jsHideStatusBar = sc.readSiteControl(site,'jsHideStatusBar');
  307.     debug('jsHideStatusBar: '+jsHideStatusBar);
  308.     document.getElementById('jsHideStatusBar').checked = eval(jsHideStatusBar);
  309.  
  310.     var jsStatusBarText = sc.readSiteControl(site,'jsStatusBarText');
  311.     debug('jsStatusBarText: '+jsStatusBarText);
  312.     document.getElementById('jsStatusBarText').checked = eval(jsStatusBarText);
  313.  
  314.     var jsChangeImages = sc.readSiteControl(site,'jsChangeImages');
  315.     debug('jsChangeImages: '+jsChangeImages);
  316.     document.getElementById('jsChangeImages').checked = eval(jsChangeImages);
  317.  
  318. /*
  319.     var rememberPasswords = sc.readSiteControl(site,'rememberPasswords');
  320.     debug('rememberPasswords: '+rememberPasswords);
  321. // document.getElementById('rememberPasswords').checked = eval(rememberPasswords);        // MERC JVL
  322. */
  323.  
  324.     var allowCookies = sc.readSiteControl(site,'allowCookies');
  325.     debug('allowCookies: '+allowCookies);
  326.     document.getElementById('allowCookies').checked = eval(allowCookies);
  327.  
  328.     var cookiesFromOrigOnly = sc.readSiteControl(site,'cookiesFromOrigOnly');
  329.     debug('cookiesFromOrigOnly: '+cookiesFromOrigOnly);
  330.     document.getElementById('cookiesFromOrigOnly').checked = eval(cookiesFromOrigOnly);
  331.  
  332.     imagesChange();
  333.     cookiesChange();
  334.     engineChange();
  335.  
  336.     // Uncheck disabled activeX checkbox if Gecko is engine.
  337.     removeCheckFromDisabled();
  338.  
  339.     //checkSoundAndCount();  // MERC - JCH
  340.  
  341.     //updateClearPasswordsButton();
  342.     //updateClearCookiesButton();
  343. }
  344.  
  345. // MERC - JCH: Ensure that disabled activeX checkbox is unchecked if Gecko applies. 
  346. // See BLT bug #120260.
  347. function removeCheckFromDisabled() {
  348.  
  349.     var uncheck = (document.getElementById('enableActiveX').disabled && 
  350.                   (document.getElementById('displayEngine').value == 'Gecko'));
  351.  
  352.     if (uncheck)
  353.     {
  354.         document.getElementById('enableActiveX').checked = false;
  355.     }
  356. }
  357.  
  358.  
  359.  
  360. // MERC - JCH: When either the sound or count checkbox is 
  361. // changed, set the corresponding pref settings.
  362. // NOTE: This is currently not used BUT you never know
  363. // when sound and count will be reverted to a per site basis
  364. function onSoundCountChanged(event) {
  365.  
  366.     var targetId = event.target.getAttribute("id");
  367.  
  368.     var cval = document.getElementById(targetId).checked;
  369.  
  370.     var prefs = GetPreferencesInterface();
  371.     if (prefs == null)
  372.         return;
  373.     
  374.     var pstr = event.target.getAttribute("prefstring");
  375.     prefs.setBoolPref(pstr,cval);
  376.  
  377.     event.preventBubble();
  378.     return;
  379. }
  380.  
  381. function disableForm() {
  382.     debug('disableForm()');
  383.     for (var f = 0; f < controlledFields.length; f++) {
  384.         disableId(controlledFields[f]);
  385.     }
  386.     for (var b = 0; b < controlledButtons.length; b++) {
  387.         disableId(controlledButtons[b]);
  388.     }
  389.     bFormDisabled = true;
  390. }
  391.  
  392. function enableForm() {
  393.     debug('enableForm()');
  394.     for (var f = 0; f < controlledFields.length; f++) {
  395.         enableId(controlledFields[f]);
  396.     }
  397.     for (var b = 0; b < controlledButtons.length; b++) {
  398.         enableId(controlledButtons[b]);
  399.     }
  400.     bFormDisabled = false;
  401. }
  402.  
  403. function filterCommand(value) {
  404.     siteList.refreshList(value);
  405.     if (siteList.tree.currentIndex == -1)
  406.         disableForm();
  407. }
  408.  
  409. function updateClearPasswordsButton() {
  410.     // Clear Passwords button disabled?
  411.     debug('updateClearPasswordsButton()');
  412.     var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"]
  413.                                     .getService(Components.interfaces.nsIPasswordManager);
  414.     var e = passwordManager.enumerator;
  415.     var selectedSite = getSelectedSite();
  416.     var shouldDisable = "true";
  417.     while (e.hasMoreElements()) {
  418.         var thisPasswd = e.getNext();
  419.         thisPasswd = thisPasswd.QueryInterface(Components.interfaces.nsIPassword);
  420.         debug('selectedSite: '+selectedSite+'  checking against: '+thisPasswd.host);
  421.         if (thisPasswd.host == selectedSite) {
  422.             shouldDisable = "false";
  423.             break;
  424.         }
  425.     }
  426.     //document.getElementById('clearPasswords').setAttribute('disabled', shouldDisable);
  427. }
  428.  
  429. /**
  430.  * Update the internal datasource with values from the UI
  431.  **/
  432. function updateSiteControl(obj) {
  433.     var site = getSelectedSite();
  434.     if (!site) return;
  435.  
  436.     var control = obj.id;
  437.     var value;
  438.     if (obj.localName == 'checkbox') {
  439.         value = (obj.checked) ? 'true' : 'false';
  440.     } else {
  441.         value = obj.value;
  442.     }
  443.  
  444.     debug("updateSiteControl('"+site+"','"+control+"','"+value+"')");
  445.     sitecontrols.SCSVC.updateSiteControl(site, control, value);
  446.  
  447.     if (selectedTree == siteList.tree) {
  448.         sitecontrols.SCSVC.updateSiteControl(site, "securityLevel", "Custom");    
  449.     }
  450.  
  451.     loadSite(site);
  452. }
  453.  
  454. /**
  455.  * Handle prefs window OK button press
  456.  **/
  457. function onSiteControlsOK() {
  458.     //debug('onSiteControlsOK()');
  459.     //sitecontrols.dumpRDF();
  460.     //window.top.sitecontrols.SCSVC.writeSiteControls();
  461.  
  462.     if (!document.getElementById('showBlockedCount') || 
  463.         !document.getElementById('playBlockedSound') ||
  464.         !document.getElementById('showEngineIcon')) 
  465.         return;
  466.  
  467.     var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  468.  
  469.     // MERC - JCH: Set the following global values: pop-up blocking sound, pop-up blocking count,
  470.     // show engine icon on status bar and default user trust setting.
  471.     if (prefService != null) {
  472.         prefService.setBoolPref("privacy.popups.show_count", document.getElementById('showBlockedCount').checked);
  473.  
  474.         prefService.setBoolPref("privacy.popups.sound_enabled",    document.getElementById('playBlockedSound').checked); 
  475.  
  476.         prefService.setBoolPref("browser.show_engine_icon",    document.getElementById('showEngineIcon').checked);
  477.  
  478.         prefService.setCharPref("trustsettings.default.user", document.getElementById('trustRatingsNo_default').value);
  479.     }
  480. }
  481.  
  482. /**
  483.  * Update UI in response to Display Engine value change
  484.  **/
  485. function engineChange() {
  486.     debug('engineChange()');
  487.  
  488.     var allowCookiesCheckbox = document.getElementById('allowCookies');
  489.     var imagesFromOrigOnlyCheckbox = document.getElementById('cookiesFromOrigOnly');
  490.     var jsDeck = document.getElementById('jsDeck');
  491.     var engine = document.getElementById('displayEngine').value;
  492.     document.getElementById('enableActiveX').disabled = (engine == 'Gecko');
  493.     document.getElementById('advancedJavaScript').disabled = (engine == 'Trident');
  494.     imagesFromOrigOnlyCheckbox.disabled = (engine == 'Trident');
  495.  
  496.     if (engine == 'Trident') {
  497.         disableId('allowCookies');
  498.         disableId('cookiesFromOrigOnly');
  499.         jsDeck.selectedIndex = 1;
  500.     } else {
  501.         enableId('allowCookies');
  502.         if(allowCookiesCheckbox.checked)
  503.         {
  504.             enableId('cookiesFromOrigOnly');
  505.         }
  506.         else
  507.         {
  508.             disableId('cookiesFromOrigOnly');
  509.         }
  510.         jsDeck.selectedIndex = 0;
  511.     }
  512. }
  513.  
  514. /**
  515.  * Update UI in response to Allow Images value change
  516.  **/
  517. function imagesChange() {
  518.     debug('imagesChange()');
  519.     var engine = document.getElementById('displayEngine').value;
  520.     if(engine != 'Trident') {
  521.             var bImages = document.getElementById('allowImages').checked;
  522.             document.getElementById('imagesFromOrigOnly').disabled = (!bImages);
  523.     }
  524. }
  525.  
  526. /**
  527.  * Update UI in response to Allow Cookies value change
  528.  **/
  529. function cookiesChange() {
  530.     debug('cookiesChange()');
  531.     var bCookies = document.getElementById('allowCookies').checked;
  532.     if(bCookies)
  533.     {
  534.         enableId('cookiesFromOrigOnly');
  535.     }
  536.     else
  537.     {
  538.         disableId('cookiesFromOrigOnly');
  539.     }
  540.     //document.getElementById('cookiesFromOrigOnly').disabled = (!bCookies);
  541. }
  542.  
  543. function advancedJavaScript() {
  544.     openDialog("chrome://browser/content/pref/pref-sitecontrols-advancedjs.xul",
  545.                "", "chrome,modal");
  546. }
  547.  
  548. function viewPasswords() {
  549.     var prefServ = Components.classes["@mozilla.org/preferences-service;1"]
  550.                              .getService(Components.interfaces.nsIPrefBranch);
  551.     prefServ.setCharPref('browser.preferences.formfillORpasscard', 'passcardtab');
  552.     window.top.switchPage('catFormFillButton');
  553. }
  554.  
  555. function clearPasswords() {
  556.     debug('clearPasswords()');
  557.     var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"]
  558.                                     .getService(Components.interfaces.nsIPasswordManager);
  559.     var e = passwordManager.enumerator;
  560.     var selectedSite = getSelectedSite();
  561.     var shouldDisable = "true";
  562.     while (e.hasMoreElements()) {
  563.         var thisPasswd = e.getNext();
  564.         thisPasswd = thisPasswd.QueryInterface(Components.interfaces.nsIPassword);
  565.         debug('thisPasswd = { host: '+thisPasswd.host+', user: '+thisPasswd.user+' }');
  566.         if (thisPasswd.host == selectedSite) {
  567.             debug('REMOVING ' + thisPasswd.host);
  568.             passwordManager.removeUser(thisPasswd.host, thisPasswd.user);
  569.         }
  570.     }
  571.     debug('cleared!');
  572.     //document.getElementById('clearPasswords').setAttribute('disabled', 'true');
  573. }
  574.  
  575. // MERC - JCH: If there are no cookies for the site, disable the clear all cookies button
  576. function updateClearCookiesButton() {
  577.  
  578.     var cookiemanager = Components.classes["@mozilla.org/cookiemanager;1"].getService();
  579.     cookiemanager = cookiemanager.QueryInterface(Components.interfaces.nsICookieManager);
  580.  
  581.     if (!cookiemanager)
  582.       return;
  583.  
  584.     var cookieSite = getSelectedSite();
  585.     var foundACookie = false;
  586.     var enumerator = cookiemanager.enumerator;
  587.     while (enumerator.hasMoreElements()) {
  588.       var nextCookie = enumerator.getNext();
  589.       if (!nextCookie) 
  590.         break;
  591.       nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie);
  592.       var host = nextCookie.host;
  593.  
  594.       dump('this host: '+host+'  cookieSite: '+cookieSite+'\n');
  595.       if ((host == cookieSite) || (host == '.'+cookieSite)) {
  596.         foundACookie = true;
  597.         break;
  598.       }
  599.     }
  600.     if (foundACookie)
  601.         document.getElementById('clearCookies').setAttribute('disabled', 'false');
  602.     else
  603.         document.getElementById('clearCookies').setAttribute('disabled', 'true');        
  604. }
  605.  
  606. // MERC - JCH: Clear all the cookies for the site
  607. function clearCookies() {
  608.  
  609.     var cookiemanager = Components.classes["@mozilla.org/cookiemanager;1"].getService();
  610.     cookiemanager = cookiemanager.QueryInterface(Components.interfaces.nsICookieManager);
  611.  
  612.     if (!cookiemanager)
  613.       return;
  614.  
  615.     var cookieSite = getSelectedSite();
  616.     var cookieBool = document.getElementById('allowCookies').checked? false:true;
  617.     dump('cookieBool-> permanently blocked?: '+cookieBool+'\n');
  618.  
  619.     var enumerator = cookiemanager.enumerator;
  620.     while (enumerator.hasMoreElements()) {
  621.       var nextCookie = enumerator.getNext();
  622.       if (!nextCookie) 
  623.         break;
  624.       nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie);
  625.       var host = nextCookie.host;
  626.  
  627.       dump('this host: '+host+'  cookieSite: '+cookieSite+'\n');
  628.       if ((host == cookieSite) || (host == '.'+cookieSite)) {
  629.           cookiemanager.remove(nextCookie.host, nextCookie.name, nextCookie.path, cookieBool);
  630.       }
  631.     }
  632.  
  633.     // Also have to delete cookies stored in nsWidgetStateManager.js
  634.     if (parent.hPrefWindow.wsm.dataManager.pageData["chrome://browser/content/pref/pref-sitecontrols-cookies.xul"])
  635.         parent.hPrefWindow.wsm.dataManager.pageData["chrome://browser/content/pref/pref-sitecontrols-cookies.xul"].userData = new Object();
  636.     document.getElementById('clearCookies').setAttribute('disabled', 'true');
  637. }
  638.     
  639. function viewCookies() {
  640.     window.top.cookieSite = getSelectedSite();
  641.     openDialog("chrome://browser/content/pref/pref-sitecontrols-cookies.xul",
  642.                "_blank", "chrome,resizable=yes", "cookieManager");
  643. }
  644.  
  645. function cookieViewerOnPrefsOK()
  646. {
  647.   var dataObject = parent.hPrefWindow.wsm.dataManager.pageData["chrome://browser/content/pref/pref-sitecontrols-cookies.xul"].userData;
  648.  
  649.   if ('deletedCookies' in dataObject) {
  650.  
  651.     var cookiemanager = Components.classes["@mozilla.org/cookiemanager;1"].getService();
  652.     cookiemanager = cookiemanager.QueryInterface(Components.interfaces.nsICookieManager);
  653.  
  654.     for (var p = 0; p < dataObject.deletedCookies.length; ++p) {
  655.       cookiemanager.remove(dataObject.deletedCookies[p].host,
  656.                            dataObject.deletedCookies[p].name,
  657.                            dataObject.deletedCookies[p].path,
  658.                            dataObject.cookieBool);
  659.     }
  660.   }
  661. }
  662.  
  663. var kPrefs = "browser.sitecontrols.prefs";
  664.  
  665. function GetPreferencesInterface()
  666. {
  667.     return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  668. }
  669.  
  670. function SetPrefTabs()
  671. {
  672.     var prefs = GetPreferencesInterface();
  673.     if (prefs == null)
  674.         return;
  675.  
  676.     var selectedTabId = prefs.getCharPref(kPrefs);
  677.     dump("The selected sitecontrol preference tab is: " + selectedTabId + "\n");
  678.  
  679.     var theTabBox = document.getElementById("tabbox");
  680.     try {
  681.         var theTab = document.getElementById(selectedTabId);
  682.         theTabBox.selectedTab = theTab;
  683.     } catch (ex) { }
  684. }
  685.  
  686. function OnPrefTabsSelect()
  687. {
  688.     var theTabs = document.getElementById("preftabs");
  689.     if (!theTabs)
  690.         return;
  691.         
  692.     var theTab = theTabs.selectedItem;
  693.     if (!theTab)
  694.         return;
  695.  
  696.     // HACK: don't save the preference until the page has been fully initialized
  697.     //         because OnPrefTabsSelect() will be called before Startup()
  698.     if (gPrefTabsSelectInit)
  699.     {
  700.         // set as the last visted tab
  701.         var prefs = GetPreferencesInterface();
  702.         if (prefs)
  703.             prefs.setCharPref(kPrefs, theTab.id);
  704.     }
  705. }
  706.  
  707.  
  708. function enableDisableTrustRatings(event) {
  709.     debug('enableDisableTrustRatings()');
  710.     if (event) {
  711.         debug('event.target.id: '+event.target.id);
  712.     }
  713.     if (!event || event.target.id == 'useTrustRatings_yes'
  714.                || event.target.id == 'useTrustRatings_no'
  715.                || event.target.id == 'trustRatingsAuto_yes'
  716.                || event.target.id == 'trustRatingsAuto_no')
  717.     {
  718.         var useTrustRatings = document.getElementById('useTrustRatings').value;
  719.         debug('useTrustRatings: '+useTrustRatings);
  720.         if (useTrustRatings == 'true') {
  721.             enableId('trustRatingsAuto');
  722.             enableId('trustRatingsAuto_yes');
  723.             enableId('trustRatingsAuto_no');
  724.             var useAuto = document.getElementById('trustRatingsAuto').value;
  725.             if (useAuto == 'true') {
  726.                 disableId('trustRatingsAuto_default');
  727.             } else {
  728.                 enableId('trustRatingsAuto_default');
  729.             }
  730.             enableId('displayWarnings');
  731.             enableId('updateInterval');
  732.             enableId('updateIntervalLbl');
  733.             disableId('trustRatingsNo_default');
  734.             disableId('trustRatingsNoLbl');
  735.         } else {
  736.             disableId('trustRatingsAuto');
  737.             disableId('trustRatingsAuto_yes');
  738.             disableId('trustRatingsAuto_no');
  739.             disableId('trustRatingsAuto_default');
  740.             disableId('displayWarnings');
  741.             disableId('updateInterval');
  742.             disableId('updateIntervalLbl');
  743.             enableId('trustRatingsNo_default');
  744.             enableId('trustRatingsNoLbl');
  745.         }
  746.     }
  747. }
  748.  
  749. function enableId(id) { document.getElementById(id).removeAttribute('disabled'); }
  750. function disableId(id) { document.getElementById(id).setAttribute('disabled', 'true'); }