Here is most of my background.js code
var DataProcessor;
DataProcessor = (function() { DataProcessor.prototype.coursesHolder = {};
function DataProcessor() {
chrome.runtime.onMessage.addListener((function(_this) {
return function(request, sender, sendResponse) {
var _base, _name;
if (request) {
console.log(request);
switch (request.type) {
case "showPageAction":
(_base = _this.coursesHolder)[_name = request.courseName] || (_base[_name] = {
courseName: request.courseName,
courseTitle: request.courseTitle
});
chrome.pageAction.show(sender.tab.id);
break;
case "getCourse":
sendResponse(_this.coursesHolder[request.courseName]);
break;
case "getAdditional":
chrome.storage.local.get(request.courseName, function(datum) {
return sendResponse({
additional: datum[request.courseName].points.additional
});
});
break;
case "storeAdditional":
_this.storeAdditional(request.additional, request.courseName);
break;
case "removeAdditional":
_this.removeAdditional(request.index, request.courseName);
break;
case "updateCalculated":
_this.updateCalculated(request.data, request.pointsType, request.courseName);
break;
case "calculatePoints":
sendResponse(_this.calculatePoints(request.courseName));
break;
default:
return sendResponse({
error: 'Unidentified Exception'
});
}
}
};
})(this));
}
It is the part which causes error. Actually, It is compiled from coffee script code.
The tricky part is about getAdditional
branch of the flow. if I would have sendResponse before the storage access – it works as expected. Storage itself returns results predicted. But in combination – sendResponse inside callback to storage.get – nothing happens at all. No errors, just like sendResponse is not called at all!
Coffee Script sources:
class DataProcessor
coursesHolder: {}
constructor: ->
chrome.runtime.onMessage.addListener (request, sender, sendResponse) =>
if request
console.log request
switch request.type
when "showPageAction"
@coursesHolder[request.courseName] ||=
courseName: request.courseName
courseTitle: request.courseTitle
chrome.pageAction.show(sender.tab.id)
break
when "getCourse"
sendResponse @coursesHolder[request.courseName]
break
when "getAdditional"
chrome.storage.local.get request.courseName, (datum) =>
sendResponse
additional: datum[request.courseName].points.additional
break
when "storeAdditional"
@storeAdditional(request.additional, request.courseName)
break
when "removeAdditional"
@removeAdditional(request.index, request.courseName)
break
when "updateCalculated"
@updateCalculated(request.data, request.pointsType, request.courseName)
break
when "calculatePoints"
sendResponse @calculatePoints(request.courseName)
break
else
sendResponse
error: 'Unidentified Exception'
The message is sent as following:
chrome.runtime.sendMessage
type: "getAdditional"
courseName: @courseName
, (response) =>
console.log response
if response.additional
If anyone have any idea on how to get this callback stack work as expected, please help.