// 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_DECLARATIVE_CONTENT_HOOKS_DELEGATE_H_ #define EXTENSIONS_RENDERER_DECLARATIVE_CONTENT_HOOKS_DELEGATE_H_ #include #include #include #include "base/callback.h" #include "extensions/renderer/bindings/api_binding_hooks_delegate.h" #include "v8/include/v8-forward.h" namespace extensions { class APITypeReferenceMap; class ArgumentSpec; // Custom hooks for the declarativeContent API. class DeclarativeContentHooksDelegate : public APIBindingHooksDelegate { public: // The callback type for handling an API call. using HandlerCallback = base::RepeatingCallback&)>; DeclarativeContentHooksDelegate(); DeclarativeContentHooksDelegate(const DeclarativeContentHooksDelegate&) = delete; DeclarativeContentHooksDelegate& operator=( const DeclarativeContentHooksDelegate&) = delete; ~DeclarativeContentHooksDelegate() override; void InitializeTemplate(v8::Isolate* isolate, v8::Local object_template, const APITypeReferenceMap& type_refs) override; private: void HandleCall(const ArgumentSpec* spec, const APITypeReferenceMap* type_refs, const std::string& type_name, const v8::FunctionCallbackInfo& info); // The owned callbacks for the constructor functions. Since these pointers // are passed to v8::External, we need to use unique_ptrs rather than just // storing the callback directly in a vector. std::vector> callbacks_; }; } // namespace extensions #endif // EXTENSIONS_RENDERER_DECLARATIVE_CONTENT_HOOKS_DELEGATE_H_