Fix: update tab icon on forward/backward

This commit is contained in:
eight 2018-10-13 14:50:31 +08:00
parent f08faea149
commit 43afa31fa0
3 changed files with 17 additions and 8 deletions

View File

@ -147,11 +147,18 @@ prefs.initializing.then(() => {
refreshAllIcons(); refreshAllIcons();
}); });
navigatorUtil.onUrlChange(({tabId, frameId}, type) => { navigatorUtil.onUrlChange(({tabId, frameId, transitionQualifiers}, type) => {
if (type === 'committed' && !frameId) { if (type === 'committed' && !frameId) {
// it seems that the tab icon would be reset when pressing F5. We // it seems that the tab icon would be reset by navigation. We
// invalidate the cache here so it would be refreshed. // invalidate the cache here so it would be refreshed by `apply.js`.
tabIcons.delete(tabId); tabIcons.delete(tabId);
// however, if the tab was swapped in by forward/backward buttons,
// `apply.js` doesn't notify the background to update the icon,
// so we have to refresh it manually.
if (transitionQualifiers.includes('forward_back')) {
msg.sendTab(tabId, {method: 'updateCount'}).catch(msg.broadcastError);
}
} }
}); });

View File

@ -23,16 +23,19 @@ const navigatorUtil = (() => {
chrome.webNavigation.onCommitted.addListener(data => chrome.webNavigation.onCommitted.addListener(data =>
fixNTPUrl(data) fixNTPUrl(data)
.then(() => executeCallbacks(handler.urlChange, data, 'committed')) .then(() => executeCallbacks(handler.urlChange, data, 'committed'))
.catch(console.error)
); );
chrome.webNavigation.onHistoryStateUpdated.addListener(data => chrome.webNavigation.onHistoryStateUpdated.addListener(data =>
fixNTPUrl(data) fixNTPUrl(data)
.then(() => executeCallbacks(handler.urlChange, data, 'historyStateUpdated')) .then(() => executeCallbacks(handler.urlChange, data, 'historyStateUpdated'))
.catch(console.error)
); );
chrome.webNavigation.onReferenceFragmentUpdated.addListener(data => chrome.webNavigation.onReferenceFragmentUpdated.addListener(data =>
fixNTPUrl(data) fixNTPUrl(data)
.then(() => executeCallbacks(handler.urlChange, data, 'referenceFragmentUpdated')) .then(() => executeCallbacks(handler.urlChange, data, 'referenceFragmentUpdated'))
.catch(console.error)
); );
} }

View File

@ -219,6 +219,10 @@ const APPLY = (() => {
} }
}); });
break; break;
case 'updateCount':
updateCount();
break;
} }
} }
@ -336,11 +340,6 @@ const APPLY = (() => {
} }
docRootObserver.firstStart(); docRootObserver.firstStart();
// FIXME
// if (FF_BUG461 && (gotNewStyles || styles.needTransitionPatch)) {
// setContentsInPageContext();
// }
if (!isOwnPage && !docRewriteObserver && styleElements.size) { if (!isOwnPage && !docRewriteObserver && styleElements.size) {
initDocRewriteObserver(); initDocRewriteObserver();
} }