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