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#ifndef CHROME_RENDERER_NET_NET_ERROR_PAGE_CONTROLLER_H_
6#define CHROME_RENDERER_NET_NET_ERROR_PAGE_CONTROLLER_H_
7
8#include "base/macros.h"
9#include "content/public/renderer/render_frame_observer.h"
10#include "gin/arguments.h"
11#include "gin/wrappable.h"
12
13
14namespace content {
15class RenderFrame;
16}
17
18// This class makes various helper functions available to the
19// error page loaded by NetErrorHelper.  It is bound to the JavaScript
20// window.errorPageController object.
21class NetErrorPageController
22    : public gin::Wrappable<NetErrorPageController>,
23      public content::RenderFrameObserver {
24 public:
25  static gin::WrapperInfo kWrapperInfo;
26
27  static void Install(content::RenderFrame* render_frame);
28
29 private:
30  explicit NetErrorPageController(content::RenderFrame* render_frame);
31  virtual ~NetErrorPageController();
32
33  // Execute a "Load Stale" button click.
34  bool LoadStaleButtonClick();
35
36  // Execute a "Reload" button click.
37  bool ReloadButtonClick();
38
39  // Execute a "Details" button click.
40  bool DetailsButtonClick();
41
42  // Track a click when the page has suggestions from the navigation correction
43  // service.
44  bool TrackClick(const gin::Arguments& args);
45
46  // gin::WrappableBase
47  virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
48      v8::Isolate* isolate) OVERRIDE;
49
50  // RenderFrameObserver.  Overridden to avoid being destroyed when RenderFrame
51  // goes away; NetErrorPageController objects are owned by the JS
52  // garbage collector.
53  virtual void OnDestruct() OVERRIDE;
54
55  DISALLOW_COPY_AND_ASSIGN(NetErrorPageController);
56};
57
58#endif  // CHROME_RENDERER_NET_NET_ERROR_PAGE_CONTROLLER_H_
59