Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / security_warnings / interstitial_v2.js
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.
4
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.
7
8 var expandedDetails = false;
9 var keyPressState = 0;
10
11 /**
12  * A convenience method for sending commands to the parent page.
13  * @param {string} cmd  The command to send.
14  */
15 function sendCommand(cmd) {
16   window.domAutomationController.setAutomationId(1);
17   window.domAutomationController.send(cmd);
18 }
19
20 /**
21  * This allows errors to be skippped by typing "danger" into the page.
22  * @param {string} e The key that was just pressed.
23  */
24 function handleKeypress(e) {
25   var BYPASS_SEQUENCE = 'danger';
26   if (BYPASS_SEQUENCE.charCodeAt(keyPressState) == e.keyCode) {
27     keyPressState++;
28     if (keyPressState == BYPASS_SEQUENCE.length) {
29       sendCommand(CMD_PROCEED);
30       keyPressState = 0;
31     }
32   } else {
33     keyPressState = 0;
34   }
35 }
36
37 /**
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.
43  */
44 function appendDebuggingField(title, value) {
45   // The values input here are not trusted. Never use innerHTML on these
46   // values!
47   var spanTitle = document.createElement('span');
48   spanTitle.classList.add('debugging-title');
49   spanTitle.innerText = title + ': ';
50
51   var spanValue = document.createElement('span');
52   spanValue.classList.add('debugging-value');
53   spanValue.innerText = value;
54
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);
60 }
61
62 function toggleDebuggingInfo() {
63   $('error-debugging-info').classList.toggle('hidden');
64 }
65
66 function setupEvents() {
67   var overridable = loadTimeData.getBoolean('overridable');
68   var ssl = loadTimeData.getBoolean('ssl');
69
70   if (ssl) {
71     $('body').classList.add('ssl');
72     $('error-code').textContent = loadTimeData.getString('errorCode');
73     $('error-code').classList.remove('hidden');
74   } else {
75     $('body').classList.add('safe-browsing');
76   }
77
78   $('primary-button').addEventListener('click', function() {
79     if (!ssl)
80       sendCommand(SB_CMD_TAKE_ME_BACK);
81     else if (overridable)
82       sendCommand(CMD_DONT_PROCEED);
83     else
84       sendCommand(CMD_RELOAD);
85   });
86
87   if (overridable) {
88     $('proceed-link').addEventListener('click', function(event) {
89       sendCommand(ssl ? CMD_PROCEED : SB_CMD_PROCEED);
90     });
91   } else if (!ssl) {
92     $('final-paragraph').classList.add('hidden');
93   }
94
95   if (ssl && overridable) {
96     $('proceed-link').classList.add('small-link');
97   } else if ($('help-link')) {
98     // Overridable SSL page doesn't have this link.
99     $('help-link').addEventListener('click', function(event) {
100       if (ssl)
101         sendCommand(CMD_HELP);
102       else if (loadTimeData.getBoolean('phishing'))
103         sendCommand(SB_CMD_LEARN_MORE_2);
104       else
105         sendCommand(SB_CMD_SHOW_DIAGNOSTIC);
106     });
107   }
108
109   if (ssl && $('clock-link')) {
110     $('clock-link').addEventListener('click', function(event) {
111       sendCommand(CMD_CLOCK);
112     });
113   }
114
115   $('details-button').addEventListener('click', function(event) {
116     var hiddenDetails = $('details').classList.toggle('hidden');
117     $('details-button').innerText = hiddenDetails ?
118         loadTimeData.getString('openDetails') :
119         loadTimeData.getString('closeDetails');
120     if (!expandedDetails) {
121       // Record a histogram entry only the first time that details is opened.
122       sendCommand(ssl ? CMD_MORE : SB_CMD_EXPANDED_SEE_MORE);
123       expandedDetails = true;
124     }
125   });
126
127   preventDefaultOnPoundLinkClicks();
128   setupCheckbox();
129   setupSSLDebuggingInfo();
130   document.addEventListener('keypress', handleKeypress);
131 }
132
133 document.addEventListener('DOMContentLoaded', setupEvents);