15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This view displays controls for capturing network events. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var CaptureView = (function() { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'use strict'; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We inherit from DivView. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var superClass = DivView; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function CaptureView() { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertFirstConstructorCall(CaptureView); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call superclass's constructor. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) superClass.call(this, CaptureView.MAIN_BOX_ID); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var byteLoggingCheckbox = $(CaptureView.BYTE_LOGGING_CHECKBOX_ID); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) byteLoggingCheckbox.onclick = this.onSetByteLogging_.bind(this); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $(CaptureView.LIMIT_CHECKBOX_ID).onclick = this.onChangeLimit_.bind(this); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) $(CaptureView.STOP_BUTTON_ID).onclick = 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.onStopButtonClicked_.bind(this); 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) $(CaptureView.RESET_BUTTON_ID).onclick = 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.onResetButtonClicked_.bind(this); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (byteLoggingCheckbox.checked) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The code to display a warning on ExportView relies on bytelogging 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // being off by default. If this ever changes, the code will need to 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be updated. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throw 'Not expecting byte logging to be enabled!'; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new MouseOverHelp(CaptureView.LIMIT_HELP_ID, 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.LIMIT_HELP_HOVER_ID); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new MouseOverHelp(CaptureView.BYTE_LOGGING_HELP_ID, 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.BYTE_LOGGING_HELP_HOVER_ID); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.onChangeLimit_(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.TAB_ID = 'tab-handle-capture'; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.TAB_NAME = 'Capture'; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.TAB_HASH = '#capture'; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IDs for special HTML elements in capture_view.html 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CaptureView.MAIN_BOX_ID = 'capture-view-tab-content'; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CaptureView.BYTE_LOGGING_CHECKBOX_ID = 'capture-view-byte-logging-checkbox'; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CaptureView.LIMIT_CHECKBOX_ID = 'capture-view-limit-checkbox'; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.LIMIT_HELP_ID = 'capture-view-limit-help'; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.LIMIT_HELP_HOVER_ID = 'capture-view-limit-help-hover'; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.BYTE_LOGGING_HELP_ID = 'capture-view-byte-logging-help'; 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.BYTE_LOGGING_HELP_HOVER_ID = 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'capture-view-byte-logging-help-hover'; 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.STOP_BUTTON_ID = 'capture-view-stop-button'; 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CaptureView.RESET_BUTTON_ID = 'capture-view-reset-button'; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.addSingletonGetter(CaptureView); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CaptureView.prototype = { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inherit the superclass's methods. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: superClass.prototype, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when a log file is loaded, after clearing the old log entries and 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * loading the new ones. Returns false to indicate the view should 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * be hidden. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onLoadLogFinish: function(data) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Depending on the value of the checkbox, enables or disables logging of 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * actual bytes transferred. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onSetByteLogging_: function() { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var byteLoggingCheckbox = $(CaptureView.BYTE_LOGGING_CHECKBOX_ID); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (byteLoggingCheckbox.checked) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser.setLogLevel(LogLevelType.LOG_ALL); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Once we enable byte logging, all bets are off on what gets captured. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Have the export view warn that the "strip cookies" option is 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ineffective from this point on. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In theory we could clear this warning after unchecking the box and 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then deleting all the events which had been captured. We don't 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // currently do that; if you want the warning to go away, will need to 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reload. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExportView.getInstance().showPrivacyWarning(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser.setLogLevel(LogLevelType.LOG_ALL_BUT_BYTES); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onChangeLimit_: function() { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var limitCheckbox = $(CaptureView.LIMIT_CHECKBOX_ID); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Default to unlimited. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var softLimit = Infinity; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hardLimit = Infinity; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (limitCheckbox.checked) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The chosen limits are kind of arbitrary. I based it off the 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // following observation: 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A user-submitted log file which spanned a 7 hour time period 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // comprised 778,235 events and required 128MB of JSON. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // That feels too big. Assuming it was representative, then scaling 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by a factor of 4 should translate into a 32MB log file and cover 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // close to 2 hours of events, which feels better. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A large gap is left between the hardLimit and softLimit to avoid 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // resetting the events often. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hardLimit = 300000; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) softLimit = 150000; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventsTracker.getInstance().setLimits(softLimit, hardLimit); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onStopButtonClicked_: function() { 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MainView.getInstance().switchToViewOnlyMode(); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onResetButtonClicked_: function() { 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EventsTracker.getInstance().deleteAllLogEntries(); 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CaptureView; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 141