// Copyright 2016 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_EXTENSION_BINDINGS_SYSTEM_H_ #define EXTENSIONS_RENDERER_EXTENSION_BINDINGS_SYSTEM_H_ #include namespace base { class DictionaryValue; class ListValue; } namespace extensions { class RequestSender; class ScriptContext; // The class responsible for creating extension bindings in different contexts, // as well as dispatching requests and handling responses, and dispatching // events to listeners. // This is designed to be used on a single thread, but should be safe to use on // threads other than the main thread (so that worker threads can have extension // bindings). class ExtensionBindingsSystem { public: virtual ~ExtensionBindingsSystem() {} // Called when a new ScriptContext is created. virtual void DidCreateScriptContext(ScriptContext* context) = 0; // Called when a ScriptContext is about to be released. virtual void WillReleaseScriptContext(ScriptContext* context) = 0; // Updates the bindings for a given |context|. This happens at initialization, // but also when e.g. an extension gets updated permissions. virtual void UpdateBindingsForContext(ScriptContext* context) = 0; // Dispatches an event with the given |name|, |event_args|, and // |filtering_info| in the given |context|. virtual void DispatchEventInContext( const std::string& event_name, const base::ListValue* event_args, const base::DictionaryValue* filtering_info, ScriptContext* context) = 0; // Handles the response associated with the given |request_id|. virtual void HandleResponse(int request_id, bool success, const base::ListValue& response, const std::string& error) = 0; // Returns the associated RequestSender, if any. // TODO(devlin): Factor this out. virtual RequestSender* GetRequestSender() = 0; }; } // namespace extensions #endif // EXTENSIONS_RENDERER_EXTENSION_BINDINGS_SYSTEM_H_