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.
5 // This is the shared code for the new (Chrome 37) security interstitials. It is
6 // used for both SSL interstitials and Safe Browsing interstitials.
8 var expandedDetails
= false;
12 * A convenience method for sending commands to the parent page.
13 * @param {string} cmd The command to send.
15 function sendCommand(cmd
) {
16 window
.domAutomationController
.setAutomationId(1);
17 window
.domAutomationController
.send(cmd
);
21 * This allows errors to be skippped by typing "danger" into the page.
22 * @param {string} e The key that was just pressed.
24 function handleKeypress(e
) {
25 var BYPASS_SEQUENCE
= 'danger';
26 if (BYPASS_SEQUENCE
.charCodeAt(keyPressState
) == e
.keyCode
) {
28 if (keyPressState
== BYPASS_SEQUENCE
.length
) {
29 sendCommand(SSL_CMD_PROCEED
);
38 * This appends a piece of debugging information to the end of the warning.
39 * When complete, the caller must also make the debugging div
40 * (error-debugging-info) visible.
41 * @param {string} title The name of this debugging field.
42 * @param {string} value The value of the debugging field.
44 function appendDebuggingField(title
, value
) {
45 // The values input here are not trusted. Never use innerHTML on these
47 var spanTitle
= document
.createElement('span');
48 spanTitle
.classList
.add('debugging-title');
49 spanTitle
.innerText
= title
+ ': ';
51 var spanValue
= document
.createElement('span');
52 spanValue
.classList
.add('debugging-value');
53 spanValue
.innerText
= value
;
55 var pElem
= document
.createElement('p');
56 pElem
.classList
.add('debugging-content');
57 pElem
.appendChild(spanTitle
);
58 pElem
.appendChild(spanValue
);
59 $('error-debugging-info').appendChild(pElem
);
62 function toggleDebuggingInfo() {
63 $('error-debugging-info').classList
.toggle('hidden');
66 function setupEvents() {
67 var overridable
= loadTimeData
.getBoolean('overridable');
68 var ssl
= loadTimeData
.getString('type') === 'SSL';
69 var badClock
= ssl
&& loadTimeData
.getBoolean('bad_clock');
70 var hidePrimaryButton
= badClock
&& loadTimeData
.getBoolean(
71 'hide_primary_button');
74 $('body').classList
.add(badClock
? 'bad-clock' : 'ssl');
75 $('error-code').textContent
= loadTimeData
.getString('errorCode');
76 $('error-code').classList
.remove('hidden');
78 $('body').classList
.add('safe-browsing');
81 if (hidePrimaryButton
) {
82 $('primary-button').classList
.add('hidden');
84 $('primary-button').addEventListener('click', function() {
86 sendCommand(SB_CMD_TAKE_ME_BACK
);
88 sendCommand(SSL_CMD_CLOCK
);
90 sendCommand(SSL_CMD_DONT_PROCEED
);
92 sendCommand(SSL_CMD_RELOAD
);
97 $('proceed-link').addEventListener('click', function(event
) {
98 sendCommand(ssl
? SSL_CMD_PROCEED
: SB_CMD_PROCEED
);
101 $('final-paragraph').classList
.add('hidden');
104 if (ssl
&& overridable
) {
105 $('proceed-link').classList
.add('small-link');
106 } else if ($('help-link')) {
107 // Overridable SSL page doesn't have this link.
108 $('help-link').addEventListener('click', function(event
) {
110 sendCommand(SSL_CMD_HELP
);
111 else if (loadTimeData
.getBoolean('phishing'))
112 sendCommand(SB_CMD_LEARN_MORE_2
);
114 sendCommand(SB_CMD_SHOW_DIAGNOSTIC
);
118 $('details-button').addEventListener('click', function(event
) {
119 var hiddenDetails
= $('details').classList
.toggle('hidden');
120 $('details-button').innerText
= hiddenDetails
?
121 loadTimeData
.getString('openDetails') :
122 loadTimeData
.getString('closeDetails');
123 if (!expandedDetails
) {
124 // Record a histogram entry only the first time that details is opened.
125 sendCommand(ssl
? SSL_CMD_MORE
: SB_CMD_EXPANDED_SEE_MORE
);
126 expandedDetails
= true;
130 preventDefaultOnPoundLinkClicks();
132 setupSSLDebuggingInfo();
133 document
.addEventListener('keypress', handleKeypress
);
136 document
.addEventListener('DOMContentLoaded', setupEvents
);