diff --git a/mozilla/extensions/reporter/locales/en-US/chrome/reportWizard.properties b/mozilla/extensions/reporter/locales/en-US/chrome/reportWizard.properties index e7c793be0df..afc2eb5f0ac 100644 --- a/mozilla/extensions/reporter/locales/en-US/chrome/reportWizard.properties +++ b/mozilla/extensions/reporter/locales/en-US/chrome/reportWizard.properties @@ -8,3 +8,5 @@ finishError=Error Sending Report successfullyCreatedReport=Successfully Transmitted Report failedCreatingReport=There was an error creating the report, and so no information was sent to mozilla.org +defaultError=Unable to make a successful connection to the server. +invalidResponse=An invalid response was received from the server. Please try again later. diff --git a/mozilla/extensions/reporter/resources/content/prefs/reporter.js b/mozilla/extensions/reporter/resources/content/prefs/reporter.js index 0e333d726de..f11a0de6fa5 100644 --- a/mozilla/extensions/reporter/resources/content/prefs/reporter.js +++ b/mozilla/extensions/reporter/resources/content/prefs/reporter.js @@ -1,4 +1,3 @@ -// Make sure there are trailing slashes! -pref("extensions.reporter.privacyURL", "http://reporter.mozilla.org/privacy/"); -pref("extensions.reporter.serviceURL", "http://reporter.mozilla.org/service/"); - +// Make sure there are trailing slashes! +pref("extensions.reporter.privacyURL", "http://reporter.mozilla.org/privacy/"); +pref("extensions.reporter.serviceURL", "http://reporter.mozilla.org/service/0.3/"); diff --git a/mozilla/extensions/reporter/resources/content/reporter/reportWizard.js b/mozilla/extensions/reporter/resources/content/reporter/reportWizard.js index 3ff80f1640c..388bd7162cf 100644 --- a/mozilla/extensions/reporter/resources/content/reporter/reportWizard.js +++ b/mozilla/extensions/reporter/resources/content/reporter/reportWizard.js @@ -43,17 +43,23 @@ * or a reporter.mozilla.org Admin! *******************************************************/ -const gURL = window.arguments[0]; -const gLanguage = window.navigator.language; -const gRMOvers = "0.2"; // Do not touch without contacting reporter admin! +const gParamLanguage = window.navigator.language; +const gRMOvers = "0.3"; // Do not touch without contacting reporter admin! +const gParamURL = window.arguments[0]; +const gParamUserAgent = navigator.userAgent; +const gParamOSCPU = navigator.oscpu; +const gParamPlatform = navigator.platform; // Globals -var gReportID; -var gSysID; -var gFaultCode; -var gFaultMessage; -var gSOAPerror = false; +var gParamDescription; +var gParamProblemType; +var gParamBehindLogin; +var gParamEmail; +var gParamBuildConfig; +var gParamGecko; + var gPrefBranch; +var gStatusIndicator; function getReporterPrefBranch() { if (!gPrefBranch) { @@ -119,7 +125,7 @@ function initForm() { var reportWizard = document.getElementById('reportWizard'); reportWizard.canRewind = false; - document.getElementById('url').value = gURL; + document.getElementById('url').value = gParamURL; // Change next button to "submit report" reportWizard.getButton('next').label = strbundle.getString("submitReport"); @@ -144,31 +150,51 @@ function validateForm() { document.getElementById('reportWizard').canAdvance = canAdvance; } -function registerSysID(){ - var param = new Array();; - param[0] = new SOAPParameter(gLanguage, "language"); +function registerSysID() { + var param = { + 'method': 'submitRegister', + 'language': gParamLanguage + }; - // get sysID - callReporter("register", param, setValSysID); + // go get sysID + sendReporterServerData(param, onRegisterSysIDLoad); +} - // saving - if (gSysID != undefined){ - var prefs = getReporterPrefBranch(); - prefs.setCharPref("sysid", gSysID); - return gSysID; +function onRegisterSysIDLoad(req) { + if (req.status == 200) { + var paramSysID = req.responseXML.getElementsByTagName('result').item(0); + + // saving + if (paramSysID) { + var prefs = getReporterPrefBranch(); + prefs.setCharPref("sysid", paramSysID.textContent); + + // Finally send report + sendReport(); + return; + } + + // Invalid Response Error + var strbundle = document.getElementById("strings"); + showError(strbundle.getString("invalidResponse")); + + return; } - return ""; + + // On error + var errorStr = extractError(req); + showError(errorStr); } -function getSysID() { - var sysId = getCharPref("sysid", ""); - if (sysId == "") - sysId = registerSysID(); - - return sysId; -} function sendReport() { + // Check for a sysid, if we don't have one, get one it will call sendReport on success. + var sysId = getCharPref("sysid", ""); + if (sysId == ""){ + registerSysID(); + return; + } + // we control the user path from here. var reportWizard = document.getElementById('reportWizard'); @@ -179,90 +205,158 @@ function sendReport() { var strbundle=document.getElementById("strings"); var statusDescription = document.getElementById('sendReportProgressDescription'); - var statusIndicator = document.getElementById('sendReportProgressIndicator'); + gStatusIndicator = document.getElementById('sendReportProgressIndicator'); // Data from form we need - var descriptionStri = document.getElementById('description').value; - var problemTypeStri = document.getElementById('problem_type').value; - var behindLoginStri = document.getElementById('behind_login').checked; - var emailStri = document.getElementById('email').value; + gParamDescription = document.getElementById('description').value; + gParamProblemType = document.getElementById('problem_type').value; + gParamBehindLogin = document.getElementById('behind_login').checked; + gParamEmail = document.getElementById('email').value; - var buildConfig = getBuildConfig(); - var userAgent = navigator.userAgent; + gParamBuildConfig = getBuildConfig(); + gParamGecko = getGecko(); // SOAP params - var param = new Array(); - param[0] = new SOAPParameter(gRMOvers, "rmoVers"); - param[1] = new SOAPParameter(gURL, "url"); - param[2] = new SOAPParameter(problemTypeStri, "problem_type"); - param[3] = new SOAPParameter(descriptionStri, "description"); - param[4] = new SOAPParameter(behindLoginStri, "behind_login"); - param[5] = new SOAPParameter(navigator.platform, "platform"); - param[6] = new SOAPParameter(navigator.oscpu, "oscpu"); - param[7] = new SOAPParameter(getGecko(), "gecko"); - param[8] = new SOAPParameter(getProduct(), "product"); - param[9] = new SOAPParameter(navigator.userAgent, "useragent"); - param[10] = new SOAPParameter(buildConfig, "buildconfig"); - param[11] = new SOAPParameter(gLanguage, "language"); - param[12] = new SOAPParameter(emailStri, "email"); - param[13] = new SOAPParameter(getSysID(), "sysid"); + var param = { + 'method': 'submitReport', + 'rmoVers': gRMOvers, + 'url': gParamURL, + 'problem_type': gParamProblemType, + 'description': gParamDescription, + 'behind_login': gParamBehindLogin, + 'platform': gParamPlatform, + 'oscpu': gParamOSCPU, + 'gecko': gParamGecko, + 'product': getProduct(), + 'useragent': gParamUserAgent, + 'buildconfig': gParamBuildConfig, + 'language': gParamLanguage, + 'email': gParamEmail, + 'sysid': sysId + }; - statusIndicator.setAttribute("value", "5%"); - statusDescription.setAttribute("value", strbundle.getString("sendingReport")); - callReporter("submitReport", param, setValReportID); + gStatusIndicator.value = "5%"; + statusDescription.value = strbundle.getString("sendingReport"); + + sendReporterServerData(param, onSendReportDataLoad); +} + +function onSendReportDataProgress(e) { + gStatusIndicator.value = (e.position / e.totalSize)*100; +} + +function sendReporterServerData(params, callback) { + var serviceURL = getCharPref("serviceURL", "http://reporter.mozilla.org/service/0.3/"); + + params = serializeParams(params); + + var request = new XMLHttpRequest(); + request.onprogress = onSendReportDataProgress; + request.open("POST", serviceURL, true); + + request.onreadystatechange = function () { + if (request.readyState == 4) + callback(request); + }; + + request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + request.setRequestHeader("Content-length", params.length); + request.setRequestHeader("Connection", "close"); + request.send(params); +} + +function serializeParams(params) { + var str = ''; + for (var key in params) { + str += key + '=' + encodeURIComponent(params[key]) + '&'; + } + return str.substr(0, str.length-1); +} + +function onSendReportDataLoad(req) { + if (req.status != 200) { + var errorStr = extractError(req); + showError(errorStr); + return; + } + + var reportWizard = document.getElementById('reportWizard'); var finishSummary = document.getElementById('finishSummary'); var finishExtendedFailed = document.getElementById('finishExtendedFailed'); var finishExtendedSuccess = document.getElementById('finishExtendedSuccess'); - if (!gSOAPerror) { - // If successful - finishExtendedFailed.setAttribute("class", "hide"); + var statusDescription = document.getElementById('sendReportProgressDescription'); - statusIndicator.setAttribute("value", "95%"); - statusDescription.setAttribute("value", strbundle.getString("reportSent")); + var strbundle = document.getElementById("strings"); - reportWizard.canAdvance = true; - statusIndicator.setAttribute("value", "100%"); + // If successful + finishExtendedFailed.hidden = true; - // Send to the finish page - reportWizard.advance(); + statusDescription.value = strbundle.getString("reportSent"); - // report ID returned from the web service - finishSummary.setAttribute("value", strbundle.getString("successfullyCreatedReport") + " " + gReportID); + reportWizard.canAdvance = true; + gStatusIndicator.value = "100%"; - finishExtendedDoc = finishExtendedSuccess.contentDocument; - finishExtendedDoc.getElementById('urlStri').textContent = gURL; - finishExtendedDoc.getElementById('problemTypeStri').textContent = document.getElementById('problem_type').label; - finishExtendedDoc.getElementById('descriptionStri').textContent = descriptionStri; - finishExtendedDoc.getElementById('platformStri').textContent = navigator.platform; - finishExtendedDoc.getElementById('oscpuStri').textContent = navigator.oscpu; - finishExtendedDoc.getElementById('productStri').textContent = getProduct(); - finishExtendedDoc.getElementById('geckoStri').textContent = getGecko(); - finishExtendedDoc.getElementById('buildConfigStri').textContent = buildConfig; - finishExtendedDoc.getElementById('userAgentStri').textContent = navigator.userAgent; - finishExtendedDoc.getElementById('langStri').textContent = gLanguage; - finishExtendedDoc.getElementById('emailStri').textContent = emailStri; + // Send to the finish page + reportWizard.advance(); - reportWizard.canRewind = false; + // report ID returned from the web service + var reportId = req.responseXML.getElementsByTagName('reportId').item(0).firstChild.data; + finishSummary.value = strbundle.getString("successfullyCreatedReport") + " " + reportId; - } else { - // If there was an error from the server - finishExtendedSuccess.setAttribute("class", "hide"); + finishExtendedDoc = finishExtendedSuccess.contentDocument; + finishExtendedDoc.getElementById('urlStri').textContent = gParamURL; + finishExtendedDoc.getElementById('problemTypeStri').textContent = document.getElementById('problem_type').label; + finishExtendedDoc.getElementById('descriptionStri').textContent = gParamDescription; + finishExtendedDoc.getElementById('platformStri').textContent = gParamPlatform; + finishExtendedDoc.getElementById('oscpuStri').textContent = gParamOSCPU; + finishExtendedDoc.getElementById('productStri').textContent = getProduct(); + finishExtendedDoc.getElementById('geckoStri').textContent = gParamGecko; + finishExtendedDoc.getElementById('buildConfigStri').textContent = gParamBuildConfig; + finishExtendedDoc.getElementById('userAgentStri').textContent = gParamUserAgent; + finishExtendedDoc.getElementById('langStri').textContent = gParamLanguage; + finishExtendedDoc.getElementById('emailStri').textContent = gParamEmail; - // Change the label on the page so users know we have an error - var finishPage = document.getElementById('finish'); - finishPage.setAttribute("label",strbundle.getString("finishError")); + reportWizard.canRewind = false; - reportWizard.canAdvance = true; - reportWizard.advance(); + document.getElementById('finishExtendedFrame').collapsed = true; + reportWizard.getButton("cancel").disabled = true; + return; +} - finishSummary.setAttribute("value",strbundle.getString("failedCreatingReport")); - - finishExtendedDoc = finishExtendedFailed.contentDocument; - //finishExtendedDoc.getElementById('faultCode').textContent = gFaultCode; - finishExtendedDoc.getElementById('faultMessage').textContent = gFaultMessage; +function extractError(req){ + var error = req.responseXML.getElementsByTagName('errorString').item(0) + if (error) { + return error.textContent; } + // Default error + var strbundle = document.getElementById("strings"); + return strbundle.getString("defaultError"); +} + +function showError(errorStr){ + var strbundle = document.getElementById("strings"); + var finishSummary = document.getElementById('finishSummary'); + var finishExtendedSuccess = document.getElementById('finishExtendedSuccess'); + var finishExtendedFailed = document.getElementById('finishExtendedFailed'); + + // If there was an error from the server + finishExtendedSuccess.hidden = true; + + // Change the label on the page so users know we have an error + var finishPage = document.getElementById('finish'); + finishPage.setAttribute("label",strbundle.getString("finishError")); + + var reportWizard = document.getElementById('reportWizard'); + reportWizard.canAdvance = true; + reportWizard.advance(); + + finishSummary.value = strbundle.getString("failedCreatingReport"); + + finishExtendedDoc = finishExtendedFailed.contentDocument; + finishExtendedDoc.getElementById('faultMessage').textContent = errorStr; + document.getElementById('finishExtendedFrame').collapsed = true; reportWizard.getButton("cancel").disabled = true; } @@ -305,51 +399,6 @@ function getBuildConfig() { } } -/* NEW WEB SERVICE MODULE */ -/* Based on Apple's example implementation of SOAP at: developer.apple.com/internet/webservices/mozgoogle_source.html */ -function callReporter(method, params, callback) { - var serviceURL = getCharPref("serviceURL", "http://reporter.mozilla.org/service/"); - - var soapCall = new SOAPCall(); - soapCall.transportURI = serviceURL; - soapCall.encode(0, method, "urn:MozillaReporter", 0, null, params.length, params); - - var response = soapCall.invoke(); - var error = handleSOAPResponse(response); - if (!error) - callback(response); -} - -function handleSOAPResponse (response) { - var fault = response.fault; - if (fault != null) { - gSOAPerror = true; - gFaultCode = fault.faultCode; - gFaultMessage = fault.faultString; - return true; - } - - return false; -} - -function setValSysID(results) { - if (results) { - var params = results.getParameters(false,{}); - for (var i = 0; i < params.length; i++){ - gSysID = params[i].value; - } - } -} - -function setValReportID(results) { - if (results) { - var params = results.getParameters(false,{}); - for (var i = 0; i < params.length; i++){ - gReportID = params[i].value; - } - } -} - function getProduct() { try { // Works on Firefox 1.0+ and Future SeaMonkey's diff --git a/mozilla/extensions/reporter/resources/skin/classic/reporter/reportWizard.css b/mozilla/extensions/reporter/resources/skin/classic/reporter/reportWizard.css index 1e43faf7c3d..a009e41394e 100644 --- a/mozilla/extensions/reporter/resources/skin/classic/reporter/reportWizard.css +++ b/mozilla/extensions/reporter/resources/skin/classic/reporter/reportWizard.css @@ -47,10 +47,6 @@ color: -moz-FieldText; } -.hide { - display: none; -} - wizard[description=""] .wizard-header-description { display: none; }