Bug 470455 - test_database_sync_embed_visits.js leaks, r=sdwilsh
[wine-gecko.git] / toolkit / mozapps / xpinstall / content / xpinstallConfirm.js
blobeed84ae4e0dd9a28aa48ef439fb9a1b95fb492ca
1 # -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 # ***** BEGIN LICENSE BLOCK *****
3 # Version: MPL 1.1/GPL 2.0/LGPL 2.1
4
5 # The contents of this file are subject to the Mozilla Public License Version
6 # 1.1 (the "License"); you may not use this file except in compliance with
7 # the License. You may obtain a copy of the License at
8 # http://www.mozilla.org/MPL/
9
10 # Software distributed under the License is distributed on an "AS IS" basis,
11 # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 # for the specific language governing rights and limitations under the
13 # License.
14
15 # The Original Code is Mozilla.org Code.
16
17 # The Initial Developer of the Original Code is Ben Goodger. 
18 # Portions created by the Initial Developer are Copyright (C) 2001
19 # the Initial Developer. All Rights Reserved.
20
21 # Contributor(s):
22 #   Ben Goodger <ben@bengoodger.com> (v2.0) 
23
24 # Alternatively, the contents of this file may be used under the terms of
25 # either the GNU General Public License Version 2 or later (the "GPL"), or
26 # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 # in which case the provisions of the GPL or the LGPL are applicable instead
28 # of those above. If you wish to allow use of your version of this file only
29 # under the terms of either the GPL or the LGPL, and not to allow others to
30 # use your version of this file under the terms of the MPL, indicate your
31 # decision by deleting the provisions above and replace them with the notice
32 # and other provisions required by the GPL or the LGPL. If you do not delete
33 # the provisions above, a recipient may use your version of this file under
34 # the terms of any one of the MPL, the GPL or the LGPL.
35
36 # ***** END LICENSE BLOCK *****
38 var XPInstallConfirm = 
39
40   _param: null
44 XPInstallConfirm.init = function ()
46   var _installCountdown;
47   var _installCountdownInterval;
48   var _focused;
49   var _timeout;
51   var bundle = document.getElementById("xpinstallConfirmStrings");
52   
53   this._param = window.arguments[0].QueryInterface(Components.interfaces.nsIDialogParamBlock);
54   if (!this._param)
55     close();
56   
57   this._param.SetInt(0, 1); // The default return value is "Cancel"
58   
59   var _installCountdownLength = 5;
60   try {
61     var prefs = Components.classes["@mozilla.org/preferences-service;1"]
62                           .getService(Components.interfaces.nsIPrefBranch);
63     var delay_in_milliseconds = prefs.getIntPref("security.dialog_enable_delay");
64     _installCountdownLength = Math.round(delay_in_milliseconds / 500);
65   } catch (ex) { }
66   
67   var itemList = document.getElementById("itemList");
68   
69   var numItemsToInstall = this._param.GetInt(1);
70   for (var i = 0; i < numItemsToInstall; ++i) {
71     var installItem = document.createElement("installitem");
72     itemList.appendChild(installItem);
74     installItem.name = this._param.GetString(i);
75     installItem.url = this._param.GetString(++i);
76     var icon = this._param.GetString(++i);
77     if (icon != "")
78       installItem.icon = icon;
79     var cert = this._param.GetString(++i);
80     if (cert)
81       installItem.cert = bundle.getFormattedString("signed", [cert]);
82     else
83       installItem.cert = bundle.getString("unverified");
84     installItem.signed = cert ? "true" : "false";
85   }
86   
87   var introString = bundle.getString("itemWarnIntroSingle");
88   if (numItemsToInstall > 4)
89     introString = bundle.getFormattedString("itemWarnIntroMultiple", [numItemsToInstall / 4]);
90   if (this._param.objects && this._param.objects.length)
91     introString = this._param.objects.queryElementAt(0, Components.interfaces.nsISupportsString).data;
92   var textNode = document.createTextNode(introString);
93   var introNode = document.getElementById("itemWarningIntro");
94   while (introNode.hasChildNodes())
95     introNode.removeChild(introNode.firstChild);
96   introNode.appendChild(textNode);
97   
98   var okButton = document.documentElement.getButton("accept");
99   okButton.focus();
101   function okButtonCountdown() {
102     _installCountdown -= 1;
104     if (_installCountdown < 1) {
105       okButton.label = bundle.getString("installButtonLabel");
106       okButton.disabled = false;
107       clearInterval(_installCountdownInterval);
108     }
109     else
110       okButton.label = bundle.getFormattedString("installButtonDisabledLabel", [_installCountdown]);
111   }
113   function myfocus() {
114     // Clear the timeout if it exists so only the last one will be used.
115     if (_timeout)
116       clearTimeout(_timeout);
118     // Use setTimeout since the last focus or blur event to fire is the one we
119     // want
120     _timeout = setTimeout(setWidgetsAfterFocus, 0);
121   }
123   function setWidgetsAfterFocus() {
124     if (_focused)
125       return;
127     _installCountdown = _installCountdownLength;
128     _installCountdownInterval = setInterval(okButtonCountdown, 500);
129     okButton.label = bundle.getFormattedString("installButtonDisabledLabel", [_installCountdown]);
130     _focused = true;
131   }
133   function myblur() {
134     // Clear the timeout if it exists so only the last one will be used.
135     if (_timeout)
136       clearTimeout(_timeout);
138     // Use setTimeout since the last focus or blur event to fire is the one we
139     // want
140     _timeout = setTimeout(setWidgetsAfterBlur, 0);
141   }
143   function setWidgetsAfterBlur() {
144     if (!_focused)
145       return;
147     // Set _installCountdown to the inital value set in setWidgetsAfterFocus
148     // plus 1 so when the window is focused there is immediate ui feedback.
149     _installCountdown = _installCountdownLength + 1;
150     okButton.label = bundle.getFormattedString("installButtonDisabledLabel", [_installCountdown]);
151     okButton.disabled = true;
152     clearInterval(_installCountdownInterval);
153     _focused = false;
154   }
156   function myUnload() {
157     document.removeEventListener("focus", myfocus, true);
158     document.removeEventListener("blur", myblur, true);
159     window.removeEventListener("unload", myUnload, false);
160   }
162   if (_installCountdownLength > 0) {
163     document.addEventListener("focus", myfocus, true);
164     document.addEventListener("blur", myblur, true);
165     window.addEventListener("unload", myUnload, false);
167     okButton.disabled = true;
168     setWidgetsAfterFocus();
169   }
170   else
171     okButton.label = bundle.getString("installButtonLabel");
174 XPInstallConfirm.onOK = function ()
176   this._param.SetInt(0, 0);
177   return true;
180 XPInstallConfirm.onCancel = function ()
182   this._param.SetInt(0, 1);
183   return true;