content_settings_exceptions_area.js revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('options.contentSettings', function() { 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @const */ var ControlledSettingIndicator = 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options.ControlledSettingIndicator; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @const */ var InlineEditableItemList = options.InlineEditableItemList; 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @const */ var InlineEditableItem = options.InlineEditableItem; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates a new exceptions list item. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} contentType The type of the list. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} mode The browser mode, 'otr' or 'normal'. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} enableAskOption Whether to show an 'ask every time' 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * option in the select. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object} exception A dictionary that contains the data of the 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * exception. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {options.InlineEditableItem} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function ExceptionsListItem(contentType, mode, enableAskOption, exception) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var el = cr.doc.createElement('div'); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.mode = mode; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.contentType = contentType; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.enableAskOption = enableAskOption; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.dataItem = exception; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.__proto__ = ExceptionsListItem.prototype; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.decorate(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return el; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExceptionsListItem.prototype = { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: InlineEditableItem.prototype, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when an element is decorated as a list item. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorate: function() { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InlineEditableItem.prototype.decorate.call(this); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.isPlaceholder = !this.pattern; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var patternCell = this.createEditableTextCell(this.pattern); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patternCell.className = 'exception-pattern'; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patternCell.classList.add('weakrtl'); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.contentElement.appendChild(patternCell); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.pattern) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.patternLabel = patternCell.querySelector('.static-text'); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var input = patternCell.querySelector('input'); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(stuartmorgan): Create an createEditableSelectCell abstracting 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this code. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setting label for display mode. |pattern| will be null for the 'add new 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // exception' row. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.pattern) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var settingLabel = cr.doc.createElement('span'); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settingLabel.textContent = this.settingForDisplay(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settingLabel.className = 'exception-setting'; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settingLabel.setAttribute('displaymode', 'static'); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.contentElement.appendChild(settingLabel); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.settingLabel = settingLabel; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setting select element for edit mode. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var select = cr.doc.createElement('select'); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var optionAllow = cr.doc.createElement('option'); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optionAllow.textContent = loadTimeData.getString('allowException'); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optionAllow.value = 'allow'; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) select.appendChild(optionAllow); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.enableAskOption) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var optionAsk = cr.doc.createElement('option'); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optionAsk.textContent = loadTimeData.getString('askException'); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optionAsk.value = 'ask'; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) select.appendChild(optionAsk); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.contentType == 'cookies') { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var optionSession = cr.doc.createElement('option'); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optionSession.textContent = loadTimeData.getString('sessionException'); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optionSession.value = 'session'; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) select.appendChild(optionSession); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.contentType != 'fullscreen') { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var optionBlock = cr.doc.createElement('option'); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optionBlock.textContent = loadTimeData.getString('blockException'); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) optionBlock.value = 'block'; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) select.appendChild(optionBlock); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.isEmbeddingRule()) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.patternLabel.classList.add('sublabel'); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.editable = false; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.setting == 'default') { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Items that don't have their own settings (parents of 'embedded on' 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // items) aren't deletable. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.deletable = false; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.editable = false; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.contentElement.appendChild(select); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) select.className = 'exception-setting'; 109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) select.setAttribute('aria-labelledby', 'exception-behavior-column'); 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.pattern) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) select.setAttribute('displaymode', 'edit'); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.contentType == 'media-stream') { 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.settingLabel.classList.add('media-audio-setting'); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var videoSettingLabel = cr.doc.createElement('span'); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) videoSettingLabel.textContent = this.videoSettingForDisplay(); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) videoSettingLabel.className = 'exception-setting'; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) videoSettingLabel.classList.add('media-video-setting'); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) videoSettingLabel.setAttribute('displaymode', 'static'); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.contentElement.appendChild(videoSettingLabel); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to track whether the URL pattern in the input is valid. 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will be true if the browser process has informed us that the 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // current text in the input is valid. Changing the text resets this to 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // false, and getting a response from the browser sets it back to true. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It starts off as false for empty string (new exceptions) or true for 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // already-existing exceptions (which we assume are valid). 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.inputValidityKnown = this.pattern; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This one tracks the actual validity of the pattern in the input. This 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // starts off as true so as not to annoy the user when he adds a new and 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // empty input. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.inputIsValid = true; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input = input; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.select = select; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.updateEditables(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Editing notifications, geolocation and media-stream is disabled for 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // now. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.contentType == 'notifications' || 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.contentType == 'location' || 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.contentType == 'media-stream') { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.editable = false; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the source of the content setting exception is not a user 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preference, that source controls the exception and the user cannot edit 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or delete it. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var controlledBy = 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataItem.source && this.dataItem.source != 'preference' ? 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataItem.source : null; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (controlledBy) { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setAttribute('controlled-by', controlledBy); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.deletable = false; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.editable = false; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (controlledBy == 'policy' || controlledBy == 'extension') { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.querySelector('.row-delete-button').hidden = true; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var indicator = ControlledSettingIndicator(); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indicator.setAttribute('content-exception', this.contentType); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a synthetic pref change event decorated as 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CoreOptionsHandler::CreateValueForPref() does. 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) var event = new Event(this.contentType); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event.value = { controlledBy: controlledBy }; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indicator.handlePrefChange(event); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.appendChild(indicator); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the exception comes from a hosted app, display the name and the 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // icon of the app. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (controlledBy == 'HostedApp') { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.title = 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadTimeData.getString('set_by') + ' ' + this.dataItem.appName; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var button = this.querySelector('.row-delete-button'); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use the host app's favicon (16px, match bigger size). 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See c/b/ui/webui/extensions/extension_icon_source.h 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for a description of the chrome://extension-icon URL. 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button.style.backgroundImage = 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'url(\'chrome://extension-icon/' + this.dataItem.appId + '/16/1\')'; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var listItem = this; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handle events on the editable nodes. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input.oninput = function(event) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItem.inputValidityKnown = false; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send('checkExceptionPatternValidity', 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [listItem.contentType, listItem.mode, input.value]); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Listen for edit events. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.addEventListener('canceledit', this.onEditCancelled_); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.addEventListener('commitedit', this.onEditCommitted_); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isEmbeddingRule: function() { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.dataItem.embeddingOrigin && 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataItem.embeddingOrigin !== this.dataItem.origin; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The pattern (e.g., a URL) for the exception. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {string} 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get pattern() { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.isEmbeddingRule()) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.dataItem.origin; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loadTimeData.getStringF('embeddedOnHost', 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataItem.embeddingOrigin); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.dataItem.displayPattern; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set pattern(pattern) { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.editable) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.error('Tried to change uneditable pattern'); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataItem.displayPattern = pattern; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The setting (allow/block) for the exception. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {string} 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get setting() { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.dataItem.setting; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set setting(setting) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataItem.setting = setting; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Gets a human-readable setting string. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @return {string} The display string. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settingForDisplay: function() { 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.getDisplayStringForSetting(this.setting); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * media video specific function. 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Gets a human-readable video setting string. 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @return {string} The display string. 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) videoSettingForDisplay: function() { 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.getDisplayStringForSetting(this.dataItem.video); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Gets a human-readable display string for setting. 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {string} setting The setting to be displayed. 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @return {string} The display string. 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) getDisplayStringForSetting: function(setting) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (setting == 'allow') 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loadTimeData.getString('allowException'); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (setting == 'block') 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loadTimeData.getString('blockException'); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (setting == 'ask') 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loadTimeData.getString('askException'); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (setting == 'session') 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loadTimeData.getString('sessionException'); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (setting == 'default') 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ''; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.error('Unknown setting: [' + setting + ']'); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ''; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Update this list item to reflect whether the input is a valid pattern. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} valid Whether said pattern is valid in the context of a 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * content exception setting. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setPatternValid: function(valid) { 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (valid || !this.input.value) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input.setCustomValidity(''); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input.setCustomValidity(' '); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.inputIsValid = valid; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.inputValidityKnown = true; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Set the <input> to its original contents. Used when the user quits 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * editing. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resetInput: function() { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input.value = this.pattern; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copy the data model values to the editable nodes. 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateEditables: function() { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.resetInput(); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var settingOption = 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.select.querySelector('[value=\'' + this.setting + '\']'); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settingOption) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settingOption.selected = true; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get currentInputIsValid() { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.inputValidityKnown && this.inputIsValid; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get hasBeenEdited() { 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var livePattern = this.input.value; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var liveSetting = this.select.value; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return livePattern != this.pattern || liveSetting != this.setting; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when committing an edit. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Event} e The end event. 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEditCommitted_: function(e) { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var newPattern = this.input.value; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var newSetting = this.select.value; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.finishEdit(newPattern, newSetting); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when cancelling an edit; resets the control states. 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Event} e The cancel event. 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onEditCancelled_: function() { 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.updateEditables(); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setPatternValid(true); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Editing is complete; update the model. 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} newPattern The pattern that the user entered. 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} newSetting The setting the user chose. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finishEdit: function(newPattern, newSetting) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.patternLabel.textContent = newPattern; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.settingLabel.textContent = this.settingForDisplay(); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var oldPattern = this.pattern; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pattern = newPattern; 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setting = newSetting; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(estade): this will need to be updated if geolocation/notifications 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // become editable. 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (oldPattern != newPattern) { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send('removeException', 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [this.contentType, this.mode, oldPattern]); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send('setException', 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [this.contentType, this.mode, newPattern, newSetting]); 3747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }, 3757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch /** @override */ 3777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch isExtraFocusableControl: function(element) { 3787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return element === this.select; 3797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }, 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates a new list item for the Add New Item row, which doesn't represent 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * an actual entry in the exceptions list but allows the user to add new 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * exceptions. 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} contentType The type of the list. 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} mode The browser mode, 'otr' or 'normal'. 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} enableAskOption Whether to show an 'ask every time' option 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in the select. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {cr.ui.ExceptionsListItem} 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function ExceptionsAddRowListItem(contentType, mode, enableAskOption) { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var el = cr.doc.createElement('div'); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.mode = mode; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.contentType = contentType; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.enableAskOption = enableAskOption; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.dataItem = []; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.__proto__ = ExceptionsAddRowListItem.prototype; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.decorate(); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return el; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExceptionsAddRowListItem.prototype = { 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: ExceptionsListItem.prototype, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorate: function() { 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExceptionsListItem.prototype.decorate.call(this); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input.placeholder = 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadTimeData.getString('addNewExceptionInstructions'); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do we always want a default of allow? 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setting = 'allow'; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Clear the <input> and let the placeholder text show again. 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resetInput: function() { 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.input.value = ''; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get hasBeenEdited() { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.input.value != ''; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Editing is complete; update the model. As long as the pattern isn't 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * empty, we'll just add it. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} newPattern The pattern that the user entered. 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} newSetting The setting the user chose. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finishEdit: function(newPattern, newSetting) { 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.resetInput(); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send('setException', 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [this.contentType, this.mode, newPattern, newSetting]); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates a new exceptions list. 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {cr.ui.List} 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var ExceptionsList = cr.ui.define('list'); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExceptionsList.prototype = { 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: InlineEditableItemList.prototype, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when an element is decorated as a list. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorate: function() { 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InlineEditableItemList.prototype.decorate.call(this); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.classList.add('settings-list'); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var parentNode = this.parentNode; parentNode; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parentNode = parentNode.parentNode) { 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (parentNode.hasAttribute('contentType')) { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.contentType = parentNode.getAttribute('contentType'); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.mode = this.getAttribute('mode'); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the exceptions in this list allow an 'Ask every time' option. 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.enableAskOption = this.contentType == 'plugins'; 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.autoExpands = true; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.reset(); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates an item to go in the list. 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object} entry The element from the data model for this row. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createItem: function(entry) { 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (entry) { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ExceptionsListItem(this.contentType, 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.mode, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.enableAskOption, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var addRowItem = new ExceptionsAddRowListItem(this.contentType, 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.mode, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.enableAskOption); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addRowItem.deletable = false; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return addRowItem; 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Sets the exceptions in the js model. 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object} entries A list of dictionaries of values, each dictionary 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * represents an exception. 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setExceptions: function(entries) { 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var deleteCount = this.dataModel.length; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.isEditable()) { 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't want to remove the Add New Exception row. 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) deleteCount = deleteCount - 1; 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var args = [0, deleteCount]; 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args.push.apply(args, entries); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataModel.splice.apply(this.dataModel, args); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The browser has finished checking a pattern for validity. Update the list 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * item to reflect this. 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} pattern The pattern. 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {bool} valid Whether said pattern is valid in the context of a 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * content exception setting. 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) patternValidityCheckComplete: function(pattern, valid) { 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var listItems = this.items; 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < listItems.length; i++) { 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var listItem = listItems[i]; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't do anything for messages for the item if it is not the intended 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // recipient, or if the response is stale (i.e. the input value has 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // changed since we sent the request to analyze it). 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pattern == listItem.input.value) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listItem.setPatternValid(valid); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns whether the rows are editable in this list. 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isEditable: function() { 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exceptions of the following lists are not editable for now. 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !(this.contentType == 'notifications' || 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.contentType == 'location' || 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.contentType == 'fullscreen' || 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.contentType == 'media-stream'); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Removes all exceptions from the js model. 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reset: function() { 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.isEditable()) { 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The null creates the Add New Exception row. 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataModel = new ArrayDataModel([null]); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.dataModel = new ArrayDataModel([]); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) deleteItemAtIndex: function(index) { 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var listItem = this.getListItemByIndex(index); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!listItem.deletable) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var dataItem = listItem.dataItem; 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var args = [listItem.contentType]; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (listItem.contentType == 'notifications') 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args.push(dataItem.origin, dataItem.setting); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args.push(listItem.mode, dataItem.origin, dataItem.embeddingOrigin); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send('removeException', args); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var OptionsPage = options.OptionsPage; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Encapsulated handling of content settings list subpage. 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function ContentSettingsExceptionsArea() { 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OptionsPage.call(this, 'contentExceptions', 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadTimeData.getString('contentSettingsPageTabTitle'), 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'content-settings-exceptions-area'); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.addSingletonGetter(ContentSettingsExceptionsArea); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsExceptionsArea.prototype = { 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: OptionsPage.prototype, 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initializePage: function() { 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OptionsPage.prototype.initializePage.call(this); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var exceptionsLists = this.pageDiv.querySelectorAll('list'); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < exceptionsLists.length; i++) { 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) options.contentSettings.ExceptionsList.decorate(exceptionsLists[i]); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsExceptionsArea.hideOTRLists(false); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the user types in the URL without a hash, show just cookies. 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.showList('cookies'); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('content-settings-exceptions-overlay-confirm').onclick = 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OptionsPage.closeOverlay.bind(OptionsPage); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Shows one list and hides all others. 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} type The content type. 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) showList: function(type) { 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var header = this.pageDiv.querySelector('h1'); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header.textContent = loadTimeData.getString(type + '_header'); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var divs = this.pageDiv.querySelectorAll('div[contentType]'); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < divs.length; i++) { 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (divs[i].getAttribute('contentType') == type) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) divs[i].hidden = false; 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) divs[i].hidden = true; 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var mediaHeader = this.pageDiv.querySelector('.media-header'); 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mediaHeader.hidden = type != 'media-stream'; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called after the page has been shown. Show the content type for the 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * location's hash. 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) didShowPage: function() { 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hash = location.hash; 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hash) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.showList(hash.slice(1)); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when the last incognito window is closed. 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsExceptionsArea.OTRProfileDestroyed = function() { 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.hideOTRLists(true); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Hides the incognito exceptions lists and optionally clears them as well. 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} clear Whether to clear the lists. 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsExceptionsArea.hideOTRLists = function(clear) { 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var otrLists = document.querySelectorAll('list[mode=otr]'); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < otrLists.length; i++) { 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) otrLists[i].parentNode.hidden = true; 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (clear) 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) otrLists[i].reset(); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return { 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExceptionsListItem: ExceptionsListItem, 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExceptionsAddRowListItem: ExceptionsAddRowListItem, 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExceptionsList: ExceptionsList, 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsExceptionsArea: ContentSettingsExceptionsArea, 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 675