Chromium Code Reviews| Index: chrome/browser/resources/settings/web_ui_listener_behavior.js |
| diff --git a/chrome/browser/resources/settings/web_ui_listener_behavior.js b/chrome/browser/resources/settings/web_ui_listener_behavior.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b3c44cdafe4f8c9f5262d9b631fe9837b8c99a0d |
| --- /dev/null |
| +++ b/chrome/browser/resources/settings/web_ui_listener_behavior.js |
| @@ -0,0 +1,52 @@ |
| +// 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 Behavior to be used by Polymer elements that want to |
| + * automatically remove WebUI listeners when detached. |
| + * |
| + * TODO(dpapad): This file can be useful for any WebUI Polymer code, not just |
| + * for settings, consider moving elsewhere. |
| + */ |
| + |
| +cr.define('settings', function() { |
| + /** @polymerBehavior */ |
| + var WebUIListenerBehavior = { |
| + properties: { |
| + /** |
| + * Holds WebUI listeners that need to be removed when this element is |
| + * destroyed. |
| + * @private {!Array<!WebUIListener>} |
| + */ |
| + webUIListeners_: { |
| + type: Array, |
| + value: function() { return []; }, |
| + }, |
| + }, |
| + |
| + /** |
| + * Adds a WebUI listener and registers it for automatic removal when this |
| + * element is detached. |
| + * Note: Do not use this method if you intend to remove this listener |
| + * manually (use cr.addWebUIListener directly instead). |
| + * |
| + * @param {string} eventName The event to listen to. |
| + * @param {!Function} callback The callback run when the event is fired. |
| + */ |
| + addWebUIListener: function(eventName, callback) { |
| + this.webUIListeners_.push(cr.addWebUIListener(eventName, callback)); |
| + }, |
| + |
| + /** @override */ |
| + detached: function() { |
|
Dan Beam
2016/02/23 02:38:28
it may make more sense for this to be named remove
Dan Beam
2016/02/23 02:51:07
for those that want this behavior*
|
| + while (this.webUIListeners_.length > 0) { |
| + cr.removeWebUIListener(this.webUIListeners_.pop()); |
| + } |
| + }, |
| + }; |
| + |
| + return { |
| + WebUIListenerBehavior: WebUIListenerBehavior, |
| + }; |
| +}); |