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

Unified Diff: extensions/renderer/resources/messaging.js

Issue 1939833003: Sanitize inheritance in callers of utils.expose (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2704
Patch Set: Created 4 years, 8 months 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 | « extensions/renderer/resources/event.js ('k') | extensions/renderer/resources/utils.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/resources/messaging.js
diff --git a/extensions/renderer/resources/messaging.js b/extensions/renderer/resources/messaging.js
index afd7244ece88740bcf69b6bc8820fb28b5b91724..8ca84ea46559aa91d4688c5a38b0e5f5a162ab27 100644
--- a/extensions/renderer/resources/messaging.js
+++ b/extensions/renderer/resources/messaging.js
@@ -3,6 +3,7 @@
// found in the LICENSE file.
// chrome.runtime.messaging API implementation.
+// TODO(robwu): Fix this indentation.
// TODO(kalman): factor requiring chrome out of here.
var chrome = requireNative('chrome').GetChrome();
@@ -22,7 +23,7 @@
var kNativeMessageChannel = "chrome.runtime.sendNativeMessage";
// Map of port IDs to port object.
- var ports = {};
+ var ports = {__proto__: null};
// Change even to odd and vice versa, to get the other side of a given
// channel.
@@ -34,15 +35,27 @@
this.portId_ = portId;
this.name = opt_name;
- var portSchema = {name: 'port', $ref: 'runtime.Port'};
- var options = {unmanaged: true};
+ // Note: Keep these schemas in sync with the documentation in runtime.json
+ var portSchema = {
+ __proto__: null,
+ name: 'port',
+ $ref: 'runtime.Port',
+ };
+ var messageSchema = {
+ __proto__: null,
+ name: 'message',
+ type: 'any',
+ optional: true,
+ };
+ var options = {
+ __proto__: null,
+ unmanaged: true,
+ };
this.onDisconnect = new Event(null, [portSchema], options);
- this.onMessage = new Event(
- null,
- [{name: 'message', type: 'any', optional: true}, portSchema],
- options);
+ this.onMessage = new Event(null, [messageSchema, portSchema], options);
this.onDestroy_ = null;
}
+ $Object.setPrototypeOf(PortImpl.prototype, null);
// Sends a message asynchronously to the context on the other end of this
// port.
@@ -72,8 +85,10 @@
};
PortImpl.prototype.destroy_ = function() {
- if (this.onDestroy_)
+ if (this.onDestroy_) {
this.onDestroy_();
+ this.onDestroy_ = null;
+ }
privates(this.onDisconnect).impl.destroy_();
privates(this.onMessage).impl.destroy_();
// TODO(robwu): Remove port lifetime management because it is completely
@@ -114,23 +129,24 @@
sourceExtensionId,
targetExtensionId,
sourceUrl) {
- var errorMsg = [];
- var eventName = isSendMessage ? "runtime.onMessage" : "extension.onRequest";
+ var errorMsg;
+ var eventName = isSendMessage ? 'runtime.onMessage' : 'extension.onRequest';
if (isSendMessage && !responseCallbackPreserved) {
- $Array.push(errorMsg,
- "The chrome." + eventName + " listener must return true if you " +
- "want to send a response after the listener returns");
+ errorMsg =
+ 'The chrome.' + eventName + ' listener must return true if you ' +
+ 'want to send a response after the listener returns';
} else {
- $Array.push(errorMsg,
- "Cannot send a response more than once per chrome." + eventName +
- " listener per document");
+ errorMsg =
+ 'Cannot send a response more than once per chrome.' + eventName +
+ ' listener per document';
}
- $Array.push(errorMsg, "(message was sent by extension" + sourceExtensionId);
- if (sourceExtensionId != "" && sourceExtensionId != targetExtensionId)
- $Array.push(errorMsg, "for extension " + targetExtensionId);
- if (sourceUrl != "")
- $Array.push(errorMsg, "for URL " + sourceUrl);
- lastError.set(eventName, errorMsg.join(" ") + ").", null, chrome);
+ errorMsg += ' (message was sent by extension' + sourceExtensionId;
+ if (sourceExtensionId && sourceExtensionId !== targetExtensionId)
+ errorMsg += ' for extension ' + targetExtensionId;
+ if (sourceUrl)
+ errorMsg += ' for URL ' + sourceUrl;
+ errorMsg += ').';
+ lastError.set(eventName, errorMsg, null, chrome);
}
// Helper function for dispatchOnConnect
« no previous file with comments | « extensions/renderer/resources/event.js ('k') | extensions/renderer/resources/utils.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698