blob: 51cb7d391bfda7269c74b36821d3e55f161b2bcb [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_PUBLIC_HEADLESS_TAB_SOCKET_H_
#define HEADLESS_PUBLIC_HEADLESS_TAB_SOCKET_H_
#include <string>
#include "base/macros.h"
#include "base/optional.h"
#include "headless/public/headless_export.h"
namespace headless {
// A bidirectional communications channel between C++ and JS.
class HEADLESS_EXPORT HeadlessTabSocket {
public:
class HEADLESS_EXPORT Listener {
public:
Listener() {}
virtual ~Listener() {}
// The |message| and |v8_execution_context_id| may be potentially sent by
// untrusted web content so it should be validated carefully.
virtual void OnMessageFromContext(const std::string& message,
int v8_execution_context_id) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(Listener);
};
// Installs headless tab socket bindings into the specified execution context.
// If the bindings are successfully installed then the |callback| is run with
// |success| = true, otherwise with |success| = false.
virtual void InstallHeadlessTabSocketBindings(
int v8_execution_context_id,
base::OnceCallback<void(bool success)> callback) = 0;
// Installs headless tab socket bindings into the main frame main world. If
// the bindings were installed correctly then |callback| is run with a
// non-empty base::Optional<int> containing the main world
// v8_execution_context_id, otherwise |callback| is run with an empty
// base::Optional<int>.
virtual void InstallMainFrameMainWorldHeadlessTabSocketBindings(
base::OnceCallback<void(base::Optional<int> v8_execution_context_id)>
callback) = 0;
// Note this will fail unless the bindings have been installed.
virtual void SendMessageToContext(const std::string& message,
int v8_execution_context_id) = 0;
virtual void SetListener(Listener* listener) = 0;
protected:
HeadlessTabSocket() {}
virtual ~HeadlessTabSocket() {}
private:
DISALLOW_COPY_AND_ASSIGN(HeadlessTabSocket);
};
} // namespace headless
#endif // HEADLESS_PUBLIC_HEADLESS_TAB_SOCKET_H_