Home | History | Annotate | Download | only in net_internals
      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 /**
      6  * This view displays controls for capturing network events.
      7  */
      8 var CaptureView = (function() {
      9   'use strict';
     10 
     11   // We inherit from DivView.
     12   var superClass = DivView;
     13 
     14   /**
     15    * @constructor
     16    */
     17   function CaptureView() {
     18     assertFirstConstructorCall(CaptureView);
     19 
     20     // Call superclass's constructor.
     21     superClass.call(this, CaptureView.MAIN_BOX_ID);
     22 
     23     var byteLoggingCheckbox = $(CaptureView.BYTE_LOGGING_CHECKBOX_ID);
     24     byteLoggingCheckbox.onclick = this.onSetByteLogging_.bind(this);
     25 
     26     $(CaptureView.LIMIT_CHECKBOX_ID).onclick = this.onChangeLimit_.bind(this);
     27 
     28     $(CaptureView.STOP_BUTTON_ID).onclick =
     29         this.onStopButtonClicked_.bind(this);
     30     $(CaptureView.RESET_BUTTON_ID).onclick =
     31         this.onResetButtonClicked_.bind(this);
     32 
     33     if (byteLoggingCheckbox.checked) {
     34       // The code to display a warning on ExportView relies on bytelogging
     35       // being off by default. If this ever changes, the code will need to
     36       // be updated.
     37       throw 'Not expecting byte logging to be enabled!';
     38     }
     39 
     40     new MouseOverHelp(CaptureView.LIMIT_HELP_ID,
     41                       CaptureView.LIMIT_HELP_HOVER_ID);
     42 
     43     new MouseOverHelp(CaptureView.BYTE_LOGGING_HELP_ID,
     44                       CaptureView.BYTE_LOGGING_HELP_HOVER_ID);
     45 
     46     this.onChangeLimit_();
     47   }
     48 
     49   CaptureView.TAB_ID = 'tab-handle-capture';
     50   CaptureView.TAB_NAME = 'Capture';
     51   CaptureView.TAB_HASH = '#capture';
     52 
     53   // IDs for special HTML elements in capture_view.html
     54   CaptureView.MAIN_BOX_ID = 'capture-view-tab-content';
     55   CaptureView.BYTE_LOGGING_CHECKBOX_ID = 'capture-view-byte-logging-checkbox';
     56   CaptureView.LIMIT_CHECKBOX_ID = 'capture-view-limit-checkbox';
     57   CaptureView.LIMIT_HELP_ID = 'capture-view-limit-help';
     58   CaptureView.LIMIT_HELP_HOVER_ID = 'capture-view-limit-help-hover';
     59   CaptureView.BYTE_LOGGING_HELP_ID = 'capture-view-byte-logging-help';
     60   CaptureView.BYTE_LOGGING_HELP_HOVER_ID =
     61       'capture-view-byte-logging-help-hover';
     62   CaptureView.STOP_BUTTON_ID = 'capture-view-stop-button';
     63   CaptureView.RESET_BUTTON_ID = 'capture-view-reset-button';
     64 
     65   cr.addSingletonGetter(CaptureView);
     66 
     67   CaptureView.prototype = {
     68     // Inherit the superclass's methods.
     69     __proto__: superClass.prototype,
     70 
     71     /**
     72      * Called when a log file is loaded, after clearing the old log entries and
     73      * loading the new ones.  Returns false to indicate the view should
     74      * be hidden.
     75      */
     76     onLoadLogFinish: function(data) {
     77       return false;
     78     },
     79 
     80     /**
     81      * Depending on the value of the checkbox, enables or disables logging of
     82      * actual bytes transferred.
     83      */
     84     onSetByteLogging_: function() {
     85       var byteLoggingCheckbox = $(CaptureView.BYTE_LOGGING_CHECKBOX_ID);
     86 
     87       if (byteLoggingCheckbox.checked) {
     88         g_browser.setLogLevel(LogLevelType.LOG_ALL);
     89 
     90         // Once we enable byte logging, all bets are off on what gets captured.
     91         // Have the export view warn that the "strip cookies" option is
     92         // ineffective from this point on.
     93         //
     94         // In theory we could clear this warning after unchecking the box and
     95         // then deleting all the events which had been captured. We don't
     96         // currently do that; if you want the warning to go away, will need to
     97         // reload.
     98         ExportView.getInstance().showPrivacyWarning();
     99       } else {
    100         g_browser.setLogLevel(LogLevelType.LOG_ALL_BUT_BYTES);
    101       }
    102     },
    103 
    104     onChangeLimit_: function() {
    105       var limitCheckbox = $(CaptureView.LIMIT_CHECKBOX_ID);
    106 
    107       // Default to unlimited.
    108       var softLimit = Infinity;
    109       var hardLimit = Infinity;
    110 
    111       if (limitCheckbox.checked) {
    112         // The chosen limits are kind of arbitrary. I based it off the
    113         // following observation:
    114         //   A user-submitted log file which spanned a 7 hour time period
    115         //   comprised 778,235 events and required 128MB of JSON.
    116         //
    117         // That feels too big. Assuming it was representative, then scaling
    118         // by a factor of 4 should translate into a 32MB log file and cover
    119         // close to 2 hours of events, which feels better.
    120         //
    121         // A large gap is left between the hardLimit and softLimit to avoid
    122         // resetting the events often.
    123         hardLimit = 300000;
    124         softLimit = 150000;
    125       }
    126 
    127       EventsTracker.getInstance().setLimits(softLimit, hardLimit);
    128     },
    129 
    130     onStopButtonClicked_: function() {
    131       MainView.getInstance().switchToViewOnlyMode();
    132     },
    133 
    134     onResetButtonClicked_: function() {
    135       EventsTracker.getInstance().deleteAllLogEntries();
    136     },
    137   };
    138 
    139   return CaptureView;
    140 })();
    141