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

Unified Diff: src/object-observe.js

Issue 265503002: Re-enable Object.observe and add enforcement for security invariants. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: cleanup Created 6 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 | « src/api.cc ('k') | src/objects.h » ('j') | src/runtime.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 e14614f86cc30cfb78b6800dfefc9c15d350e282..23c6bacd0f8383f3e8164407856a30365b9080ae 100644
--- a/src/object-observe.js
+++ b/src/object-observe.js
@@ -400,11 +400,9 @@ function ObserverEnqueueIfActive(observer, objectInfo, changeRecord,
}
var callback = ObserverGetCallback(observer);
- if (needsAccessCheck &&
- // Drop all splice records on the floor for access-checked objects
- (changeRecord.type == 'splice' ||
- !%IsAccessAllowedForObserver(
- callback, changeRecord.object, changeRecord.name))) {
+ if (needsAccessCheck && !%IsAccessAllowedForObserver(callback,
+ changeRecord.object,
+ changeRecord)) {
return;
}
@@ -434,17 +432,14 @@ function ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, type) {
}
ObjectFreeze(newRecord);
- ObjectInfoEnqueueInternalChangeRecord(objectInfo, newRecord,
- true /* skip access check */);
+ ObjectInfoEnqueueInternalChangeRecord(objectInfo, newRecord);
}
-function ObjectInfoEnqueueInternalChangeRecord(objectInfo, changeRecord,
- skipAccessCheck) {
+function ObjectInfoEnqueueInternalChangeRecord(objectInfo, changeRecord) {
// TODO(rossberg): adjust once there is a story for symbols vs proxies.
if (IS_SYMBOL(changeRecord.name)) return;
- var needsAccessCheck = !skipAccessCheck &&
- %IsAccessCheckNeeded(changeRecord.object);
+ var needsAccessCheck = %IsAccessCheckNeeded(changeRecord.object);
rossberg 2014/04/30 11:28:32 I believe you always need to do the same-origin ch
rafaelw 2014/05/02 03:22:32 Done.
if (ChangeObserversIsOptimized(objectInfo.changeObservers)) {
var observer = objectInfo.changeObservers;
@@ -562,6 +557,8 @@ function ObjectGetNotifier(object) {
if (ObjectIsFrozen(object)) return null;
+ if (!%ObjectWasCreatedInCurrentOrigin(object)) return null;
+
var objectInfo = ObjectInfoGetOrCreate(object);
return ObjectInfoGetNotifier(objectInfo);
}
@@ -623,5 +620,4 @@ function SetupObjectObserve() {
));
}
-// Disable Object.observe API for M35.
-// SetupObjectObserve();
+SetupObjectObserve();
« no previous file with comments | « src/api.cc ('k') | src/objects.h » ('j') | src/runtime.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698