Home | History | Annotate | Download | only in front_end
      1 /*
      2  * Copyright (C) 2011 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 /**
     32  * @constructor
     33  */
     34 WebInspector.UserMetrics = function()
     35 {
     36     for (var actionName in WebInspector.UserMetrics._ActionCodes) {
     37         var actionCode = WebInspector.UserMetrics._ActionCodes[actionName];
     38         this[actionName] = new WebInspector.UserMetrics._Recorder(actionCode);
     39     }
     40 
     41     function settingChanged(trueCode, falseCode, event)
     42     {
     43         if (event.data)
     44             InspectorFrontendHost.recordSettingChanged(trueCode);
     45         else
     46             InspectorFrontendHost.recordSettingChanged(falseCode);
     47     }
     48 
     49     WebInspector.settings.domWordWrap.addChangeListener(settingChanged.bind(this, WebInspector.UserMetrics._SettingCodes.ElementsDOMWrapOn, WebInspector.UserMetrics._SettingCodes.ElementsDOMWrapOff));
     50     WebInspector.settings.monitoringXHREnabled.addChangeListener(settingChanged.bind(this, WebInspector.UserMetrics._SettingCodes.ConsoleMonitorXHROn, WebInspector.UserMetrics._SettingCodes.ConsoleMonitorXHROff));
     51     WebInspector.settings.preserveConsoleLog.addChangeListener(settingChanged.bind(this, WebInspector.UserMetrics._SettingCodes.ConsolePreserveLogOn, WebInspector.UserMetrics._SettingCodes.ConsolePreserveLogOff));
     52     WebInspector.settings.resourcesLargeRows.addChangeListener(settingChanged.bind(this, WebInspector.UserMetrics._SettingCodes.NetworkShowLargeRowsOn, WebInspector.UserMetrics._SettingCodes.NetworkShowLargeRowsOff));
     53 }
     54 
     55 // Codes below are used to collect UMA histograms in the Chromium port.
     56 // Do not change the values below, additional actions are needed on the Chromium side
     57 // in order to add more codes.
     58 
     59 WebInspector.UserMetrics._ActionCodes = {
     60     WindowDocked: 1,
     61     WindowUndocked: 2,
     62     ScriptsBreakpointSet: 3,
     63     TimelineStarted: 4,
     64     ProfilesCPUProfileTaken: 5,
     65     ProfilesHeapProfileTaken: 6,
     66     AuditsStarted: 7,
     67     ConsoleEvaluated: 8
     68 }
     69 
     70 WebInspector.UserMetrics._SettingCodes = {
     71     ElementsDOMWrapOn: 1,
     72     ElementsDOMWrapOff: 2,
     73     ConsoleMonitorXHROn: 3,
     74     ConsoleMonitorXHROff: 4,
     75     ConsolePreserveLogOn: 5,
     76     ConsolePreserveLogOff: 6,
     77     NetworkShowLargeRowsOn: 7,
     78     NetworkShowLargeRowsOff: 8
     79 }
     80 
     81 WebInspector.UserMetrics._PanelCodes = {
     82     elements: 1,
     83     resources: 2,
     84     network: 3,
     85     scripts: 4,
     86     timeline: 5,
     87     profiles: 6,
     88     audits: 7,
     89     console: 8
     90 }
     91 
     92 WebInspector.UserMetrics.UserAction = "UserAction";
     93 
     94 WebInspector.UserMetrics.UserActionNames = {
     95     ForcedElementState: "forcedElementState",
     96     FileSaved: "fileSaved",
     97     RevertRevision: "revertRevision",
     98     ApplyOriginalContent: "applyOriginalContent",
     99     TogglePrettyPrint: "togglePrettyPrint",
    100     SetBreakpoint: "setBreakpoint",
    101     OpenSourceLink: "openSourceLink",
    102     NetworkSort: "networkSort",
    103     NetworkRequestSelected: "networkRequestSelected",
    104     NetworkRequestTabSelected: "networkRequestTabSelected",
    105     HeapSnapshotFilterChanged: "heapSnapshotFilterChanged"
    106 };
    107 
    108 WebInspector.UserMetrics.prototype = {
    109     panelShown: function(panelName)
    110     {
    111         InspectorFrontendHost.recordPanelShown(WebInspector.UserMetrics._PanelCodes[panelName] || 0);
    112     }
    113 }
    114 
    115 /**
    116  * @constructor
    117  */
    118 WebInspector.UserMetrics._Recorder = function(actionCode)
    119 {
    120     this._actionCode = actionCode;
    121 }
    122 
    123 WebInspector.UserMetrics._Recorder.prototype = {
    124     record: function()
    125     {
    126         InspectorFrontendHost.recordActionTaken(this._actionCode);
    127     }
    128 }
    129 
    130 WebInspector.userMetrics = new WebInspector.UserMetrics();
    131