(tabId, src)
| 134 | } |
| 135 | |
| 136 | function updateFaviconURI(tabId, src) { |
| 137 | let tab = tabs.get(tabId); |
| 138 | if (tab.favicon != src) { |
| 139 | let img = new Image(); |
| 140 | |
| 141 | // Update favicon element on successful load |
| 142 | img.onload = () => { |
| 143 | console.log('Favicon loaded'); |
| 144 | tab.favicon = src; |
| 145 | |
| 146 | if (tabId == activeTabId) { |
| 147 | updatedFaviconURIHandler(tabId, tab); |
| 148 | } |
| 149 | }; |
| 150 | |
| 151 | if (src) { |
| 152 | // Try load from root on failed load |
| 153 | img.onerror = () => { |
| 154 | console.log('Cannot load favicon from link, trying with root'); |
| 155 | updateFaviconURI(tabId, ''); |
| 156 | }; |
| 157 | } else { |
| 158 | // No link for favicon, try loading from root |
| 159 | try { |
| 160 | let tabURI = new URL(tab.uri); |
| 161 | src = `${tabURI.origin}/favicon.ico`; |
| 162 | } catch(e) { |
| 163 | console.log(`Could not parse tab ${tabId} URI`); |
| 164 | } |
| 165 | |
| 166 | img.onerror = () => { |
| 167 | console.log('No favicon in site root. Using default favicon.'); |
| 168 | tab.favicon = 'img/favicon.png'; |
| 169 | updatedFaviconURIHandler(tabId, tab); |
| 170 | }; |
| 171 | } |
| 172 | |
| 173 | img.src = src; |
| 174 | } |
| 175 | } |
| 176 | |
| 177 | function updatedFaviconURIHandler(tabId, tab) { |
| 178 | updateNavigationUI(commands.MG_UPDATE_FAVICON); |
no test coverage detected