// 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 EXTENSIONS_RENDERER_BINDINGS_API_BINDING_HOOKS_DELEGATE_H_
#define EXTENSIONS_RENDERER_BINDINGS_API_BINDING_HOOKS_DELEGATE_H_

#include "extensions/renderer/bindings/api_binding_hooks.h"
#include "v8/include/v8.h"

namespace extensions {
class APITypeReferenceMap;

// A per-API set of custom hooks to override the default behavior.
class APIBindingHooksDelegate {
 public:
  virtual ~APIBindingHooksDelegate();

  // Allows custom implementations to return a different event object.
  // Populates |event_out| and returns true if a custom implementation should
  // be used, otherwise returns false.
  virtual bool CreateCustomEvent(v8::Local<v8::Context> context,
                                 const std::string& event_name,
                                 v8::Local<v8::Value>* event_out);

  // Allows custom implementations to handle a given request.
  virtual APIBindingHooks::RequestResult HandleRequest(
      const std::string& method_name,
      const APISignature* signature,
      v8::Local<v8::Context> context,
      std::vector<v8::Local<v8::Value>>* arguments,
      const APITypeReferenceMap& refs);

  // Allows custom implementations to add additional properties or types to an
  // API object.
  virtual void InitializeTemplate(v8::Isolate* isolate,
                                  v8::Local<v8::ObjectTemplate> object_template,
                                  const APITypeReferenceMap& type_refs) {}

  // Allows custom implementations to mutate an instance of the API for a
  // specific context.
  virtual void InitializeInstance(v8::Local<v8::Context> context,
                                  v8::Local<v8::Object> instance) {}
};

}  // namespace extensions

#endif  // EXTENSIONS_RENDERER_BINDINGS_API_BINDING_HOOKS_DELEGATE_H_
