Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2700)

Unified Diff: chrome/browser/resources/chromeos/chromevox/chromevox/background/tabs_api_handler.js

Issue 1455223003: Stop ChromeVox Next page loading sounds when page finishes loading. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@active_indicator_next
Patch Set: Fixed focus changing and removing all tabs, addressed other feedback Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/chromeos/chromevox/chromevox/background/tabs_api_handler.js
diff --git a/chrome/browser/resources/chromeos/chromevox/chromevox/background/tabs_api_handler.js b/chrome/browser/resources/chromeos/chromevox/chromevox/background/tabs_api_handler.js
index bcf68cf84967b778fe1dff834d86cb19a72fc306..0f4611b5717b27a23fc585527b946be49f7ac25f 100644
--- a/chrome/browser/resources/chromeos/chromevox/chromevox/background/tabs_api_handler.js
+++ b/chrome/browser/resources/chromeos/chromevox/chromevox/background/tabs_api_handler.js
@@ -36,6 +36,19 @@ cvox.TabsApiHandler = function() {
chrome.tabs.onActivated.addListener(this.onActivated.bind(this));
chrome.tabs.onUpdated.addListener(this.onUpdated.bind(this));
chrome.windows.onFocusChanged.addListener(this.onFocusChanged.bind(this));
+
+ /**
+ * @type {?number} The window.setInterval ID for checking the loading
+ * status of the current tab.
+ * @private
+ */
+ this.pageLoadIntervalID_ = null;
+
+ /**
+ * @type {?number} The tab ID of the tab being polled because it's loading.
+ * @private
+ */
+ this.pageLoadTabID_ = null;
};
cvox.TabsApiHandler.prototype = {
@@ -65,6 +78,13 @@ cvox.TabsApiHandler.prototype = {
return;
}
cvox.ChromeVox.earcons.playEarcon(cvox.Earcon.OBJECT_CLOSE);
+
+ chrome.tabs.query({active: true}, function(tabs) {
+ if (tabs.length == 0 && this.isPlayingPageLoadingSound_()) {
+ cvox.ChromeVox.earcons.cancelEarcon(cvox.Earcon.PAGE_START_LOADING);
+ this.cancelPageLoadTimer_();
+ }
+ }.bind(this));
},
/**
@@ -75,11 +95,8 @@ cvox.TabsApiHandler.prototype = {
if (!cvox.ChromeVox.isActive) {
return;
}
+ this.updateLoadingSoundsWhenTabFocusChanges_(activeInfo.tabId);
chrome.tabs.get(activeInfo.tabId, function(tab) {
- this.lastActiveTabLoaded_ = tab.status == 'complete';
- if (tab.status == 'loading') {
- return;
- }
var title = tab.title ? tab.title : tab.url;
cvox.ChromeVox.tts.speak(this.msg_('chrome_tab_selected',
[title]),
@@ -93,6 +110,24 @@ cvox.TabsApiHandler.prototype = {
},
/**
+ * Called when a tab becomes active or focused.
+ * @param {number} tabId the id of the tab that's now focused and active.
+ * @private
+ */
+ updateLoadingSoundsWhenTabFocusChanges_: function(tabId) {
+ chrome.tabs.get(tabId, function(tab) {
+ this.lastActiveTabLoaded_ = tab.status == 'complete';
+ if (tab.status == 'loading' && !this.isPlayingPageLoadingSound_()) {
+ cvox.ChromeVox.earcons.playEarcon(cvox.Earcon.PAGE_START_LOADING);
+ this.startPageLoadTimer_(tabId);
+ } else {
+ cvox.ChromeVox.earcons.cancelEarcon(cvox.Earcon.PAGE_START_LOADING);
+ this.cancelPageLoadTimer_();
+ }
+ }.bind(this));
+ },
+
+ /**
* Handles chrome.tabs.onUpdated.
* @param {number} tabId
* @param {Object} selectInfo
@@ -107,10 +142,14 @@ cvox.TabsApiHandler.prototype = {
}
if (tab.status == 'loading') {
this.lastActiveTabLoaded_ = false;
- cvox.ChromeVox.earcons.playEarcon(cvox.Earcon.PAGE_START_LOADING);
+ if (!this.isPlayingPageLoadingSound_()) {
+ cvox.ChromeVox.earcons.playEarcon(cvox.Earcon.PAGE_START_LOADING);
+ this.startPageLoadTimer_(tabId);
+ }
} else if (!this.lastActiveTabLoaded_) {
this.lastActiveTabLoaded_ = true;
cvox.ChromeVox.earcons.playEarcon(cvox.Earcon.PAGE_FINISH_LOADING);
+ this.cancelPageLoadTimer_();
}
this.refreshAutomationHandler_(tabId);
}.bind(this));
@@ -129,6 +168,9 @@ cvox.TabsApiHandler.prototype = {
}
chrome.windows.get(windowId, function(window) {
chrome.tabs.query({active: true, windowId: windowId}, function(tabs) {
+ if (tabs[0])
+ this.updateLoadingSoundsWhenTabFocusChanges_(tabs[0].id);
+
var msgId = window.incognito ? 'chrome_incognito_window_selected' :
'chrome_normal_window_selected';
var tab = tabs[0] || {};
@@ -159,5 +201,45 @@ cvox.TabsApiHandler.prototype = {
this.handler_ = new TabsAutomationHandler(node);
}.bind(this));
+ },
+
+ /**
+ * The chrome.tabs API doesn't always fire an onUpdated event when a
+ * page finishes loading, so we poll it.
+ * @param {number} tabId The id of the tab to monitor.
+ * @private
+ */
+ startPageLoadTimer_: function(tabId) {
+ if (this.pageLoadIntervalID_) {
+ if (tabId == this.pageLoadTabID_)
+ return;
+ this.cancelPageLoadTimer_();
+ }
+
+ this.pageLoadTabID_ = tabId;
+ this.pageLoadIntervalID_ = window.setInterval(function() {
+ if (this.pageLoadTabID_)
+ this.onUpdated(this.pageLoadTabID_, {});
+ }.bind(this), 1000);
+ },
+
+ /**
+ * Cancel the page loading timer because the active tab is loaded.
+ * @private
+ */
+ cancelPageLoadTimer_: function() {
+ if (this.pageLoadIntervalID_) {
+ window.clearInterval(this.pageLoadIntervalID_);
+ this.pageLoadIntervalID_ = null;
+ this.pageLoadTabID_ = null;
+ }
+ },
+
+ /**
+ * @return {boolean} True if the page loading sound is playing and our
+ * page loading timer is active.
+ */
+ isPlayingPageLoadingSound_: function() {
+ return this.pageLoadIntervalID_ != null;
}
};
« no previous file with comments | « no previous file | chrome/browser/resources/chromeos/chromevox/cvox2/background/background.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698