| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 "use strict"; | 5 "use strict"; |
| 6 | 6 |
| 7 // Overview: | 7 // Overview: |
| 8 // | 8 // |
| 9 // This file contains all of the routing and accounting for Object.observe. | 9 // This file contains all of the routing and accounting for Object.observe. |
| 10 // User code will interact with these mechanisms via the Object.observe APIs | 10 // User code will interact with these mechanisms via the Object.observe APIs |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 358 throw MakeTypeError("observe_non_object", ["observe"]); | 358 throw MakeTypeError("observe_non_object", ["observe"]); |
| 359 if (%IsJSGlobalProxy(object)) | 359 if (%IsJSGlobalProxy(object)) |
| 360 throw MakeTypeError("observe_global_proxy", ["observe"]); | 360 throw MakeTypeError("observe_global_proxy", ["observe"]); |
| 361 if (!IS_SPEC_FUNCTION(callback)) | 361 if (!IS_SPEC_FUNCTION(callback)) |
| 362 throw MakeTypeError("observe_non_function", ["observe"]); | 362 throw MakeTypeError("observe_non_function", ["observe"]); |
| 363 if (ObjectIsFrozen(callback)) | 363 if (ObjectIsFrozen(callback)) |
| 364 throw MakeTypeError("observe_callback_frozen"); | 364 throw MakeTypeError("observe_callback_frozen"); |
| 365 if (!AcceptArgIsValid(acceptList)) | 365 if (!AcceptArgIsValid(acceptList)) |
| 366 throw MakeTypeError("observe_accept_invalid"); | 366 throw MakeTypeError("observe_accept_invalid"); |
| 367 | 367 |
| 368 return %NativeObjectObserve(object, callback, acceptList); | 368 return %ObjectObserveInObjectContext(object, callback, acceptList); |
| 369 } | 369 } |
| 370 | 370 |
| 371 function NativeObjectObserve(object, callback, acceptList) { | 371 function NativeObjectObserve(object, callback, acceptList) { |
| 372 var objectInfo = ObjectInfoGetOrCreate(object); | 372 var objectInfo = ObjectInfoGetOrCreate(object); |
| 373 ObjectInfoAddObserver(objectInfo, callback, acceptList); | 373 ObjectInfoAddObserver(objectInfo, callback, acceptList); |
| 374 return object; | 374 return object; |
| 375 } | 375 } |
| 376 | 376 |
| 377 function ObjectUnobserve(object, callback) { | 377 function ObjectUnobserve(object, callback) { |
| 378 if (!IS_SPEC_OBJECT(object)) | 378 if (!IS_SPEC_OBJECT(object)) |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 throw MakeTypeError("called_on_non_object", ["performChange"]); | 532 throw MakeTypeError("called_on_non_object", ["performChange"]); |
| 533 | 533 |
| 534 var objectInfo = ObjectInfoGetFromNotifier(this); | 534 var objectInfo = ObjectInfoGetFromNotifier(this); |
| 535 if (IS_UNDEFINED(objectInfo)) | 535 if (IS_UNDEFINED(objectInfo)) |
| 536 throw MakeTypeError("observe_notify_non_notifier"); | 536 throw MakeTypeError("observe_notify_non_notifier"); |
| 537 if (!IS_STRING(changeType)) | 537 if (!IS_STRING(changeType)) |
| 538 throw MakeTypeError("observe_perform_non_string"); | 538 throw MakeTypeError("observe_perform_non_string"); |
| 539 if (!IS_SPEC_FUNCTION(changeFn)) | 539 if (!IS_SPEC_FUNCTION(changeFn)) |
| 540 throw MakeTypeError("observe_perform_non_function"); | 540 throw MakeTypeError("observe_perform_non_function"); |
| 541 | 541 |
| 542 return %NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) | 542 return %ObjectNotifierPerformChangeInObjectContext( |
| 543 objectInfo, changeType, changeFn); |
| 543 } | 544 } |
| 544 | 545 |
| 545 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) { | 546 function NativeObjectNotifierPerformChange(objectInfo, changeType, changeFn) { |
| 546 ObjectInfoAddPerformingType(objectInfo, changeType); | 547 ObjectInfoAddPerformingType(objectInfo, changeType); |
| 547 | 548 |
| 548 var changeRecord; | 549 var changeRecord; |
| 549 try { | 550 try { |
| 550 changeRecord = %_CallFunction(UNDEFINED, changeFn); | 551 changeRecord = %_CallFunction(UNDEFINED, changeFn); |
| 551 } finally { | 552 } finally { |
| 552 ObjectInfoRemovePerformingType(objectInfo, changeType); | 553 ObjectInfoRemovePerformingType(objectInfo, changeType); |
| 553 } | 554 } |
| 554 | 555 |
| 555 if (IS_SPEC_OBJECT(changeRecord)) | 556 if (IS_SPEC_OBJECT(changeRecord)) |
| 556 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, changeType); | 557 ObjectInfoEnqueueExternalChangeRecord(objectInfo, changeRecord, changeType); |
| 557 } | 558 } |
| 558 | 559 |
| 559 function ObjectGetNotifier(object) { | 560 function ObjectGetNotifier(object) { |
| 560 if (!IS_SPEC_OBJECT(object)) | 561 if (!IS_SPEC_OBJECT(object)) |
| 561 throw MakeTypeError("observe_non_object", ["getNotifier"]); | 562 throw MakeTypeError("observe_non_object", ["getNotifier"]); |
| 562 if (%IsJSGlobalProxy(object)) | 563 if (%IsJSGlobalProxy(object)) |
| 563 throw MakeTypeError("observe_global_proxy", ["getNotifier"]); | 564 throw MakeTypeError("observe_global_proxy", ["getNotifier"]); |
| 564 | 565 |
| 565 if (ObjectIsFrozen(object)) return null; | 566 if (ObjectIsFrozen(object)) return null; |
| 566 | 567 |
| 567 if (!%ObjectWasCreatedInCurrentOrigin(object)) return null; | 568 if (!%ObjectWasCreatedInCurrentOrigin(object)) return null; |
| 568 | 569 |
| 569 return %NativeObjectGetNotifier(object); | 570 return %ObjectGetNotifierInObjectContext(object); |
| 570 } | 571 } |
| 571 | 572 |
| 572 function NativeObjectGetNotifier(object) { | 573 function NativeObjectGetNotifier(object) { |
| 573 var objectInfo = ObjectInfoGetOrCreate(object); | 574 var objectInfo = ObjectInfoGetOrCreate(object); |
| 574 return ObjectInfoGetNotifier(objectInfo); | 575 return ObjectInfoGetNotifier(objectInfo); |
| 575 } | 576 } |
| 576 | 577 |
| 577 function CallbackDeliverPending(callback) { | 578 function CallbackDeliverPending(callback) { |
| 578 var callbackInfo = GetCallbackInfoMap().get(callback); | 579 var callbackInfo = GetCallbackInfoMap().get(callback); |
| 579 if (IS_UNDEFINED(callbackInfo) || IS_NUMBER(callbackInfo)) | 580 if (IS_UNDEFINED(callbackInfo) || IS_NUMBER(callbackInfo)) |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 "observe", ArrayObserve, | 626 "observe", ArrayObserve, |
| 626 "unobserve", ArrayUnobserve | 627 "unobserve", ArrayUnobserve |
| 627 )); | 628 )); |
| 628 InstallFunctions(notifierPrototype, DONT_ENUM, $Array( | 629 InstallFunctions(notifierPrototype, DONT_ENUM, $Array( |
| 629 "notify", ObjectNotifierNotify, | 630 "notify", ObjectNotifierNotify, |
| 630 "performChange", ObjectNotifierPerformChange | 631 "performChange", ObjectNotifierPerformChange |
| 631 )); | 632 )); |
| 632 } | 633 } |
| 633 | 634 |
| 634 SetupObjectObserve(); | 635 SetupObjectObserve(); |
| OLD | NEW |