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