Test service worker and shared worker store
This commit is contained in:
@@ -691,103 +691,6 @@ define([
|
||||
LOADING_DRIVE: common.loading.onDriveEvent.fire
|
||||
};
|
||||
|
||||
/*
|
||||
var onMessage = function (cmd, data, cb) {
|
||||
cb = cb || function () {};
|
||||
if (queries[cmd]) {
|
||||
return void queries[cmd](data, cb);
|
||||
} else {
|
||||
console.error("Unhandled command " + cmd);
|
||||
}
|
||||
/*
|
||||
switch (cmd) {
|
||||
case 'REQUEST_LOGIN': {
|
||||
requestLogin();
|
||||
break;
|
||||
}
|
||||
case 'UPDATE_METADATA': {
|
||||
common.changeMetadata();
|
||||
break;
|
||||
}
|
||||
case 'UPDATE_TOKEN': {
|
||||
var localToken = tryParsing(localStorage.getItem(Constants.tokenKey));
|
||||
if (localToken !== data.token) { requestLogin(); }
|
||||
break;
|
||||
}
|
||||
case 'Q_FRIEND_REQUEST': {
|
||||
common.messaging.onFriendRequest.fire(data, cb);
|
||||
break;
|
||||
}
|
||||
case 'EV_FRIEND_COMPLETE': {
|
||||
common.messaging.onFriendComplete.fire(data);
|
||||
break;
|
||||
}
|
||||
// Network
|
||||
case 'NETWORK_DISCONNECT': {
|
||||
common.onNetworkDisconnect.fire(); break;
|
||||
}
|
||||
case 'NETWORK_RECONNECT': {
|
||||
common.onNetworkReconnect.fire(data); break;
|
||||
}
|
||||
// Messenger
|
||||
case 'CONTACTS_MESSAGE': {
|
||||
common.messenger.onMessageEvent.fire(data); break;
|
||||
}
|
||||
case 'CONTACTS_JOIN': {
|
||||
common.messenger.onJoinEvent.fire(data); break;
|
||||
}
|
||||
case 'CONTACTS_LEAVE': {
|
||||
common.messenger.onLeaveEvent.fire(data); break;
|
||||
}
|
||||
case 'CONTACTS_UPDATE': {
|
||||
common.messenger.onUpdateEvent.fire(data); break;
|
||||
}
|
||||
case 'CONTACTS_FRIEND': {
|
||||
common.messenger.onFriendEvent.fire(data); break;
|
||||
}
|
||||
case 'CONTACTS_UNFRIEND': {
|
||||
common.messenger.onUnfriendEvent.fire(data); break;
|
||||
}
|
||||
// Pad
|
||||
case 'PAD_READY': {
|
||||
common.padRpc.onReadyEvent.fire(); break;
|
||||
}
|
||||
case 'PAD_MESSAGE': {
|
||||
common.padRpc.onMessageEvent.fire(data); break;
|
||||
}
|
||||
case 'PAD_JOIN': {
|
||||
common.padRpc.onJoinEvent.fire(data); break;
|
||||
}
|
||||
case 'PAD_LEAVE': {
|
||||
common.padRpc.onLeaveEvent.fire(data); break;
|
||||
}
|
||||
case 'PAD_DISCONNECT': {
|
||||
common.padRpc.onDisconnectEvent.fire(data); break;
|
||||
}
|
||||
case 'PAD_ERROR': {
|
||||
common.padRpc.onErrorEvent.fire(data); break;
|
||||
}
|
||||
// Drive
|
||||
case 'DRIVE_LOG': {
|
||||
common.drive.onLog.fire(data); break;
|
||||
}
|
||||
case 'DRIVE_CHANGE': {
|
||||
common.drive.onChange.fire(data); break;
|
||||
}
|
||||
case 'DRIVE_REMOVE': {
|
||||
common.drive.onRemove.fire(data); break;
|
||||
}
|
||||
// Account deletion
|
||||
case 'DELETE_ACCOUNT': {
|
||||
common.startAccountDeletion(cb); break;
|
||||
}
|
||||
// Loading
|
||||
case 'LOADING_DRIVE': {
|
||||
common.loading.onDriveEvent.fire(data); break;
|
||||
}
|
||||
}
|
||||
};*/
|
||||
|
||||
common.ready = (function () {
|
||||
var env = {};
|
||||
var initialized = false;
|
||||
@@ -849,98 +752,143 @@ define([
|
||||
anonHash: LocalStore.getFSHash(),
|
||||
localToken: tryParsing(localStorage.getItem(Constants.tokenKey)),
|
||||
language: common.getLanguage(),
|
||||
messenger: rdyCfg.messenger,
|
||||
driveEvents: rdyCfg.driveEvents
|
||||
messenger: rdyCfg.messenger, // Boolean
|
||||
driveEvents: rdyCfg.driveEvents // Boolean
|
||||
};
|
||||
if (sessionStorage[Constants.newPadPathKey]) {
|
||||
cfg.initialPath = sessionStorage[Constants.newPadPathKey];
|
||||
delete sessionStorage[Constants.newPadPathKey];
|
||||
}
|
||||
/*AStore.query("CONNECT", cfg, waitFor(function (data) {
|
||||
if (data.error) { throw new Error(data.error); }
|
||||
if (data.state === 'ALREADY_INIT') {
|
||||
data = data.returned;
|
||||
}
|
||||
|
||||
if (data.anonHash && !cfg.userHash) { LocalStore.setFSHash(data.anonHash); }
|
||||
|
||||
/ *if (cfg.userHash && sessionStorage) {
|
||||
// copy User_hash into sessionStorage because cross-domain iframes
|
||||
// on safari replaces localStorage with sessionStorage or something
|
||||
sessionStorage.setItem(Constants.userHashKey, cfg.userHash);
|
||||
}* /
|
||||
|
||||
if (cfg.userHash) {
|
||||
var localToken = tryParsing(localStorage.getItem(Constants.tokenKey));
|
||||
if (localToken === null) {
|
||||
// if that number hasn't been set to localStorage, do so.
|
||||
localStorage.setItem(Constants.tokenKey, data[Constants.tokenKey]);
|
||||
}
|
||||
}
|
||||
|
||||
initFeedback(data.feedback);
|
||||
initialized = true;
|
||||
}));*/
|
||||
var channelIsReady = waitFor();
|
||||
|
||||
var msgEv = Util.mkEvent();
|
||||
var worker = new Worker('/common/outer/webworker.js');
|
||||
worker.onmessage = function (ev) {
|
||||
msgEv.fire(ev);
|
||||
};
|
||||
var postMsg = function (data) {
|
||||
worker.postMessage(data);
|
||||
};
|
||||
Channel.create(msgEv, postMsg, waitFor(function (chan) {
|
||||
console.log('outer ready');
|
||||
Object.keys(queries).forEach(function (q) {
|
||||
chan.on(q, function (data, cb) {
|
||||
try {
|
||||
queries[q](data, cb);
|
||||
} catch (e) {
|
||||
console.error("Error in outer when executing query " + q);
|
||||
console.error(e);
|
||||
console.log(data);
|
||||
var postMsg, worker;
|
||||
Nthen(function (waitFor2) {
|
||||
if (SharedWorker) {
|
||||
worker = new SharedWorker('/common/outer/sharedworker.js');
|
||||
console.log(worker);
|
||||
worker.port.onmessage = function (ev) {
|
||||
if (ev.data === "SW_READY") {
|
||||
return;
|
||||
}
|
||||
msgEv.fire(ev);
|
||||
};
|
||||
postMsg = function (data) {
|
||||
worker.port.postMessage(data);
|
||||
};
|
||||
postMsg('INIT');
|
||||
} else if (false && 'serviceWorker' in navigator) {
|
||||
var initializing = true;
|
||||
var stopWaiting = waitFor2(); // Call this function when we're ready
|
||||
|
||||
postMsg = function (data) {
|
||||
if (worker) { return void worker.postMessage(data); }
|
||||
};
|
||||
|
||||
navigator.serviceWorker.register('/common/outer/serviceworker.js', {scope: '/'})
|
||||
.then(function(reg) {
|
||||
// Add handler for receiving messages from the service worker
|
||||
navigator.serviceWorker.addEventListener('message', function (ev) {
|
||||
if (initializing && ev.data === "SW_READY") {
|
||||
initializing = false;
|
||||
} else {
|
||||
msgEv.fire(ev);
|
||||
}
|
||||
});
|
||||
|
||||
// Initialize the worker
|
||||
// If it is active (probably running in another tab), just post INIT
|
||||
if (reg.active) {
|
||||
worker = reg.active;
|
||||
postMsg("INIT");
|
||||
}
|
||||
// If it was not active, wait for the "activated" state and post INIT
|
||||
reg.onupdatefound = function () {
|
||||
if (initializing) {
|
||||
var w = reg.installing;
|
||||
var onStateChange = function () {
|
||||
if (w.state === "activated") {
|
||||
worker = w;
|
||||
postMsg("INIT");
|
||||
w.removeEventListener("statechange", onStateChange);
|
||||
}
|
||||
};
|
||||
w.addEventListener('statechange', onStateChange);
|
||||
return;
|
||||
}
|
||||
// XXX
|
||||
// New version detected (from another tab): kill?
|
||||
console.error('New version detected: ABORT?');
|
||||
};
|
||||
return void stopWaiting();
|
||||
}).catch(function(error) {
|
||||
/**/console.log('Registration failed with ' + error);
|
||||
});
|
||||
} else if (Worker) {
|
||||
worker = new Worker('/common/outer/webworker.js');
|
||||
worker.onmessage = function (ev) {
|
||||
msgEv.fire(ev);
|
||||
};
|
||||
postMsg = function (data) {
|
||||
worker.postMessage(data);
|
||||
};
|
||||
} else {
|
||||
// TODO fallback no webworker?
|
||||
console.error('NO SW OR WW');
|
||||
}
|
||||
}).nThen(function () {
|
||||
Channel.create(msgEv, postMsg, function (chan) {
|
||||
console.log('Outer ready');
|
||||
Object.keys(queries).forEach(function (q) {
|
||||
chan.on(q, function (data, cb) {
|
||||
try {
|
||||
queries[q](data, cb);
|
||||
} catch (e) {
|
||||
console.error("Error in outer when executing query " + q);
|
||||
console.error(e);
|
||||
console.log(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
postMessage = function (cmd, data, cb) {
|
||||
/*setTimeout(function () {
|
||||
AStore.query(cmd, data, cb);
|
||||
});*/
|
||||
chan.query(cmd, data, function (err, data) {
|
||||
if (err) { return void cb ({error: err}); }
|
||||
cb(data);
|
||||
});
|
||||
};
|
||||
postMessage = function (cmd, data, cb) {
|
||||
chan.query(cmd, data, function (err, data) {
|
||||
if (err) { return void cb ({error: err}); }
|
||||
cb(data);
|
||||
});
|
||||
};
|
||||
|
||||
postMessage('CONNECT', cfg, waitFor(function (data) {
|
||||
if (data.error) { throw new Error(data.error); }
|
||||
if (data.state === 'ALREADY_INIT') {
|
||||
data = data.returned;
|
||||
}
|
||||
|
||||
if (data.anonHash && !cfg.userHash) { LocalStore.setFSHash(data.anonHash); }
|
||||
|
||||
/*if (cfg.userHash && sessionStorage) {
|
||||
// copy User_hash into sessionStorage because cross-domain iframes
|
||||
// on safari replaces localStorage with sessionStorage or something
|
||||
sessionStorage.setItem(Constants.userHashKey, cfg.userHash);
|
||||
}*/
|
||||
|
||||
if (cfg.userHash) {
|
||||
var localToken = tryParsing(localStorage.getItem(Constants.tokenKey));
|
||||
if (localToken === null) {
|
||||
// if that number hasn't been set to localStorage, do so.
|
||||
localStorage.setItem(Constants.tokenKey, data[Constants.tokenKey]);
|
||||
console.log('Posting CONNECT');
|
||||
postMessage('CONNECT', cfg, function (data) {
|
||||
if (data.error) { throw new Error(data.error); }
|
||||
if (data.state === 'ALREADY_INIT') {
|
||||
data = data.returned;
|
||||
}
|
||||
}
|
||||
|
||||
initFeedback(data.feedback);
|
||||
initialized = true;
|
||||
}));
|
||||
if (data.anonHash && !cfg.userHash) { LocalStore.setFSHash(data.anonHash); }
|
||||
|
||||
}), false);
|
||||
/*if (cfg.userHash && sessionStorage) {
|
||||
// copy User_hash into sessionStorage because cross-domain iframes
|
||||
// on safari replaces localStorage with sessionStorage or something
|
||||
sessionStorage.setItem(Constants.userHashKey, cfg.userHash);
|
||||
}*/
|
||||
|
||||
if (cfg.userHash) {
|
||||
var localToken = tryParsing(localStorage.getItem(Constants.tokenKey));
|
||||
if (localToken === null) {
|
||||
// if that number hasn't been set to localStorage, do so.
|
||||
localStorage.setItem(Constants.tokenKey, data[Constants.tokenKey]);
|
||||
}
|
||||
}
|
||||
|
||||
initFeedback(data.feedback);
|
||||
initialized = true;
|
||||
channelIsReady();
|
||||
});
|
||||
|
||||
}, false);
|
||||
});
|
||||
|
||||
}).nThen(function (waitFor) {
|
||||
// Load the new pad when the hash has changed
|
||||
|
||||
Reference in New Issue
Block a user