Index: content/renderer/java/gin_java_bridge_object.cc |
diff --git a/content/renderer/java/gin_java_bridge_object.cc b/content/renderer/java/gin_java_bridge_object.cc |
index 7c43276a2037e1d99e56dd9b7da4965852625d4b..8786cff342a529c4928c7a2de02e76953b26b10e 100644 |
--- a/content/renderer/java/gin_java_bridge_object.cc |
+++ b/content/renderer/java/gin_java_bridge_object.cc |
@@ -66,7 +66,8 @@ GinJavaBridgeObject::GinJavaBridgeObject( |
: gin::NamedPropertyInterceptor(isolate, this), |
dispatcher_(dispatcher), |
object_id_(object_id), |
- converter_(new GinJavaBridgeValueConverter()) { |
+ converter_(new GinJavaBridgeValueConverter()), |
+ template_cache_(isolate) { |
} |
GinJavaBridgeObject::~GinJavaBridgeObject() { |
@@ -91,15 +92,10 @@ v8::Local<v8::Value> GinJavaBridgeObject::GetNamedProperty( |
} |
known_methods_[property] = dispatcher_->HasJavaMethod(object_id_, property); |
} |
- if (known_methods_[property]) { |
- return gin::CreateFunctionTemplate( |
- isolate, |
- base::Bind(&GinJavaBridgeObject::InvokeMethod, |
- base::Unretained(this), |
- property))->GetFunction(); |
- } else { |
+ if (known_methods_[property]) |
+ return GetFunctionTemplate(isolate, property)->GetFunction(); |
+ else |
return v8::Local<v8::Value>(); |
- } |
} |
std::vector<std::string> GinJavaBridgeObject::EnumerateNamedProperties( |
@@ -110,6 +106,19 @@ std::vector<std::string> GinJavaBridgeObject::EnumerateNamedProperties( |
return std::vector<std::string> (method_names.begin(), method_names.end()); |
} |
+v8::Local<v8::FunctionTemplate> GinJavaBridgeObject::GetFunctionTemplate( |
+ v8::Isolate* isolate, |
+ const std::string& name) { |
+ v8::Local<v8::FunctionTemplate> function_template = template_cache_.Get(name); |
+ if (!function_template.IsEmpty()) |
+ return function_template; |
+ function_template = gin::CreateFunctionTemplate( |
+ isolate, base::Bind(&GinJavaBridgeObject::InvokeMethod, |
+ base::Unretained(this), name)); |
+ template_cache_.Set(name, function_template); |
+ return function_template; |
+} |
+ |
v8::Handle<v8::Value> GinJavaBridgeObject::InvokeMethod( |
const std::string& name, |
gin::Arguments* args) { |