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)
10723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      if (this.contentType != 'zoomlevels') {
10823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        this.addEditField(select, this.settingLabel);
10923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        this.contentElement.appendChild(select);
11023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      select.className = 'exception-setting';
112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      select.setAttribute('aria-labelledby', 'exception-behavior-column');
113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.pattern)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        select.setAttribute('displaymode', 'edit');
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (this.contentType == 'media-stream') {
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        this.settingLabel.classList.add('media-audio-setting');
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        var videoSettingLabel = cr.doc.createElement('span');
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        videoSettingLabel.textContent = this.videoSettingForDisplay();
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        videoSettingLabel.className = 'exception-setting';
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        videoSettingLabel.classList.add('media-video-setting');
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        videoSettingLabel.setAttribute('displaymode', 'static');
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        this.contentElement.appendChild(videoSettingLabel);
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      if (this.contentType == 'zoomlevels') {
12923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        this.deletable = true;
13023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        this.editable = false;
13123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
13223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        var zoomLabel = cr.doc.createElement('span');
13323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        zoomLabel.textContent = this.dataItem.zoom;
13423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        zoomLabel.className = 'exception-setting';
13523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        zoomLabel.setAttribute('displaymode', 'static');
13623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        zoomLabel.setAttribute('aria-labelledby', 'exception-zoom-column');
13723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        this.contentElement.appendChild(zoomLabel);
13823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        this.zoomLabel = zoomLabel;
13923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      }
14023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Used to track whether the URL pattern in the input is valid.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // This will be true if the browser process has informed us that the
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // current text in the input is valid. Changing the text resets this to
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // false, and getting a response from the browser sets it back to true.
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // It starts off as false for empty string (new exceptions) or true for
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // already-existing exceptions (which we assume are valid).
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.inputValidityKnown = this.pattern;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // This one tracks the actual validity of the pattern in the input. This
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // starts off as true so as not to annoy the user when he adds a new and
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // empty input.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.inputIsValid = true;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.input = input;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.select = select;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.updateEditables();
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Editing notifications, geolocation and media-stream is disabled for
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // now.
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.contentType == 'notifications' ||
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.contentType == 'location' ||
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.contentType == 'media-stream') {
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.editable = false;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // If the source of the content setting exception is not a user
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // preference, that source controls the exception and the user cannot edit
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // or delete it.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var controlledBy =
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.dataItem.source && this.dataItem.source != 'preference' ?
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              this.dataItem.source : null;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (controlledBy) {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.setAttribute('controlled-by', controlledBy);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.deletable = false;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.editable = false;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (controlledBy == 'policy' || controlledBy == 'extension') {
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.querySelector('.row-delete-button').hidden = true;
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        var indicator = new ControlledSettingIndicator();
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        indicator.setAttribute('content-exception', this.contentType);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Create a synthetic pref change event decorated as
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // CoreOptionsHandler::CreateValueForPref() does.
1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        var event = new Event(this.contentType);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        event.value = { controlledBy: controlledBy };
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        indicator.handlePrefChange(event);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.appendChild(indicator);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // If the exception comes from a hosted app, display the name and the
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // icon of the app.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (controlledBy == 'HostedApp') {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.title =
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            loadTimeData.getString('set_by') + ' ' + this.dataItem.appName;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var button = this.querySelector('.row-delete-button');
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Use the host app's favicon (16px, match bigger size).
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // See c/b/ui/webui/extensions/extension_icon_source.h
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // for a description of the chrome://extension-icon URL.
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        button.style.backgroundImage =
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            'url(\'chrome://extension-icon/' + this.dataItem.appId + '/16/1\')';
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var listItem = this;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Handle events on the editable nodes.
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      input.oninput = function(event) {
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        listItem.inputValidityKnown = false;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        chrome.send('checkExceptionPatternValidity',
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    [listItem.contentType, listItem.mode, input.value]);
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      };
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Listen for edit events.
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.addEventListener('canceledit', this.onEditCancelled_);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.addEventListener('commitedit', this.onEditCommitted_);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    isEmbeddingRule: function() {
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.dataItem.embeddingOrigin &&
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.dataItem.embeddingOrigin !== this.dataItem.origin;
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * The pattern (e.g., a URL) for the exception.
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @type {string}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    get pattern() {
2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (!this.isEmbeddingRule())
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return this.dataItem.origin;
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      return loadTimeData.getStringF('embeddedOnHost',
2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                     this.dataItem.embeddingOrigin);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    set pattern(pattern) {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!this.editable)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        console.error('Tried to change uneditable pattern');
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.dataItem.displayPattern = pattern;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * The setting (allow/block) for the exception.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @type {string}
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    get setting() {
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.dataItem.setting;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    set setting(setting) {
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.dataItem.setting = setting;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Gets a human-readable setting string.
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @return {string} The display string.
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    settingForDisplay: function() {
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return this.getDisplayStringForSetting(this.setting);
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    },
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * media video specific function.
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * Gets a human-readable video setting string.
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     *
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @return {string} The display string.
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    videoSettingForDisplay: function() {
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return this.getDisplayStringForSetting(this.dataItem.video);
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    },
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * Gets a human-readable display string for setting.
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     *
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @param {string} setting The setting to be displayed.
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @return {string} The display string.
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    getDisplayStringForSetting: function(setting) {
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (setting == 'allow')
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return loadTimeData.getString('allowException');
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else if (setting == 'block')
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return loadTimeData.getString('blockException');
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else if (setting == 'ask')
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return loadTimeData.getString('askException');
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else if (setting == 'session')
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return loadTimeData.getString('sessionException');
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else if (setting == 'default')
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return '';
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      console.error('Unknown setting: [' + setting + ']');
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return '';
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Update this list item to reflect whether the input is a valid pattern.
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {boolean} valid Whether said pattern is valid in the context of a
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *     content exception setting.
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setPatternValid: function(valid) {
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (valid || !this.input.value)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.input.setCustomValidity('');
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.input.setCustomValidity(' ');
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.inputIsValid = valid;
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.inputValidityKnown = true;
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Set the <input> to its original contents. Used when the user quits
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * editing.
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    resetInput: function() {
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.input.value = this.pattern;
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Copy the data model values to the editable nodes.
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateEditables: function() {
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.resetInput();
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var settingOption =
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.select.querySelector('[value=\'' + this.setting + '\']');
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (settingOption)
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        settingOption.selected = true;
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /** @override */
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    get currentInputIsValid() {
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.inputValidityKnown && this.inputIsValid;
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /** @override */
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    get hasBeenEdited() {
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var livePattern = this.input.value;
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var liveSetting = this.select.value;
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return livePattern != this.pattern || liveSetting != this.setting;
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called when committing an edit.
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {Event} e The end event.
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onEditCommitted_: function(e) {
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var newPattern = this.input.value;
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var newSetting = this.select.value;
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.finishEdit(newPattern, newSetting);
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called when cancelling an edit; resets the control states.
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {Event} e The cancel event.
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    onEditCancelled_: function(e) {
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.updateEditables();
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setPatternValid(true);
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Editing is complete; update the model.
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {string} newPattern The pattern that the user entered.
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {string} newSetting The setting the user chose.
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    finishEdit: function(newPattern, newSetting) {
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.patternLabel.textContent = newPattern;
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.settingLabel.textContent = this.settingForDisplay();
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var oldPattern = this.pattern;
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.pattern = newPattern;
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setting = newSetting;
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // TODO(estade): this will need to be updated if geolocation/notifications
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // become editable.
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (oldPattern != newPattern) {
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        chrome.send('removeException',
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    [this.contentType, this.mode, oldPattern]);
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome.send('setException',
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  [this.contentType, this.mode, newPattern, newSetting]);
3877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    },
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Creates a new list item for the Add New Item row, which doesn't represent
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * an actual entry in the exceptions list but allows the user to add new
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * exceptions.
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {string} contentType The type of the list.
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {string} mode The browser mode, 'otr' or 'normal'.
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {boolean} enableAskOption Whether to show an 'ask every time' option
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *     in the select.
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci   * @extends {options.contentSettings.ExceptionsListItem}
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function ExceptionsAddRowListItem(contentType, mode, enableAskOption) {
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var el = cr.doc.createElement('div');
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    el.mode = mode;
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    el.contentType = contentType;
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    el.enableAskOption = enableAskOption;
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    el.dataItem = [];
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    el.__proto__ = ExceptionsAddRowListItem.prototype;
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    el.decorate();
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return el;
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExceptionsAddRowListItem.prototype = {
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    __proto__: ExceptionsListItem.prototype,
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    decorate: function() {
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ExceptionsListItem.prototype.decorate.call(this);
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.input.placeholder =
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          loadTimeData.getString('addNewExceptionInstructions');
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Do we always want a default of allow?
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setting = 'allow';
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Clear the <input> and let the placeholder text show again.
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    resetInput: function() {
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.input.value = '';
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /** @override */
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    get hasBeenEdited() {
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.input.value != '';
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Editing is complete; update the model. As long as the pattern isn't
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * empty, we'll just add it.
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {string} newPattern The pattern that the user entered.
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {string} newSetting The setting the user chose.
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    finishEdit: function(newPattern, newSetting) {
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.resetInput();
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome.send('setException',
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  [this.contentType, this.mode, newPattern, newSetting]);
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Creates a new exceptions list.
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci   * @extends {options.InlineEditableItemList}
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var ExceptionsList = cr.ui.define('list');
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExceptionsList.prototype = {
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    __proto__: InlineEditableItemList.prototype,
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called when an element is decorated as a list.
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    decorate: function() {
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      InlineEditableItemList.prototype.decorate.call(this);
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.classList.add('settings-list');
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var parentNode = this.parentNode; parentNode;
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           parentNode = parentNode.parentNode) {
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (parentNode.hasAttribute('contentType')) {
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.contentType = parentNode.getAttribute('contentType');
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          break;
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.mode = this.getAttribute('mode');
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Whether the exceptions in this list allow an 'Ask every time' option.
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.enableAskOption = this.contentType == 'plugins';
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.autoExpands = true;
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.reset();
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Creates an item to go in the list.
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {Object} entry The element from the data model for this row.
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    createItem: function(entry) {
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (entry) {
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return new ExceptionsListItem(this.contentType,
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      this.mode,
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      this.enableAskOption,
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      entry);
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var addRowItem = new ExceptionsAddRowListItem(this.contentType,
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                      this.mode,
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                      this.enableAskOption);
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        addRowItem.deletable = false;
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return addRowItem;
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Sets the exceptions in the js model.
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {Object} entries A list of dictionaries of values, each dictionary
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *     represents an exception.
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setExceptions: function(entries) {
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var deleteCount = this.dataModel.length;
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.isEditable()) {
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // We don't want to remove the Add New Exception row.
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        deleteCount = deleteCount - 1;
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var args = [0, deleteCount];
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      args.push.apply(args, entries);
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.dataModel.splice.apply(this.dataModel, args);
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * The browser has finished checking a pattern for validity. Update the list
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * item to reflect this.
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {string} pattern The pattern.
5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci     * @param {boolean} valid Whether said pattern is valid in the context of a
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *     content exception setting.
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    patternValidityCheckComplete: function(pattern, valid) {
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var listItems = this.items;
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < listItems.length; i++) {
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var listItem = listItems[i];
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Don't do anything for messages for the item if it is not the intended
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // recipient, or if the response is stale (i.e. the input value has
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // changed since we sent the request to analyze it).
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (pattern == listItem.input.value)
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          listItem.setPatternValid(valid);
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Returns whether the rows are editable in this list.
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    isEditable: function() {
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Exceptions of the following lists are not editable for now.
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return !(this.contentType == 'notifications' ||
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               this.contentType == 'location' ||
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               this.contentType == 'fullscreen' ||
55623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)               this.contentType == 'media-stream' ||
55723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)               this.contentType == 'zoomlevels');
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Removes all exceptions from the js model.
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    reset: function() {
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.isEditable()) {
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // The null creates the Add New Exception row.
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.dataModel = new ArrayDataModel([null]);
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.dataModel = new ArrayDataModel([]);
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /** @override */
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    deleteItemAtIndex: function(index) {
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var listItem = this.getListItemByIndex(index);
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!listItem.deletable)
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return;
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var dataItem = listItem.dataItem;
5791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      chrome.send('removeException', [listItem.contentType,
5801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                      listItem.mode,
5811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                      dataItem.origin,
5821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                      dataItem.embeddingOrigin]);
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  var Page = cr.ui.pageManager.Page;
5875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  var PageManager = cr.ui.pageManager.PageManager;
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Encapsulated handling of content settings list subpage.
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci   * @extends {cr.ui.pageManager.Page}
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function ContentSettingsExceptionsArea() {
5965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    Page.call(this, 'contentExceptions',
5975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              loadTimeData.getString('contentSettingsPageTabTitle'),
5985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              'content-settings-exceptions-area');
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cr.addSingletonGetter(ContentSettingsExceptionsArea);
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingsExceptionsArea.prototype = {
6045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    __proto__: Page.prototype,
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /** @override */
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    initializePage: function() {
6085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      Page.prototype.initializePage.call(this);
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var exceptionsLists = this.pageDiv.querySelectorAll('list');
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < exceptionsLists.length; i++) {
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        options.contentSettings.ExceptionsList.decorate(exceptionsLists[i]);
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ContentSettingsExceptionsArea.hideOTRLists(false);
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // If the user types in the URL without a hash, show just cookies.
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.showList('cookies');
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      $('content-settings-exceptions-overlay-confirm').onclick =
6215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          PageManager.closeOverlay.bind(PageManager);
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Shows one list and hides all others.
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {string} type The content type.
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    showList: function(type) {
630cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      // Update the title for the type that was shown.
631cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      this.title = loadTimeData.getString(type + 'TabTitle');
632cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var header = this.pageDiv.querySelector('h1');
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      header.textContent = loadTimeData.getString(type + '_header');
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var divs = this.pageDiv.querySelectorAll('div[contentType]');
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < divs.length; i++) {
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (divs[i].getAttribute('contentType') == type)
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          divs[i].hidden = false;
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        else
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          divs[i].hidden = true;
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      var mediaHeader = this.pageDiv.querySelector('.media-header');
6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      mediaHeader.hidden = type != 'media-stream';
64623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
64723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      $('exception-behavior-column').hidden = type == 'zoomlevels';
64823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      $('exception-zoom-column').hidden = type != 'zoomlevels';
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called after the page has been shown. Show the content type for the
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * location's hash.
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    didShowPage: function() {
6561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (this.hash)
6571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        this.showList(this.hash.slice(1));
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Called when the last incognito window is closed.
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingsExceptionsArea.OTRProfileDestroyed = function() {
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.hideOTRLists(true);
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Hides the incognito exceptions lists and optionally clears them as well.
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {boolean} clear Whether to clear the lists.
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContentSettingsExceptionsArea.hideOTRLists = function(clear) {
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var otrLists = document.querySelectorAll('list[mode=otr]');
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (var i = 0; i < otrLists.length; i++) {
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      otrLists[i].parentNode.hidden = true;
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (clear)
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        otrLists[i].reset();
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return {
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExceptionsListItem: ExceptionsListItem,
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExceptionsAddRowListItem: ExceptionsAddRowListItem,
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExceptionsList: ExceptionsList,
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentSettingsExceptionsArea: ContentSettingsExceptionsArea,
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)});
689