// Copyright 2018 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include "test/cctest/cctest.h" #include "include/v8-inspector.h" #include "include/v8.h" #include "src/inspector/protocol/Runtime.h" using v8_inspector::StringBuffer; using v8_inspector::StringView; using v8_inspector::V8ContextInfo; using v8_inspector::V8Inspector; using v8_inspector::V8InspectorSession; namespace { class NoopChannel : public V8Inspector::Channel { public: virtual ~NoopChannel() {} void sendResponse(int callId, std::unique_ptr message) override {} void sendNotification(std::unique_ptr message) override {} void flushProtocolNotifications() override {} }; void WrapOnInterrupt(v8::Isolate* isolate, void* data) { const char* object_group = ""; StringView object_group_view(reinterpret_cast(object_group), strlen(object_group)); reinterpret_cast(data)->wrapObject( isolate->GetCurrentContext(), v8::Null(isolate), object_group_view, false); } } // namespace TEST(WrapInsideWrapOnInterrupt) { LocalContext env; v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope handle_scope(isolate); v8_inspector::V8InspectorClient default_client; std::unique_ptr inspector = V8Inspector::create(isolate, &default_client); const char* name = ""; StringView name_view(reinterpret_cast(name), strlen(name)); V8ContextInfo context_info(env.local(), 1, name_view); inspector->contextCreated(context_info); NoopChannel channel; const char* state = "{}"; StringView state_view(reinterpret_cast(state), strlen(state)); std::unique_ptr session = inspector->connect(1, &channel, state_view); const char* object_group = ""; StringView object_group_view(reinterpret_cast(object_group), strlen(object_group)); isolate->RequestInterrupt(&WrapOnInterrupt, session.get()); session->wrapObject(env.local(), v8::Null(isolate), object_group_view, false); }