if (ObjectIsFrozen(object)) return null;
var objectInfo = objectInfoMap.get(object);
- if (IS_UNDEFINED(objectInfo)) objectInfo = CreateObjectInfo(object);
+ if (IS_UNDEFINED(objectInfo)) {
+ objectInfo = CreateObjectInfo(object);
+ %SetIsObserved(object);
+ }
if (IS_NULL(objectInfo.notifier)) {
objectInfo.notifier = { __proto__: notifierPrototype };
ASSERT(proto->IsJSGlobalObject());
obj = JSReceiver::cast(proto);
}
+ if (obj->IsJSProxy())
+ return isolate->heap()->undefined_value();
+
ASSERT(!(obj->map()->is_observed() && obj->IsJSObject() &&
JSObject::cast(obj)->HasFastElements()));
ASSERT(obj->IsJSObject());
Object.deliverChangeRecords(observer.callback);
observer.assertRecordCount(1);
+// Get notifier prior to observing
+reset();
+var obj = {};
+Object.getNotifier(obj);
+Object.observe(obj, observer.callback);
+obj.id = 1;
+Object.deliverChangeRecords(observer.callback);
+observer.assertCallbackRecords([
+ { object: obj, type: 'new', name: 'id' },
+]);
// Observing a continuous stream of changes, while itermittantly unobserving.
reset();
// Test all kinds of objects generically.
function TestObserveConfigurable(obj, prop) {
reset();
+ Object.observe(obj, observer.callback);
+ Object.unobserve(obj, observer.callback);
obj[prop] = 1;
Object.observe(obj, observer.callback);
obj[prop] = 2;
function TestObserveNonConfigurable(obj, prop, desc) {
reset();
+ Object.observe(obj, observer.callback);
+ Object.unobserve(obj, observer.callback);
obj[prop] = 1;
Object.observe(obj, observer.callback);
obj[prop] = 4;