Add "create account" functionality to settings, bug 391425. p=ben_h, r=zach
authorzach@zachlipton.com
Wed, 22 Aug 2007 21:33:59 -0700
changeset 5192 761b057d6ac71d6d4bc224cc9e33727dc1a41217
parent 5191 effabb066d6091695d35a567f1ae29d28881d15a
child 5193 efc2dff0ae9aaa55ac0ac454e0e36452dd2834cb
push idunknown
push userunknown
push dateunknown
reviewerszach
bugs391425
milestone1.9a8pre
Add "create account" functionality to settings, bug 391425. p=ben_h, r=zach
testing/extensions/community/chrome/content/accountcreate.js
testing/extensions/community/chrome/content/accountcreate.xul
testing/extensions/community/chrome/content/litmus.js
testing/extensions/community/chrome/content/settings.js
new file mode 100644
--- /dev/null
+++ b/testing/extensions/community/chrome/content/accountcreate.js
@@ -0,0 +1,108 @@
+<!-- -*- Mode: HTML -*- 
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is the Mozilla Community QA Extension
+#
+# The Initial Developer of the Original Code is Zach Lipton.
+# Portions created by the Initial Developer are Copyright (C) 2006
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#   Ben Hsieh <ben.hsieh@gmail.com>
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the LGPL or the GPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK ***** -->
+
+var accountCreate = {
+    oldPassword: null,    //TODO: is this secure?
+    oldUsername: null,
+    updateFunction : null,
+	loadSetup : function() {
+		document.getElementById('qa-setup-createaccount-iframe').src = 
+		litmus.baseURL+'extension.cgi?createAccount=1';
+        accountCreate.updateFunction = window.arguments[0];
+        
+        accountCreate.oldPassword = qaPref.litmus.getPassword();
+        accountCreate.oldUsername = qaPref.litmus.getUsername();
+	},
+    validateAccount : function() {
+			// we're creating a new account, so get the uname and passwd 
+			// from the account created page:
+			var page = document.getElementById('qa-setup-createaccount-iframe').
+						contentDocument;
+			if (!page) {
+				alert("create account page is missing");
+				return false;
+			}
+			if (page.wrappedJSObject == null)
+				page.wrappedJSObject = page;
+			if (page.forms[0] && page.forms[0].wrappedJSObject == null)
+				page.forms[0].wrappedJSObject = page.forms[0];
+			
+			if (page.location == litmus.baseURL+'extension.cgi?createAccount=1'
+			    && qaSetup.didSubmitForm==0) {
+				page.forms[0].wrappedJSObject.submit();
+				qaSetup.didSubmitForm = 1;
+				setTimeout("qaSetup.validateAccount()", 5000);
+				return false;
+			}
+			if (qaSetup.didSubmitForm == 1 && ! page.forms || 
+			   ! page.forms[0].wrappedJSObject || 
+			   ! page.forms[0].wrappedJSObject.email && 
+			   ! page.forms[0].wrappedJSObject.email.value)  
+			   		{qaSetup.didSubmitForm = 2;
+			   		setTimeout("qaSetup.validateAccount()", 4000);
+			   		return false;}
+			var e = '';
+			var p = '';
+			if (page.forms && page.forms[0].wrappedJSObject && 
+			    page.forms[0].wrappedJSObject.email && 
+				page.forms[0].wrappedJSObject.email.value) 
+				{ e=page.forms[0].wrappedJSObject.email.value }
+			if (page.forms && page.forms[0].wrappedJSObject && 
+			    page.forms[0].wrappedJSObject.password && 
+				page.forms[0].wrappedJSObject.password.value) 
+				{ p=page.forms[0].wrappedJSObject.password.value }
+        // e is account, p is password
+		
+		var uname = e;
+		var passwd = p;
+		
+
+        if (e == '' || p == '') {
+            alert("No username or password has been registered.");
+            return false;    //we need better error handling.
+        }
+        qaPref.litmus.setPassword(uname, passwd);
+        accountCreate.updateFunction();
+                
+        // TODO: ideally we would validate against litmus, but...
+		return true;
+	},
+    
+    handleCancel : function() {
+        qaPref.litmus.setPassword(oldUsername, oldPassword);
+    }
+}
new file mode 100644
--- /dev/null
+++ b/testing/extensions/community/chrome/content/accountcreate.xul
@@ -0,0 +1,69 @@
+<?xml version="1.0"?><!-- -*- Mode: HTML -*- 
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is the Mozilla Community QA Extension
+#
+# The Initial Developer of the Original Code is Zach Lipton.
+# Portions created by the Initial Developer are Copyright (C) 2006
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#   Ben Hsieh <ben.hsieh@gmail.com>
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the LGPL or the GPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK ***** -->
+<!DOCTYPE wizard PUBLIC "-//MOZILLA//DTD XUL V1.0//EN" "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://qa/skin/" type="text/css"?>
+
+<dialog id="account-setup"
+        title="Account Creation"
+        class="color-dialog"
+        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        xmlns:html="http://www.w3.org/1999/xhtml"
+        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+        width="800px"
+        height="400px"
+        onload="accountCreate.loadSetup();"
+        ondialogaccept="return accountCreate.validateAccount();"
+        ondialogcancel=""
+        >
+<script type="application/x-javascript" src="chrome://qa/content/MochiKit/MochiKit.js" />
+<script type="application/x-javascript" src="chrome://qa/content/prefs.js" />
+<script type="application/x-javascript" src="chrome://qa/content/common.js" />
+<script type="application/x-javascript" src="chrome://qa/content/litmus.js" />
+<script type="application/x-javascript" src="chrome://qa/content/settings.js" />
+<script type="application/x-javascript" src="chrome://qa/content/accountcreate.js" />
+
+<stringbundleset id="stringbundleset">
+  <stringbundle id="bundle_qa" src="chrome://qa/locale/qa.properties" />
+</stringbundleset>
+
+    <vbox id="qa-setup-accountno" style="display: none" width="0px" height="0px" />
+    <html:iframe id="qa-setup-createaccount-iframe"
+        height="280"/>
+    
+</dialog>
--- a/testing/extensions/community/chrome/content/litmus.js
+++ b/testing/extensions/community/chrome/content/litmus.js
@@ -144,19 +144,16 @@
 	validateLogin : function(uname, passwd, callback) {
 		var qs = queryString({ 
 		    validate_login: 1,
 	        username: uname,
 	        password: passwd
 	    });
 	    qaTools.httpPostRequest(litmus.baseURL+'json.cgi', qs, callback);
 	},
-	createAccount : function() {
-	    alert("XXX: not implemented");
-	},
 	postResultXML : function(xml, callback, errback) {
 		var qs = queryString({ data: xml});
 		var fake_callback = function(resp) {
 			// only call callback() if we really had a sucuess. XML 
 			// processing errors should result in a call to errback()
 			if ((/^ok/i).exec(resp.responseText)) {
 				callback(resp);
 			} else {
--- a/testing/extensions/community/chrome/content/settings.js
+++ b/testing/extensions/community/chrome/content/settings.js
@@ -38,17 +38,17 @@
 var qaPrefsWindow = {
 	lastSelectedTab : null,
 	
 	onSwitchTab : function() {
 		var newSelection = $('qa_tabrow').selectedItem;
 		
 		// user is switching to the prefs tab:
 		if ($('qa_tabrow').selectedItem == $('qa-tabbar-prefs')) {
-			qaPrefsWindow.loadPrefsWindow();
+            qaPrefsWindow.loadPrefsWindow();
 		}
 		
 		// user is switching away from the prefs tab:
 		if (qaPrefsWindow.lastSelectedTab != null && 
 				qaPrefsWindow.lastSelectedTab == $('qa-tabbar-prefs')) {
 			qaPrefsWindow.savePrefsWindow();
 		}
 		
@@ -111,18 +111,25 @@ var qaPrefsWindow = {
 			} else {
 				qaPref.litmus.setPassword(uname, passwd);
 				return true;
 			}
 		}
 		litmus.validateLogin(uname, passwd, callback);
 		return false; // not ready to close yet
 	},
+	loadUsernameAndPassword : function() {
+		var uname = document.getElementById('qa-preferences-litmus-username');
+		var passwd = document.getElementById('qa-preferences-litmus-password');
+		
+		uname.value = qaPref.litmus.getUsername();
+		passwd.value = qaPref.litmus.getPassword();
+	},
 	createAccount : function() {
-		litmus.createAccount();
+		window.openDialog("chrome://qa/content/accountcreate.xul", "_blank", "chrome,all,dialog=yes", qaPrefsWindow.loadUsernameAndPassword);
 	},
 };
 
 
 var qaSetup = {
 	didSubmitForm : 0,
 	
 	hideAccountSettings : function() {
@@ -138,16 +145,17 @@ var qaSetup = {
 		passwd.value = qaPref.litmus.getPassword() || '';
 		if (qaPref.litmus.getUsername()) { 
 			document.getElementById("qa-setup-account-haveaccount").selectedIndex=1;
 			document.getElementById('qa-setup-accountyes').style.display = '';
 		}
 		document.getElementById('qa-setup-createaccount-iframe').src = 
 			litmus.baseURL+'extension.cgi?createAccount=1';
 	},
+	
 	accountSetting : function(yesno) {
 		var accountyes = document.getElementById('qa-setup-accountyes');
 		var accountno = document.getElementById('qa-setup-accountno');
 		qaSetup.hideAccountSettings();
 		if (yesno == '0') {
 			accountno.style.display = '';
 		} else {
 			accountyes.style.display = '';
@@ -257,17 +265,16 @@ document.getElementById("bundle_qa").get
 		
 		// only set prefs for things which differ from the automatically 
 		// detected sysconfig for forward-compatibility
 		if (! sysconfig.platform == $('qa-setup-platform').selectedItem.label) {
 			qaPref.setPref(qaPref.prefBase+'.sysconfig.platform', 
 						$('qa-setup-platform').selectedItem.label, 'char');
 		}
 		if (! sysconfig.opsys == $('qa-setup-opsys').selectedItem.label) {
-			alert("setting pref");
 			qaPref.setPref(qaPref.prefBase+'.sysconfig.opsys', 
 						$('qa-setup-opsys').selectedItem.label, 'char');
 		}
 		return true;
 	},
 	
 	finish : function() {
 		qaPref.setPref(qaPref.prefBase+'.isFirstTime', false, 'bool');