| Index: src/object-observe.js
|
| diff --git a/src/object-observe.js b/src/object-observe.js
|
| index 1d1be93b4d8ff9325ae8a3f0aeff18e260c2473c..9d6625450be6bd0314bfc312e8a946bdf71f790d 100644
|
| --- a/src/object-observe.js
|
| +++ b/src/object-observe.js
|
| @@ -355,6 +355,8 @@ function CallbackInfoNormalize(callback) {
|
| function ObjectObserve(object, callback, acceptList) {
|
| if (!IS_SPEC_OBJECT(object))
|
| throw MakeTypeError("observe_non_object", ["observe"]);
|
| + if (%IsJSGlobalProxy(object))
|
| + throw MakeTypeError("observe_global_proxy", ["observe"]);
|
| if (!IS_SPEC_FUNCTION(callback))
|
| throw MakeTypeError("observe_non_function", ["observe"]);
|
| if (ObjectIsFrozen(callback))
|
| @@ -370,6 +372,8 @@ function ObjectObserve(object, callback, acceptList) {
|
| function ObjectUnobserve(object, callback) {
|
| if (!IS_SPEC_OBJECT(object))
|
| throw MakeTypeError("observe_non_object", ["unobserve"]);
|
| + if (%IsJSGlobalProxy(object))
|
| + throw MakeTypeError("observe_global_proxy", ["unobserve"]);
|
| if (!IS_SPEC_FUNCTION(callback))
|
| throw MakeTypeError("observe_non_function", ["unobserve"]);
|
|
|
| @@ -392,19 +396,15 @@ function ArrayUnobserve(object, callback) {
|
| return ObjectUnobserve(object, callback);
|
| }
|
|
|
| -function ObserverEnqueueIfActive(observer, objectInfo, changeRecord,
|
| - needsAccessCheck) {
|
| +function ObserverEnqueueIfActive(observer, objectInfo, changeRecord) {
|
| if (!ObserverIsActive(observer, objectInfo) ||
|
| !TypeMapHasType(ObserverGetAcceptTypes(observer), changeRecord.type)) {
|
| return;
|
| }
|
|
|
| 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 (!%ObserverObjectAndRecordHaveSameOrigin(callback, changeRecord.object,
|
| + changeRecord)) {
|
| return;
|
| }
|
|
|
| @@ -433,22 +433,16 @@ 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);
|
| -
|
| if (ChangeObserversIsOptimized(objectInfo.changeObservers)) {
|
| var observer = objectInfo.changeObservers;
|
| - ObserverEnqueueIfActive(observer, objectInfo, changeRecord,
|
| - needsAccessCheck);
|
| + ObserverEnqueueIfActive(observer, objectInfo, changeRecord);
|
| return;
|
| }
|
|
|
| @@ -456,8 +450,7 @@ function ObjectInfoEnqueueInternalChangeRecord(objectInfo, changeRecord,
|
| var observer = objectInfo.changeObservers[priority];
|
| if (IS_NULL(observer))
|
| continue;
|
| - ObserverEnqueueIfActive(observer, objectInfo, changeRecord,
|
| - needsAccessCheck);
|
| + ObserverEnqueueIfActive(observer, objectInfo, changeRecord);
|
| }
|
| }
|
|
|
| @@ -558,9 +551,13 @@ function ObjectNotifierPerformChange(changeType, changeFn) {
|
| function ObjectGetNotifier(object) {
|
| if (!IS_SPEC_OBJECT(object))
|
| throw MakeTypeError("observe_non_object", ["getNotifier"]);
|
| + if (%IsJSGlobalProxy(object))
|
| + throw MakeTypeError("observe_global_proxy", ["getNotifier"]);
|
|
|
| if (ObjectIsFrozen(object)) return null;
|
|
|
| + if (!%ObjectWasCreatedInCurrentOrigin(object)) return null;
|
| +
|
| var objectInfo = ObjectInfoGetOrCreate(object);
|
| return ObjectInfoGetNotifier(objectInfo);
|
| }
|
| @@ -622,5 +619,4 @@ function SetupObjectObserve() {
|
| ));
|
| }
|
|
|
| -// Disable Object.observe API for M35.
|
| -// SetupObjectObserve();
|
| +SetupObjectObserve();
|
|
|