1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_OBJECT_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_OBJECT_H_
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <map>
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/weak_ptr.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/renderer/java/gin_java_bridge_dispatcher.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "gin/handle.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "gin/interceptor.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "gin/object_template_builder.h"
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "gin/wrappable.h"
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace blink {
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class WebFrame;
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content {
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class GinJavaBridgeValueConverter;
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class GinJavaBridgeObject : public gin::Wrappable<GinJavaBridgeObject>,
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                            public gin::NamedPropertyInterceptor {
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  static gin::WrapperInfo kWrapperInfo;
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  GinJavaBridgeDispatcher::ObjectID object_id() const { return object_id_; }
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // gin::Wrappable.
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      v8::Isolate* isolate) OVERRIDE;
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // gin::NamedPropertyInterceptor
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual v8::Local<v8::Value> GetNamedProperty(
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      v8::Isolate* isolate, const std::string& property) OVERRIDE;
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual std::vector<std::string> EnumerateNamedProperties(
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      v8::Isolate* isolate) OVERRIDE;
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  static GinJavaBridgeObject* InjectNamed(
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      blink::WebFrame* frame,
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher,
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const std::string& object_name,
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GinJavaBridgeDispatcher::ObjectID object_id);
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  static GinJavaBridgeObject* InjectAnonymous(
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher,
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GinJavaBridgeDispatcher::ObjectID object_id);
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  GinJavaBridgeObject(v8::Isolate* isolate,
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      const base::WeakPtr<GinJavaBridgeDispatcher>& dispatcher,
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      GinJavaBridgeDispatcher::ObjectID object_id);
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~GinJavaBridgeObject();
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  v8::Handle<v8::Value> InvokeMethod(const std::string& name,
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                     gin::Arguments* args);
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  base::WeakPtr<GinJavaBridgeDispatcher> dispatcher_;
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  GinJavaBridgeDispatcher::ObjectID object_id_;
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<GinJavaBridgeValueConverter> converter_;
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::map<std::string, bool> known_methods_;
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GinJavaBridgeObject);
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace content
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // CONTENT_RENDERER_JAVA_GIN_JAVA_BRIDGE_OBJECT_H_
72