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