blob: b4d3078ef1ea96fa16a9409d73c4c9c70a59e42c [file] [log] [blame]
[email protected]58e10452012-02-22 03:34:451// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_RENDERER_NATIVE_HANDLER_H_
6#define CHROME_RENDERER_NATIVE_HANDLER_H_
7#pragma once
8
9#include "base/bind.h"
10#include "base/memory/linked_ptr.h"
11#include "v8/include/v8.h"
12
13#include <string>
14#include <vector>
15
16// A NativeHandler is a factory for JS objects with functions on them that map
17// to native C++ functions. Subclasses should call RouteFunction() in their
18// constructor to define functions on the created JS objects.
19class NativeHandler {
20 public:
21 explicit NativeHandler();
22 virtual ~NativeHandler();
23
24 // Create an object with bindings to the native functions defined through
25 // RouteFunction().
26 v8::Handle<v8::Object> NewInstance();
27
28 protected:
29 typedef base::Callback<v8::Handle<v8::Value>(const v8::Arguments&)>
30 HandlerFunction;
31
32 // Installs a new 'route' from |name| to |handler_function|. This means that
33 // NewInstance()s of this NativeHandler will have a property |name| which
34 // will be handled by |handler_function|.
35 void RouteFunction(const std::string& name,
36 const HandlerFunction& handler_function);
37
38 private:
39 static v8::Handle<v8::Value> Router(const v8::Arguments& args);
40
41 std::vector<linked_ptr<HandlerFunction> > handler_functions_;
42 v8::Handle<v8::ObjectTemplate> object_template_;
43
44 DISALLOW_COPY_AND_ASSIGN(NativeHandler);
45};
46
47#endif // CHROME_RENDERER_NATIVE_HANDLER_H_