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

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

Issue 11111015: Allow evals for debugger even if they are prohibited in the debugee context (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 8 years, 2 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
« src/runtime.cc ('K') | « src/runtime.cc ('k') | 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
(...skipping 2363 matching lines...) Expand 10 before | Expand all | Expand 10 after
2374 // Set breakpoint does not duplicate hits 2374 // Set breakpoint does not duplicate hits
2375 foo->Call(env->Global(), 0, NULL); 2375 foo->Call(env->Global(), 0, NULL);
2376 CHECK_EQ(2, break_point_hit_count); 2376 CHECK_EQ(2, break_point_hit_count);
2377 2377
2378 ClearBreakPoint(bp); 2378 ClearBreakPoint(bp);
2379 v8::Debug::SetDebugEventListener(NULL); 2379 v8::Debug::SetDebugEventListener(NULL);
2380 CheckDebuggerUnloaded(); 2380 CheckDebuggerUnloaded();
2381 } 2381 }
2382 2382
2383 2383
2384 // Thest that the evaluation of expressions when a break point is hit generates 2384 // Test that the evaluation of expressions when a break point is hit generates
2385 // the correct results. 2385 // the correct results.
2386 TEST(DebugEvaluate) { 2386 TEST(DebugEvaluate) {
2387 v8::HandleScope scope; 2387 v8::HandleScope scope;
2388 DebugLocalContext env; 2388 DebugLocalContext env;
2389 env.ExposeDebug(); 2389 env.ExposeDebug();
2390 2390
2391 // Create a function for checking the evaluation when hitting a break point. 2391 // Create a function for checking the evaluation when hitting a break point.
2392 evaluate_check_function = CompileFunction(&env, 2392 evaluate_check_function = CompileFunction(&env,
2393 evaluate_check_source, 2393 evaluate_check_source,
2394 "evaluate_check"); 2394 "evaluate_check");
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
2490 v8::Handle<v8::Value> argv_bar_3[2] = { 2490 v8::Handle<v8::Value> argv_bar_3[2] = {
2491 v8::String::New("Hello, world!"), 2491 v8::String::New("Hello, world!"),
2492 v8::Number::New(barbar_break_position + 1) 2492 v8::Number::New(barbar_break_position + 1)
2493 }; 2493 };
2494 bar->Call(env->Global(), 2, argv_bar_3); 2494 bar->Call(env->Global(), 2, argv_bar_3);
2495 2495
2496 v8::Debug::SetDebugEventListener(NULL); 2496 v8::Debug::SetDebugEventListener(NULL);
2497 CheckDebuggerUnloaded(); 2497 CheckDebuggerUnloaded();
2498 } 2498 }
2499 2499
2500
2501 int debugEventCount = 0;
2502 static void CheckDebugEvent(const v8::Debug::EventDetails& eventDetails) {
2503 if (eventDetails.GetEvent() == v8::Break)
Michael Starzinger 2012/10/15 09:51:25 Either on one line or add curly brackets.
yurys 2012/10/15 10:14:53 Done.
2504 ++debugEventCount;
2505 }
2506
2507 // Test that the conditional breakpoints work event if code generation from
2508 // strings is prohibited in the debugee context.
2509 TEST(ConditionalBreakpointWithCodeGenerationDisallowed) {
2510 v8::HandleScope scope;
2511 DebugLocalContext env;
2512 env.ExposeDebug();
2513
2514 v8::Debug::SetDebugEventListener2(CheckDebugEvent);
2515
2516 v8::Local<v8::Function> foo = CompileFunction(&env,
2517 "function foo(x) {\n"
2518 " var s = 'String value2';\n"
2519 " return s + x;\n"
2520 "}",
2521 "foo");
2522
2523 // Set conditional breakpoint with condition 'true'.
2524 CompileRun("debug.Debug.setBreakPoint(foo, 2, 0, 'true')");
2525
2526 debugEventCount = 0;
2527 env->AllowCodeGenerationFromStrings(false);
2528 foo->Call(env->Global(), 0, NULL);
2529 CHECK_EQ(1, debugEventCount);
2530
2531 v8::Debug::SetDebugEventListener2(NULL);
2532 CheckDebuggerUnloaded();
2533 }
2534
Michael Starzinger 2012/10/15 09:51:25 Add second empty newline for readability.
yurys 2012/10/15 10:14:53 Done.
2535 bool checkedDebugEvals = true;
2536 v8::Handle<v8::Function> checkGlobalEvalFunction;
2537 v8::Handle<v8::Function> checkFrameEvalFunction;
2538 static void CheckDebugEval(const v8::Debug::EventDetails& eventDetails) {
2539 if (eventDetails.GetEvent() == v8::Break) {
2540 ++debugEventCount;
2541 v8::HandleScope handleScope;
2542
2543 v8::Handle<v8::Value> args[] = { eventDetails.GetExecutionState() };
2544 CHECK(checkGlobalEvalFunction->Call(
2545 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue());
2546 CHECK(checkFrameEvalFunction->Call(
2547 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue());
2548 }
2549 }
2550
2551 // Test that the evaluation of expressions when a break point is hit generates
2552 // the correct results in case code generation from strings is disallowed in the
2553 // debugee context.
2554 TEST(DebugEvaluateWithCodeGenerationDisallowed) {
2555 v8::HandleScope scope;
2556 DebugLocalContext env;
2557 env.ExposeDebug();
2558
2559 v8::Debug::SetDebugEventListener2(CheckDebugEval);
2560
2561 v8::Local<v8::Function> foo = CompileFunction(&env,
2562 "var global = 'Global';\n"
2563 "function foo(x) {\n"
2564 " var local = 'Local';\n"
2565 " debugger;\n"
2566 " return local + x;\n"
2567 "}",
2568 "foo");
2569 checkGlobalEvalFunction = CompileFunction(&env,
2570 "function checkGlobalEval(exec_state) {\n"
2571 " return exec_state.evaluateGlobal('global').value() === 'Global';\n"
2572 "}",
2573 "checkGlobalEval");
2574
2575 checkFrameEvalFunction = CompileFunction(&env,
2576 "function checkFrameEval(exec_state) {\n"
2577 " return exec_state.frame(0).evaluate('local').value() === 'Local';\n"
2578 "}",
2579 "checkFrameEval");
2580 debugEventCount = 0;
2581 env->AllowCodeGenerationFromStrings(false);
2582 foo->Call(env->Global(), 0, NULL);
2583 CHECK_EQ(1, debugEventCount);
2584
2585 checkGlobalEvalFunction.Clear();
2586 checkFrameEvalFunction.Clear();
2587 v8::Debug::SetDebugEventListener2(NULL);
2588 CheckDebuggerUnloaded();
2589 }
2590
Michael Starzinger 2012/10/15 09:51:25 Add second empty newline for readability.
yurys 2012/10/15 10:14:53 Done.
2500 // Copies a C string to a 16-bit string. Does not check for buffer overflow. 2591 // Copies a C string to a 16-bit string. Does not check for buffer overflow.
2501 // Does not use the V8 engine to convert strings, so it can be used 2592 // Does not use the V8 engine to convert strings, so it can be used
2502 // in any thread. Returns the length of the string. 2593 // in any thread. Returns the length of the string.
2503 int AsciiToUtf16(const char* input_buffer, uint16_t* output_buffer) { 2594 int AsciiToUtf16(const char* input_buffer, uint16_t* output_buffer) {
2504 int i; 2595 int i;
2505 for (i = 0; input_buffer[i] != '\0'; ++i) { 2596 for (i = 0; input_buffer[i] != '\0'; ++i) {
2506 // ASCII does not use chars > 127, but be careful anyway. 2597 // ASCII does not use chars > 127, but be careful anyway.
2507 output_buffer[i] = static_cast<unsigned char>(input_buffer[i]); 2598 output_buffer[i] = static_cast<unsigned char>(input_buffer[i]);
2508 } 2599 }
2509 output_buffer[i] = 0; 2600 output_buffer[i] = 0;
(...skipping 4923 matching lines...) Expand 10 before | Expand all | Expand 10 after
7433 TEST(LiveEditDisabled) { 7524 TEST(LiveEditDisabled) {
7434 v8::internal::FLAG_allow_natives_syntax = true; 7525 v8::internal::FLAG_allow_natives_syntax = true;
7435 v8::HandleScope scope; 7526 v8::HandleScope scope;
7436 LocalContext context; 7527 LocalContext context;
7437 v8::Debug::SetLiveEditEnabled(false); 7528 v8::Debug::SetLiveEditEnabled(false);
7438 CompileRun("%LiveEditCompareStrings('', '')"); 7529 CompileRun("%LiveEditCompareStrings('', '')");
7439 } 7530 }
7440 7531
7441 7532
7442 #endif // ENABLE_DEBUGGER_SUPPORT 7533 #endif // ENABLE_DEBUGGER_SUPPORT
OLDNEW
« src/runtime.cc ('K') | « src/runtime.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698