fix(background): handle refresh better

master
Brian Ford 9 years ago
parent bd32b00172
commit 287074b73e

@ -1,24 +1,50 @@
var buffer = [];
function addToBuffer(message) { // tabId -> devtool port
buffer.push(message); var inspectedTabs = {};
// TODO: keep track of app state here
// tabId -> list of buffered events
var buffer = {};
function bufferOrForward(message, sender) {
var tabId = sender.tab.id,
devToolsPort = inspectedTabs[tabId];
if (devToolsPort) {
devToolsPort.postMessage(message);
}
if (!buffer[tabId] || message === 'refresh') {
resetState(tabId);
}
buffer[tabId].push(message);
} }
chrome.runtime.onMessage.addListener(addToBuffer);
// context script > background
chrome.runtime.onMessage.addListener(bufferOrForward);
chrome.runtime.onConnect.addListener(function(devToolsPort) { chrome.runtime.onConnect.addListener(function(devToolsPort) {
chrome.runtime.onMessage.removeListener(addToBuffer);
buffer.forEach(function(msg) { devToolsPort.onMessage.addListener(registerInspectedTabId);
devToolsPort.postMessage(msg);
}); function registerInspectedTabId(inspectedTabId) {
buffer = []; inspectedTabs[inspectedTabId] = devToolsPort;
devToolsPort.onMessage.addListener(function(inspectedTabId) { if (!buffer[inspectedTabId]) {
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo) { resetState(inspectedTabId);
if(tabId === inspectedTabId && changeInfo.status === 'loading') { }
devToolsPort.postMessage('refresh'); buffer[inspectedTabId].forEach(function(msg) {
} devToolsPort.postMessage(msg);
});
devToolsPort.onDisconnect.addListener(function () {
delete inspectedTabs[inspectedTabId];
}); });
});
// context script > background //devToolsPort.onMessage.removeListener(registerInspectedTabId);
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) { }
devToolsPort.postMessage(msg);
});
}); });
function resetState(tabId) {
buffer[tabId] = [];
}

@ -3,6 +3,8 @@ if (document.cookie.indexOf('__ngDebug=true') != -1) {
} }
function bootstrapHint () { function bootstrapHint () {
chrome.extension.sendMessage('refresh');
var html = document.getElementsByTagName('html')[0]; var html = document.getElementsByTagName('html')[0];
var eventProxyElement = document.createElement('div'); var eventProxyElement = document.createElement('div');