blob: a18a597fe532dd38eb3b36ca82f659887c26b703 [file] [log] [blame]
// Copyright 2015 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.
#ifndef COMPONENTS_SECURITY_INTERSTITIALS_CORE_CONTROLLER_CLIENT_H_
#define COMPONENTS_SECURITY_INTERSTITIALS_CORE_CONTROLLER_CLIENT_H_
#include <memory>
#include <string>
#include "base/macros.h"
#include "url/gurl.h"
class PrefService;
namespace security_interstitials {
class MetricsHelper;
// Constants used to communicate with the JavaScript.
extern const char kBoxChecked[];
extern const char kDisplayCheckBox[];
extern const char kOptInLink[];
extern const char kPrivacyLinkHtml[];
// These represent the commands sent from the interstitial JavaScript.
// DO NOT reorder or change these without also changing the JavaScript!
// See components/security_interstitials/core/browser/resources/
enum SecurityInterstitialCommand {
// Used by tests
CMD_TEXT_FOUND = -3,
CMD_TEXT_NOT_FOUND = -2,
CMD_ERROR = -1,
// Decisions
CMD_DONT_PROCEED = 0,
CMD_PROCEED = 1,
// Ways for user to get more information
CMD_SHOW_MORE_SECTION = 2,
CMD_OPEN_HELP_CENTER = 3,
CMD_OPEN_DIAGNOSTIC = 4,
// Primary button actions
CMD_RELOAD = 5,
CMD_OPEN_DATE_SETTINGS = 6,
CMD_OPEN_LOGIN = 7,
// Safe Browsing Extended Reporting
CMD_DO_REPORT = 8,
CMD_DONT_REPORT = 9,
CMD_OPEN_REPORTING_PRIVACY = 10,
CMD_OPEN_WHITEPAPER = 11,
// Report a phishing error
CMD_REPORT_PHISHING_ERROR = 12,
};
// Provides methods for handling commands from the user, which requires some
// embedder-specific abstraction. This class should handle all commands sent
// by the JavaScript error page.
class ControllerClient {
public:
explicit ControllerClient(std::unique_ptr<MetricsHelper> metrics_helper);
virtual ~ControllerClient();
// Handle the user's reporting preferences.
void SetReportingPreference(bool report);
void OpenExtendedReportingPrivacyPolicy(bool open_links_in_new_tab);
void OpenExtendedReportingWhitepaper(bool open_links_in_new_tab);
// Helper method which either opens a URL in a new tab or a the current tab
// based on the display options setting.
void OpenURL(bool open_links_in_new_tab, const GURL& url);
// If available, open the operating system's date/time settings.
virtual bool CanLaunchDateAndTimeSettings() = 0;
virtual void LaunchDateAndTimeSettings() = 0;
// Close the error and go back to the previous page. This applies to
// situations where navigation is blocked before committing.
// TODO(crbug.com/928901) - rename this to NavigateAway or similar.
virtual void GoBack() = 0;
// Whether it is possible to go 'Back to safety'.
virtual bool CanGoBack() = 0;
// If the offending entry has committed, go back or to a safe page without
// closing the error page. This error page will be closed when the new page
// commits.
virtual void GoBackAfterNavigationCommitted() = 0;
// Close the error and proceed to the blocked page.
virtual void Proceed() = 0;
// Reload the blocked page to see if it succeeds now.
virtual void Reload() = 0;
MetricsHelper* metrics_helper() const;
virtual void OpenUrlInCurrentTab(const GURL& url) = 0;
virtual void OpenUrlInNewForegroundTab(const GURL& url) = 0;
virtual PrefService* GetPrefService() = 0;
virtual const std::string& GetApplicationLocale() const = 0;
// Returns true if the error page should display a message to account for the
// fact that the user has seen the same error multiple times.
virtual bool HasSeenRecurrentError();
GURL GetBaseHelpCenterUrl() const;
void SetBaseHelpCenterUrlForTesting(const GURL& test_url);
protected:
virtual const std::string GetExtendedReportingPrefName() const = 0;
private:
std::unique_ptr<MetricsHelper> metrics_helper_;
// Link to the help center.
GURL help_center_url_;
DISALLOW_COPY_AND_ASSIGN(ControllerClient);
};
} // namespace security_interstitials
#endif // COMPONENTS_SECURITY_INTERSTITIALS_CORE_CONTROLLER_CLIENT_H_