| Index: test/cctest/test-object-observe.cc | 
| diff --git a/test/cctest/test-object-observe.cc b/test/cctest/test-object-observe.cc | 
| index abd10117dd49ea4fa5c8f7191dc66ddb42f6fed9..07db3a3916e977b1cf29f040757e3544c5af6f5c 100644 | 
| --- a/test/cctest/test-object-observe.cc | 
| +++ b/test/cctest/test-object-observe.cc | 
| @@ -279,6 +279,7 @@ TEST(GlobalObjectObservation) { | 
| CHECK_EQ(3, CompileRun("records.length")->Int32Value()); | 
| } | 
|  | 
| + | 
| struct RecordExpectation { | 
| Handle<Value> object; | 
| const char* type; | 
| @@ -310,6 +311,9 @@ static void ExpectRecords(Handle<Value> records, | 
| } | 
| } | 
|  | 
| +#define EXPECT_RECORDS(records, expectations) \ | 
| +    ExpectRecords(records, expectations, ARRAY_SIZE(expectations)) | 
| + | 
| TEST(APITestBasicMutation) { | 
| HarmonyIsolate isolate; | 
| HandleScope scope; | 
| @@ -348,7 +352,50 @@ TEST(APITestBasicMutation) { | 
| { obj, "deleted", "1", Number::New(5) }, | 
| { obj, "deleted", "1.1", Number::New(6) } | 
| }; | 
| -  ExpectRecords(CompileRun("records"), | 
| -                expected_records, | 
| -                ARRAY_SIZE(expected_records)); | 
| +  EXPECT_RECORDS(CompileRun("records"), expected_records); | 
| +} | 
| + | 
| +TEST(HiddenPrototypeObservation) { | 
| +  HarmonyIsolate isolate; | 
| +  HandleScope scope; | 
| +  LocalContext context; | 
| +  Handle<FunctionTemplate> tmpl = FunctionTemplate::New(); | 
| +  tmpl->SetHiddenPrototype(true); | 
| +  tmpl->InstanceTemplate()->Set(String::New("foo"), Number::New(75)); | 
| +  Handle<Object> proto = tmpl->GetFunction()->NewInstance(); | 
| +  Handle<Object> obj = Object::New(); | 
| +  obj->SetPrototype(proto); | 
| +  context->Global()->Set(String::New("obj"), obj); | 
| +  context->Global()->Set(String::New("proto"), proto); | 
| +  CompileRun( | 
| +      "var records;" | 
| +      "function observer(r) { records = r; };" | 
| +      "Object.observe(obj, observer);" | 
| +      "obj.foo = 41;"  // triggers a notification | 
| +      "proto.foo = 42;"  // does not trigger a notification | 
| +      ); | 
| +  const RecordExpectation expected_records[] = { | 
| +    { obj, "updated", "foo", Number::New(75) } | 
| +  }; | 
| +  EXPECT_RECORDS(CompileRun("records"), expected_records); | 
| +  obj->SetPrototype(Null()); | 
| +  CompileRun("obj.foo = 43"); | 
| +  const RecordExpectation expected_records2[] = { | 
| +    { obj, "new", "foo", Handle<Value>() } | 
| +  }; | 
| +  EXPECT_RECORDS(CompileRun("records"), expected_records2); | 
| +  obj->SetPrototype(proto); | 
| +  CompileRun( | 
| +      "Object.observe(proto, observer);" | 
| +      "proto.bar = 1;" | 
| +      "Object.unobserve(obj, observer);" | 
| +      "obj.foo = 44;" | 
| +      ); | 
| +  const RecordExpectation expected_records3[] = { | 
| +    { proto, "new", "bar", Handle<Value>() } | 
| +    // TODO(adamk): The below record should be emitted since proto is observed | 
| +    // and has been modified. Not clear if this happens in practice. | 
| +    // { proto, "updated", "foo", Number::New(43) } | 
| +  }; | 
| +  EXPECT_RECORDS(CompileRun("records"), expected_records3); | 
| } | 
|  |