Index: chrome/browser/resources/uber/uber_utils.js |
diff --git a/chrome/browser/resources/uber/uber_utils.js b/chrome/browser/resources/uber/uber_utils.js |
index 49d4b54fe9439dd45aa039cb034c72c8938ca977..a537454bc0f81d3641530cf27b9ce3f3c9e6dcc0 100644 |
--- a/chrome/browser/resources/uber/uber_utils.js |
+++ b/chrome/browser/resources/uber/uber_utils.js |
@@ -12,19 +12,32 @@ cr.define('uber', function() { |
* Invokes a method on the parent window (UberPage). This is a convenience |
* method for API calls into the uber page. |
* @param {String} method The name of the method to invoke. |
- * @param {Object} params Optional property bag of parameters to pass to the |
- * invoked method. |
+ * @param {Object=} opt_params Optional property bag of parameters to pass to |
+ * the invoked method. |
* @private |
*/ |
- function invokeMethodOnParent(method, params) { |
- if (!window.parent) |
+ function invokeMethodOnParent(method, opt_params) { |
+ if (window.location == window.parent.location) |
return; |
- var data = {method: method, params: params}; |
- window.parent.postMessage(data, 'chrome://chrome'); |
- }; |
+ invokeMethodOnWindow(window.parent, method, opt_params, 'chrome://chrome'); |
+ } |
- return { |
- invokeMethodOnParent: invokeMethodOnParent |
+ /** |
+ * Invokes a method on the target window. |
+ * @param {String} method The name of the method to invoke. |
+ * @param {Object=} opt_params Optional property bag of parameters to pass to |
+ * the invoked method. |
+ * @param {String=} opt_url The origin of the target window. |
+ * @private |
+ */ |
+ function invokeMethodOnWindow(targetWindow, method, opt_params, opt_url) { |
+ var data = {method: method, params: opt_params}; |
+ targetWindow.postMessage(data, opt_url ? opt_url : '*'); |
} |
+ |
+ return { |
+ invokeMethodOnParent: invokeMethodOnParent, |
+ invokeMethodOnWindow: invokeMethodOnWindow, |
+ }; |
}); |