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

Unified Diff: src/object-observe.js

Issue 22962009: Add access check for observed objects (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Nearly complete Created 7 years, 4 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 | « no previous file | src/runtime.h » ('j') | test/cctest/test-object-observe.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/object-observe.js
diff --git a/src/object-observe.js b/src/object-observe.js
index f5e0d9d563a08e0507d01b03cc519370e49d0215..f722df2276d2101d0b76166e9a7f9faea573f307 100644
--- a/src/object-observe.js
+++ b/src/object-observe.js
@@ -275,15 +275,25 @@ function EnqueueToCallback(callback, changeRecord) {
%SetObserverDeliveryPending();
}
-function EnqueueChangeRecord(changeRecord, observers) {
+function EnqueueChangeRecord(changeRecord, observers, skipAccessCheck) {
// TODO(rossberg): adjust once there is a story for symbols vs proxies.
if (IS_SYMBOL(changeRecord.name)) return;
+ var object = changeRecord.object;
+ var needsAccessCheck = !skipAccessCheck && %IsAccessCheckNeeded(object);
for (var i = 0; i < observers.length; i++) {
var observer = observers[i];
if (IS_UNDEFINED(observer.accept[changeRecord.type]))
continue;
+ if (needsAccessCheck &&
+ // Drop all splice records on the floor for access-checked objects
+ (changeRecord.type == 'splice' ||
+ !%GetAccessAllowedForObserver(
+ observer.callback, object, changeRecord.name))) {
+ continue;
+ }
+
EnqueueToCallback(observer.callback, changeRecord);
}
}
@@ -354,7 +364,8 @@ function ObjectNotifierNotify(changeRecord) {
}
ObjectFreeze(newRecord);
- EnqueueChangeRecord(newRecord, objectInfo.changeObservers);
+ EnqueueChangeRecord(newRecord, objectInfo.changeObservers,
+ true /* skip access check */);
}
function ObjectNotifierPerformChange(changeType, changeFn, receiver) {
« no previous file with comments | « no previous file | src/runtime.h » ('j') | test/cctest/test-object-observe.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698