 Chromium Code Reviews
 Chromium Code Reviews Issue 2131953002:
  Site Settings Desktop: Implement protocol handler section.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 2131953002:
  Site Settings Desktop: Implement protocol handler section.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| Index: chrome/browser/resources/settings/site_settings/protocol_handlers.js | 
| diff --git a/chrome/browser/resources/settings/site_settings/protocol_handlers.js b/chrome/browser/resources/settings/site_settings/protocol_handlers.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..ef85eb5ce2c4cccbd47d627ac448ab8712b84a82 | 
| --- /dev/null | 
| +++ b/chrome/browser/resources/settings/site_settings/protocol_handlers.js | 
| @@ -0,0 +1,139 @@ | 
| +// 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 | 
| + * 'protocol-handlers' is the polymer element for showing the | 
| + * protocol handlers category under Site Settings. | 
| + */ | 
| + | 
| +var MenuActions = { | 
| + SET_DEFAULT: 'SetDefault', | 
| + REMOVE: 'Remove', | 
| +}; | 
| + | 
| +/** | 
| + * @typedef {{host: string, | 
| + * protocol: string, | 
| + * spec: string}} | 
| + */ | 
| +var HandlerEntry; | 
| + | 
| +/** | 
| + * @typedef {{default_handler: number, | 
| + * handlers: !Array<!HandlerEntry>, | 
| + * has_policy_recommendations: boolean, | 
| + * is_default_handler_set_by_user: boolean, | 
| + * protocol: string}} | 
| + */ | 
| +var ProtocolEntry; | 
| + | 
| +Polymer({ | 
| + is: 'protocol-handlers', | 
| + | 
| + behaviors: [SiteSettingsBehavior, WebUIListenerBehavior], | 
| + | 
| + properties: { | 
| + /** | 
| + * Represents the state of the main toggle shown for the category. | 
| + */ | 
| + categoryEnabled: Boolean, | 
| + | 
| + /** | 
| + * Array of protocols and their handlers. | 
| + * @type {!Array<!ProtocolEntry>} | 
| + */ | 
| + protocols: Array, | 
| + | 
| + /** | 
| + * The possible menu actions. | 
| + * @type {MenuActions} | 
| + */ | 
| + menuActions_: Object, | 
| 
michaelpg
2016/07/10 17:54:43
let's do: {
  type: Object,
  value: MenuActions,
 | 
| + }, | 
| + | 
| + ready: function() { | 
| + this.addWebUIListener('setHandlersEnabled', | 
| + this.setHandlersEnabled_.bind(this)); | 
| + this.addWebUIListener('setProtocolHandlers', | 
| + this.setProtocolHandlers_.bind(this)); | 
| + this.addWebUIListener('setIgnoredProtocolHandlers', | 
| + this.setIgnoredProtocolHandlers_.bind(this)); | 
| + this.browserProxy.initializeProtocolHandlerList(); | 
| + this.menuActions_ = MenuActions; | 
| + }, | 
| + | 
| + /** | 
| + * Obtains the description for the main toggle. | 
| + * @param {number} categoryEnabled Whether the main toggle is enabled. | 
| + * @return {string} The description to use. | 
| + * @private | 
| + */ | 
| + computeHandlersDescription_: function(categoryEnabled) { | 
| + return this.computeCategoryDesc( | 
| + settings.ContentSettingsTypes.PROTOCOL_HANDLERS, categoryEnabled, true); | 
| + }, | 
| + | 
| + /** | 
| + * Returns whether the given index matches the default handler. | 
| + * @param {number} index The index to evaluate. | 
| + * @param {number} defaultHandler The default handler index. | 
| + * @return {boolean} Whether the item is default. | 
| + * @private | 
| + */ | 
| + isDefault_: function(index, defaultHandler) { | 
| + return defaultHandler == index; | 
| + }, | 
| + | 
| + /** | 
| + * Updates the main toggle to set it enabled/disabled. | 
| + * @param {boolean} enabled The state to set. | 
| + * @private | 
| + */ | 
| + setHandlersEnabled_: function(enabled) { | 
| + this.categoryEnabled = enabled; | 
| + }, | 
| + | 
| + /** | 
| + * Updates the list of protocol handlers. | 
| + * @param {!Array<!ProtocolEntry>} protocols The new protocol handler list. | 
| + * @private | 
| + */ | 
| + setProtocolHandlers_: function(protocols) { | 
| + this.protocols = protocols; | 
| + }, | 
| + | 
| + /** | 
| + * Updates the list of ignored protocol handlers. | 
| + * @param {!Array<!ProtocolEntry>} args The new (ignored) protocol handler | 
| + * list. | 
| + * @private | 
| + */ | 
| + setIgnoredProtocolHandlers_: function(args) { | 
| + // TODO(finnur): Figure this out. Have yet to be able to trigger the C++ | 
| + // side to send this. | 
| + }, | 
| + | 
| + /** | 
| + * A handler when the toggle is flipped. | 
| + * @private | 
| + */ | 
| + onToggleChange_: function(event) { | 
| + this.browserProxy.setProtocolHandlerDefault(this.categoryEnabled); | 
| + }, | 
| + | 
| + /** | 
| + * A handler when an action is selected in the action menu. | 
| + * @private | 
| + */ | 
| + onActionMenuIronActivate_: function(event) { | 
| + var protocol = event.model.item.protocol; | 
| + var url = event.model.item.spec; | 
| + if (event.detail.selected == MenuActions.SET_DEFAULT) { | 
| + this.browserProxy.setProtocolDefault(protocol, url); | 
| + } else if (event.detail.selected == MenuActions.REMOVE) { | 
| + this.browserProxy.removeProtocolHandler(protocol, url); | 
| + } | 
| + }, | 
| +}); |