Index: content/renderer/v8_value_converter_impl_unittest.cc |
diff --git a/content/renderer/v8_value_converter_impl_unittest.cc b/content/renderer/v8_value_converter_impl_unittest.cc |
index a5ce2474452798f4dc13896c37187b5ea79ede09..ad9232b76929c4d690edfe3573ac6b75c5188c0d 100644 |
--- a/content/renderer/v8_value_converter_impl_unittest.cc |
+++ b/content/renderer/v8_value_converter_impl_unittest.cc |
@@ -55,18 +55,20 @@ v8::Handle<v8::Value> NamedCallbackGetter(v8::Local<v8::String> name, |
} // namespace |
class V8ValueConverterImplTest : public testing::Test { |
+ public: |
+ V8ValueConverterImplTest() |
+ : isolate_(v8::Isolate::GetCurrent()) { |
+ } |
+ |
protected: |
virtual void SetUp() { |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New(); |
- v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
- // TODO(marja): Use v8::Persistent::Reset here. |
- context_ = v8::Persistent<v8::Context>( |
- isolate, v8::Context::New(isolate, NULL, global)); |
+ context_.Reset(isolate_, v8::Context::New(isolate_, NULL, global)); |
} |
virtual void TearDown() { |
- context_.Dispose(context_->GetIsolate()); |
+ context_.Dispose(); |
} |
std::string GetString(base::DictionaryValue* value, const std::string& key) { |
@@ -148,7 +150,9 @@ class V8ValueConverterImplTest : public testing::Test { |
v8::Handle<v8::Value> val, |
base::Value::Type expected_type, |
scoped_ptr<base::Value> expected_value) { |
- scoped_ptr<base::Value> raw(converter.FromV8Value(val, context_)); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
+ scoped_ptr<base::Value> raw(converter.FromV8Value(val, context)); |
if (expected_value) { |
ASSERT_TRUE(raw.get()); |
@@ -162,7 +166,7 @@ class V8ValueConverterImplTest : public testing::Test { |
object->Set(v8::String::New("test"), val); |
scoped_ptr<base::DictionaryValue> dictionary( |
static_cast<base::DictionaryValue*>( |
- converter.FromV8Value(object, context_))); |
+ converter.FromV8Value(object, context))); |
ASSERT_TRUE(dictionary.get()); |
if (expected_value) { |
@@ -177,7 +181,7 @@ class V8ValueConverterImplTest : public testing::Test { |
v8::Handle<v8::Array> array(v8::Array::New()); |
array->Set(0, val); |
scoped_ptr<base::ListValue> list( |
- static_cast<base::ListValue*>(converter.FromV8Value(array, context_))); |
+ static_cast<base::ListValue*>(converter.FromV8Value(array, context))); |
ASSERT_TRUE(list.get()); |
if (expected_value) { |
base::Value* temp = NULL; |
@@ -193,6 +197,8 @@ class V8ValueConverterImplTest : public testing::Test { |
} |
} |
+ v8::Isolate* isolate_; |
+ |
// Context for the JavaScript in the test. |
v8::Persistent<v8::Context> context_; |
}; |
@@ -219,12 +225,14 @@ TEST_F(V8ValueConverterImplTest, BasicRoundTrip) { |
" \"empty-list\": [], \n" |
"}"); |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
V8ValueConverterImpl converter; |
v8::Handle<v8::Object> v8_object = |
- converter.ToV8Value(original_root.get(), context_).As<v8::Object>(); |
+ converter.ToV8Value(original_root.get(), context).As<v8::Object>(); |
ASSERT_FALSE(v8_object.IsEmpty()); |
EXPECT_EQ(static_cast<const base::DictionaryValue&>(*original_root).size(), |
@@ -245,7 +253,7 @@ TEST_F(V8ValueConverterImplTest, BasicRoundTrip) { |
EXPECT_TRUE(v8_object->Get(v8::String::New("list"))->IsArray()); |
EXPECT_TRUE(v8_object->Get(v8::String::New("empty-list"))->IsArray()); |
- scoped_ptr<base::Value> new_root(converter.FromV8Value(v8_object, context_)); |
+ scoped_ptr<base::Value> new_root(converter.FromV8Value(v8_object, context)); |
EXPECT_NE(original_root.get(), new_root.get()); |
EXPECT_TRUE(original_root->Equals(new_root.get())); |
} |
@@ -254,20 +262,24 @@ TEST_F(V8ValueConverterImplTest, KeysWithDots) { |
scoped_ptr<base::Value> original = |
base::test::ParseJson("{ \"foo.bar\": \"baz\" }"); |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
V8ValueConverterImpl converter; |
scoped_ptr<base::Value> copy( |
converter.FromV8Value( |
- converter.ToV8Value(original.get(), context_), context_)); |
+ converter.ToV8Value(original.get(), context), context)); |
EXPECT_TRUE(original->Equals(copy.get())); |
} |
TEST_F(V8ValueConverterImplTest, ObjectExceptions) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
// Set up objects to throw when reading or writing 'foo'. |
const char* source = |
@@ -286,7 +298,7 @@ TEST_F(V8ValueConverterImplTest, ObjectExceptions) { |
V8ValueConverterImpl converter; |
scoped_ptr<base::DictionaryValue> converted( |
static_cast<base::DictionaryValue*>( |
- converter.FromV8Value(object, context_))); |
+ converter.FromV8Value(object, context))); |
EXPECT_TRUE(converted.get()); |
// http://code.google.com/p/v8/issues/detail?id=1342 |
// EXPECT_EQ(2u, converted->size()); |
@@ -297,15 +309,17 @@ TEST_F(V8ValueConverterImplTest, ObjectExceptions) { |
// Converting to v8 value should drop the foo property. |
converted->SetString("foo", "foo"); |
v8::Handle<v8::Object> copy = |
- converter.ToV8Value(converted.get(), context_).As<v8::Object>(); |
+ converter.ToV8Value(converted.get(), context).As<v8::Object>(); |
EXPECT_FALSE(copy.IsEmpty()); |
EXPECT_EQ(2u, copy->GetPropertyNames()->Length()); |
EXPECT_EQ("bar", GetString(copy, "bar")); |
} |
TEST_F(V8ValueConverterImplTest, ArrayExceptions) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
const char* source = "(function() {" |
"var arr = [];" |
@@ -324,7 +338,7 @@ TEST_F(V8ValueConverterImplTest, ArrayExceptions) { |
// Converting from v8 value should replace the first item with null. |
V8ValueConverterImpl converter; |
scoped_ptr<base::ListValue> converted(static_cast<base::ListValue*>( |
- converter.FromV8Value(array, context_))); |
+ converter.FromV8Value(array, context))); |
ASSERT_TRUE(converted.get()); |
// http://code.google.com/p/v8/issues/detail?id=1342 |
EXPECT_EQ(2u, converted->GetSize()); |
@@ -334,15 +348,15 @@ TEST_F(V8ValueConverterImplTest, ArrayExceptions) { |
converted.reset(static_cast<base::ListValue*>( |
base::test::ParseJson("[ \"foo\", \"bar\" ]").release())); |
v8::Handle<v8::Array> copy = |
- converter.ToV8Value(converted.get(), context_).As<v8::Array>(); |
+ converter.ToV8Value(converted.get(), context).As<v8::Array>(); |
ASSERT_FALSE(copy.IsEmpty()); |
EXPECT_EQ(2u, copy->Length()); |
EXPECT_EQ("bar", GetString(copy, 1)); |
} |
TEST_F(V8ValueConverterImplTest, WeirdTypes) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
v8::Handle<v8::RegExp> regex( |
v8::RegExp::New(v8::String::New("."), v8::RegExp::kNone)); |
@@ -375,8 +389,10 @@ TEST_F(V8ValueConverterImplTest, WeirdTypes) { |
} |
TEST_F(V8ValueConverterImplTest, Prototype) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
const char* source = "(function() {" |
"Object.prototype.foo = 'foo';" |
@@ -390,14 +406,16 @@ TEST_F(V8ValueConverterImplTest, Prototype) { |
V8ValueConverterImpl converter; |
scoped_ptr<base::DictionaryValue> result( |
static_cast<base::DictionaryValue*>( |
- converter.FromV8Value(object, context_))); |
+ converter.FromV8Value(object, context))); |
ASSERT_TRUE(result.get()); |
EXPECT_EQ(0u, result->size()); |
} |
TEST_F(V8ValueConverterImplTest, StripNullFromObjects) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
const char* source = "(function() {" |
"return { foo: undefined, bar: null };" |
@@ -412,14 +430,16 @@ TEST_F(V8ValueConverterImplTest, StripNullFromObjects) { |
scoped_ptr<base::DictionaryValue> result( |
static_cast<base::DictionaryValue*>( |
- converter.FromV8Value(object, context_))); |
+ converter.FromV8Value(object, context))); |
ASSERT_TRUE(result.get()); |
EXPECT_EQ(0u, result->size()); |
} |
TEST_F(V8ValueConverterImplTest, RecursiveObjects) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
V8ValueConverterImpl converter; |
@@ -430,7 +450,7 @@ TEST_F(V8ValueConverterImplTest, RecursiveObjects) { |
scoped_ptr<base::DictionaryValue> object_result( |
static_cast<base::DictionaryValue*>( |
- converter.FromV8Value(object, context_))); |
+ converter.FromV8Value(object, context))); |
ASSERT_TRUE(object_result.get()); |
EXPECT_EQ(2u, object_result->size()); |
EXPECT_TRUE(IsNull(object_result.get(), "obj")); |
@@ -441,15 +461,17 @@ TEST_F(V8ValueConverterImplTest, RecursiveObjects) { |
array->Set(1, array); |
scoped_ptr<base::ListValue> list_result( |
- static_cast<base::ListValue*>(converter.FromV8Value(array, context_))); |
+ static_cast<base::ListValue*>(converter.FromV8Value(array, context))); |
ASSERT_TRUE(list_result.get()); |
EXPECT_EQ(2u, list_result->GetSize()); |
EXPECT_TRUE(IsNull(list_result.get(), 1)); |
} |
TEST_F(V8ValueConverterImplTest, WeirdProperties) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
const char* source = "(function() {" |
"return {" |
@@ -467,7 +489,7 @@ TEST_F(V8ValueConverterImplTest, WeirdProperties) { |
ASSERT_FALSE(object.IsEmpty()); |
V8ValueConverterImpl converter; |
- scoped_ptr<base::Value> actual(converter.FromV8Value(object, context_)); |
+ scoped_ptr<base::Value> actual(converter.FromV8Value(object, context)); |
scoped_ptr<base::Value> expected = base::test::ParseJson( |
"{ \n" |
@@ -483,8 +505,10 @@ TEST_F(V8ValueConverterImplTest, WeirdProperties) { |
} |
TEST_F(V8ValueConverterImplTest, ArrayGetters) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
const char* source = "(function() {" |
"var a = [0];" |
@@ -498,14 +522,16 @@ TEST_F(V8ValueConverterImplTest, ArrayGetters) { |
V8ValueConverterImpl converter; |
scoped_ptr<base::ListValue> result( |
- static_cast<base::ListValue*>(converter.FromV8Value(array, context_))); |
+ static_cast<base::ListValue*>(converter.FromV8Value(array, context))); |
ASSERT_TRUE(result.get()); |
EXPECT_EQ(2u, result->GetSize()); |
} |
TEST_F(V8ValueConverterImplTest, UndefinedValueBehavior) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
v8::Handle<v8::Object> object; |
{ |
@@ -530,19 +556,21 @@ TEST_F(V8ValueConverterImplTest, UndefinedValueBehavior) { |
V8ValueConverterImpl converter; |
scoped_ptr<base::Value> actual_object( |
- converter.FromV8Value(object, context_)); |
+ converter.FromV8Value(object, context)); |
EXPECT_TRUE(base::Value::Equals( |
base::test::ParseJson("{ \"bar\": null }").get(), actual_object.get())); |
// Everything is null because JSON stringification preserves array length. |
- scoped_ptr<Value> actual_array(converter.FromV8Value(array, context_)); |
+ scoped_ptr<Value> actual_array(converter.FromV8Value(array, context)); |
EXPECT_TRUE(base::Value::Equals( |
base::test::ParseJson("[ null, null, null ]").get(), actual_array.get())); |
} |
TEST_F(V8ValueConverterImplTest, ObjectsWithClashingIdentityHash) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
V8ValueConverterImpl converter; |
// We check that the converter checks identity correctly by disabling the |
@@ -561,15 +589,17 @@ TEST_F(V8ValueConverterImplTest, ObjectsWithClashingIdentityHash) { |
ASSERT_TRUE(expected.get()); |
// The actual result. |
- scoped_ptr<base::Value> value(converter.FromV8Value(root, context_)); |
+ scoped_ptr<base::Value> value(converter.FromV8Value(root, context)); |
ASSERT_TRUE(value.get()); |
EXPECT_TRUE(expected->Equals(value.get())); |
} |
TEST_F(V8ValueConverterImplTest, DetectCycles) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
V8ValueConverterImpl converter; |
// Create a recursive array. |
@@ -582,7 +612,7 @@ TEST_F(V8ValueConverterImplTest, DetectCycles) { |
// The actual result. |
scoped_ptr<base::Value> actual_list( |
- converter.FromV8Value(recursive_array, context_)); |
+ converter.FromV8Value(recursive_array, context)); |
ASSERT_TRUE(actual_list.get()); |
EXPECT_TRUE(expected_list.Equals(actual_list.get())); |
@@ -601,15 +631,17 @@ TEST_F(V8ValueConverterImplTest, DetectCycles) { |
// The actual result. |
scoped_ptr<base::Value> actual_dictionary( |
- converter.FromV8Value(recursive_object, context_)); |
+ converter.FromV8Value(recursive_object, context)); |
ASSERT_TRUE(actual_dictionary.get()); |
EXPECT_TRUE(expected_dictionary.Equals(actual_dictionary.get())); |
} |
TEST_F(V8ValueConverterImplTest, MaxRecursionDepth) { |
- v8::Context::Scope context_scope(context_); |
- v8::HandleScope handle_scope; |
+ v8::HandleScope handle_scope(isolate_); |
+ v8::Context::Scope context_scope(isolate_, context_); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate_, context_); |
// Must larger than kMaxRecursionDepth in v8_value_converter_impl.cc. |
int kDepth = 100; |
@@ -625,7 +657,7 @@ TEST_F(V8ValueConverterImplTest, MaxRecursionDepth) { |
} |
V8ValueConverterImpl converter; |
- scoped_ptr<base::Value> value(converter.FromV8Value(deep_object, context_)); |
+ scoped_ptr<base::Value> value(converter.FromV8Value(deep_object, context)); |
ASSERT_TRUE(value); |
// Expected depth is kMaxRecursionDepth in v8_value_converter_impl.cc. |