blob: b0a2ed786eae8f69d2bc776d8164ee4914fa798b [file] [log] [blame]
// Allows a document to exercise the Budget API within a service worker by sending commands.
self.addEventListener('message', function(workerEvent) {
port = workerEvent.data;
// Listen to incoming commands on the message port.
port.onmessage = function(event) {
if (typeof event.data != 'object' || !event.data.command)
return;
var options = event.data.options || {};
switch (event.data.command) {
case 'getCost':
navigator.budget.getCost('silent-push').then(function(cost) {
port.postMessage({
command: event.data.command,
success: true,
cost: cost });
}).catch(makeErrorHandler(event.data.command));
break;
case 'getCostInvalidType':
navigator.budget.getCost('frobinator').then(function(cost) {
port.postMessage({
command: event.data.command,
success: true,
cost: cost });
}).catch(makeErrorHandler(event.data.command));
break;
case 'getBudget':
navigator.budget.getBudget().then(budget => {
port.postMessage({
command: event.data.command,
success: true,
budgetAt: budget[0].budgetAt,
time: budget[0].time });
}).catch(makeErrorHandler(event.data.command));
break;
default:
port.postMessage({
command: 'error',
errorMessage: 'Invalid command: ' + event.data.command });
break;
}
};
// Notify the controller that the worker is now available.
port.postMessage('ready');
});
function makeErrorHandler(command) {
return function(error) {
var errorMessage = error ? error.message : 'unknown error';
port.postMessage({
command: command,
success: false,
errorMessage: errorMessage });
};
}