Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Side by Side Diff: test/cctest/test-accessors.cc

Issue 1420613008: Remove deprecated API usage from test-accessors. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: De-uglify + remove unused x_context var. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution. 11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its 12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived 13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission. 14 // from this software without specific prior written permission.
15 // 15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 // TODO(jochen): Remove this after the setting is turned on globally.
29 #define V8_IMMINENT_DEPRECATION_WARNINGS
30
28 #include <stdlib.h> 31 #include <stdlib.h>
29 32
30 #include "src/v8.h" 33 #include "src/v8.h"
31 34
32 #include "src/api.h" 35 #include "src/api.h"
33 #include "src/frames-inl.h" 36 #include "src/frames-inl.h"
34 #include "src/string-stream.h" 37 #include "src/string-stream.h"
35 #include "test/cctest/cctest.h" 38 #include "test/cctest/cctest.h"
36 39
37 using ::v8::ObjectTemplate; 40 using ::v8::ObjectTemplate;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(isolate); 74 Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New(isolate);
72 fun_templ->InstanceTemplate()->SetAccessor(v8_str("foo"), handle_property); 75 fun_templ->InstanceTemplate()->SetAccessor(v8_str("foo"), handle_property);
73 Local<v8::FunctionTemplate> getter_templ = 76 Local<v8::FunctionTemplate> getter_templ =
74 v8::FunctionTemplate::New(isolate, handle_property); 77 v8::FunctionTemplate::New(isolate, handle_property);
75 getter_templ->SetLength(0); 78 getter_templ->SetLength(0);
76 fun_templ-> 79 fun_templ->
77 InstanceTemplate()->SetAccessorProperty(v8_str("bar"), getter_templ); 80 InstanceTemplate()->SetAccessorProperty(v8_str("bar"), getter_templ);
78 fun_templ->InstanceTemplate()-> 81 fun_templ->InstanceTemplate()->
79 SetNativeDataProperty(v8_str("instance_foo"), handle_property); 82 SetNativeDataProperty(v8_str("instance_foo"), handle_property);
80 fun_templ->SetNativeDataProperty(v8_str("object_foo"), handle_property_2); 83 fun_templ->SetNativeDataProperty(v8_str("object_foo"), handle_property_2);
81 Local<Function> fun = fun_templ->GetFunction(); 84 Local<Function> fun = fun_templ->GetFunction(env.local()).ToLocalChecked();
82 env->Global()->Set(v8_str("Fun"), fun); 85 CHECK(env->Global()->Set(env.local(), v8_str("Fun"), fun).FromJust());
83 Local<Script> getter; 86 Local<Script> getter;
84 Local<Script> setter; 87 Local<Script> setter;
85 // check function instance accessors 88 // check function instance accessors
86 getter = v8_compile("var obj = new Fun(); obj.instance_foo;"); 89 getter = v8_compile("var obj = new Fun(); obj.instance_foo;");
87 CHECK_EQ(900, getter->Run()->Int32Value()); 90 CHECK_EQ(900, getter->Run(env.local())
91 .ToLocalChecked()
92 ->Int32Value(env.local())
93 .FromJust());
88 setter = v8_compile("obj.instance_foo = 901;"); 94 setter = v8_compile("obj.instance_foo = 901;");
89 CHECK_EQ(901, setter->Run()->Int32Value()); 95 CHECK_EQ(901, setter->Run(env.local())
96 .ToLocalChecked()
97 ->Int32Value(env.local())
98 .FromJust());
90 getter = v8_compile("obj.bar;"); 99 getter = v8_compile("obj.bar;");
91 CHECK_EQ(907, getter->Run()->Int32Value()); 100 CHECK_EQ(907, getter->Run(env.local())
101 .ToLocalChecked()
102 ->Int32Value(env.local())
103 .FromJust());
92 setter = v8_compile("obj.bar = 908;"); 104 setter = v8_compile("obj.bar = 908;");
93 CHECK_EQ(908, setter->Run()->Int32Value()); 105 CHECK_EQ(908, setter->Run(env.local())
106 .ToLocalChecked()
107 ->Int32Value(env.local())
108 .FromJust());
94 // check function static accessors 109 // check function static accessors
95 getter = v8_compile("Fun.object_foo;"); 110 getter = v8_compile("Fun.object_foo;");
96 CHECK_EQ(902, getter->Run()->Int32Value()); 111 CHECK_EQ(902, getter->Run(env.local())
112 .ToLocalChecked()
113 ->Int32Value(env.local())
114 .FromJust());
97 setter = v8_compile("Fun.object_foo = 903;"); 115 setter = v8_compile("Fun.object_foo = 903;");
98 CHECK_EQ(903, setter->Run()->Int32Value()); 116 CHECK_EQ(903, setter->Run(env.local())
117 .ToLocalChecked()
118 ->Int32Value(env.local())
119 .FromJust());
99 } 120 }
100 121
101
jochen (gone - plz use gerrit) 2015/10/28 10:58:20 Nit. Keep two empty lives
vogelheim 2015/10/28 11:53:25 Done.
102 static void GetIntValue(Local<String> property, 122 static void GetIntValue(Local<String> property,
103 const v8::PropertyCallbackInfo<v8::Value>& info) { 123 const v8::PropertyCallbackInfo<v8::Value>& info) {
104 ApiTestFuzzer::Fuzz(); 124 ApiTestFuzzer::Fuzz();
105 int* value = 125 int* value =
106 static_cast<int*>(v8::Handle<v8::External>::Cast(info.Data())->Value()); 126 static_cast<int*>(v8::Local<v8::External>::Cast(info.Data())->Value());
107 info.GetReturnValue().Set(v8_num(*value)); 127 info.GetReturnValue().Set(v8_num(*value));
108 } 128 }
109 129
110 130
111 static void SetIntValue(Local<String> property, 131 static void SetIntValue(Local<String> property,
112 Local<Value> value, 132 Local<Value> value,
113 const v8::PropertyCallbackInfo<void>& info) { 133 const v8::PropertyCallbackInfo<void>& info) {
114 int* field = 134 int* field =
115 static_cast<int*>(v8::Handle<v8::External>::Cast(info.Data())->Value()); 135 static_cast<int*>(v8::Local<v8::External>::Cast(info.Data())->Value());
116 *field = value->Int32Value(); 136 *field = value->Int32Value(info.GetIsolate()->GetCurrentContext()).FromJust();
117 } 137 }
118 138
119 int foo, bar, baz; 139 int foo, bar, baz;
120 140
121 THREADED_TEST(GlobalVariableAccess) { 141 THREADED_TEST(GlobalVariableAccess) {
122 foo = 0; 142 foo = 0;
123 bar = -4; 143 bar = -4;
124 baz = 10; 144 baz = 10;
125 v8::Isolate* isolate = CcTest::isolate(); 145 v8::Isolate* isolate = CcTest::isolate();
126 v8::HandleScope scope(isolate); 146 v8::HandleScope scope(isolate);
127 v8::Handle<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate); 147 v8::Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate);
128 templ->InstanceTemplate()->SetAccessor( 148 templ->InstanceTemplate()->SetAccessor(
129 v8_str("foo"), GetIntValue, SetIntValue, 149 v8_str("foo"), GetIntValue, SetIntValue,
130 v8::External::New(isolate, &foo)); 150 v8::External::New(isolate, &foo));
131 templ->InstanceTemplate()->SetAccessor( 151 templ->InstanceTemplate()->SetAccessor(
132 v8_str("bar"), GetIntValue, SetIntValue, 152 v8_str("bar"), GetIntValue, SetIntValue,
133 v8::External::New(isolate, &bar)); 153 v8::External::New(isolate, &bar));
134 templ->InstanceTemplate()->SetAccessor( 154 templ->InstanceTemplate()->SetAccessor(
135 v8_str("baz"), GetIntValue, SetIntValue, 155 v8_str("baz"), GetIntValue, SetIntValue,
136 v8::External::New(isolate, &baz)); 156 v8::External::New(isolate, &baz));
137 LocalContext env(0, templ->InstanceTemplate()); 157 LocalContext env(0, templ->InstanceTemplate());
138 v8_compile("foo = (++bar) + baz")->Run(); 158 v8_compile("foo = (++bar) + baz")->Run(env.local()).ToLocalChecked();
139 CHECK_EQ(bar, -3); 159 CHECK_EQ(bar, -3);
140 CHECK_EQ(foo, 7); 160 CHECK_EQ(foo, 7);
141 } 161 }
142 162
143 163
144 static int x_register[2] = {0, 0}; 164 static int x_register[2] = {0, 0};
145 static v8::Handle<v8::Object> x_receiver; 165 static v8::Local<v8::Object> x_receiver;
146 static v8::Handle<v8::Object> x_holder; 166 static v8::Local<v8::Object> x_holder;
147 167
148 template<class Info> 168 template<class Info>
149 static void XGetter(const Info& info, int offset) { 169 static void XGetter(const Info& info, int offset) {
150 ApiTestFuzzer::Fuzz(); 170 ApiTestFuzzer::Fuzz();
151 v8::Isolate* isolate = CcTest::isolate(); 171 v8::Isolate* isolate = CcTest::isolate();
152 CHECK_EQ(isolate, info.GetIsolate()); 172 CHECK_EQ(isolate, info.GetIsolate());
153 CHECK(x_receiver->Equals(info.This())); 173 CHECK(
174 x_receiver->Equals(isolate->GetCurrentContext(), info.This()).FromJust());
154 info.GetReturnValue().Set(v8_num(x_register[offset])); 175 info.GetReturnValue().Set(v8_num(x_register[offset]));
155 } 176 }
156 177
157 178
158 static void XGetter(Local<String> name, 179 static void XGetter(Local<String> name,
159 const v8::PropertyCallbackInfo<v8::Value>& info) { 180 const v8::PropertyCallbackInfo<v8::Value>& info) {
160 CHECK(x_holder->Equals(info.Holder())); 181 CHECK(x_holder->Equals(info.GetIsolate()->GetCurrentContext(), info.Holder())
182 .FromJust());
161 XGetter(info, 0); 183 XGetter(info, 0);
162 } 184 }
163 185
164 186
165 static void XGetter(const v8::FunctionCallbackInfo<v8::Value>& info) { 187 static void XGetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
166 CHECK(x_receiver->Equals(info.Holder())); 188 CHECK(
189 x_receiver->Equals(info.GetIsolate()->GetCurrentContext(), info.Holder())
190 .FromJust());
167 XGetter(info, 1); 191 XGetter(info, 1);
168 } 192 }
169 193
170 194
171 template<class Info> 195 template<class Info>
172 static void XSetter(Local<Value> value, const Info& info, int offset) { 196 static void XSetter(Local<Value> value, const Info& info, int offset) {
173 v8::Isolate* isolate = CcTest::isolate(); 197 v8::Isolate* isolate = CcTest::isolate();
174 CHECK_EQ(isolate, info.GetIsolate()); 198 CHECK_EQ(isolate, info.GetIsolate());
175 CHECK(x_holder->Equals(info.This())); 199 CHECK(x_holder->Equals(info.GetIsolate()->GetCurrentContext(), info.This())
176 CHECK(x_holder->Equals(info.Holder())); 200 .FromJust());
177 x_register[offset] = value->Int32Value(); 201 CHECK(x_holder->Equals(info.GetIsolate()->GetCurrentContext(), info.Holder())
202 .FromJust());
203 x_register[offset] =
204 value->Int32Value(info.GetIsolate()->GetCurrentContext()).FromJust();
178 info.GetReturnValue().Set(v8_num(-1)); 205 info.GetReturnValue().Set(v8_num(-1));
179 } 206 }
180 207
181 208
182 static void XSetter(Local<String> name, 209 static void XSetter(Local<String> name,
183 Local<Value> value, 210 Local<Value> value,
184 const v8::PropertyCallbackInfo<void>& info) { 211 const v8::PropertyCallbackInfo<void>& info) {
185 XSetter(value, info, 0); 212 XSetter(value, info, 0);
186 } 213 }
187 214
188 215
189 static void XSetter(const v8::FunctionCallbackInfo<v8::Value>& info) { 216 static void XSetter(const v8::FunctionCallbackInfo<v8::Value>& info) {
190 CHECK_EQ(1, info.Length()); 217 CHECK_EQ(1, info.Length());
191 XSetter(info[0], info, 1); 218 XSetter(info[0], info, 1);
192 } 219 }
193 220
194 221
195 THREADED_TEST(AccessorIC) { 222 THREADED_TEST(AccessorIC) {
196 LocalContext context; 223 LocalContext context;
197 v8::Isolate* isolate = context->GetIsolate(); 224 v8::Isolate* isolate = context->GetIsolate();
198 v8::HandleScope scope(isolate); 225 v8::HandleScope scope(isolate);
199 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 226 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
200 obj->SetAccessor(v8_str("x0"), XGetter, XSetter); 227 obj->SetAccessor(v8_str("x0"), XGetter, XSetter);
201 obj->SetAccessorProperty(v8_str("x1"), 228 obj->SetAccessorProperty(v8_str("x1"),
202 v8::FunctionTemplate::New(isolate, XGetter), 229 v8::FunctionTemplate::New(isolate, XGetter),
203 v8::FunctionTemplate::New(isolate, XSetter)); 230 v8::FunctionTemplate::New(isolate, XSetter));
204 x_holder = obj->NewInstance(); 231 x_holder = obj->NewInstance(context.local()).ToLocalChecked();
205 context->Global()->Set(v8_str("holder"), x_holder); 232 CHECK(context->Global()
233 ->Set(context.local(), v8_str("holder"), x_holder)
234 .FromJust());
206 x_receiver = v8::Object::New(isolate); 235 x_receiver = v8::Object::New(isolate);
207 context->Global()->Set(v8_str("obj"), x_receiver); 236 CHECK(context->Global()
208 v8::Handle<v8::Array> array = v8::Handle<v8::Array>::Cast(CompileRun( 237 ->Set(context.local(), v8_str("obj"), x_receiver)
209 "obj.__proto__ = holder;" 238 .FromJust());
210 "var result = [];" 239 v8::Local<v8::Array> array = v8::Local<v8::Array>::Cast(
211 "var key_0 = 'x0';" 240 CompileRun("obj.__proto__ = holder;"
212 "var key_1 = 'x1';" 241 "var result = [];"
213 "for (var j = 0; j < 10; j++) {" 242 "var key_0 = 'x0';"
214 " var i = 4*j;" 243 "var key_1 = 'x1';"
215 " result.push(holder.x0 = i);" 244 "for (var j = 0; j < 10; j++) {"
216 " result.push(obj.x0);" 245 " var i = 4*j;"
217 " result.push(holder.x1 = i + 1);" 246 " result.push(holder.x0 = i);"
218 " result.push(obj.x1);" 247 " result.push(obj.x0);"
219 " result.push(holder[key_0] = i + 2);" 248 " result.push(holder.x1 = i + 1);"
220 " result.push(obj[key_0]);" 249 " result.push(obj.x1);"
221 " result.push(holder[key_1] = i + 3);" 250 " result.push(holder[key_0] = i + 2);"
222 " result.push(obj[key_1]);" 251 " result.push(obj[key_0]);"
223 "}" 252 " result.push(holder[key_1] = i + 3);"
224 "result")); 253 " result.push(obj[key_1]);"
254 "}"
255 "result"));
225 CHECK_EQ(80u, array->Length()); 256 CHECK_EQ(80u, array->Length());
226 for (int i = 0; i < 80; i++) { 257 for (int i = 0; i < 80; i++) {
227 v8::Handle<Value> entry = array->Get(v8::Integer::New(isolate, i)); 258 v8::Local<Value> entry =
228 CHECK(v8::Integer::New(isolate, i / 2)->Equals(entry)); 259 array->Get(context.local(), v8::Integer::New(isolate, i))
260 .ToLocalChecked();
261 CHECK(v8::Integer::New(isolate, i / 2)
262 ->Equals(context.local(), entry)
263 .FromJust());
229 } 264 }
230 } 265 }
231 266
232 267
233 template <int C> 268 template <int C>
234 static void HandleAllocatingGetter( 269 static void HandleAllocatingGetter(
235 Local<String> name, 270 Local<String> name,
236 const v8::PropertyCallbackInfo<v8::Value>& info) { 271 const v8::PropertyCallbackInfo<v8::Value>& info) {
237 ApiTestFuzzer::Fuzz(); 272 ApiTestFuzzer::Fuzz();
238 for (int i = 0; i < C; i++) 273 for (int i = 0; i < C; i++) {
239 v8::String::NewFromUtf8(info.GetIsolate(), "foo"); 274 v8::String::NewFromUtf8(info.GetIsolate(), "foo",
240 info.GetReturnValue().Set(v8::String::NewFromUtf8(info.GetIsolate(), "foo")); 275 v8::NewStringType::kNormal)
276 .ToLocalChecked();
277 }
278 info.GetReturnValue().Set(v8::String::NewFromUtf8(info.GetIsolate(), "foo",
279 v8::NewStringType::kNormal)
280 .ToLocalChecked());
241 } 281 }
242 282
243 283
244 THREADED_TEST(HandleScopePop) { 284 THREADED_TEST(HandleScopePop) {
245 LocalContext context; 285 LocalContext context;
246 v8::Isolate* isolate = context->GetIsolate(); 286 v8::Isolate* isolate = context->GetIsolate();
247 v8::HandleScope scope(isolate); 287 v8::HandleScope scope(isolate);
248 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 288 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
249 obj->SetAccessor(v8_str("one"), HandleAllocatingGetter<1>); 289 obj->SetAccessor(v8_str("one"), HandleAllocatingGetter<1>);
250 obj->SetAccessor(v8_str("many"), HandleAllocatingGetter<1024>); 290 obj->SetAccessor(v8_str("many"), HandleAllocatingGetter<1024>);
251 v8::Handle<v8::Object> inst = obj->NewInstance(); 291 v8::Local<v8::Object> inst =
252 context->Global()->Set(v8::String::NewFromUtf8(isolate, "obj"), inst); 292 obj->NewInstance(context.local()).ToLocalChecked();
293 CHECK(
294 context->Global()->Set(context.local(), v8_str("obj"), inst).FromJust());
253 int count_before = 295 int count_before =
254 i::HandleScope::NumberOfHandles(reinterpret_cast<i::Isolate*>(isolate)); 296 i::HandleScope::NumberOfHandles(reinterpret_cast<i::Isolate*>(isolate));
255 { 297 {
256 v8::HandleScope scope(isolate); 298 v8::HandleScope scope(isolate);
257 CompileRun( 299 CompileRun(
258 "for (var i = 0; i < 1000; i++) {" 300 "for (var i = 0; i < 1000; i++) {"
259 " obj.one;" 301 " obj.one;"
260 " obj.many;" 302 " obj.many;"
261 "}"); 303 "}");
262 } 304 }
263 int count_after = 305 int count_after =
264 i::HandleScope::NumberOfHandles(reinterpret_cast<i::Isolate*>(isolate)); 306 i::HandleScope::NumberOfHandles(reinterpret_cast<i::Isolate*>(isolate));
265 CHECK_EQ(count_before, count_after); 307 CHECK_EQ(count_before, count_after);
266 } 308 }
267 309
268 static void CheckAccessorArgsCorrect( 310 static void CheckAccessorArgsCorrect(
269 Local<String> name, 311 Local<String> name,
270 const v8::PropertyCallbackInfo<v8::Value>& info) { 312 const v8::PropertyCallbackInfo<v8::Value>& info) {
271 CHECK(info.GetIsolate() == CcTest::isolate()); 313 CHECK(info.GetIsolate() == CcTest::isolate());
272 CHECK(info.This() == info.Holder()); 314 CHECK(info.This() == info.Holder());
273 CHECK( 315 CHECK(info.Data()
274 info.Data()->Equals(v8::String::NewFromUtf8(CcTest::isolate(), "data"))); 316 ->Equals(info.GetIsolate()->GetCurrentContext(), v8_str("data"))
317 .FromJust());
275 ApiTestFuzzer::Fuzz(); 318 ApiTestFuzzer::Fuzz();
276 CHECK(info.GetIsolate() == CcTest::isolate()); 319 CHECK(info.GetIsolate() == CcTest::isolate());
277 CHECK(info.This() == info.Holder()); 320 CHECK(info.This() == info.Holder());
278 CHECK( 321 CHECK(info.Data()
279 info.Data()->Equals(v8::String::NewFromUtf8(CcTest::isolate(), "data"))); 322 ->Equals(info.GetIsolate()->GetCurrentContext(), v8_str("data"))
323 .FromJust());
280 CcTest::heap()->CollectAllGarbage(); 324 CcTest::heap()->CollectAllGarbage();
281 CHECK(info.GetIsolate() == CcTest::isolate()); 325 CHECK(info.GetIsolate() == CcTest::isolate());
282 CHECK(info.This() == info.Holder()); 326 CHECK(info.This() == info.Holder());
283 CHECK( 327 CHECK(info.Data()
284 info.Data()->Equals(v8::String::NewFromUtf8(CcTest::isolate(), "data"))); 328 ->Equals(info.GetIsolate()->GetCurrentContext(), v8_str("data"))
329 .FromJust());
285 info.GetReturnValue().Set(17); 330 info.GetReturnValue().Set(17);
286 } 331 }
287 332
288 333
289 THREADED_TEST(DirectCall) { 334 THREADED_TEST(DirectCall) {
290 LocalContext context; 335 LocalContext context;
291 v8::Isolate* isolate = context->GetIsolate(); 336 v8::Isolate* isolate = context->GetIsolate();
292 v8::HandleScope scope(isolate); 337 v8::HandleScope scope(isolate);
293 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 338 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
294 obj->SetAccessor(v8_str("xxx"), 339 obj->SetAccessor(v8_str("xxx"), CheckAccessorArgsCorrect, NULL,
295 CheckAccessorArgsCorrect, 340 v8_str("data"));
296 NULL, 341 v8::Local<v8::Object> inst =
297 v8::String::NewFromUtf8(isolate, "data")); 342 obj->NewInstance(context.local()).ToLocalChecked();
298 v8::Handle<v8::Object> inst = obj->NewInstance(); 343 CHECK(
299 context->Global()->Set(v8::String::NewFromUtf8(isolate, "obj"), 344 context->Global()->Set(context.local(), v8_str("obj"), inst).FromJust());
300 inst); 345 Local<Script> scr =
301 Local<Script> scr = v8::Script::Compile( 346 v8::Script::Compile(context.local(), v8_str("obj.xxx")).ToLocalChecked();
302 v8::String::NewFromUtf8(isolate, "obj.xxx"));
303 for (int i = 0; i < 10; i++) { 347 for (int i = 0; i < 10; i++) {
304 Local<Value> result = scr->Run(); 348 Local<Value> result = scr->Run(context.local()).ToLocalChecked();
305 CHECK(!result.IsEmpty()); 349 CHECK(!result.IsEmpty());
306 CHECK_EQ(17, result->Int32Value()); 350 CHECK_EQ(17, result->Int32Value(context.local()).FromJust());
307 } 351 }
308 } 352 }
309 353
310 static void EmptyGetter(Local<String> name, 354 static void EmptyGetter(Local<String> name,
311 const v8::PropertyCallbackInfo<v8::Value>& info) { 355 const v8::PropertyCallbackInfo<v8::Value>& info) {
312 CheckAccessorArgsCorrect(name, info); 356 CheckAccessorArgsCorrect(name, info);
313 ApiTestFuzzer::Fuzz(); 357 ApiTestFuzzer::Fuzz();
314 CheckAccessorArgsCorrect(name, info); 358 CheckAccessorArgsCorrect(name, info);
315 info.GetReturnValue().Set(v8::Handle<v8::Value>()); 359 info.GetReturnValue().Set(v8::Local<v8::Value>());
316 } 360 }
317 361
318 362
319 THREADED_TEST(EmptyResult) { 363 THREADED_TEST(EmptyResult) {
320 LocalContext context; 364 LocalContext context;
321 v8::Isolate* isolate = context->GetIsolate(); 365 v8::Isolate* isolate = context->GetIsolate();
322 v8::HandleScope scope(isolate); 366 v8::HandleScope scope(isolate);
323 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 367 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
324 obj->SetAccessor(v8_str("xxx"), EmptyGetter, NULL, 368 obj->SetAccessor(v8_str("xxx"), EmptyGetter, NULL, v8_str("data"));
325 v8::String::NewFromUtf8(isolate, "data")); 369 v8::Local<v8::Object> inst =
326 v8::Handle<v8::Object> inst = obj->NewInstance(); 370 obj->NewInstance(context.local()).ToLocalChecked();
327 context->Global()->Set(v8::String::NewFromUtf8(isolate, "obj"), inst); 371 CHECK(
372 context->Global()->Set(context.local(), v8_str("obj"), inst).FromJust());
328 Local<Script> scr = 373 Local<Script> scr =
329 v8::Script::Compile(v8::String::NewFromUtf8(isolate, "obj.xxx")); 374 v8::Script::Compile(context.local(), v8_str("obj.xxx")).ToLocalChecked();
330 for (int i = 0; i < 10; i++) { 375 for (int i = 0; i < 10; i++) {
331 Local<Value> result = scr->Run(); 376 Local<Value> result = scr->Run(context.local()).ToLocalChecked();
332 CHECK(result == v8::Undefined(isolate)); 377 CHECK(result == v8::Undefined(isolate));
333 } 378 }
334 } 379 }
335 380
336 381
337 THREADED_TEST(NoReuseRegress) { 382 THREADED_TEST(NoReuseRegress) {
338 // Check that the IC generated for the one test doesn't get reused 383 // Check that the IC generated for the one test doesn't get reused
339 // for the other. 384 // for the other.
340 v8::Isolate* isolate = CcTest::isolate(); 385 v8::Isolate* isolate = CcTest::isolate();
341 v8::HandleScope scope(isolate); 386 v8::HandleScope scope(isolate);
342 { 387 {
343 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 388 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
344 obj->SetAccessor(v8_str("xxx"), EmptyGetter, NULL, 389 obj->SetAccessor(v8_str("xxx"), EmptyGetter, NULL, v8_str("data"));
345 v8::String::NewFromUtf8(isolate, "data"));
346 LocalContext context; 390 LocalContext context;
347 v8::Handle<v8::Object> inst = obj->NewInstance(); 391 v8::Local<v8::Object> inst =
348 context->Global()->Set(v8::String::NewFromUtf8(isolate, "obj"), inst); 392 obj->NewInstance(context.local()).ToLocalChecked();
349 Local<Script> scr = 393 CHECK(context->Global()
350 v8::Script::Compile(v8::String::NewFromUtf8(isolate, "obj.xxx")); 394 ->Set(context.local(), v8_str("obj"), inst)
395 .FromJust());
396 Local<Script> scr = v8::Script::Compile(context.local(), v8_str("obj.xxx"))
397 .ToLocalChecked();
351 for (int i = 0; i < 2; i++) { 398 for (int i = 0; i < 2; i++) {
352 Local<Value> result = scr->Run(); 399 Local<Value> result = scr->Run(context.local()).ToLocalChecked();
353 CHECK(result == v8::Undefined(isolate)); 400 CHECK(result == v8::Undefined(isolate));
354 } 401 }
355 } 402 }
356 { 403 {
357 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 404 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
358 obj->SetAccessor(v8_str("xxx"), 405 obj->SetAccessor(v8_str("xxx"), CheckAccessorArgsCorrect, NULL,
359 CheckAccessorArgsCorrect, 406 v8_str("data"));
360 NULL,
361 v8::String::NewFromUtf8(isolate, "data"));
362 LocalContext context; 407 LocalContext context;
363 v8::Handle<v8::Object> inst = obj->NewInstance(); 408 v8::Local<v8::Object> inst =
364 context->Global()->Set(v8::String::NewFromUtf8(isolate, "obj"), inst); 409 obj->NewInstance(context.local()).ToLocalChecked();
365 Local<Script> scr = 410 CHECK(context->Global()
366 v8::Script::Compile(v8::String::NewFromUtf8(isolate, "obj.xxx")); 411 ->Set(context.local(), v8_str("obj"), inst)
412 .FromJust());
413 Local<Script> scr = v8::Script::Compile(context.local(), v8_str("obj.xxx"))
414 .ToLocalChecked();
367 for (int i = 0; i < 10; i++) { 415 for (int i = 0; i < 10; i++) {
368 Local<Value> result = scr->Run(); 416 Local<Value> result = scr->Run(context.local()).ToLocalChecked();
369 CHECK(!result.IsEmpty()); 417 CHECK(!result.IsEmpty());
370 CHECK_EQ(17, result->Int32Value()); 418 CHECK_EQ(17, result->Int32Value(context.local()).FromJust());
371 } 419 }
372 } 420 }
373 } 421 }
374 422
375 static void ThrowingGetAccessor( 423 static void ThrowingGetAccessor(
376 Local<String> name, 424 Local<String> name,
377 const v8::PropertyCallbackInfo<v8::Value>& info) { 425 const v8::PropertyCallbackInfo<v8::Value>& info) {
378 ApiTestFuzzer::Fuzz(); 426 ApiTestFuzzer::Fuzz();
379 info.GetIsolate()->ThrowException(v8_str("g")); 427 info.GetIsolate()->ThrowException(v8_str("g"));
380 } 428 }
381 429
382 430
383 static void ThrowingSetAccessor(Local<String> name, 431 static void ThrowingSetAccessor(Local<String> name,
384 Local<Value> value, 432 Local<Value> value,
385 const v8::PropertyCallbackInfo<void>& info) { 433 const v8::PropertyCallbackInfo<void>& info) {
386 info.GetIsolate()->ThrowException(value); 434 info.GetIsolate()->ThrowException(value);
387 } 435 }
388 436
389 437
390 THREADED_TEST(Regress1054726) { 438 THREADED_TEST(Regress1054726) {
391 LocalContext env; 439 LocalContext env;
392 v8::Isolate* isolate = env->GetIsolate(); 440 v8::Isolate* isolate = env->GetIsolate();
393 v8::HandleScope scope(isolate); 441 v8::HandleScope scope(isolate);
394 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 442 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
395 obj->SetAccessor(v8_str("x"), 443 obj->SetAccessor(v8_str("x"),
396 ThrowingGetAccessor, 444 ThrowingGetAccessor,
397 ThrowingSetAccessor, 445 ThrowingSetAccessor,
398 Local<Value>()); 446 Local<Value>());
399 447
400 env->Global()->Set(v8_str("obj"), obj->NewInstance()); 448 CHECK(env->Global()
449 ->Set(env.local(), v8_str("obj"),
450 obj->NewInstance(env.local()).ToLocalChecked())
451 .FromJust());
401 452
402 // Use the throwing property setter/getter in a loop to force 453 // Use the throwing property setter/getter in a loop to force
403 // the accessor ICs to be initialized. 454 // the accessor ICs to be initialized.
404 v8::Handle<Value> result; 455 v8::Local<Value> result;
405 result = Script::Compile(v8_str( 456 result = Script::Compile(env.local(),
406 "var result = '';" 457 v8_str("var result = '';"
407 "for (var i = 0; i < 5; i++) {" 458 "for (var i = 0; i < 5; i++) {"
408 " try { obj.x; } catch (e) { result += e; }" 459 " try { obj.x; } catch (e) { result += e; }"
409 "}; result"))->Run(); 460 "}; result"))
410 CHECK(v8_str("ggggg")->Equals(result)); 461 .ToLocalChecked()
462 ->Run(env.local())
463 .ToLocalChecked();
464 CHECK(v8_str("ggggg")->Equals(env.local(), result).FromJust());
411 465
412 result = Script::Compile(String::NewFromUtf8( 466 result =
413 isolate, 467 Script::Compile(env.local(),
414 "var result = '';" 468 v8_str("var result = '';"
415 "for (var i = 0; i < 5; i++) {" 469 "for (var i = 0; i < 5; i++) {"
416 " try { obj.x = i; } catch (e) { result += e; }" 470 " try { obj.x = i; } catch (e) { result += e; }"
417 "}; result"))->Run(); 471 "}; result"))
418 CHECK(v8_str("01234")->Equals(result)); 472 .ToLocalChecked()
473 ->Run(env.local())
474 .ToLocalChecked();
475 CHECK(v8_str("01234")->Equals(env.local(), result).FromJust());
419 } 476 }
420 477
421 478
422 static void AllocGetter(Local<String> name, 479 static void AllocGetter(Local<String> name,
423 const v8::PropertyCallbackInfo<v8::Value>& info) { 480 const v8::PropertyCallbackInfo<v8::Value>& info) {
424 ApiTestFuzzer::Fuzz(); 481 ApiTestFuzzer::Fuzz();
425 info.GetReturnValue().Set(v8::Array::New(info.GetIsolate(), 1000)); 482 info.GetReturnValue().Set(v8::Array::New(info.GetIsolate(), 1000));
426 } 483 }
427 484
428 485
429 THREADED_TEST(Gc) { 486 THREADED_TEST(Gc) {
430 LocalContext env; 487 LocalContext env;
431 v8::Isolate* isolate = env->GetIsolate(); 488 v8::Isolate* isolate = env->GetIsolate();
432 v8::HandleScope scope(isolate); 489 v8::HandleScope scope(isolate);
433 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 490 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
434 obj->SetAccessor(v8_str("xxx"), AllocGetter); 491 obj->SetAccessor(v8_str("xxx"), AllocGetter);
435 env->Global()->Set(v8_str("obj"), obj->NewInstance()); 492 CHECK(env->Global()
436 Script::Compile(String::NewFromUtf8( 493 ->Set(env.local(), v8_str("obj"),
437 isolate, 494 obj->NewInstance(env.local()).ToLocalChecked())
438 "var last = [];" 495 .FromJust());
439 "for (var i = 0; i < 2048; i++) {" 496 Script::Compile(env.local(), v8_str("var last = [];"
440 " var result = obj.xxx;" 497 "for (var i = 0; i < 2048; i++) {"
441 " result[0] = last;" 498 " var result = obj.xxx;"
442 " last = result;" 499 " result[0] = last;"
443 "}"))->Run(); 500 " last = result;"
501 "}"))
502 .ToLocalChecked()
503 ->Run(env.local())
504 .ToLocalChecked();
444 } 505 }
445 506
446 507
447 static void StackCheck(Local<String> name, 508 static void StackCheck(Local<String> name,
448 const v8::PropertyCallbackInfo<v8::Value>& info) { 509 const v8::PropertyCallbackInfo<v8::Value>& info) {
449 i::StackFrameIterator iter(reinterpret_cast<i::Isolate*>(info.GetIsolate())); 510 i::StackFrameIterator iter(reinterpret_cast<i::Isolate*>(info.GetIsolate()));
450 for (int i = 0; !iter.done(); i++) { 511 for (int i = 0; !iter.done(); i++) {
451 i::StackFrame* frame = iter.frame(); 512 i::StackFrame* frame = iter.frame();
452 CHECK(i != 0 || (frame->type() == i::StackFrame::EXIT)); 513 CHECK(i != 0 || (frame->type() == i::StackFrame::EXIT));
453 i::Code* code = frame->LookupCode(); 514 i::Code* code = frame->LookupCode();
454 CHECK(code->IsCode()); 515 CHECK(code->IsCode());
455 i::Address pc = frame->pc(); 516 i::Address pc = frame->pc();
456 CHECK(code->contains(pc)); 517 CHECK(code->contains(pc));
457 iter.Advance(); 518 iter.Advance();
458 } 519 }
459 } 520 }
460 521
461 522
462 THREADED_TEST(StackIteration) { 523 THREADED_TEST(StackIteration) {
463 LocalContext env; 524 LocalContext env;
464 v8::Isolate* isolate = env->GetIsolate(); 525 v8::Isolate* isolate = env->GetIsolate();
465 v8::HandleScope scope(isolate); 526 v8::HandleScope scope(isolate);
466 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 527 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
467 i::StringStream::ClearMentionedObjectCache( 528 i::StringStream::ClearMentionedObjectCache(
468 reinterpret_cast<i::Isolate*>(isolate)); 529 reinterpret_cast<i::Isolate*>(isolate));
469 obj->SetAccessor(v8_str("xxx"), StackCheck); 530 obj->SetAccessor(v8_str("xxx"), StackCheck);
470 env->Global()->Set(v8_str("obj"), obj->NewInstance()); 531 CHECK(env->Global()
471 Script::Compile(String::NewFromUtf8( 532 ->Set(env.local(), v8_str("obj"),
472 isolate, 533 obj->NewInstance(env.local()).ToLocalChecked())
473 "function foo() {" 534 .FromJust());
474 " return obj.xxx;" 535 Script::Compile(env.local(), v8_str("function foo() {"
475 "}" 536 " return obj.xxx;"
476 "for (var i = 0; i < 100; i++) {" 537 "}"
477 " foo();" 538 "for (var i = 0; i < 100; i++) {"
478 "}"))->Run(); 539 " foo();"
540 "}"))
541 .ToLocalChecked()
542 ->Run(env.local())
543 .ToLocalChecked();
479 } 544 }
480 545
481 546
482 static void AllocateHandles(Local<String> name, 547 static void AllocateHandles(Local<String> name,
483 const v8::PropertyCallbackInfo<v8::Value>& info) { 548 const v8::PropertyCallbackInfo<v8::Value>& info) {
484 for (int i = 0; i < i::kHandleBlockSize + 1; i++) { 549 for (int i = 0; i < i::kHandleBlockSize + 1; i++) {
485 v8::Local<v8::Value>::New(info.GetIsolate(), name); 550 v8::Local<v8::Value>::New(info.GetIsolate(), name);
486 } 551 }
487 info.GetReturnValue().Set(v8::Integer::New(info.GetIsolate(), 100)); 552 info.GetReturnValue().Set(v8::Integer::New(info.GetIsolate(), 100));
488 } 553 }
489 554
490 555
491 THREADED_TEST(HandleScopeSegment) { 556 THREADED_TEST(HandleScopeSegment) {
492 // Check that we can return values past popping of handle scope 557 // Check that we can return values past popping of handle scope
493 // segments. 558 // segments.
494 LocalContext env; 559 LocalContext env;
495 v8::Isolate* isolate = env->GetIsolate(); 560 v8::Isolate* isolate = env->GetIsolate();
496 v8::HandleScope scope(isolate); 561 v8::HandleScope scope(isolate);
497 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 562 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
498 obj->SetAccessor(v8_str("xxx"), AllocateHandles); 563 obj->SetAccessor(v8_str("xxx"), AllocateHandles);
499 env->Global()->Set(v8_str("obj"), obj->NewInstance()); 564 CHECK(env->Global()
500 v8::Handle<v8::Value> result = Script::Compile(String::NewFromUtf8( 565 ->Set(env.local(), v8_str("obj"),
501 isolate, 566 obj->NewInstance(env.local()).ToLocalChecked())
502 "var result;" 567 .FromJust());
503 "for (var i = 0; i < 4; i++)" 568 v8::Local<v8::Value> result =
504 " result = obj.xxx;" 569 Script::Compile(env.local(), v8_str("var result;"
505 "result;"))->Run(); 570 "for (var i = 0; i < 4; i++)"
506 CHECK_EQ(100, result->Int32Value()); 571 " result = obj.xxx;"
572 "result;"))
573 .ToLocalChecked()
574 ->Run(env.local())
575 .ToLocalChecked();
576 CHECK_EQ(100, result->Int32Value(env.local()).FromJust());
507 } 577 }
508 578
509 579
510 void JSONStringifyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& info) { 580 void JSONStringifyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& info) {
511 v8::Handle<v8::Array> array = v8::Array::New(info.GetIsolate(), 1); 581 v8::Local<v8::Array> array = v8::Array::New(info.GetIsolate(), 1);
512 array->Set(0, v8_str("regress")); 582 CHECK(array->Set(info.GetIsolate()->GetCurrentContext(), 0, v8_str("regress"))
583 .FromJust());
513 info.GetReturnValue().Set(array); 584 info.GetReturnValue().Set(array);
514 } 585 }
515 586
516 587
517 void JSONStringifyGetter(Local<Name> name, 588 void JSONStringifyGetter(Local<Name> name,
518 const v8::PropertyCallbackInfo<v8::Value>& info) { 589 const v8::PropertyCallbackInfo<v8::Value>& info) {
519 info.GetReturnValue().Set(v8_str("crbug-161028")); 590 info.GetReturnValue().Set(v8_str("crbug-161028"));
520 } 591 }
521 592
522 593
523 THREADED_TEST(JSONStringifyNamedInterceptorObject) { 594 THREADED_TEST(JSONStringifyNamedInterceptorObject) {
524 LocalContext env; 595 LocalContext env;
525 v8::Isolate* isolate = env->GetIsolate(); 596 v8::Isolate* isolate = env->GetIsolate();
526 v8::HandleScope scope(isolate); 597 v8::HandleScope scope(isolate);
527 598
528 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 599 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
529 obj->SetHandler(v8::NamedPropertyHandlerConfiguration( 600 obj->SetHandler(v8::NamedPropertyHandlerConfiguration(
530 JSONStringifyGetter, NULL, NULL, NULL, JSONStringifyEnumerator)); 601 JSONStringifyGetter, NULL, NULL, NULL, JSONStringifyEnumerator));
531 env->Global()->Set(v8_str("obj"), obj->NewInstance()); 602 CHECK(env->Global()
532 v8::Handle<v8::String> expected = v8_str("{\"regress\":\"crbug-161028\"}"); 603 ->Set(env.local(), v8_str("obj"),
533 CHECK(CompileRun("JSON.stringify(obj)")->Equals(expected)); 604 obj->NewInstance(env.local()).ToLocalChecked())
605 .FromJust());
606 v8::Local<v8::String> expected = v8_str("{\"regress\":\"crbug-161028\"}");
607 CHECK(CompileRun("JSON.stringify(obj)")
608 ->Equals(env.local(), expected)
609 .FromJust());
534 } 610 }
535 611
536 612
537 static v8::Local<v8::Context> expected_current_context; 613 static v8::Local<v8::Context> expected_current_context;
538 static v8::Local<v8::Context> expected_calling_context; 614 static v8::Local<v8::Context> expected_calling_context;
539 615
540 616
541 static void check_contexts(const v8::FunctionCallbackInfo<v8::Value>& info) { 617 static void check_contexts(const v8::FunctionCallbackInfo<v8::Value>& info) {
542 ApiTestFuzzer::Fuzz(); 618 ApiTestFuzzer::Fuzz();
543 CHECK(expected_current_context == info.GetIsolate()->GetCurrentContext()); 619 CHECK(expected_current_context == info.GetIsolate()->GetCurrentContext());
544 CHECK(expected_calling_context == info.GetIsolate()->GetCallingContext()); 620 CHECK(expected_calling_context == info.GetIsolate()->GetCallingContext());
545 } 621 }
546 622
547 623
548 THREADED_TEST(AccessorPropertyCrossContext) { 624 THREADED_TEST(AccessorPropertyCrossContext) {
549 LocalContext env; 625 LocalContext env;
550 v8::Isolate* isolate = env->GetIsolate(); 626 v8::Isolate* isolate = env->GetIsolate();
551 v8::HandleScope scope(isolate); 627 v8::HandleScope scope(isolate);
552 v8::Handle<v8::Function> fun = v8::Function::New(isolate, check_contexts); 628 v8::Local<v8::Function> fun =
629 v8::Function::New(env.local(), check_contexts).ToLocalChecked();
553 LocalContext switch_context; 630 LocalContext switch_context;
554 switch_context->Global()->Set(v8_str("fun"), fun); 631 CHECK(switch_context->Global()
632 ->Set(switch_context.local(), v8_str("fun"), fun)
633 .FromJust());
555 v8::TryCatch try_catch(isolate); 634 v8::TryCatch try_catch(isolate);
556 expected_current_context = env.local(); 635 expected_current_context = env.local();
557 expected_calling_context = switch_context.local(); 636 expected_calling_context = switch_context.local();
558 CompileRun( 637 CompileRun(
559 "var o = Object.create(null, { n: { get:fun } });" 638 "var o = Object.create(null, { n: { get:fun } });"
560 "for (var i = 0; i < 10; i++) o.n;"); 639 "for (var i = 0; i < 10; i++) o.n;");
561 CHECK(!try_catch.HasCaught()); 640 CHECK(!try_catch.HasCaught());
562 } 641 }
563 642
564 643
(...skipping 25 matching lines...) Expand all
590 const v8::PropertyCallbackInfo<v8::Value>& info) { 669 const v8::PropertyCallbackInfo<v8::Value>& info) {
591 ApiTestFuzzer::Fuzz(); 670 ApiTestFuzzer::Fuzz();
592 info.GetReturnValue().Set(v8_num(1)); 671 info.GetReturnValue().Set(v8_num(1));
593 } 672 }
594 673
595 674
596 THREADED_TEST(Regress433458) { 675 THREADED_TEST(Regress433458) {
597 LocalContext env; 676 LocalContext env;
598 v8::Isolate* isolate = env->GetIsolate(); 677 v8::Isolate* isolate = env->GetIsolate();
599 v8::HandleScope scope(isolate); 678 v8::HandleScope scope(isolate);
600 v8::Handle<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate); 679 v8::Local<v8::ObjectTemplate> obj = ObjectTemplate::New(isolate);
601 obj->SetHandler(v8::NamedPropertyHandlerConfiguration(EmptyGetter)); 680 obj->SetHandler(v8::NamedPropertyHandlerConfiguration(EmptyGetter));
602 obj->SetNativeDataProperty(v8_str("prop"), OneProperty); 681 obj->SetNativeDataProperty(v8_str("prop"), OneProperty);
603 env->Global()->Set(v8_str("obj"), obj->NewInstance()); 682 CHECK(env->Global()
683 ->Set(env.local(), v8_str("obj"),
684 obj->NewInstance(env.local()).ToLocalChecked())
685 .FromJust());
604 CompileRun( 686 CompileRun(
605 "Object.defineProperty(obj, 'prop', { writable: false });" 687 "Object.defineProperty(obj, 'prop', { writable: false });"
606 "Object.defineProperty(obj, 'prop', { writable: true });"); 688 "Object.defineProperty(obj, 'prop', { writable: true });");
607 } 689 }
608 690
609 691
610 static bool security_check_value = false; 692 static bool security_check_value = false;
611 693
612 694
613 static bool SecurityTestCallback(Local<v8::Context> accessing_context, 695 static bool SecurityTestCallback(Local<v8::Context> accessing_context,
614 Local<v8::Object> accessed_object) { 696 Local<v8::Object> accessed_object) {
615 return security_check_value; 697 return security_check_value;
616 } 698 }
617 699
618 700
619 TEST(PrototypeGetterAccessCheck) { 701 TEST(PrototypeGetterAccessCheck) {
620 i::FLAG_allow_natives_syntax = true; 702 i::FLAG_allow_natives_syntax = true;
621 LocalContext env; 703 LocalContext env;
622 v8::Isolate* isolate = env->GetIsolate(); 704 v8::Isolate* isolate = env->GetIsolate();
623 v8::HandleScope scope(isolate); 705 v8::HandleScope scope(isolate);
624 auto fun_templ = v8::FunctionTemplate::New(isolate); 706 auto fun_templ = v8::FunctionTemplate::New(isolate);
625 auto getter_templ = v8::FunctionTemplate::New(isolate, handle_property); 707 auto getter_templ = v8::FunctionTemplate::New(isolate, handle_property);
626 getter_templ->SetAcceptAnyReceiver(false); 708 getter_templ->SetAcceptAnyReceiver(false);
627 fun_templ->InstanceTemplate()->SetAccessorProperty(v8_str("foo"), 709 fun_templ->InstanceTemplate()->SetAccessorProperty(v8_str("foo"),
628 getter_templ); 710 getter_templ);
629 auto obj_templ = v8::ObjectTemplate::New(isolate); 711 auto obj_templ = v8::ObjectTemplate::New(isolate);
630 obj_templ->SetAccessCheckCallback(SecurityTestCallback); 712 obj_templ->SetAccessCheckCallback(SecurityTestCallback);
631 env->Global()->Set(v8_str("Fun"), fun_templ->GetFunction()); 713 CHECK(env->Global()
632 env->Global()->Set(v8_str("obj"), obj_templ->NewInstance()); 714 ->Set(env.local(), v8_str("Fun"),
633 env->Global()->Set(v8_str("obj2"), obj_templ->NewInstance()); 715 fun_templ->GetFunction(env.local()).ToLocalChecked())
716 .FromJust());
717 CHECK(env->Global()
718 ->Set(env.local(), v8_str("obj"),
719 obj_templ->NewInstance(env.local()).ToLocalChecked())
720 .FromJust());
721 CHECK(env->Global()
722 ->Set(env.local(), v8_str("obj2"),
723 obj_templ->NewInstance(env.local()).ToLocalChecked())
724 .FromJust());
634 725
635 security_check_value = true; 726 security_check_value = true;
636 CompileRun("var proto = new Fun();"); 727 CompileRun("var proto = new Fun();");
637 CompileRun("obj.__proto__ = proto;"); 728 CompileRun("obj.__proto__ = proto;");
638 ExpectInt32("proto.foo", 907); 729 ExpectInt32("proto.foo", 907);
639 730
640 // Test direct. 731 // Test direct.
641 security_check_value = true; 732 security_check_value = true;
642 ExpectInt32("obj.foo", 907); 733 ExpectInt32("obj.foo", 907);
643 security_check_value = false; 734 security_check_value = false;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 772
682 security_check_value = true; 773 security_check_value = true;
683 ExpectInt32("f()", 907); 774 ExpectInt32("f()", 907);
684 security_check_value = false; 775 security_check_value = false;
685 { 776 {
686 v8::TryCatch try_catch(isolate); 777 v8::TryCatch try_catch(isolate);
687 CompileRun("f();"); 778 CompileRun("f();");
688 CHECK(try_catch.HasCaught()); 779 CHECK(try_catch.HasCaught());
689 } 780 }
690 } 781 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698