// Copyright 2014 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_NATIVE_HANDLER_H_ #define EXTENSIONS_RENDERER_NATIVE_HANDLER_H_ #include "base/basictypes.h" #include "v8/include/v8.h" namespace extensions { // NativeHandlers are intended to be used with a ModuleSystem. The ModuleSystem // will assume ownership of the NativeHandler, and as a ModuleSystem is tied to // a single v8::Context, this implies that NativeHandlers will also be tied to // a single v8::Context. // TODO(koz): Rename this to NativeJavaScriptModule. class NativeHandler { public: NativeHandler(); virtual ~NativeHandler(); // Create a new instance of the object this handler specifies. virtual v8::Local NewInstance() = 0; // Invalidate this object so it cannot be used any more. This is needed // because it's possible for this to outlive its owner context. Invalidate // must be called before this happens. // // Subclasses should override to invalidate their own V8 state. If they do // they must call their superclass' Invalidate(). // // Invalidate() will be called on destruction, if it hasn't already been. // Subclasses don't need to do it themselves. virtual void Invalidate(); protected: // Allow subclasses to query valid state. bool is_valid() { return is_valid_; } private: bool is_valid_; DISALLOW_COPY_AND_ASSIGN(NativeHandler); }; } // namespace extensions #endif // EXTENSIONS_RENDERER_NATIVE_HANDLER_H_