| Index: test/inspector/inspector-test.cc
|
| diff --git a/test/inspector/inspector-test.cc b/test/inspector/inspector-test.cc
|
| index f98a7d8ce12e313ad4391a2e3fb12e06e2eb1902..3899ec7e7697dae56c422877a68efcd734dfc027 100644
|
| --- a/test/inspector/inspector-test.cc
|
| +++ b/test/inspector/inspector-test.cc
|
| @@ -55,7 +55,9 @@ class UtilsExtension : public v8::Extension {
|
| "native function setlocale();"
|
| "native function load();"
|
| "native function compileAndRunWithOrigin();"
|
| - "native function setCurrentTimeMSForTest();") {}
|
| + "native function setCurrentTimeMSForTest();"
|
| + "native function schedulePauseOnNextStatement();"
|
| + "native function cancelPauseOnNextStatement();") {}
|
| virtual v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate(
|
| v8::Isolate* isolate, v8::Local<v8::String> name) {
|
| v8::Local<v8::Context> context = isolate->GetCurrentContext();
|
| @@ -96,6 +98,21 @@ class UtilsExtension : public v8::Extension {
|
| .FromJust()) {
|
| return v8::FunctionTemplate::New(isolate,
|
| UtilsExtension::SetCurrentTimeMSForTest);
|
| + } else if (name->Equals(context,
|
| + v8::String::NewFromUtf8(
|
| + isolate, "schedulePauseOnNextStatement",
|
| + v8::NewStringType::kNormal)
|
| + .ToLocalChecked())
|
| + .FromJust()) {
|
| + return v8::FunctionTemplate::New(
|
| + isolate, UtilsExtension::SchedulePauseOnNextStatement);
|
| + } else if (name->Equals(context, v8::String::NewFromUtf8(
|
| + isolate, "cancelPauseOnNextStatement",
|
| + v8::NewStringType::kNormal)
|
| + .ToLocalChecked())
|
| + .FromJust()) {
|
| + return v8::FunctionTemplate::New(
|
| + isolate, UtilsExtension::CancelPauseOnNextStatement);
|
| }
|
| return v8::Local<v8::FunctionTemplate>();
|
| }
|
| @@ -203,6 +220,31 @@ class UtilsExtension : public v8::Extension {
|
| inspector_client_->setCurrentTimeMSForTest(
|
| args[0].As<v8::Number>()->Value());
|
| }
|
| +
|
| + static void SchedulePauseOnNextStatement(
|
| + const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| + if (args.Length() != 2 || !args[0]->IsString() || !args[1]->IsString()) {
|
| + fprintf(
|
| + stderr,
|
| + "Internal error: schedulePauseOnNextStatement('reason', 'details').");
|
| + Exit();
|
| + }
|
| + v8::internal::Vector<uint16_t> reason = ToVector(args[0].As<v8::String>());
|
| + v8_inspector::StringView reason_view(reason.start(), reason.length());
|
| + v8::internal::Vector<uint16_t> details = ToVector(args[1].As<v8::String>());
|
| + v8_inspector::StringView details_view(details.start(), details.length());
|
| + inspector_client_->session()->schedulePauseOnNextStatement(reason_view,
|
| + details_view);
|
| + }
|
| +
|
| + static void CancelPauseOnNextStatement(
|
| + const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| + if (args.Length() != 0) {
|
| + fprintf(stderr, "Internal error: cancelPauseOnNextStatement().");
|
| + Exit();
|
| + }
|
| + inspector_client_->session()->cancelPauseOnNextStatement();
|
| + }
|
| };
|
|
|
| TaskRunner* UtilsExtension::backend_runner_ = nullptr;
|
| @@ -283,7 +325,8 @@ class InspectorExtension : public v8::Extension {
|
| : v8::Extension("v8_inspector/inspector",
|
| "native function attachInspector();"
|
| "native function detachInspector();"
|
| - "native function setMaxAsyncTaskStacks();") {}
|
| + "native function setMaxAsyncTaskStacks();"
|
| + "native function breakProgram();") {}
|
|
|
| virtual v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate(
|
| v8::Isolate* isolate, v8::Local<v8::String> name) {
|
| @@ -307,6 +350,13 @@ class InspectorExtension : public v8::Extension {
|
| .FromJust()) {
|
| return v8::FunctionTemplate::New(
|
| isolate, InspectorExtension::SetMaxAsyncTaskStacks);
|
| + } else if (name->Equals(context,
|
| + v8::String::NewFromUtf8(isolate, "breakProgram",
|
| + v8::NewStringType::kNormal)
|
| + .ToLocalChecked())
|
| + .FromJust()) {
|
| + return v8::FunctionTemplate::New(isolate,
|
| + InspectorExtension::BreakProgram);
|
| }
|
| return v8::Local<v8::FunctionTemplate>();
|
| }
|
| @@ -350,6 +400,23 @@ class InspectorExtension : public v8::Extension {
|
| v8_inspector::SetMaxAsyncTaskStacksForTest(
|
| inspector, args[0].As<v8::Int32>()->Value());
|
| }
|
| +
|
| + static void BreakProgram(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| + if (args.Length() != 2 || !args[0]->IsString() || !args[1]->IsString()) {
|
| + fprintf(stderr, "Internal error: breakProgram('reason', 'details').");
|
| + Exit();
|
| + }
|
| + v8_inspector::V8InspectorSession* session =
|
| + InspectorClientImpl::SessionFromContext(
|
| + args.GetIsolate()->GetCurrentContext());
|
| + CHECK(session);
|
| +
|
| + v8::internal::Vector<uint16_t> reason = ToVector(args[0].As<v8::String>());
|
| + v8_inspector::StringView reason_view(reason.start(), reason.length());
|
| + v8::internal::Vector<uint16_t> details = ToVector(args[1].As<v8::String>());
|
| + v8_inspector::StringView details_view(details.start(), details.length());
|
| + session->breakProgram(reason_view, details_view);
|
| + }
|
| };
|
|
|
| v8::Local<v8::String> ToString(v8::Isolate* isolate,
|
|
|