1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_RENDERER_NET_NET_ERROR_PAGE_CONTROLLER_H_
#define CHROME_RENDERER_NET_NET_ERROR_PAGE_CONTROLLER_H_
#include "base/memory/weak_ptr.h"
#include "chrome/renderer/net/net_error_helper_core.h"
#include "gin/arguments.h"
#include "gin/wrappable.h"
namespace content {
class RenderFrame;
}
// This class makes various helper functions available to the
// error page loaded by NetErrorHelper. It is bound to the JavaScript
// window.errorPageController object.
class NetErrorPageController : public gin::Wrappable<NetErrorPageController> {
public:
static gin::WrapperInfo kWrapperInfo;
// Interface used to notify creator of user actions invoked on the error page.
class Delegate {
public:
Delegate(const Delegate&) = delete;
Delegate& operator=(const Delegate&) = delete;
// Button press notification from error page.
virtual void ButtonPressed(NetErrorHelperCore::Button button) = 0;
// Schedules a request to save the page later. This is different from the
// download button in that the page is only saved temporarily. This is used
// only for the auto-fetch-on-net-error-page feature.
virtual void SavePageForLater() = 0;
// Cancels the request to save the page later. This cancels a previous call
// to |SavePageForLater|, or the automatic request made when loading the
// error page. This is used only for the auto-fetch-on-net-error-page
// feature.
virtual void CancelSavePage() = 0;
// Save a new high score for the easer egg game in the user's synced
// preferences.
virtual void UpdateEasterEggHighScore(int high_score) = 0;
// Clear any high score for the easer egg game saved in the user's synced
// preferences.
virtual void ResetEasterEggHighScore() = 0;
protected:
Delegate();
virtual ~Delegate();
};
NetErrorPageController(const NetErrorPageController&) = delete;
NetErrorPageController& operator=(const NetErrorPageController&) = delete;
// Will invoke methods on |delegate| in response to user actions taken on the
// error page. May call delegate methods even after the page has been
// navigated away from, so it is recommended consumers make sure the weak
// pointers are destroyed in response to navigations.
static void Install(content::RenderFrame* render_frame,
base::WeakPtr<Delegate> delegate);
private:
explicit NetErrorPageController(base::WeakPtr<Delegate> delegate);
~NetErrorPageController() override;
void ErrorPageLoadedOrUpdated();
// Execute a button click to download page later.
bool DownloadButtonClick();
// Execute a "Reload" button click.
bool ReloadButtonClick();
// Execute a "Details" button click.
bool DetailsButtonClick();
// Track easter egg plays and high scores.
bool TrackEasterEgg();
bool UpdateEasterEggHighScore(int high_score);
bool ResetEasterEggHighScore();
// Execute a "Diagnose Errors" button click.
bool DiagnoseErrorsButtonClick();
// Execute a "Sign in to network" button click.
bool PortalSigninButtonClick();
// Used internally by other button click methods.
bool ButtonClick(NetErrorHelperCore::Button button);
void SavePageForLater();
void CancelSavePage();
// gin::WrappableBase
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
base::WeakPtr<Delegate> delegate_;
};
#endif // CHROME_RENDERER_NET_NET_ERROR_PAGE_CONTROLLER_H_
|