fix(background): handle refresh better

master
Brian Ford 9 years ago
parent bd32b00172
commit 287074b73e

@ -1,24 +1,50 @@
var buffer = [];
function addToBuffer(message) {
buffer.push(message);
// tabId -> devtool port
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.onMessage.removeListener(addToBuffer);
buffer.forEach(function(msg) {
devToolsPort.postMessage(msg);
});
buffer = [];
devToolsPort.onMessage.addListener(function(inspectedTabId) {
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo) {
if(tabId === inspectedTabId && changeInfo.status === 'loading') {
devToolsPort.postMessage('refresh');
}
devToolsPort.onMessage.addListener(registerInspectedTabId);
function registerInspectedTabId(inspectedTabId) {
inspectedTabs[inspectedTabId] = devToolsPort;
if (!buffer[inspectedTabId]) {
resetState(inspectedTabId);
}
buffer[inspectedTabId].forEach(function(msg) {
devToolsPort.postMessage(msg);
});
devToolsPort.onDisconnect.addListener(function () {
delete inspectedTabs[inspectedTabId];
});
});
// context script > background
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
devToolsPort.postMessage(msg);
});
//devToolsPort.onMessage.removeListener(registerInspectedTabId);
}
});
function resetState(tabId) {
buffer[tabId] = [];
}

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