| Index: test/cctest/test-access-checks.cc | 
| diff --git a/test/cctest/test-access-checks.cc b/test/cctest/test-access-checks.cc | 
| index 727444b532f04eb3881dddbcaf284178b1f9a2db..f260a15c6e4a29efc5fb18906c81a353390c91e0 100644 | 
| --- a/test/cctest/test-access-checks.cc | 
| +++ b/test/cctest/test-access-checks.cc | 
| @@ -102,6 +102,23 @@ void IndexedEnumerator(const v8::PropertyCallbackInfo<v8::Array>& info) { | 
| info.GetReturnValue().Set(names); | 
| } | 
|  | 
| +void MethodGetter(v8::Local<v8::Name> property, | 
| +                  const v8::PropertyCallbackInfo<v8::Value>& info) { | 
| +  v8::Isolate* isolate = info.GetIsolate(); | 
| +  v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 
| + | 
| +  v8::Local<v8::External> data = info.Data().As<v8::External>(); | 
| +  v8::Local<v8::FunctionTemplate>& function_template = | 
| +      *reinterpret_cast<v8::Local<v8::FunctionTemplate>*>(data->Value()); | 
| + | 
| +  info.GetReturnValue().Set( | 
| +      function_template->GetFunction(context).ToLocalChecked()); | 
| +} | 
| + | 
| +void MethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { | 
| +  info.GetReturnValue().Set(8); | 
| +} | 
| + | 
| void NamedGetterThrowsException( | 
| v8::Local<v8::Name> property, | 
| const v8::PropertyCallbackInfo<v8::Value>& info) { | 
| @@ -288,6 +305,44 @@ TEST(AccessCheckWithInterceptor) { | 
| CheckCrossContextAccess(isolate, context1, context0->Global()); | 
| } | 
|  | 
| +TEST(CallFunctionWithRemoteContextReceiver) { | 
| +  v8::Isolate* isolate = CcTest::isolate(); | 
| +  v8::HandleScope scope(isolate); | 
| +  v8::Local<v8::FunctionTemplate> global_template = | 
| +      v8::FunctionTemplate::New(isolate); | 
| + | 
| +  v8::Local<v8::Signature> signature = | 
| +      v8::Signature::New(isolate, global_template); | 
| +  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New( | 
| +      isolate, MethodCallback, v8::External::New(isolate, &function_template), | 
| +      signature); | 
| + | 
| +  global_template->InstanceTemplate()->SetAccessCheckCallbackAndHandler( | 
| +      AccessCheck, v8::NamedPropertyHandlerConfiguration( | 
| +                       MethodGetter, nullptr, nullptr, nullptr, nullptr, | 
| +                       v8::External::New(isolate, &function_template)), | 
| +      v8::IndexedPropertyHandlerConfiguration()); | 
| + | 
| +  v8::Local<v8::Object> accessed_object = | 
| +      v8::Context::NewRemoteContext(isolate, | 
| +                                    global_template->InstanceTemplate()) | 
| +          .ToLocalChecked(); | 
| +  v8::Local<v8::Context> accessing_context = | 
| +      v8::Context::New(isolate, nullptr, global_template->InstanceTemplate()); | 
| + | 
| +  v8::HandleScope handle_scope(isolate); | 
| +  accessing_context->Global() | 
| +      ->Set(accessing_context, v8_str("other"), accessed_object) | 
| +      .FromJust(); | 
| +  v8::Context::Scope context_scope(accessing_context); | 
| + | 
| +  { | 
| +    v8::TryCatch try_catch(isolate); | 
| +    ExpectInt32("this.other.method()", 8); | 
| +    CHECK(!try_catch.HasCaught()); | 
| +  } | 
| +} | 
| + | 
| TEST(AccessCheckWithExceptionThrowingInterceptor) { | 
| v8::Isolate* isolate = CcTest::isolate(); | 
| isolate->SetFailedAccessCheckCallbackFunction([](v8::Local<v8::Object> target, | 
|  |