From 11749c28fcf4f2f17de0e8c57337a66a0f19dd89 Mon Sep 17 00:00:00 2001 From: FelisCatus Date: Wed, 18 Feb 2015 11:30:00 +0800 Subject: [PATCH] Improve web request error detection and set badge for updated tabs. --- omega-target-chromium-extension/src/options.coffee | 6 ++++-- .../src/web_request_monitor.coffee | 11 ++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/omega-target-chromium-extension/src/options.coffee b/omega-target-chromium-extension/src/options.coffee index f1213d4..9ab35cf 100644 --- a/omega-target-chromium-extension/src/options.coffee +++ b/omega-target-chromium-extension/src/options.coffee @@ -197,16 +197,18 @@ class ChromeOptions extends OmegaTarget.Options if enabled and not @_requestMonitor? @_tabRequestInfoPorts = {} @_requestMonitor = new WebRequestMonitor() - @_requestMonitor.watchTabs (tabId, info, req, event) => + @_requestMonitor.watchTabs (tabId, info) => return unless @_monitorWebRequests if info.errorCount > 0 + info.badgeSet = true badge = {text: info.errorCount.toString(), color: '#f0ad4e'} chrome.browserAction.setBadgeText(text: badge.text, tabId: tabId) chrome.browserAction.setBadgeBackgroundColor( color: badge.color tabId: tabId ) - else + else if info.badgeSet + info.badgeSet = false chrome.browserAction.setBadgeText(text: '', tabId: tabId) @_tabRequestInfoPorts[tabId]?.postMessage( @_requestMonitor.summarizeErrors(info, OmegaPac.getBaseDomain)) diff --git a/omega-target-chromium-extension/src/web_request_monitor.coffee b/omega-target-chromium-extension/src/web_request_monitor.coffee index 351490c..4adc2d8 100644 --- a/omega-target-chromium-extension/src/web_request_monitor.coffee +++ b/omega-target-chromium-extension/src/web_request_monitor.coffee @@ -83,6 +83,9 @@ module.exports = class WebRequestMonitor return if req.tabId < 0 return if req.error.indexOf('BLOCKED') >= 0 + return if req.error.indexOf('net::ERR_FILE_') == 0 + return if req.url.indexOf('file:') == 0 + return if req.url.indexOf('chrome') == 0 return unless reqInfo if req.error == 'net::ERR_ABORTED' if reqInfo.timeoutCalled and not reqInfo.noTimeout @@ -121,6 +124,11 @@ module.exports = class WebRequestMonitor chrome.tabs.onReplaced?.addListener (added, removed) => @tabInfo[added] ?= @_newTabInfo() delete @tabInfo[removed] + chrome.tabs.onUpdated.addListener (tab) => + info = @tabInfo[tab.id] ?= @_newTabInfo() + return unless info + for callback in @_tabCallbacks + callback(tab.id, info, null, 'updated') chrome.tabs.query {}, (tabs) => for tab in tabs @tabInfo[tab.id] ?= @_newTabInfo() @@ -139,7 +147,8 @@ module.exports = class WebRequestMonitor info = @tabInfo[req.tabId] if info if status == 'start' and req.type == 'main_frame' - info = @tabInfo[req.tabId] = @_newTabInfo() + for own key, value of @_newTabInfo() + info[key] = value info.requests[req.requestId] = req if (oldStatus = info.requestStatus[req.requestId]) info[@eventCategory[oldStatus] + 'Count']--