blob: 59d1ac63ff905120514d2535913b9842a8a94daa [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview
* 'add-site-dialog' provides a dialog to add exceptions for a given Content
* Settings category.
*/
Polymer({
is: 'add-site-dialog',
behaviors: [SiteSettingsBehavior, WebUIListenerBehavior],
properties: {
/**
* What kind of setting, e.g. Location, Camera, Cookies, and so on.
* @type {settings.ContentSettingsTypes}
*/
category: String,
/**
* Whether this is about an Allow, Block, SessionOnly, or other.
* @type {settings.PermissionValues}
*/
contentSetting: String,
/**
* The site to add an exception for.
* @private
*/
site_: String,
},
/** @override */
attached: function() {
assert(this.category);
assert(this.contentSetting);
},
/**
* Opens the dialog.
* @param {string} type Whether this was launched from an Allow list or a
* Block list.
*/
open: function(type) {
this.addWebUIListener('onIncognitoStatusChanged',
this.onIncognitoStatusChanged_.bind(this));
this.browserProxy.updateIncognitoStatus();
this.$.dialog.showModal();
},
/**
* Validates that the pattern entered is valid.
* @private
*/
validate_: function() {
this.browserProxy.isPatternValid(this.site_).then(function(isValid) {
this.$.add.disabled = !isValid;
}.bind(this));
},
/** @private */
onCancelTap_: function() {
this.$.dialog.cancel();
},
/**
* A handler for when we get notified of the current profile creating or
* destroying their incognito counterpart.
* @param {boolean} incognitoEnabled Whether the current profile has an
* incognito profile.
* @private
*/
onIncognitoStatusChanged_: function(incognitoEnabled) {
this.$.incognito.disabled = !incognitoEnabled;
if (!incognitoEnabled)
this.$.incognito.checked = false;
},
/**
* The tap handler for the Add [Site] button (adds the pattern and closes
* the dialog).
* @private
*/
onSubmit_: function() {
if (this.$.add.disabled)
return; // Can happen when Enter is pressed.
this.browserProxy.setCategoryPermissionForOrigin(
this.site_, this.site_, this.category, this.contentSetting,
this.$.incognito.checked);
this.$.dialog.close();
},
});