Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Merge pull request #31004 from lissyx/bug1184476
Browse files Browse the repository at this point in the history
Bug 1184476 - Handle NotFoundError from DOMError r=daleharvey
  • Loading branch information
lissyx committed Jul 17, 2015
2 parents 8c00987 + 773baea commit 522f9ae
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 17 deletions.
45 changes: 29 additions & 16 deletions apps/system/js/devtools/logshake.js
Expand Up @@ -112,7 +112,7 @@
var error = event ? event.detail.error : '';
var errorMsg = this.formatError(error);
this._notify('logsSaveError', errorMsg,
this.showErrorMessage.bind(this, error),
this.showErrorMessage.bind('logsSaveError', this, error),
event.detail);
this._shakeId = null;
},
Expand Down Expand Up @@ -169,9 +169,14 @@
}
}

// Only report error one time.
var inError = false;
function onError() {
/* jshint validthis: true */
self.handleCaptureLogsError({detail: {error: this.error}});
if (!inError) {
inError = true;
/* jshint validthis: true */
self.showErrorMessage('logsShareError', this.error);
}
}

for (var logPath of logPaths) {
Expand All @@ -182,8 +187,9 @@
},

ERRNO_TO_MSG: {
0: 'logsGenericError',
30: 'logsSDCardMaybeShared' // errno: filesystem ro-mounted
0: 'logsGenericError',
30: 'logsSDCardMaybeShared', // errno: filesystem ro-mounted
'NotFoundError': 'logsNotFoundError'
},

formatError: function(error) {
Expand All @@ -196,12 +202,16 @@
return navigator.mozL10n.get('logsOperationFailed',
{ operation: error.operation });
}

if ('name' in error && error.name === 'NotFoundError') {
return navigator.mozL10n.get('logsNotFoundError');
}
}

return '';
},

showErrorMessage: function(error, notif) {
showErrorMessage: function(title, error, notif) {
if (notif) {
notif.close();
}
Expand All @@ -216,20 +226,23 @@
return;
}

var errorKey;
// Small heuristic for some frequent unix error cases
if ('unixErrno' in error) {
var errno = error.unixErrno;
debug('errno: ' + errno);
errorKey = error.unixErrno;
} else if ('name' in error) {
errorKey = error.name;
}

// Gracefully fallback to a generic error messages if we don't know
// this errno code.
if (!this.ERRNO_TO_MSG[errno]) {
errno = 0;
}
debug('errorKey: ' + errorKey);

ModalDialog.alert('logsSaveError',
this.ERRNO_TO_MSG[errno], { title: 'ok' });
// Gracefully fallback to a generic error messages if we don't know
// this errno code.
if (!this.ERRNO_TO_MSG[errorKey]) {
errorKey = 0;
}

ModalDialog.alert(title, this.ERRNO_TO_MSG[errorKey], { title: 'ok' });
},

_notify: function(titleId, body, onclick, dataPayload) {
Expand Down Expand Up @@ -261,7 +274,7 @@
debug('Message payload: ' + message.data.logshakePayload);
var payload = message.data.logshakePayload;
if ('error' in payload) {
this.showErrorMessage(payload.error);
this.showErrorMessage('logsSaveError', payload.error);
} else if ('logPaths' in payload) {
this.triggerShareLogs(payload.logPaths, message);
} else {
Expand Down
2 changes: 2 additions & 0 deletions apps/system/locales/system.en-US.properties
Expand Up @@ -250,10 +250,12 @@ screenshotSDCardLow = Not enough space on memory card
logsSavedHeader = Device logs saved
logsSavedBody = Tap to share logs
logsSaveError = Error while saving logs
logsShareError = Error while sharing logs
logsSaving = Capturing logs…
logsOperationFailed = Operation {{operation}} failed.
logsGenericError = Unexpected error occurred.
logsSDCardMaybeShared = Make sure your SD card is not shared with your computer.
logsNotFoundError = At least one log file could not be read from the filesystem.

# lock screen
emergency-call-button=Emergency Call
Expand Down
30 changes: 29 additions & 1 deletion apps/system/test/unit/logshake_test.js
@@ -1,5 +1,7 @@
'use strict';

/* global LogShake,
DOMError,
MockDOMRequest,
MockModalDialog,
MockMozActivity,
Expand Down Expand Up @@ -335,6 +337,7 @@ suite('system/LogShake', function() {
suite('Capture error handling >', function() {
var notificationSpy, errorMessage,
errorUnixSharedSD, errorUnixGeneric,
errorNotFoundError, errorNotFoundErrorExpectedBody,
errorUnixExpectedBody;

function sendError(e) {
Expand Down Expand Up @@ -366,7 +369,10 @@ suite('system/LogShake', function() {
operation: 'makeDir',
unixErrno: 0
};
errorUnixExpectedBody = 'logsOperationFailed{"operation":"makeDir"}';
errorNotFoundError = new DOMError('NotFoundError');
errorUnixExpectedBody =
'logsOperationFailed{"operation":"makeDir"}';
errorNotFoundErrorExpectedBody = 'logsNotFoundError';
});

test('Handling capture-logs-error event with string error', function() {
Expand All @@ -387,6 +393,12 @@ suite('system/LogShake', function() {
notificationAsserts(notificationSpy);
assertBody(errorUnixExpectedBody);
});

test('Handling NotFoundError', function() {
sendError(errorNotFoundError);
notificationAsserts(notificationSpy);
assertBody(errorNotFoundErrorExpectedBody);
});
});

suite('formatError behavior >', function() {
Expand All @@ -404,6 +416,11 @@ suite('system/LogShake', function() {
var msg = logshake.formatError(error);
assert.equal(msg, 'logsOperationFailed{"operation":"makeDir"}');
});

test('formatError() with a NotFoundError', function() {
var msg = logshake.formatError(errorNotFoundError);
assert.equal(msg, 'logsNotFoundError');
});
});

suite('Clicking error notification >', function() {
Expand Down Expand Up @@ -434,6 +451,17 @@ suite('system/LogShake', function() {
{ title: 'ok' }));
sinon.assert.calledOnce(closeSpy);
});

test('NotFoundError DOMError', function() {
sendError(errorNotFoundError);
notification = notificationSpy.firstCall.thisValue;
closeSpy = this.sinon.spy(notification, 'close');
notification.onclick();
assert.isTrue(modalSpy.calledWith('logsShareError',
'logsNotFoundError',
{ title: 'ok' }));
sinon.assert.calledOnce(closeSpy);
});
});
});

Expand Down

0 comments on commit 522f9ae

Please sign in to comment.