Chromium Code Reviews| Index: test/inspector-protocol/inspector-impl.h |
| diff --git a/test/inspector-protocol/inspector-impl.h b/test/inspector-protocol/inspector-impl.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e313338c615d949826bf72d102500f9c47efcd30 |
| --- /dev/null |
| +++ b/test/inspector-protocol/inspector-impl.h |
| @@ -0,0 +1,101 @@ |
| +// Copyright 2016 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. |
| + |
| +#ifndef V8_TEST_INSPECTOR_PROTOCOL_INSPECTOR_IMPL_H_ |
| +#define V8_TEST_INSPECTOR_PROTOCOL_INSPECTOR_IMPL_H_ |
| + |
| +#include "include/v8-inspector.h" |
| +#include "include/v8.h" |
| +#include "src/base/macros.h" |
| +#include "src/base/platform/platform.h" |
| +#include "test/inspector-protocol/task-runner.h" |
| + |
| +class TaskRunner; |
| + |
| +class ChannelImpl final : public v8_inspector::V8Inspector::Channel { |
| + public: |
| + explicit ChannelImpl(TaskRunner* frontend_task_runner) |
| + : frontend_task_runner_(frontend_task_runner) {} |
| + virtual ~ChannelImpl() {} |
| + |
| + private: |
| + void sendProtocolResponse(int callId, |
| + const v8_inspector::StringView& message) override { |
| + SendMessageToFrontend(message); |
| + } |
| + void sendProtocolNotification( |
| + const v8_inspector::StringView& message) override { |
| + SendMessageToFrontend(message); |
| + } |
| + void flushProtocolNotifications() override {} |
| + void SendMessageToFrontend(const v8_inspector::StringView& message); |
| + |
| + TaskRunner* frontend_task_runner_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ChannelImpl); |
| +}; |
| + |
| +class InspectorClientImpl : public v8_inspector::V8InspectorClient { |
| + public: |
| + InspectorClientImpl(); |
| + virtual ~InspectorClientImpl(); |
| + |
| + void connect(ChannelImpl* channel, v8::Local<v8::Context>); |
| + |
| + // V8InspectorClient implementation. |
| + v8::Local<v8::Context> ensureDefaultContextInGroup(int) override; |
| + double currentTimeMS() override; |
| + void runMessageLoopOnPause(int) override; |
| + void quitMessageLoopOnPause() override; |
| + |
| + static v8_inspector::V8Inspector* InspectorFromContext( |
| + v8::Local<v8::Context> context); |
| + static v8_inspector::V8InspectorSession* SessionFromContext( |
| + v8::Local<v8::Context> context); |
| + |
| + private: |
| + std::unique_ptr<v8_inspector::V8Inspector> inspector_; |
| + std::unique_ptr<v8_inspector::V8InspectorSession> session_; |
| + v8::Isolate* isolate_; |
| + v8::Global<v8::Context> context_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(InspectorClientImpl); |
| +}; |
| + |
| +class ConnectTask : public TaskRunner::Task { |
|
dgozman
2016/09/27 18:41:20
We can remove this and ChannelImpl from header and
kozy
2016/09/27 19:31:22
Done.
|
| + public: |
| + ConnectTask(InspectorClientImpl* client, ChannelImpl* channel, |
| + v8::base::Semaphore* ready_semaphore); |
| + virtual ~ConnectTask() {} |
| + |
| + bool is_inspector_task() final { return true; } |
| + |
| + void Run(v8::Isolate* isolate, const v8::Global<v8::Context>& context); |
| + |
| + private: |
| + InspectorClientImpl* client_; |
| + ChannelImpl* channel_; |
| + v8::base::Semaphore* ready_semaphore_; |
| +}; |
| + |
| +class FrontendExtension : public v8::Extension { |
| + public: |
| + FrontendExtension() |
| + : v8::Extension("v8_inspector/frontend", |
| + "native function sendMessageToBackend();") {} |
| + virtual v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate( |
| + v8::Isolate* isolate, v8::Local<v8::String> name); |
| + |
| + static void set_backend_task_runner(TaskRunner* task_runner) { |
| + backend_task_runner_ = task_runner; |
| + } |
| + |
| + private: |
| + static void SendMessageToBackend( |
| + const v8::FunctionCallbackInfo<v8::Value>& args); |
| + |
| + static TaskRunner* backend_task_runner_; |
| +}; |
| + |
| +#endif // V8_TEST_INSPECTOR_PROTOCOL_INSPECTOR_IMPL_H_ |