Reviewers: aandrey, dcarney, Yang,

Description:
Provide method for getting Isolate by v8::Message

v8::Message::GetIsolate will allow to avoid v8::Isolate::GetCurrent calls in
Blink message listeners.

BUG=None
LOG=Y

Please review this at https://codereview.chromium.org/1015643002/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+18, -0 lines):
  M include/v8.h
  M src/api.cc
  M test/cctest/test-api.cc


Index: include/v8.h
diff --git a/include/v8.h b/include/v8.h
index db625eeb4242be3d594628fdf8f2f450d0ef894e..89ffa0275ff97d8ca576e649285ef23591adc633 100644
--- a/include/v8.h
+++ b/include/v8.h
@@ -1478,6 +1478,11 @@ class V8_EXPORT Message {
    */
   bool IsSharedCrossOrigin() const;

+  /**
+   * Returns the Isolate where the error occured.
+   */
+  Isolate* GetIsolate() const;
+
   // TODO(1245381): Print to a string instead of on a FILE.
   static void PrintCurrentStackTrace(Isolate* isolate, FILE* out);

Index: src/api.cc
diff --git a/src/api.cc b/src/api.cc
index 7eeb57d75699ecfaae6bfa82a3ebd73a62593d1e..3166046091153217c37f9963a321ee2907ebebb3 100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -2301,6 +2301,11 @@ bool Message::IsSharedCrossOrigin() const {
 }


+v8::Isolate* Message::GetIsolate() const {
+  return reinterpret_cast<Isolate*>(Utils::OpenHandle(this)->GetIsolate());
+}
+
+
 MaybeLocal<String> Message::GetSourceLine(Local<Context> context) const {
   PREPARE_FOR_EXECUTION(context, "v8::Message::GetSourceLine()", String);
   i::Handle<i::Object> result;
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index 7016bf7ac2b135bfc444664b92d38af527198f2d..30903a114f8c346f1df1443fb72b201e9f85b2b5 100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -3840,6 +3840,7 @@ static void check_message_1(v8::Handle<v8::Message> message,
   CHECK(data->IsNumber());
   CHECK_EQ(1337, data->Int32Value());
   CHECK(!message->IsSharedCrossOrigin());
+  CHECK_EQ(CcTest::isolate(), message->GetIsolate());
   message_received = true;
 }

@@ -3861,6 +3862,9 @@ static void check_message_2(v8::Handle<v8::Message> message,
                             v8::Handle<Value> data) {
   LocalContext context;
   CHECK(data->IsObject());
+  v8::Handle<v8::Object> data_obj = data.As<v8::Object>();
+  CHECK(message->GetIsolate());
+  CHECK_EQ(data_obj->GetIsolate(), message->GetIsolate());
   v8::Local<v8::Value> hidden_property =
       v8::Object::Cast(*data)->GetHiddenValue(v8_str("hidden key"));
   CHECK(v8_str("hidden value")->Equals(hidden_property));
@@ -3893,6 +3897,7 @@ static void check_message_3(v8::Handle<v8::Message> message, CHECK(message->GetScriptOrigin().ResourceIsEmbedderDebugScript()->Value());
   CHECK_EQ(6.75, message->GetScriptOrigin().ResourceName()->NumberValue());
   CHECK_EQ(7.40, message->GetScriptOrigin().SourceMapUrl()->NumberValue());
+  CHECK_EQ(CcTest::isolate(), message->GetIsolate());
   message_received = true;
 }

@@ -3921,6 +3926,7 @@ static void check_message_4(v8::Handle<v8::Message> message,
                             v8::Handle<Value> data) {
   CHECK(!message->IsSharedCrossOrigin());
   CHECK_EQ(6.75, message->GetScriptOrigin().ResourceName()->NumberValue());
+  CHECK_EQ(CcTest::isolate(), message->GetIsolate());
   message_received = true;
 }

@@ -3948,6 +3954,7 @@ static void check_message_5a(v8::Handle<v8::Message> message,
                              v8::Handle<Value> data) {
   CHECK(message->IsSharedCrossOrigin());
   CHECK_EQ(6.75, message->GetScriptOrigin().ResourceName()->NumberValue());
+  CHECK_EQ(CcTest::isolate(), message->GetIsolate());
   message_received = true;
 }

@@ -3956,6 +3963,7 @@ static void check_message_5b(v8::Handle<v8::Message> message,
                              v8::Handle<Value> data) {
   CHECK(!message->IsSharedCrossOrigin());
   CHECK_EQ(6.75, message->GetScriptOrigin().ResourceName()->NumberValue());
+  CHECK_EQ(CcTest::isolate(), message->GetIsolate());
   message_received = true;
 }



--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to