blob: c2844768646b183df71c5ec20ddf3d247ce84302 [file] [log] [blame]
// Copyright 2017 The Chromium 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 HEADLESS_LIB_RENDERER_HEADLESS_TAB_SOCKET_BINDINGS_H_
#define HEADLESS_LIB_RENDERER_HEADLESS_TAB_SOCKET_BINDINGS_H_
#include "content/public/renderer/render_frame.h"
#include "gin/handle.h"
#include "gin/object_template_builder.h"
#include "gin/wrappable.h"
#include "headless/lib/tab_socket.mojom.h"
#include "third_party/WebKit/public/web/WebScriptExecutionCallback.h"
namespace headless {
class HeadlessRenderFrameControllerImpl;
class HeadlessTabSocketBindings
: public gin::Wrappable<HeadlessTabSocketBindings>,
public blink::WebScriptExecutionCallback {
public:
HeadlessTabSocketBindings(
HeadlessRenderFrameControllerImpl* parent_controller,
content::RenderFrame* render_frame,
v8::Local<v8::Context> context,
int world_id);
~HeadlessTabSocketBindings() override;
// Add TabSocket bindings to |context_|.
bool InitializeTabSocketBindings();
void OnMessageFromEmbedder(const std::string& message);
// gin::WrappableBase implementation:
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
static gin::WrapperInfo kWrapperInfo;
int world_id() const { return world_id_; }
private:
void SendImpl(const std::string& message);
v8::Local<v8::Value> GetOnMessage() { return GetOnMessageCallback(); }
void SetOnMessage(v8::Local<v8::Function> callback);
v8::Local<v8::Function> GetOnMessageCallback();
HeadlessRenderFrameControllerImpl* const parent_controller_; // NOT OWNED
content::RenderFrame* const render_frame_; // NOT OWNED
const v8::UniquePersistent<v8::Context> context_;
const int world_id_;
bool installed_;
std::list<std::string> pending_messages_;
v8::UniquePersistent<v8::Function> on_message_callback_;
};
} // namespace headless
#endif // HEADLESS_LIB_RENDERER_HEADLESS_TAB_SOCKET_BINDINGS_H_