Commit 558d7792 authored by spqchan's avatar spqchan Committed by Commit Bot

Trick to Bill Interstitial Page

Add a Safe Browsing Interstitial Page for Trick to Bill.

Add a Trick to Bill enum to SBThreatType and
SBInterstitialReason.

Overview CL:
https://chromium-review.googlesource.com/c/chromium/src/+/1148598

Testing:
- SafeBrowsingBlockingPageTest.TrickToBillPage unit test

Bug: 867518
Change-Id: I0f5c342f419c2f326c7f25fa7e965d47ed242bbd
Reviewed-on: https://chromium-review.googlesource.com/1150917Reviewed-by: default avatarVarun Khaneja <vakh@chromium.org>
Reviewed-by: default avatarMustafa Emre Acer <meacer@chromium.org>
Commit-Queue: Sarah Chan <spqchan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#579442}
parent 200790be
...@@ -81,6 +81,7 @@ std::string GetThreatTypeStringForInterstitial( ...@@ -81,6 +81,7 @@ std::string GetThreatTypeStringForInterstitial(
case safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_MALWARE: case safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_MALWARE:
return "MALWARE"; return "MALWARE";
case safe_browsing::SB_THREAT_TYPE_URL_UNWANTED: case safe_browsing::SB_THREAT_TYPE_URL_UNWANTED:
case safe_browsing::SB_THREAT_TYPE_TRICK_TO_BILL:
return "HARMFUL"; return "HARMFUL";
case safe_browsing::SB_THREAT_TYPE_UNUSED: case safe_browsing::SB_THREAT_TYPE_UNUSED:
case safe_browsing::SB_THREAT_TYPE_SAFE: case safe_browsing::SB_THREAT_TYPE_SAFE:
......
...@@ -97,6 +97,7 @@ class SafeBrowsingBlockingPage : public BaseBlockingPage { ...@@ -97,6 +97,7 @@ class SafeBrowsingBlockingPage : public BaseBlockingPage {
ExtendedReportingNotShownInIncognito); ExtendedReportingNotShownInIncognito);
FRIEND_TEST_ALL_PREFIXES(SafeBrowsingBlockingPageTest, FRIEND_TEST_ALL_PREFIXES(SafeBrowsingBlockingPageTest,
ExtendedReportingNotShownNotAllowExtendedReporting); ExtendedReportingNotShownNotAllowExtendedReporting);
FRIEND_TEST_ALL_PREFIXES(SafeBrowsingBlockingPageTest, TrickToBillPage);
void UpdateReportingPref(); // Used for the transition from old to new pref. void UpdateReportingPref(); // Used for the transition from old to new pref.
......
...@@ -289,8 +289,14 @@ class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness { ...@@ -289,8 +289,14 @@ class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness {
} }
void ShowInterstitial(bool is_subresource, const char* url) { void ShowInterstitial(bool is_subresource, const char* url) {
ShowInterstitial(is_subresource, url, SB_THREAT_TYPE_URL_MALWARE);
}
void ShowInterstitial(bool is_subresource,
const char* url,
SBThreatType type) {
security_interstitials::UnsafeResource resource; security_interstitials::UnsafeResource resource;
InitResource(&resource, is_subresource, GURL(url)); InitResource(&resource, is_subresource, GURL(url), type);
SafeBrowsingBlockingPage::ShowBlockingPage(ui_manager_.get(), resource); SafeBrowsingBlockingPage::ShowBlockingPage(ui_manager_.get(), resource);
} }
...@@ -345,7 +351,8 @@ class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness { ...@@ -345,7 +351,8 @@ class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness {
private: private:
void InitResource(security_interstitials::UnsafeResource* resource, void InitResource(security_interstitials::UnsafeResource* resource,
bool is_subresource, bool is_subresource,
const GURL& url) { const GURL& url,
SBThreatType type) {
resource->callback = resource->callback =
base::Bind(&SafeBrowsingBlockingPageTest::OnBlockingPageComplete, base::Bind(&SafeBrowsingBlockingPageTest::OnBlockingPageComplete,
base::Unretained(this)); base::Unretained(this));
...@@ -353,7 +360,7 @@ class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness { ...@@ -353,7 +360,7 @@ class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness {
content::BrowserThread::IO); content::BrowserThread::IO);
resource->url = url; resource->url = url;
resource->is_subresource = is_subresource; resource->is_subresource = is_subresource;
resource->threat_type = SB_THREAT_TYPE_URL_MALWARE; resource->threat_type = type;
resource->web_contents_getter = resource->web_contents_getter =
security_interstitials::UnsafeResource::GetWebContentsGetter( security_interstitials::UnsafeResource::GetWebContentsGetter(
web_contents()->GetMainFrame()->GetProcess()->GetID(), web_contents()->GetMainFrame()->GetProcess()->GetID(),
...@@ -942,6 +949,53 @@ TEST_F(SafeBrowsingBlockingPageTest, ...@@ -942,6 +949,53 @@ TEST_F(SafeBrowsingBlockingPageTest,
ui_manager_->GetThreatDetails()->clear(); ui_manager_->GetThreatDetails()->clear();
} }
// Tests showing a blocking page for trick-to-bill.
TEST_F(SafeBrowsingBlockingPageTest, TrickToBillPage) {
// Start a load.
controller().LoadURL(GURL(kBadURL), content::Referrer(),
ui::PAGE_TRANSITION_TYPED, std::string());
// Simulate the load causing a safe browsing interstitial to be shown.
ShowInterstitial(false, kBadURL, SB_THREAT_TYPE_TRICK_TO_BILL);
SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
ASSERT_TRUE(sb_interstitial);
base::DictionaryValue load_time_data;
sb_interstitial->sb_error_ui()->PopulateStringsForHtml(&load_time_data);
base::string16 str;
load_time_data.GetString("heading", &str);
EXPECT_EQ(str, l10n_util::GetStringUTF16(IDS_TRICK_TO_BILL_HEADING));
load_time_data.GetString("primaryParagraph", &str);
EXPECT_EQ(str,
l10n_util::GetStringUTF16(IDS_TRICK_TO_BILL_PRIMARY_PARAGRAPH));
load_time_data.GetString("primaryButtonText", &str);
EXPECT_EQ(str, l10n_util::GetStringUTF16(IDS_TRICK_TO_BILL_PRIMARY_BUTTON));
load_time_data.GetString("proceedButtonText", &str);
EXPECT_EQ(str, l10n_util::GetStringUTF16(IDS_TRICK_TO_BILL_PROCEED_BUTTON));
load_time_data.GetString("openDetails", &str);
EXPECT_EQ(str, base::string16());
load_time_data.GetString("closeDetails", &str);
EXPECT_EQ(str, base::string16());
load_time_data.GetString("explanationParagraph", &str);
EXPECT_EQ(str, base::string16());
load_time_data.GetString("finalParagraph", &str);
EXPECT_EQ(str, base::string16());
bool flag;
load_time_data.GetBoolean("trick_to_bill", &flag);
EXPECT_TRUE(flag);
load_time_data.GetBoolean("phishing", &flag);
EXPECT_FALSE(flag);
load_time_data.GetBoolean("overridable", &flag);
EXPECT_TRUE(flag);
load_time_data.GetBoolean("hide_primary_button", &flag);
EXPECT_FALSE(flag);
}
class SafeBrowsingBlockingQuietPageTest class SafeBrowsingBlockingQuietPageTest
: public ChromeRenderViewHostTestHarness { : public ChromeRenderViewHostTestHarness {
public: public:
......
...@@ -260,6 +260,9 @@ SecurityStateTabHelper::GetMaliciousContentStatus() const { ...@@ -260,6 +260,9 @@ SecurityStateTabHelper::GetMaliciousContentStatus() const {
switch (threat_type) { switch (threat_type) {
case safe_browsing::SB_THREAT_TYPE_UNUSED: case safe_browsing::SB_THREAT_TYPE_UNUSED:
case safe_browsing::SB_THREAT_TYPE_SAFE: case safe_browsing::SB_THREAT_TYPE_SAFE:
// TODO(https://crbug.com/867518): Create a malicious trick to bill enum
// and return it.
case safe_browsing::SB_THREAT_TYPE_TRICK_TO_BILL:
break; break;
case safe_browsing::SB_THREAT_TYPE_URL_PHISHING: case safe_browsing::SB_THREAT_TYPE_URL_PHISHING:
case safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_PHISHING: case safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_PHISHING:
......
...@@ -280,6 +280,8 @@ safe_browsing::SafeBrowsingBlockingPage* CreateSafeBrowsingBlockingPage( ...@@ -280,6 +280,8 @@ safe_browsing::SafeBrowsingBlockingPage* CreateSafeBrowsingBlockingPage(
threat_type = safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_MALWARE; threat_type = safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_MALWARE;
} else if (type_param == "clientside_phishing") { } else if (type_param == "clientside_phishing") {
threat_type = safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_PHISHING; threat_type = safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_PHISHING;
} else if (type_param == "trick_to_bill") {
threat_type = safe_browsing::SB_THREAT_TYPE_TRICK_TO_BILL;
} }
} }
safe_browsing::SafeBrowsingBlockingPage::UnsafeResource resource; safe_browsing::SafeBrowsingBlockingPage::UnsafeResource resource;
......
...@@ -125,6 +125,12 @@ IN_PROC_BROWSER_TEST_F(InterstitialUITest, ClientsidePhishingInterstitial) { ...@@ -125,6 +125,12 @@ IN_PROC_BROWSER_TEST_F(InterstitialUITest, ClientsidePhishingInterstitial) {
"Security error"); "Security error");
} }
IN_PROC_BROWSER_TEST_F(InterstitialUITest, TrickToBillInterstitial) {
TestInterstitial(
GURL("chrome://interstitials/safebrowsing?type=trick_to_bill"),
"Security error");
}
IN_PROC_BROWSER_TEST_F(InterstitialUITest, CaptivePortalInterstitial) { IN_PROC_BROWSER_TEST_F(InterstitialUITest, CaptivePortalInterstitial) {
TestInterstitial(GURL("chrome://interstitials/captiveportal"), TestInterstitial(GURL("chrome://interstitials/captiveportal"),
"Connect to network"); "Connect to network");
......
...@@ -239,6 +239,9 @@ std::string BaseBlockingPage::GetMetricPrefix( ...@@ -239,6 +239,9 @@ std::string BaseBlockingPage::GetMetricPrefix(
return primary_subresource ? "malware_subresource" : "malware"; return primary_subresource ? "malware_subresource" : "malware";
case BaseSafeBrowsingErrorUI::SB_REASON_HARMFUL: case BaseSafeBrowsingErrorUI::SB_REASON_HARMFUL:
return primary_subresource ? "harmful_subresource" : "harmful"; return primary_subresource ? "harmful_subresource" : "harmful";
case BaseSafeBrowsingErrorUI::SB_REASON_TRICK_TO_BILL:
return primary_subresource ? "trick_to_bill_subresource"
: "trick_to_bill";
case BaseSafeBrowsingErrorUI::SB_REASON_PHISHING: case BaseSafeBrowsingErrorUI::SB_REASON_PHISHING:
ThreatPatternType threat_pattern_type = ThreatPatternType threat_pattern_type =
unsafe_resources[0].threat_metadata.threat_pattern_type; unsafe_resources[0].threat_metadata.threat_pattern_type;
...@@ -291,10 +294,15 @@ BaseBlockingPage::GetInterstitialReason( ...@@ -291,10 +294,15 @@ BaseBlockingPage::GetInterstitialReason(
iter != unsafe_resources.end(); ++iter) { iter != unsafe_resources.end(); ++iter) {
const BaseUIManager::UnsafeResource& resource = *iter; const BaseUIManager::UnsafeResource& resource = *iter;
safe_browsing::SBThreatType threat_type = resource.threat_type; safe_browsing::SBThreatType threat_type = resource.threat_type;
if (threat_type == SB_THREAT_TYPE_TRICK_TO_BILL)
return BaseSafeBrowsingErrorUI::SB_REASON_TRICK_TO_BILL;
if (threat_type == SB_THREAT_TYPE_URL_MALWARE || if (threat_type == SB_THREAT_TYPE_URL_MALWARE ||
threat_type == SB_THREAT_TYPE_URL_CLIENT_SIDE_MALWARE) { threat_type == SB_THREAT_TYPE_URL_CLIENT_SIDE_MALWARE) {
return BaseSafeBrowsingErrorUI::SB_REASON_MALWARE; return BaseSafeBrowsingErrorUI::SB_REASON_MALWARE;
} else if (threat_type == SB_THREAT_TYPE_URL_UNWANTED) { }
if (threat_type == SB_THREAT_TYPE_URL_UNWANTED) {
harmful = true; harmful = true;
} else { } else {
DCHECK(threat_type == SB_THREAT_TYPE_URL_PHISHING || DCHECK(threat_type == SB_THREAT_TYPE_URL_PHISHING ||
......
...@@ -140,6 +140,9 @@ enum SBThreatType { ...@@ -140,6 +140,9 @@ enum SBThreatType {
// Enterprise password reuse detected on low reputation page, // Enterprise password reuse detected on low reputation page,
SB_THREAT_TYPE_ENTERPRISE_PASSWORD_REUSE, SB_THREAT_TYPE_ENTERPRISE_PASSWORD_REUSE,
// Deceptive mobile billing practice detected.
SB_THREAT_TYPE_TRICK_TO_BILL,
}; };
using SBThreatTypeSet = base::flat_set<SBThreatType>; using SBThreatTypeSet = base::flat_set<SBThreatType>;
......
...@@ -23,6 +23,7 @@ class BaseSafeBrowsingErrorUI { ...@@ -23,6 +23,7 @@ class BaseSafeBrowsingErrorUI {
SB_REASON_MALWARE, SB_REASON_MALWARE,
SB_REASON_HARMFUL, SB_REASON_HARMFUL,
SB_REASON_PHISHING, SB_REASON_PHISHING,
SB_REASON_TRICK_TO_BILL,
}; };
struct SBErrorDisplayOptions { struct SBErrorDisplayOptions {
......
...@@ -26,9 +26,14 @@ function setupExtendedReportingCheckbox() { ...@@ -26,9 +26,14 @@ function setupExtendedReportingCheckbox() {
$('opt-in-checkbox').checked = loadTimeData.getBoolean(SB_BOX_CHECKED); $('opt-in-checkbox').checked = loadTimeData.getBoolean(SB_BOX_CHECKED);
$('extended-reporting-opt-in').classList.remove('hidden'); $('extended-reporting-opt-in').classList.remove('hidden');
var className = interstitialType == 'SAFEBROWSING' ? var trickToBill = interstitialType == 'SAFEBROWSING' &&
'safe-browsing-opt-in' : loadTimeData.getBoolean('trick_to_bill');
'ssl-opt-in';
var className = 'ssl-opt-in';
if (interstitialType == 'SAFEBROWSING' && !trickToBill) {
className = 'safe-browsing-opt-in';
}
$('extended-reporting-opt-in').classList.add(className); $('extended-reporting-opt-in').classList.add(className);
$('body').classList.add('extended-reporting-has-checkbox'); $('body').classList.add('extended-reporting-has-checkbox');
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
</div> </div>
<div class="nav-wrapper"> <div class="nav-wrapper">
<button id="primary-button">$i18n{primaryButtonText}</button> <button id="primary-button">$i18n{primaryButtonText}</button>
<button id="proceed-button" class="small-link hidden"></button>
<button id="details-button" class="small-link"> <button id="details-button" class="small-link">
$i18n{openDetails} $i18n{openDetails}
</button> </button>
......
...@@ -68,6 +68,8 @@ function setupEvents() { ...@@ -68,6 +68,8 @@ function setupEvents() {
var ssl = interstitialType == 'SSL'; var ssl = interstitialType == 'SSL';
var captivePortal = interstitialType == 'CAPTIVE_PORTAL'; var captivePortal = interstitialType == 'CAPTIVE_PORTAL';
var badClock = ssl && loadTimeData.getBoolean('bad_clock'); var badClock = ssl && loadTimeData.getBoolean('bad_clock');
var trickToBill = interstitialType == 'SAFEBROWSING' &&
loadTimeData.getBoolean('trick_to_bill');
var hidePrimaryButton = loadTimeData.getBoolean('hide_primary_button'); var hidePrimaryButton = loadTimeData.getBoolean('hide_primary_button');
var showRecurrentErrorParagraph = loadTimeData.getBoolean( var showRecurrentErrorParagraph = loadTimeData.getBoolean(
'show_recurrent_error_paragraph'); 'show_recurrent_error_paragraph');
...@@ -78,6 +80,8 @@ function setupEvents() { ...@@ -78,6 +80,8 @@ function setupEvents() {
$('error-code').classList.remove(HIDDEN_CLASS); $('error-code').classList.remove(HIDDEN_CLASS);
} else if (captivePortal) { } else if (captivePortal) {
$('body').classList.add('captive-portal'); $('body').classList.add('captive-portal');
} else if (trickToBill) {
$('body').classList.add('safe-browsing-trick-to-bill');
} else { } else {
$('body').classList.add('safe-browsing'); $('body').classList.add('safe-browsing');
// Override the default theme color. // Override the default theme color.
...@@ -116,17 +120,23 @@ function setupEvents() { ...@@ -116,17 +120,23 @@ function setupEvents() {
} }
if (overridable) { if (overridable) {
var overrideElement = trickToBill ? 'proceed-button' : 'proceed-link';
// Captive portal page isn't overridable. // Captive portal page isn't overridable.
$('proceed-link').addEventListener('click', function(event) { $(overrideElement).addEventListener('click', function(event) {
sendCommand(SecurityInterstitialCommandId.CMD_PROCEED); sendCommand(SecurityInterstitialCommandId.CMD_PROCEED);
}); });
if (ssl) {
$(overrideElement).classList.add('small-link');
} else if (trickToBill) {
$(overrideElement).classList.remove(HIDDEN_CLASS);
$(overrideElement).textContent =
loadTimeData.getString('proceedButtonText');
}
} else if (!ssl) { } else if (!ssl) {
$('final-paragraph').classList.add(HIDDEN_CLASS); $('final-paragraph').classList.add(HIDDEN_CLASS);
} }
if (ssl && overridable) {
$('proceed-link').classList.add('small-link');
}
if (!ssl || !showRecurrentErrorParagraph) { if (!ssl || !showRecurrentErrorParagraph) {
$('recurrent-error-message').classList.add(HIDDEN_CLASS); $('recurrent-error-message').classList.add(HIDDEN_CLASS);
...@@ -146,8 +156,8 @@ function setupEvents() { ...@@ -146,8 +156,8 @@ function setupEvents() {
}); });
} }
if (captivePortal) { if (captivePortal || trickToBill) {
// Captive portal page doesn't have details button. // Captive portal and trick-to-bill pages don't have details button.
$('details-button').classList.add('hidden'); $('details-button').classList.add('hidden');
} else { } else {
$('details-button').addEventListener('click', function(event) { $('details-button').addEventListener('click', function(event) {
......
...@@ -42,4 +42,22 @@ body.safe-browsing { ...@@ -42,4 +42,22 @@ body.safe-browsing {
background: rgb(206, 52, 38); background: rgb(206, 52, 38);
box-shadow: 0 -22px 40px rgb(206, 52, 38); box-shadow: 0 -22px 40px rgb(206, 52, 38);
} }
} }
\ No newline at end of file
.safe-browsing-trick-to-bill .small-link {
background-color: white;
border:none;
float: none;
}
.safe-browsing-trick-to-bill .small-link:hover {
box-shadow: none;
}
.safe-browsing-trick-to-bill .icon {
background-image: -webkit-image-set(
url(images/1x/triangle_red.png) 1x,
url(images/2x/triangle_red.png) 2x);
}
...@@ -71,6 +71,9 @@ ...@@ -71,6 +71,9 @@
<li> <li>
<a href="safebrowsing?type=clientside_phishing">Client Side Phishing</a> <a href="safebrowsing?type=clientside_phishing">Client Side Phishing</a>
</li> </li>
<li>
<a href="safebrowsing?type=trick_to_bill">Trick To Bill</a>
</li>
</ul> </ul>
<h4>Quiet (WebView)</h4> <h4>Quiet (WebView)</h4>
<ul> <ul>
......
...@@ -26,7 +26,8 @@ button { ...@@ -26,7 +26,8 @@ button {
.neterror button, .neterror button,
.offline button, .offline button,
.pdf button, .pdf button,
.ssl button { .ssl button,
.safe-browsing-trick-to-bill button {
background: rgb(66, 133, 244); background: rgb(66, 133, 244);
} }
......
...@@ -93,6 +93,10 @@ void SafeBrowsingLoudErrorUI::PopulateStringsForHtml( ...@@ -93,6 +93,10 @@ void SafeBrowsingLoudErrorUI::PopulateStringsForHtml(
"hide_primary_button", "hide_primary_button",
always_show_back_to_safety() ? false : !controller()->CanGoBack()); always_show_back_to_safety() ? false : !controller()->CanGoBack());
load_time_data->SetBoolean(
"trick_to_bill", interstitial_reason() ==
BaseSafeBrowsingErrorUI::SB_REASON_TRICK_TO_BILL);
switch (interstitial_reason()) { switch (interstitial_reason()) {
case BaseSafeBrowsingErrorUI::SB_REASON_MALWARE: case BaseSafeBrowsingErrorUI::SB_REASON_MALWARE:
PopulateMalwareLoadTimeData(load_time_data); PopulateMalwareLoadTimeData(load_time_data);
...@@ -103,6 +107,9 @@ void SafeBrowsingLoudErrorUI::PopulateStringsForHtml( ...@@ -103,6 +107,9 @@ void SafeBrowsingLoudErrorUI::PopulateStringsForHtml(
case BaseSafeBrowsingErrorUI::SB_REASON_PHISHING: case BaseSafeBrowsingErrorUI::SB_REASON_PHISHING:
PopulatePhishingLoadTimeData(load_time_data); PopulatePhishingLoadTimeData(load_time_data);
break; break;
case BaseSafeBrowsingErrorUI::SB_REASON_TRICK_TO_BILL:
PopulateTrickToBillLoadTimeData(load_time_data);
break;
} }
// Not used by this interstitial. // Not used by this interstitial.
...@@ -309,6 +316,31 @@ void SafeBrowsingLoudErrorUI::PopulateExtendedReportingOption( ...@@ -309,6 +316,31 @@ void SafeBrowsingLoudErrorUI::PopulateExtendedReportingOption(
is_extended_reporting_enabled()); is_extended_reporting_enabled());
} }
void SafeBrowsingLoudErrorUI::PopulateTrickToBillLoadTimeData(
base::DictionaryValue* load_time_data) {
load_time_data->SetBoolean("phishing", false);
load_time_data->SetBoolean("overridable", true);
load_time_data->SetBoolean("hide_primary_button", false);
load_time_data->SetString(
"heading", l10n_util::GetStringUTF16(IDS_TRICK_TO_BILL_HEADING));
load_time_data->SetString(
"primaryParagraph",
l10n_util::GetStringUTF16(IDS_TRICK_TO_BILL_PRIMARY_PARAGRAPH));
load_time_data->SetString(
"primaryButtonText",
l10n_util::GetStringUTF16(IDS_TRICK_TO_BILL_PRIMARY_BUTTON));
load_time_data->SetString(
"proceedButtonText",
l10n_util::GetStringUTF16(IDS_TRICK_TO_BILL_PROCEED_BUTTON));
load_time_data->SetString("openDetails", "");
load_time_data->SetString("closeDetails", "");
load_time_data->SetString("explanationParagraph", "");
load_time_data->SetString("finalParagraph", "");
}
int SafeBrowsingLoudErrorUI::GetHTMLTemplateId() const { int SafeBrowsingLoudErrorUI::GetHTMLTemplateId() const {
return IDR_SECURITY_INTERSTITIAL_HTML; return IDR_SECURITY_INTERSTITIAL_HTML;
}; };
......
...@@ -47,6 +47,7 @@ class SafeBrowsingLoudErrorUI ...@@ -47,6 +47,7 @@ class SafeBrowsingLoudErrorUI
void PopulateMalwareLoadTimeData(base::DictionaryValue* load_time_data); void PopulateMalwareLoadTimeData(base::DictionaryValue* load_time_data);
void PopulateHarmfulLoadTimeData(base::DictionaryValue* load_time_data); void PopulateHarmfulLoadTimeData(base::DictionaryValue* load_time_data);
void PopulatePhishingLoadTimeData(base::DictionaryValue* load_time_data); void PopulatePhishingLoadTimeData(base::DictionaryValue* load_time_data);
void PopulateTrickToBillLoadTimeData(base::DictionaryValue* load_time_data);
DISALLOW_COPY_AND_ASSIGN(SafeBrowsingLoudErrorUI); DISALLOW_COPY_AND_ASSIGN(SafeBrowsingLoudErrorUI);
}; };
......
...@@ -381,4 +381,18 @@ ...@@ -381,4 +381,18 @@
&lt;/ol&gt; &lt;/ol&gt;
</message> </message>
</if> </if>
<!-- Trick to Bill interstitial -->
<message name="IDS_TRICK_TO_BILL_HEADING" desc="The large heading at the top of the trick to bill interstitial.">
The page ahead may try to charge you money
</message>
<message name="IDS_TRICK_TO_BILL_PRIMARY_PARAGRAPH" desc="The primary explanatory paragraph for the trick to bill interstitial.">
These charges could be one-time or recurring and may not be obvious.
</message>
<message name="IDS_TRICK_TO_BILL_PRIMARY_BUTTON" desc="The text for the trick to bill interstitial primary button.">
Go Back
</message>
<message name="IDS_TRICK_TO_BILL_PROCEED_BUTTON" desc="The text for the trick to bill interstitial proceed button.">
Proceed
</message>
</grit-part> </grit-part>
daf13e4d1d9d61fd9c357af7b52e3fb52c02e7f8
\ No newline at end of file
daf13e4d1d9d61fd9c357af7b52e3fb52c02e7f8
\ No newline at end of file
daf13e4d1d9d61fd9c357af7b52e3fb52c02e7f8
\ No newline at end of file
daf13e4d1d9d61fd9c357af7b52e3fb52c02e7f8
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment