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

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

Issue 12729023: first step to remove unsafe handles (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: 1 month rebase Created 7 years, 7 months 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 | Annotate | Revision Log
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
(...skipping 11 matching lines...) Expand all
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 #ifdef ENABLE_DEBUGGER_SUPPORT 28 #ifdef ENABLE_DEBUGGER_SUPPORT
29 29
30 #include <stdlib.h> 30 #include <stdlib.h>
31 31
32 // TODO(dcarney): remove
33 #define V8_ALLOW_ACCESS_TO_PERSISTENT_ARROW
34 #define V8_ALLOW_ACCESS_TO_PERSISTENT_IMPLICIT
35
32 #include "v8.h" 36 #include "v8.h"
33 37
34 #include "api.h" 38 #include "api.h"
35 #include "cctest.h" 39 #include "cctest.h"
36 #include "compilation-cache.h" 40 #include "compilation-cache.h"
37 #include "debug.h" 41 #include "debug.h"
38 #include "deoptimizer.h" 42 #include "deoptimizer.h"
39 #include "platform.h" 43 #include "platform.h"
40 #include "stub-cache.h" 44 #include "stub-cache.h"
41 #include "utils.h" 45 #include "utils.h"
(...skipping 5095 matching lines...) Expand 10 before | Expand all | Expand 10 after
5137 "\n" 5141 "\n"
5138 "foo();\n"; 5142 "foo();\n";
5139 5143
5140 v8::V8::Initialize(); 5144 v8::V8::Initialize();
5141 DebugLocalContext env; 5145 DebugLocalContext env;
5142 v8::HandleScope scope(env->GetIsolate()); 5146 v8::HandleScope scope(env->GetIsolate());
5143 v8::Debug::SetMessageHandler2(&ThreadedMessageHandler); 5147 v8::Debug::SetMessageHandler2(&ThreadedMessageHandler);
5144 v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); 5148 v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New();
5145 global_template->Set(v8::String::New("ThreadedAtBarrier1"), 5149 global_template->Set(v8::String::New("ThreadedAtBarrier1"),
5146 v8::FunctionTemplate::New(ThreadedAtBarrier1)); 5150 v8::FunctionTemplate::New(ThreadedAtBarrier1));
5147 v8::Handle<v8::Context> context = v8::Context::New(NULL, global_template); 5151 v8::Handle<v8::Context> context = v8::Context::New(v8::Isolate::GetCurrent(),
5152 NULL,
5153 global_template);
5148 v8::Context::Scope context_scope(context); 5154 v8::Context::Scope context_scope(context);
5149 5155
5150 CompileRun(source); 5156 CompileRun(source);
5151 } 5157 }
5152 5158
5153 void DebuggerThread::Run() { 5159 void DebuggerThread::Run() {
5154 const int kBufSize = 1000; 5160 const int kBufSize = 1000;
5155 uint16_t buffer[kBufSize]; 5161 uint16_t buffer[kBufSize];
5156 5162
5157 const char* command_1 = "{\"seq\":102," 5163 const char* command_1 = "{\"seq\":102,"
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
5513 v8::HandleScope scope(v8::Isolate::GetCurrent()); 5519 v8::HandleScope scope(v8::Isolate::GetCurrent());
5514 v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); 5520 v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New();
5515 global_template->Set(v8::String::New("CheckFrameCount"), 5521 global_template->Set(v8::String::New("CheckFrameCount"),
5516 v8::FunctionTemplate::New(CheckFrameCount)); 5522 v8::FunctionTemplate::New(CheckFrameCount));
5517 global_template->Set(v8::String::New("CheckSourceLine"), 5523 global_template->Set(v8::String::New("CheckSourceLine"),
5518 v8::FunctionTemplate::New(CheckSourceLine)); 5524 v8::FunctionTemplate::New(CheckSourceLine));
5519 global_template->Set(v8::String::New("CheckDataParameter"), 5525 global_template->Set(v8::String::New("CheckDataParameter"),
5520 v8::FunctionTemplate::New(CheckDataParameter)); 5526 v8::FunctionTemplate::New(CheckDataParameter));
5521 global_template->Set(v8::String::New("CheckClosure"), 5527 global_template->Set(v8::String::New("CheckClosure"),
5522 v8::FunctionTemplate::New(CheckClosure)); 5528 v8::FunctionTemplate::New(CheckClosure));
5523 v8::Handle<v8::Context> context = v8::Context::New(NULL, global_template); 5529 v8::Handle<v8::Context> context = v8::Context::New(v8::Isolate::GetCurrent(),
5530 NULL,
5531 global_template);
5524 v8::Context::Scope context_scope(context); 5532 v8::Context::Scope context_scope(context);
5525 5533
5526 // Compile a function for checking the number of JavaScript frames. 5534 // Compile a function for checking the number of JavaScript frames.
5527 v8::Script::Compile(v8::String::New(frame_count_source))->Run(); 5535 v8::Script::Compile(v8::String::New(frame_count_source))->Run();
5528 frame_count = v8::Local<v8::Function>::Cast( 5536 frame_count = v8::Local<v8::Function>::Cast(
5529 context->Global()->Get(v8::String::New("frame_count"))); 5537 context->Global()->Get(v8::String::New("frame_count")));
5530 5538
5531 // Compile a function for returning the source line for the top frame. 5539 // Compile a function for returning the source line for the top frame.
5532 v8::Script::Compile(v8::String::New(frame_source_line_source))->Run(); 5540 v8::Script::Compile(v8::String::New(frame_source_line_source))->Run();
5533 frame_source_line = v8::Local<v8::Function>::Cast( 5541 frame_source_line = v8::Local<v8::Function>::Cast(
(...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after
6237 if (IsBreakEventMessage(print_buffer)) { 6245 if (IsBreakEventMessage(print_buffer)) {
6238 SendContinueCommand(); 6246 SendContinueCommand();
6239 } 6247 }
6240 } 6248 }
6241 6249
6242 6250
6243 // Test which creates two contexts and sets different embedder data on each. 6251 // Test which creates two contexts and sets different embedder data on each.
6244 // Checks that this data is set correctly and that when the debug message 6252 // Checks that this data is set correctly and that when the debug message
6245 // handler is called the expected context is the one active. 6253 // handler is called the expected context is the one active.
6246 TEST(ContextData) { 6254 TEST(ContextData) {
6247 v8::HandleScope scope(v8::Isolate::GetCurrent()); 6255 v8::Isolate* isolate = v8::Isolate::GetCurrent();
6256 v8::HandleScope scope(isolate);
6248 6257
6249 v8::Debug::SetMessageHandler2(ContextCheckMessageHandler); 6258 v8::Debug::SetMessageHandler2(ContextCheckMessageHandler);
6250 6259
6251 // Create two contexts. 6260 // Create two contexts.
6252 v8::Persistent<v8::Context> context_1; 6261 v8::Handle<v8::Context> context_1;
6253 v8::Persistent<v8::Context> context_2; 6262 v8::Handle<v8::Context> context_2;
6254 v8::Handle<v8::ObjectTemplate> global_template = 6263 v8::Handle<v8::ObjectTemplate> global_template =
6255 v8::Handle<v8::ObjectTemplate>(); 6264 v8::Handle<v8::ObjectTemplate>();
6256 v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>(); 6265 v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>();
6257 context_1 = v8::Context::New(NULL, global_template, global_object); 6266 context_1 = v8::Context::New(isolate, NULL, global_template, global_object);
6258 context_2 = v8::Context::New(NULL, global_template, global_object); 6267 context_2 = v8::Context::New(isolate, NULL, global_template, global_object);
6259 6268
6260 // Default data value is undefined. 6269 // Default data value is undefined.
6261 CHECK(context_1->GetEmbedderData(0)->IsUndefined()); 6270 CHECK(context_1->GetEmbedderData(0)->IsUndefined());
6262 CHECK(context_2->GetEmbedderData(0)->IsUndefined()); 6271 CHECK(context_2->GetEmbedderData(0)->IsUndefined());
6263 6272
6264 // Set and check different data values. 6273 // Set and check different data values.
6265 v8::Handle<v8::String> data_1 = v8::String::New("1"); 6274 v8::Handle<v8::String> data_1 = v8::String::New("1");
6266 v8::Handle<v8::String> data_2 = v8::String::New("2"); 6275 v8::Handle<v8::String> data_2 = v8::String::New("2");
6267 context_1->SetEmbedderData(0, data_1); 6276 context_1->SetEmbedderData(0, data_1);
6268 context_2->SetEmbedderData(0, data_2); 6277 context_2->SetEmbedderData(0, data_2);
6269 CHECK(context_1->GetEmbedderData(0)->StrictEquals(data_1)); 6278 CHECK(context_1->GetEmbedderData(0)->StrictEquals(data_1));
6270 CHECK(context_2->GetEmbedderData(0)->StrictEquals(data_2)); 6279 CHECK(context_2->GetEmbedderData(0)->StrictEquals(data_2));
6271 6280
6272 // Simple test function which causes a break. 6281 // Simple test function which causes a break.
6273 const char* source = "function f() { debugger; }"; 6282 const char* source = "function f() { debugger; }";
6274 6283
6275 // Enter and run function in the first context. 6284 // Enter and run function in the first context.
6276 { 6285 {
6277 v8::Context::Scope context_scope(context_1); 6286 v8::Context::Scope context_scope(context_1);
6278 expected_context = context_1; 6287 expected_context = v8::Persistent<v8::Context>(*context_1);
6279 expected_context_data = data_1; 6288 expected_context_data = data_1;
6280 v8::Local<v8::Function> f = CompileFunction(source, "f"); 6289 v8::Local<v8::Function> f = CompileFunction(source, "f");
6281 f->Call(context_1->Global(), 0, NULL); 6290 f->Call(context_1->Global(), 0, NULL);
6282 } 6291 }
6283 6292
6284 6293
6285 // Enter and run function in the second context. 6294 // Enter and run function in the second context.
6286 { 6295 {
6287 v8::Context::Scope context_scope(context_2); 6296 v8::Context::Scope context_scope(context_2);
6288 expected_context = context_2; 6297 expected_context = v8::Persistent<v8::Context>(*context_2);
6289 expected_context_data = data_2; 6298 expected_context_data = data_2;
6290 v8::Local<v8::Function> f = CompileFunction(source, "f"); 6299 v8::Local<v8::Function> f = CompileFunction(source, "f");
6291 f->Call(context_2->Global(), 0, NULL); 6300 f->Call(context_2->Global(), 0, NULL);
6292 } 6301 }
6293 6302
6294 // Two times compile event and two times break event. 6303 // Two times compile event and two times break event.
6295 CHECK_GT(message_handler_hit_count, 4); 6304 CHECK_GT(message_handler_hit_count, 4);
6296 6305
6297 v8::Debug::SetMessageHandler2(NULL); 6306 v8::Debug::SetMessageHandler2(NULL);
6298 CheckDebuggerUnloaded(); 6307 CheckDebuggerUnloaded();
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
6409 // cause Break events. 6418 // cause Break events.
6410 CHECK_EQ(1, break_point_hit_count); 6419 CHECK_EQ(1, break_point_hit_count);
6411 CHECK_EQ("f", last_function_hit); 6420 CHECK_EQ("f", last_function_hit);
6412 } 6421 }
6413 #endif // V8_INTERPRETED_REGEXP 6422 #endif // V8_INTERPRETED_REGEXP
6414 6423
6415 6424
6416 // Common part of EvalContextData and NestedBreakEventContextData tests. 6425 // Common part of EvalContextData and NestedBreakEventContextData tests.
6417 static void ExecuteScriptForContextCheck() { 6426 static void ExecuteScriptForContextCheck() {
6418 // Create a context. 6427 // Create a context.
6419 v8::Persistent<v8::Context> context_1; 6428 v8::Handle<v8::Context> context_1;
6420 v8::Handle<v8::ObjectTemplate> global_template = 6429 v8::Handle<v8::ObjectTemplate> global_template =
6421 v8::Handle<v8::ObjectTemplate>(); 6430 v8::Handle<v8::ObjectTemplate>();
6422 context_1 = v8::Context::New(NULL, global_template); 6431 context_1 =
6432 v8::Context::New(v8::Isolate::GetCurrent(), NULL, global_template);
6423 6433
6424 // Default data value is undefined. 6434 // Default data value is undefined.
6425 CHECK(context_1->GetEmbedderData(0)->IsUndefined()); 6435 CHECK(context_1->GetEmbedderData(0)->IsUndefined());
6426 6436
6427 // Set and check a data value. 6437 // Set and check a data value.
6428 v8::Handle<v8::String> data_1 = v8::String::New("1"); 6438 v8::Handle<v8::String> data_1 = v8::String::New("1");
6429 context_1->SetEmbedderData(0, data_1); 6439 context_1->SetEmbedderData(0, data_1);
6430 CHECK(context_1->GetEmbedderData(0)->StrictEquals(data_1)); 6440 CHECK(context_1->GetEmbedderData(0)->StrictEquals(data_1));
6431 6441
6432 // Simple test function with eval that causes a break. 6442 // Simple test function with eval that causes a break.
6433 const char* source = "function f() { eval('debugger;'); }"; 6443 const char* source = "function f() { eval('debugger;'); }";
6434 6444
6435 // Enter and run function in the context. 6445 // Enter and run function in the context.
6436 { 6446 {
6437 v8::Context::Scope context_scope(context_1); 6447 v8::Context::Scope context_scope(context_1);
6438 expected_context = context_1; 6448 expected_context = v8::Persistent<v8::Context>(*context_1);
6439 expected_context_data = data_1; 6449 expected_context_data = data_1;
6440 v8::Local<v8::Function> f = CompileFunction(source, "f"); 6450 v8::Local<v8::Function> f = CompileFunction(source, "f");
6441 f->Call(context_1->Global(), 0, NULL); 6451 f->Call(context_1->Global(), 0, NULL);
6442 } 6452 }
6443 } 6453 }
6444 6454
6445 6455
6446 // Test which creates a context and sets embedder data on it. Checks that this 6456 // Test which creates a context and sets embedder data on it. Checks that this
6447 // data is set correctly and that when the debug message handler is called for 6457 // data is set correctly and that when the debug message handler is called for
6448 // break event in an eval statement the expected context is the one returned by 6458 // break event in an eval statement the expected context is the one returned by
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
7068 CHECK_EQ(expected_callback_data, details.GetCallbackData()); 7078 CHECK_EQ(expected_callback_data, details.GetCallbackData());
7069 } 7079 }
7070 7080
7071 // Check that event details contain context where debug event occured. 7081 // Check that event details contain context where debug event occured.
7072 TEST(DebugEventContext) { 7082 TEST(DebugEventContext) {
7073 v8::HandleScope scope(v8::Isolate::GetCurrent()); 7083 v8::HandleScope scope(v8::Isolate::GetCurrent());
7074 expected_callback_data = v8::Int32::New(2010); 7084 expected_callback_data = v8::Int32::New(2010);
7075 v8::Debug::SetDebugEventListener2(DebugEventContextChecker, 7085 v8::Debug::SetDebugEventListener2(DebugEventContextChecker,
7076 expected_callback_data); 7086 expected_callback_data);
7077 expected_context = v8::Context::New(); 7087 expected_context = v8::Context::New();
7078 v8::Context::Scope context_scope(expected_context); 7088 v8::Context::Scope context_scope(
7089 v8::Isolate::GetCurrent(), expected_context);
7079 v8::Script::Compile(v8::String::New("(function(){debugger;})();"))->Run(); 7090 v8::Script::Compile(v8::String::New("(function(){debugger;})();"))->Run();
7080 expected_context.Dispose(expected_context->GetIsolate()); 7091 expected_context.Dispose(expected_context->GetIsolate());
7081 expected_context.Clear(); 7092 expected_context.Clear();
7082 v8::Debug::SetDebugEventListener(NULL); 7093 v8::Debug::SetDebugEventListener(NULL);
7083 expected_context_data = v8::Handle<v8::Value>(); 7094 expected_context_data = v8::Handle<v8::Value>();
7084 CheckDebuggerUnloaded(); 7095 CheckDebuggerUnloaded();
7085 } 7096 }
7086 7097
7087 7098
7088 static void* expected_break_data; 7099 static void* expected_break_data;
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
7531 TEST(LiveEditDisabled) { 7542 TEST(LiveEditDisabled) {
7532 v8::internal::FLAG_allow_natives_syntax = true; 7543 v8::internal::FLAG_allow_natives_syntax = true;
7533 LocalContext env; 7544 LocalContext env;
7534 v8::HandleScope scope(env->GetIsolate()); 7545 v8::HandleScope scope(env->GetIsolate());
7535 v8::Debug::SetLiveEditEnabled(false); 7546 v8::Debug::SetLiveEditEnabled(false);
7536 CompileRun("%LiveEditCompareStrings('', '')"); 7547 CompileRun("%LiveEditCompareStrings('', '')");
7537 } 7548 }
7538 7549
7539 7550
7540 #endif // ENABLE_DEBUGGER_SUPPORT 7551 #endif // ENABLE_DEBUGGER_SUPPORT
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698