blob: e3ac1b065eed9294686c452c6d7c7195063588e7 [file] [log] [blame]
// 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.
// This is the shared code for the new (Chrome 37) security interstitials. It is
// used for both SSL interstitials and Safe Browsing interstitials.
var expandedDetails = false;
var keyPressState = 0;
/**
* A convenience method for sending commands to the parent page.
* @param {string} cmd The command to send.
*/
function sendCommand(cmd) {
window.domAutomationController.setAutomationId(1);
window.domAutomationController.send(cmd);
}
/**
* This allows errors to be skippped by typing "danger" into the page.
* @param {string} e The key that was just pressed.
*/
function handleKeypress(e) {
var BYPASS_SEQUENCE = 'danger';
if (BYPASS_SEQUENCE.charCodeAt(keyPressState) == e.keyCode) {
keyPressState++;
if (keyPressState == BYPASS_SEQUENCE.length) {
sendCommand(SSL_CMD_PROCEED);
keyPressState = 0;
}
} else {
keyPressState = 0;
}
}
/**
* This appends a piece of debugging information to the end of the warning.
* When complete, the caller must also make the debugging div
* (error-debugging-info) visible.
* @param {string} title The name of this debugging field.
* @param {string} value The value of the debugging field.
*/
function appendDebuggingField(title, value) {
// The values input here are not trusted. Never use innerHTML on these
// values!
var spanTitle = document.createElement('span');
spanTitle.classList.add('debugging-title');
spanTitle.innerText = title + ': ';
var spanValue = document.createElement('span');
spanValue.classList.add('debugging-value');
spanValue.innerText = value;
var pElem = document.createElement('p');
pElem.classList.add('debugging-content');
pElem.appendChild(spanTitle);
pElem.appendChild(spanValue);
$('error-debugging-info').appendChild(pElem);
}
function toggleDebuggingInfo() {
$('error-debugging-info').classList.toggle('hidden');
}
function setupEvents() {
var overridable = loadTimeData.getBoolean('overridable');
var ssl = loadTimeData.getString('type') === 'SSL';
var badClock = ssl && loadTimeData.getBoolean('bad_clock');
var hidePrimaryButton = badClock && loadTimeData.getBoolean(
'hide_primary_button');
if (ssl) {
$('body').classList.add(badClock ? 'bad-clock' : 'ssl');
$('error-code').textContent = loadTimeData.getString('errorCode');
$('error-code').classList.remove('hidden');
} else {
$('body').classList.add('safe-browsing');
}
if (hidePrimaryButton) {
$('primary-button').classList.add('hidden');
} else {
$('primary-button').addEventListener('click', function() {
if (!ssl)
sendCommand(SB_CMD_TAKE_ME_BACK);
else if (badClock)
sendCommand(SSL_CMD_CLOCK);
else if (overridable)
sendCommand(SSL_CMD_DONT_PROCEED);
else
sendCommand(SSL_CMD_RELOAD);
});
}
if (overridable) {
$('proceed-link').addEventListener('click', function(event) {
sendCommand(ssl ? SSL_CMD_PROCEED : SB_CMD_PROCEED);
});
} else if (!ssl) {
$('final-paragraph').classList.add('hidden');
}
if (ssl && overridable) {
$('proceed-link').classList.add('small-link');
} else if ($('help-link')) {
// Overridable SSL page doesn't have this link.
$('help-link').addEventListener('click', function(event) {
if (ssl)
sendCommand(SSL_CMD_HELP);
else if (loadTimeData.getBoolean('phishing'))
sendCommand(SB_CMD_LEARN_MORE_2);
else
sendCommand(SB_CMD_SHOW_DIAGNOSTIC);
});
}
$('details-button').addEventListener('click', function(event) {
var hiddenDetails = $('details').classList.toggle('hidden');
$('details-button').innerText = hiddenDetails ?
loadTimeData.getString('openDetails') :
loadTimeData.getString('closeDetails');
if (!expandedDetails) {
// Record a histogram entry only the first time that details is opened.
sendCommand(ssl ? SSL_CMD_MORE : SB_CMD_EXPANDED_SEE_MORE);
expandedDetails = true;
}
});
preventDefaultOnPoundLinkClicks();
setupCheckbox();
setupSSLDebuggingInfo();
document.addEventListener('keypress', handleKeypress);
}
document.addEventListener('DOMContentLoaded', setupEvents);