| Index: chrome/ext/background.js |
| =================================================================== |
| --- a/chrome/ext/background.js |
| +++ b/chrome/ext/background.js |
| @@ -105,18 +105,38 @@ |
| }; |
| chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) |
| { |
| if (changeInfo.status == "loading") |
| ext.pages.onLoading._dispatch(new Page(tab)); |
| }); |
| + function createFrame(tabId, frameId) |
| + { |
| + var frames = framesOfTabs[details.tabId]; |
|
kzar
2016/09/01 11:06:48
It should be `tabId` and `frameId` rather than `de
Wladimir Palant
2016/09/05 15:48:25
Ouch, not sure how I missed that in the testing. F
|
| + if (!frames) |
| + frames = framesOfTabs[details.tabId] = Object.create(null); |
| + |
| + var frame = frames[details.frameId]; |
| + if (!frame) |
| + frame = frames[details.frameId] = {}; |
|
kzar
2016/08/31 16:06:39
Nit: Seems inconsistent to do `Object.create(null)
Wladimir Palant
2016/08/31 19:13:44
Yes, seems inconsistent but other than the frames
kzar
2016/09/01 11:06:48
Acknowledged.
|
| + |
| + return frame; |
| + } |
| + |
| chrome.webNavigation.onBeforeNavigate.addListener(function(details) |
| { |
| + // Capture parent frame here because onCommitted doesn't get this info. |
| + var frame = createFrame(details.tabId, details.frameId); |
| + frame.parent = frames[details.parentFrameId] || null; |
|
kzar
2016/08/31 16:06:39
Since both times we use createFrame we just want t
Wladimir Palant
2016/08/31 19:13:44
Frankly, I think that this would specialize the fu
kzar
2016/09/01 11:06:48
Acknowledged.
kzar
2016/09/01 12:46:15
We don't assign the frame's URL here in case the n
kzar
2016/09/01 13:22:57
OK it turns out both onCommitted and onBeforeNavig
kzar
2016/09/01 13:39:13
I have something working now, I hope you don't min
|
| + }); |
| + |
| + chrome.webNavigation.onCommitted.addListener(function(details) |
| + { |
| if (details.frameId == 0) |
| { |
| ext._removeFromAllPageMaps(details.tabId); |
| chrome.tabs.get(details.tabId, function() |
| { |
| // If the tab is prerendered, chrome.tabs.get() sets |
| // chrome.runtime.lastError and we have to dispatch the onLoading event, |
| @@ -131,25 +151,19 @@ |
| id: details.tabId, |
| url: details.url |
| }) |
| ); |
| } |
| }); |
| } |
| - // Add or update frame in frame structure |
| - var frames = framesOfTabs[details.tabId]; |
| - if (!frames) |
| - frames = framesOfTabs[details.tabId] = Object.create(null); |
| - |
| - frames[details.frameId] = { |
| - parent: frames[details.parentFrameId] || null, |
| - url: new URL(details.url) |
| - }; |
| + // Update frame URL in frame structure |
| + var frame = createFrame(details.tabId, details.frameId); |
| + frame.url = new URL(details.url); |
| }); |
| function forgetTab(tabId) |
| { |
| ext.pages.onRemoved._dispatch(tabId); |
| ext._removeFromAllPageMaps(tabId); |
| delete framesOfTabs[tabId]; |