1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 cr.define('options', function() { 6 7 var OptionsPage = options.OptionsPage; 8 9 ///////////////////////////////////////////////////////////////////////////// 10 // CookiesView class: 11 12 /** 13 * Encapsulated handling of the cookies and other site data page. 14 * @constructor 15 */ 16 function CookiesView(model) { 17 OptionsPage.call(this, 'cookies', 18 loadTimeData.getString('cookiesViewPageTabTitle'), 19 'cookies-view-page'); 20 } 21 22 cr.addSingletonGetter(CookiesView); 23 24 CookiesView.prototype = { 25 __proto__: OptionsPage.prototype, 26 27 /** 28 * The timer id of the timer set on search query change events. 29 * @type {number} 30 * @private 31 */ 32 queryDelayTimerId_: 0, 33 34 /** 35 * The most recent search query, empty string if the query is empty. 36 * @type {string} 37 * @private 38 */ 39 lastQuery_: '', 40 41 initializePage: function() { 42 OptionsPage.prototype.initializePage.call(this); 43 44 var searchBox = this.pageDiv.querySelector('.cookies-search-box'); 45 searchBox.addEventListener( 46 'search', this.handleSearchQueryChange_.bind(this)); 47 searchBox.onkeydown = function(e) { 48 // Prevent the overlay from handling this event. 49 if (e.keyIdentifier == 'Enter') 50 e.stopPropagation(); 51 }; 52 53 this.pageDiv.querySelector('.remove-all-cookies-button').onclick = 54 function(e) { 55 chrome.send('removeAllCookies'); 56 }; 57 58 var cookiesList = this.pageDiv.querySelector('.cookies-list'); 59 options.CookiesList.decorate(cookiesList); 60 61 this.addEventListener('visibleChange', this.handleVisibleChange_); 62 63 this.pageDiv.querySelector('.cookies-view-overlay-confirm').onclick = 64 OptionsPage.closeOverlay.bind(OptionsPage); 65 }, 66 67 /** @override */ 68 didShowPage: function() { 69 this.pageDiv.querySelector('.cookies-search-box').value = ''; 70 this.lastQuery_ = ''; 71 }, 72 73 /** 74 * Search cookie using text in |cookies-search-box|. 75 */ 76 searchCookie: function() { 77 this.queryDelayTimerId_ = 0; 78 var filter = this.pageDiv.querySelector('.cookies-search-box').value; 79 if (this.lastQuery_ != filter) { 80 this.lastQuery_ = filter; 81 chrome.send('updateCookieSearchResults', [filter]); 82 } 83 }, 84 85 /** 86 * Handles search query changes. 87 * @param {!Event} e The event object. 88 * @private 89 */ 90 handleSearchQueryChange_: function(e) { 91 var stringId = document.querySelector('.cookies-search-box').value ? 92 'remove_all_shown_cookie' : 'remove_all_cookie'; 93 document.querySelector('.remove-all-cookies-button').innerHTML = 94 loadTimeData.getString(stringId); 95 if (this.queryDelayTimerId_) 96 window.clearTimeout(this.queryDelayTimerId_); 97 98 this.queryDelayTimerId_ = window.setTimeout( 99 this.searchCookie.bind(this), 500); 100 }, 101 102 initialized_: false, 103 104 /** 105 * Handler for OptionsPage's visible property change event. 106 * @param {Event} e Property change event. 107 * @private 108 */ 109 handleVisibleChange_: function(e) { 110 if (!this.visible) 111 return; 112 113 chrome.send('reloadCookies'); 114 115 if (!this.initialized_) { 116 this.initialized_ = true; 117 this.searchCookie(); 118 } else { 119 this.pageDiv.querySelector('.cookies-list').redraw(); 120 } 121 122 this.pageDiv.querySelector('.cookies-search-box').focus(); 123 }, 124 }; 125 126 // CookiesViewHandler callbacks. 127 CookiesView.onTreeItemAdded = function(args) { 128 $('cookies-list').addByParentId(args[0], args[1], args[2]); 129 }; 130 131 CookiesView.onTreeItemRemoved = function(args) { 132 $('cookies-list').removeByParentId(args[0], args[1], args[2]); 133 }; 134 135 CookiesView.loadChildren = function(args) { 136 $('cookies-list').loadChildren(args[0], args[1]); 137 }; 138 139 // Export 140 return { 141 CookiesView: CookiesView 142 }; 143 144 }); 145