// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/renderer/net/net_error_page_controller.h" #include "base/strings/string_piece.h" #include "content/public/renderer/render_frame.h" #include "gin/handle.h" #include "gin/object_template_builder.h" #include "third_party/WebKit/public/web/WebKit.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" gin::WrapperInfo NetErrorPageController::kWrapperInfo = { gin::kEmbedderNativeGin}; NetErrorPageController::Delegate::Delegate() {} NetErrorPageController::Delegate::~Delegate() {} // static void NetErrorPageController::Install(content::RenderFrame* render_frame, base::WeakPtr delegate) { v8::Isolate* isolate = blink::mainThreadIsolate(); v8::HandleScope handle_scope(isolate); v8::Local context = render_frame->GetWebFrame()->mainWorldScriptContext(); if (context.IsEmpty()) return; v8::Context::Scope context_scope(context); gin::Handle controller = gin::CreateHandle( isolate, new NetErrorPageController(delegate)); if (controller.IsEmpty()) return; v8::Local global = context->Global(); global->Set(gin::StringToV8(isolate, "errorPageController"), controller.ToV8()); } bool NetErrorPageController::ShowSavedCopyButtonClick() { return ButtonClick(error_page::NetErrorHelperCore::SHOW_SAVED_COPY_BUTTON); } bool NetErrorPageController::ShowOfflinePagesButtonClick() { return ButtonClick(error_page::NetErrorHelperCore::SHOW_OFFLINE_PAGES_BUTTON); } bool NetErrorPageController::ReloadButtonClick() { return ButtonClick(error_page::NetErrorHelperCore::RELOAD_BUTTON); } bool NetErrorPageController::DetailsButtonClick() { return ButtonClick(error_page::NetErrorHelperCore::MORE_BUTTON); } bool NetErrorPageController::TrackEasterEgg() { return ButtonClick(error_page::NetErrorHelperCore::EASTER_EGG); } bool NetErrorPageController::DiagnoseErrorsButtonClick() { return ButtonClick(error_page::NetErrorHelperCore::DIAGNOSE_ERROR); } bool NetErrorPageController::TrackCachedCopyButtonClick() { return ButtonClick(error_page::NetErrorHelperCore::SHOW_CACHED_COPY_BUTTON); } bool NetErrorPageController::TrackClick(const gin::Arguments& args) { if (args.PeekNext().IsEmpty() || !args.PeekNext()->IsInt32()) return false; if (delegate_) delegate_->TrackClick(args.PeekNext()->Int32Value()); return true; } bool NetErrorPageController::ButtonClick( error_page::NetErrorHelperCore::Button button) { if (delegate_) delegate_->ButtonPressed(button); return true; } NetErrorPageController::NetErrorPageController(base::WeakPtr delegate) : delegate_(delegate) { } NetErrorPageController::~NetErrorPageController() {} gin::ObjectTemplateBuilder NetErrorPageController::GetObjectTemplateBuilder( v8::Isolate* isolate) { return gin::Wrappable::GetObjectTemplateBuilder( isolate) .SetMethod("showSavedCopyButtonClick", &NetErrorPageController::ShowSavedCopyButtonClick) .SetMethod("showOfflinePagesButtonClick", &NetErrorPageController::ShowOfflinePagesButtonClick) .SetMethod("reloadButtonClick", &NetErrorPageController::ReloadButtonClick) .SetMethod("detailsButtonClick", &NetErrorPageController::DetailsButtonClick) .SetMethod("diagnoseErrorsButtonClick", &NetErrorPageController::DiagnoseErrorsButtonClick) .SetMethod("trackClick", &NetErrorPageController::TrackClick) .SetMethod("trackEasterEgg", &NetErrorPageController::TrackEasterEgg) .SetMethod("trackCachedCopyButtonClick", &NetErrorPageController::TrackCachedCopyButtonClick); }