Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / renderer / net / net_error_page_controller.cc
1 // Copyright 2014 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 #include "chrome/renderer/net/net_error_page_controller.h"
6
7 #include "base/strings/string_piece.h"
8 #include "chrome/renderer/net/net_error_helper.h"
9 #include "content/public/renderer/render_frame.h"
10 #include "gin/handle.h"
11 #include "gin/object_template_builder.h"
12 #include "third_party/WebKit/public/web/WebFrame.h"
13 #include "third_party/WebKit/public/web/WebKit.h"
14
15 gin::WrapperInfo NetErrorPageController::kWrapperInfo = {
16     gin::kEmbedderNativeGin};
17
18 // static
19 void NetErrorPageController::Install(content::RenderFrame* render_frame) {
20   v8::Isolate* isolate = blink::mainThreadIsolate();
21   v8::HandleScope handle_scope(isolate);
22   v8::Handle<v8::Context> context =
23       render_frame->GetWebFrame()->mainWorldScriptContext();
24   if (context.IsEmpty())
25     return;
26
27   v8::Context::Scope context_scope(context);
28
29   gin::Handle<NetErrorPageController> controller = gin::CreateHandle(
30       isolate, new NetErrorPageController(render_frame));
31   if (controller.IsEmpty())
32     return;
33
34   v8::Handle<v8::Object> global = context->Global();
35   global->Set(gin::StringToV8(isolate, "errorPageController"),
36               controller.ToV8());
37 }
38
39 bool NetErrorPageController::LoadStaleButtonClick() {
40   if (!render_frame())
41     return false;
42
43   NetErrorHelper* net_error_helper =
44       content::RenderFrameObserverTracker<NetErrorHelper>::Get(render_frame());
45   DCHECK(net_error_helper);
46   net_error_helper->LoadStaleButtonPressed();
47
48   return true;
49 }
50
51 bool NetErrorPageController::ReloadButtonClick() {
52   if (!render_frame())
53     return false;
54
55   NetErrorHelper* net_error_helper =
56       content::RenderFrameObserverTracker<NetErrorHelper>::Get(render_frame());
57   DCHECK(net_error_helper);
58   net_error_helper->ReloadButtonPressed();
59
60   return true;
61 }
62
63 bool NetErrorPageController::DetailsButtonClick() {
64   if (!render_frame())
65     return false;
66
67   NetErrorHelper* net_error_helper =
68       content::RenderFrameObserverTracker<NetErrorHelper>::Get(render_frame());
69   DCHECK(net_error_helper);
70   net_error_helper->MoreButtonPressed();
71
72   return true;
73 }
74
75 bool NetErrorPageController::TrackClick(const gin::Arguments& args) {
76   if (!render_frame())
77     return false;
78
79   if (!args.PeekNext()->IsInt32())
80     return false;
81
82   NetErrorHelper* net_error_helper =
83       content::RenderFrameObserverTracker<NetErrorHelper>::Get(render_frame());
84   DCHECK(net_error_helper);
85   net_error_helper->TrackClick(args.PeekNext()->Int32Value());
86   return true;
87 }
88
89 NetErrorPageController::NetErrorPageController(
90     content::RenderFrame* render_frame) : RenderFrameObserver(render_frame) {}
91
92 NetErrorPageController::~NetErrorPageController() {}
93
94 gin::ObjectTemplateBuilder NetErrorPageController::GetObjectTemplateBuilder(
95     v8::Isolate* isolate) {
96   return gin::Wrappable<NetErrorPageController>::GetObjectTemplateBuilder(
97              isolate)
98       .SetMethod("loadStaleButtonClick",
99                  &NetErrorPageController::LoadStaleButtonClick)
100       .SetMethod("reloadButtonClick",
101                  &NetErrorPageController::ReloadButtonClick)
102       .SetMethod("detailsButtonClick",
103                  &NetErrorPageController::DetailsButtonClick)
104       .SetMethod("trackClick",
105                  &NetErrorPageController::TrackClick);
106 }
107
108 void NetErrorPageController::OnDestruct() {}