Bug 389131 - "Reporter should move away from SOAP (Reporter fails to send reports on trunk)" [p=raccettura r=dao r=mconnor a=blocking1.9+ for M9]

git-svn-id: svn://10.0.0.236/trunk@238365 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
reed%reedloden.com
2007-10-31 02:26:48 +00:00
parent e52173fac5
commit 4764267e4c
4 changed files with 188 additions and 142 deletions

View File

@@ -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.

View File

@@ -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/");

View File

@@ -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

View File

@@ -47,10 +47,6 @@
color: -moz-FieldText;
}
.hide {
display: none;
}
wizard[description=""] .wizard-header-description {
display: none;
}