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

Unified Diff: chrome/browser/resources/chromeos/chromevox/common/interframe.js

Issue 816343004: Send an ack msg to a parent iframe when setting iframe ids for ChromeVox. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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 | « chrome/browser/resources/chromeos/chromevox/chromevox/injected/serializer.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/chromeos/chromevox/common/interframe.js
diff --git a/chrome/browser/resources/chromeos/chromevox/common/interframe.js b/chrome/browser/resources/chromeos/chromevox/common/interframe.js
index 5f4b800bf0a842f2b0177494d7bf164cfda819da..1da0d8b5aba0f106fc075eac3260ed539964e685 100644
--- a/chrome/browser/resources/chromeos/chromevox/common/interframe.js
+++ b/chrome/browser/resources/chromeos/chromevox/common/interframe.js
@@ -41,6 +41,14 @@ cvox.Interframe.IF_MSG_PREFIX = 'cvox.INTERFRAME:';
cvox.Interframe.SET_ID = 'cvox.INTERFRAME_SET_ID';
/**
+ * The message used by a child frame to acknowledge an id was set (sent to its
+ * parent frame.
+ * @type {string}
+ * @const
+ */
+cvox.Interframe.ACK_SET_ID = 'cvox.INTERFRAME_ACK_SET_ID';
+
+/**
* The ID of this window (relative to its parent farme).
* @type {number|string|undefined}
*/
@@ -54,6 +62,14 @@ cvox.Interframe.id;
cvox.Interframe.listeners = [];
/**
+ * Maps an id to a function which gets called when a frame first sends an ack
+ * for a set id msg.
+ @dict {!Object.<number|string, function()>}
+ * @private
+ */
+cvox.Interframe.idToCallback_ = {};
+
+/**
* Flag for unit testing. When false, skips over iframe.contentWindow check
* in sendMessageToIframe. This is needed because in the wild, ChromeVox may
* not have access to iframe.contentWindow due to the same-origin security
@@ -74,6 +90,12 @@ cvox.Interframe.init = function() {
cvox.ChromeVoxJSON.parse(suffix));
if (message['command'] == cvox.Interframe.SET_ID) {
cvox.Interframe.id = message['id'];
+ message['command'] = cvox.Interframe.ACK_SET_ID;
+ cvox.Interframe.sendMessageToParentWindow(message);
+ } else if (message['command'] == cvox.Interframe.ACK_SET_ID) {
+ cvox.Interframe.id = message['id'];
+ var callback = cvox.Interframe.idToCallback_[cvox.Interframe.id];
+ callback();
}
for (var i = 0, listener; listener = cvox.Interframe.listeners[i]; i++) {
listener(message);
@@ -196,8 +218,13 @@ cvox.Interframe.sendMessageToParentWindow = function(message) {
* @param {number|string} id The ID you want to receive in replies from
* this iframe.
* @param {HTMLIFrameElement} iframe The iframe to assign.
+ * @param {function()=} opt_callback Called when a ack msg arrives from the
+ *frame.
*/
-cvox.Interframe.sendIdToIFrame = function(id, iframe) {
+cvox.Interframe.sendIdToIFrame = function(id, iframe, opt_callback) {
+ if (opt_callback) {
+ cvox.Interframe.idToCallback_[id] = opt_callback;
+ }
var message = {'command': cvox.Interframe.SET_ID, 'id': id};
cvox.Interframe.sendMessageToIFrame(message, iframe);
};
« no previous file with comments | « chrome/browser/resources/chromeos/chromevox/chromevox/injected/serializer.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698