1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#ifndef EXTENSIONS_RENDERER_NATIVE_HANDLER_H_ 6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define EXTENSIONS_RENDERER_NATIVE_HANDLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "v8/include/v8.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NativeHandlers are intended to be used with a ModuleSystem. The ModuleSystem 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// will assume ownership of the NativeHandler, and as a ModuleSystem is tied to 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a single v8::Context, this implies that NativeHandlers will also be tied to 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// a single v8::Context. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(koz): Rename this to NativeJavaScriptModule. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NativeHandler { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NativeHandler(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NativeHandler(); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create a new instance of the object this handler specifies. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual v8::Handle<v8::Object> NewInstance() = 0; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Invalidate this object so it cannot be used any more. This is needed 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // because it's possible for this to outlive its owner context. Invalidate 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // must be called before this happens. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Subclasses should override to invalidate their own V8 state. If they do 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // they must call their superclass' Invalidate(). 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Invalidate(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allow subclasses to query valid state. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_valid() { return is_valid_; } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_valid_; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NativeHandler); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace extensions 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif // EXTENSIONS_RENDERER_NATIVE_HANDLER_H_ 47