Make WebContents cache object template

This commit is contained in:
Cheng Zhao 2014-10-23 13:31:10 +08:00
parent 97139b7487
commit c72d769ff0

View file

@ -19,6 +19,12 @@ namespace atom {
namespace api { namespace api {
namespace {
v8::Persistent<v8::ObjectTemplate> template_;
} // namespace
WebContents::WebContents(content::WebContents* web_contents) WebContents::WebContents(content::WebContents* web_contents)
: content::WebContentsObserver(web_contents), : content::WebContentsObserver(web_contents),
web_contents_(web_contents) { web_contents_(web_contents) {
@ -166,28 +172,33 @@ bool WebContents::SendIPCMessage(const base::string16& channel,
mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder( mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
v8::Isolate* isolate) { v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate) if (template_.IsEmpty())
.SetMethod("isAlive", &WebContents::IsAlive) template_.Reset(isolate, mate::ObjectTemplateBuilder(isolate)
.SetMethod("loadUrl", &WebContents::LoadURL) .SetMethod("isAlive", &WebContents::IsAlive)
.SetMethod("getUrl", &WebContents::GetURL) .SetMethod("loadUrl", &WebContents::LoadURL)
.SetMethod("getTitle", &WebContents::GetTitle) .SetMethod("getUrl", &WebContents::GetURL)
.SetMethod("isLoading", &WebContents::IsLoading) .SetMethod("getTitle", &WebContents::GetTitle)
.SetMethod("isWaitingForResponse", &WebContents::IsWaitingForResponse) .SetMethod("isLoading", &WebContents::IsLoading)
.SetMethod("stop", &WebContents::Stop) .SetMethod("isWaitingForResponse", &WebContents::IsWaitingForResponse)
.SetMethod("reload", &WebContents::Reload) .SetMethod("stop", &WebContents::Stop)
.SetMethod("reloadIgnoringCache", &WebContents::ReloadIgnoringCache) .SetMethod("reload", &WebContents::Reload)
.SetMethod("canGoBack", &WebContents::CanGoBack) .SetMethod("reloadIgnoringCache", &WebContents::ReloadIgnoringCache)
.SetMethod("canGoForward", &WebContents::CanGoForward) .SetMethod("canGoBack", &WebContents::CanGoBack)
.SetMethod("canGoToOffset", &WebContents::CanGoToOffset) .SetMethod("canGoForward", &WebContents::CanGoForward)
.SetMethod("goBack", &WebContents::GoBack) .SetMethod("canGoToOffset", &WebContents::CanGoToOffset)
.SetMethod("goForward", &WebContents::GoForward) .SetMethod("goBack", &WebContents::GoBack)
.SetMethod("goToIndex", &WebContents::GoToIndex) .SetMethod("goForward", &WebContents::GoForward)
.SetMethod("goToOffset", &WebContents::GoToOffset) .SetMethod("goToIndex", &WebContents::GoToIndex)
.SetMethod("getRoutingId", &WebContents::GetRoutingID) .SetMethod("goToOffset", &WebContents::GoToOffset)
.SetMethod("getProcessId", &WebContents::GetProcessID) .SetMethod("getRoutingId", &WebContents::GetRoutingID)
.SetMethod("isCrashed", &WebContents::IsCrashed) .SetMethod("getProcessId", &WebContents::GetProcessID)
.SetMethod("_executeJavaScript", &WebContents::ExecuteJavaScript) .SetMethod("isCrashed", &WebContents::IsCrashed)
.SetMethod("_send", &WebContents::SendIPCMessage); .SetMethod("_executeJavaScript", &WebContents::ExecuteJavaScript)
.SetMethod("_send", &WebContents::SendIPCMessage)
.Build());
return mate::ObjectTemplateBuilder(
isolate, v8::Local<v8::ObjectTemplate>::New(isolate, template_));
} }
void WebContents::OnRendererMessage(const base::string16& channel, void WebContents::OnRendererMessage(const base::string16& channel,