diff --git a/background.js b/background.js index e5cb768..33cb99b 100644 --- a/background.js +++ b/background.js @@ -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] = []; +} diff --git a/inject.js b/inject.js index a0b367d..7e15a92 100644 --- a/inject.js +++ b/inject.js @@ -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');