Home | History | Annotate | Download | only in options
      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       if (this.queryDelayTimerId_)
     92         window.clearTimeout(this.queryDelayTimerId_);
     93 
     94       this.queryDelayTimerId_ = window.setTimeout(
     95           this.searchCookie.bind(this), 500);
     96     },
     97 
     98     initialized_: false,
     99 
    100     /**
    101      * Handler for OptionsPage's visible property change event.
    102      * @param {Event} e Property change event.
    103      * @private
    104      */
    105     handleVisibleChange_: function(e) {
    106       if (!this.visible)
    107         return;
    108 
    109       chrome.send('reloadCookies');
    110 
    111       if (!this.initialized_) {
    112         this.initialized_ = true;
    113         this.searchCookie();
    114       } else {
    115         this.pageDiv.querySelector('.cookies-list').redraw();
    116       }
    117 
    118       this.pageDiv.querySelector('.cookies-search-box').focus();
    119     },
    120   };
    121 
    122   // CookiesViewHandler callbacks.
    123   CookiesView.onTreeItemAdded = function(args) {
    124     $('cookies-list').addByParentId(args[0], args[1], args[2]);
    125   };
    126 
    127   CookiesView.onTreeItemRemoved = function(args) {
    128     $('cookies-list').removeByParentId(args[0], args[1], args[2]);
    129   };
    130 
    131   CookiesView.loadChildren = function(args) {
    132     $('cookies-list').loadChildren(args[0], args[1]);
    133   };
    134 
    135   // Export
    136   return {
    137     CookiesView: CookiesView
    138   };
    139 
    140 });
    141