| Index: src/objects.cc
 | 
| diff --git a/src/objects.cc b/src/objects.cc
 | 
| index ce840e228d6851c83bcfaee439584c724718d362..49129ba6039f71195a398e8e13c824403095db2a 100644
 | 
| --- a/src/objects.cc
 | 
| +++ b/src/objects.cc
 | 
| @@ -6135,7 +6135,8 @@ Maybe<bool> JSReceiver::DeletePropertyOrElement(Handle<JSReceiver> object,
 | 
|  // static
 | 
|  Object* JSReceiver::DefineProperty(Isolate* isolate, Handle<Object> object,
 | 
|                                     Handle<Object> key,
 | 
| -                                   Handle<Object> attributes) {
 | 
| +                                   Handle<Object> attributes,
 | 
| +                                   CallInterceptors call_interceptors) {
 | 
|    // 1. If Type(O) is not Object, throw a TypeError exception.
 | 
|    if (!object->IsJSReceiver()) {
 | 
|      Handle<String> fun_name =
 | 
| @@ -6153,8 +6154,9 @@ Object* JSReceiver::DefineProperty(Isolate* isolate, Handle<Object> object,
 | 
|      return isolate->heap()->exception();
 | 
|    }
 | 
|    // 6. Let success be DefinePropertyOrThrow(O,key, desc).
 | 
| -  Maybe<bool> success = DefineOwnProperty(
 | 
| -      isolate, Handle<JSReceiver>::cast(object), key, &desc, THROW_ON_ERROR);
 | 
| +  Maybe<bool> success =
 | 
| +      DefineOwnProperty(isolate, Handle<JSReceiver>::cast(object), key, &desc,
 | 
| +                        THROW_ON_ERROR, call_interceptors);
 | 
|    // 7. ReturnIfAbrupt(success).
 | 
|    MAYBE_RETURN(success, isolate->heap()->exception());
 | 
|    CHECK(success.FromJust());
 | 
| @@ -6162,7 +6164,6 @@ Object* JSReceiver::DefineProperty(Isolate* isolate, Handle<Object> object,
 | 
|    return *object;
 | 
|  }
 | 
|  
 | 
| -
 | 
|  // ES6 19.1.2.3.1
 | 
|  // static
 | 
|  MaybeHandle<Object> JSReceiver::DefineProperties(Isolate* isolate,
 | 
| @@ -6246,18 +6247,22 @@ Maybe<bool> JSReceiver::DefineOwnProperty(Isolate* isolate,
 | 
|                                            Handle<JSReceiver> object,
 | 
|                                            Handle<Object> key,
 | 
|                                            PropertyDescriptor* desc,
 | 
| -                                          ShouldThrow should_throw) {
 | 
| +                                          ShouldThrow should_throw,
 | 
| +                                          CallInterceptors call_interceptors) {
 | 
|    if (object->IsJSArray()) {
 | 
|      return JSArray::DefineOwnProperty(isolate, Handle<JSArray>::cast(object),
 | 
| -                                      key, desc, should_throw);
 | 
| +                                      key, desc, should_throw,
 | 
| +                                      call_interceptors);
 | 
|    }
 | 
|    if (object->IsJSProxy()) {
 | 
|      return JSProxy::DefineOwnProperty(isolate, Handle<JSProxy>::cast(object),
 | 
| -                                      key, desc, should_throw);
 | 
| +                                      key, desc, should_throw,
 | 
| +                                      call_interceptors);
 | 
|    }
 | 
|    if (object->IsJSTypedArray()) {
 | 
|      return JSTypedArray::DefineOwnProperty(
 | 
| -        isolate, Handle<JSTypedArray>::cast(object), key, desc, should_throw);
 | 
| +        isolate, Handle<JSTypedArray>::cast(object), key, desc, should_throw,
 | 
| +        call_interceptors);
 | 
|    }
 | 
|    // TODO(neis): Special case for JSModuleNamespace?
 | 
|  
 | 
| @@ -6265,20 +6270,25 @@ Maybe<bool> JSReceiver::DefineOwnProperty(Isolate* isolate,
 | 
|    // DefineOwnPropertyIgnoreAttributes, can handle arguments
 | 
|    // (ES#sec-arguments-exotic-objects-defineownproperty-p-desc).
 | 
|    return OrdinaryDefineOwnProperty(isolate, Handle<JSObject>::cast(object), key,
 | 
| -                                   desc, should_throw);
 | 
| +                                   desc, should_throw, call_interceptors);
 | 
|  }
 | 
|  
 | 
| -
 | 
|  // static
 | 
| -Maybe<bool> JSReceiver::OrdinaryDefineOwnProperty(Isolate* isolate,
 | 
| -                                                  Handle<JSObject> object,
 | 
| -                                                  Handle<Object> key,
 | 
| -                                                  PropertyDescriptor* desc,
 | 
| -                                                  ShouldThrow should_throw) {
 | 
| +Maybe<bool> JSReceiver::OrdinaryDefineOwnProperty(
 | 
| +    Isolate* isolate, Handle<JSObject> object, Handle<Object> key,
 | 
| +    PropertyDescriptor* desc, ShouldThrow should_throw,
 | 
| +    CallInterceptors call_interceptors) {
 | 
|    bool success = false;
 | 
|    DCHECK(key->IsName() || key->IsNumber());  // |key| is a PropertyKey...
 | 
| +
 | 
| +  LookupIterator::Configuration iterator_config = LookupIterator::OWN;
 | 
| +  if (call_interceptors == CallInterceptors::kSkip) {
 | 
| +    iterator_config = LookupIterator::OWN_SKIP_INTERCEPTOR;
 | 
| +  }
 | 
| +
 | 
|    LookupIterator it = LookupIterator::PropertyOrElement(
 | 
| -      isolate, object, key, &success, LookupIterator::OWN);
 | 
| +      isolate, object, key, &success, iterator_config);
 | 
| +
 | 
|    DCHECK(success);  // ...so creating a LookupIterator can't fail.
 | 
|  
 | 
|    // Deal with access checks first.
 | 
| @@ -6675,13 +6685,14 @@ bool PropertyKeyToArrayIndex(Handle<Object> index_obj, uint32_t* output) {
 | 
|  Maybe<bool> JSArray::DefineOwnProperty(Isolate* isolate, Handle<JSArray> o,
 | 
|                                         Handle<Object> name,
 | 
|                                         PropertyDescriptor* desc,
 | 
| -                                       ShouldThrow should_throw) {
 | 
| +                                       ShouldThrow should_throw,
 | 
| +                                       CallInterceptors call_interceptors) {
 | 
|    // 1. Assert: IsPropertyKey(P) is true. ("P" is |name|.)
 | 
|    // 2. If P is "length", then:
 | 
|    // TODO(jkummerow): Check if we need slow string comparison.
 | 
|    if (*name == isolate->heap()->length_string()) {
 | 
|      // 2a. Return ArraySetLength(A, Desc).
 | 
| -    return ArraySetLength(isolate, o, desc, should_throw);
 | 
| +    return ArraySetLength(isolate, o, desc, should_throw, call_interceptors);
 | 
|    }
 | 
|    // 3. Else if P is an array index, then:
 | 
|    uint32_t index = 0;
 | 
| @@ -6707,8 +6718,8 @@ Maybe<bool> JSArray::DefineOwnProperty(Isolate* isolate, Handle<JSArray> o,
 | 
|                       NewTypeError(MessageTemplate::kDefineDisallowed, name));
 | 
|      }
 | 
|      // 3g. Let succeeded be OrdinaryDefineOwnProperty(A, P, Desc).
 | 
| -    Maybe<bool> succeeded =
 | 
| -        OrdinaryDefineOwnProperty(isolate, o, name, desc, should_throw);
 | 
| +    Maybe<bool> succeeded = OrdinaryDefineOwnProperty(
 | 
| +        isolate, o, name, desc, should_throw, call_interceptors);
 | 
|      // 3h. Assert: succeeded is not an abrupt completion.
 | 
|      //     In our case, if should_throw == THROW_ON_ERROR, it can be!
 | 
|      // 3i. If succeeded is false, return false.
 | 
| @@ -6719,9 +6730,9 @@ Maybe<bool> JSArray::DefineOwnProperty(Isolate* isolate, Handle<JSArray> o,
 | 
|        old_len_desc.set_value(isolate->factory()->NewNumberFromUint(index + 1));
 | 
|        // 3j ii. Let succeeded be
 | 
|        //        OrdinaryDefineOwnProperty(A, "length", oldLenDesc).
 | 
| -      succeeded = OrdinaryDefineOwnProperty(isolate, o,
 | 
| -                                            isolate->factory()->length_string(),
 | 
| -                                            &old_len_desc, should_throw);
 | 
| +      succeeded = OrdinaryDefineOwnProperty(
 | 
| +          isolate, o, isolate->factory()->length_string(), &old_len_desc,
 | 
| +          should_throw, call_interceptors);
 | 
|        // 3j iii. Assert: succeeded is true.
 | 
|        DCHECK(succeeded.FromJust());
 | 
|        USE(succeeded);
 | 
| @@ -6731,7 +6742,8 @@ Maybe<bool> JSArray::DefineOwnProperty(Isolate* isolate, Handle<JSArray> o,
 | 
|    }
 | 
|  
 | 
|    // 4. Return OrdinaryDefineOwnProperty(A, P, Desc).
 | 
| -  return OrdinaryDefineOwnProperty(isolate, o, name, desc, should_throw);
 | 
| +  return OrdinaryDefineOwnProperty(isolate, o, name, desc, should_throw,
 | 
| +                                   call_interceptors);
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -6776,12 +6788,14 @@ bool JSArray::AnythingToArrayLength(Isolate* isolate,
 | 
|  // static
 | 
|  Maybe<bool> JSArray::ArraySetLength(Isolate* isolate, Handle<JSArray> a,
 | 
|                                      PropertyDescriptor* desc,
 | 
| -                                    ShouldThrow should_throw) {
 | 
| +                                    ShouldThrow should_throw,
 | 
| +                                    CallInterceptors call_interceptors) {
 | 
|    // 1. If the [[Value]] field of Desc is absent, then
 | 
|    if (!desc->has_value()) {
 | 
|      // 1a. Return OrdinaryDefineOwnProperty(A, "length", Desc).
 | 
| -    return OrdinaryDefineOwnProperty(
 | 
| -        isolate, a, isolate->factory()->length_string(), desc, should_throw);
 | 
| +    return OrdinaryDefineOwnProperty(isolate, a,
 | 
| +                                     isolate->factory()->length_string(), desc,
 | 
| +                                     should_throw, call_interceptors);
 | 
|    }
 | 
|    // 2. Let newLenDesc be a copy of Desc.
 | 
|    // (Actual copying is not necessary.)
 | 
| @@ -6809,9 +6823,9 @@ Maybe<bool> JSArray::ArraySetLength(Isolate* isolate, Handle<JSArray> a,
 | 
|      // 8. Set newLenDesc.[[Value]] to newLen.
 | 
|      // 12a. Return OrdinaryDefineOwnProperty(A, "length", newLenDesc).
 | 
|      new_len_desc->set_value(isolate->factory()->NewNumberFromUint(new_len));
 | 
| -    return OrdinaryDefineOwnProperty(isolate, a,
 | 
| -                                     isolate->factory()->length_string(),
 | 
| -                                     new_len_desc, should_throw);
 | 
| +    return OrdinaryDefineOwnProperty(
 | 
| +        isolate, a, isolate->factory()->length_string(), new_len_desc,
 | 
| +        should_throw, call_interceptors);
 | 
|    }
 | 
|    // 13. If oldLenDesc.[[Writable]] is false, return false.
 | 
|    if (!old_len_desc.writable()) {
 | 
| @@ -6840,7 +6854,7 @@ Maybe<bool> JSArray::ArraySetLength(Isolate* isolate, Handle<JSArray> a,
 | 
|      readonly.set_writable(false);
 | 
|      Maybe<bool> success = OrdinaryDefineOwnProperty(
 | 
|          isolate, a, isolate->factory()->length_string(), &readonly,
 | 
| -        should_throw);
 | 
| +        should_throw, call_interceptors);
 | 
|      DCHECK(success.FromJust());
 | 
|      USE(success);
 | 
|    }
 | 
| @@ -6864,7 +6878,8 @@ Maybe<bool> JSArray::ArraySetLength(Isolate* isolate, Handle<JSArray> a,
 | 
|  Maybe<bool> JSProxy::DefineOwnProperty(Isolate* isolate, Handle<JSProxy> proxy,
 | 
|                                         Handle<Object> key,
 | 
|                                         PropertyDescriptor* desc,
 | 
| -                                       ShouldThrow should_throw) {
 | 
| +                                       ShouldThrow should_throw,
 | 
| +                                       CallInterceptors call_interceptors) {
 | 
|    STACK_CHECK(isolate, Nothing<bool>());
 | 
|    if (key->IsSymbol() && Handle<Symbol>::cast(key)->IsPrivate()) {
 | 
|      return SetPrivateProperty(isolate, proxy, Handle<Symbol>::cast(key), desc,
 | 
| @@ -6894,7 +6909,7 @@ Maybe<bool> JSProxy::DefineOwnProperty(Isolate* isolate, Handle<JSProxy> proxy,
 | 
|    if (trap->IsUndefined(isolate)) {
 | 
|      // 7a. Return target.[[DefineOwnProperty]](P, Desc).
 | 
|      return JSReceiver::DefineOwnProperty(isolate, target, key, desc,
 | 
| -                                         should_throw);
 | 
| +                                         should_throw, call_interceptors);
 | 
|    }
 | 
|    // 8. Let descObj be FromPropertyDescriptor(Desc).
 | 
|    Handle<Object> desc_obj = desc->ToObject(isolate);
 | 
| @@ -17117,11 +17132,10 @@ bool CanonicalNumericIndexString(Isolate* isolate, Handle<Object> s,
 | 
|  
 | 
|  // ES#sec-integer-indexed-exotic-objects-defineownproperty-p-desc
 | 
|  // static
 | 
| -Maybe<bool> JSTypedArray::DefineOwnProperty(Isolate* isolate,
 | 
| -                                            Handle<JSTypedArray> o,
 | 
| -                                            Handle<Object> key,
 | 
| -                                            PropertyDescriptor* desc,
 | 
| -                                            ShouldThrow should_throw) {
 | 
| +Maybe<bool> JSTypedArray::DefineOwnProperty(
 | 
| +    Isolate* isolate, Handle<JSTypedArray> o, Handle<Object> key,
 | 
| +    PropertyDescriptor* desc, ShouldThrow should_throw,
 | 
| +    CallInterceptors call_interceptors) {
 | 
|    // 1. Assert: IsPropertyKey(P) is true.
 | 
|    DCHECK(key->IsName() || key->IsNumber());
 | 
|    // 2. Assert: O is an Object that has a [[ViewedArrayBuffer]] internal slot.
 | 
| @@ -17182,7 +17196,8 @@ Maybe<bool> JSTypedArray::DefineOwnProperty(Isolate* isolate,
 | 
|      }
 | 
|    }
 | 
|    // 4. Return ! OrdinaryDefineOwnProperty(O, P, Desc).
 | 
| -  return OrdinaryDefineOwnProperty(isolate, o, key, desc, should_throw);
 | 
| +  return OrdinaryDefineOwnProperty(isolate, o, key, desc, should_throw,
 | 
| +                                   call_interceptors);
 | 
|  }
 | 
|  
 | 
|  ExternalArrayType JSTypedArray::type() {
 | 
| 
 |