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/WebKit.h" 13#include "third_party/WebKit/public/web/WebLocalFrame.h" 14 15gin::WrapperInfo NetErrorPageController::kWrapperInfo = { 16 gin::kEmbedderNativeGin}; 17 18// static 19void 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 39bool 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 51bool 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 63bool 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 75bool 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 89NetErrorPageController::NetErrorPageController( 90 content::RenderFrame* render_frame) : RenderFrameObserver(render_frame) {} 91 92NetErrorPageController::~NetErrorPageController() {} 93 94gin::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 108void NetErrorPageController::OnDestruct() {} 109