master 79e01c049286 cached
542 files
6.4 MB
1.7M tokens
2109 symbols
1 requests
Download .txt
Showing preview only (6,798K chars total). Download the full file or copy to clipboard to get everything.
Repository: node-inspector/node-inspector
Branch: master
Commit: 79e01c049286
Files: 542
Total size: 6.4 MB

Directory structure:
gitextract_u55b8pyf/

├── .gitattributes
├── .gitignore
├── .jshintignore
├── .jshintrc
├── .npmignore
├── .travis.yml
├── CONTRIBUTING.md
├── ChangeLog.md
├── LICENSE
├── MAINTAINERS.md
├── README.md
├── bin/
│   ├── inspector.js
│   ├── node-debug.js
│   └── run-repl.js
├── docs/
│   └── embedding.md
├── front-end/
│   ├── Images/
│   │   └── src/
│   │       ├── optimize_png.hashes
│   │       └── svg2png.hashes
│   ├── OWNERS
│   ├── Runtime.js
│   ├── UglifyJS/
│   │   └── parse-js.js
│   ├── audits/
│   │   ├── AuditCategories.js
│   │   ├── AuditCategory.js
│   │   ├── AuditController.js
│   │   ├── AuditExtensionCategory.js
│   │   ├── AuditFormatters.js
│   │   ├── AuditLauncherView.js
│   │   ├── AuditResultView.js
│   │   ├── AuditRules.js
│   │   ├── AuditsPanel.js
│   │   ├── auditsPanel.css
│   │   └── module.json
│   ├── bindings/
│   │   ├── BreakpointManager.js
│   │   ├── CSSWorkspaceBinding.js
│   │   ├── CompilerScriptMapping.js
│   │   ├── ContentProviderBasedProjectDelegate.js
│   │   ├── ContentScriptProjectDecorator.js
│   │   ├── DebuggerWorkspaceBinding.js
│   │   ├── DefaultScriptMapping.js
│   │   ├── FileUtils.js
│   │   ├── Linkifier.js
│   │   ├── LiveLocation.js
│   │   ├── NetworkUISourceCodeProvider.js
│   │   ├── NetworkWorkspaceBinding.js
│   │   ├── PresentationConsoleMessageHelper.js
│   │   ├── ResourceScriptMapping.js
│   │   ├── ResourceUtils.js
│   │   ├── SASSSourceMapping.js
│   │   ├── ScriptSnippetModel.js
│   │   ├── StylesSourceMapping.js
│   │   ├── TempFile.js
│   │   ├── WorkspaceController.js
│   │   └── module.json
│   ├── cm/
│   │   ├── LICENSE
│   │   ├── LICENSE_python
│   │   ├── PRESUBMIT.py
│   │   ├── clike.js
│   │   ├── closebrackets.js
│   │   ├── codemirror.css
│   │   ├── codemirror.js
│   │   ├── coffeescript.js
│   │   ├── comment.js
│   │   ├── css.js
│   │   ├── headlesscodemirror.js
│   │   ├── htmlembedded.js
│   │   ├── htmlmixed.js
│   │   ├── javascript.js
│   │   ├── markselection.js
│   │   ├── matchbrackets.js
│   │   ├── overlay.js
│   │   ├── php.js
│   │   ├── python.js
│   │   ├── shell.js
│   │   └── xml.js
│   ├── common/
│   │   ├── Color.js
│   │   ├── Console.js
│   │   ├── ContentProvider.js
│   │   ├── Geometry.js
│   │   ├── Lock.js
│   │   ├── ModuleExtensionInterfaces.js
│   │   ├── NotificationService.js
│   │   ├── Object.js
│   │   ├── ParsedURL.js
│   │   ├── Progress.js
│   │   ├── ResourceType.js
│   │   ├── Settings.js
│   │   ├── StaticContentProvider.js
│   │   ├── TextRange.js
│   │   ├── TextUtils.js
│   │   ├── Throttler.js
│   │   ├── UIString.js
│   │   ├── WebInspector.js
│   │   ├── WorkerRuntime.js
│   │   └── module.json
│   ├── components/
│   │   ├── CookiesTable.js
│   │   ├── DOMBreakpointsSidebarPane.js
│   │   ├── DOMPresentationUtils.js
│   │   ├── DockController.js
│   │   ├── Drawer.js
│   │   ├── ExecutionContextSelector.js
│   │   ├── HandlerRegistry.js
│   │   ├── InspectElementModeController.js
│   │   ├── InspectorView.js
│   │   ├── NativeBreakpointsSidebarPane.js
│   │   ├── ObjectPopoverHelper.js
│   │   ├── ObjectPropertiesSection.js
│   │   ├── ShortcutsScreen.js
│   │   ├── TargetsComboBoxController.js
│   │   ├── breakpointsList.css
│   │   └── module.json
│   ├── console/
│   │   ├── ConsolePanel.js
│   │   ├── ConsoleView.js
│   │   ├── ConsoleViewMessage.js
│   │   ├── consoleView.css
│   │   └── module.json
│   ├── devices/
│   │   ├── DevicesView.js
│   │   ├── devicesView.css
│   │   └── module.json
│   ├── devtools.css
│   ├── devtools.html
│   ├── devtools.js
│   ├── devtools.json
│   ├── devtools_app/
│   │   ├── DevToolsAPI.js
│   │   ├── DevToolsApp.js
│   │   ├── InspectorFrontendHostImpl.js
│   │   ├── UITests.js
│   │   └── module.json
│   ├── dialog.css
│   ├── documentation/
│   │   ├── DocumentationCatalog.js
│   │   ├── DocumentationView.js
│   │   ├── JSArticle.js
│   │   ├── WikiParser.js
│   │   ├── documentationView.css
│   │   └── module.json
│   ├── elements/
│   │   ├── AnimationsSidebarPane.js
│   │   ├── ElementsBreadcrumbs.js
│   │   ├── ElementsPanel.js
│   │   ├── ElementsSidebarPane.js
│   │   ├── ElementsTreeOutline.js
│   │   ├── EventListenersSidebarPane.js
│   │   ├── MetricsSidebarPane.js
│   │   ├── PlatformFontsSidebarPane.js
│   │   ├── PropertiesSidebarPane.js
│   │   ├── Spectrum.js
│   │   ├── StylesSectionModel.js
│   │   ├── StylesSidebarPane.js
│   │   ├── breadcrumbs.css
│   │   ├── elementsPanel.css
│   │   ├── elementsTreeOutline.css
│   │   ├── module.json
│   │   └── spectrum.css
│   ├── extensions/
│   │   ├── ExtensionAPI.js
│   │   ├── ExtensionAuditCategory.js
│   │   ├── ExtensionPanel.js
│   │   ├── ExtensionRegistryStub.js
│   │   ├── ExtensionServer.js
│   │   ├── ExtensionView.js
│   │   └── module.json
│   ├── externs.js
│   ├── heap_snapshot_worker/
│   │   ├── AllocationProfile.js
│   │   ├── HeapSnapshot.js
│   │   ├── HeapSnapshotLoader.js
│   │   ├── HeapSnapshotWorker.js
│   │   ├── HeapSnapshotWorkerDispatcher.js
│   │   ├── JSHeapSnapshot.js
│   │   └── module.json
│   ├── host/
│   │   ├── InspectorFrontendHost.js
│   │   ├── Platform.js
│   │   ├── UserMetrics.js
│   │   └── module.json
│   ├── inspector.css
│   ├── inspector.html
│   ├── inspector.js
│   ├── inspector.json
│   ├── inspectorCommon.css
│   ├── inspectorStyle.css
│   ├── inspectorSyntaxHighlight.css
│   ├── layers/
│   │   ├── LayerPaintProfilerView.js
│   │   ├── LayersPanel.js
│   │   └── module.json
│   ├── main/
│   │   ├── AdvancedApp.js
│   │   ├── App.js
│   │   ├── HelpScreenUntilReload.js
│   │   ├── Main.js
│   │   ├── OverridesView.js
│   │   ├── RenderingOptions.js
│   │   ├── ScreencastApp.js
│   │   ├── SimpleApp.js
│   │   ├── TestController.js
│   │   ├── Tests.js
│   │   ├── accelerometer.css
│   │   ├── module.json
│   │   └── overrides.css
│   ├── network/
│   │   ├── FilterSuggestionBuilder.js
│   │   ├── HARWriter.js
│   │   ├── NetworkDataGridNode.js
│   │   ├── NetworkItemView.js
│   │   ├── NetworkLogView.js
│   │   ├── NetworkPanel.js
│   │   ├── NetworkTimeCalculator.js
│   │   ├── RequestCookiesView.js
│   │   ├── RequestHTMLView.js
│   │   ├── RequestHeadersView.js
│   │   ├── RequestJSONView.js
│   │   ├── RequestPreviewView.js
│   │   ├── RequestResponseView.js
│   │   ├── RequestTimingView.js
│   │   ├── RequestView.js
│   │   ├── ResourceWebSocketFrameView.js
│   │   ├── module.json
│   │   ├── networkLogView.css
│   │   ├── networkPanel.css
│   │   ├── requestCookiesView.css
│   │   ├── requestHeadersView.css
│   │   └── webSocketFrameView.css
│   ├── platform/
│   │   ├── DOMExtension.js
│   │   ├── Promise.js
│   │   ├── module.json
│   │   └── utilities.js
│   ├── popover.css
│   ├── profiler/
│   │   ├── CPUProfileBottomUpDataGrid.js
│   │   ├── CPUProfileDataGrid.js
│   │   ├── CPUProfileFlameChart.js
│   │   ├── CPUProfileTopDownDataGrid.js
│   │   ├── CPUProfileView.js
│   │   ├── CanvasProfileView.js
│   │   ├── CanvasReplayStateView.js
│   │   ├── HeapSnapshotCommon.js
│   │   ├── HeapSnapshotDataGrids.js
│   │   ├── HeapSnapshotGridNodes.js
│   │   ├── HeapSnapshotProxy.js
│   │   ├── HeapSnapshotView.js
│   │   ├── ProfileLauncherView.js
│   │   ├── ProfileTypeRegistry.js
│   │   ├── ProfilesPanel.js
│   │   ├── canvasProfiler.css
│   │   ├── heapProfiler.css
│   │   ├── module.json
│   │   └── profilesPanel.css
│   ├── promises/
│   │   ├── PromisePane.js
│   │   ├── module.json
│   │   └── promisePane.css
│   ├── resources/
│   │   ├── ApplicationCacheItemsView.js
│   │   ├── CookieItemsView.js
│   │   ├── DOMStorageItemsView.js
│   │   ├── DatabaseQueryView.js
│   │   ├── DatabaseTableView.js
│   │   ├── DirectoryContentView.js
│   │   ├── FileContentView.js
│   │   ├── FileSystemView.js
│   │   ├── IndexedDBViews.js
│   │   ├── ResourcesPanel.js
│   │   ├── indexedDBViews.css
│   │   ├── module.json
│   │   └── resourcesPanel.css
│   ├── screencast/
│   │   ├── ScreencastView.js
│   │   ├── module.json
│   │   └── screencastView.css
│   ├── script_formatter_worker/
│   │   ├── CSSFormatter.js
│   │   ├── JavaScriptFormatter.js
│   │   ├── ScriptFormatterWorker.js
│   │   └── module.json
│   ├── sdk/
│   │   ├── AnimationModel.js
│   │   ├── ApplicationCacheModel.js
│   │   ├── BlackboxSupport.js
│   │   ├── CPUProfileDataModel.js
│   │   ├── CPUProfilerModel.js
│   │   ├── CSSMetadata.js
│   │   ├── CSSParser.js
│   │   ├── CSSStyleModel.js
│   │   ├── ConsoleModel.js
│   │   ├── ContentProviders.js
│   │   ├── CookieParser.js
│   │   ├── DOMModel.js
│   │   ├── DOMStorage.js
│   │   ├── Database.js
│   │   ├── DebuggerModel.js
│   │   ├── FileSystemModel.js
│   │   ├── HAREntry.js
│   │   ├── HeapProfilerModel.js
│   │   ├── IndexedDBModel.js
│   │   ├── InspectorBackend.js
│   │   ├── LayerTreeModel.js
│   │   ├── NetworkLog.js
│   │   ├── NetworkManager.js
│   │   ├── NetworkRequest.js
│   │   ├── OverridesSupport.js
│   │   ├── PaintProfiler.js
│   │   ├── PowerProfiler.js
│   │   ├── RemoteObject.js
│   │   ├── Resource.js
│   │   ├── ResourceTreeModel.js
│   │   ├── RuntimeModel.js
│   │   ├── Script.js
│   │   ├── SnippetStorage.js
│   │   ├── SourceMap.js
│   │   ├── Target.js
│   │   ├── TracingManager.js
│   │   ├── WorkerManager.js
│   │   ├── WorkerTargetManager.js
│   │   └── module.json
│   ├── settings/
│   │   ├── EditFileSystemDialog.js
│   │   ├── FrameworkBlackboxDialog.js
│   │   ├── SettingsScreen.js
│   │   └── module.json
│   ├── sidebarPane.css
│   ├── source_frame/
│   │   ├── CodeMirrorTextEditor.js
│   │   ├── CodeMirrorUtils.js
│   │   ├── FontView.js
│   │   ├── GoToLineDialog.js
│   │   ├── ImageView.js
│   │   ├── ResourceSourceFrame.js
│   │   ├── SourceFrame.js
│   │   ├── cmdevtools.css
│   │   ├── fontView.css
│   │   ├── imageView.css
│   │   ├── module.json
│   │   └── resourceSourceFrame.css
│   ├── sources/
│   │   ├── AddSourceMapURLDialog.js
│   │   ├── AdvancedSearchView.js
│   │   ├── BreakpointsSidebarPane.js
│   │   ├── CSSSourceFrame.js
│   │   ├── CallStackSidebarPane.js
│   │   ├── EditingLocationHistoryManager.js
│   │   ├── FileBasedSearchResultsPane.js
│   │   ├── FilePathScoreFunction.js
│   │   ├── FilteredItemSelectionDialog.js
│   │   ├── InplaceFormatterEditorAction.js
│   │   ├── JavaScriptSourceFrame.js
│   │   ├── NavigatorView.js
│   │   ├── Placard.js
│   │   ├── RevisionHistoryView.js
│   │   ├── ScopeChainSidebarPane.js
│   │   ├── ScriptFormatter.js
│   │   ├── ScriptFormatterEditorAction.js
│   │   ├── SimpleHistoryManager.js
│   │   ├── SourcesNavigator.js
│   │   ├── SourcesPanel.js
│   │   ├── SourcesSearchScope.js
│   │   ├── SourcesView.js
│   │   ├── StyleSheetOutlineDialog.js
│   │   ├── TabbedEditorContainer.js
│   │   ├── ThreadsSidebarPane.js
│   │   ├── UISourceCodeFrame.js
│   │   ├── WatchExpressionsSidebarPane.js
│   │   ├── WorkspaceMappingTip.js
│   │   ├── filteredItemSelectionDialog.css
│   │   ├── jsdifflib.js
│   │   ├── module.json
│   │   ├── navigatorView.css
│   │   ├── revisionHistory.css
│   │   ├── sourcesPanel.css
│   │   └── sourcesView.css
│   ├── suggestBox.css
│   ├── tabbedPane.css
│   ├── temp_storage_shared_worker/
│   │   ├── TempStorageSharedWorker.js
│   │   └── module.json
│   ├── timeline/
│   │   ├── CountersGraph.js
│   │   ├── LayerDetailsView.js
│   │   ├── LayerTreeOutline.js
│   │   ├── Layers3DView.js
│   │   ├── MemoryCountersGraph.js
│   │   ├── PaintProfilerView.js
│   │   ├── TimelineEventOverview.js
│   │   ├── TimelineFlameChart.js
│   │   ├── TimelineFrameModel.js
│   │   ├── TimelineFrameOverview.js
│   │   ├── TimelineJSProfile.js
│   │   ├── TimelineLayersView.js
│   │   ├── TimelineMemoryOverview.js
│   │   ├── TimelineModel.js
│   │   ├── TimelineOverviewPane.js
│   │   ├── TimelinePaintProfilerView.js
│   │   ├── TimelinePanel.js
│   │   ├── TimelinePowerGraph.js
│   │   ├── TimelinePowerOverview.js
│   │   ├── TimelinePresentationModel.js
│   │   ├── TimelineUIUtils.js
│   │   ├── TimelineView.js
│   │   ├── TracingModel.js
│   │   ├── TransformController.js
│   │   ├── module.json
│   │   └── timelinePanel.css
│   ├── toolbox/
│   │   ├── InspectedPagePlaceholder.js
│   │   ├── MediaQueryInspector.js
│   │   ├── OverridesUI.js
│   │   ├── ResponsiveDesignView.js
│   │   ├── module.json
│   │   └── responsiveDesignView.css
│   ├── toolbox.css
│   ├── toolbox.html
│   ├── toolbox.js
│   ├── toolbox.json
│   ├── toolbox_bootstrap/
│   │   ├── Toolbox.js
│   │   └── module.json
│   ├── treeoutline.js
│   ├── ui/
│   │   ├── ActionRegistry.js
│   │   ├── CompletionDictionary.js
│   │   ├── Context.js
│   │   ├── ContextMenu.js
│   │   ├── DOMSyntaxHighlighter.js
│   │   ├── DataGrid.js
│   │   ├── Dialog.js
│   │   ├── DropDownMenu.js
│   │   ├── EmptyView.js
│   │   ├── FilterBar.js
│   │   ├── FlameChart.js
│   │   ├── ForwardedInputEventHandler.js
│   │   ├── HelpScreen.js
│   │   ├── InplaceEditor.js
│   │   ├── KeyboardShortcut.js
│   │   ├── OverviewGrid.js
│   │   ├── Panel.js
│   │   ├── PieChart.js
│   │   ├── Popover.js
│   │   ├── ProgressIndicator.js
│   │   ├── ResizerWidget.js
│   │   ├── RootView.js
│   │   ├── SearchableView.js
│   │   ├── Section.js
│   │   ├── SettingsUI.js
│   │   ├── ShortcutRegistry.js
│   │   ├── ShowMoreDataGridNode.js
│   │   ├── SidebarPane.js
│   │   ├── SidebarTreeElement.js
│   │   ├── SoftContextMenu.js
│   │   ├── SortableDataGrid.js
│   │   ├── SplitView.js
│   │   ├── StackView.js
│   │   ├── StatusBar.js
│   │   ├── SuggestBox.js
│   │   ├── TabbedPane.js
│   │   ├── TextEditor.js
│   │   ├── TextPrompt.js
│   │   ├── TimelineGrid.js
│   │   ├── UIUtils.js
│   │   ├── View.js
│   │   ├── ViewportControl.js
│   │   ├── ViewportDataGrid.js
│   │   ├── ZoomManager.js
│   │   ├── dataGrid.css
│   │   ├── filter.css
│   │   ├── flameChart.css
│   │   ├── helpScreen.css
│   │   ├── module.json
│   │   ├── overviewGrid.css
│   │   ├── panelEnablerView.css
│   │   ├── pieChart.css
│   │   ├── progressIndicator.css
│   │   ├── searchableView.css
│   │   ├── splitView.css
│   │   ├── statusBar.css
│   │   └── treeoutline.js
│   └── workspace/
│       ├── FileManager.js
│       ├── FileSystemMapping.js
│       ├── FileSystemWorkspaceBinding.js
│       ├── IsolatedFileSystem.js
│       ├── IsolatedFileSystemManager.js
│       ├── SearchConfig.js
│       ├── UISourceCode.js
│       ├── Workspace.js
│       └── module.json
├── front-end-node/
│   ├── Images/
│   │   └── src/
│   │       └── favicon.eps
│   ├── NodeInspectorOverrides.js
│   ├── console/
│   │   ├── ConsoleExtentions.js
│   │   └── module.json
│   ├── inspector.json
│   ├── main/
│   │   ├── MainOverrides.js
│   │   └── module.json
│   ├── module.json
│   ├── network/
│   │   ├── NetworkPanel.js
│   │   └── module.json
│   ├── profiler/
│   │   ├── SaveOverrides.js
│   │   └── module.json
│   ├── protocol.json
│   ├── settings/
│   │   ├── SettingsScreenOverrides.css
│   │   ├── SettingsScreenOverrides.js
│   │   └── module.json
│   └── sources/
│       ├── SourcesOverrides.js
│       └── module.json
├── index.js
├── lib/
│   ├── BreakEventHandler.js
│   ├── CallFramesProvider.js
│   ├── ConsoleAgent.js
│   ├── ConsoleClient.js
│   ├── DebuggerAgent.js
│   ├── DebuggerClient.js
│   ├── FrontendClient.js
│   ├── FrontendCommandHandler.js
│   ├── HeapProfilerAgent.js
│   ├── HeapProfilerClient.js
│   ├── Injections/
│   │   ├── ConsoleAgent.js
│   │   ├── HeapProfilerAgent.js
│   │   ├── NetworkAgent.js
│   │   └── ProfilerAgent.js
│   ├── InjectorClient.js
│   ├── InjectorServer.js
│   ├── NetworkAgent.js
│   ├── PageAgent.js
│   ├── ProfilerAgent.js
│   ├── RuntimeAgent.js
│   ├── ScriptFileStorage.js
│   ├── ScriptManager.js
│   ├── callback.js
│   ├── config.js
│   ├── convert.js
│   ├── debug-server.js
│   ├── debugger.js
│   ├── plugins.js
│   └── session.js
├── package.json
├── test/
│   ├── CallFramesProvider.js
│   ├── ConsoleAgent.js
│   ├── DebuggerAgent.js
│   ├── DebuggerClient.js
│   ├── FrontendCommandHandler.test.js
│   ├── HeapProfilerAgent.js
│   ├── InjectorClient.js
│   ├── NetworkAgent.js
│   ├── PageAgent.js
│   ├── ProfilerAgent.js
│   ├── RuntimeAgent.js
│   ├── ScriptFileStorage.js
│   ├── ScriptManager.js
│   ├── config.js
│   ├── convert.js
│   ├── fixtures/
│   │   ├── BreakInFunction.js
│   │   ├── Commandlet.js
│   │   ├── InspectObject.js
│   │   ├── LiveEdit.js
│   │   ├── PeriodicConsoleLog.js
│   │   └── ssl_cert_and_key.txt
│   ├── helpers/
│   │   ├── SessionStub.js
│   │   ├── launcher.js
│   │   └── wsmock.js
│   ├── index.js
│   ├── mocha.opts
│   ├── node-debug.test.js
│   └── plugins.js
└── tools/
    ├── git-changelog.sh
    ├── protocol.json
    ├── release.sh
    └── update-front-end.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
*.js text eol=lf


================================================
FILE: .gitignore
================================================
._*
node_modules
plugins/*
v8.log
.DS_Store
.idea/
/test/fixtures/work
npm-debug.log
node-inspector-*.tgz


================================================
FILE: .jshintignore
================================================
node_modules
/front-end
/plugins

================================================
FILE: .jshintrc
================================================
{
"node": true,
"eqnull" : true,
"indent": 2,
"undef": true,
"quotmark": "single",
"maxlen": 105,
"trailing": true,
"newcap": true,
"nonew": true,
"sub": true,
"globals": {
  "describe": true,
  "it": true,
  "before": true,
  "beforeEach": true,
  "after": true,
  "afterEach": true
}
}


================================================
FILE: .npmignore
================================================
._*
node_modules
v8.log
.DS_Store
/.idea
/test
node-inspector-*.tgz
.npmignore
.travis.yml
MAINTAINERS.md


================================================
FILE: .travis.yml
================================================
sudo: false
language: node_js
node_js:
  - "0.10"
  - "0.12"
  - "4"
  - "5"
  - "6"
  - "7"


================================================
FILE: CONTRIBUTING.md
================================================
Before opening a pull request
=============================

- [Wiki article on contributing to Node Inspector](https://github.com/node-inspector/node-inspector/wiki/Contributing)
- [Developer's guide](https://github.com/node-inspector/node-inspector/wiki/Developer%27s-Guide)

Before opening an issue
=======================

In order to facilitate reproduction of issues, please always provide the following info:

- node-inspector version (`node-inspector --version`)
- node.js version (`node --version`)
- operating system name and version

Please upgrade to the newest version before opening an issue:

`npm install -g node-inspector`

and check if it still is reproducible.

If the issue started happening after a recent upgrade, you can downgrade to an older version
of Node Inspector with a command like this:

`npm install -g node-inspector@0.8.3`

Providing information if the bug is a recent regression will also facilitate its handling.

Click [here](https://github.com/node-inspector/node-inspector/releases) to find out
what are the available versions.
Alternatively you can also use the following command:

`npm view node-inspector`


================================================
FILE: ChangeLog.md
================================================
## 2018-01-31, Version 1.1.2

 * fix: ui messed up (#1034) (淘小杰)

 * Allow "blob:" sources for scripts in Content-Security-Policy header (#1017) (André Wachter)

 * Fixed typo: buit > built (#1018) (Greg Knapp)


## 2017-04-24, Version 1.1.1

 * fix: press enter doesn't work in console (#1006) (淘小杰)

 * fix: make it work with mac (#1003) (淘小杰)


## 2017-04-12, Version 1.1.0

 * doc: add doc of how to debug remote machine (#1002) (淘小杰)

 * fix:  DebuggerClient api has a breaking change (#1000) (淘小杰)

 * Implement the remote debugging feature. (#919) (Junil Kim)

 * test: add debug break test case (#998) (淘小杰)

 * fix: --debug-brk is ignored when launching it with command (#997) (淘小杰)


## 2017-04-10, Version 1.0.1

 * fix: breakpoint may be undefined. (#995) (淘小杰)

 * fix: debug-brk not working and  failed to resolve value by handle,
   https://github.com/node-inspector/node-inspector/issues/993 (#994) (淘小杰)

 * Fixing CLI warning (#943) (Clint Goodman)

 * Updated repo badges to svg (#945) (Amila Welihinda)

 * As KeyboardEvent.keyIdentifier is removed from the recent (#955) (Junil Kim)


## 2017-03-28, Version 1.0.0

 * fix: upgrade v8-debug and v8-profiler, fix some test suites (#991) (淘小杰)

 * fix: can not find `NativeModule` in node 6.4.x and above (#990) (淘小杰)

 * Update README (#988) (Miroslav Bajtoš)


## 2017-03-06, Version 0.12.10

 * Fix callback call in InjectorClient._findNMInScope (#914) (Sergey Sharov)

 * Partial fix of #843 (Yury Puzynya)

 * Fix #851 (Yury Puzynya)


## 2016-04-07, Version 0.12.8

 * Cleanup pr-839 (Yury Puzynya)

 * Don't fail when there's a loop in symlinks (Yves Le Maout)

 * Bump ws dependency to 1.0.1 (eliminates dependency on bufferutil) (Andre Asselin)

 * Fix issue #832, "node inspector and babel-register". (Albert Pomortsev)

 * Fix keep-alive network debugging (Yury Puzynya)

 * Fix calling unexposed function (Guilherme Pacheco)


## 2016-02-25, Version 0.12.7

 * chmod 777 for unix socket (Yury Puzynya)

 * Added frontend ping (Yury Puzynya)

 * Remove registerDebuggerEventHandlers (Yury Puzynya)

 * Merge debug-server address and wsAddress (Yury Puzynya)

 * fix ws url (Yury Puzynya)


## 2016-02-09, Version 0.12.6

 * deps up (Yury Puzynya)

 * Fixed buildInspectorUrl (Yury Puzynya)

 * Fix readme (Yury Puzynya)

 * Aviod params duplication in querystring (Yury Puzynya)

 * Support listening on unix socket (Yury Puzynya)

 * Fix node-inspector redirecting with invalid ws url if no port is specified (Cain Cresswell-Miley)

 * New resource tree resolver (Yury Puzynya)

 * Added manifest.override prop for inspector.json. Allows finer-grained control over existing plugins and modules. (Eric Lawless)

 * Added --plugin-path argument for specifying root plugin path. (Eric Lawless)


## 2015-12-06, Version 0.12.5

 * Bump dependencies (Yury Puzynya)

 * Update build script (Yury Puzynya)


## 2015-12-03, Version 0.12.4

 * bump v8-debug version (Yury Puzynya)

 * Fix #763 (Yury Puzynya)

 * Prevent leaking of data in Network for AWS and others (Yury Puzynya)

 * Updates TravisCI build (Yury Puzynya)

 * Reimplemented Injector entry point (Yury Puzynya)

 * Simplifies evaluateGlobal func (Yury Puzynya)

 * Update release.sh (Yury Puzynya)


## 2015-09-05, Version 0.12.3

 * Fix tests (Yury Puzynya)

 * Fix tests (Yury Puzynya)

 * Update dependencies (Yury Puzynya)

 * Fix #730 , Fix #724 (Yury Puzynya)

 * Typo (stack is not a function) Fixes #728 (Michael Plakhov)

 * Fixed #723 (3y3)

 * Update release.sh (3y3)


## 2015-08-06, Version 0.12.2

 * Fix tests for 0.10 (3y3)

 * Fix css issue with debugger window cut off #699 (Alex Kras)

 * Isolate injections in `Injections` folder (3y3)

 * Test launcher rewrited for promises (3y3)

 * Changed behavior for session `close` event (3y3)

 * Added DebuggerClient.isReady state (3y3)

 * Revert changes in Network handling (3y3)

 * Update release.sh (3y3)


## 2015-07-29, Version 0.12.1

 * Exclude `tools` from .npmignore (Chris Baldwin)

 * Update release.sh (3y3)


## 2015-07-29, Version 0.12.0

 * JSON endpoints /json and /json/list should return a JSON array (Alain Kalker)

 * Remove useless wrapper in NetworkInjection (3y3)

 * Send correct loaderId in resourceTree (3y3)

 * Receive app evn in one place (3y3)

 * Fix IndexedDB.requestDatabaseNames command (3y3)

 * Plugins: cleanup fixes (3y3)

 * Frontend update: fetched from 2234 (3y3)

 * Add `plugins` option to configuration (3y3)

 * Deprecate front-end generating scripts (3y3)

 * Plugins: tests for merging ProtocolJson (3y3)

 * Plugins: tests for merging InspectorJson (3y3)

 * Plugins: merging ProtocolJson (3y3)

 * Plugins: merging InspectorJson (3y3)

 * Front-end: added event `FormattedMessage` (3y3)

 * Front-end: added event dispatcher for console view (3y3)

 * Update readme and `--help` (3y3)

 * Split injections configuration (3y3)

 * Support objects in config (3y3)

 * Fix pause on first line for node 0.10.* (3y3)


## 2015-07-23, Version 0.11.2

 * TravisCI: switch to container based infrastructure (3y3)

 * Fix #698 (3y3)


## 2015-06-30, Version 0.11.1

 * Handle `compileError` as `afterCompile` on node 0.12 (3y3)

 * Fix custom command initialisation in `debug-brk` mode (3y3)

 * Fix Console.message url (3y3)


## 2015-06-29, Version 0.11.0

 * Update README.md (3y3)

 * front-end: Fix double sending of `togglePause` (3y3)

 * Fix `redirectToRoot` context (3y3)

 * Network: added new tests (3y3)

 * Network: fixed front-end (3y3)

 * Added Network tab (3y3)

 * Properly redirect to root (3y3)

 * Added /json/version http endpoint (Kenneth Auchenberg)

 * Added /json http endpoint (Kenneth Auchenberg)

 * Ignore errors during debugger closing. Fix tests. (3y3)

 * Fix inline sourcemaps path in node 0.10.x (Andres Suarez)

 * Send disconnect request on connection closing (3y3)


## 2015-06-15, Version 0.10.2

 * Fix test for iojs (3y3)

 * Avoid inline sourcemaps to be re-fetched from backend. (Marco Minetti)

 * Improve inline sourcemaps (3y3)

 * Check if source stored in app on source request (3y3)

 * Move `getScriptSourceById` to ScriptManager (3y3)

 * Console: fix max string length (3y3)

 * Console: fix caller script url (3y3)

 * Console: fix currentFrame searching (3y3)

 * Console: added special wrapper for assert func (3y3)

 * Fix index tests (3y3)

 * Fix url backward compatibility (3y3)

 * Fixed #667 (3y3)

 * Fix config web-host deprecation checker (3y3)

 * Added support for Web Notifications on debugger paused. (Marco Minetti)

 * Dropped /debug in favor of root URL. (Marco Minetti)


## 2015-05-13, Version 0.10.1

 * Bump dependencies (3y3)

 * Bump FrontendCommandHandler test timeout (3y3)

 * Try resolve script source on `debug` event (3y3)

 * More asynchronous Injector break handling (3y3)

 * Process `break` event in async mode (3y3)

 * Deprecate event caching in BreakEventHandler (3y3)

 * Use `wss:` WebSocket protocol if front-end is using SSL (Adam Biggs)

 * Small fix: redirection in debug-server (3y3)

 * README: remove traling whitespace (Miroslav Bajtoš)

 * ScriptFileStorage: follow symlinks, get realpaths (Jurgen Leschner)


## 2015-04-24, Version 0.10.0

 * Readme cleanup. (3y3)

 * Implemented "Save" for CPU and Heap profiles. (marco.minetti)

 * Fixed console test (3y3)

 * Fixed debug port not read from URI. (marco.minetti)

 * Fixed new watcher expression input. (Marco Minetti)

 * Fix console in debug-brk mode (3y3)

 * Add tests for BreakEventHandler (3y3)

 * Cache events from app (3y3)

 * Decrease time for FrontendCommandHandler test (3y3)

 * Fix tests for 0.12 (3y3)

 * Passing `session` object everywhere (3y3)

 * Fix console messageRepeatCounter (3y3)

 * Deprecate unuseful front-end changes (3y3)

 * Fix HeapProfilerAgent relative to new protocol.json (3y3)

 * Fix ProfilerAgent relative to new protocol.json (3y3)

 * Reload frontend on detach (3y3)

 * Allow to save modified files (3y3)

 * Disable unusable tabs (3y3)

 * Added PageAgent canEmulate and canScreencast callbacks (3y3)

 * Extend noop commands list (3y3)

 * Send page context to frontend (3y3)

 * Override watch expression (3y3)

 * Replace `(no domain)` string to `(core modules)` (3y3)

 * Replace worker title to '' (3y3)

 * Replace window title to `Node Inspector` (3y3)

 * Override WebInspector.UIString (3y3)

 * Open main script on startup (3y3)

 * Extend protocol by Console.showConsole (3y3)

 * Hide sources chrome specifics (3y3)

 * Remove unusable tabs from settings screen (3y3)

 * Unregister shortcuts (3y3)

 * Use default web socket to connect to inspector backend (3y3)

 * Update tools/generate-commands algorithm (3y3)

 * Frontend update: fetched from 2234 (3y3)

 * Disable debug conn. managment by Debugger Agent (3y3)

 * README: Add note regarding breaking bug (see: #534) (ELLIOTTCABLE)

 * Fixed console warning for profiler/node compatibility. (Marco Minetti)


## 2015-03-10, Version 0.9.2

 * Bump express min version to 4.8.0 (Alejandro Larre)

 * Documentation on contributing (jakub-g)


## 2015-02-24, Version 0.9.1

 * Move gitter badge to right place (3y3)

 * Added Gitter badge (The Gitter Badger)

 * README: fix typos (Wendy Leung)

 * Bump v8-debug to v0.4.2, v8-profiler to 5.2.4 (Jim Cummins)

 * .travis.yml: drop 0.11, add 0.12 and io.js (Miroslav Bajtoš)


## 2015-02-11, Version 0.9.0

 * tools: set +x for git-changelog.sh (Miroslav Bajtoš)

 * README note about preloading and symlinks (Jurgen Leschner)

 * use glob v4.3.5 - NOTE disables symlink following (Jurgen Leschner)

 * Enable latest Node v0.10 on Travis again (Miroslav Bajtoš)

 * Make sure to open URL in a webkit browser (jakub-g)

 * Fix: Breakpoints doesn't work for Windows (3y3)

 * lib: Fix typo (Seth Krasnianski)

 * Fix --hidden option for NODE_DEBUG mode (3y3)

 * travis: fix Node versions (Miroslav Bajtoš)


## 2015-01-12, Version 0.8.3

 * Fix release logic (3y3)


## 2015-01-12, Version 0.8.2

 * Fix release.sh for Windows (3y3)

 * Fix Console API getCallerFuncLocation (3y3)

 * Wrong name ScriptManager.normalizeV8Name (3y3)

 * Replace deprecated express sendfile with sendFile. (Timur Amirov)

 * front-end: fix non-expanding tree-element (tobiasviehweger)

 * Release script updated (3y3)

 * Check Windows case insensitive app name (3y3)

 * Avoid serialization of internal properties (3y3)


## 2014-12-08, Version 0.8.1

 * Update v8-profiler version (3y3)

 * Check NaN object in mirrors cache (3y3)

 * tools/git-changelog: always print the header (Miroslav Bajtoš)

 * tools/release: fixes and improvements (Miroslav Bajtoš)


## 2014-12-03, Version 0.8.0

 * Fixed issue #478 (jlu)

 * Modified DebuggerAgent.getFunctionDetails (3y3)

 * Added HeapProfiler._lookupHeapObjectId (3y3)

 * Console serializing and caching logic moved to InjectorServer (3y3)

 * README: fix command for debugging Gulp on Windows (thorn0)

 * Console API (3y3)

 * HeapProfiler API (3y3)

 * ChangeLog: update to the new markdown format (Miroslav Bajtoš)

 * Simplify the release process (Miroslav Bajtoš)

 * README: Fix broken link. (Marcelo Campos Rocha)

 * README: Add info on debugging Gulp tasks (Eric Eastwood)

 * Update README.MD (3y3)

 * Added usage examples (3y3)

 * New help system (3y3)

 * Added customizable webHost to node-debug (3y3)

 * Exclude configuration logic from node-debug (3y3)

 * Use yargs as argv preprocessor in config.js (3y3)

 * Deprecate allowed web-host `null` value (3y3)

 * Create config from constructor (3y3)

 * Enable node-inspector listening on https. (mriehle)

 * Profiler API (3y3)

 * Use correct comment style in Overrides.css (3y3)

 * Overrides: fix `WebInspector.UIString` (Miroslav Bajtoš)

 * front-end: hide DOM, XHR and Event Listener breakpoints (3y3)

 * front-end: rename "(no domain)" to "(core modules)" (3y3)

 * front-end: remove unusable tabs in settings screen (3y3)

 * Extend noop-commands list (3y3)

 * test: increase test timeout in InjectorClient (Miroslav Bajtoš)

 * Fix passing config from session.js to ScriptManager.js (3y3)

 * Add Inspector favicon (3y3)

 * test: increase test timeout in InjectorClient (Miroslav Bajtoš)

 * Version checking refactored (3y3)

 * Update devtools overview url in README (Fodi69)

 * Deprecated config.js cleanup (3y3)

 * README: fix link pointing to docs.strongloop.com (Miroslav Bajtoš)

 * test: fix race condition in launcher (Miroslav Bajtoš)

 * package: update dependencies, use "^" (Miroslav Bajtoš)

 * README: minor improvements (Miroslav Bajtoš)

 * BreakEventHandler: fix break on uncaught exception (Miroslav Bajtoš)

 * debugger: fix protocol debug log (Miroslav Bajtoš)

 * Injector API restructuring (3y3)

 * Add Bountysource badge to README (bountysource-support)

 * Fix InjectorServer socket closing (3y3)

 * Update `debug` to "1.0" (Miroslav Bajtoš)

 * Removed trailing space. (Miroslav Bajtoš)

 * Bump up the next version to 0.8.0 (Miroslav Bajtoš)

 * Injector API (3y3)

 * start work on v0.7.5 (Miroslav Bajtoš)


## 2014-06-05, Version 0.7.4

 * Non-ascii string saving fix (junecoder)

 * front-end: fix for the Safari browser (ivan baktsheev)

 * node-debug: Detecting Windows CMD files (3y3)

 * node-debug: Passing NodeJS options to debugged process (3y3)

 * node-debug: Fixed passing inspector's 'no-' arg in node-debug (3y3)

 * Fix conversion of config options (3y3)


## 2014-04-08, Version 0.7.3

 * ScriptFileStorage: fix fs.readFile usage on v0.8 (Miroslav Bajtoš)

 * Update dependencies (Miroslav Bajtoš)

 * Switch to core _debugger module. (3y3)


## 2014-03-21, Version 0.7.2

 * Fixed a race condition in the debug-server.js (Vasil Dininski)

 * Use jshint instead of gjslint (Miroslav Bajtoš)

 * fixjsstyle cleanup (3y3)

 * debugger isRunning state changes (3y3)


## 2014-03-11, Version 0.7.1

 * Added subtype property to RemoteObject (3y3)

 * Checked Invalid Date object (3y3)

 * Fixed wrong proto object link (3y3)

 * Checking configurable option (3y3)

 * Properties conversion isolated to function (3y3)

 * Handle shebang in ScriptFileStorage load/save (Miroslav Bajtoš)

 * Implement Debugger.setSkipAllPauses (Miroslav Bajtoš)

 * Fix links (Miroslav Bajtoš)

 * MAINTAINERS: use imperative sentence style (Miroslav Bajtoš)


## 2014-02-20, Version 0.7.0

 * README restructuralization (Miroslav Bajtoš)

 * Rename readme.md to README.md (Miroslav Bajtoš)

 * Update AUTHORS (Miroslav Bajtoš)

 * Defer "scriptParsed" until "Page.getResourceTree" (Miroslav Bajtoš)

 * Lower the frequency of auto reloads (Miroslav Bajtoš)

 * Update .npmignore (Miroslav Bajtoš)

 * Clean up node-debug help message (Sam Roberts)

 * bin/inspector: Add -h -v --version options (Miroslav Bajtoš)

 * Speed up initial parsing of source-map URLs (Miroslav Bajtoš)

 * Cache results of ScriptFileStorage.listScripts. (Miroslav Bajtoš)

 * Ignore EACCESS errors when listing sources (Miroslav Bajtoš)

 * Tighten findAllApplicationScripts heuristics (Miroslav Bajtoš)

 * Implement node-debug. (Miroslav Bajtoš)

 * RuntimeAgent: implement releaseObject() as no-op (Miroslav Bajtoš)

 * Fix DebuggerAgent.setVariableValue to object (Miroslav Bajtoš)

 * Add WebSocketServer error handler. (Miroslav Bajtoš)

 * README: added shell code higlight (Ionică Bizău)

 * Fix conversion of Error objects (Miroslav Bajtoš)

 * Use WebSockets instead of socket.io. (Kenneth Auchenberg)

 * Small indentation fixes (3y3)

 * Help message format update (3y3)

 * Reload browser when detached from target (ChrisWren)

 * Make socket.io work with subfolder hosting. (Pritam Baral)


## 2014-01-23, Version 0.7.0-2

 * Updated AUTHORS. (Miroslav Bajtoš)

 * Fixed display of RegExp objects. (3y3)

 * Fixed DebuggerClient.resume acting like stepInto (Miroslav Bajtoš)

 * Fixed timing-dependent unit-tests failures (Miroslav Bajtoš)

 * test: improved describe/it names (Miroslav Bajtoš)

 * Fixed misspelled word "Visit" in docs (Peter Lyons)

 * Fix Date display format. Issue #281 (3y3)

 * Fixed throw on DebuggerAgent.resume() (Lennon Pulda-Grealy)

 * Added large String support for debugger evaluation requests (Peter Flannery)


## 2013-12-26, Version 0.7.0-1

 * Improved formatting of Date objects in inspector (Sergey Krilov)

 * Added --no-preload to disable glob of all *.js (Dick Hardt)

 * Update readme with faq about browser storage and debug metadata (Karan Batra-Daitch)

 * Fixed CallFramesProvider test on Node v0.11. (Miroslav Bajtos)


## 2013-12-04, Version 0.6.2

 * Updated AUTHORS. (Miroslav Bajtos)

 * docs: explain dashed name rc config conversion (cattail)

 * Removed false error messages on reload (Dave)


## 2013-11-17, Version 0.6.1

 * Added debug logging of communication (Miroslav Bajtos)


## 2013-11-12, Version 0.6.0

 * gjslint: removed workaround for linter bug (Miroslav Bajtos)

 * Updated AUTHORS. (Miroslav Bajtos)

 * Added `stackTraceLimit` configuration, fixes #96. (ssafejava)

 * test: fixed launcher errors on windows (Miroslav Bajtos)

 * Remove dependence on HTTP for socket io connection to server (Matthew O'Riordan)

 * README: added WTF entry about adblock (Gary Katsevman)

 * README: howto signal SIGUSR1 on windows (Miroslav Bajtos)

 * lib,test: fixed lint issues (Miroslav Bajtos)


## 2013-09-20, Version 0.5.0

 * Quick fix for properties displayed twice in UI (Miroslav Bajtos)

 * README: added FAQ entry for --hidden option (Miroslav Bajtos)

 * lib: fixed hiding of script files (Miroslav Bajtos)

 * lib: fix config handling (Miroslav Bajtos)

 * Updated AUTHORS. (Miroslav Bajtos)

 * Fixed wrong hint in error message if web port is used. (Adam Hořčica)

 * NetworkAgent: support data scheme URLs (Miroslav Bajtos)

 * package.json: upgraded to express 3.4 (Miroslav Bajtos)

 * lib,Overrides: support the updated front-end (Miroslav Bajtos)

 * front-end: patched inspector.html (Miroslav Bajtos)

 * front-end: upgraded to Blink branch 1625, r157454 (Miroslav Bajtos)

 * tools: implemented update-front-end.sh (Miroslav Bajtos)


## 2013-09-05, Version 0.4.0

 * Emit 'listening' and 'error' events (Miroslav Bajtos)

 * README: fixed headings level (Miroslav Bajtos)

 * New configuration system based on RC module (3y3)


## 2013-08-21, Version 0.3.4

 * Bugfix: crash when breakpoint was hit in eval()-ed (Miroslav Bajtos)


## 2013-08-12, Version 0.3.3

 * package.json: upgraded to express 3.3 (Miroslav Bajtos)

 * README: added section 'Contributing Code' (Miroslav Bajtos)

 * README: Updated "Thanks" section (Miroslav Bajtos)

 * Updated AUTHORS list. (Miroslav Bajtos)

 * DebugServer: Fix for source map paths on win (pflannery)

 * README: added gemnasium dependency status badge (Miroslav Bajtos)

 * package.json: added `lint` script (Miroslav Bajtos)

 * README: link to issue #146 (Miroslav Bajtoš)

 * PageAgent: improved main-file detection (Miroslav Bajtos)


## 2013-07-22, Version 0.3.2

 * Overrides: show main app file (Miroslav Bajtos)

 * PageAgent: fix for main script without extension (Miroslav Bajtos)


## 2013-07-15, Version 0.3.1

 * Added version log message. (Miroslav Bajtos)

 * Fixed RuntimeAgent.callFunctionOn() error handling (Miroslav Bajtos)


## 2013-07-15, Version 0.3.0

 * MAINTAINERS.md: fixed typo. (Miroslav Bajtos)

 * squash! ScriptFileStorage: root detection change (Miroslav Bajtos)

 * ScriptFileStorage: improved detection of app root (Miroslav Bajtos)

 * ScriptManager: fixed crash (mocha --debug-brk) (Miroslav Bajtos)

 * DebuggerClient: fixed crash in getScriptSource (Miroslav Bajtos)

 * AUTHORS: updated Stronglooper's emails (Miroslav Bajtos)

 * Added MAINTAINERS.md (Miroslav Bajtos)

 * Added AUTHORS (Miroslav Bajtos)

 * Updated documentation. (Miroslav Bajtos)

 * List unit-test files on session start. (Miroslav Bajtos)

 * DebuggerClient: workaround for string truncation (Miroslav Bajtos)

 * Fixed sourcemap support on Windows (Miroslav Bajtos)

 * ScriptFileStorage: fixed issues on windows (Miroslav Bajtos)

 * Sourcemap support (Miroslav Bajtos)

 * Change the default server ip to be 127.0.0.1 as 0.0.0.0 doesn't work on windows (Raymond Feng)

 * PageAgent: removed forgotten console.log call. (Miroslav Bajtos)

 * Set breakpoint in a file not loaded yet. (Miroslav Bajtos)

 * DebuggerAgent: setVariableValue for node v0.10.12+ (Miroslav Bajtos)

 * package.json: relaxed express version spec (Miroslav Bajtos)

 * Added few more dummy command handlers. (Miroslav Bajtos)

 * DebuggerAgent: handle unsupported node version (Miroslav Bajtos)

 * Implemented setVariableValue. (Miroslav Bajtos)

 * Fixed 'get scope properties' to include flags (Miroslav Bajtos)

 * RuntimeAgent: callFunctionOn with arguments (Miroslav Bajtos)

 * RuntimeAgent: added writable and enumerable flags (Miroslav Bajtos)

 * DebuggerAgent: implemented restartFrame. (Miroslav Bajtos)

 * Improved handling of agent methods not implemented (Miroslav Bajtos)

 * DebuggerAgent: save live-edit changes. (Miroslav Bajtos)

 * Run ./tools/git-changelog to update ChangeLog (Sam Roberts)

 * session: removed improper warning message (Miroslav Bajtos)

 * Moved frontend overrides out of front-end folder (Miroslav Bajtos)

 * Replaced paperboy with express. (Miroslav Bajtos)

 * Added header to enable IE support via Chrome Frame (Miroslav Bajtos)

 * added preferGlobal to package.json (Miroslav Bajtos)

 * Changed fetchCallFrames to not fetch scope details (Miroslav Bajtos)

 * Implemented DebuggerClient.clearBreakpoint (Miroslav Bajtos)

 * Moved afterCompile handler to ScriptManager. (Miroslav Bajtos)

 * Cleanup: Agents depend on debuggerClient (Miroslav Bajtos)

 * Moved session.attach to DebuggerAgent. (Miroslav Bajtos)

 * Refactored 'break'/'exception' handling (Miroslav Bajtos)

 * Started rename of Debugger.sendDebugRequest. (Miroslav Bajtos)

 * Extracted debugger communication to DebuggerClient (Miroslav Bajtos)

 * Extracted frontend communication to FrontendClient (Miroslav Bajtos)

 * Removed unused code from session.js (Miroslav Bajtos)

 * Moved detection of conn errors to debugger. (Miroslav Bajtos)

 * Style: added gjslint rules and fixed style issues (Miroslav Bajtos)

 * Code-completions in console. (Miroslav Bajtos)

 * Display the main document as a script file. (Miroslav Bajtos)

 * Upgraded dependencies to recent versions. (Miroslav Bajtos)

 * Code clean-up (Miroslav Bajtos)

 * Removed overload of Reload page key shortcut. (Miroslav Bajtos)

 * Implemented live edit of script sources. (Miroslav Bajtos)

 * Fixed creation of a new watch expression (Miroslav Bajtos)

 * Prepared for v0.3.0preview1 release. (Miroslav Bajtos)

 * Removed leftover file. (Miroslav Bajtos)

 * Convert windows paths to file:// URLs. (Miroslav Bajtos)

 * Fixed title of html page and removed null error (Miroslav Bajtos)

 * Detach from debugger when front-end disconnects. (Miroslav Bajtos)

 * Removed test/hello.js (Miroslav Bajtos)

 * Code clean-up: removed unused code. (Miroslav Bajtos)

 * Fixed DebuggerAgent.setPauseOnExceptions. (Miroslav Bajtos)

 * DebuggerAgent.getFunctionDetails() (Miroslav Bajtos)

 * v8NameToInspectorUrl for `evaluate` scripts (Miroslav Bajtos)

 * Commands not used/supported, capability queries (Miroslav Bajtos)

 * Breaking on an Exception now provides a reason. (Michael Schoonmaker)

 * Updated the Console methods under both Runtime and Debugger. (Michael Schoonmaker)

 * Implemented 'Continue to Here' command (Miroslav Bajtos)

 * Implemented activate/deactivate breakpoints. (Miroslav Bajtos)

 * Implemented RuntimeAget.getProperties() (Miroslav Bajtos)

 * Implemented execution-control related commands (Miroslav Bajtos)

 * Implemented Call Stack. (Miroslav Bajtos)

 * Implemented breakpoints (Miroslav Bajtos)

 * Rework backend to support the new frontend. (Miroslav Bajtos)

 * Reuse stubs and commands from webkit-inspector. (Miroslav Bajtos)

 * Patched front-end/inspector.html (Miroslav Bajtos)

 * Updated front-end to blink branch 1507. (Miroslav Bajtos)

 * Display breakpoints in scripts loaded later. (Miroslav Bajtos)

 * Fixed breakpoint restore bug. (Miroslav Bajtos)

 * Update list of scripts on afterCompile event. (Miroslav Bajtos)

 * Restore breakpoints on debugee restart. (Miroslav Bajtos)

 * default should be backwards compatible (Philip Tellis)

 * missing " (Philip Tellis)

 * configure which interface to listen on so that we can avoid opening the debugger to the world if not needed (Philip Tellis)

 * Added meta tag to enable IE support via Chrome Frame (Glenn Block)

 * Added BSD License (Danny Coates)

 * updated 'Thanks' on readme (Danny Coates)

 * Syntax highlighting (Akzhan Abdulin)


## v0.1.10

 * switched to socket.io, now works with Chrome 14+

## v0.1.9

 * fixed page refresh

## v0.1.8

 * bug fixes

## v0.1.7

 * updated dependencies

## v0.1.6

 * fixed crash on connect when using watch expressions (Issue 25)

## v0.1.5

 * minor bug fixes

## v0.1.4

 * experimental support for the profiles panel

## v0.1.3

 * reverted websocket library to 1.3.53

## v0.1.2

 * option to save changes from liveEdit

 * option to hide files from inspector

 * added config.json
  - webPort (port to host inspector interface)
  - debugPort (default debugger port to connect to)
  - saveLiveEdit (save changes to files edited with liveEdit)
  - hidden (regexp strings of files to hide from interface)

## v0.1.1

 * Fixed pause button with node 0.3.1+

 * Fixed page refresh with node 0.3.1+

 * Shortened script file names in script list

 * Updated node-websocket-server library


## v0.1.0

 * Require node 0.3+

 * Improved Scope Variables display
  - Better object type info
  - Inlined Array / Buffer lengths

 * Automatically saved application setting
  - last file shown
  - console history
  - watch expressions

 * Console object completion on .

 * Updated Web Inspector base

 * Moved debugger port to query string i.e. /debug?port=5858

 * New front-end <-> back-end message protocol


## v0.0.4

 * ctrl+click line number for conditional breakpoints

 * enable pause on all exceptions button


## v0.0.3

 * handle multi-byte characters from debugger (Issue 12)


## v0.0.2

 * removed --start --debug-port --fwd-io flags

 * added debugger port UI


## v0.0.1

 * added to npm registry


================================================
FILE: LICENSE
================================================
Copyright (c) 2011, Danny Coates
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

================================================
FILE: MAINTAINERS.md
================================================
## How to release a new version

If you are running on Unix (Mac OSX, Linux), you can run `tools/release.sh`
that will run all steps for you:

    $ tools/release.sh X.Y.Z

### Manual steps

1. Make sure all tests are passing:

        $ npm test

1. Update the changelog

        $ tools/git-changelog X.Y.Z

1. Update the version in package.json

        $ npm version --git-tag-version=false X.Y.Z

1. Commit the changes to git

        $ git commit ChangeLog.md package.json -m X.Y.Z

1. Create a git tag

        $ git tag -a vX.Y.Z -m X.Y.Z

1. Push all changes to the server

        $ git push origin master vX.Y.Z

1. Publish the package

        npm publish



================================================
FILE: README.md
================================================
# Node Inspector

[![Build Status](https://travis-ci.org/node-inspector/node-inspector.svg?branch=master)](https://travis-ci.org/node-inspector/node-inspector)
[![NPM version](https://badge.fury.io/js/node-inspector.svg)](http://badge.fury.io/js/node-inspector)
[![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=195817)](https://www.bountysource.com/trackers/195817-node-inspector?utm_source=195817&utm_medium=shield&utm_campaign=TRACKER_BADGE)

[![Join the chat at https://gitter.im/node-inspector/node-inspector](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/node-inspector/node-inspector?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

## Overview

Node Inspector is a debugger interface for Node.js applications that uses the Blink Developer Tools (formerly WebKit Web Inspector).

**Since version 6.3, Node.js provides a built-in DevTools-based debugger which mostly deprecates Node Inspector, see e.g. [this blog post](https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.pmqejrn8q) to get started. The built-in debugger is developed directly by the V8/Chromium team and provides certain advanced features (e.g. long/async stack traces) that are too difficult to implement in Node Inspector.**


### Table of Content

 * [Quick Start](#quick-start)
 * [Features](#features)
 * [Known Issues](#known-issues)
 * [Troubleshooting](#troubleshooting)
 * [Advanced Use](#advanced-use)
 * [Configuration](#configuration)
 * [Contributing](#contributing-code)
 * [Credits](#credits)

## Quick Start

#### Install

```sh
$ npm install -g node-inspector
```

#### Start

```sh
$ node-debug app.js
```

where ```app.js``` is the name of your main Node application JavaScript file.

See available configuration options [here](https://github.com/node-inspector/node-inspector#configuration)

#### Debug

The `node-debug` command will load Node Inspector in your default browser.

> **NOTE:** Node Inspector works in Chrome and Opera only. You have to re-open
the inspector page in one of those browsers if another browser
is your default web browser (e.g. Safari or Internet Explorer).

Node Inspector works almost exactly as the Chrome Developer Tools. Read the
excellent
[DevTools overview](https://developer.chrome.com/devtools/index)
to get started.

Other useful resources:
 - Documentation specific to Node Inspector provided by StrongLoop:
  [Debugging with Node Inspector](http://docs.strongloop.com/display/SLC/Debugging+applications)
 - Miroslav's talk
  [How to Debug Node Apps with Node Inspector](https://vimeo.com/77870960)
 - Danny's [screencasts](http://www.youtube.com/view_play_list?p=A5216AC29A41EFA8)
   (most likely outdated by now)
 - [Getting Started from scratch](http://github.com/node-inspector/node-inspector/wiki/Getting-Started---from-scratch)
   on wiki (most likely outdated by now)

## Features

The Blink DevTools debugger is a powerful JavaScript debugger interface.
Node Inspector supports almost all of the debugging features of DevTools, including:

* Navigate in your source files
* Set breakpoints (and specify trigger conditions)
* Step over, step in, step out, resume (continue)
* Inspect scopes, variables, object properties
* Hover your mouse over an expression in your source to display its value in
  a tooltip
* Edit variables and object properties
* Continue to location
* Break on exceptions
* Disable/enable all breakpoints
* CPU and HEAP profiling
* Network client requests inspection
* Console output inspection

### Cool stuff
* Node Inspector uses WebSockets, so no polling for breaks.
* Remote debugging and debugging remote machine.
* [Live edit of running code](http://github.com/node-inspector/node-inspector/wiki/LiveEdit),
  optionally persisting changes back to the file-system.
* Set breakpoints in files that are not loaded into V8 yet - useful for
  debugging module loading/initialization.
* Embeddable in other applications - see [Embedding HOWTO](docs/embedding.md)
  for more details.

## Known Issues

* Be careful about viewing the contents of Buffer objects,
  each byte is displayed as an individual array element;
  for most Buffers this will take too long to render.
* While not stopped at a breakpoint the console doesn't always
  behave as you might expect. See the
  [issue #146](https://github.com/node-inspector/node-inspector/issues/146).
* Break on uncaught exceptions does not work in all Node versions,
  you need at least v0.11.3 (see
  [node#5713](https://github.com/joyent/node/pull/5713)).
* Debugging multiple processes (e.g. cluster) is cumbersome.
  Read the following blog post for instructions:
  [Debugging Clustered Apps with Node-Inspector](http://strongloop.com/strongblog/whats-new-nodejs-v0-12-debugging-clusters/)

## Troubleshooting

#### My script runs too fast to attach the debugger.

The debugged process must be started with `--debug-brk`, this way the script is paused on the first line.

Note: `node-debug` adds this option for you by default.

#### I got the UI in a weird state.

When in doubt, refresh the page in browser

#### Can I debug remotely?

Yes. Node Inspector must be running on the same machine, but your browser can be anywhere.
Just make sure port 8080 is accessible.

And if Node Inspector is not running on your remote machine, you can also debug it as long as your local machine can connect it.
In this way, you must launch Node Inspector with `--no-inject` which means some features are not supported such as profiling and consoling output inspection.

So how to debug remote machine with your local Node Inspector?

##### option 1
$ node-inspector --debug-host 192.168.0.2 --no-inject
then open the url
http://127.0.0.1:8080/debug?port=5858

##### option 2
$ node-inspector  --no-inject
then specify the remote machine address as a host parameter in the url
e.g.) http://127.0.0.1:8080/debug?host=192.168.123.12&port=5858

#### How do I specify files to hide?

Create a JSON-encoded array.  You must escape quote characters when using a command-line option.

```sh
$ node-inspector --hidden='["node_modules/framework"]'
```

Note that the array items are interpreted as regular expressions.

#### UI doesn't load or doesn't work and refresh didn't help

Make sure that you have adblock disabled as well as any other content blocking scripts and plugins.

#### How can I (selectively) delete debug session metadata?

You may want to delete debug session metadata if for example Node Inspector gets in a bad state with some
watch variables that were function calls (possibly into some special c-bindings).  In such cases, even restarting
the application/debug session may not fix the problem.

Node Inspector stores debug session metadata in the HTML5 local storage.
You can inspect the contents of local storage and remove any items as
needed. In Google Chrome, you can execute any of the following in the JavaScript console:

```js
// Remove all
window.localStorage.clear()
// Or, to list keys so you can selectively remove them with removeItem()
window.localStorage
// Remove all the watch expressions
window.localStorage.removeItem('watchExpressions')
// Remove all the breakpoints
window.localStorage.removeItem('breakpoints')
```

When you are done cleaning up, hit refresh in the browser.

#### Node Inspector takes a long time to start up.

Try setting --no-preload to true. This option disables searching disk for *.js at startup.
Code will still be loaded into Node Inspector at runtime, as modules are required.

#### How do I debug Mocha unit-tests?

You have to start `_mocha` as the debugged process and make sure
the execution pauses on the first line. This way you have enough
time to set your breakpoints before the tests are run.

```sh
$ node-debug _mocha
```

#### How do I debug Gulp tasks?

If you are running on a Unix system you can simply run the following command.
The `$(which ..)` statement gets replaced with the full path to the gulp-cli.

```sh
$ node-debug $(which gulp) task
```

If you are running on Windows, you have to get the full path of `gulp.js`
to make an equivalent command:

```sh
> node-debug %appdata%\npm\node_modules\gulp\bin\gulp.js task
```
*You can omit the `task` part to run the `default` task.*

## Advanced Use

While running `node-debug` is a convenient way to start your debugging
session, there may come time when you need to tweak the default setup.

There are three steps needed to get you up and debugging:

#### 1. Start the Node Inspector server

```sh
$ node-inspector
```

You can leave the server running in background, it's possible to debug
multiple processes using the same server instance.

#### 2. Enable debug mode in your Node process

You can either start Node with a debug flag like:

```sh
$ node --debug your/node/program.js
```

or, to pause your script on the first line:

```sh
$ node --debug-brk your/short/node/script.js
```

Or you can enable debugging on a node that is already running by sending
it a signal:

1. Get the PID of the node process using your favorite method.
`pgrep` or `ps -ef` are good

    ```sh
    $ pgrep -l node
    2345 node your/node/server.js
    ```

2. Send it the USR1 signal

    ```sh
    $ kill -s USR1 2345
    ```

##### Windows

Windows does not support UNIX signals. To enable debugging, you can use
an undocumented API function `process._debugProcess(pid)`:

1. Get the PID of the node process using your favorite method, e.g.

    ```sh
    > tasklist /FI "IMAGENAME eq node.exe"

    Image Name                     PID Session Name        Session#    Mem Usage
    ========================= ======== ================ =========== ============
    node.exe                      3084 Console                    1     11,964 K
    ```

2. Call the API:

    ```sh
    > node -e "process._debugProcess(3084)"
    ```

#### 3. Load the debugger UI

Open http://127.0.0.1:8080/?port=5858 in the Chrome browser.

## Configuration

Both `node-inspector` and `node-debug` use [rc](https://npmjs.org/package/rc) module
to manage configuration options.

Places for configuration:
* command line arguments (parsed by [yargs](https://github.com/chevex/yargs))
* environment variables prefixed with ```node-inspector_```
* if you passed an option ```--config file``` then from that file
* a local ```.node-inspectorrc``` or the first found looking in ```./ ../ ../../
 ../../../``` etc.
* ```$HOME/.node-inspectorrc```
* ```$HOME/.node-inspector/config```
* ```$HOME/.config/node-inspector```
* ```$HOME/.config/node-inspector/config```
* ```/etc/node-inspectorrc```
* ```/etc/node-inspector/config```

All configuration sources that where found will be flattened into one object,
so that sources earlier in this list override later ones.

### Options

| Option | Alias | Default | Description |
| :------------------ | :-: | :-----: | :-------- |
| **general**
| --help              | -h  |         | Display information about available options.<br/>Use `--help -l` to display full usage info.<br/>Use `--help <option>` to display quick help on `option`.
| --version           | -v  |         | Display Node Inspector's version.
| --debug-port        | -d  | 5858    | Node/V8 debugger port.<br/>(`node --debug={port}`)
| --web-host          |     | 0.0.0.0 | Host to listen on for Node Inspector's web interface.<br/>`node-debug` listens on `127.0.0.1` by default.
| --web-port          | -p  | 8080    | Port to listen on for Node Inspector's web interface.
| **node-debug**
| --debug-brk         | -b  | true    | Break on the first line.<br/>(`node --debug-brk`)
| --nodejs            |     | []      | Pass NodeJS options to debugged process.<br/>(`node --option={value}`)
| --script            |     | []      | Pass options to debugged process.<br/>(`node app --option={value}`)
| --cli               | -c  | false   | CLI mode, do not open browser.
| **node-inspector**
| --save-live-edit    |     | false   | Save live edit changes to disk (update the edited files).
| --preload           |     | true    | Preload *.js files. You can disable this option<br/>to speed up the startup.
| --inject            |     | true    | Enable injection of debugger extensions into the debugged process. It's possible disable only part of injections using subkeys `--no-inject.network`. Allowed keys : `network`, `profiles`, `console`.
| --hidden            |     | []      | Array of files to hide from the UI,<br/>breakpoints in these files will be ignored.<br/>All paths are interpreted as regular expressions.
| --stack-trace-limit |     | 50      | Number of stack frames to show on a breakpoint.
| --ssl-key           |     |         | Path to file containing a valid SSL key.
| --ssl-cert          |     |         | Path to file containing a valid SSL certificate.

### Usage examples

#### Command line
##### Format
```
$ node-debug [general-options] [node-debug-options] [node-inspector-options] [script]
```

```
$ node-inspector [general-options] [node-inspector-options]
```
##### Usage

Display full usage info:
```
$ node-debug --help -l
```
Set debug port of debugging process to `5859`:
```
$ node-debug -p 5859 app
```
Pass `--web-host=127.0.0.2` to node-inspector. Start node-inspector to listen on `127.0.0.2`:
```
$ node-debug --web-host 127.0.0.2 app
```
Pass `--option=value` to debugging process:
```
$ node-debug app --option value
```
Start node-inspector to listen on HTTPS:
```
$ node-debug --ssl-key ./ssl/key.pem --ssl-cert ./ssl/cert.pem app
```
Ignore breakpoints in files stored in `node_modules` folder or ending in `.test.js`:
```
$ node-debug --hidden node_modules/ --hidden \.test\.js$ app
```
Add `--harmony` flag to the node process running the debugged script:
```
$ node-debug --nodejs --harmony app
```
Disable preloading of `.js` files:
```
$ node-debug --no-preload app
```

#### RC Configuration

Use dashed option names in RC files. Sample config file (to be saved as `.node-inspectorrc`):
```js
{
  "web-port": 8088,
  "web-host": "0.0.0.0",
  "debug-port": 5858,
  "save-live-edit": true,
  "preload": false,
  "hidden": ["\.test\.js$", "node_modules/"],
  "nodejs": ["--harmony"],
  "stack-trace-limit": 50,
  "ssl-key": "./ssl/key.pem",
  "ssl-cert": "./ssl/cert.pem"
}
```

## Contributing Code

Making Node Inspector the best debugger for node.js cannot be achieved without
the help of the community. The following resources should help you to get
started.

* [Contributing](https://github.com/node-inspector/node-inspector/wiki/Contributing)
* [Developer's Guide](https://github.com/node-inspector/node-inspector/wiki/Developer%27s-Guide)
* [Easy Picks](https://github.com/node-inspector/node-inspector/issues?direction=asc&labels=Easy+Pick&page=1&sort=updated&state=open)

## Credits

#### Current maintainers

 - [淘小杰 (hustxiaoc)](https://github.com/hustxiaoc)

#### Alumni

 - [Danny Coates](https://github.com/dannycoates) - the original author and a sole maintainer for several years.
 - [Miroslav Bajtoš](https://github.com/bajtos) - sponsored by [StrongLoop](http://strongloop.com), maintained Node Inspector through the Node.js 0.10 era.
 - [3y3](https://github.com/3y3) - maintained Node Inspector in 2015-2016

#### Contributors


Big thanks to the many contributors to the project, see [Contributors on GitHub](https://github.com/node-inspector/node-inspector/graphs/contributors)


================================================
FILE: bin/inspector.js
================================================
#!/usr/bin/env node

var DebugServer = require('../lib/debug-server').DebugServer,
    fs = require('fs'),
    path = require('path'),
    Config = require('../lib/config'),
    packageJson = require('../package.json');

var config = new Config(process.argv.slice(2));

if (config.help) {
  config.showHelp();
  process.exit();
}

if (config.version) {
  config.showVersion();
  process.exit();
}

process.on('SIGINT', function() {
   process.exit();
});

console.log('Node Inspector v%s', packageJson.version);

var debugServer = new DebugServer();
debugServer.on('error', onError);
debugServer.on('listening', onListening);
debugServer.on('close', function () {
  process.exit();
});
debugServer.start(config);

function onError(err) {
  console.error(
    'Cannot start the server at %s:%s. Error: %s.',
    config.webHost,
    config.webPort,
    err.message || err
  );

  if (err.code === 'EADDRINUSE') {
    console.error(
      'There is another process already listening at this address.\n' +
      'Run `node-inspector --web-port={port}` to use a different port.'
    );
  }

  notifyParentProcess({
    event: 'SERVER.ERROR',
    error: err
  });
}

function onListening() {
  var address = this.address();
  console.log('Visit %s to start debugging.', address.url);

  notifyParentProcess({
    event: 'SERVER.LISTENING',
    address: address
  });
}

function notifyParentProcess(msg) {
  if (!process.send) return;

  process.send(msg);
}


================================================
FILE: bin/node-debug.js
================================================
#!/usr/bin/env node

var Config = require('../lib/config');
var fork = require('child_process').fork;
var fs = require('fs');
var path = require('path');
var util = require('util');
var open = require('biased-opener');
var whichSync = require('which').sync;
var inspector = require('..');

var WIN_CMD_LINK_MATCHER = /node  "%~dp0\\(.*?)"/;
var NODE_DEBUG_MODE = true;

module.exports = main;
module.exports.createConfig = createConfig;

var inspectorProcess;
var debuggedProcess;

if (require.main == module)
  main();

//-- Implementation --

var config;

/**
 * By default:
 *
 * 1. Runs node-inspector.
 * 2. Runs the supplied script in debug mode
 * 3. Opens the user's browser, pointing it at the inspector.
 *
 * NOTE: Finishes with a call to process.exit() when running without arguments
 * or when an error occured.
 */
function main() {
  config = createConfig(process.argv.slice(2));

  if (config.options.help) {
    config.options.showHelp(NODE_DEBUG_MODE);
    process.exit();
  }

  if (config.options.version) {
    config.options.showVersion();
    process.exit();
  }

  process.on('SIGINT', function() {
     process.exit();
  });

  startInspectorProcess(function(error, result) {
    if (error) {
      console.error(formatNodeInspectorError(error));
      process.exit(1);
    }

    var url = result.address.url;
    var isUnixSocket = result.address.isUnixSocket;

    startDebuggedProcess(function(error) {
      if (error) {
        console.error('Cannot start %s: %s', config.subproc.script, error.message || error);
        process.exit(2);
      }

      openBrowserAndPrintInfo(url, isUnixSocket);
    });
  });
}

function createConfig(argv) {
  var options = new Config(argv, NODE_DEBUG_MODE);
  var script = options._[0];
  var printScript = true;

  var subprocArgs;

  if (script) {
    // We want to pass along subarguments, but re-parse our arguments.
    subprocArgs = argv.splice(argv.indexOf(script) + 1);
  } else {
    script = require.resolve('./run-repl');
    subprocArgs = [];
    printScript = false;
    process.env.CMD = process.env.CMD || process.argv[1];
  }

  var inspectorArgs = Config.serializeOptions(
    Config.filterDefaultValues(
      Config.filterNodeDebugOptions(options)),
    {_: true, $0: true });

  var subprocDebugOption = (options.debugBrk ? '--debug-brk' : '--debug') + '=' + options.debugPort;
  var subprocExecArgs = options.nodejs.concat(subprocDebugOption);

  return {
    printScript: printScript,
    options: options,
    subproc: {
      script: script,
      args: subprocArgs,
      execArgs:  subprocExecArgs,
      debugPort: options.debugPort
    },
    inspector: {
      host: options.webHost,
      port: options.webPort,
      args: inspectorArgs
    }
  };
}

function getCmd() {
  return process.env.CMD || path.basename(process.argv[1]);
}

function startInspectorProcess(callback) {
  inspectorProcess = fork(
    require.resolve('./inspector'),
    config.inspector.args,
    { silent: false }
  );

  inspectorProcess.once('message', function(msg) {
    switch (msg.event) {
    case 'SERVER.LISTENING':
      return callback(null, msg);
    case 'SERVER.ERROR':
      return callback(msg.error);
    default:
      return callback(new Error('Unknown Node Inspector event: ' + msg.event));
    }
  });

  process.on('exit', function() {
    inspectorProcess.kill('SIGINT');
  });
}

function formatNodeInspectorError(err) {
  var reason = err.message || err.code || err;
  if (err.code === 'EADDRINUSE') {
    reason += '\nThere is another process already listening at ' +
      config.inspector.host + ':' +
      config.inspector.port + '.\n' +
      'Run `' + getCmd() + ' -p {port}` to use a different port.';
  }

  return util.format('Cannot start Node Inspector:', reason);
}

function startDebuggedProcess(callback) {
  var script = path.resolve(process.cwd(), config.subproc.script);
  if (!fs.existsSync(script)) {
    try {
      script = whichSync(config.subproc.script);
      script = checkWinCmdFiles(script);
    } catch (err) {
      return  callback(err);
    }
  }

  debuggedProcess = fork(
    script,
    config.subproc.args,
    {
      execArgv: config.subproc.execArgs
    }
  );
  debuggedProcess.on('exit', function() { process.exit(); });
  callback();
}

function checkWinCmdFiles(script) {
  if (process.platform == 'win32' && path.extname(script).toLowerCase() == '.cmd') {
    var cmdContent = '' + fs.readFileSync(script);
    var link = (WIN_CMD_LINK_MATCHER.exec(cmdContent) || [])[1];

    if (link) script = path.resolve(path.dirname(script), link);
  }
  return script;
}

function openBrowserAndPrintInfo(url, isUnixSocket) {
  if (!config.options.cli && !isUnixSocket) {
    // try to launch the URL in one of those browsers in the defined order
    // (but if one of them is default browser, then it takes priority)
    open(url, {
        preferredBrowsers : ['chrome', 'chromium', 'opera']
      }, function(err, okMsg) {
        if (err) {
           // unable to launch one of preferred browsers for some reason
           console.log(err.message);
           console.log('Please open the URL manually in Chrome/Chromium/Opera or similar browser');
        }
    });
  }

  if (config.printScript)
    console.log('Debugging `%s`\n', config.subproc.script);
}


================================================
FILE: bin/run-repl.js
================================================
// Load the module contained in the current directory (cwd) and start REPL
// NOTE: Calls process.exit() after REPL was closed

var Module = require('module');
var path = require('path');
var repl = require('repl');
var util = require('util');

var location = process.cwd();

var moduleToDebug;
var sampleLine;
var prompt;

try {
  loadAndDescribeModuleInCwd();
} catch (e) {
  sampleLine = util.format(
    'The module in the current directory was not loaded: %s.',
    e.message || e
  );
}

startRepl();

//---- Implementation ----

function loadAndDescribeModuleInCwd() {
// Hack: Trick node into changing process.mainScript to moduleToDebug
  moduleToDebug = Module._load(location, module, true);

  var sample = getSampleCommand();
  sampleLine = util.format('You can access your module as `m`%s.', sample);

  prompt = getModuleName() + '> ';
}

function startRepl() {
  var cmd = process.env.CMD || process.argv[1];

  console.log(
    '\nStarting the interactive shell (REPL). Type `.help` for help.\n' +
      '%s\n' +
      'Didn\'t want to start REPL? Run `%s .` instead.',
    sampleLine,
    cmd
  );

  var r = repl.start( { prompt: prompt });
  if (moduleToDebug !== undefined)
    r.context.m = moduleToDebug;
  r.on('exit', onReplExit);
}

function onReplExit() {
  console.log('\nLeaving the interactive shell (REPL).');
  process.exit();
}

function getModuleName() {
  try {
    var packageJson = require(path.join(location, 'package.json'));
    if (packageJson.name)
      return packageJson.name;
  } catch (e) {
    // ignore missing package.json
  }

  return path.basename(location);
}

function getSampleCommand() {
  var exportedSymbols = Object.keys(moduleToDebug);
  if (!exportedSymbols.length) return '';

  var sample = exportedSymbols[0];
  if (typeof(moduleToDebug[sample]) === 'function')
    sample += '()';

  return ', e.g. `m.' + sample + '`';
}


================================================
FILE: docs/embedding.md
================================================
# HOWTO embed Node Inspector

Node Inspector provides two ways of embedding in third-party
applications.

## 1. Running in a new node process

1. Start the Node Inspector in a new process using
  [child_process.fork()](http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options)
2. Add `message` handler to get notified about Node Inspector events, use
  `msg.event` to check which event was emitted.

```js
var fork = require('child_process').fork;

var inspectorArgs = [];
var forkOptions = { silent: true };
var inspector = fork(
  require.resolve('node-inspector/bin/inspector'),
  inspectorArgs,
  forkOptions
);

inspector.on('message', handleInspectorMessage);

function handleInspectorMessage(msg) {
  switch(msg.event) {
    case 'SERVER.LISTENING':
      console.log('Visit %s to start debugging.', msg.address.url);
      break;
    case 'SERVER.ERROR':
      console.log('Cannot start the server: %s.', msg.error.code);
      break;
  }
}
```

### Event: 'SERVER.LISTENING'

Emitted when the HTTP server was bound and is ready to accept connections.

Properties:

 * `address` - Server address as returned by `DebugServer.address()` (see
   below).

### Event: 'SERVER.ERROR'

Emitted when there was an error while setting up the HTTP server.

Properties:

 * `error` - The error.

## 2. Running in an existing process

To be done. [index.js](../index.js) should expose method for creating and starting
a DebugServer instance with a given config.

DebugServer is already exposing the following API:

### debugServer.address()

Returns the result of `server.address()` plus the URL of the Node Inspector
page to open in browser.

Example:
```js
{
  port: 8080,
  address: '0.0.0.0',
  url: 'http://localhost:8080/debug?port=5858'
}
```

### Event: 'listening'

Emitted when the HTTP server was bound and is ready to accept connections.

### Event: 'error'

* Error Object

Emitted when there is an error in setting up the HTTP server.



================================================
FILE: front-end/Images/src/optimize_png.hashes
================================================
{
    "breakpointConditional.svg": "4cf90210b2af2ed84db2f60b07bcde28",
    "errorWave.svg": "e183fa242a22ed4784a92f6becbc2c45",
    "settingsListRemove.svg": "ce9e7c5c5cdaef28e6ee51d9478d5485",
    "breakpoint.svg": "69cd92d807259c022791112809b97799",
    "statusbarButtonGlyphs.svg": "8e09966eb691010ba2b19858115a0c77",
    "responsiveDesign.svg": "1d6e963f88e5e448a7cff85f75a0e6b0"
}

================================================
FILE: front-end/Images/src/svg2png.hashes
================================================
{
    "breakpointConditional.svg": "4cf90210b2af2ed84db2f60b07bcde28",
    "errorWave.svg": "e183fa242a22ed4784a92f6becbc2c45",
    "settingsListRemove.svg": "ce9e7c5c5cdaef28e6ee51d9478d5485",
    "breakpoint.svg": "69cd92d807259c022791112809b97799",
    "statusbarButtonGlyphs.svg": "8e09966eb691010ba2b19858115a0c77",
    "responsiveDesign.svg": "1d6e963f88e5e448a7cff85f75a0e6b0"
}

================================================
FILE: front-end/OWNERS
================================================
aandrey@chromium.org
apavlov@chromium.org
caseq@chromium.org
dgozman@chromium.org
loislo@chromium.org
pfeldman@chromium.org
vsevik@chromium.org
yurys@chromium.org


================================================
FILE: front-end/Runtime.js
================================================
/*
 * Copyright (C) 2014 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

// This gets all concatenated module descriptors in the release mode.
var allDescriptors = [];
var applicationDescriptor;
var _loadedScripts = {};

/**
 * @param {string} url
 * @return {!Promise.<string>}
 */
function loadResourcePromise(url)
{
    return new Promise(load);

    /**
     * @param {function(?)} fulfill
     * @param {function(*)} reject
     */
    function load(fulfill, reject)
    {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", url, true);
        xhr.onreadystatechange = onreadystatechange;

        /**
         * @param {Event} e
         */
        function onreadystatechange(e)
        {
            if (xhr.readyState !== 4)
                return;

            if ([0, 200, 304].indexOf(xhr.status) === -1)  // Testing harness file:/// results in 0.
                reject(new Error("While loading from url " + url + " server responded with a status of " + xhr.status));
            else
                fulfill(e.target.response);
        }
        xhr.send(null);
    }
}

/**
 * http://tools.ietf.org/html/rfc3986#section-5.2.4
 * @param {string} path
 * @return {string}
 */
function normalizePath(path)
{
    if (path.indexOf("..") === -1 && path.indexOf('.') === -1)
        return path;

    var normalizedSegments = [];
    var segments = path.split("/");
    for (var i = 0; i < segments.length; i++) {
        var segment = segments[i];
        if (segment === ".")
            continue;
        else if (segment === "..")
            normalizedSegments.pop();
        else if (segment)
            normalizedSegments.push(segment);
    }
    var normalizedPath = normalizedSegments.join("/");
    if (normalizedPath[normalizedPath.length - 1] === "/")
        return normalizedPath;
    if (path[0] === "/" && normalizedPath)
        normalizedPath = "/" + normalizedPath;
    if ((path[path.length - 1] === "/") || (segments[segments.length - 1] === ".") || (segments[segments.length - 1] === ".."))
        normalizedPath = normalizedPath + "/";

    return normalizedPath;
}

/**
 * @param {!Array.<string>} scriptNames
 * @return {!Promise.<undefined>}
 */
function loadScriptsPromise(scriptNames)
{
    /** @type {!Array.<!Promise.<string>>} */
    var promises = [];
    /** @type {!Array.<string>} */
    var urls = [];
    var sources = new Array(scriptNames.length);
    var scriptToEval = 0;
    for (var i = 0; i < scriptNames.length; ++i) {
        var scriptName = scriptNames[i];
        var sourceURL = self._importScriptPathPrefix + scriptName;
        var schemaIndex = sourceURL.indexOf("://") + 3;
        sourceURL = sourceURL.substring(0, schemaIndex) + normalizePath(sourceURL.substring(schemaIndex));
        if (_loadedScripts[sourceURL])
            continue;
        urls.push(sourceURL);
        promises.push(loadResourcePromise(sourceURL).then(scriptSourceLoaded.bind(null, i), scriptSourceLoaded.bind(null, i, undefined)));
    }
    return Promise.all(promises).then(undefined);

    /**
     * @param {number} scriptNumber
     * @param {string=} scriptSource
     */
    function scriptSourceLoaded(scriptNumber, scriptSource)
    {
        sources[scriptNumber] = scriptSource || "";
        // Eval scripts as fast as possible.
        while (typeof sources[scriptToEval] !== "undefined") {
            evaluateScript(urls[scriptToEval], sources[scriptToEval]);
            ++scriptToEval;
        }
    }

    /**
     * @param {string} sourceURL
     * @param {string=} scriptSource
     */
    function evaluateScript(sourceURL, scriptSource)
    {
        _loadedScripts[sourceURL] = true;
        if (!scriptSource) {
            // Do not reject, as this is normal in the hosted mode.
            console.error("Empty response arrived for script '" + sourceURL + "'");
            return;
        }
        self.eval(scriptSource + "\n//# sourceURL=" + sourceURL);
    }
}

(function() {
    var baseUrl = self.location ? self.location.origin + self.location.pathname : "";
    self._importScriptPathPrefix = baseUrl.substring(0, baseUrl.lastIndexOf("/") + 1);
})();

/**
 * @constructor
 * @param {!Array.<!Runtime.ModuleDescriptor>} descriptors
 * @param {!Array.<string>=} coreModuleNames
 */
function Runtime(descriptors, coreModuleNames)
{
    /**
     * @type {!Array.<!Runtime.Module>}
     */
    this._modules = [];
    /**
     * @type {!Object.<string, !Runtime.Module>}
     */
    this._modulesMap = {};
    /**
     * @type {!Array.<!Runtime.Extension>}
     */
    this._extensions = [];

    /**
     * @type {!Object.<string, !function(new:Object)>}
     */
    this._cachedTypeClasses = {};

    /**
     * @type {!Object.<string, !Runtime.ModuleDescriptor>}
     */
    this._descriptorsMap = {};

    for (var i = 0; i < descriptors.length; ++i)
        this._registerModule(descriptors[i]);
    if (coreModuleNames)
        this._loadAutoStartModules(coreModuleNames).catch(Runtime._reportError);
}

/**
 * @type {!Object.<string, string>}
 */
Runtime._queryParamsObject = { __proto__: null };

/**
 * @type {!Object.<string, string>}
 */
Runtime.cachedResources = { __proto__: null };

/**
 * @return {boolean}
 */
Runtime.isReleaseMode = function()
{
    return !!allDescriptors.length;
}

/**
 * @param {string} appName
 */
Runtime.startApplication = function(appName)
{
    console.timeStamp("Runtime.startApplication");

    var allDescriptorsByName = {};
    for (var i = 0; Runtime.isReleaseMode() && i < allDescriptors.length; ++i) {
        var d = allDescriptors[i];
        allDescriptorsByName[d["name"]] = d;
    }

    var applicationPromise;
    if (applicationDescriptor)
        applicationPromise = Promise.resolve(applicationDescriptor);
    else
        applicationPromise = loadResourcePromise(appName + ".json").then(JSON.parse.bind(JSON));

    applicationPromise.then(parseModuleDescriptors);

    /**
     * @param {!Array.<!Object>} configuration
     */
    function parseModuleDescriptors(configuration)
    {
        var moduleJSONPromises = [];
        var coreModuleNames = [];
        for (var i = 0; i < configuration.length; ++i) {
            var descriptor = configuration[i];
            if (descriptor["type"] === "worker")
                continue;
            var name = descriptor["name"];
            var moduleJSON = allDescriptorsByName[name];
            if (moduleJSON)
                moduleJSONPromises.push(Promise.resolve(moduleJSON));
            else
                moduleJSONPromises.push(loadResourcePromise(name + "/module.json").then(JSON.parse.bind(JSON)));
            if (descriptor["type"] === "autostart")
                coreModuleNames.push(name);
        }

        Promise.all(moduleJSONPromises).then(instantiateRuntime).catch(Runtime._reportError);
        /**
         * @param {!Array.<!Object>} moduleDescriptors
         */
        function instantiateRuntime(moduleDescriptors)
        {
            for (var i = 0; !Runtime.isReleaseMode() && i < moduleDescriptors.length; ++i)
                moduleDescriptors[i]["name"] = configuration[i]["name"];
            self.runtime = new Runtime(moduleDescriptors, coreModuleNames);
        }
    }
}

/**
 * @param {string} name
 * @return {?string}
 */
Runtime.queryParam = function(name)
{
    return Runtime._queryParamsObject[name] || null;
}

/**
 * @param {!Array.<string>} banned
 * @return {string}
 */
Runtime.constructQueryParams = function(banned)
{
    var params = [];
    for (var key in Runtime._queryParamsObject) {
        if (!key || banned.indexOf(key) !== -1)
            continue;
        params.push(key + "=" + Runtime._queryParamsObject[key]);
    }
    return params.length ? "?" + params.join("&") : "";
}

/**
 * @return {!Object}
 */
Runtime._experimentsSetting = function()
{
    try {
        return /** @type {!Object} */ (JSON.parse(self.localStorage && self.localStorage["experiments"] ? self.localStorage["experiments"] : "{}"));
    } catch (e) {
        console.error("Failed to parse localStorage['experiments']");
        return {};
    }
}

/**
 * @param {!Array.<!Promise.<T, !Error>>} promises
 * @return {!Promise.<!Array.<T>>}
 * @template T
 */
Runtime._some = function(promises)
{
    var all = [];
    var wasRejected = [];
    for (var i = 0; i < promises.length; ++i) {
        // Workaround closure compiler bug.
        var handlerFunction = /** @type {function()} */ (handler.bind(promises[i], i));
        all.push(promises[i].catch(handlerFunction));
    }

    return Promise.all(all).then(filterOutFailuresResults);

    /**
     * @param {!Array.<T>} results
     * @return {!Array.<T>}
     * @template T
     */
    function filterOutFailuresResults(results)
    {
        var filtered = [];
        for (var i = 0; i < results.length; ++i) {
            if (!wasRejected[i])
                filtered.push(results[i]);
        }
        return filtered;
    }

    /**
     * @this {!Promise}
     * @param {number} index
     * @param {!Error} e
     */
    function handler(index, e)
    {
        wasRejected[index] = true;
        console.error(e.stack);
    }
}

Runtime._console = console;
Runtime._originalAssert = console.assert;
Runtime._assert = function(value, message)
{
    if (value)
        return;
    Runtime._originalAssert.call(Runtime._console, value, message);
}

/**
 * @param {*} e
 */
Runtime._reportError = function(e)
{
    if (e instanceof Error)
        console.error(e.stack);
    else
        console.error(e);
}

Runtime.prototype = {

    /**
     * @param {!Runtime.ModuleDescriptor} descriptor
     */
    _registerModule: function(descriptor)
    {
        var module = new Runtime.Module(this, descriptor);
        this._modules.push(module);
        this._modulesMap[descriptor["name"]] = module;
    },

    /**
     * @param {string} moduleName
     * @return {!Promise.<undefined>}
     */
    loadModulePromise: function(moduleName)
    {
        return this._modulesMap[moduleName]._loadPromise();
    },

    /**
     * @param {!Array.<string>} moduleNames
     * @return {!Promise.<!Array.<*>>}
     */
    _loadAutoStartModules: function(moduleNames)
    {
        var promises = [];
        for (var i = 0; i < moduleNames.length; ++i) {
            if (Runtime.isReleaseMode())
                this._modulesMap[moduleNames[i]]._loaded = true;
            else
                promises.push(this.loadModulePromise(moduleNames[i]));
        }
        return Promise.all(promises);
    },

    /**
     * @param {!Runtime.Extension} extension
     * @param {?function(function(new:Object)):boolean} predicate
     * @return {boolean}
     */
    _checkExtensionApplicability: function(extension, predicate)
    {
        if (!predicate)
            return false;
        var contextTypes = /** @type {!Array.<string>|undefined} */ (extension.descriptor().contextTypes);
        if (!contextTypes)
            return true;
        for (var i = 0; i < contextTypes.length; ++i) {
            var contextType = this._resolve(contextTypes[i]);
            var isMatching = !!contextType && predicate(contextType);
            if (isMatching)
                return true;
        }
        return false;
    },

    /**
     * @param {!Runtime.Extension} extension
     * @param {?Object} context
     * @return {boolean}
     */
    isExtensionApplicableToContext: function(extension, context)
    {
        if (!context)
            return true;
        return this._checkExtensionApplicability(extension, isInstanceOf);

        /**
         * @param {!Function} targetType
         * @return {boolean}
         */
        function isInstanceOf(targetType)
        {
            return context instanceof targetType;
        }
    },

    /**
     * @param {!Runtime.Extension} extension
     * @param {!Set.<!Function>=} currentContextTypes
     * @return {boolean}
     */
    isExtensionApplicableToContextTypes: function(extension, currentContextTypes)
    {
        if (!extension.descriptor().contextTypes)
            return true;

        return this._checkExtensionApplicability(extension, currentContextTypes ? isContextTypeKnown : null);

        /**
         * @param {!Function} targetType
         * @return {boolean}
         */
        function isContextTypeKnown(targetType)
        {
            return currentContextTypes.has(targetType);
        }
    },

    /**
     * @param {*} type
     * @param {?Object=} context
     * @return {!Array.<!Runtime.Extension>}
     */
    extensions: function(type, context)
    {
        return this._extensions.filter(filter).sort(orderComparator);

        /**
         * @param {!Runtime.Extension} extension
         * @return {boolean}
         */
        function filter(extension)
        {
            if (extension._type !== type && extension._typeClass() !== type)
                return false;
            var activatorExperiment = extension.descriptor()["experiment"];
            if (activatorExperiment && !Runtime.experiments.isEnabled(activatorExperiment))
                return false;
            activatorExperiment = extension._module._descriptor["experiment"];
            if (activatorExperiment && !Runtime.experiments.isEnabled(activatorExperiment))
                return false;
            return !context || extension.isApplicable(context);
        }

        /**
         * @param {!Runtime.Extension} extension1
         * @param {!Runtime.Extension} extension2
         * @return {number}
         */
        function orderComparator(extension1, extension2)
        {
            var order1 = extension1.descriptor()["order"] || 0;
            var order2 = extension2.descriptor()["order"] || 0;
            return order1 - order2;
        }
    },

    /**
     * @param {*} type
     * @param {?Object=} context
     * @return {?Runtime.Extension}
     */
    extension: function(type, context)
    {
        return this.extensions(type, context)[0] || null;
    },

    /**
     * @param {*} type
     * @param {?Object=} context
     * @return {!Promise.<!Array.<!Object>>}
     */
    instancesPromise: function(type, context)
    {
        var extensions = this.extensions(type, context);
        var promises = [];
        for (var i = 0; i < extensions.length; ++i)
            promises.push(extensions[i].instancePromise());
        return Runtime._some(promises);
    },

    /**
     * @param {*} type
     * @param {?Object=} context
     * @return {!Promise.<!Object>}
     */
    instancePromise: function(type, context)
    {
        var extension = this.extension(type, context);
        if (!extension)
            return Promise.reject(new Error("No such extension: " + type + " in given context."));
        return extension.instancePromise();
    },

    /**
     * @return {?function(new:Object)}
     */
    _resolve: function(typeName)
    {
        if (!this._cachedTypeClasses[typeName]) {
            var path = typeName.split(".");
            var object = window;
            for (var i = 0; object && (i < path.length); ++i)
                object = object[path[i]];
            if (object)
                this._cachedTypeClasses[typeName] = /** @type function(new:Object) */(object);
        }
        return this._cachedTypeClasses[typeName] || null;
    }
}

/**
 * @constructor
 */
Runtime.ModuleDescriptor = function()
{
    /**
     * @type {string}
     */
    this.name;

    /**
     * @type {!Array.<!Runtime.ExtensionDescriptor>}
     */
    this.extensions;

    /**
     * @type {!Array.<string>|undefined}
     */
    this.dependencies;

    /**
     * @type {!Array.<string>}
     */
    this.scripts;
}

/**
 * @constructor
 */
Runtime.ExtensionDescriptor = function()
{
    /**
     * @type {string}
     */
    this.type;

    /**
     * @type {string|undefined}
     */
    this.className;

    /**
     * @type {!Array.<string>|undefined}
     */
    this.contextTypes;
}

/**
 * @constructor
 * @param {!Runtime} manager
 * @param {!Runtime.ModuleDescriptor} descriptor
 */
Runtime.Module = function(manager, descriptor)
{
    this._manager = manager;
    this._descriptor = descriptor;
    this._name = descriptor.name;
    /** @type {!Object.<string, ?Object>} */
    this._instanceMap = {};
    var extensions = /** @type {?Array.<!Runtime.ExtensionDescriptor>} */ (descriptor.extensions);
    for (var i = 0; extensions && i < extensions.length; ++i)
        this._manager._extensions.push(new Runtime.Extension(this, extensions[i]));
    this._loaded = false;
}

Runtime.Module.prototype = {
    /**
     * @return {string}
     */
    name: function()
    {
        return this._name;
    },

    /**
     * @return {!Promise.<undefined>}
     */
    _loadPromise: function()
    {
        if (this._loaded)
            return Promise.resolve();

        if (this._pendingLoadPromise)
            return this._pendingLoadPromise;

        var dependencies = this._descriptor.dependencies;
        var dependencyPromises = [];
        for (var i = 0; dependencies && i < dependencies.length; ++i)
            dependencyPromises.push(this._manager._modulesMap[dependencies[i]]._loadPromise());

        this._pendingLoadPromise = Promise.all(dependencyPromises)
            .then(this._loadStylesheets.bind(this))
            .then(this._loadScripts.bind(this))
            .then(markAsLoaded.bind(this));

        return this._pendingLoadPromise;

        /**
         * @this {Runtime.Module}
         */
        function markAsLoaded()
        {
            delete this._pendingLoadPromise;
            this._loaded = true;
        }
    },

    /**
     * @return {!Promise.<undefined>}
     * @this {Runtime.Module}
     */
    _loadStylesheets: function()
    {
        var stylesheets = this._descriptor["stylesheets"];
        if (!stylesheets)
            return Promise.resolve();
        var promises = [];
        for (var i = 0; i < stylesheets.length; ++i) {
            var url = this._modularizeURL(stylesheets[i]);
            promises.push(loadResourcePromise(url).then(cacheStylesheet.bind(this, url), cacheStylesheet.bind(this, url, undefined)));
        }
        return Promise.all(promises).then(undefined);

        /**
         * @param {string} path
         * @param {string=} content
         */
        function cacheStylesheet(path, content)
        {
            if (!content) {
                console.error("Failed to load stylesheet: " + path);
                return;
            }
            var sourceURL = window.location.href;
            if (window.location.search)
                sourceURL.replace(window.location.search, "");
            sourceURL = sourceURL.substring(0, sourceURL.lastIndexOf("/") + 1) + path;
            Runtime.cachedResources[path] = content + "\n/*# sourceURL=" + sourceURL + " */";
        }
    },

    /**
     * @return {!Promise.<undefined>}
     */
    _loadScripts: function()
    {
        if (!this._descriptor.scripts)
            return Promise.resolve();

        if (Runtime.isReleaseMode())
            return loadScriptsPromise([this._name + "_module.js"]);

        return loadScriptsPromise(this._descriptor.scripts.map(this._modularizeURL, this)).catch(Runtime._reportError);
    },

    /**
     * @param {string} resourceName
     */
    _modularizeURL: function(resourceName)
    {
        return normalizePath(this._name + "/" + resourceName);
    },

    /**
     * @param {string} className
     * @return {?Object}
     */
    _instance: function(className)
    {
        if (className in this._instanceMap)
            return this._instanceMap[className];

        var constructorFunction = window.eval(className);
        if (!(constructorFunction instanceof Function)) {
            this._instanceMap[className] = null;
            return null;
        }

        var instance = new constructorFunction();
        this._instanceMap[className] = instance;
        return instance;
    }
}

/**
 * @constructor
 * @param {!Runtime.Module} module
 * @param {!Runtime.ExtensionDescriptor} descriptor
 */
Runtime.Extension = function(module, descriptor)
{
    this._module = module;
    this._descriptor = descriptor;

    this._type = descriptor.type;
    this._hasTypeClass = this._type.charAt(0) === "@";

    /**
     * @type {?string}
     */
    this._className = descriptor.className || null;
}

Runtime.Extension.prototype = {
    /**
     * @return {!Object}
     */
    descriptor: function()
    {
        return this._descriptor;
    },

    /**
     * @return {!Runtime.Module}
     */
    module: function()
    {
        return this._module;
    },

    /**
     * @return {?function(new:Object)}
     */
    _typeClass: function()
    {
        if (!this._hasTypeClass)
            return null;
        return this._module._manager._resolve(this._type.substring(1));
    },

    /**
     * @param {?Object} context
     * @return {boolean}
     */
    isApplicable: function(context)
    {
        return this._module._manager.isExtensionApplicableToContext(this, context);
    },

    /**
     * @return {!Promise.<!Object>}
     */
    instancePromise: function()
    {
        if (!this._className)
            return Promise.reject(new Error("No class name in extension"));
        var className = this._className;
        if (this._instance)
            return Promise.resolve(this._instance);

        return this._module._loadPromise().then(constructInstance.bind(this));

        /**
         * @return {!Object}
         * @this {Runtime.Extension}
         */
        function constructInstance()
        {
            var result = this._module._instance(className);
            if (!result)
                return Promise.reject("Could not instantiate: " + className);
            return result;
        }
    }
}

/**
 * @constructor
 */
Runtime.ExperimentsSupport = function()
{
    this._supportEnabled = Runtime.queryParam("experiments") !== null;
    this._experiments = [];
    this._experimentNames = {};
    this._enabledTransiently = {};
}

Runtime.ExperimentsSupport.prototype = {
    /**
     * @return {!Array.<!Runtime.Experiment>}
     */
    allConfigurableExperiments: function()
    {
        var result = [];
        for (var i = 0; i < this._experiments.length; i++) {
            var experiment = this._experiments[i];
            if (!this._enabledTransiently[experiment.name])
                result.push(experiment);
        }
        return result;
    },

    /**
     * @return {boolean}
     */
    supportEnabled: function()
    {
        return this._supportEnabled;
    },

    /**
     * @param {!Object} value
     */
    _setExperimentsSetting: function(value)
    {
        if (!self.localStorage)
            return;
        self.localStorage["experiments"] = JSON.stringify(value);
    },

    /**
     * @param {string} experimentName
     * @param {string} experimentTitle
     * @param {boolean=} hidden
     */
    register: function(experimentName, experimentTitle, hidden)
    {
        Runtime._assert(!this._experimentNames[experimentName], "Duplicate registration of experiment " + experimentName);
        this._experimentNames[experimentName] = true;
        this._experiments.push(new Runtime.Experiment(this, experimentName, experimentTitle, !!hidden));
    },

    /**
     * @param {string} experimentName
     * @return {boolean}
     */
    isEnabled: function(experimentName)
    {
        this._checkExperiment(experimentName);

        if (this._enabledTransiently[experimentName])
            return true;
        if (!this.supportEnabled())
            return false;

        return !!Runtime._experimentsSetting()[experimentName];
    },

    /**
     * @param {string} experimentName
     * @param {boolean} enabled
     */
    setEnabled: function(experimentName, enabled)
    {
        this._checkExperiment(experimentName);
        var experimentsSetting = Runtime._experimentsSetting();
        experimentsSetting[experimentName] = enabled;
        this._setExperimentsSetting(experimentsSetting);
    },

    /**
     * @param {!Array.<string>} experimentNames
     */
    setDefaultExperiments: function(experimentNames)
    {
        for (var i = 0; i < experimentNames.length; ++i) {
            this._checkExperiment(experimentNames[i]);
            this._enabledTransiently[experimentNames[i]] = true;
        }
    },

    /**
     * @param {string} experimentName
     */
    enableForTest: function(experimentName)
    {
        this._checkExperiment(experimentName);
        this._enabledTransiently[experimentName] = true;
    },

    cleanUpStaleExperiments: function()
    {
        var experimentsSetting = Runtime._experimentsSetting();
        var cleanedUpExperimentSetting = {};
        for (var i = 0; i < this._experiments.length; ++i) {
            var experimentName = this._experiments[i].name;
            if (experimentsSetting[experimentName])
                cleanedUpExperimentSetting[experimentName] = true;
        }
        this._setExperimentsSetting(cleanedUpExperimentSetting);
    },

    /**
     * @param {string} experimentName
     */
    _checkExperiment: function(experimentName)
    {
        Runtime._assert(this._experimentNames[experimentName], "Unknown experiment " + experimentName);
    }
}

/**
 * @constructor
 * @param {!Runtime.ExperimentsSupport} experiments
 * @param {string} name
 * @param {string} title
 * @param {boolean} hidden
 */
Runtime.Experiment = function(experiments, name, title, hidden)
{
    this.name = name;
    this.title = title;
    this.hidden = hidden;
    this._experiments = experiments;
}

Runtime.Experiment.prototype = {
    /**
     * @return {boolean}
     */
    isEnabled: function()
    {
        return this._experiments.isEnabled(this.name);
    },

    /**
     * @param {boolean} enabled
     */
    setEnabled: function(enabled)
    {
        this._experiments.setEnabled(this.name, enabled);
    }
}

{(function parseQueryParameters()
{
    var queryParams = location.search;
    if (!queryParams)
        return;
    var params = queryParams.substring(1).split("&");
    for (var i = 0; i < params.length; ++i) {
        var pair = params[i].split("=");
        Runtime._queryParamsObject[pair[0]] = pair[1];
    }

    // Patch settings from the URL param (for tests).
    var settingsParam = Runtime.queryParam("settings");
    if (settingsParam) {
        try {
            var settings = JSON.parse(window.decodeURI(settingsParam));
            for (var key in settings)
                window.localStorage[key] = settings[key];
        } catch(e) {
            // Ignore malformed settings.
        }
    }
})();}


// This must be constructed after the query parameters have been parsed.
Runtime.experiments = new Runtime.ExperimentsSupport();

/** @type {!Runtime} */
var runtime;


================================================
FILE: front-end/UglifyJS/parse-js.js
================================================
/***********************************************************************

  A JavaScript tokenizer / parser / beautifier / compressor.

  This version is suitable for Node.js.  With minimal changes (the
  exports stuff) it should work on any JS platform.

  This file contains the tokenizer/parser.  It is a port to JavaScript
  of parse-js [1], a JavaScript parser library written in Common Lisp
  by Marijn Haverbeke.  Thank you Marijn!

  [1] http://marijn.haverbeke.nl/parse-js/

  Exported functions:

    - tokenizer(code) -- returns a function.  Call the returned
      function to fetch the next token.

    - parse(code) -- returns an AST of the given JavaScript code.

  -------------------------------- (C) ---------------------------------

                           Author: Mihai Bazon
                         <mihai.bazon@gmail.com>
                       http://mihai.bazon.net/blog

  Distributed under the BSD license:

    Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>
    Based on parse-js (http://marijn.haverbeke.nl/parse-js/).

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:

        * Redistributions of source code must retain the above
          copyright notice, this list of conditions and the following
          disclaimer.

        * Redistributions in binary form must reproduce the above
          copyright notice, this list of conditions and the following
          disclaimer in the documentation and/or other materials
          provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.

 ***********************************************************************/

/* -----[ Tokenizer (constants) ]----- */

var KEYWORDS = array_to_hash([
        "break",
        "case",
        "catch",
        "const",
        "continue",
        "default",
        "delete",
        "do",
        "else",
        "finally",
        "for",
        "function",
        "if",
        "in",
        "instanceof",
        "new",
        "return",
        "switch",
        "throw",
        "try",
        "typeof",
        "var",
        "void",
        "while",
        "with"
]);

var RESERVED_WORDS = array_to_hash([
        "abstract",
        "boolean",
        "byte",
        "char",
        "class",
        "debugger",
        "double",
        "enum",
        "export",
        "extends",
        "final",
        "float",
        "goto",
        "implements",
        "import",
        "int",
        "interface",
        "long",
        "native",
        "package",
        "private",
        "protected",
        "public",
        "short",
        "static",
        "super",
        "synchronized",
        "throws",
        "transient",
        "volatile"
]);

var KEYWORDS_BEFORE_EXPRESSION = array_to_hash([
        "return",
        "new",
        "delete",
        "throw",
        "else",
        "case"
]);

var KEYWORDS_ATOM = array_to_hash([
        "false",
        "null",
        "true",
        "undefined"
]);

var OPERATOR_CHARS = array_to_hash(characters("+-*&%=<>!?|~^"));

var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;
var RE_OCT_NUMBER = /^0[0-7]+$/;
var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i;

var OPERATORS = array_to_hash([
        "in",
        "instanceof",
        "typeof",
        "new",
        "void",
        "delete",
        "++",
        "--",
        "+",
        "-",
        "!",
        "~",
        "&",
        "|",
        "^",
        "*",
        "/",
        "%",
        ">>",
        "<<",
        ">>>",
        "<",
        ">",
        "<=",
        ">=",
        "==",
        "===",
        "!=",
        "!==",
        "?",
        "=",
        "+=",
        "-=",
        "/=",
        "*=",
        "%=",
        ">>=",
        "<<=",
        ">>>=",
        "%=",
        "|=",
        "^=",
        "&=",
        "&&",
        "||"
]);

var WHITESPACE_CHARS = array_to_hash(characters(" \n\r\t"));

var PUNC_BEFORE_EXPRESSION = array_to_hash(characters("[{}(,.;:"));

var PUNC_CHARS = array_to_hash(characters("[]{}(),;:"));

var REGEXP_MODIFIERS = array_to_hash(characters("gmsiy"));

/* -----[ Tokenizer ]----- */

function is_alphanumeric_char(ch) {
        ch = ch.charCodeAt(0);
        return (ch >= 48 && ch <= 57) ||
                (ch >= 65 && ch <= 90) ||
                (ch >= 97 && ch <= 122);
};

function is_identifier_char(ch) {
        return is_alphanumeric_char(ch) || ch == "$" || ch == "_";
};

function is_digit(ch) {
        ch = ch.charCodeAt(0);
        return ch >= 48 && ch <= 57;
};

function parse_js_number(num) {
        if (RE_HEX_NUMBER.test(num)) {
                return parseInt(num.substr(2), 16);
        } else if (RE_OCT_NUMBER.test(num)) {
                return parseInt(num.substr(1), 8);
        } else if (RE_DEC_NUMBER.test(num)) {
                return parseFloat(num);
        }
};

function JS_Parse_Error(message, line, col, pos) {
        this.message = message;
        this.line = line;
        this.col = col;
        this.pos = pos;
        try {
                ({})();
        } catch(ex) {
                this.stack = ex.stack;
        };
};

JS_Parse_Error.prototype.toString = function() {
        return this.message + " (line: " + this.line + ", col: " + this.col + ", pos: " + this.pos + ")" + "\n\n" + this.stack;
};

function js_error(message, line, col, pos) {
        throw new JS_Parse_Error(message, line, col, pos);
};

function is_token(token, type, val) {
        return token.type == type && (val == null || token.value == val);
};

var EX_EOF = {};

function tokenizer($TEXT) {

        var S = {
                text            : $TEXT.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, ''),
                pos             : 0,
                tokpos          : 0,
                line            : 0,
                tokline         : 0,
                col             : 0,
                tokcol          : 0,
                newline_before  : false,
                regex_allowed   : false,
                comments_before : []
        };

        function peek() { return S.text.charAt(S.pos); };

        function next(signal_eof) {
                var ch = S.text.charAt(S.pos++);
                if (signal_eof && !ch)
                        throw EX_EOF;
                if (ch == "\n") {
                        S.newline_before = true;
                        ++S.line;
                        S.col = 0;
                } else {
                        ++S.col;
                }
                return ch;
        };

        function eof() {
                return !S.peek();
        };

        function find(what, signal_eof) {
                var pos = S.text.indexOf(what, S.pos);
                if (signal_eof && pos == -1) throw EX_EOF;
                return pos;
        };

        function start_token() {
                S.tokline = S.line;
                S.tokcol = S.col;
                S.tokpos = S.pos;
        };

        function token(type, value, is_comment) {
                S.regex_allowed = ((type == "operator" && !HOP(UNARY_POSTFIX, value)) ||
                                   (type == "keyword" && HOP(KEYWORDS_BEFORE_EXPRESSION, value)) ||
                                   (type == "punc" && HOP(PUNC_BEFORE_EXPRESSION, value)));
                var ret = {
                        type  : type,
                        value : value,
                        line  : S.tokline,
                        col   : S.tokcol,
                        pos   : S.tokpos,
                        nlb   : S.newline_before
                };
                if (!is_comment) {
                        ret.comments_before = S.comments_before;
                        S.comments_before = [];
                }
                S.newline_before = false;
                return ret;
        };

        function skip_whitespace() {
                while (HOP(WHITESPACE_CHARS, peek()))
                        next();
        };

        function read_while(pred) {
                var ret = "", ch = peek(), i = 0;
                while (ch && pred(ch, i++)) {
                        ret += next();
                        ch = peek();
                }
                return ret;
        };

        function parse_error(err) {
                js_error(err, S.tokline, S.tokcol, S.tokpos);
        };

        function read_num(prefix) {
                var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".";
                var num = read_while(function(ch, i){
                        if (ch == "x" || ch == "X") {
                                if (has_x) return false;
                                return has_x = true;
                        }
                        if (!has_x && (ch == "E" || ch == "e")) {
                                if (has_e) return false;
                                return has_e = after_e = true;
                        }
                        if (ch == "-") {
                                if (after_e || (i == 0 && !prefix)) return true;
                                return false;
                        }
                        if (ch == "+") return after_e;
                        after_e = false;
                        if (ch == ".") {
                                if (!has_dot)
                                        return has_dot = true;
                                return false;
                        }
                        return is_alphanumeric_char(ch);
                });
                if (prefix)
                        num = prefix + num;
                var valid = parse_js_number(num);
                if (!isNaN(valid)) {
                        return token("num", valid);
                } else {
                        parse_error("Invalid syntax: " + num);
                }
        };

        function read_escaped_char() {
                var ch = next(true);
                switch (ch) {
                    case "n" : return "\n";
                    case "r" : return "\r";
                    case "t" : return "\t";
                    case "b" : return "\b";
                    case "v" : return "\v";
                    case "f" : return "\f";
                    case "0" : return "\0";
                    case "x" : return String.fromCharCode(hex_bytes(2));
                    case "u" : return String.fromCharCode(hex_bytes(4));
                    default  : return ch;
                }
        };

        function hex_bytes(n) {
                var num = 0;
                for (; n > 0; --n) {
                        var digit = parseInt(next(true), 16);
                        if (isNaN(digit))
                                parse_error("Invalid hex-character pattern in string");
                        num = (num << 4) | digit;
                }
                return num;
        };

        function read_string() {
                return with_eof_error("Unterminated string constant", function(){
                        var quote = next(), ret = "";
                        for (;;) {
                                var ch = next(true);
                                if (ch == "\\") ch = read_escaped_char();
                                else if (ch == quote) break;
                                ret += ch;
                        }
                        return token("string", ret);
                });
        };

        function read_line_comment() {
                next();
                var i = find("\n"), ret;
                if (i == -1) {
                        ret = S.text.substr(S.pos);
                        S.pos = S.text.length;
                } else {
                        ret = S.text.substring(S.pos, i);
                        S.pos = i;
                }
                return token("comment1", ret, true);
        };

        function read_multiline_comment() {
                next();
                return with_eof_error("Unterminated multiline comment", function(){
                        var i = find("*/", true),
                            text = S.text.substring(S.pos, i),
                            tok = token("comment2", text, true);
                        S.pos = i + 2;
                        S.line += text.split("\n").length - 1;
                        S.newline_before = text.indexOf("\n") >= 0;
                        return tok;
                });
        };

        function read_regexp() {
                return with_eof_error("Unterminated regular expression", function(){
                        var prev_backslash = false, regexp = "", ch, in_class = false;
                        while ((ch = next(true))) if (prev_backslash) {
                                regexp += "\\" + ch;
                                prev_backslash = false;
                        } else if (ch == "[") {
                                in_class = true;
                                regexp += ch;
                        } else if (ch == "]" && in_class) {
                                in_class = false;
                                regexp += ch;
                        } else if (ch == "/" && !in_class) {
                                break;
                        } else if (ch == "\\") {
                                prev_backslash = true;
                        } else {
                                regexp += ch;
                        }
                        var mods = read_while(function(ch){
                                return HOP(REGEXP_MODIFIERS, ch);
                        });
                        return token("regexp", [ regexp, mods ]);
                });
        };

        function read_operator(prefix) {
                function grow(op) {
                        if (!peek()) return op;
                        var bigger = op + peek();
                        if (HOP(OPERATORS, bigger)) {
                                next();
                                return grow(bigger);
                        } else {
                                return op;
                        }
                };
                return token("operator", grow(prefix || next()));
        };

        function handle_slash() {
                next();
                var regex_allowed = S.regex_allowed;
                switch (peek()) {
                    case "/":
                        S.comments_before.push(read_line_comment());
                        S.regex_allowed = regex_allowed;
                        return next_token();
                    case "*":
                        S.comments_before.push(read_multiline_comment());
                        S.regex_allowed = regex_allowed;
                        return next_token();
                }
                return S.regex_allowed ? read_regexp() : read_operator("/");
        };

        function handle_dot() {
                next();
                return is_digit(peek())
                        ? read_num(".")
                        : token("punc", ".");
        };

        function read_word() {
                var word = read_while(is_identifier_char);
                return !HOP(KEYWORDS, word)
                        ? token("name", word)
                        : HOP(OPERATORS, word)
                        ? token("operator", word)
                        : HOP(KEYWORDS_ATOM, word)
                        ? token("atom", word)
                        : token("keyword", word);
        };

        function with_eof_error(eof_error, cont) {
                try {
                        return cont();
                } catch(ex) {
                        if (ex === EX_EOF) parse_error(eof_error);
                        else throw ex;
                }
        };

        function next_token(force_regexp) {
                if (force_regexp)
                        return read_regexp();
                skip_whitespace();
                start_token();
                var ch = peek();
                if (!ch) return token("eof");
                if (is_digit(ch)) return read_num();
                if (ch == '"' || ch == "'") return read_string();
                if (HOP(PUNC_CHARS, ch)) return token("punc", next());
                if (ch == ".") return handle_dot();
                if (ch == "/") return handle_slash();
                if (HOP(OPERATOR_CHARS, ch)) return read_operator();
                if (is_identifier_char(ch)) return read_word();
                parse_error("Unexpected character '" + ch + "'");
        };

        next_token.context = function(nc) {
                if (nc) S = nc;
                return S;
        };

        return next_token;

};

/* -----[ Parser (constants) ]----- */

var UNARY_PREFIX = array_to_hash([
        "typeof",
        "void",
        "delete",
        "--",
        "++",
        "!",
        "~",
        "-",
        "+"
]);

var UNARY_POSTFIX = array_to_hash([ "--", "++" ]);

var ASSIGNMENT = (function(a, ret, i){
        while (i < a.length) {
                ret[a[i]] = a[i].substr(0, a[i].length - 1);
                i++;
        }
        return ret;
})(
        ["+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="],
        { "=": true },
        0
);

var PRECEDENCE = (function(a, ret){
        for (var i = 0, n = 1; i < a.length; ++i, ++n) {
                var b = a[i];
                for (var j = 0; j < b.length; ++j) {
                        ret[b[j]] = n;
                }
        }
        return ret;
})(
        [
                ["||"],
                ["&&"],
                ["|"],
                ["^"],
                ["&"],
                ["==", "===", "!=", "!=="],
                ["<", ">", "<=", ">=", "in", "instanceof"],
                [">>", "<<", ">>>"],
                ["+", "-"],
                ["*", "/", "%"]
        ],
        {}
);

var STATEMENTS_WITH_LABELS = array_to_hash([ "for", "do", "while", "switch" ]);

var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]);

/* -----[ Parser ]----- */

function NodeWithToken(str, start, end) {
        this.name = str;
        this.start = start;
        this.end = end;
};

NodeWithToken.prototype.toString = function() { return this.name; };

function parse($TEXT, strict_mode, embed_tokens) {

        var S = {
                input       : typeof $TEXT == "string" ? tokenizer($TEXT, true) : $TEXT,
                token       : null,
                prev        : null,
                peeked      : null,
                in_function : 0,
                in_loop     : 0,
                labels      : []
        };

        S.token = next();

        function is(type, value) {
                return is_token(S.token, type, value);
        };

        function peek() { return S.peeked || (S.peeked = S.input()); };

        function next() {
                S.prev = S.token;
                if (S.peeked) {
                        S.token = S.peeked;
                        S.peeked = null;
                } else {
                        S.token = S.input();
                }
                return S.token;
        };

        function prev() {
                return S.prev;
        };

        function croak(msg, line, col, pos) {
                var ctx = S.input.context();
                js_error(msg,
                         line != null ? line : ctx.tokline,
                         col != null ? col : ctx.tokcol,
                         pos != null ? pos : ctx.tokpos);
        };

        function token_error(token, msg) {
                croak(msg, token.line, token.col);
        };

        function unexpected(token) {
                if (token == null)
                        token = S.token;
                token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")");
        };

        function expect_token(type, val) {
                if (is(type, val)) {
                        return next();
                }
                token_error(S.token, "Unexpected token " + S.token.type + ", expected " + type);
        };

        function expect(punc) { return expect_token("punc", punc); };

        function can_insert_semicolon() {
                return !strict_mode && (
                        S.token.nlb || is("eof") || is("punc", "}")
                );
        };

        function semicolon() {
                if (is("punc", ";")) next();
                else if (!can_insert_semicolon()) unexpected();
        };

        function as() {
                return slice(arguments);
        };

        function parenthesised() {
                expect("(");
                var ex = expression();
                expect(")");
                return ex;
        };

        function add_tokens(str, start, end) {
                return new NodeWithToken(str, start, end);
        };

        var statement = embed_tokens ? function() {
                var start = S.token;
                var stmt = $statement();
                stmt[0] = add_tokens(stmt[0], start, prev());
                return stmt;
        } : $statement;

        function $statement() {
                if (is("operator", "/")) {
                        S.peeked = null;
                        S.token = S.input(true); // force regexp
                }
                switch (S.token.type) {
                    case "num":
                    case "string":
                    case "regexp":
                    case "operator":
                    case "atom":
                        return simple_statement();

                    case "name":
                        return is_token(peek(), "punc", ":")
                                ? labeled_statement(prog1(S.token.value, next, next))
                                : simple_statement();

                    case "punc":
                        switch (S.token.value) {
                            case "{":
                                return as("block", block_());
                            case "[":
                            case "(":
                                return simple_statement();
                            case ";":
                                next();
                                return as("block");
                            default:
                                unexpected();
                        }

                    case "keyword":
                        switch (prog1(S.token.value, next)) {
                            case "break":
                                return break_cont("break");

                            case "continue":
                                return break_cont("continue");

                            case "debugger":
                                semicolon();
                                return as("debugger");

                            case "do":
                                return (function(body){
                                        expect_token("keyword", "while");
                                        return as("do", prog1(parenthesised, semicolon), body);
                                })(in_loop(statement));

                            case "for":
                                return for_();

                            case "function":
                                return function_(true);

                            case "if":
                                return if_();

                            case "return":
                                if (S.in_function == 0)
                                        croak("'return' outside of function");
                                return as("return",
                                          is("punc", ";")
                                          ? (next(), null)
                                          : can_insert_semicolon()
                                          ? null
                                          : prog1(expression, semicolon));

                            case "switch":
                                return as("switch", parenthesised(), switch_block_());

                            case "throw":
                                return as("throw", prog1(expression, semicolon));

                            case "try":
                                return try_();

                            case "var":
                                return prog1(var_, semicolon);

                            case "const":
                                return prog1(const_, semicolon);

                            case "while":
                                return as("while", parenthesised(), in_loop(statement));

                            case "with":
                                return as("with", parenthesised(), statement());

                            default:
                                unexpected();
                        }
                }
        };

        function labeled_statement(label) {
                S.labels.push(label);
                var start = S.token, stat = statement();
                if (strict_mode && !HOP(STATEMENTS_WITH_LABELS, stat[0]))
                        unexpected(start);
                S.labels.pop();
                return as("label", label, stat);
        };

        function simple_statement() {
                return as("stat", prog1(expression, semicolon));
        };

        function break_cont(type) {
                var name = is("name") ? S.token.value : null;
                if (name != null) {
                        next();
                        if (!member(name, S.labels))
                                croak("Label " + name + " without matching loop or statement");
                }
                else if (S.in_loop == 0)
                        croak(type + " not inside a loop or switch");
                semicolon();
                return as(type, name);
        };

        function for_() {
                expect("(");
                var has_var = is("keyword", "var");
                if (has_var)
                        next();
                if (is("name") && is_token(peek(), "operator", "in")) {
                        // for (i in foo)
                        var name = S.token.value;
                        next(); next();
                        var obj = expression();
                        expect(")");
                        return as("for-in", has_var, name, obj, in_loop(statement));
                } else {
                        // classic for
                        var init = is("punc", ";") ? null : has_var ? var_() : expression();
                        expect(";");
                        var test = is("punc", ";") ? null : expression();
                        expect(";");
                        var step = is("punc", ")") ? null : expression();
                        expect(")");
                        return as("for", init, test, step, in_loop(statement));
                }
        };

        function function_(in_statement) {
                var name = is("name") ? prog1(S.token.value, next) : null;
                if (in_statement && !name)
                        unexpected();
                expect("(");
                return as(in_statement ? "defun" : "function",
                          name,
                          // arguments
                          (function(first, a){
                                  while (!is("punc", ")")) {
                                          if (first) first = false; else expect(",");
                                          if (!is("name")) unexpected();
                                          a.push(S.token.value);
                                          next();
                                  }
                                  next();
                                  return a;
                          })(true, []),
                          // body
                          (function(){
                                  ++S.in_function;
                                  var loop = S.in_loop;
                                  S.in_loop = 0;
                                  var a = block_();
                                  --S.in_function;
                                  S.in_loop = loop;
                                  return a;
                          })());
        };

        function if_() {
                var cond = parenthesised(), body = statement(), belse;
                if (is("keyword", "else")) {
                        next();
                        belse = statement();
                }
                return as("if", cond, body, belse);
        };

        function block_() {
                expect("{");
                var a = [];
                while (!is("punc", "}")) {
                        if (is("eof")) unexpected();
                        a.push(statement());
                }
                next();
                return a;
        };

        var switch_block_ = curry(in_loop, function(){
                expect("{");
                var a = [], cur = null;
                while (!is("punc", "}")) {
                        if (is("eof")) unexpected();
                        if (is("keyword", "case")) {
                                next();
                                cur = [];
                                a.push([ expression(), cur ]);
                                expect(":");
                        }
                        else if (is("keyword", "default")) {
                                next();
                                expect(":");
                                cur = [];
                                a.push([ null, cur ]);
                        }
                        else {
                                if (!cur) unexpected();
                                cur.push(statement());
                        }
                }
                next();
                return a;
        });

        function try_() {
                var body = block_(), bcatch, bfinally;
                if (is("keyword", "catch")) {
                        next();
                        expect("(");
                        if (!is("name"))
                                croak("Name expected");
                        var name = S.token.value;
                        next();
                        expect(")");
                        bcatch = [ name, block_() ];
                }
                if (is("keyword", "finally")) {
                        next();
                        bfinally = block_();
                }
                if (!bcatch && !bfinally)
                        croak("Missing catch/finally blocks");
                return as("try", body, bcatch, bfinally);
        };

        function vardefs() {
                var a = [];
                for (;;) {
                        if (!is("name"))
                                unexpected();
                        var name = S.token.value;
                        next();
                        if (is("operator", "=")) {
                                next();
                                a.push([ name, expression(false) ]);
                        } else {
                                a.push([ name ]);
                        }
                        if (!is("punc", ","))
                                break;
                        next();
                }
                return a;
        };

        function var_() {
                return as("var", vardefs());
        };

        function const_() {
                return as("const", vardefs());
        };

        function new_() {
                var newexp = expr_atom(false), args;
                if (is("punc", "(")) {
                        next();
                        args = expr_list(")");
                } else {
                        args = [];
                }
                return subscripts(as("new", newexp, args), true);
        };

        function expr_atom(allow_calls) {
                if (is("operator", "new")) {
                        next();
                        return new_();
                }
                if (is("operator") && HOP(UNARY_PREFIX, S.token.value)) {
                        return make_unary("unary-prefix",
                                          prog1(S.token.value, next),
                                          expr_atom(allow_calls));
                }
                if (is("punc")) {
                        switch (S.token.value) {
                            case "(":
                                next();
                                return subscripts(prog1(expression, curry(expect, ")")), allow_calls);
                            case "[":
                                next();
                                return subscripts(array_(), allow_calls);
                            case "{":
                                next();
                                return subscripts(object_(), allow_calls);
                        }
                        unexpected();
                }
                if (is("keyword", "function")) {
                        next();
                        return subscripts(function_(false), allow_calls);
                }
                if (HOP(ATOMIC_START_TOKEN, S.token.type)) {
                        var atom = S.token.type == "regexp"
                                ? as("regexp", S.token.value[0], S.token.value[1])
                                : as(S.token.type, S.token.value);
                        return subscripts(prog1(atom, next), allow_calls);
                }
                unexpected();
        };

        function expr_list(closing, allow_trailing_comma, allow_empty) {
                var first = true, a = [];
                while (!is("punc", closing)) {
                        if (first) first = false; else expect(",");
                        if (allow_trailing_comma && is("punc", closing)) break;
                        if (is("punc", ",") && allow_empty) {
                                a.push([ "atom", "undefined" ]);
                        } else {
                                a.push(expression(false));
                        }
                }
                next();
                return a;
        };

        function array_() {
                return as("array", expr_list("]", !strict_mode, true));
        };

        function object_() {
                var first = true, a = [];
                while (!is("punc", "}")) {
                        if (first) first = false; else expect(",");
                        if (!strict_mode && is("punc", "}"))
                                // allow trailing comma
                                break;
                        var type = S.token.type;
                        var name = as_property_name();
                        if (type == "name" && (name == "get" || name == "set") && !is("punc", ":")) {
                                a.push([ as_name(), function_(false), name ]);
                        } else {
                                expect(":");
                                a.push([ name, expression(false) ]);
                        }
                }
                next();
                return as("object", a);
        };

        function as_property_name() {
                switch (S.token.type) {
                    case "num":
                    case "string":
                        return prog1(S.token.value, next);
                }
                return as_name();
        };

        function as_name() {
                switch (S.token.type) {
                    case "name":
                    case "operator":
                    case "keyword":
                    case "atom":
                        return prog1(S.token.value, next);
                    default:
                        unexpected();
                }
        };

        function subscripts(expr, allow_calls) {
                if (is("punc", ".")) {
                        next();
                        return subscripts(as("dot", expr, as_name()), allow_calls);
                }
                if (is("punc", "[")) {
                        next();
                        return subscripts(as("sub", expr, prog1(expression, curry(expect, "]"))), allow_calls);
                }
                if (allow_calls && is("punc", "(")) {
                        next();
                        return subscripts(as("call", expr, expr_list(")")), true);
                }
                if (allow_calls && is("operator") && HOP(UNARY_POSTFIX, S.token.value)) {
                        return prog1(curry(make_unary, "unary-postfix", S.token.value, expr),
                                     next);
                }
                return expr;
        };

        function make_unary(tag, op, expr) {
                if ((op == "++" || op == "--") && !is_assignable(expr))
                        croak("Invalid use of " + op + " operator");
                return as(tag, op, expr);
        };

        function expr_op(left, min_prec) {
                var op = is("operator") ? S.token.value : null;
                var prec = op != null ? PRECEDENCE[op] : null;
                if (prec != null && prec > min_prec) {
                        next();
                        var right = expr_op(expr_atom(true), prec);
                        return expr_op(as("binary", op, left, right), min_prec);
                }
                return left;
        };

        function expr_ops() {
                return expr_op(expr_atom(true), 0);
        };

        function maybe_conditional() {
                var expr = expr_ops();
                if (is("operator", "?")) {
                        next();
                        var yes = expression(false);
                        expect(":");
                        return as("conditional", expr, yes, expression(false));
                }
                return expr;
        };

        function is_assignable(expr) {
                switch (expr[0]) {
                    case "dot":
                    case "sub":
                        return true;
                    case "name":
                        return expr[1] != "this";
                }
        };

        function maybe_assign() {
                var left = maybe_conditional(), val = S.token.value;
                if (is("operator") && HOP(ASSIGNMENT, val)) {
                        if (is_assignable(left)) {
                                next();
                                return as("assign", ASSIGNMENT[val], left, maybe_assign());
                        }
                        croak("Invalid assignment");
                }
                return left;
        };

        function expression(commas) {
                if (arguments.length == 0)
                        commas = true;
                var expr = maybe_assign();
                if (commas && is("punc", ",")) {
                        next();
                        return as("seq", expr, expression());
                }
                return expr;
        };

        function in_loop(cont) {
                try {
                        ++S.in_loop;
                        return cont();
                } finally {
                        --S.in_loop;
                }
        };

        return as("toplevel", (function(a){
                while (!is("eof"))
                        a.push(statement());
                return a;
        })([]));

};

/* -----[ Utilities ]----- */

function curry(f) {
        var args = slice(arguments, 1);
        return function() { return f.apply(this, args.concat(slice(arguments))); };
};

function prog1(ret) {
        if (ret instanceof Function)
                ret = ret();
        for (var i = 1, n = arguments.length; --n > 0; ++i)
                arguments[i]();
        return ret;
};

function array_to_hash(a) {
        var ret = {};
        for (var i = 0; i < a.length; ++i)
                ret[a[i]] = true;
        return ret;
};

function slice(a, start) {
        return Array.prototype.slice.call(a, start == null ? 0 : start);
};

function characters(str) {
        return str.split("");
};

function member(name, array) {
        for (var i = array.length; --i >= 0;)
                if (array[i] === name)
                        return true;
        return false;
};

function HOP(obj, prop) {
        return Object.prototype.hasOwnProperty.call(obj, prop);
};

/* -----[ Exports ]----- */

exports.tokenizer = tokenizer;
exports.parse = parse;
exports.slice = slice;
exports.curry = curry;
exports.member = member;
exports.array_to_hash = array_to_hash;
exports.PRECEDENCE = PRECEDENCE;
exports.KEYWORDS_ATOM = KEYWORDS_ATOM;
exports.RESERVED_WORDS = RESERVED_WORDS;
exports.KEYWORDS = KEYWORDS;
exports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN;
exports.OPERATORS = OPERATORS;
exports.is_alphanumeric_char = is_alphanumeric_char;
exports.is_identifier_char = is_identifier_char;


================================================
FILE: front-end/audits/AuditCategories.js
================================================
/*
 * Copyright (C) 2010 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @constructor
 * @extends {WebInspector.AuditCategoryImpl}
 */
WebInspector.AuditCategories.PagePerformance = function() {
    WebInspector.AuditCategoryImpl.call(this, WebInspector.AuditCategories.PagePerformance.AuditCategoryName);
}

WebInspector.AuditCategories.PagePerformance.AuditCategoryName = WebInspector.UIString("Web Page Performance");

WebInspector.AuditCategories.PagePerformance.prototype = {
    initialize: function()
    {
        this.addRule(new WebInspector.AuditRules.UnusedCssRule(), WebInspector.AuditRule.Severity.Warning);
        this.addRule(new WebInspector.AuditRules.CssInHeadRule(), WebInspector.AuditRule.Severity.Severe);
        this.addRule(new WebInspector.AuditRules.StylesScriptsOrderRule(), WebInspector.AuditRule.Severity.Severe);
        this.addRule(new WebInspector.AuditRules.VendorPrefixedCSSProperties(), WebInspector.AuditRule.Severity.Warning);
    },

    __proto__: WebInspector.AuditCategoryImpl.prototype
}

/**
 * @constructor
 * @extends {WebInspector.AuditCategoryImpl}
 */
WebInspector.AuditCategories.NetworkUtilization = function() {
    WebInspector.AuditCategoryImpl.call(this, WebInspector.AuditCategories.NetworkUtilization.AuditCategoryName);
}

WebInspector.AuditCategories.NetworkUtilization.AuditCategoryName = WebInspector.UIString("Network Utilization");

WebInspector.AuditCategories.NetworkUtilization.prototype = {
    initialize: function()
    {
        this.addRule(new WebInspector.AuditRules.GzipRule(), WebInspector.AuditRule.Severity.Severe);
        this.addRule(new WebInspector.AuditRules.ImageDimensionsRule(), WebInspector.AuditRule.Severity.Warning);
        this.addRule(new WebInspector.AuditRules.CookieSizeRule(400), WebInspector.AuditRule.Severity.Warning);
        this.addRule(new WebInspector.AuditRules.StaticCookielessRule(5), WebInspector.AuditRule.Severity.Warning);
        this.addRule(new WebInspector.AuditRules.CombineJsResourcesRule(2), WebInspector.AuditRule.Severity.Severe);
        this.addRule(new WebInspector.AuditRules.CombineCssResourcesRule(2), WebInspector.AuditRule.Severity.Severe);
        this.addRule(new WebInspector.AuditRules.MinimizeDnsLookupsRule(4), WebInspector.AuditRule.Severity.Warning);
        this.addRule(new WebInspector.AuditRules.ParallelizeDownloadRule(4, 10, 0.5), WebInspector.AuditRule.Severity.Warning);
        this.addRule(new WebInspector.AuditRules.BrowserCacheControlRule(), WebInspector.AuditRule.Severity.Severe);
        this.addRule(new WebInspector.AuditRules.ProxyCacheControlRule(), WebInspector.AuditRule.Severity.Warning);
    },

    __proto__: WebInspector.AuditCategoryImpl.prototype
}


================================================
FILE: front-end/audits/AuditCategory.js
================================================
/*
 * Copyright (C) 2014 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.
 * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @interface
 */
WebInspector.AuditCategory = function()
{
}

WebInspector.AuditCategory.prototype = {
    /**
     * @return {string}
     */
    get id()
    {
    },

    /**
     * @return {string}
     */
    get displayName()
    {
    },

    /**
     * @param {!WebInspector.Target} target
     * @param {!Array.<!WebInspector.NetworkRequest>} requests
            * @param {function(!WebInspector.AuditRuleResult)} ruleResultCallback
     * @param {function()} categoryDoneCallback
     * @param {!WebInspector.Progress} progress
     */
    run: function(target, requests, ruleResultCallback, categoryDoneCallback, progress)
    {
    }
}


================================================
FILE: front-end/audits/AuditController.js
================================================
/*
 * Copyright (C) 2012 Google Inc. All rights reserved.
 * Copyright (C) 2013 Samsung Electronics. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @constructor
 * @param {!WebInspector.AuditsPanel} auditsPanel
 */
WebInspector.AuditController = function(auditsPanel)
{
    this._auditsPanel = auditsPanel;
    WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Events.Load, this._didMainResourceLoad, this);
}

WebInspector.AuditController.prototype = {
    /**
     * @param {!WebInspector.Target} target
     * @param {!Array.<!WebInspector.AuditCategory>} categories
     * @param {function(string, !Array.<!WebInspector.AuditCategoryResult>)} resultCallback
     */
    _executeAudit: function(target, categories, resultCallback)
    {
        this._progress.setTitle(WebInspector.UIString("Running audit"));

        /**
         * @param {!WebInspector.AuditCategoryResult} categoryResult
         * @param {!WebInspector.AuditRuleResult} ruleResult
         * @this {WebInspector.AuditController}
         */
        function ruleResultReadyCallback(categoryResult, ruleResult)
        {
            if (ruleResult && ruleResult.children)
                categoryResult.addRuleResult(ruleResult);

            if (this._progress.isCanceled())
                this._progress.done();
        }

        var results = [];
        var mainResourceURL = target.resourceTreeModel.inspectedPageURL();
        var categoriesDone = 0;

        /**
         * @this {WebInspector.AuditController}
         */
        function categoryDoneCallback()
        {
            if (++categoriesDone !== categories.length)
                return;
            this._progress.done();
            resultCallback(mainResourceURL, results)
        }

        var requests = target.networkLog.requests.slice();
        var compositeProgress = new WebInspector.CompositeProgress(this._progress);
        var subprogresses = [];
        for (var i = 0; i < categories.length; ++i)
            subprogresses.push(compositeProgress.createSubProgress());
        for (var i = 0; i < categories.length; ++i) {
            var category = categories[i];
            var result = new WebInspector.AuditCategoryResult(category);
            results.push(result);
            category.run(target, requests, ruleResultReadyCallback.bind(this, result), categoryDoneCallback.bind(this), subprogresses[i]);
        }
    },

    /**
     * @param {function()} launcherCallback
     * @param {string} mainResourceURL
     * @param {!Array.<!WebInspector.AuditCategoryResult>} results
     */
    _auditFinishedCallback: function(launcherCallback, mainResourceURL, results)
    {
        this._auditsPanel.auditFinishedCallback(mainResourceURL, results);
        if (!this._progress.isCanceled())
            launcherCallback();
    },

    /**
     * @param {!Array.<string>} categoryIds
     * @param {!WebInspector.Progress} progress
     * @param {boolean} runImmediately
     * @param {function()} startedCallback
     * @param {function()} finishedCallback
     */
    initiateAudit: function(categoryIds, progress, runImmediately, startedCallback, finishedCallback)
    {
        var target = /** @type {!WebInspector.Target} */ (WebInspector.targetManager.mainTarget());
        if (!categoryIds || !categoryIds.length || !target)
            return;

        this._progress = progress;

        var categories = [];
        for (var i = 0; i < categoryIds.length; ++i)
            categories.push(this._auditsPanel.categoriesById[categoryIds[i]]);

        /**
         * @this {WebInspector.AuditController}
         */
        function startAuditWhenResourcesReady()
        {
            startedCallback();
            this._executeAudit(target, categories, this._auditFinishedCallback.bind(this, finishedCallback));
        }

        if (runImmediately)
            startAuditWhenResourcesReady.call(this);
        else
            this._reloadResources(startAuditWhenResourcesReady.bind(this));

        WebInspector.userMetrics.AuditsStarted.record();
    },

    /**
     * @param {function()=} callback
     */
    _reloadResources: function(callback)
    {
        this._pageReloadCallback = callback;
        WebInspector.targetManager.reloadPage();
    },

    _didMainResourceLoad: function()
    {
        if (this._pageReloadCallback) {
            var callback = this._pageReloadCallback;
            delete this._pageReloadCallback;
            callback();
        }
    },

    clearResults: function()
    {
        this._auditsPanel.clearResults();
    }
}


================================================
FILE: front-end/audits/AuditExtensionCategory.js
================================================
/*
 * Copyright (C) 2012 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @constructor
 * @implements {WebInspector.AuditCategory}
 * @param {string} extensionOrigin
 * @param {string} id
 * @param {string} displayName
 * @param {number=} ruleCount
 */
WebInspector.AuditExtensionCategory = function(extensionOrigin, id, displayName, ruleCount)
{
    this._extensionOrigin = extensionOrigin;
    this._id = id;
    this._displayName = displayName;
    this._ruleCount  = ruleCount;
}

WebInspector.AuditExtensionCategory.prototype = {
    /**
     * @override
     */
    get id()
    {
        return this._id;
    },

    /**
     * @override
     */
    get displayName()
    {
        return this._displayName;
    },

    /**
     * @override
     * @param {!WebInspector.Target} target
     * @param {!Array.<!WebInspector.NetworkRequest>} requests
            * @param {function(!WebInspector.AuditRuleResult)} ruleResultCallback
     * @param {function()} categoryDoneCallback
     * @param {!WebInspector.Progress} progress
     */
    run: function(target, requests, ruleResultCallback, categoryDoneCallback, progress)
    {
        var results = new WebInspector.AuditExtensionCategoryResults(this, target, ruleResultCallback, categoryDoneCallback, progress);
        WebInspector.extensionServer.startAuditRun(this.id, results);
    }
}

/**
 * @constructor
 * @implements {WebInspector.ExtensionAuditCategoryResults}
 * @param {!WebInspector.AuditExtensionCategory} category
 * @param {!WebInspector.Target} target
 * @param {function(!WebInspector.AuditRuleResult)} ruleResultCallback
 * @param {function()} categoryDoneCallback
 * @param {!WebInspector.Progress} progress
 */
WebInspector.AuditExtensionCategoryResults = function(category, target, ruleResultCallback, categoryDoneCallback, progress)
{
    this._target = target;
    this._category = category;
    this._ruleResultCallback = ruleResultCallback;
    this._categoryDoneCallback = categoryDoneCallback;
    this._progress = progress;
    this._progress.setTotalWork(1);
    this._expectedResults = category._ruleCount;
    this._actualResults = 0;

    this._id = category.id + "-" + ++WebInspector.AuditExtensionCategoryResults._lastId;
}

WebInspector.AuditExtensionCategoryResults.prototype = {
    /**
     * @return {string}
     */
    id: function()
    {
        return this._id;
    },

    done: function()
    {
        WebInspector.extensionServer.stopAuditRun(this);
        this._progress.done();
        this._categoryDoneCallback();
    },

    /**
     * @param {string} displayName
     * @param {string} description
     * @param {string} severity
     * @param {!Object} details
     */
    addResult: function(displayName, description, severity, details)
    {
        var result = new WebInspector.AuditRuleResult(displayName);
        result.addChild(description);
        result.severity = severity;
        if (details)
            this._addNode(result, details);
        this._addResult(result);
    },

    _addNode: function(parent, node)
    {
        var contents = WebInspector.auditFormatters.partiallyApply(WebInspector.AuditExtensionFormatters, this, node.contents);
        var addedNode = parent.addChild(contents, node.expanded);
        if (node.children) {
            for (var i = 0; i < node.children.length; ++i)
                this._addNode(addedNode, node.children[i]);
        }
    },

    _addResult: function(result)
    {
        this._ruleResultCallback(result);
        ++this._actualResults;
        if (typeof this._expectedResults === "number") {
            this._progress.setWorked(this._actualResults / this._expectedResults);
            if (this._actualResults === this._expectedResults)
                this.done();
        }
    },

    /**
     * @param {number} progress
     */
    updateProgress: function(progress)
    {
        this._progress.setWorked(progress);
    },

    /**
     * @param {string} expression
     * @param {?Object} evaluateOptions
     * @param {function(!WebInspector.RemoteObject)} callback
     */
    evaluate: function(expression, evaluateOptions, callback)
    {
        /**
         * @param {?string} error
         * @param {!RuntimeAgent.RemoteObject} result
         * @param {boolean=} wasThrown
         * @this {WebInspector.AuditExtensionCategoryResults}
         */
        function onEvaluate(error, result, wasThrown)
        {
            if (wasThrown)
                return;
            var object = this._target.runtimeModel.createRemoteObject(result);
            callback(object);
        }
        WebInspector.extensionServer.evaluate(expression, false, false, evaluateOptions, this._category._extensionOrigin, onEvaluate.bind(this));
    }
}

WebInspector.AuditExtensionFormatters = {
    /**
     * @this {WebInspector.AuditExtensionCategoryResults}
     * @param {string} expression
     * @param {string} title
     * @param {?Object} evaluateOptions
     * @return {!Element}
     */
    object: function(expression, title, evaluateOptions)
    {
        var parentElement = createElement("div");
        function onEvaluate(remoteObject)
        {
            var section = new WebInspector.ObjectPropertiesSection(remoteObject, title);
            section.expanded = true;
            section.editable = false;
            parentElement.appendChild(section.element);
        }
        this.evaluate(expression, evaluateOptions, onEvaluate);
        return parentElement;
    },

    /**
     * @this {WebInspector.AuditExtensionCategoryResults}
     * @param {string} expression
     * @param {?Object} evaluateOptions
     * @return {!Element}
     */
    node: function(expression, evaluateOptions)
    {
        var parentElement = createElement("div");
        this.evaluate(expression, evaluateOptions, onEvaluate);

        /**
         * @param {!WebInspector.RemoteObject} remoteObject
         */
        function onEvaluate(remoteObject)
        {
            WebInspector.Renderer.renderPromise(remoteObject).then(appendRenderer).thenOrCatch(remoteObject.release.bind(remoteObject)).done();

            /**
             * @param {!Element} element
             */
            function appendRenderer(element)
            {
                parentElement.appendChild(element);
            }
        }
        return parentElement;
    }
}

WebInspector.AuditExtensionCategoryResults._lastId = 0;


================================================
FILE: front-end/audits/AuditFormatters.js
================================================
/*
 * Copyright (C) 2012 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @constructor
 */
WebInspector.AuditFormatters = function()
{
}

WebInspector.AuditFormatters.Registry = {

    /**
     * @param {string} text
     * @return {!Text}
     */
    text: function(text)
    {
        return createTextNode(text);
    },

    /**
     * @param {string} snippetText
     * @return {!Element}
     */
    snippet: function(snippetText)
    {
        var div = createElement("div");
        div.textContent = snippetText;
        div.className = "source-code";
        return div;
    },

    /**
     * @return {!Element}
     */
    concat: function()
    {
        var parent = createElement("span");
        for (var arg = 0; arg < arguments.length; ++arg)
            parent.appendChild(WebInspector.auditFormatters.apply(arguments[arg]));
        return parent;
    },

    /**
     * @param {string} url
     * @param {string=} displayText
     * @return {!Element}
     */
    url: function(url, displayText)
    {
        return WebInspector.createExternalAnchor(url, displayText);
    },

    /**
     * @param {string} url
     * @param {number=} line
     * @return {!Element}
     */
    resourceLink: function(url, line)
    {
        // FIXME: use WebInspector.Linkifier
        return WebInspector.linkifyResourceAsNode(url, line, "console-message-url webkit-html-resource-link");
    }
};

WebInspector.AuditFormatters.prototype = {
    /**
     * @param {string|boolean|number|!Object} value
     * @return {!Node}
     */
    apply: function(value)
    {
        var formatter;
        var type = typeof value;
        var args;

        switch (type) {
        case "string":
        case "boolean":
        case "number":
            formatter = WebInspector.AuditFormatters.Registry.text;
        args = [ value.toString() ];
        break;

        case "object":
            if (value instanceof Node)
                return value;
            if (value instanceof Array) {
                formatter = WebInspector.AuditFormatters.Registry.concat;
                args = value;
            } else if (value.type && value.arguments) {
                formatter = WebInspector.AuditFormatters.Registry[value.type];
                args = value.arguments;
            }
        }
        if (!formatter)
            throw "Invalid value or formatter: " + type + JSON.stringify(value);

        return formatter.apply(null, args);
    },

    /**
     * @param {!Object} formatters
     * @param {?Object} thisArgument
     * @param {string|boolean|number|!Object} value
     * @return {*}
     */
    partiallyApply: function(formatters, thisArgument, value)
    {
        if (value instanceof Array)
            return value.map(this.partiallyApply.bind(this, formatters, thisArgument));
        if (typeof value === "object" && typeof formatters[value.type] === "function" && value.arguments)
            return formatters[value.type].apply(thisArgument, value.arguments);
        return value;
    }
}

WebInspector.auditFormatters = new WebInspector.AuditFormatters();


================================================
FILE: front-end/audits/AuditLauncherView.js
================================================
/*
 * Copyright (C) 2011 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @constructor
 * @param {!WebInspector.AuditController} auditController
 * @extends {WebInspector.VBox}
 */
WebInspector.AuditLauncherView = function(auditController)
{
    WebInspector.VBox.call(this);
    this.setMinimumSize(100, 25);

    this._auditController = auditController;

    this._categoryIdPrefix = "audit-category-item-";
    this._auditRunning = false;

    this.element.classList.add("audit-launcher-view");
    this.element.classList.add("panel-enabler-view");

    this._contentElement = createElement("div");
    this._contentElement.className = "audit-launcher-view-content";
    this.element.appendChild(this._contentElement);
    this._boundCategoryClickListener = this._categoryClicked.bind(this);

    this._resetResourceCount();

    this._sortedCategories = [];

    this._headerElement = createElement("h1");
    this._headerElement.className = "no-audits";
    this._headerElement.textContent = WebInspector.UIString("No audits to run");
    this._contentElement.appendChild(this._headerElement);

    WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes.RequestStarted, this._onRequestStarted, this);
    WebInspector.targetManager.addModelListener(WebInspector.NetworkManager, WebInspector.NetworkManager.EventTypes.RequestFinished, this._onRequestFinished, this);

    var defaultSelectedAuditCategory = {};
    defaultSelectedAuditCategory[WebInspector.AuditLauncherView.AllCategoriesKey] = true;
    this._selectedCategoriesSetting = WebInspector.settings.createSetting("selectedAuditCategories", defaultSelectedAuditCategory);
}

WebInspector.AuditLauncherView.AllCategoriesKey = "__AllCategories";

WebInspector.AuditLauncherView.prototype = {
    _resetResourceCount: function()
    {
        this._loadedResources = 0;
        this._totalResources = 0;
    },

    _onRequestStarted: function(event)
    {
        var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
        // Ignore long-living WebSockets for the sake of progress indicator, as we won't be waiting them anyway.
        if (request.resourceType() === WebInspector.resourceTypes.WebSocket)
            return;
        ++this._totalResources;
        this._updateResourceProgress();
    },

    _onRequestFinished: function(event)
    {
        var request = /** @type {!WebInspector.NetworkRequest} */ (event.data);
        // See resorceStarted for details.
        if (request.resourceType() === WebInspector.resourceTypes.WebSocket)
            return;
        ++this._loadedResources;
        this._updateResourceProgress();
    },

    /**
     * @param {!WebInspector.AuditCategory} category
     */
    addCategory: function(category)
    {
        if (!this._sortedCategories.length)
            this._createLauncherUI();

        var selectedCategories = this._selectedCategoriesSetting.get();
        var categoryElement = this._createCategoryElement(category.displayName, category.id);
        category._checkboxElement = categoryElement.firstChild;
        if (this._selectAllCheckboxElement.checked || selectedCategories[category.displayName]) {
            category._checkboxElement.checked = true;
            ++this._currentCategoriesCount;
        }

        /**
         * @param {!WebInspector.AuditCategory} a
         * @param {!WebInspector.AuditCategory} b
         * @return {number}
         */
        function compareCategories(a, b)
        {
            var aTitle = a.displayName || "";
            var bTitle = b.displayName || "";
            return aTitle.localeCompare(bTitle);
        }
        var insertBefore = insertionIndexForObjectInListSortedByFunction(category, this._sortedCategories, compareCategories);
        this._categoriesElement.insertBefore(categoryElement, this._categoriesElement.children[insertBefore]);
        this._sortedCategories.splice(insertBefore, 0, category);
        this._selectedCategoriesUpdated();
    },

    /**
     * @param {boolean} auditRunning
     */
    _setAuditRunning: function(auditRunning)
    {
        if (this._auditRunning === auditRunning)
            return;
        this._auditRunning = auditRunning;
        this._updateButton();
        this._toggleUIComponents(this._auditRunning);
        if (this._auditRunning)
            this._startAudit();
        else
            this._stopAudit();
    },

    _startAudit: function()
    {
        var catIds = [];
        for (var category = 0; category < this._sortedCategories.length; ++category) {
            if (this._sortedCategories[category]._checkboxElement.checked)
                catIds.push(this._sortedCategories[category].id);
        }

        this._resetResourceCount();
        this._progressIndicator = new WebInspector.ProgressIndicator();
        this._progressIndicator.hideStopButton();
        this._buttonContainerElement.appendChild(this._progressIndicator.element);
        this._displayResourceLoadingProgress = true;

        /**
         * @this {WebInspector.AuditLauncherView}
         */
        function onAuditStarted()
        {
            this._displayResourceLoadingProgress = false;
        }
        this._auditController.initiateAudit(catIds, this._progressIndicator, this._auditPresentStateElement.checked, onAuditStarted.bind(this), this._setAuditRunning.bind(this, false));
    },

    _stopAudit: function()
    {
        this._displayResourceLoadingProgress = false;
        this._progressIndicator.cancel();
        this._progressIndicator.done();
        delete this._progressIndicator;
    },

    /**
     * @param {boolean} disable
     */
    _toggleUIComponents: function(disable)
    {
        this._selectAllCheckboxElement.disabled = disable;
        this._categoriesElement.disabled = disable;
        this._auditPresentStateElement.disabled = disable;
        this._auditReloadedStateElement.disabled = disable;
    },

    _launchButtonClicked: function(event)
    {
        this._setAuditRunning(!this._auditRunning);
    },

    _clearButtonClicked: function()
    {
        this._auditController.clearResults();
    },

    /**
     * @param {boolean} checkCategories
     * @param {boolean=} userGesture
     */
    _selectAllClicked: function(checkCategories, userGesture)
    {
        var childNodes = this._categoriesElement.childNodes;
        for (var i = 0, length = childNodes.length; i < length; ++i)
            childNodes[i].firstChild.checked = checkCategories;
        this._currentCategoriesCount = checkCategories ? this._sortedCategories.length : 0;
        this._selectedCategoriesUpdated(userGesture);
    },

    _categoryClicked: function(event)
    {
        this._currentCategoriesCount += event.target.checked ? 1 : -1;
        this._selectAllCheckboxElement.checked = this._currentCategoriesCount === this._sortedCategories.length;
        this._selectedCategoriesUpdated(true);
    },

    /**
     * @param {string} title
     * @param {string} id
     */
    _createCategoryElement: function(title, id)
    {
        var labelElement = createElement("label");
        labelElement.id = this._categoryIdPrefix + id;

        var element = createElement("input");
        element.type = "checkbox";
        if (id !== "")
            element.addEventListener("click", this._boundCategoryClickListener, false);
        labelElement.appendChild(element);
        labelElement.createTextChild(title);
        labelElement.__displayName = title;

        return labelElement;
    },

    _createLauncherUI: function()
    {
        this._headerElement = createElement("h1");
        this._headerElement.textContent = WebInspector.UIString("Select audits to run");

        for (var child = 0; child < this._contentElement.children.length; ++child)
            this._contentElement.removeChild(this._contentElement.children[child]);

        this._contentElement.appendChild(this._headerElement);

        /**
         * @param {!Event} event
         * @this {WebInspector.AuditLauncherView}
         */
        function handleSelectAllClick(event)
        {
            this._selectAllClicked(event.target.checked, true);
        }
        var categoryElement = this._createCategoryElement(WebInspector.UIString("Select All"), "");
        categoryElement.id = "audit-launcher-selectall";
        this._selectAllCheckboxElement = categoryElement.firstChild;
        this._selectAllCheckboxElement.checked = this._selectedCategoriesSetting.get()[WebInspector.AuditLauncherView.AllCategoriesKey];
        this._selectAllCheckboxElement.addEventListener("click", handleSelectAllClick.bind(this), false);
        this._contentElement.appendChild(categoryElement);

        this._categoriesElement = this._contentElement.createChild("fieldset", "audit-categories-container");
        this._currentCategoriesCount = 0;

        this._contentElement.createChild("div", "flexible-space");

        this._buttonContainerElement = this._contentElement.createChild("div", "button-container");

        var labelElement = this._buttonContainerElement.createChild("label");
        this._auditPresentStateElement = labelElement.createChild("input");
        this._auditPresentStateElement.name = "audit-mode";
        this._auditPresentStateElement.type = "radio";
        this._auditPresentStateElement.checked = true;
        this._auditPresentStateLabelElement = createTextNode(WebInspector.UIString("Audit Present State"));
        labelElement.appendChild(this._auditPresentStateLabelElement);

        labelElement = this._buttonContainerElement.createChild("label");
        this._auditReloadedStateElement = labelElement.createChild("input");
        this._auditReloadedStateElement.name = "audit-mode";
        this._auditReloadedStateElement.type = "radio";
        labelElement.createTextChild("Reload Page and Audit on Load");

        this._launchButton = this._buttonContainerElement.createChild("button", "text-button");
        this._launchButton.textContent = WebInspector.UIString("Run");
        this._launchButton.addEventListener("click", this._launchButtonClicked.bind(this), false);

        this._clearButton = this._buttonContainerElement.createChild("button", "text-button");
        this._clearButton.textContent = WebInspector.UIString("Clear");
        this._clearButton.addEventListener("click", this._clearButtonClicked.bind(this), false);

        this._selectAllClicked(this._selectAllCheckboxElement.checked);
    },

    _updateResourceProgress: function()
    {
        if (this._displayResourceLoadingProgress)
            this._progressIndicator.setTitle(WebInspector.UIString("Loading (%d of %d)", this._loadedResources, this._totalResources));
    },

    /**
     * @param {boolean=} userGesture
     */
    _selectedCategoriesUpdated: function(userGesture)
    {
        // Save present categories only upon user gesture to clean up junk from past versions and removed extensions.
        // Do not remove old categories if not handling a user gesture, as there's chance categories will be added
        // later during start-up.
        var selectedCategories = userGesture ? {} : this._selectedCategoriesSetting.get();
        var childNodes = this._categoriesElement.childNodes;
        for (var i = 0, length = childNodes.length; i < length; ++i)
            selectedCategories[childNodes[i].__displayName] = childNodes[i].firstChild.checked;
        selectedCategories[WebInspector.AuditLauncherView.AllCategoriesKey] = this._selectAllCheckboxElement.checked;
        this._selectedCategoriesSetting.set(selectedCategories);
        this._updateButton();
    },

    _updateButton: function()
    {
        this._launchButton.textContent = this._auditRunning ? WebInspector.UIString("Stop") : WebInspector.UIString("Run");
        this._launchButton.disabled = !this._currentCategoriesCount;
    },

    __proto__: WebInspector.VBox.prototype
}


================================================
FILE: front-end/audits/AuditResultView.js
================================================
/*
 * Copyright (C) 2009 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * @constructor
 * @extends {WebInspector.SidebarPaneStack}
 * @param {!Array.<!WebInspector.AuditCategoryResult>} categoryResults
 */
WebInspector.AuditResultView = function(categoryResults)
{
    WebInspector.SidebarPaneStack.call(this);
    this.setMinimumSize(100, 25);
    this.element.classList.add("audit-result-view", "fill");

    function categorySorter(a, b) {
        return (a.title || "").localeCompare(b.title || "");
    }
    categoryResults.sort(categorySorter);
    for (var i = 0; i < categoryResults.length; ++i)
        this.addPane(new WebInspector.AuditCategoryResultPane(categoryResults[i]));
}

WebInspector.AuditResultView.prototype = {
    __proto__: WebInspector.SidebarPaneStack.prototype
}

/**
 * @constructor
 * @extends {WebInspector.SidebarPane}
 * @param {!WebInspector.AuditCategoryResult} categoryResult
 */
WebInspector.AuditCategoryResultPane = function(categoryResult)
{
    WebInspector.SidebarPane.call(this, categoryResult.title);
    var treeOutlineElement = createElement("ol");
    this.bodyElement.classList.add("audit-result-tree");
    this.bodyElement.appendChild(treeOutlineElement);

    this._treeOutline = new TreeOutline(treeOutlineElement);
    this._treeOutline.expandTreeElementsWhenArrowing = true;

    function ruleSorter(a, b)
    {
        var result = WebInspector.AuditRule.SeverityOrder[a.severity || 0] - WebInspector.AuditRule.SeverityOrder[b.severity || 0];
        if (!result)
            result = (a.value || "").localeCompare(b.value || "");
        return result;
    }

    categoryResult.ruleResults.sort(ruleSorter);

    for (var i = 0; i < categoryResult.ruleResults.length; ++i) {
        var ruleResult = categoryResult.ruleResults[i];
        var treeElement = this._appendResult(this._treeOutline, ruleResult, ruleResult.severity);
        treeElement.listItemElement.classList.add("audit-result");
    }
    this.expand();
}

WebInspector.AuditCategoryResultPane.prototype = {
    /**
     * @param {(!TreeOutline|!TreeElement)} parentTreeElement
     * @param {!WebInspector.AuditRuleResult} result
     * @param {?WebInspector.AuditRule.Severity=} severity
     */
    _appendResult: function(parentTreeElement, result, severity)
    {
        var title = "";

        if (typeof result.value === "string") {
            title = result.value;
            if (result.violationCount)
                title = String.sprintf("%s (%d)", title, result.violationCount);
        }

        var titleFragment = createDocumentFragment();
        if (severity) {
            var severityElement = createElement("div");
            severityElement.classList.add("severity", severity);
            titleFragment.appendChild(severityElement);
        }
        titleFragment.createTextChild(title);

        var treeElement = new TreeElement(titleFragment, null, !!result.children);
        parentTreeElement.appendChild(treeElement);

        if (result.className)
            treeElement.listItemElement.classList.add(result.className);
        if (typeof result.value !== "string")
            treeElement.listItemElement.appendChild(WebInspector.auditFormatters.apply(result.value));

        if (result.children) {
            for (var i = 0; i < result.children.length; ++i)
                this._appendResult(treeElement, result.children[i]);
        }
        if (result.expanded) {
            treeElement.listItemElement.classList.remove("parent");
            treeElement.listItemElement.classList.add("parent-expanded");
            treeElement.expand();
        }
        return treeElement;
    },

    __proto__: WebInspector.SidebarPane.prototype
}


================================================
FILE: front-end/audits/AuditRules.js
================================================
/*
 * Copyright (C) 2010 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

WebInspector.AuditRules.IPAddressRegexp = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;

WebInspector.AuditRules.CacheableResponseCodes =
{
    200: true,
    203: true,
    206: true,
    300: true,
    301: true,
    410: true,

    304: true // Underlying request is cacheable
}

/**
 * @param {!Array.<!WebInspector.NetworkRequest>} requests
 * @param {?Array.<!WebInspector.resourceTypes>} types
 * @param {boolean} needFullResources
 * @return {!Object.<string, !Array.<!WebInspector.NetworkRequest|string>>}
 */
WebInspector.AuditRules.getDomainToResourcesMap = function(requests, types, needFullResources)
{
    var domainToResourcesMap = {};
    for (var i = 0, size = requests.length; i < size; ++i) {
        var request = requests[i];
        if (types && types.indexOf(request.resourceType()) === -1)
            continue;
        var parsedURL = request.url.asParsedURL();
        if (!parsedURL)
            continue;
        var domain = parsedURL.host;
        var domainResources = domainToResourcesMap[domain];
        if (domainResources === undefined) {
          domainResources = [];
          domainToResourcesMap[domain] = domainResources;
        }
        domainResources.push(needFullResources ? request : request.url);
    }
    return domainToResourcesMap;
}

/**
 * @constructor
 * @extends {WebInspector.AuditRule}
 */
WebInspector.AuditRules.GzipRule = function()
{
    WebInspector.AuditRule.call(this, "network-gzip", WebInspector.UIString("Enable gzip compression"));
}

WebInspector.AuditRules.GzipRule.prototype = {
    /**
     * @param {!WebInspector.Target} target
     * @param {!Array.<!WebInspector.NetworkRequest>} requests
     * @param {!WebInspector.AuditRuleResult} result
     * @param {function(?WebInspector.AuditRuleResult)} callback
     * @param {!WebInspector.Progress} progress
     */
    doRun: function(target, requests, result, callback, progress)
    {
        var totalSavings = 0;
        var compressedSize = 0;
        var candidateSize = 0;
        var summary = result.addChild("", true);
        for (var i = 0, length = requests.length; i < length; ++i) {
            var request = requests[i];
            if (request.cached() || request.statusCode === 304)
                continue; // Do not test cached resources.
            if (this._shouldCompress(request)) {
                var size = request.resourceSize;
                candidateSize += size;
                if (this._isCompressed(request)) {
                    compressedSize += size;
                    continue;
                }
                var savings = 2 * size / 3;
                totalSavings += savings;
                summary.addFormatted("%r could save ~%s", request.url, Number.bytesToString(savings));
                result.violationCount++;
            }
        }
        if (!totalSavings) {
            callback(null);
            return;
        }
        summary.value = WebInspector.UIString("Compressing the following resources with gzip could reduce their transfer size by about two thirds (~%s):", Number.bytesToString(totalSavings));
        callback(result);
    },

    /**
     * @param {!WebInspector.NetworkRequest} request
     */
    _isCompressed: function(request)
    {
        var encodingHeader = request.responseHeaderValue("Content-Encoding");
        if (!encodingHeader)
            return false;

        return /\b(?:gzip|deflate)\b/.test(encodingHeader);
    },

    /**
     * @param {!WebInspector.NetworkRequest} request
     */
    _shouldCompress: function(request)
    {
        return request.resourceType().isTextType() && request.parsedURL.host && request.resourceSize !== undefined && request.resourceSize > 150;
    },

    __proto__: WebInspector.AuditRule.prototype
}

/**
 * @constructor
 * @extends {WebInspector.AuditRule}
 * @param {string} id
 * @param {string} name
 * @param {!WebInspector.ResourceType} type
 * @param {string} resourceTypeName
 * @param {boolean} allowedPerDomain
 */
WebInspector.AuditRules.CombineExternalResourcesRule = function(id, name, type, resourceTypeName, allowedPerDomain)
{
    WebInspector.AuditRule.call(this, id, name);
    this._type = type;
    this._resourceTypeName = resourceTypeName;
    this._allowedPerDomain = allowedPerDomain;
}

WebInspector.AuditRules.CombineExternalResourcesRule.prototype = {
    /**
     * @param {!WebInspector.Target} target
     * @param {!Array.<!WebInspector.NetworkRequest>} requests
     * @param {!WebInspector.AuditRuleResult} result
     * @param {function(?WebInspector.AuditRuleResult)} callback
     * @param {!WebInspector.Progress} progress
     */
    doRun: function(target, requests, result, callback, progress)
    {
        var domainToResourcesMap = WebInspector.AuditRules.getDomainToResourcesMap(requests, [this._type], false);
        var penalizedResourceCount = 0;
        // TODO: refactor according to the chosen i18n approach
        var summary = result.addChild("", true);
        for (var domain in domainToResourcesMap) {
            var domainResources = domainToResourcesMap[domain];
            var extraResourceCount = domainResources.length - this._allowedPerDomain;
            if (extraResourceCount <= 0)
                continue;
            penalizedResourceCount += extraResourceCount - 1;
            summary.addChild(WebInspector.UIString("%d %s resources served from %s.", domainResources.length, this._resourceTypeName, WebInspector.AuditRuleResult.resourceDomain(domain)));
            result.violationCount += domainResources.length;
        }
        if (!penalizedResourceCount) {
            callback(null);
            return;
        }

        summary.value = WebInspector.UIString("There are multiple resources served from same domain. Consider combining them into as few files as possible.");
        callback(result);
    },

    __proto__: WebInspector.AuditRule.prototype
}

/**
 * @constructor
 * @extends {WebInspector.AuditRules.CombineExternalResourcesRule}
 */
WebInspector.AuditRules.CombineJsResourcesRule = function(allowedPerDomain) {
    WebInspector.AuditRules.CombineExternalResourcesRule.call(this, "page-externaljs", WebInspector.UIString("Combine external JavaScript"), WebInspector.resourceTypes.Script, "JavaScript", allowedPerDomain);
}

WebInspector.AuditRules.CombineJsResourcesRule.prototype = {
    __proto__: WebInspector.AuditRules.CombineExternalResourcesRule.prototype
}

/**
 * @constructor
 * @extends {WebInspector.AuditRules.CombineExternalResourcesRule}
 */
WebInspector.AuditRules.CombineCssResourcesRule = function(allowedPerDomain) {
    WebInspector.AuditRules.CombineExternalResourcesRule.call(this, "page-externalcss", WebInspector.UIString("Combine external CSS"), WebInspector.resourceTypes.Stylesheet, "CSS", allowedPerDomain);
}

WebInspector.AuditRules.CombineCssResourcesRule.prototype = {
    __proto__: WebInspector.AuditRules.CombineExternalResourcesRule.prototype
}

/**
 * @constructor
 * @extends {WebInspector.AuditRule}
 */
WebInspector.AuditRules.MinimizeDnsLookupsRule = function(hostCountThreshold) {
    WebInspector.AuditRule.call(this, "network-minimizelookups", WebInspector.UIString("Minimize DNS lookups"));
    this._hostCountThreshold = hostCountThreshold;
}

WebInspector.AuditRules.MinimizeDnsLookupsRule.prototype = {
    /**
     * @param {!WebInspector.Target} target
     * @param {!Array.<!WebInspector.NetworkRequest>} requests
     * @param {!WebInspector.AuditRuleResult} result
     * @param {function(?WebInspector.AuditRuleResult)} callback
     * @param {!WebInspector.Progress} progress
     */
    doRun: function(target, requests, result, callback, progress)
    {
        var summary = result.addChild("");
        var domainToResourcesMap = WebInspector.AuditRules.getDomainToResourcesMap(requests, null, false);
        for (var domain in domainToResourcesMap) {
            if (domainToResourcesMap[domain].length > 1)
                continue;
            var parsedURL = domain.asParsedURL();
            if (!parsedURL)
                continue;
            if (!parsedURL.host.search(WebInspector.AuditRules.IPAddressRegexp))
                continue; // an IP address
            summary.addSnippet(domain);
            result.violationCount++;
        }
        if (!summary.children || summary.children.length <= this._hostCountThreshold) {
            callback(null);
            return;
        }

        summary.value = WebInspector.UIString("The following domains only serve one resource each. If possible, avoid the extra DNS lookups by serving these resources from existing domains.");
        callback(result);
    },

    __proto__: WebInspector.AuditRule.prototype
}

/**
 * @constructor
 * @extends {WebInspector.AuditRule}
 */
WebInspector.AuditRules.ParallelizeDownloadRule = function(optimalHostnameCount, minRequestThreshold, minBalanceThreshold)
{
    WebInspector.AuditRule.call(this, "network-parallelizehosts", WebInspector.UIString("Parallelize downloads across hostnames"));
    this._optimalHostnameCount = optimalHostnameCount;
    this._minRequestThreshold = minRequestThreshold;
    this._minBalanceThreshold = minBalanceThreshold;
}

WebInspector.AuditRules.ParallelizeDownloadRule.prototype = {
    /**
     * @param {!WebInspector.Target} target
     * @param {!Array.<!WebInspector.NetworkRequest>} requests
     * @param {!WebInspector.AuditRuleResult} result
     * @param {function(?WebInspector.AuditRuleResult)} callback
     * @param {!WebInspector.Progress} progress
     */
    doRun: function(target, requests, result, callback, progress)
    {
        /**
         * @param {string} a
         * @param {string} b
         */
        function hostSorter(a, b)
        {
            var aCount = domainToResourcesMap[a].length;
            var bCount = domainToResourcesMap[b].length;
            return (aCount < bCount) ? 1 : (aCount === bCount) ? 0 : -1;
        }

        var domainToResourcesMap = WebInspector.AuditRules.getDomainToResourcesMap(
            requests,
            [WebInspector.resourceTypes.Stylesheet, WebInspector.resourceTypes.Image],
            true);

        var hosts = [];
        for (var url in domainToResourcesMap)
            hosts.push(url);

        if (!hosts.length) {
            callback(null); // no hosts (local file or something)
            return;
        }

        hosts.sort(hostSorter);

        var optimalHostnameCount = this._optimalHostnameCount;
        if (hosts.length > optimalHostnameCount)
            hosts.splice(optimalHostnameCount);

        var busiestHostResourceCount = domainToResourcesMap[hosts[0]].length;
        var requestCountAboveThreshold = busiestHostResourceCount - this._minRequestThreshold;
        if (requestCountAboveThreshold <= 0) {
            callback(null);
            return;
        }

        var avgResourcesPerHost = 0;
        for (var i = 0, size = hosts.length; i < size; ++i)
            avgResourcesPerHost += domainToResourcesMap[hosts[i]].length;

        // Assume optimal parallelization.
        avgResourcesPerHost /= optimalHostnameCount;
        avgResourcesPerHost = Math.max(avgResourcesPerHost, 1);

        var pctAboveAvg = (requestCountAboveThreshold / avgResourcesPerHost) - 1.0;
        var minBalanceThreshold = this._minBalanceThreshold;
        if (pctAboveAvg < minBalanceThreshold) {
            callback(null);
            return;
        }

        var requestsOnBusiestHost = domainToResourcesMap[hosts[0]];
        var entry = result.addChild(WebInspector.UIString("This page makes %d parallelizable requests to %s. Increase download parallelization by distributing the following requests across multiple hostnames.", busiestHostResourceCount, hosts[0]), true);
        for (var i = 0; i < requestsOnBusiestHost.length; ++i)
            entry.addURL(requestsOnBusiestHost[i].url);

        result.violationCount = requestsOnBusiestHost.length;
        callback(result);
    },

    __proto__: WebInspector.AuditRule.prototype
}

/**
 * The reported CSS rule size is incorrect (parsed != original in WebKit),
 * so use percentages instead, which gives a better approximation.
 * @constructor
 * @extends {WebInspector.AuditRule}
 */
WebInspector.AuditRules.UnusedCssRule = function()
{
    WebInspector.AuditRule.call(this, "page-unusedcss", WebInspector.UIString("Remove unused CSS rules"));
}

WebInspector.AuditRules.UnusedCssRule.prototype = {
    /**
     * @param {!WebInspector.Target} target
     * @param {!Array.<!WebInspector.NetworkRequest>} requests
     * @param {!WebInspector.AuditRuleResult} result
     * @param {function(?WebInspector.AuditRuleResult)} callback
     * @param {!WebInspector.Progress} progress
     */
    doRun: function(target, requests, result, callback, progress)
    {
        /**
         * @param {!Array.<!WebInspector.AuditRules.ParsedStyleSheet>} styleSheets
         */
        function evalCallback(styleSheets) {
            if (!styleSheets.length)
                return callback(null);

            var selectors = [];
            var testedSelectors = {};
            for (var i = 0; i < styleSheets.length; ++i) {
                var styleSheet = styleSheets[i];
                for (var curRule = 0; curRule < styleSheet.rules.length; ++curRule) {
                    var selectorText = styleSheet.rules[curRule].selectorText;
                    if (testedSelectors[selectorText])
                        continue;
                    selectors.push(selectorText);
                    testedSelectors[selectorText] = 1;
                }
            }

            var foundSelectors = {};

            /**
             * @param {!Array.<!WebInspector.AuditRules.ParsedStyleSheet>} styleSheets
             */
            function selectorsCallback(styleSheets)
            {
                if (progress.isCanceled())
                    return;

                var inlineBlockOrdinal = 0;
                var totalStylesheetSize = 0;
                var totalUnusedStylesheetSize = 0;
                var summary;

                for (var i = 0; i < styleSheets.length; ++i) {
                    var styleSheet = styleSheets[i];
                    var unusedRules = [];
                    for (var curRule = 0; curRule < styleSheet.rules.length; ++curRule) {
                        var rule = styleSheet.rules[curRule];
                        if (!testedSelectors[rule.selectorText] || foundSelectors[rule.selectorText])
                            continue;
                        unusedRules.push(rule.selectorText);
                    }
                    totalStylesheetSize += styleSheet.rules.length;
                    totalUnusedStylesheetSize += unusedRules.length;

                    if (!unusedRules.length)
                        continue;

                    var resource = WebInspector.resourceForURL(styleSheet.sourceURL);
                    var isInlineBlock = resource && resource.request && resource.request.resourceType() === WebInspector.resourceTypes.Document;
                    var url = !isInlineBlock ? WebInspector.AuditRuleResult.linkifyDisplayName(styleSheet.sourceURL) : WebInspector.UIString("Inline block #%d", ++inlineBlockOrdinal);
                    var pctUnused = Math.round(100 * unusedRules.length / styleSheet.rules.length);
                    if (!summary)
                        summary = result.addChild("", true);
                    var entry = summary.addFormatted("%s: %d% is not used by the current page.", url, pctUnused);

                    for (var j = 0; j < unusedRules.length; ++j)
                        entry.addSnippet(unusedRules[j]);

                    result.violationCount += unusedRules.length;
                }

                if (!totalUnusedStylesheetSize)
                    return callback(null);

                var totalUnusedPercent = Math.round(100 * totalUnusedStylesheetSize / totalStylesheetSize);
                summary.value = WebInspector.UIString("%s rules (%d%) of CSS not used by the current page.", totalUnusedStylesheetSize, totalUnusedPercent);

                callback(result);
            }

            /**
             * @param {?function()} boundSelectorsCallback
             * @param {string} selector
             * @param {?DOMAgent.NodeId} nodeId
             */
            function queryCallback(boundSelectorsCallback, selector, nodeId)
            {
                if (nodeId)
                    foundSelectors[selector] = true;
                if (boundSelectorsCallback)
                    boundSelectorsCallback();
            }

            /**
             * @param {!Array.<string>} selectors
             * @param {!WebInspector.DOMDocument} document
             */
            function documentLoaded(selectors, document) {
                var pseudoSelectorRegexp = /::?(?:[\w-]+)(?:\(.*?\))?/g;
                if (!selectors.length) {
                    selectorsCallback([]);
                    return;
                }
                for (var i = 0; i < selectors.length; ++i) {
                    if (progress.isCanceled())
                        return;
                    var effectiveSelector = selectors[i].replace(pseudoSelectorRegexp, "");
                    target.domModel.querySelector(document.id, effectiveSelector, queryCallback.bind(null, i === selectors.length - 1 ? selectorsCallback.bind(null, styleSheets) : null, selectors[i]));
                }
            }

            target.domModel.requestDocument(documentLoaded.bind(null, selectors));
        }

        var styleSheetInfos = target.cssModel.allStyleSheets();
        if (!styleSheetInfos || !styleSheetInfos.length) {
            evalCallback([]);
            return;
        }
        var styleSheetProcessor = new WebInspector.AuditRules.StyleSheetProcessor(styleSheetInfos, progress, evalCallback);
        styleSheetProcessor.run();
    },

    __proto__: WebInspector.AuditRule.prototype
}

/**
 * @typedef {!{sourceURL: string, rules: !Array.<!WebInspector.CSSParser.StyleRule>}}
 */
WebInspector.AuditRules.ParsedStyleSheet;

/**
 * @constructor
 * @param {!Array.<!WebInspector.CSSStyleSheetHeader>} styleSheetHeaders
 * @param {!WebInspector.Progress} progress
 * @param {function(!Array.<!WebInspector.AuditRules.ParsedStyleSheet>)} styleSheetsParsedCallback
 */
WebInspector.AuditRules.StyleSheetProcessor = function(styleSheetHeaders, progress, styleSheetsParsedCallback)
{
    this._styleSheetHeaders = styleSheetHeaders;
    this._progress = progress;
    this._styleSheets = [];
    this._styleSheetsParsedCallback = styleSheetsParsedCallback;
}

WebInspector.AuditRules.StyleSheetProcessor.prototype = {
    run: function()
    {
        this._parser = new WebInspector.CSSParser();
        this._processNextStyleSheet();
    },

    _terminateWorker: function()
    {
        if (this._parser) {
            this._parser.dispose();
            delete this._parser;
        }
    },

    _finish: function()
    {
        this._terminateWorker();
        this._styleSheetsParsedCallback(this._styleSheets);
    },

    _processNextStyleSheet: function()
    {
        if (!this._styleSheetHeaders.length) {
            this._finish();
            return;
        }
        this._currentStyleSheetHeader = this._styleSheetHeaders.shift();
        this._parser.fetchAndParse(this._currentStyleSheetHeader, this._onStyleSheetParsed.bind(this));
    },

    /**
     * @param {!Array.<!WebInspector.CSSParser.Rule>} rules
     */
    _onStyleSheetParsed: function(rules)
    {
        if (this._progress.isCanceled()) {
            this._terminateWorker();
            return;
        }

        var styleRules = [];
        for (var i = 0; i < rules.length; ++i) {
            var rule = rules[i];
            if (rule.selectorText)
                styleRules.push(rule);
        }
        this._styleSheets.push({
            sourceURL: this._currentStyleSheetHeader.sourceURL,
            rules: styleRules
        });
        this._processNextStyleSheet();
    },
}

/**
 * @constructor
 * @extends {WebInspector.AuditRule}
 */
WebInspector.AuditRules.CacheControlRule = function(id, name)
{
    WebInspector.AuditRule.call(this, id, name);
}

WebInspector.AuditRules.CacheControlRule.MillisPerMonth = 1000 * 60 * 60 * 24 * 30;

WebInspector.AuditRules.CacheControlRule.prototype = {
    /**
     * @param {!WebInspector.Target} target
     * @param {!Array.<!WebInspector.NetworkRequest>} requests
     * @param {!WebInspector.AuditRuleResult} result
     * @param {function(!WebInspector.AuditRuleResult)} callback
     * @param {!WebInspector.Progress} progress
     */
    doRun: function(target, requests, result, callback, progress)
    {
        var cacheableAndNonCacheableResources = this._cacheableAndNonCacheableResources(requests);
        if (cacheableAndNonCacheableResources[0].length)
            this.runChecks(cacheableAndNonCacheableResources[0], result);
        this.handleNonCacheableResources(cacheableAndNonCacheableResources[1], result);

        callback(result);
    },

    handleNonCacheableResources: function(requests, result)
    {
    },

    _cacheableAndNonCacheableResources: function(requests)
    {
        var processedResources = [[], []];
        for (var i = 0; i < requests.length; ++i) {
            var request = requests[i];
            if (!this.isCacheableResource(request))
                continue;
            if (this._isExplicitlyNonCacheable(request))
                processedResources[1].push(request);
            else
                processedResources[0].push(request);
        }
        return processedResources;
    },

    execCheck: function(messageText, requestCheckFunction, requests, result)
    {
        var requestCount = requests.length;
        var urls = [];
        for (var i = 0; i < requestCount; ++i) {
            if (requestCheckFunction.call(this, requests[i]))
                urls.push(requests[i].url);
        }
        if (urls.length) {
            var entry = result.addChild(messageText, true);
            entry.addURLs(urls);
            result.violationCount += urls.length;
        }
    },

    /**
     * @param {!WebInspector.NetworkRequest} request
     * @param {number} timeMs
     * @return {boolean}
     */
    freshnessLifetimeGreaterThan: function(request, timeMs)
    {
        var dateHeader = this.responseHeader(request, "Date");
        if (!dateHeader)
            return false;

        var dateHeaderMs = Date.parse(dateHeader);
        if (isNaN(dateHeaderMs))
            return false;

        var freshnessLifetimeMs;
        var maxAgeMatch = this.responseHeaderMatch(request, "Cache-Control", "max-age=(\\d+)");

        if (maxAgeMatch)
            freshnessLifetimeMs = (maxAgeMatch[1]) ? 1000 * maxAgeMatch[1] : 0;
        else {
            var expiresHeader = this.responseHeader(request, "Expires");
            if (expiresHeader) {
                var expDate = Date.parse(expiresHeader);
                if (!isNaN(expDate))
                    freshnessLifetimeMs = expDate - dateHeaderMs;
            }
        }

        return (isNaN(freshnessLifetimeMs)) ? false : freshnessLifetimeMs > timeMs;
    },

    /**
     * @param {!WebInspector.NetworkRequest} request
     * @param {string} header
     * @return {string|undefined}
     */
    responseHeader: function(request, header)
    {
        return request.responseHeaderValue(header);
    },

    /**
     * @param {!WebInspector.NetworkRequest} request
     * @param {string} header
     * @return {boolean}
     */
    hasResponseHeader: function(request, header)
    {
        return request.responseHeaderValue(header) !== undefined;
    },

    /**
     * @param {!WebInspector.NetworkRequest} request
     * @return {boolean}
     */
    isCompressible: function(request)
    {
        return request.resourceType().isTextType();
    },

    /**
     * @param {!WebInspector.NetworkRequest} request
     * @return {boolean}
     */
    isPubliclyCacheable: function(request)
    {
        if (this._isExplicitlyNonCacheable(request))
            return false;

        if (this.responseHeaderMatch(request, "Cache-Control"
Download .txt
gitextract_u55b8pyf/

├── .gitattributes
├── .gitignore
├── .jshintignore
├── .jshintrc
├── .npmignore
├── .travis.yml
├── CONTRIBUTING.md
├── ChangeLog.md
├── LICENSE
├── MAINTAINERS.md
├── README.md
├── bin/
│   ├── inspector.js
│   ├── node-debug.js
│   └── run-repl.js
├── docs/
│   └── embedding.md
├── front-end/
│   ├── Images/
│   │   └── src/
│   │       ├── optimize_png.hashes
│   │       └── svg2png.hashes
│   ├── OWNERS
│   ├── Runtime.js
│   ├── UglifyJS/
│   │   └── parse-js.js
│   ├── audits/
│   │   ├── AuditCategories.js
│   │   ├── AuditCategory.js
│   │   ├── AuditController.js
│   │   ├── AuditExtensionCategory.js
│   │   ├── AuditFormatters.js
│   │   ├── AuditLauncherView.js
│   │   ├── AuditResultView.js
│   │   ├── AuditRules.js
│   │   ├── AuditsPanel.js
│   │   ├── auditsPanel.css
│   │   └── module.json
│   ├── bindings/
│   │   ├── BreakpointManager.js
│   │   ├── CSSWorkspaceBinding.js
│   │   ├── CompilerScriptMapping.js
│   │   ├── ContentProviderBasedProjectDelegate.js
│   │   ├── ContentScriptProjectDecorator.js
│   │   ├── DebuggerWorkspaceBinding.js
│   │   ├── DefaultScriptMapping.js
│   │   ├── FileUtils.js
│   │   ├── Linkifier.js
│   │   ├── LiveLocation.js
│   │   ├── NetworkUISourceCodeProvider.js
│   │   ├── NetworkWorkspaceBinding.js
│   │   ├── PresentationConsoleMessageHelper.js
│   │   ├── ResourceScriptMapping.js
│   │   ├── ResourceUtils.js
│   │   ├── SASSSourceMapping.js
│   │   ├── ScriptSnippetModel.js
│   │   ├── StylesSourceMapping.js
│   │   ├── TempFile.js
│   │   ├── WorkspaceController.js
│   │   └── module.json
│   ├── cm/
│   │   ├── LICENSE
│   │   ├── LICENSE_python
│   │   ├── PRESUBMIT.py
│   │   ├── clike.js
│   │   ├── closebrackets.js
│   │   ├── codemirror.css
│   │   ├── codemirror.js
│   │   ├── coffeescript.js
│   │   ├── comment.js
│   │   ├── css.js
│   │   ├── headlesscodemirror.js
│   │   ├── htmlembedded.js
│   │   ├── htmlmixed.js
│   │   ├── javascript.js
│   │   ├── markselection.js
│   │   ├── matchbrackets.js
│   │   ├── overlay.js
│   │   ├── php.js
│   │   ├── python.js
│   │   ├── shell.js
│   │   └── xml.js
│   ├── common/
│   │   ├── Color.js
│   │   ├── Console.js
│   │   ├── ContentProvider.js
│   │   ├── Geometry.js
│   │   ├── Lock.js
│   │   ├── ModuleExtensionInterfaces.js
│   │   ├── NotificationService.js
│   │   ├── Object.js
│   │   ├── ParsedURL.js
│   │   ├── Progress.js
│   │   ├── ResourceType.js
│   │   ├── Settings.js
│   │   ├── StaticContentProvider.js
│   │   ├── TextRange.js
│   │   ├── TextUtils.js
│   │   ├── Throttler.js
│   │   ├── UIString.js
│   │   ├── WebInspector.js
│   │   ├── WorkerRuntime.js
│   │   └── module.json
│   ├── components/
│   │   ├── CookiesTable.js
│   │   ├── DOMBreakpointsSidebarPane.js
│   │   ├── DOMPresentationUtils.js
│   │   ├── DockController.js
│   │   ├── Drawer.js
│   │   ├── ExecutionContextSelector.js
│   │   ├── HandlerRegistry.js
│   │   ├── InspectElementModeController.js
│   │   ├── InspectorView.js
│   │   ├── NativeBreakpointsSidebarPane.js
│   │   ├── ObjectPopoverHelper.js
│   │   ├── ObjectPropertiesSection.js
│   │   ├── ShortcutsScreen.js
│   │   ├── TargetsComboBoxController.js
│   │   ├── breakpointsList.css
│   │   └── module.json
│   ├── console/
│   │   ├── ConsolePanel.js
│   │   ├── ConsoleView.js
│   │   ├── ConsoleViewMessage.js
│   │   ├── consoleView.css
│   │   └── module.json
│   ├── devices/
│   │   ├── DevicesView.js
│   │   ├── devicesView.css
│   │   └── module.json
│   ├── devtools.css
│   ├── devtools.html
│   ├── devtools.js
│   ├── devtools.json
│   ├── devtools_app/
│   │   ├── DevToolsAPI.js
│   │   ├── DevToolsApp.js
│   │   ├── InspectorFrontendHostImpl.js
│   │   ├── UITests.js
│   │   └── module.json
│   ├── dialog.css
│   ├── documentation/
│   │   ├── DocumentationCatalog.js
│   │   ├── DocumentationView.js
│   │   ├── JSArticle.js
│   │   ├── WikiParser.js
│   │   ├── documentationView.css
│   │   └── module.json
│   ├── elements/
│   │   ├── AnimationsSidebarPane.js
│   │   ├── ElementsBreadcrumbs.js
│   │   ├── ElementsPanel.js
│   │   ├── ElementsSidebarPane.js
│   │   ├── ElementsTreeOutline.js
│   │   ├── EventListenersSidebarPane.js
│   │   ├── MetricsSidebarPane.js
│   │   ├── PlatformFontsSidebarPane.js
│   │   ├── PropertiesSidebarPane.js
│   │   ├── Spectrum.js
│   │   ├── StylesSectionModel.js
│   │   ├── StylesSidebarPane.js
│   │   ├── breadcrumbs.css
│   │   ├── elementsPanel.css
│   │   ├── elementsTreeOutline.css
│   │   ├── module.json
│   │   └── spectrum.css
│   ├── extensions/
│   │   ├── ExtensionAPI.js
│   │   ├── ExtensionAuditCategory.js
│   │   ├── ExtensionPanel.js
│   │   ├── ExtensionRegistryStub.js
│   │   ├── ExtensionServer.js
│   │   ├── ExtensionView.js
│   │   └── module.json
│   ├── externs.js
│   ├── heap_snapshot_worker/
│   │   ├── AllocationProfile.js
│   │   ├── HeapSnapshot.js
│   │   ├── HeapSnapshotLoader.js
│   │   ├── HeapSnapshotWorker.js
│   │   ├── HeapSnapshotWorkerDispatcher.js
│   │   ├── JSHeapSnapshot.js
│   │   └── module.json
│   ├── host/
│   │   ├── InspectorFrontendHost.js
│   │   ├── Platform.js
│   │   ├── UserMetrics.js
│   │   └── module.json
│   ├── inspector.css
│   ├── inspector.html
│   ├── inspector.js
│   ├── inspector.json
│   ├── inspectorCommon.css
│   ├── inspectorStyle.css
│   ├── inspectorSyntaxHighlight.css
│   ├── layers/
│   │   ├── LayerPaintProfilerView.js
│   │   ├── LayersPanel.js
│   │   └── module.json
│   ├── main/
│   │   ├── AdvancedApp.js
│   │   ├── App.js
│   │   ├── HelpScreenUntilReload.js
│   │   ├── Main.js
│   │   ├── OverridesView.js
│   │   ├── RenderingOptions.js
│   │   ├── ScreencastApp.js
│   │   ├── SimpleApp.js
│   │   ├── TestController.js
│   │   ├── Tests.js
│   │   ├── accelerometer.css
│   │   ├── module.json
│   │   └── overrides.css
│   ├── network/
│   │   ├── FilterSuggestionBuilder.js
│   │   ├── HARWriter.js
│   │   ├── NetworkDataGridNode.js
│   │   ├── NetworkItemView.js
│   │   ├── NetworkLogView.js
│   │   ├── NetworkPanel.js
│   │   ├── NetworkTimeCalculator.js
│   │   ├── RequestCookiesView.js
│   │   ├── RequestHTMLView.js
│   │   ├── RequestHeadersView.js
│   │   ├── RequestJSONView.js
│   │   ├── RequestPreviewView.js
│   │   ├── RequestResponseView.js
│   │   ├── RequestTimingView.js
│   │   ├── RequestView.js
│   │   ├── ResourceWebSocketFrameView.js
│   │   ├── module.json
│   │   ├── networkLogView.css
│   │   ├── networkPanel.css
│   │   ├── requestCookiesView.css
│   │   ├── requestHeadersView.css
│   │   └── webSocketFrameView.css
│   ├── platform/
│   │   ├── DOMExtension.js
│   │   ├── Promise.js
│   │   ├── module.json
│   │   └── utilities.js
│   ├── popover.css
│   ├── profiler/
│   │   ├── CPUProfileBottomUpDataGrid.js
│   │   ├── CPUProfileDataGrid.js
│   │   ├── CPUProfileFlameChart.js
│   │   ├── CPUProfileTopDownDataGrid.js
│   │   ├── CPUProfileView.js
│   │   ├── CanvasProfileView.js
│   │   ├── CanvasReplayStateView.js
│   │   ├── HeapSnapshotCommon.js
│   │   ├── HeapSnapshotDataGrids.js
│   │   ├── HeapSnapshotGridNodes.js
│   │   ├── HeapSnapshotProxy.js
│   │   ├── HeapSnapshotView.js
│   │   ├── ProfileLauncherView.js
│   │   ├── ProfileTypeRegistry.js
│   │   ├── ProfilesPanel.js
│   │   ├── canvasProfiler.css
│   │   ├── heapProfiler.css
│   │   ├── module.json
│   │   └── profilesPanel.css
│   ├── promises/
│   │   ├── PromisePane.js
│   │   ├── module.json
│   │   └── promisePane.css
│   ├── resources/
│   │   ├── ApplicationCacheItemsView.js
│   │   ├── CookieItemsView.js
│   │   ├── DOMStorageItemsView.js
│   │   ├── DatabaseQueryView.js
│   │   ├── DatabaseTableView.js
│   │   ├── DirectoryContentView.js
│   │   ├── FileContentView.js
│   │   ├── FileSystemView.js
│   │   ├── IndexedDBViews.js
│   │   ├── ResourcesPanel.js
│   │   ├── indexedDBViews.css
│   │   ├── module.json
│   │   └── resourcesPanel.css
│   ├── screencast/
│   │   ├── ScreencastView.js
│   │   ├── module.json
│   │   └── screencastView.css
│   ├── script_formatter_worker/
│   │   ├── CSSFormatter.js
│   │   ├── JavaScriptFormatter.js
│   │   ├── ScriptFormatterWorker.js
│   │   └── module.json
│   ├── sdk/
│   │   ├── AnimationModel.js
│   │   ├── ApplicationCacheModel.js
│   │   ├── BlackboxSupport.js
│   │   ├── CPUProfileDataModel.js
│   │   ├── CPUProfilerModel.js
│   │   ├── CSSMetadata.js
│   │   ├── CSSParser.js
│   │   ├── CSSStyleModel.js
│   │   ├── ConsoleModel.js
│   │   ├── ContentProviders.js
│   │   ├── CookieParser.js
│   │   ├── DOMModel.js
│   │   ├── DOMStorage.js
│   │   ├── Database.js
│   │   ├── DebuggerModel.js
│   │   ├── FileSystemModel.js
│   │   ├── HAREntry.js
│   │   ├── HeapProfilerModel.js
│   │   ├── IndexedDBModel.js
│   │   ├── InspectorBackend.js
│   │   ├── LayerTreeModel.js
│   │   ├── NetworkLog.js
│   │   ├── NetworkManager.js
│   │   ├── NetworkRequest.js
│   │   ├── OverridesSupport.js
│   │   ├── PaintProfiler.js
│   │   ├── PowerProfiler.js
│   │   ├── RemoteObject.js
│   │   ├── Resource.js
│   │   ├── ResourceTreeModel.js
│   │   ├── RuntimeModel.js
│   │   ├── Script.js
│   │   ├── SnippetStorage.js
│   │   ├── SourceMap.js
│   │   ├── Target.js
│   │   ├── TracingManager.js
│   │   ├── WorkerManager.js
│   │   ├── WorkerTargetManager.js
│   │   └── module.json
│   ├── settings/
│   │   ├── EditFileSystemDialog.js
│   │   ├── FrameworkBlackboxDialog.js
│   │   ├── SettingsScreen.js
│   │   └── module.json
│   ├── sidebarPane.css
│   ├── source_frame/
│   │   ├── CodeMirrorTextEditor.js
│   │   ├── CodeMirrorUtils.js
│   │   ├── FontView.js
│   │   ├── GoToLineDialog.js
│   │   ├── ImageView.js
│   │   ├── ResourceSourceFrame.js
│   │   ├── SourceFrame.js
│   │   ├── cmdevtools.css
│   │   ├── fontView.css
│   │   ├── imageView.css
│   │   ├── module.json
│   │   └── resourceSourceFrame.css
│   ├── sources/
│   │   ├── AddSourceMapURLDialog.js
│   │   ├── AdvancedSearchView.js
│   │   ├── BreakpointsSidebarPane.js
│   │   ├── CSSSourceFrame.js
│   │   ├── CallStackSidebarPane.js
│   │   ├── EditingLocationHistoryManager.js
│   │   ├── FileBasedSearchResultsPane.js
│   │   ├── FilePathScoreFunction.js
│   │   ├── FilteredItemSelectionDialog.js
│   │   ├── InplaceFormatterEditorAction.js
│   │   ├── JavaScriptSourceFrame.js
│   │   ├── NavigatorView.js
│   │   ├── Placard.js
│   │   ├── RevisionHistoryView.js
│   │   ├── ScopeChainSidebarPane.js
│   │   ├── ScriptFormatter.js
│   │   ├── ScriptFormatterEditorAction.js
│   │   ├── SimpleHistoryManager.js
│   │   ├── SourcesNavigator.js
│   │   ├── SourcesPanel.js
│   │   ├── SourcesSearchScope.js
│   │   ├── SourcesView.js
│   │   ├── StyleSheetOutlineDialog.js
│   │   ├── TabbedEditorContainer.js
│   │   ├── ThreadsSidebarPane.js
│   │   ├── UISourceCodeFrame.js
│   │   ├── WatchExpressionsSidebarPane.js
│   │   ├── WorkspaceMappingTip.js
│   │   ├── filteredItemSelectionDialog.css
│   │   ├── jsdifflib.js
│   │   ├── module.json
│   │   ├── navigatorView.css
│   │   ├── revisionHistory.css
│   │   ├── sourcesPanel.css
│   │   └── sourcesView.css
│   ├── suggestBox.css
│   ├── tabbedPane.css
│   ├── temp_storage_shared_worker/
│   │   ├── TempStorageSharedWorker.js
│   │   └── module.json
│   ├── timeline/
│   │   ├── CountersGraph.js
│   │   ├── LayerDetailsView.js
│   │   ├── LayerTreeOutline.js
│   │   ├── Layers3DView.js
│   │   ├── MemoryCountersGraph.js
│   │   ├── PaintProfilerView.js
│   │   ├── TimelineEventOverview.js
│   │   ├── TimelineFlameChart.js
│   │   ├── TimelineFrameModel.js
│   │   ├── TimelineFrameOverview.js
│   │   ├── TimelineJSProfile.js
│   │   ├── TimelineLayersView.js
│   │   ├── TimelineMemoryOverview.js
│   │   ├── TimelineModel.js
│   │   ├── TimelineOverviewPane.js
│   │   ├── TimelinePaintProfilerView.js
│   │   ├── TimelinePanel.js
│   │   ├── TimelinePowerGraph.js
│   │   ├── TimelinePowerOverview.js
│   │   ├── TimelinePresentationModel.js
│   │   ├── TimelineUIUtils.js
│   │   ├── TimelineView.js
│   │   ├── TracingModel.js
│   │   ├── TransformController.js
│   │   ├── module.json
│   │   └── timelinePanel.css
│   ├── toolbox/
│   │   ├── InspectedPagePlaceholder.js
│   │   ├── MediaQueryInspector.js
│   │   ├── OverridesUI.js
│   │   ├── ResponsiveDesignView.js
│   │   ├── module.json
│   │   └── responsiveDesignView.css
│   ├── toolbox.css
│   ├── toolbox.html
│   ├── toolbox.js
│   ├── toolbox.json
│   ├── toolbox_bootstrap/
│   │   ├── Toolbox.js
│   │   └── module.json
│   ├── treeoutline.js
│   ├── ui/
│   │   ├── ActionRegistry.js
│   │   ├── CompletionDictionary.js
│   │   ├── Context.js
│   │   ├── ContextMenu.js
│   │   ├── DOMSyntaxHighlighter.js
│   │   ├── DataGrid.js
│   │   ├── Dialog.js
│   │   ├── DropDownMenu.js
│   │   ├── EmptyView.js
│   │   ├── FilterBar.js
│   │   ├── FlameChart.js
│   │   ├── ForwardedInputEventHandler.js
│   │   ├── HelpScreen.js
│   │   ├── InplaceEditor.js
│   │   ├── KeyboardShortcut.js
│   │   ├── OverviewGrid.js
│   │   ├── Panel.js
│   │   ├── PieChart.js
│   │   ├── Popover.js
│   │   ├── ProgressIndicator.js
│   │   ├── ResizerWidget.js
│   │   ├── RootView.js
│   │   ├── SearchableView.js
│   │   ├── Section.js
│   │   ├── SettingsUI.js
│   │   ├── ShortcutRegistry.js
│   │   ├── ShowMoreDataGridNode.js
│   │   ├── SidebarPane.js
│   │   ├── SidebarTreeElement.js
│   │   ├── SoftContextMenu.js
│   │   ├── SortableDataGrid.js
│   │   ├── SplitView.js
│   │   ├── StackView.js
│   │   ├── StatusBar.js
│   │   ├── SuggestBox.js
│   │   ├── TabbedPane.js
│   │   ├── TextEditor.js
│   │   ├── TextPrompt.js
│   │   ├── TimelineGrid.js
│   │   ├── UIUtils.js
│   │   ├── View.js
│   │   ├── ViewportControl.js
│   │   ├── ViewportDataGrid.js
│   │   ├── ZoomManager.js
│   │   ├── dataGrid.css
│   │   ├── filter.css
│   │   ├── flameChart.css
│   │   ├── helpScreen.css
│   │   ├── module.json
│   │   ├── overviewGrid.css
│   │   ├── panelEnablerView.css
│   │   ├── pieChart.css
│   │   ├── progressIndicator.css
│   │   ├── searchableView.css
│   │   ├── splitView.css
│   │   ├── statusBar.css
│   │   └── treeoutline.js
│   └── workspace/
│       ├── FileManager.js
│       ├── FileSystemMapping.js
│       ├── FileSystemWorkspaceBinding.js
│       ├── IsolatedFileSystem.js
│       ├── IsolatedFileSystemManager.js
│       ├── SearchConfig.js
│       ├── UISourceCode.js
│       ├── Workspace.js
│       └── module.json
├── front-end-node/
│   ├── Images/
│   │   └── src/
│   │       └── favicon.eps
│   ├── NodeInspectorOverrides.js
│   ├── console/
│   │   ├── ConsoleExtentions.js
│   │   └── module.json
│   ├── inspector.json
│   ├── main/
│   │   ├── MainOverrides.js
│   │   └── module.json
│   ├── module.json
│   ├── network/
│   │   ├── NetworkPanel.js
│   │   └── module.json
│   ├── profiler/
│   │   ├── SaveOverrides.js
│   │   └── module.json
│   ├── protocol.json
│   ├── settings/
│   │   ├── SettingsScreenOverrides.css
│   │   ├── SettingsScreenOverrides.js
│   │   └── module.json
│   └── sources/
│       ├── SourcesOverrides.js
│       └── module.json
├── index.js
├── lib/
│   ├── BreakEventHandler.js
│   ├── CallFramesProvider.js
│   ├── ConsoleAgent.js
│   ├── ConsoleClient.js
│   ├── DebuggerAgent.js
│   ├── DebuggerClient.js
│   ├── FrontendClient.js
│   ├── FrontendCommandHandler.js
│   ├── HeapProfilerAgent.js
│   ├── HeapProfilerClient.js
│   ├── Injections/
│   │   ├── ConsoleAgent.js
│   │   ├── HeapProfilerAgent.js
│   │   ├── NetworkAgent.js
│   │   └── ProfilerAgent.js
│   ├── InjectorClient.js
│   ├── InjectorServer.js
│   ├── NetworkAgent.js
│   ├── PageAgent.js
│   ├── ProfilerAgent.js
│   ├── RuntimeAgent.js
│   ├── ScriptFileStorage.js
│   ├── ScriptManager.js
│   ├── callback.js
│   ├── config.js
│   ├── convert.js
│   ├── debug-server.js
│   ├── debugger.js
│   ├── plugins.js
│   └── session.js
├── package.json
├── test/
│   ├── CallFramesProvider.js
│   ├── ConsoleAgent.js
│   ├── DebuggerAgent.js
│   ├── DebuggerClient.js
│   ├── FrontendCommandHandler.test.js
│   ├── HeapProfilerAgent.js
│   ├── InjectorClient.js
│   ├── NetworkAgent.js
│   ├── PageAgent.js
│   ├── ProfilerAgent.js
│   ├── RuntimeAgent.js
│   ├── ScriptFileStorage.js
│   ├── ScriptManager.js
│   ├── config.js
│   ├── convert.js
│   ├── fixtures/
│   │   ├── BreakInFunction.js
│   │   ├── Commandlet.js
│   │   ├── InspectObject.js
│   │   ├── LiveEdit.js
│   │   ├── PeriodicConsoleLog.js
│   │   └── ssl_cert_and_key.txt
│   ├── helpers/
│   │   ├── SessionStub.js
│   │   ├── launcher.js
│   │   └── wsmock.js
│   ├── index.js
│   ├── mocha.opts
│   ├── node-debug.test.js
│   └── plugins.js
└── tools/
    ├── git-changelog.sh
    ├── protocol.json
    ├── release.sh
    └── update-front-end.sh
Download .txt
SYMBOL INDEX (2109 symbols across 279 files)

FILE: bin/inspector.js
  function onError (line 35) | function onError(err) {
  function onListening (line 56) | function onListening() {
  function notifyParentProcess (line 66) | function notifyParentProcess(msg) {

FILE: bin/node-debug.js
  function main (line 38) | function main() {
  function createConfig (line 75) | function createConfig(argv) {
  function getCmd (line 117) | function getCmd() {
  function startInspectorProcess (line 121) | function startInspectorProcess(callback) {
  function formatNodeInspectorError (line 144) | function formatNodeInspectorError(err) {
  function startDebuggedProcess (line 156) | function startDebuggedProcess(callback) {
  function checkWinCmdFiles (line 178) | function checkWinCmdFiles(script) {
  function openBrowserAndPrintInfo (line 188) | function openBrowserAndPrintInfo(url, isUnixSocket) {

FILE: bin/run-repl.js
  function loadAndDescribeModuleInCwd (line 28) | function loadAndDescribeModuleInCwd() {
  function startRepl (line 38) | function startRepl() {
  function onReplExit (line 55) | function onReplExit() {
  function getModuleName (line 60) | function getModuleName() {
  function getSampleCommand (line 72) | function getSampleCommand() {

FILE: front-end-node/NodeInspectorOverrides.js
  function closeAllNotifications (line 107) | function closeAllNotifications() {
  function clickOnNotification (line 112) | function clickOnNotification(event) {
  function closeNotification (line 117) | function closeNotification(notification) {
  function setMessageTitle (line 136) | function setMessageTitle(message, reason, currentFrame) {
  function setMessageHeader (line 147) | function setMessageHeader(message, reason, currentFrame) {
  function setMessageFrameInfo (line 160) | function setMessageFrameInfo(message, reason, currentFrame) {
  function processDebuggerPaused (line 186) | function processDebuggerPaused(event) {
  function showMainAppFile (line 221) | function showMainAppFile() {
  function getAllUiSourceCodes (line 243) | function getAllUiSourceCodes() {

FILE: front-end-node/sources/SourcesOverrides.js
  function handler (line 52) | function handler() {

FILE: front-end/Runtime.js
  function loadResourcePromise (line 40) | function loadResourcePromise(url)
  function normalizePath (line 76) | function normalizePath(path)
  function loadScriptsPromise (line 107) | function loadScriptsPromise(scriptNames)
  function Runtime (line 167) | function Runtime(descriptors, coreModuleNames)
  function parseModuleDescriptors (line 240) | function parseModuleDescriptors(configuration)
  function filterOutFailuresResults (line 330) | function filterOutFailuresResults(results)
  function handler (line 345) | function handler(index, e)
  function isInstanceOf (line 445) | function isInstanceOf(targetType)
  function isContextTypeKnown (line 467) | function isContextTypeKnown(targetType)
  function filter (line 486) | function filter(extension)
  function orderComparator (line 504) | function orderComparator(extension1, extension2)
  function markAsLoaded (line 666) | function markAsLoaded()
  function cacheStylesheet (line 693) | function cacheStylesheet(path, content)
  function constructInstance (line 822) | function constructInstance()

FILE: front-end/UglifyJS/parse-js.js
  function is_alphanumeric_char (line 203) | function is_alphanumeric_char(ch) {
  function is_identifier_char (line 210) | function is_identifier_char(ch) {
  function is_digit (line 214) | function is_digit(ch) {
  function parse_js_number (line 219) | function parse_js_number(num) {
  function JS_Parse_Error (line 229) | function JS_Parse_Error(message, line, col, pos) {
  function js_error (line 245) | function js_error(message, line, col, pos) {
  function is_token (line 249) | function is_token(token, type, val) {
  function tokenizer (line 255) | function tokenizer($TEXT) {
  function NodeWithToken (line 607) | function NodeWithToken(str, start, end) {
  function parse (line 615) | function parse($TEXT, strict_mode, embed_tokens) {
  function curry (line 1193) | function curry(f) {
  function prog1 (line 1198) | function prog1(ret) {
  function array_to_hash (line 1206) | function array_to_hash(a) {
  function slice (line 1213) | function slice(a, start) {
  function characters (line 1217) | function characters(str) {
  function member (line 1221) | function member(name, array) {
  function HOP (line 1228) | function HOP(obj, prop) {

FILE: front-end/audits/AuditCategory.js
  method id (line 40) | get id()
  method displayName (line 47) | get displayName()

FILE: front-end/audits/AuditController.js
  function ruleResultReadyCallback (line 57) | function ruleResultReadyCallback(categoryResult, ruleResult)
  function categoryDoneCallback (line 73) | function categoryDoneCallback()
  function startAuditWhenResourcesReady (line 128) | function startAuditWhenResourcesReady()

FILE: front-end/audits/AuditExtensionCategory.js
  method id (line 51) | get id()
  method displayName (line 59) | get displayName()
  function onEvaluate (line 176) | function onEvaluate(error, result, wasThrown)
  function onEvaluate (line 198) | function onEvaluate(remoteObject)
  function onEvaluate (line 223) | function onEvaluate(remoteObject)

FILE: front-end/audits/AuditLauncherView.js
  function compareCategories (line 121) | function compareCategories(a, b)
  function onAuditStarted (line 166) | function onAuditStarted()
  function handleSelectAllClick (line 256) | function handleSelectAllClick(event)

FILE: front-end/audits/AuditResultView.js
  function categorySorter (line 42) | function categorySorter(a, b) {
  function ruleSorter (line 69) | function ruleSorter(a, b)

FILE: front-end/audits/AuditRules.js
  function hostSorter (line 289) | function hostSorter(a, b)
  function evalCallback (line 374) | function evalCallback(styleSheets) {
  function doneCallback (line 882) | function doneCallback()
  function imageStylesReady (line 895) | function imageStylesReady(imageId, styles, isLastStyle, computedStyle)
  function getStyles (line 954) | function getStyles(nodeIds)
  function onDocumentAvailable (line 982) | function onDocumentAvailable(root)
  function evalCallback (line 1016) | function evalCallback(evalResult)
  function externalStylesheetsReceived (line 1046) | function externalStylesheetsReceived(root, inlineStyleNodeIds, nodeIds)
  function inlineStylesReceived (line 1073) | function inlineStylesReceived(root, nodeIds)
  function onDocumentAvailable (line 1086) | function onDocumentAvailable(root)
  function evalCallback (line 1119) | function evalCallback(resultValue)
  function cssBeforeInlineReceived (line 1147) | function cssBeforeInlineReceived(lateStyleIds, nodeIds)
  function lateStylesReceived (line 1174) | function lateStylesReceived(root, nodeIds)
  function onDocumentAvailable (line 1188) | function onDocumentAvailable(root)
  function resultCallback (line 1418) | function resultCallback(receivedCookies) {
  function maxSizeSorter (line 1482) | function maxSizeSorter(a, b)
  function avgSizeSorter (line 1487) | function avgSizeSorter(a, b)
  function collectorCallback (line 1494) | function collectorCallback(request, cookie)

FILE: front-end/audits/AuditsPanel.js
  method categoriesById (line 79) | get categoriesById()
  method visibleView (line 146) | get visibleView()
  method visibleView (line 151) | set visibleView(x)
  method id (line 206) | get id()
  method displayName (line 216) | get displayName()
  function callbackWrapper (line 244) | function callbackWrapper(result)
  method id (line 292) | get id()
  method displayName (line 297) | get displayName()
  method severity (line 305) | set severity(severity)
  function append (line 448) | function append(a, b)
  method selectable (line 490) | get selectable()
  method selectable (line 529) | get selectable()

FILE: front-end/bindings/CompilerScriptMapping.js
  function sourceMapLoaded (line 165) | function sourceMapLoaded(sourceMap)
  function sourceMapLoaded (line 309) | function sourceMapLoaded(sourceMap)
  function unbindUISourceCodeForURL (line 329) | function unbindUISourceCodeForURL(sourceURL)

FILE: front-end/bindings/ContentProviderBasedProjectDelegate.js
  function innerCallback (line 98) | function innerCallback(content, encoded, mimeType)
  function innerCallback (line 144) | function innerCallback(success, newName)
  function searchInContent (line 255) | function searchInContent(path, callback)
  function searchInContentCallback (line 291) | function searchInContentCallback(path, matches)
  function doneCallback (line 298) | function doneCallback()

FILE: front-end/bindings/ContentScriptProjectDecorator.js
  function contentProjectWithName (line 44) | function contentProjectWithName(project)
  function contextWithOriginAndName (line 72) | function contextWithOriginAndName(context)

FILE: front-end/bindings/FileUtils.js
  function onChange (line 208) | function onChange(event)
  function callbackWrapper (line 238) | function callbackWrapper(accepted)

FILE: front-end/bindings/Linkifier.js
  function clickHandler (line 102) | function clickHandler(event)
  function clickHandler (line 240) | function clickHandler(event)

FILE: front-end/bindings/NetworkUISourceCodeProvider.js
  function populateFrame (line 59) | function populateFrame(frame)
  function loadFallbackContent (line 211) | function loadFallbackContent()
  function requestContentLoaded (line 235) | function requestContentLoaded(content)
  function documentContentLoaded (line 257) | function documentContentLoaded(content)

FILE: front-end/bindings/PresentationConsoleMessageHelper.js
  method lineNumber (line 301) | get lineNumber()

FILE: front-end/bindings/ResourceScriptMapping.js
  function innerCallback (line 314) | function innerCallback(error, errorData)
  function callback (line 415) | function callback(source)

FILE: front-end/bindings/ResourceUtils.js
  function linkifier (line 146) | function linkifier(title, url, lineNumber, columnNumber)

FILE: front-end/bindings/SASSSourceMapping.js
  function sassLoadedViaNetwork (line 174) | function sassLoadedViaNetwork(error, statusCode, headers, content)
  function metadataReceived (line 190) | function metadataReceived(timestamp)
  function contentLoaded (line 295) | function contentLoaded(error, statusCode, headers, content)
  function metadataCallback (line 349) | function metadataCallback(timestamp)
  function sourceMapLoaded (line 456) | function sourceMapLoaded(sourceMap)
  function sourceMapLoaded (line 517) | function sourceMapLoaded(sourceMap)

FILE: front-end/bindings/ScriptSnippetModel.js
  function compileCallback (line 252) | function compileCallback(target, error, scriptId, exceptionDetails)
  function runCallback (line 291) | function runCallback(target, error, result, exceptionDetails)
  function performSearch (line 608) | function performSearch()

FILE: front-end/bindings/StylesSourceMapping.js
  function callback (line 255) | function callback(error)
  function callback (line 316) | function callback(uiSourceCode, content)

FILE: front-end/bindings/TempFile.js
  function requestTempFileSystem (line 51) | function requestTempFileSystem()
  function getDirectoryEntry (line 59) | function getDirectoryEntry(fs)
  function getFileEntry (line 67) | function getFileEntry(dir)
  function createFileWriter (line 75) | function createFileWriter(fileEntry)
  function truncateFile (line 84) | function truncateFile(writer)
  function didGetFile (line 171) | function didGetFile(file)
  function didFailToGetFile (line 190) | function didFailToGetFile(error)
  function didGetFile (line 207) | function didGetFile(file)
  function didFailToGetFile (line 213) | function didFailToGetFile(error)
  function handleError (line 387) | function handleError(event)
  function handleMessage (line 396) | function handleMessage(event)

FILE: front-end/bindings/WorkspaceController.js
  function refreshFileSystems (line 55) | function refreshFileSystems(callback)

FILE: front-end/cm/PRESUBMIT.py
  function _CheckCodeMirrorChanges (line 30) | def _CheckCodeMirrorChanges(input_api, output_api):
  function CheckChangeOnUpload (line 43) | def CheckChangeOnUpload(input_api, output_api):

FILE: front-end/cm/clike.js
  function tokenBase (line 28) | function tokenBase(stream, state) {
  function tokenString (line 74) | function tokenString(quote) {
  function tokenComment (line 87) | function tokenComment(stream, state) {
  function Context (line 99) | function Context(indented, column, type, align, prev) {
  function pushContext (line 106) | function pushContext(state, col, type) {
  function popContext (line 112) | function popContext(state) {
  function words (line 179) | function words(str) {
  function cppHook (line 188) | function cppHook(stream, state) {
  function cpp11StringHook (line 206) | function cpp11StringHook(stream, state) {
  function tokenAtString (line 231) | function tokenAtString(stream, state) {
  function tokenRawString (line 244) | function tokenRawString(stream, state) {
  function def (line 255) | function def(mimes, mode) {

FILE: front-end/cm/closebrackets.js
  function charsAround (line 33) | function charsAround(cm, pos) {
  function buildKeymap (line 39) | function buildKeymap(pairs) {
  function buildExplodeHandler (line 122) | function buildExplodeHandler(pairs) {

FILE: front-end/cm/codemirror.js
  function CodeMirror (line 61) | function CodeMirror(place, options) {
  function Display (line 122) | function Display(place, doc) {
  function loadMode (line 246) | function loadMode(cm) {
  function resetModeState (line 251) | function resetModeState(cm) {
  function wrappingChanged (line 262) | function wrappingChanged(cm) {
  function estimateHeight (line 279) | function estimateHeight(cm) {
  function estimateLineHeights (line 297) | function estimateLineHeights(cm) {
  function keyMapChanged (line 305) | function keyMapChanged(cm) {
  function themeChanged (line 311) | function themeChanged(cm) {
  function guttersChanged (line 317) | function guttersChanged(cm) {
  function updateGutters (line 325) | function updateGutters(cm) {
  function updateGutterSpace (line 340) | function updateGutterSpace(cm) {
  function lineLength (line 349) | function lineLength(line) {
  function findMaxLine (line 368) | function findMaxLine(cm) {
  function setGuttersForLineNumbers (line 384) | function setGuttersForLineNumbers(options) {
  function hScrollbarTakesSpace (line 396) | function hScrollbarTakesSpace(cm) {
  function measureForScrollbars (line 402) | function measureForScrollbars(cm) {
  function updateScrollbars (line 416) | function updateScrollbars(cm, measure) {
  function visibleLines (line 473) | function visibleLines(display, doc, viewport) {
  function alignHorizontally (line 497) | function alignHorizontally(cm) {
  function maybeUpdateLineNumberWidth (line 516) | function maybeUpdateLineNumberWidth(cm) {
  function lineNumberFor (line 534) | function lineNumberFor(options, i) {
  function compensateForHScroll (line 541) | function compensateForHScroll(display) {
  function DisplayUpdate (line 547) | function DisplayUpdate(cm, viewport, force) {
  function updateDisplayIfNeeded (line 564) | function updateDisplayIfNeeded(cm, update) {
  function postUpdateDisplay (line 632) | function postUpdateDisplay(cm, update) {
  function updateDisplaySimple (line 662) | function updateDisplaySimple(cm, viewport) {
  function setDocumentHeight (line 674) | function setDocumentHeight(cm, measure) {
  function checkForWebkitWidthBug (line 679) | function checkForWebkitWidthBug(cm, measure) {
  function updateHeightsInViewport (line 690) | function updateHeightsInViewport(cm) {
  function updateWidgetHeight (line 717) | function updateWidgetHeight(line) {
  function getDimensions (line 724) | function getDimensions(cm) {
  function patchDisplay (line 741) | function patchDisplay(cm, updateNumbersFrom, dims) {
  function updateLineForChanges (line 786) | function updateLineForChanges(cm, lineView, lineN, dims) {
  function ensureLineWrapped (line 799) | function ensureLineWrapped(lineView) {
  function updateLineBackground (line 810) | function updateLineBackground(lineView) {
  function getLineContent (line 824) | function getLineContent(cm, lineView) {
  function updateLineText (line 837) | function updateLineText(cm, lineView) {
  function updateLineClasses (line 852) | function updateLineClasses(lineView) {
  function updateLineGutter (line 862) | function updateLineGutter(cm, lineView, lineN, dims) {
  function updateLineWidgets (line 889) | function updateLineWidgets(lineView, dims) {
  function buildLineElement (line 900) | function buildLineElement(cm, lineView, lineN, dims) {
  function insertLineWidgets (line 914) | function insertLineWidgets(lineView, dims) {
  function insertLineWidgetsFor (line 920) | function insertLineWidgetsFor(line, lineView, dims, allowAbove) {
  function positionLineWidget (line 935) | function positionLineWidget(widget, node, lineView, dims) {
  function copyPos (line 965) | function copyPos(x) {return Pos(x.line, x.ch);}
  function maxPos (line 966) | function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; }
  function minPos (line 967) | function minPos(a, b) { return cmp(a, b) < 0 ? a : b; }
  function Selection (line 976) | function Selection(ranges, primIndex) {
  function Range (line 1013) | function Range(anchor, head) {
  function normalizeSelection (line 1028) | function normalizeSelection(ranges, primIndex) {
  function simpleSelection (line 1044) | function simpleSelection(anchor, head) {
  function clipLine (line 1050) | function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.fi...
  function clipPos (line 1051) | function clipPos(doc, pos) {
  function clipToLen (line 1057) | function clipToLen(pos, linelen) {
  function isLine (line 1063) | function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.si...
  function clipPosArray (line 1064) | function clipPosArray(doc, array) {
  function extendRange (line 1079) | function extendRange(doc, range, head, other) {
  function extendSelection (line 1098) | function extendSelection(doc, head, other, options) {
  function extendSelections (line 1104) | function extendSelections(doc, heads, options) {
  function replaceOneSelection (line 1112) | function replaceOneSelection(doc, i, range, options) {
  function setSimpleSelection (line 1119) | function setSimpleSelection(doc, anchor, head, options) {
  function filterSelectionChange (line 1125) | function filterSelectionChange(doc, sel) {
  function setSelectionReplaceHistory (line 1141) | function setSelectionReplaceHistory(doc, sel, options) {
  function setSelection (line 1152) | function setSelection(doc, sel, options) {
  function setSelectionNoUndo (line 1157) | function setSelectionNoUndo(doc, sel, options) {
  function setSelectionInner (line 1169) | function setSelectionInner(doc, sel) {
  function reCheckSelection (line 1183) | function reCheckSelection(doc) {
  function skipAtomicInSelection (line 1189) | function skipAtomicInSelection(doc, sel, bias, mayClear) {
  function skipAtomic (line 1204) | function skipAtomic(doc, pos, bias, mayClear) {
  function drawSelection (line 1257) | function drawSelection(cm) {
  function showSelection (line 1284) | function showSelection(cm, drawn) {
  function updateSelection (line 1293) | function updateSelection(cm) {
  function drawSelectionCursor (line 1298) | function drawSelectionCursor(cm, range, output) {
  function drawSelectionRange (line 1317) | function drawSelectionRange(cm, range, output) {
  function restartBlink (line 1391) | function restartBlink(cm) {
  function startWorker (line 1407) | function startWorker(cm, time) {
  function highlightWorker (line 1412) | function highlightWorker(cm) {
  function findStartLine (line 1454) | function findStartLine(cm, n, precise) {
  function getStateBefore (line 1470) | function getStateBefore(cm, n, precise) {
  function paddingTop (line 1488) | function paddingTop(display) {return display.lineSpace.offsetTop;}
  function paddingVert (line 1489) | function paddingVert(display) {return display.mover.offsetHeight - displ...
  function paddingH (line 1490) | function paddingH(display) {
  function ensureLineHeights (line 1503) | function ensureLineHeights(cm, lineView, rect) {
  function mapFromLineView (line 1524) | function mapFromLineView(lineView, line, lineN) {
  function updateExternalMeasurement (line 1537) | function updateExternalMeasurement(cm, line) {
  function measureChar (line 1550) | function measureChar(cm, line, ch, bias) {
  function findViewForLine (line 1555) | function findViewForLine(cm, lineN) {
  function prepareMeasureForLine (line 1568) | function prepareMeasureForLine(cm, line) {
  function measureCharPrepared (line 1588) | function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
  function measureCharInner (line 1610) | function measureCharInner(cm, prepared, ch, bias) {
  function maybeUpdateRectForZooming (line 1697) | function maybeUpdateRectForZooming(measure, rect) {
  function clearLineMeasurementCacheFor (line 1707) | function clearLineMeasurementCacheFor(lineView) {
  function clearLineMeasurementCache (line 1716) | function clearLineMeasurementCache(cm) {
  function clearCaches (line 1723) | function clearCaches(cm) {
  function pageScrollX (line 1730) | function pageScrollX() { return window.pageXOffset || (document.document...
  function pageScrollY (line 1731) | function pageScrollY() { return window.pageYOffset || (document.document...
  function intoCoordSystem (line 1736) | function intoCoordSystem(cm, lineObj, rect, context) {
  function fromCoordSystem (line 1758) | function fromCoordSystem(cm, coords, context) {
  function charCoords (line 1775) | function charCoords(cm, pos, context, lineObj, bias) {
  function cursorCoords (line 1783) | function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHei...
  function estimateCoords (line 1815) | function estimateCoords(cm, pos) {
  function PosWithInfo (line 1829) | function PosWithInfo(line, ch, outside, xRel) {
  function coordsChar (line 1838) | function coordsChar(cm, x, y) {
  function coordsCharInner (line 1859) | function coordsCharInner(cm, lineObj, lineNo, x, y) {
  function textHeight (line 1901) | function textHeight(display) {
  function charWidth (line 1921) | function charWidth(display) {
  function startOperation (line 1943) | function startOperation(cm) {
  function fireCallbacksForOps (line 1970) | function fireCallbacksForOps(group) {
  function endOperation (line 1987) | function endOperation(cm) {
  function endOperations (line 2002) | function endOperations(group) {
  function endOperation_R1 (line 2016) | function endOperation_R1(op) {
  function endOperation_W1 (line 2028) | function endOperation_W1(op) {
  function endOperation_R2 (line 2032) | function endOperation_R2(op) {
  function endOperation_W2 (line 2051) | function endOperation_W2(op) {
  function endOperation_finish (line 2074) | function endOperation_finish(op) {
  function runInOp (line 2130) | function runInOp(cm, f) {
  function operation (line 2137) | function operation(cm, f) {
  function methodOp (line 2147) | function methodOp(f) {
  function docMethodOp (line 2155) | function docMethodOp(f) {
  function LineView (line 2170) | function LineView(doc, line, lineN) {
  function buildViewArray (line 2182) | function buildViewArray(cm, from, to) {
  function regChange (line 2198) | function regChange(cm, from, to, lendiff) {
  function regLineChange (line 2263) | function regLineChange(cm, line, type) {
  function resetView (line 2277) | function resetView(cm) {
  function findViewIndex (line 2285) | function findViewIndex(cm, n) {
  function viewCuttingPoint (line 2296) | function viewCuttingPoint(cm, oldN, newN, dir) {
  function adjustView (line 2322) | function adjustView(cm, from, to) {
  function countDirtyView (line 2343) | function countDirtyView(cm) {
  function slowPoll (line 2356) | function slowPoll(cm) {
  function fastPoll (line 2367) | function fastPoll(cm) {
  function readInput (line 2389) | function readInput(cm) {
  function resetInput (line 2481) | function resetInput(cm, typing) {
  function focusInput (line 2499) | function focusInput(cm) {
  function ensureFocus (line 2504) | function ensureFocus(cm) {
  function isReadOnly (line 2508) | function isReadOnly(cm) {
  function registerEventHandlers (line 2515) | function registerEventHandlers(cm) {
  function onResize (line 2649) | function onResize(cm) {
  function eventInWidget (line 2659) | function eventInWidget(display, e) {
  function posFromMouse (line 2670) | function posFromMouse(cm, e, liberal, forRect) {
  function onMouseDown (line 2694) | function onMouseDown(e) {
  function leftButtonDown (line 2732) | function leftButtonDown(cm, e, start) {
  function leftButtonStartDrag (line 2756) | function leftButtonStartDrag(cm, e, start, modifier) {
  function leftButtonSelect (line 2783) | function leftButtonSelect(cm, e, start, type, addNew) {
  function gutterEvent (line 2922) | function gutterEvent(cm, e, type, prevent, signalfn) {
  function clickInGutter (line 2945) | function clickInGutter(cm, e) {
  function onDrop (line 2953) | function onDrop(e) {
  function onDragStart (line 3003) | function onDragStart(cm, e) {
  function setScrollTop (line 3029) | function setScrollTop(cm, val) {
  function setScrollLeft (line 3040) | function setScrollLeft(cm, val, isScroller) {
  function onScrollWheel (line 3070) | function onScrollWheel(cm, e) {
  function doHandleBinding (line 3145) | function doHandleBinding(cm, bound, dropShift) {
  function allKeyMaps (line 3166) | function allKeyMaps(cm) {
  function handleKeyBinding (line 3175) | function handleKeyBinding(cm, e) {
  function handleCharBinding (line 3212) | function handleCharBinding(cm, e, ch) {
  function onKeyDown (line 3224) | function onKeyDown(e) {
  function showCrossHair (line 3245) | function showCrossHair(cm) {
  function onKeyUp (line 3260) | function onKeyUp(e) {
  function onKeyPress (line 3265) | function onKeyPress(e) {
  function onFocus (line 3279) | function onFocus(cm) {
  function onBlur (line 3296) | function onBlur(cm) {
  function onContextMenu (line 3311) | function onContextMenu(cm, e) {
  function contextMenuInGutter (line 3386) | function contextMenuInGutter(cm, e) {
  function adjustForChange (line 3403) | function adjustForChange(pos, change) {
  function computeSelAfterChange (line 3412) | function computeSelAfterChange(doc, change) {
  function offsetPos (line 3422) | function offsetPos(pos, old, nw) {
  function computeReplacedSel (line 3431) | function computeReplacedSel(doc, changes, hint) {
  function filterChange (line 3451) | function filterChange(doc, change, update) {
  function makeChange (line 3475) | function makeChange(doc, change, ignoreReadOnly) {
  function makeChangeInner (line 3497) | function makeChangeInner(doc, change) {
  function makeChangeFromHistory (line 3515) | function makeChangeFromHistory(doc, type, allowSelectionOnly) {
  function shiftDoc (line 3581) | function shiftDoc(doc, distance) {
  function makeChangeSingleDoc (line 3597) | function makeChangeSingleDoc(doc, change, selAfter, spans) {
  function makeChangeSingleDocInEditor (line 3630) | function makeChangeSingleDocInEditor(cm, change, spans) {
  function replaceRange (line 3687) | function replaceRange(doc, code, from, to, origin) {
  function maybeScrollWindow (line 3698) | function maybeScrollWindow(cm, coords) {
  function scrollPosIntoView (line 3716) | function scrollPosIntoView(cm, pos, end, margin) {
  function scrollIntoView (line 3739) | function scrollIntoView(cm, x1, y1, x2, y2) {
  function calculateScrollPos (line 3749) | function calculateScrollPos(cm, x1, y1, x2, y2) {
  function addToScrollPos (line 3780) | function addToScrollPos(cm, left, top) {
  function ensureCursorVisible (line 3790) | function ensureCursorVisible(cm) {
  function resolveScrollToPos (line 3804) | function resolveScrollToPos(cm) {
  function indentLine (line 3824) | function indentLine(cm, n, how, aggressive) {
  function changeLine (line 3885) | function changeLine(doc, handle, changeType, op) {
  function deleteNearSelection (line 3896) | function deleteNearSelection(cm, compute) {
  function findPosH (line 3928) | function findPosH(doc, pos, dir, unit, visually) {
  function findPosV (line 3979) | function findPosV(cm, pos, dir, unit) {
  function findWordAt (line 3997) | function findWordAt(cm, pos) {
  function interpret (line 4404) | function interpret(val) {
  function option (line 4459) | function option(name, deflt, handle, notOnInit) {
  function getKeyMap (line 4891) | function getKeyMap(val) {
  function lookup (line 4901) | function lookup(map) {
  function save (line 4961) | function save() {textarea.value = cm.getValue();}
  function markText (line 5204) | function markText(doc, from, to, options, type) {
  function markTextShared (line 5297) | function markTextShared(doc, from, to, options, type) {
  function findSharedMarkers (line 5312) | function findSharedMarkers(doc) {
  function copySharedMarkers (line 5317) | function copySharedMarkers(doc, markers) {
  function detachSharedMarkers (line 5329) | function detachSharedMarkers(markers) {
  function MarkedSpan (line 5345) | function MarkedSpan(marker, from, to) {
  function getMarkedSpanFor (line 5351) | function getMarkedSpanFor(spans, marker) {
  function removeMarkedSpan (line 5359) | function removeMarkedSpan(spans, span) {
  function addMarkedSpan (line 5365) | function addMarkedSpan(line, span) {
  function markedSpansBefore (line 5374) | function markedSpansBefore(old, startCh, isInsert) {
  function markedSpansAfter (line 5385) | function markedSpansAfter(old, endCh, isInsert) {
  function stretchSpansOverChange (line 5404) | function stretchSpansOverChange(doc, change) {
  function clearEmptySpans (line 5465) | function clearEmptySpans(spans) {
  function mergeOldSpans (line 5479) | function mergeOldSpans(doc, change) {
  function removeReadOnlyRanges (line 5502) | function removeReadOnlyRanges(doc, from, to) {
  function detachMarkedSpans (line 5531) | function detachMarkedSpans(line) {
  function attachMarkedSpans (line 5538) | function attachMarkedSpans(line, spans) {
  function extraLeft (line 5547) | function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }
  function extraRight (line 5548) | function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }
  function compareCollapsedMarkers (line 5553) | function compareCollapsedMarkers(a, b) {
  function collapsedSpanAtSide (line 5566) | function collapsedSpanAtSide(line, start) {
  function collapsedSpanAtStart (line 5576) | function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, t...
  function collapsedSpanAtEnd (line 5577) | function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, fal...
  function conflictingCollapsedRange (line 5582) | function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
  function visualLine (line 5602) | function visualLine(line) {
  function visualLineContinued (line 5611) | function visualLineContinued(line) {
  function visualLineNo (line 5622) | function visualLineNo(doc, lineN) {
  function visualLineEndNo (line 5629) | function visualLineEndNo(doc, lineN) {
  function lineIsHidden (line 5641) | function lineIsHidden(doc, line) {
  function lineIsHiddenInner (line 5652) | function lineIsHiddenInner(doc, line, span) {
  function adjustScrollWhenAboveVisible (line 5680) | function adjustScrollWhenAboveVisible(cm, line, diff) {
  function widgetHeight (line 5709) | function widgetHeight(widget) {
  function addLineWidget (line 5720) | function addLineWidget(cm, handle, node, options) {
  function updateLine (line 5754) | function updateLine(line, text, markedSpans, estimateHeight) {
  function cleanUpLine (line 5766) | function cleanUpLine(line) {
  function extractLineClasses (line 5771) | function extractLineClasses(type, output) {
  function callBlankLine (line 5785) | function callBlankLine(mode, state) {
  function readToken (line 5792) | function readToken(mode, stream, state) {
  function runMode (line 5801) | function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {
  function highlightLine (line 5838) | function highlightLine(cm, line, state, forceToEnd) {
  function getLineStyles (line 5876) | function getLineStyles(cm, line) {
  function processLine (line 5889) | function processLine(cm, text, state, startAt) {
  function interpretTokenStyle (line 5904) | function interpretTokenStyle(style, options) {
  function buildLineContent (line 5916) | function buildLineContent(cm, lineView) {
  function defaultSpecialCharPlaceholder (line 5964) | function defaultSpecialCharPlaceholder(ch) {
  function buildToken (line 5972) | function buildToken(builder, text, style, startStyle, endStyle, title) {
  function buildTokenSplitSpaces (line 6022) | function buildTokenSplitSpaces(inner) {
  function buildTokenBadBidi (line 6036) | function buildTokenBadBidi(inner, order) {
  function buildCollapsedSpan (line 6055) | function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
  function insertLineContent (line 6066) | function insertLineContent(line, builder, styles) {
  function isWholeLineUpdate (line 6130) | function isWholeLineUpdate(doc, change) {
  function updateDoc (line 6136) | function updateDoc(doc, change, markedSpans, estimateHeight) {
  function LeafChunk (line 6194) | function LeafChunk(lines) {
  function BranchChunk (line 6234) | function BranchChunk(children) {
  function linkedDocs (line 6683) | function linkedDocs(doc, f, sharedHistOnly) {
  function attachDoc (line 6698) | function attachDoc(cm, doc) {
  function getLine (line 6712) | function getLine(doc, n) {
  function getBetween (line 6727) | function getBetween(doc, start, end) {
  function getLines (line 6739) | function getLines(doc, from, to) {
  function updateLineHeight (line 6747) | function updateLineHeight(line, height) {
  function lineNo (line 6754) | function lineNo(line) {
  function lineAtHeight (line 6768) | function lineAtHeight(chunk, h) {
  function heightAtLine (line 6789) | function heightAtLine(lineObj) {
  function getOrder (line 6811) | function getOrder(line) {
  function History (line 6819) | function History(startGen) {
  function historyChangeFromChange (line 6836) | function historyChangeFromChange(doc, change) {
  function clearSelectionEvents (line 6845) | function clearSelectionEvents(array) {
  function lastChangeEvent (line 6855) | function lastChangeEvent(hist, force) {
  function addChangeToHistory (line 6870) | function addChangeToHistory(doc, change, selAfter, opId) {
  function selectionEventCanBeMerged (line 6912) | function selectionEventCanBeMerged(doc, origin, prev, sel) {
  function addSelectionToHistory (line 6925) | function addSelectionToHistory(doc, sel, opId, options) {
  function pushSelectionToHistory (line 6947) | function pushSelectionToHistory(sel, dest) {
  function attachLocalSpans (line 6954) | function attachLocalSpans(doc, change, from, to) {
  function removeClearedSpans (line 6965) | function removeClearedSpans(spans) {
  function getOldSpans (line 6975) | function getOldSpans(doc, change) {
  function copyHistoryArray (line 6985) | function copyHistoryArray(events, newGroup, instantiateSel) {
  function rebaseHistSelSingle (line 7010) | function rebaseHistSelSingle(pos, from, to, diff) {
  function rebaseHistArray (line 7026) | function rebaseHistArray(array, from, to, diff) {
  function rebaseHist (line 7054) | function rebaseHist(hist, change) {
  function e_defaultPrevented (line 7073) | function e_defaultPrevented(e) {
  function e_target (line 7078) | function e_target(e) {return e.target || e.srcElement;}
  function e_button (line 7079) | function e_button(e) {
  function signalLater (line 7136) | function signalLater(emitter, type /*, values...*/) {
  function fireOrphanDelayed (line 7153) | function fireOrphanDelayed() {
  function signalDOMEvent (line 7162) | function signalDOMEvent(cm, e, override) {
  function signalCursorActivity (line 7167) | function signalCursorActivity(cm) {
  function hasHandler (line 7175) | function hasHandler(emitter, type) {
  function eventMixin (line 7182) | function eventMixin(ctor) {
  function Delayed (line 7199) | function Delayed() {this.id = null;}
  function findColumn (line 7224) | function findColumn(string, goal, tabSize) {
  function spaceStr (line 7239) | function spaceStr(n) {
  function lst (line 7245) | function lst(arr) { return arr[arr.length-1]; }
  function indexOf (line 7253) | function indexOf(array, elt) {
  function map (line 7259) | function map(array, f) {
  function createObj (line 7266) | function createObj(base, props) {
  function copyObj (line 7279) | function copyObj(obj, target, overwrite) {
  function bind (line 7287) | function bind(f) {
  function isWordChar (line 7297) | function isWordChar(ch, helper) {
  function isEmpty (line 7303) | function isEmpty(obj) {
  function isExtendingChar (line 7314) | function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendi...
  function elt (line 7318) | function elt(tag, content, className, style) {
  function removeChildren (line 7343) | function removeChildren(e) {
  function removeChildrenAndAdd (line 7349) | function removeChildrenAndAdd(parent, e) {
  function contains (line 7353) | function contains(parent, child) {
  function activeElt (line 7360) | function activeElt() { return document.activeElement; }
  function classTest (line 7368) | function classTest(cls) { return new RegExp("\\b" + cls + "\\b\\s*"); }
  function rmClass (line 7369) | function rmClass(node, cls) {
  function addClass (line 7373) | function addClass(node, cls) {
  function joinClasses (line 7376) | function joinClasses(a, b) {
  function forEachCodeMirror (line 7389) | function forEachCodeMirror(f) {
  function ensureGlobalHandlers (line 7399) | function ensureGlobalHandlers() {
  function registerGlobalHandlers (line 7404) | function registerGlobalHandlers() {
  function scrollbarWidth (line 7432) | function scrollbarWidth(measure) {
  function zeroWidthElement (line 7442) | function zeroWidthElement(measure) {
  function hasBadBidiRects (line 7455) | function hasBadBidiRects(measure) {
  function hasBadZoomedRects (line 7502) | function hasBadZoomedRects(measure) {
  function iterateBidiSections (line 7531) | function iterateBidiSections(order, from, to, f) {
  function bidiLeft (line 7544) | function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }
  function bidiRight (line 7545) | function bidiRight(part) { return part.level % 2 ? part.from : part.to; }
  function lineLeft (line 7547) | function lineLeft(line) { var order = getOrder(line); return order ? bid...
  function lineRight (line 7548) | function lineRight(line) {
  function lineStart (line 7554) | function lineStart(cm, lineN) {
  function lineEnd (line 7562) | function lineEnd(cm, lineN) {
  function lineStartSmart (line 7572) | function lineStartSmart(cm, pos) {
  function compareBidiLevel (line 7584) | function compareBidiLevel(order, a, b) {
  function getBidiPartAt (line 7591) | function getBidiPartAt(order, pos) {
  function moveInLine (line 7611) | function moveInLine(line, pos, dir, byUnit) {
  function moveVisually (line 7623) | function moveVisually(line, start, dir, byUnit) {
  function moveLogically (line 7646) | function moveLogically(line, start, dir, byUnit) {
  function charType (line 7680) | function charType(code) {
  function BidiSpan (line 7695) | function BidiSpan(level, from, to) {

FILE: front-end/cm/coffeescript.js
  function wordRegexp (line 21) | function wordRegexp(words) {
  function tokenBase (line 50) | function tokenBase(stream, state) {
  function tokenFactory (line 177) | function tokenFactory(delimiter, singleline, outclass) {
  function longComment (line 204) | function longComment(stream, state) {
  function indent (line 216) | function indent(stream, state, type) {
  function dedent (line 240) | function dedent(stream, state) {
  function tokenLexer (line 264) | function tokenLexer(stream, state) {

FILE: front-end/cm/comment.js
  function firstNonWS (line 18) | function firstNonWS(str) {

FILE: front-end/cm/css.js
  function ret (line 29) | function ret(style, tp) { type = tp; return style; }
  function tokenBase (line 33) | function tokenBase(stream, state) {
  function tokenString (line 81) | function tokenString(quote) {
  function tokenParenthesized (line 96) | function tokenParenthesized(stream, state) {
  function Context (line 107) | function Context(type, indent, prev) {
  function pushContext (line 113) | function pushContext(state, stream, type) {
  function popContext (line 118) | function popContext(state) {
  function pass (line 123) | function pass(type, stream, state) {
  function popAndPass (line 126) | function popAndPass(type, stream, state, n) {
  function wordAsValue (line 134) | function wordAsValue(stream) {
  function keySet (line 348) | function keySet(array) {
  function tokenCComment (line 595) | function tokenCComment(stream, state) {
  function tokenSGMLComment (line 607) | function tokenSGMLComment(stream, state) {

FILE: front-end/cm/headlesscodemirror.js
  function splitLines (line 12) | function splitLines(string){ return string.split(/\r?\n|\r/); }
  function StringStream (line 14) | function StringStream(string) {

FILE: front-end/cm/htmlembedded.js
  function htmlDispatch (line 24) | function htmlDispatch(stream, state) {
  function scriptingDispatch (line 34) | function scriptingDispatch(stream, state) {

FILE: front-end/cm/htmlmixed.js
  function html (line 31) | function html(stream, state) {
  function maybeBackup (line 58) | function maybeBackup(stream, pat, style) {
  function script (line 68) | function script(stream, state) {
  function css (line 77) | function css(stream, state) {

FILE: front-end/cm/javascript.js
  function kw (line 26) | function kw(type) {return {type: type, style: "keyword"};}
  function readRegexp (line 72) | function readRegexp(stream) {
  function ret (line 87) | function ret(tp, style, cont) {
  function tokenBase (line 91) | function tokenBase(stream, state) {
  function tokenString (line 143) | function tokenString(quote) {
  function tokenComment (line 159) | function tokenComment(stream, state) {
  function tokenQuasi (line 171) | function tokenQuasi(stream, state) {
  function findFatArrow (line 191) | function findFatArrow(stream, state) {
  function JSLexical (line 219) | function JSLexical(indented, column, type, align, prev, info) {
  function inScope (line 228) | function inScope(state, varname) {
  function parseJS (line 237) | function parseJS(state, style, type, content, stream) {
  function pass (line 261) | function pass() {
  function cont (line 264) | function cont() {
  function register (line 268) | function register(varname) {
  function pushcontext (line 289) | function pushcontext() {
  function popcontext (line 293) | function popcontext() {
  function pushlex (line 297) | function pushlex(type, info) {
  function poplex (line 306) | function poplex() {
  function expect (line 316) | function expect(wanted) {
  function statement (line 325) | function statement(type, value) {
  function expression (line 351) | function expression(type) {
  function expressionNoComma (line 354) | function expressionNoComma(type) {
  function expressionInner (line 357) | function expressionInner(type, noComma) {
  function maybeexpression (line 375) | function maybeexpression(type) {
  function maybeexpressionNoComma (line 379) | function maybeexpressionNoComma(type) {
  function maybeoperatorComma (line 384) | function maybeoperatorComma(type, value) {
  function maybeoperatorNoComma (line 388) | function maybeoperatorNoComma(type, value, noComma) {
  function quasi (line 403) | function quasi(type, value) {
  function continueQuasi (line 408) | function continueQuasi(type) {
  function arrowBody (line 415) | function arrowBody(type) {
  function arrowBodyNoComma (line 420) | function arrowBodyNoComma(type) {
  function maybelabel (line 425) | function maybelabel(type) {
  function property (line 429) | function property(type) {
  function objprop (line 432) | function objprop(type, value) {
  function getterSetter (line 446) | function getterSetter(type) {
  function afterprop (line 451) | function afterprop(type) {
  function commasep (line 455) | function commasep(what, end) {
  function contCommasep (line 470) | function contCommasep(what, end, info) {
  function block (line 475) | function block(type) {
  function maybetype (line 479) | function maybetype(type) {
  function typedef (line 482) | function typedef(type) {
  function vardef (line 485) | function vardef() {
  function pattern (line 488) | function pattern(type, value) {
  function proppattern (line 493) | function proppattern(type, value) {
  function maybeAssign (line 501) | function maybeAssign(_type, value) {
  function vardefCont (line 504) | function vardefCont(type) {
  function maybeelse (line 507) | function maybeelse(type, value) {
  function forspec (line 510) | function forspec(type) {
  function forspec1 (line 513) | function forspec1(type) {
  function formaybeinof (line 519) | function formaybeinof(_type, value) {
  function forspec2 (line 523) | function forspec2(type, value) {
  function forspec3 (line 528) | function forspec3(type) {
  function functiondef (line 531) | function functiondef(type, value) {
  function funarg (line 536) | function funarg(type) {
  function className (line 540) | function className(type, value) {
  function classNameAfter (line 543) | function classNameAfter(type, value) {
  function classBody (line 547) | function classBody(type, value) {
  function classGetterSetter (line 560) | function classGetterSetter(type) {
  function afterModule (line 565) | function afterModule(type, value) {
  function afterExport (line 569) | function afterExport(_type, value) {
  function afterImport (line 574) | function afterImport(type) {
  function importSpec (line 578) | function importSpec(type, value) {
  function maybeFrom (line 583) | function maybeFrom(_type, value) {
  function arrayLiteral (line 586) | function arrayLiteral(type) {
  function maybeArrayComprehension (line 590) | function maybeArrayComprehension(type) {
  function comprehension (line 595) | function comprehension(type) {

FILE: front-end/cm/markselection.js
  function onCursorActivity (line 36) | function onCursorActivity(cm) {
  function onChange (line 40) | function onChange(cm) {
  function coverRange (line 49) | function coverRange(cm, from, to, addAt) {
  function clear (line 65) | function clear(cm) {
  function reset (line 71) | function reset(cm) {
  function update (line 78) | function update(cm) {

FILE: front-end/cm/matchbrackets.js
  function findMatchingBracket (line 19) | function findMatchingBracket(cm, where, strict, config) {
  function scanForBracket (line 40) | function scanForBracket(cm, where, dir, style, config) {
  function matchBrackets (line 67) | function matchBrackets(cm, autoclear, config) {
  function doMatchBrackets (line 97) | function doMatchBrackets(cm) {

FILE: front-end/cm/php.js
  function keywords (line 14) | function keywords(str) {
  function heredoc (line 19) | function heredoc(delim) {
  function matchSequence (line 28) | function matchSequence(list) {
  function stringWithEscapes (line 40) | function stringWithEscapes(stream, state) {
  function dispatch (line 159) | function dispatch(stream, state) {

FILE: front-end/cm/python.js
  function wordRegexp (line 14) | function wordRegexp(words) {
  function top (line 44) | function top(state) {
  function tokenBase (line 79) | function tokenBase(stream, state) {
  function tokenBaseInner (line 100) | function tokenBaseInner(stream, state) {
  function tokenStringFactory (line 185) | function tokenStringFactory(delimiter) {
  function pushScope (line 218) | function pushScope(stream, state, type) {
  function dedent (line 230) | function dedent(stream, state) {
  function tokenLexer (line 239) | function tokenLexer(stream, state) {

FILE: front-end/cm/shell.js
  function define (line 17) | function define(style, string) {
  function tokenBase (line 38) | function tokenBase(stream, state) {
  function tokenString (line 84) | function tokenString(quote) {
  function tokenize (line 123) | function tokenize(stream, state) {

FILE: front-end/cm/xml.js
  function inText (line 66) | function inText(stream, state) {
  function inTag (line 113) | function inTag(stream, state) {
  function inAttribute (line 138) | function inAttribute(quote) {
  function inBlock (line 152) | function inBlock(style, terminator) {
  function doctype (line 164) | function doctype(depth) {
  function Context (line 185) | function Context(state, tagName, startOfLine) {
  function popContext (line 193) | function popContext(state) {
  function maybePopContext (line 196) | function maybePopContext(state, nextTagName) {
  function baseState (line 211) | function baseState(type, stream, state) {
  function tagNameState (line 221) | function tagNameState(type, stream, state) {
  function closeTagNameState (line 231) | function closeTagNameState(type, stream, state) {
  function closeState (line 250) | function closeState(type, _stream, state) {
  function closeStateErr (line 258) | function closeStateErr(type, stream, state) {
  function attrState (line 263) | function attrState(type, _stream, state) {
  function attrEqState (line 282) | function attrEqState(type, stream, state) {
  function attrValueState (line 287) | function attrValueState(type, stream, state) {
  function attrContinuedState (line 293) | function attrContinuedState(type, stream, state) {

FILE: front-end/common/Color.js
  function toRgbValue (line 261) | function toRgbValue(value)
  function toHexValue (line 270) | function toHexValue(value)
  function toShortHexValue (line 280) | function toShortHexValue(value)
  function hue2rgb (line 434) | function hue2rgb(p, q, h)

FILE: front-end/common/Geometry.js
  function Size (line 201) | function Size(width, height)
  function Constraints (line 258) | function Constraints(minimum, preferred)

FILE: front-end/common/ModuleExtensionInterfaces.js
  function render (line 34) | function render(renderer)
  function reveal (line 72) | function reveal(revealers)

FILE: front-end/common/ParsedURL.js
  method displayName (line 204) | get displayName()

FILE: front-end/common/Settings.js
  method name (line 166) | get name()
  function comparator (line 228) | function comparator(key1, key2)

FILE: front-end/common/StaticContentProvider.js
  function performSearch (line 28) | function performSearch()

FILE: front-end/common/TextRange.js
  method linesCount (line 119) | get linesCount()

FILE: front-end/common/WorkerRuntime.js
  function start (line 55) | function start(content)
  function start (line 94) | function start(content)
  function postToWorker (line 171) | function postToWorker(worker)
  function terminate (line 186) | function terminate(worker)
  method onmessage (line 200) | set onmessage(listener)
  method onerror (line 216) | set onerror(listener)
  method port (line 229) | get port()
  method onmessage (line 248) | set onmessage(listener)
  method onerror (line 264) | set onerror(listener)

FILE: front-end/components/CookiesTable.js
  function compareTo (line 194) | function compareTo(getter, cookie1, cookie2)
  function numberCompare (line 199) | function numberCompare(getter, cookie1, cookie2)
  function expiresCompare (line 204) | function expiresCompare(cookie1, cookie2)

FILE: front-end/components/DOMBreakpointsSidebarPane.js
  function toggleBreakpoint (line 89) | function toggleBreakpoint(type)
  function didPushNodeToFrontend (line 125) | function didPushNodeToFrontend(targetNode)
  function append (line 170) | function append(a, b)
  function removeBreakpoint (line 304) | function removeBreakpoint()
  function didPushNodeByPathToFrontend (line 384) | function didPushNodeByPathToFrontend(path, nodeId)

FILE: front-end/components/DOMPresentationUtils.js
  function errorCallback (line 133) | function errorCallback()
  function buildContent (line 139) | function buildContent()
  function prefixedElementClassNames (line 249) | function prefixedElementClassNames(node)
  function idSelector (line 265) | function idSelector(id)
  function escapeIdentifierIfNeeded (line 274) | function escapeIdentifierIfNeeded(ident)
  function escapeAsciiChar (line 290) | function escapeAsciiChar(c, isLast)
  function toHexByte (line 298) | function toHexByte(c)
  function isCSSIdentChar (line 310) | function isCSSIdentChar(c)
  function isCSSIdentifier (line 321) | function isCSSIdentifier(value)
  function areNodesSimilar (line 459) | function areNodesSimilar(left, right)

FILE: front-end/components/HandlerRegistry.js
  method handlerNames (line 44) | get handlerNames()
  method activeHandler (line 49) | get activeHandler()
  method activeHandler (line 54) | set activeHandler(value)
  function doSave (line 135) | function doSave(forceSaveAs, content)
  function save (line 145) | function save(forceSaveAs)
  function openInResourcesPanel (line 186) | function openInResourcesPanel(resourceURL)

FILE: front-end/components/InspectorView.js
  function showConsole (line 94) | function showConsole()
  function processPanelExtensions (line 123) | function processPanelExtensions(extension)
  function cachePanel (line 191) | function cachePanel(panel)
  function setCurrentPanelIfNecessary (line 232) | function setCurrentPanelIfNecessary(panelPromise, panel)

FILE: front-end/components/ObjectPopoverHelper.js
  function didGetDetails (line 73) | function didGetDetails(target, anchorElement, popoverContentElement, res...
  function showObjectPopover (line 103) | function showObjectPopover(result, wasThrown, anchorOverride)

FILE: front-end/components/ObjectPropertiesSection.js
  function callback (line 84) | function callback(properties, internalProperties)
  function blurListener (line 352) | function blurListener()
  function callback (line 428) | function callback(error)
  function callback (line 507) | function callback(properties, internalProperties)
  function onInvokeGetterClick (line 619) | function onInvokeGetterClick(event)
  function didGetDetails (line 652) | function didGetDetails(response)
  function didGetCollectionEntries (line 742) | function didGetCollectionEntries(entries)
  function packRanges (line 850) | function packRanges(fromIndex, toIndex, bucketThreshold, sparseIteration...
  function callback (line 911) | function callback(ranges)
  function buildArrayFragment (line 949) | function buildArrayFragment(fromIndex, toIndex, sparseIterationThreshold)
  function processArrayFragment (line 974) | function processArrayFragment(arrayFragment, wasThrown)
  function processProperties (line 982) | function processProperties(properties, internalProperties)
  function buildObjectFragment (line 1010) | function buildObjectFragment()
  function processObjectFragment (line 1031) | function processObjectFragment(arrayFragment, wasThrown)
  function processProperties (line 1043) | function processProperties(properties, internalProperties)

FILE: front-end/components/ShortcutsScreen.js
  function compareSections (line 61) | function compareSections(a, b)

FILE: front-end/console/ConsoleView.js
  function messageAdded (line 257) | function messageAdded(event)
  function invalidateViewport (line 477) | function invalidateViewport(finishCallback)
  function compareTimestamps (line 521) | function compareTimestamps(viewMessage1, viewMessage2)
  function monitoringXHRItemAction (line 630) | function monitoringXHRItemAction()
  function addMessage (line 828) | function addMessage(url, lineNumber, columnNumber)
  function didGetDetails (line 850) | function didGetDetails(response)
  method messageURLFilters (line 1063) | get messageURLFilters()

FILE: front-end/console/ConsoleViewMessage.js
  function linkifyRequest (line 138) | function linkifyRequest(title)
  function appendRenderer (line 606) | function appendRenderer(rendererElement)
  function failedToRender (line 614) | function failedToRender()
  function appendUndefined (line 754) | function appendUndefined(elem, index)
  function onInvokeGetterClick (line 809) | function onInvokeGetterClick(result, wasThrown)
  function parameterFormatter (line 854) | function parameterFormatter(force, obj)
  function stringFormatter (line 859) | function stringFormatter(obj)
  function floatFormatter (line 864) | function floatFormatter(obj)
  function integerFormatter (line 871) | function integerFormatter(obj)
  function bypassFormatter (line 878) | function bypassFormatter(obj)
  function styleFormatter (line 884) | function styleFormatter(obj)
  function isWhitelistedProperty (line 896) | function isWhitelistedProperty(property)
  function append (line 922) | function append(a, b)
  function appendStackTrace (line 1108) | function appendStackTrace(stackTrace)
  method text (line 1269) | get text()

FILE: front-end/devices/DevicesView.js
  function sanitizeForId (line 48) | function sanitizeForId(id)
  function alreadyDisplayed (line 58) | function alreadyDisplayed(element, data)
  function insertChildSortedById (line 71) | function insertChildSortedById(parent, child)
  function removeObsolete (line 87) | function removeObsolete(validIds, section)

FILE: front-end/devtools_app/DevToolsAPI.js
  function DevToolsAPIImpl (line 8) | function DevToolsAPIImpl()
  function dispatch (line 94) | function dispatch(inspectorWindow)
  function dispatch (line 113) | function dispatch(inspectorWindow)
  function dispatch (line 290) | function dispatch(inspectorWindow)

FILE: front-end/documentation/DocumentationView.js
  function getTokenRangeByColumn (line 388) | function getTokenRangeByColumn(column)
  function computeDescriptors (line 400) | function computeDescriptors(textRange)
  function findPreviousToken (line 417) | function findPreviousToken(textRange)

FILE: front-end/documentation/WikiParser.js
  function wrapIntoArticleElement (line 472) | function wrapIntoArticleElement()
  function processSimpleText (line 516) | function processSimpleText()
  function processBlock (line 526) | function processBlock()
  function finalizeLink (line 632) | function finalizeLink()
  function recoverAsText (line 642) | function recoverAsText()
  function processSimpleText (line 682) | function processSimpleText()
  function processSimpleText (line 722) | function processSimpleText()

FILE: front-end/elements/AnimationsSidebarPane.js
  function animationPlayersCallback (line 111) | function animationPlayersCallback(animationPlayers)
  function updateSliderCallback (line 213) | function updateSliderCallback(currentTime, isRunning)
  function sliderMouseDown (line 236) | function sliderMouseDown()
  function sliderMouseUp (line 245) | function sliderMouseUp()
  function sliderInputHandler (line 258) | function sliderInputHandler(e)
  function nodeResolved (line 295) | function nodeResolved(node)
  function pauseButtonHandler (line 326) | function pauseButtonHandler()

FILE: front-end/elements/ElementsBreadcrumbs.js
  function selectCrumb (line 110) | function selectCrumb(event)
  function crumbsAreSmallerThanContainer (line 251) | function crumbsAreSmallerThanContainer()
  function makeCrumbsSmaller (line 279) | function makeCrumbsSmaller(shrinkingFunction, direction)
  function coalesceCollapsedCrumbs (line 325) | function coalesceCollapsedCrumbs()
  function compact (line 379) | function compact(crumb)
  function collapse (line 390) | function collapse(crumb, dontCoalesce)

FILE: front-end/elements/ElementsPanel.js
  function selectNode (line 326) | function selectNode(candidateFocusNode)
  function selectLastSelectedNode (line 343) | function selectLastSelectedNode(nodeId)
  function resultCountCallback (line 405) | function resultCountCallback(resultCounts)
  function showPopover (line 477) | function showPopover(contents)
  function searchCallback (line 538) | function searchCallback(node)
  function handleUndoRedo (line 641) | function handleUndoRedo(treeOutline)
  function showMetrics (line 840) | function showMetrics(inComputedStyle)
  function tabSelected (line 852) | function tabSelected(event)
  function revealPromise (line 1003) | function revealPromise(resolve, reject)

FILE: front-end/elements/ElementsSidebarPane.js
  function innerUpdate (line 55) | function innerUpdate(finishedCallback)

FILE: front-end/elements/ElementsTreeOutline.js
  function expandCallback (line 337) | function expandCallback(error, nodeId)
  method rootDOMNode (line 374) | get rootDOMNode()
  method rootDOMNode (line 379) | set rootDOMNode(x)
  method isXMLMimeType (line 391) | get isXMLMimeType()
  method suppressRevealAndSelect (line 569) | set suppressRevealAndSelect(x)
  function resolvedNode (line 652) | function resolvedNode(object)
  function showPopover (line 687) | function showPopover(contents)
  function resolvedNode (line 1003) | function resolvedNode(object)
  function updateEntryHide (line 1203) | function updateEntryHide(entry)
  method hovered (line 1232) | get hovered()
  method hovered (line 1237) | set hovered(x)
  method expandedChildrenLimit (line 1254) | get expandedChildrenLimit()
  method expandedChildrenLimit (line 1259) | set expandedChildrenLimit(x)
  method expandedChildCount (line 1269) | get expandedChildCount()
  function childNodesLoaded (line 1371) | function childNodesLoaded(children)
  function callback (line 1541) | function callback()
  function removeZeroWidthSpaceRecursive (line 1881) | function removeZeroWidthSpaceRecursive(node)
  function handleKeyDownEvents (line 1904) | function handleKeyDownEvents(event)
  function keyupListener (line 1977) | function keyupListener(event)
  function editingComitted (line 1988) | function editingComitted(element, newTagName)
  function editingCancelled (line 1997) | function editingCancelled()
  function consume (line 2023) | function consume(event)
  function commit (line 2054) | function commit(element, newValue)
  function dispose (line 2063) | function dispose()
  function markAsBeingEdited (line 2094) | function markAsBeingEdited(controller)
  function moveToNextAttributeIfNeeded (line 2112) | function moveToNextAttributeIfNeeded(error)
  function cancel (line 2176) | function cancel()
  function moveToNextAttributeIfNeeded (line 2189) | function moveToNextAttributeIfNeeded()
  function changeTagNameCallback (line 2212) | function changeTagNameCallback(error, nodeId)
  function callback (line 2237) | function callback()
  function replacer (line 2372) | function replacer(match, replaceOffset) {
  function setValueWithEntities (line 2386) | function setValueWithEntities(element, value)
  function linkifyValue (line 2418) | function linkifyValue(value)
  function updateSearchHighlight (line 2674) | function updateSearchHighlight()
  function removeNodeCallback (line 2692) | function removeNodeCallback(error)
  function selectNode (line 2720) | function selectNode(error)
  function commitChange (line 2745) | function commitChange(initialValue, value)
  function scrollIntoViewCallback (line 2791) | function scrollIntoViewCallback(object)
  function renderPromise (line 3242) | function renderPromise(resolve, reject)

FILE: front-end/elements/EventListenersSidebarPane.js
  function updateWithNodeObject (line 213) | function updateWithNodeObject(nodeObject)

FILE: front-end/elements/MetricsSidebarPane.js
  function callback (line 101) | function callback(style)
  function inlineStyleCallback (line 113) | function inlineStyleCallback(style)
  function createBoxPartElement (line 189) | function createBoxPartElement(style, name, side, suffix)
  function getContentAreaWidthPx (line 207) | function getContentAreaWidthPx(style)
  function getContentAreaHeightPx (line 220) | function getContentAreaHeightPx(style)
  function finishHandler (line 356) | function finishHandler(originalValue, replacementString)
  function customNumberHandler (line 367) | function customNumberHandler(prefix, number, suffix)
  function callback (line 461) | function callback(style)

FILE: front-end/elements/PropertiesSidebarPane.js
  function nodeResolved (line 73) | function nodeResolved(object)
  function nodePrototypesReady (line 104) | function nodePrototypesReady(object, wasThrown)
  function fillSection (line 118) | function fillSection(prototypes)

FILE: front-end/elements/Spectrum.js
  function hueDrag (line 70) | function hueDrag(element, dragX, dragY)
  function colorDragStart (line 82) | function colorDragStart()
  function colorDrag (line 94) | function colorDrag(element, dragX, dragY, event)
  function alphaDrag (line 112) | function alphaDrag()
  function consume (line 141) | function consume(e)
  function move (line 149) | function move(e)
  function start (line 163) | function start(e)
  function stop (line 193) | function stop(e)
  method displayText (line 252) | set displayText(text)

FILE: front-end/elements/StylesSidebarPane.js
  function hasUnknownVendorPrefix (line 144) | function hasUnknownVendorPrefix(string)
  function compareDescriptors (line 219) | function compareDescriptors(descriptor1, descriptor2)
  function styleSheetResourceHeader (line 228) | function styleSheetResourceHeader(header)
  function searchHandler (line 321) | function searchHandler(regex)
  method _forcedPseudoClasses (line 329) | get _forcedPseudoClasses()
  function computedStyleCallback (line 457) | function computedStyleCallback(computedStyle)
  function callbackWrapper (line 484) | function callbackWrapper()
  function stylesCallback (line 512) | function stylesCallback(matchedResult)
  function inlineCallback (line 545) | function inlineCallback(inlineStyle, attributesStyle)
  function computedCallback (line 554) | function computedCallback(computedStyle)
  function animationPlayersCallback (line 563) | function animationPlayersCallback(animationPlayers)
  function refreshContents (line 617) | function refreshContents()
  function nonBlankSections (line 675) | function nonBlankSections(section)
  function addAttributesStyle (line 734) | function addAttributesStyle()
  function onStyleSheetContent (line 896) | function onStyleSheetContent(styleSheetId, text)
  function clickListener (line 963) | function clickListener(event)
  function createCheckbox (line 976) | function createCheckbox(state)
  function searchHandler (line 1025) | function searchHandler()
  function keydownHandler (line 1037) | function keydownHandler(event)
  function filterCallback (line 1223) | function filterCallback(regex)
  function wrappedCallback (line 1247) | function wrappedCallback() {
  function successCallback (line 1855) | function successCallback(newRule)
  function finishOperationAndMoveEditor (line 1873) | function finishOperationAndMoveEditor(direction)
  function propertySorter (line 2057) | function propertySorter(a, b)
  method isBlank (line 2175) | get isBlank()
  function successCallback (line 2207) | function successCallback(newRule)
  function failureCallback (line 2236) | function failureCallback()
  method inherited (line 2334) | get inherited()
  method inherited (line 2347) | set inherited(x)
  method overloaded (line 2355) | get overloaded()
  method overloaded (line 2360) | set overloaded(x)
  method disabled (line 2368) | get disabled()
  method name (line 2373) | get name()
  method value (line 2389) | get value()
  method parsedOk (line 2406) | get parsedOk()
  function processValue (line 2445) | function processValue(regex, processor, nextProcessor, valueText)
  function urlRegex (line 2470) | function urlRegex(value)
  function linkifyURL (line 2485) | function linkifyURL(url)
  function spectrumChanged (line 2576) | function spectrumChanged(event)
  function spectrumHidden (line 2589) | function spectrumHidden(event)
  function repositionSpectrum (line 2603) | function repositionSpectrum()
  function swatchClick (line 2612) | function swatchClick(e)
  function nextFormat (line 2651) | function nextFormat(curFormat)
  function changeColorDisplay (line 2697) | function changeColorDisplay()
  function callback (line 2880) | function callback(newStyle)
  function restoreURLs (line 3062) | function restoreURLs(fieldValue, modelValue)
  function pasteHandler (line 3097) | function pasteHandler(context, event)
  function blurListener (line 3129) | function blurListener(context, event)
  function shouldCommitValueSemicolon (line 3221) | function shouldCommitValueSemicolon(text, cursorPosition)
  function moveToNextCallback (line 3393) | function moveToNextCallback(alreadyNew, valueChanged, section)
  function userOperationFinishedCallback (line 3502) | function userOperationFinishedCallback(parentPane, updateInterface)
  function callback (line 3539) | function callback(userCallback, originalPropertyText, newStyle)
  function finishHandler (line 3681) | function finishHandler(originalValue, replacementString)
  function customNumberHandler (line 3694) | function customNumberHandler(prefix, number, suffix)

FILE: front-end/extensions/ExtensionAPI.js
  function defineCommonExtensionSymbols (line 31) | function defineCommonExtensionSymbols(apiPrivate)
  function injectedExtensionAPI (line 111) | function injectedExtensionAPI(injectedScriptId)
  function platformExtensionAPI (line 988) | function platformExtensionAPI(coreAPI)
  function buildPlatformExtensionAPI (line 1029) | function buildPlatformExtensionAPI(extensionInfo, inspectedTabId)
  function buildExtensionAPIInjectedScript (line 1041) | function buildExtensionAPIInjectedScript(extensionInfo, inspectedTabId)

FILE: front-end/extensions/ExtensionServer.js
  function appendButton (line 295) | function appendButton(panel)
  function callback (line 351) | function callback(error)
  function callback (line 439) | function callback(error, resultPayload, wasThrown)
  function convertSeverity (line 461) | function convertSeverity(level)
  function convertLevel (line 492) | function convertLevel(level)
  function pushResourceData (line 550) | function pushResourceData(contentProvider)
  function onContentAvailable (line 573) | function onContentAvailable(content)
  function callbackWrapper (line 613) | function callbackWrapper(error)
  function handleEventEntry (line 701) | function handleEventEntry(entry)
  function keyCodeForEntry (line 719) | function keyCodeForEntry(entry)
  function onElementsSubscriptionStarted (line 750) | function onElementsSubscriptionStarted()
  function onElementsSubscriptionStopped (line 758) | function onElementsSubscriptionStopped()
  function addFirstEventListener (line 933) | function addFirstEventListener()
  function removeLastEventListener (line 942) | function removeLastEventListener()
  function resolveURLToFrame (line 996) | function resolveURLToFrame(url)
  function makeStatus (line 1106) | function makeStatus(code, description)

FILE: front-end/externs.js
  function DOMFileSystem (line 175) | function DOMFileSystem() {}
  function AuditCategory (line 259) | function AuditCategory() {}
  function AuditResult (line 261) | function AuditResult() {}
  function EventSink (line 263) | function EventSink() {}
  function ExtensionSidebarPane (line 265) | function ExtensionSidebarPane() {}
  function Panel (line 267) | function Panel() {}
  function PanelWithSidebar (line 269) | function PanelWithSidebar() {}
  function Request (line 271) | function Request() {}
  function Resource (line 273) | function Resource() {}
  function Timeline (line 275) | function Timeline() {}
  function ExtensionDescriptor (line 282) | function ExtensionDescriptor() {
  function ExtensionReloadOptions (line 290) | function ExtensionReloadOptions() {
  function Symbol (line 533) | function Symbol(description) {}
  method size (line 606) | get size() { }
  method size (line 649) | get size() { }

FILE: front-end/heap_snapshot_worker/AllocationProfile.js
  function traverseNode (line 93) | function traverseNode(rawNodeArray, nodeOffset, parent)

FILE: front-end/heap_snapshot_worker/HeapSnapshot.js
  method edgeIndex (line 357) | set edgeIndex(edgeIndex)
  function HeapSnapshotMetainfo (line 908) | function HeapSnapshotMetainfo()
  function HeapSnapshotHeader (line 923) | function HeapSnapshotHeader()
  method rootNodeIndex (line 1103) | get rootNodeIndex()
  method totalSize (line 1108) | get totalSize()
  function filterString (line 1149) | function filterString(matchedStringIndexes, string, index)
  function filterRegexp (line 1157) | function filterRegexp(matchedStringIndexes, string, index)
  function nodeIdFilter (line 1211) | function nodeIdFilter(node)
  function traceIdFilter (line 1235) | function traceIdFilter(node)
  function enqueueNode (line 1371) | function enqueueNode(distance, node)
  function compareEdgeFieldName (line 2258) | function compareEdgeFieldName(ascending, indexA, indexB)
  function compareNodeField (line 2271) | function compareNodeField(fieldName, ascending, indexA, indexB)
  function compareEdgeAndNode (line 2285) | function compareEdgeAndNode(indexA, indexB) {
  function compareNodeAndEdge (line 2294) | function compareNodeAndEdge(indexA, indexB) {
  function compareNodeAndNode (line 2303) | function compareNodeAndNode(indexA, indexB) {
  function sortByNodeField (line 2385) | function sortByNodeField(fieldAccessor, ascending)
  function sortByComparator (line 2397) | function sortByComparator(indexA, indexB)

FILE: front-end/heap_snapshot_worker/HeapSnapshotWorker.js
  function postMessageWrapper (line 31) | function postMessageWrapper(message)
  function installMessageEventListener (line 42) | function installMessageEventListener(listener)

FILE: front-end/heap_snapshot_worker/JSHeapSnapshot.js
  function filter (line 98) | function filter(node)
  function filter (line 111) | function filter(edge)
  function filter (line 128) | function filter(edge)
  function filter (line 150) | function filter(node, edge)
  function getChildNodeByName (line 200) | function getChildNodeByName(node, name)
  function doAction (line 214) | function doAction(node)

FILE: front-end/host/InspectorFrontendHost.js
  function InspectorFrontendHostAPI (line 32) | function InspectorFrontendHostAPI()
  function stopEventPropagation (line 281) | function stopEventPropagation(event)
  function initializeInspectorFrontendHost (line 567) | function initializeInspectorFrontendHost()
  function InspectorFrontendAPIImpl (line 601) | function InspectorFrontendAPIImpl()
  function innerDispatch (line 625) | function innerDispatch()

FILE: front-end/layers/LayerPaintProfilerView.js
  function onSnapshotDone (line 37) | function onSnapshotDone(snapshot)
  function onCommandLogDone (line 48) | function onCommandLogDone(snapshot, log)

FILE: front-end/main/AdvancedApp.js
  function showDevices (line 232) | function showDevices()

FILE: front-end/main/Main.js
  function resolveItem (line 64) | function resolveItem(extension)
  function appendItemsInOrder (line 99) | function appendItemsInOrder(items)
  function updateToolbarColors (line 185) | function updateToolbarColors(event)
  function onDisconnected (line 291) | function onDisconnected(event)
  function onWorkerDisconnected (line 321) | function onWorkerDisconnected()
  function inspectorAgentEnableCallback (line 341) | function inspectorAgentEnableCallback()
  function messageAdded (line 370) | function messageAdded(event)
  function followLink (line 396) | function followLink()
  function didGetDetails (line 566) | function didGetDetails(response)
  function callback (line 786) | function callback(connection)
  function showConsole (line 810) | function showConsole()

FILE: front-end/main/OverridesView.js
  function changeListener (line 174) | function changeListener(value)

FILE: front-end/main/RenderingOptions.js
  function changeListener (line 82) | function changeListener()

FILE: front-end/main/TestController.js
  function invokeMethod (line 36) | function invokeMethod()

FILE: front-end/main/Tests.js
  function createTestSuite (line 40) | function createTestSuite(domAutomationController)

FILE: front-end/network/NetworkDataGridNode.js
  method selectable (line 177) | get selectable()

FILE: front-end/network/NetworkItemView.js
  method innerView (line 137) | get innerView()
  method innerView (line 142) | set innerView(innerView)
  function callback (line 162) | function callback(content)

FILE: front-end/network/NetworkLogView.js
  function appendStackTrace (line 1102) | function appendStackTrace(stackTrace)
  function compare (line 1173) | function compare(id1, id2)
  function openResourceInNewTab (line 1208) | function openResourceInNewTab(url)
  function callback (line 1283) | function callback(content)
  function openCallback (line 1318) | function openCallback(accepted)
  function escapeStringWin (line 1658) | function escapeStringWin(str)
  function escapeStringPosix (line 1680) | function escapeStringPosix(str)

FILE: front-end/network/NetworkPanel.js
  function sourceFrameGetter (line 95) | function sourceFrameGetter()
  function reveal (line 308) | function reveal(request)
  function appendRevealItem (line 317) | function appendRevealItem(request)

FILE: front-end/network/RequestCookiesView.js
  method _gotCookies (line 69) | get _gotCookies()

FILE: front-end/network/RequestHeadersView.js
  function toggleViewSource (line 207) | function toggleViewSource(event)
  function toggleViewSource (line 256) | function toggleViewSource(event)

FILE: front-end/network/RequestResponseView.js
  method sourceView (line 44) | get sourceView()
  function decodeContent (line 134) | function decodeContent(content)

FILE: front-end/network/RequestTimingView.js
  function addRow (line 101) | function addRow(title, className, start, end)
  function firstPositive (line 126) | function firstPositive(numbers)
  function createCommunicationTimingTable (line 135) | function createCommunicationTimingTable()
  function createServiceWorkerTimingTable (line 146) | function createServiceWorkerTimingTable()

FILE: front-end/platform/DOMExtension.js
  function removeSubsequentNodes (line 196) | function removeSubsequentNodes(fromNode, toNode)
  function createElement (line 317) | function createElement(tagName)
  function createTextNode (line 327) | function createTextNode(data)
  function createElementWithClass (line 351) | function createElementWithClass(elementName, className)
  function createDocumentFragment (line 360) | function createDocumentFragment()
  function AnchorBox (line 458) | function AnchorBox(x, y, width, height)
  function isEnterKey (line 779) | function isEnterKey(event) {
  function consumeEvent (line 784) | function consumeEvent(e)
  function runOnWindowLoad (line 793) | function runOnWindowLoad(callback)

FILE: front-end/platform/Promise.js
  function reject (line 28) | function reject(e)

FILE: front-end/platform/utilities.js
  function mod (line 74) | function mod(m, n)
  function sanitizeHref (line 263) | function sanitizeHref(href)
  function encodeBits (line 325) | function encodeBits(b)
  function leadZero (line 445) | function leadZero(x)
  function leadZero2 (line 466) | function leadZero2(x)
  function leadZero3 (line 475) | function leadZero3(x)
  function numericComparator (line 571) | function numericComparator(a, b)
  function swap (line 595) | function swap(array, i1, i2)
  function quickSortRange (line 630) | function quickSortRange(array, comparator, left, right, sortWindowLeft, ...
  function defaultComparator (line 662) | function defaultComparator(a, b)
  function indexComparator (line 677) | function indexComparator(a, b)
  function defaultComparator (line 754) | function defaultComparator(a, b)
  function defaultComparator (line 792) | function defaultComparator(a, b)
  function mergeOrIntersect (line 878) | function mergeOrIntersect(array1, array2, comparator, mergeNotIntersect)
  function insertionIndexForObjectInListSortedByFunction (line 942) | function insertionIndexForObjectInListSortedByFunction(object, list, com...
  function addStringToken (line 970) | function addStringToken(str)
  function addSpecifierToken (line 975) | function addSpecifierToken(specifier, precision, substitutionIndex)
  function prettyFunctionName (line 1089) | function prettyFunctionName()
  function warn (line 1094) | function warn(msg)
  function error (line 1099) | function error(msg)
  function createSearchRegex (line 1157) | function createSearchRegex(query, caseSensitive, isRegex)
  function createPlainTextSearchRegex (line 1181) | function createPlainTextSearchRegex(query, flags)
  function countRegexMatches (line 1200) | function countRegexMatches(regex, content)
  function spacesPadding (line 1217) | function spacesPadding(spacesCount)
  function numberToStringWithSpacesPadding (line 1227) | function numberToStringWithSpacesPadding(value, symbolsCount)
  function loadXHR (line 1386) | function loadXHR(url)
  function CallbackBarrier (line 1415) | function CallbackBarrier()
  function suppressUnused (line 1461) | function suppressUnused(value)

FILE: front-end/profiler/CPUProfileDataGrid.js
  function formatMilliseconds (line 117) | function formatMilliseconds(time)
  function formatPercent (line 121) | function formatPercent(value)
  method selfPercent (line 238) | get selfPercent()
  method totalPercent (line 243) | get totalPercent()
  method expanded (line 384) | get expanded()
  function matchesQuery (line 478) | function matchesQuery(/*ProfileDataGridNode*/ profileDataGridNode)

FILE: front-end/profiler/CPUProfileFlameChart.js
  function ChartEntry (line 153) | function ChartEntry(depth, duration, startTime, selfTime, node)
  function onOpenFrame (line 168) | function onOpenFrame()
  function onCloseFrame (line 175) | function onCloseFrame(depth, node, startTime, totalTime, selfTime)
  function pushEntryInfoRow (line 236) | function pushEntryInfoRow(title, text)

FILE: front-end/profiler/CPUProfileView.js
  method buttonTooltip (line 410) | get buttonTooltip()
  method treeItemTitle (line 430) | get treeItemTitle()
  method description (line 435) | get description()
  function didStopProfiling (line 529) | function didStopProfiling(profile)
  function onOpenForSave (line 680) | function onOpenForSave(accepted)
  function didCreateTempFile (line 744) | function didCreateTempFile(tempFile)
  function didWriteToTempFile (line 768) | function didWriteToTempFile(success)

FILE: front-end/profiler/CanvasProfileView.js
  method profile (line 131) | get profile()
  function didReceiveResourceState (line 209) | function didReceiveResourceState(resourceState)
  function didReplayTraceLog (line 310) | function didReplayTraceLog(resourceState, replayTime)
  function didReceiveTraceLog (line 334) | function didReceiveTraceLog(traceLog)
  function appendDrawCallGroup (line 424) | function appendDrawCallGroup()
  function splitDrawCallGroup (line 438) | function splitDrawCallGroup(drawCallGroup)
  function showObjectPopover (line 549) | function showObjectPopover(error, result, resourceState)
  method buttonTooltip (line 698) | get buttonTooltip()
  function didStopCapturing (line 751) | function didStopCapturing()
  method treeItemTitle (line 774) | get treeItemTitle()
  method description (line 779) | get description()
  function hasUninstrumentedCanvasesCallback (line 825) | function hasUninstrumentedCanvasesCallback(error, result)
  function callback (line 857) | function callback(error)
  function didReceiveTraceLog (line 1129) | function didReceiveTraceLog(traceLog)
  function callback (line 1230) | function callback(error, traceLog)
  function callback (line 1271) | function callback(error, resourceState)
  function callback (line 1296) | function callback(error, resourceState, replayTime)

FILE: front-end/profiler/CanvasReplayStateView.js
  function comparator (line 240) | function comparator(arg1, arg2)
  function didReceiveResourceState (line 270) | function didReceiveResourceState(resourceState)
  function populateNameToNodesMap (line 322) | function populateNameToNodesMap(map, node)
  function comparator (line 343) | function comparator(d1, d2)
  function appendResourceStateDescriptors (line 357) | function appendResourceStateDescriptors(descriptors, parent, nameToOldCh...
  function processRecursively (line 418) | function processRecursively(node, key)
  function callback (line 440) | function callback(node, key)
  function callback (line 460) | function callback(node, key)

FILE: front-end/profiler/HeapSnapshotDataGrids.js
  function revealInSummaryView (line 144) | function revealInSummaryView()
  function SortByTwoFields (line 220) | function SortByTwoFields(nodeA, nodeB)
  function didPopulateNode (line 745) | function didPopulateNode(parentNode, node)
  function didGetClassName (line 757) | function didGetClassName(className)
  function aggregatesForDiffReceived (line 935) | function aggregatesForDiffReceived(aggregatesForDiff)
  function didReceiveAllocationTracesTops (line 1005) | function didReceiveAllocationTracesTops(tops)
  function compare (line 1042) | function compare(a, b)

FILE: front-end/profiler/HeapSnapshotGridNodes.js
  function sorted (line 280) | function sorted()
  function serializeNextChunk (line 309) | function serializeNextChunk()
  function insertRetrievedChild (line 321) | function insertRetrievedChild(item, insertionIndex)
  function insertShowMoreButton (line 336) | function insertShowMoreButton(from, to, insertionIndex)
  function childrenRetrieved (line 346) | function childrenRetrieved(itemsRange)
  function afterSort (line 466) | function afterSort()
  function formatResult (line 645) | function formatResult(error, object)
  function isEmptyCallback (line 664) | function isEmptyCallback(isEmpty)
  function populateComplete (line 892) | function populateComplete()
  function didExpand (line 1069) | function didExpand()
  function didGetNodePosition (line 1078) | function didGetNodePosition(nodePosition)
  function didPopulateChildren (line 1092) | function didPopulateChildren(nodePosition)
  function didReceiveAllItems (line 1222) | function didReceiveAllItems(items)
  function didReceiveDeletedItems (line 1233) | function didReceiveDeletedItems(addedItems, itemsRange)
  function didReceiveAddedItems (line 1250) | function didReceiveAddedItems(itemsRange)
  function afterSort (line 1279) | function afterSort()
  function didReceiveCallers (line 1447) | function didReceiveCallers(callers)

FILE: front-end/profiler/HeapSnapshotProxy.js
  function wrapCallback (line 97) | function wrapCallback(remoteResult)
  function buildSnapshot (line 275) | function buildSnapshot()
  function updateStaticData (line 287) | function updateStaticData(snapshotProxy)
  method nodeCount (line 433) | get nodeCount()
  method rootNodeIndex (line 438) | get rootNodeIndex()
  function dataReceived (line 449) | function dataReceived(staticData)
  method totalSize (line 465) | get totalSize()
  method uid (line 470) | get uid()

FILE: front-end/profiler/HeapSnapshotView.js
  function profileCallback (line 494) | function profileCallback(heapSnapshotProxy)
  function profileCallback (line 548) | function profileCallback() {
  function didSearch (line 648) | function didSearch(entryIds)
  function dataGridContentShown (line 810) | function dataGridContentShown(event)
  function didLoadSnapshot (line 834) | function didLoadSnapshot(snapshotProxy)
  function didLoadBaseSnaphot (line 850) | function didLoadBaseSnaphot(baseSnapshotProxy)
  function didChangePerspective (line 910) | function didChangePerspective()
  function didRevealObject (line 915) | function didRevealObject(parentNode, node)
  method buttonTooltip (line 1063) | get buttonTooltip()
  method treeItemTitle (line 1088) | get treeItemTitle()
  method description (line 1093) | get description()
  function didTakeHeapSnapshot (line 1122) | function didTakeHeapSnapshot(error)
  method buttonTooltip (line 1262) | get buttonTooltip()
  function didTakeHeapSnapshot (line 1323) | function didTakeHeapSnapshot(error)
  method treeItemTitle (line 1348) | get treeItemTitle()
  method description (line 1353) | get description()
  function setProfileWait (line 1493) | function setProfileWait(event)
  function onOpen (line 1599) | function onOpen(accepted)
  function aggregateAndCall (line 1809) | function aggregateAndCall(sizes, callback)
  function maxSizeCallback (line 1830) | function maxSizeCallback(x, size)
  function drawBarCallback (line 1882) | function drawBarCallback(x, size)

FILE: front-end/profiler/ProfilesPanel.js
  method buttonTooltip (line 91) | get buttonTooltip()
  method id (line 96) | get id()
  method treeItemTitle (line 101) | get treeItemTitle()
  method name (line 106) | get name()
  method description (line 119) | get description()
  function isFinished (line 150) | function isFinished(profile)
  function onAddProfileHeader (line 680) | function onAddProfileHeader(event)
  function onRemoveProfileHeader (line 689) | function onRemoveProfileHeader(event)
  function profileComplete (line 698) | function profileComplete(event)
  function revealInView (line 891) | function revealInView(viewName)
  function didReceiveHeapObjectId (line 899) | function didReceiveHeapObjectId(viewName, error, result)
  method selectable (line 1222) | get selectable()

FILE: front-end/promises/PromisePane.js
  function callback (line 102) | function callback(error, promiseData)
  function showPromiseInConsole (line 166) | function showPromiseInConsole()
  function didGetPromiseById (line 177) | function didGetPromiseById(error, promise)

FILE: front-end/resources/ApplicationCacheItemsView.js
  function numberCompare (line 215) | function numberCompare(field, resource1, resource2)
  function localeCompare (line 219) | function localeCompare(field, resource1, resource2)

FILE: front-end/resources/CookieItemsView.js
  function populateResourcesForDocuments (line 125) | function populateResourcesForDocuments(resource)

FILE: front-end/resources/DatabaseQueryView.js
  function accumulateMatches (line 85) | function accumulateMatches(textArray)
  function tableNamesCallback (line 97) | function tableNamesCallback(tableNames)
  function moveBackIfOutside (line 117) | function moveBackIfOutside()

FILE: front-end/resources/DirectoryContentView.js
  function isDirectoryCompare (line 137) | function isDirectoryCompare(x, y)
  function nameCompare (line 144) | function nameCompare(x, y)
  function typeCompare (line 149) | function typeCompare(x, y)
  function sizeCompare (line 154) | function sizeCompare(x, y)
  function modificationTimeCompare (line 159) | function modificationTimeCompare(x, y)

FILE: front-end/resources/FileSystemView.js
  method visibleView (line 74) | get visibleView()

FILE: front-end/resources/IndexedDBViews.js
  function callback (line 303) | function callback(entries, hasMore)
  function cleared (line 341) | function cleared() {

FILE: front-end/resources/ResourcesPanel.js
  function sourceFrameGetter (line 100) | function sourceFrameGetter()
  function populateFrame (line 253) | function populateFrame(frame)
  function tableNamesCallback (line 656) | function tableNamesCallback(tableNames)
  method displayName (line 867) | get displayName()
  method titleText (line 929) | get titleText()
  method titleText (line 934) | set titleText(titleText)
  method subtitleText (line 940) | get subtitleText()
  method subtitleText (line 945) | set subtitleText(subtitleText)
  method itemURL (line 981) | get itemURL()
  method itemURL (line 1052) | get itemURL()
  method hovered (line 1071) | set hovered(hovered)
  function typeWeight (line 1120) | function typeWeight(treeElement)
  function compare (line 1129) | function compare(treeElement1, treeElement2)
  method itemURL (line 1176) | get itemURL()
  method itemURL (line 1330) | get itemURL()
  function tableNamesCallback (line 1362) | function tableNamesCallback(tableNames)
  method itemURL (line 1386) | get itemURL()
  method itemURL (line 1614) | get itemURL()
  method itemURL (line 1726) | get itemURL()
  function callback (line 1749) | function callback() {
  method itemURL (line 1860) | get itemURL()
  method itemURL (line 1924) | get itemURL()
  method itemURL (line 1954) | get itemURL()
  method itemURL (line 2010) | get itemURL()
  method manifestURL (line 2015) | get manifestURL()
  method itemURL (line 2047) | get itemURL()
  method frameId (line 2052) | get frameId()
  method manifestURL (line 2057) | get manifestURL()
  method fileSystemName (line 2106) | get fileSystemName()
  method itemURL (line 2111) | get itemURL()

FILE: front-end/screencast/ScreencastView.js
  function callback (line 241) | function callback(node)
  function callback (line 413) | function callback(model)
  function scaleQuad (line 435) | function scaleQuad(quad)

FILE: front-end/script_formatter_worker/ScriptFormatterWorker.js
  function tokenize (line 39) | function tokenize(line, callback)
  function isJavaScriptIdentifier (line 114) | function isJavaScriptIdentifier(tokenType)
  function processToken (line 127) | function processToken(tokenValue, tokenType, column, newColumn)
  function processToken (line 210) | function processToken(tokenValue, tokenTypes, column, newColumn)
  function processToken (line 378) | function processToken(tokenValue, tokenType, tokenStart, tokenEnd) {
  function require (line 478) | function require()

FILE: front-end/sdk/AnimationModel.js
  function resultCallback (line 35) | function resultCallback(error, payloads)
  function mycallback (line 214) | function mycallback(error, currentTime, isRunning)
  function nodePushedCallback (line 322) | function nodePushedCallback(nodeIds)

FILE: front-end/sdk/ApplicationCacheModel.js
  method onLine (line 183) | get onLine()
  function callbackWrapper (line 208) | function callbackWrapper(error, applicationCache)

FILE: front-end/sdk/CPUProfileDataModel.js
  function totalHitCount (line 32) | function totalHitCount(node) {
  function calculateTimesForNode (line 44) | function calculateTimesForNode(node) {
  function bottomNode (line 161) | function bottomNode(node)
  function isSystemNode (line 172) | function isSystemNode(nodeId)

FILE: front-end/sdk/CPUProfilerModel.js
  function dispatchEvent (line 74) | function dispatchEvent()
  function dispatchEvent (line 93) | function dispatchEvent()
  function extractProfile (line 125) | function extractProfile(value)

FILE: front-end/sdk/CSSStyleModel.js
  function callback (line 105) | function callback(error, payload)
  function callback (line 145) | function callback(userCallback, error, matchedPayload, pseudoPayload, in...
  function platformFontsCallback (line 199) | function platformFontsCallback(error, cssFamilyName, fonts)
  function styleSheetComparator (line 220) | function styleSheetComparator(a, b)
  function callback (line 246) | function callback(userCallback, error, inlinePayload, attributesStylePay...
  function callback (line 301) | function callback(nodeId, successCallback, failureCallback, newSelector,...
  function selectorQueried (line 350) | function selectorQueried(index, nodeId, matchingSelectors, matchingNodeIds)
  function callback (line 377) | function callback(error, rulePayload)
  function innerCallback (line 411) | function innerCallback(error, styleSheetId)
  function callback (line 562) | function callback(error)
  method allProperties (line 756) | get allProperties()
  function callback (line 871) | function callback(error, payload)
  method isUserAgent (line 1062) | get isUserAgent()
  method isInjected (line 1067) | get isInjected()
  method isViaInspector (line 1072) | get isViaInspector()
  method isRegular (line 1077) | get isRegular()
  method propertyText (line 1150) | get propertyText()
  method isLive (line 1160) | get isLive()
  method active (line 1165) | get active()
  method styleBased (line 1170) | get styleBased()
  method inactive (line 1175) | get inactive()
  function enabledCallback (line 1191) | function enabledCallback(style)
  function callback (line 1202) | function callback(error, stylePayload)
  function textCallback (line 1595) | function textCallback(error, text)
  function performSearch (line 1612) | function performSearch(content)
  function resultCallback (line 1716) | function resultCallback(nodeId, error, computedPayload)

FILE: front-end/sdk/ConsoleModel.js
  function callback (line 66) | function callback()
  function printResult (line 156) | function printResult(result, wasThrown, valueResult, exceptionDetails)

FILE: front-end/sdk/ContentProviders.js
  function didRequestSource (line 102) | function didRequestSource(content)
  function maybeCallback (line 124) | function maybeCallback()
  function searchCallback (line 139) | function searchCallback(script, searchMatches)
  function contentLoaded (line 230) | function contentLoaded(error, statusCode, headers, content)
  function contentLoaded (line 255) | function contentLoaded(content)

FILE: front-end/sdk/CookieParser.js
  function mycallback (line 382) | function mycallback(error, cookies)

FILE: front-end/sdk/DOMModel.js
  function mycallback (line 394) | function mycallback(error)
  function mycallback (line 426) | function mycallback(error)
  function mycallback (line 445) | function mycallback(error)
  function copy (line 484) | function copy(error, text)
  function mycallback (line 506) | function mycallback(error, payloads)
  function canPush (line 527) | function canPush(node)
  function mycallback (line 874) | function mycallback(error, object)
  function onGotNode (line 920) | function onGotNode(nodeIds)
  function onDocumentAvailable (line 1021) | function onDocumentAvailable(error, root)
  function mycallback (line 1055) | function mycallback(nodeId)
  function onDocumentAvailable (line 1114) | function onDocumentAvailable()
  function callback (line 1174) | function callback(nodeId, error, attributes)
  function callback (line 1405) | function callback(error, searchId, resultsCount)
  function performSearch (line 1426) | function performSearch(resolve)
  function searchResultsCallback (line 1461) | function searchResultsCallback(error, nodeIds)
  function onDocumentAvailable (line 1555) | function onDocumentAvailable()
  function wrapperFunction (line 1602) | function wrapperFunction(error)
  function scriptAddedCallback (line 1648) | function scriptAddedCallback(error, scriptId)
  function mycallback (line 1673) | function mycallback(error)
  function mycallback (line 1692) | function mycallback(error)
  function mycallback (line 1724) | function mycallback(error, nodeId)

FILE: front-end/sdk/DOMStorage.js
  method id (line 64) | get id()
  method securityOrigin (line 70) | get securityOrigin()
  method isLocalStorage (line 76) | get isLocalStorage()

FILE: front-end/sdk/Database.js
  method id (line 48) | get id()
  method name (line 54) | get name()
  method name (line 59) | set name(x)
  method version (line 65) | get version()
  method version (line 70) | set version(x)
  method domain (line 76) | get domain()
  method domain (line 81) | set domain(x)
  function sortingCallback (line 91) | function sortingCallback(error, names)
  function callback (line 112) | function callback(error, columnNames, values, errorObj)

FILE: front-end/sdk/DebuggerModel.js
  function callback (line 195) | function callback()
  function callback (line 207) | function callback()
  function callback (line 219) | function callback()
  function callback (line 231) | function callback()
  function didSetBreakpoint (line 271) | function didSetBreakpoint(error, breakpointId, locations)
  function didSetBreakpoint (line 296) | function didSetBreakpoint(error, breakpointId, actualLocation)
  function innerCallback (line 318) | function innerCallback(error)
  method scripts (line 352) | get scripts()
  method callFrames (line 412) | get callFrames()
  function didEvaluate (line 608) | function didEvaluate(result, wasThrown, exceptionDetails)
  function propertiesCollected (line 637) | function propertiesCollected(properties)
  function didGetDetails (line 686) | function didGetDetails(error, response)
  method script (line 921) | get script()
  method id (line 929) | get id()
  method scopeChain (line 937) | get scopeChain()
  method functionName (line 961) | get functionName()
  function didEvaluateOnCallFrame (line 999) | function didEvaluateOnCallFrame(error, result, wasThrown, exceptionDetails)
  function protocolCallback (line 1023) | function protocolCallback(error, callFrames, details, asyncStackTrace)

FILE: front-end/sdk/FileSystemModel.js
  function innerCallback (line 115) | function innerCallback(error, errorCode, backendRootEntry)
  function innerCallback (line 185) | function innerCallback(error, errorCode, backendEntries)
  function innerCallback (line 238) | function innerCallback(error, errorCode, metadata)
  function innerCallback (line 280) | function innerCallback(error, errorCode, content, charset)
  function hookFileSystemDeletion (line 306) | function hookFileSystemDeletion(errorCode)
  function innerCallback (line 324) | function innerCallback(error, errorCode)
  method name (line 383) | get name()
  method fileSystemModel (line 421) | get fileSystemModel()
  method fileSystem (line 429) | get fileSystem()
  method url (line 437) | get url()
  method name (line 445) | get name()
  method isDirectory (line 453) | get isDirectory()
  method mimeType (line 519) | get mimeType()
  method resourceType (line 527) | get resourceType()
  method isTextFile (line 535) | get isTextFile()

FILE: front-end/sdk/HAREntry.js
  function firstNonNegative (line 139) | function firstNonNegative(values)
  method requestBodySize (line 230) | get requestBodySize()
  method responseBodySize (line 238) | get responseBodySize()
  method responseCompression (line 250) | get responseCompression()

FILE: front-end/sdk/IndexedDBModel.js
  function callback (line 296) | function callback(error, databaseNames)
  function callback (line 321) | function callback(error, databaseWithObjectStores)
  function innerCallback (line 396) | function innerCallback(error, dataEntries, hasMore)
  method keyPathString (line 488) | get keyPathString()
  method keyPathString (line 513) | get keyPathString()

FILE: front-end/sdk/InspectorBackend.js
  function InspectorBackendClass (line 34) | function InspectorBackendClass()
  function agentGetter (line 75) | function agentGetter()
  function registerDispatcher (line 85) | function registerDispatcher(dispatcher)
  function callbackWrapper (line 208) | function callbackWrapper(error, value)
  function toUpperCase (line 242) | function toUpperCase(groupIndex, group0, group1)
  function generateEnum (line 246) | function generateEnum(enumName, items)
  function sendMessage (line 786) | function sendMessage(vararg)
  function sendMessagePromise (line 797) | function sendMessagePromise(vararg)
  function invoke (line 809) | function invoke(vararg)
  function onError (line 882) | function onError(message)
  function onError (line 907) | function onError(message)
  function promiseAction (line 923) | function promiseAction(resolve, reject)

FILE: front-end/sdk/LayerTreeModel.js
  function onLayersSet (line 127) | function onLayersSet()
  function populateBackendNodeIdMap (line 244) | function populateBackendNodeIdMap(nodeIds)
  function onBackendNodeIdsResolved (line 307) | function onBackendNodeIdsResolved()
  function onBackendNodeIdsResolved (line 400) | function onBackendNodeIdsResolved()
  function toFixed9 (line 807) | function toFixed9(x) { return x.toFixed(9); }
  function calculateQuadForLayer (line 855) | function calculateQuadForLayer(layer)

FILE: front-end/sdk/NetworkLog.js
  method requests (line 52) | get requests()

FILE: front-end/sdk/NetworkRequest.js
  method requestId (line 123) | get requestId()
  method requestId (line 128) | set requestId(requestId)
  method url (line 136) | get url()
  method url (line 141) | set url(x)
  method documentURL (line 157) | get documentURL()
  method parsedURL (line 162) | get parsedURL()
  method frameId (line 170) | get frameId()
  method loaderId (line 178) | get loaderId()
  method startTime (line 206) | get startTime()
  method startTime (line 211) | set startTime(x)
  method responseReceivedTime (line 219) | get responseReceivedTime()
  method responseReceivedTime (line 224) | set responseReceivedTime(x)
  method endTime (line 232) | get endTime()
  method endTime (line 237) | set endTime(x)
  method duration (line 254) | get duration()
  method latency (line 264) | get latency()
  method resourceSize (line 274) | get resourceSize()
  method resourceSize (line 279) | set resourceSize(x)
  method transferSize (line 287) | get transferSize()
  method finished (line 311) | get finished()
  method finished (line 316) | set finished(x)
  method failed (line 333) | get failed()
  method failed (line 338) | set failed(x)
  method canceled (line 346) | get canceled()
  method canceled (line 351) | set canceled(x)
  method fetchedViaServiceWorker (line 378) | get fetchedViaServiceWorker()
  method fetchedViaServiceWorker (line 383) | set fetchedViaServiceWorker(x)
  method timing (line 391) | get timing()
  method timing (line 396) | set timing(x)
  method mimeType (line 412) | get mimeType()
  method mimeType (line 417) | set mimeType(x)
  method displayName (line 425) | get displayName()
  method folder (line 478) | get folder()
  method domain (line 507) | get domain()
  method scheme (line 515) | get scheme()
  method redirectSource (line 523) | get redirectSource()
  method redirectSource (line 530) | set redirectSource(x)
  method requestCookies (line 585) | get requestCookies()
  method requestFormData (line 595) | get requestFormData()
  method requestFormData (line 600) | set requestFormData(x)
  method responseHeaders (line 622) | get responseHeaders()
  method responseHeaders (line 627) | set responseHeaders(x)
  method responseHeadersText (line 640) | get responseHeadersText()
  method responseHeadersText (line 645) | set responseHeadersText(x)
  method sortedResponseHeaders (line 655) | get sortedResponseHeaders()
  method responseCookies (line 682) | get responseCookies()
  method queryParameters (line 713) | get queryParameters()
  method formParameters (line 727) | get formParameters()
  function parseNameValue (line 759) | function parseNameValue(pair)
  method content (line 795) | get content()
  method contentEncoded (line 811) | get contentEncoded()
  function onResourceContent (line 922) | function onResourceContent(error, content, contentEncoded)

FILE: front-end/sdk/OverridesSupport.js
  function isUserInputValid (line 157) | function isUserInputValid(value)
  function isUserInputValid (line 224) | function isUserInputValid(value)
  function setDeviceMetricsOverride (line 601) | function setDeviceMetricsOverride(finishCallback)
  function clearDeviceMetricsOverride (line 613) | function clearDeviceMetricsOverride(finishCallback)
  function apiCallback (line 623) | function apiCallback(finishCallback, error)

FILE: front-end/sdk/PaintProfiler.js
  function callbackWrapper (line 144) | function callbackWrapper(error, log)

FILE: front-end/sdk/RemoteObject.js
  method type (line 40) | get type()
  method subtype (line 46) | get subtype()
  method description (line 52) | get description()
  method hasChildren (line 58) | get hasChildren()
  method objectId (line 266) | get objectId()
  method type (line 272) | get type()
  method subtype (line 278) | get subtype()
  method description (line 284) | get description()
  method hasChildren (line 290) | get hasChildren()
  method preview (line 296) | get preview()
  function remoteFunction (line 329) | function remoteFunction(arrayStr)
  function remoteObjectBinder (line 360) | function remoteObjectBinder(error, properties, internalProperties)
  function evaluatedCallback (line 419) | function evaluatedCallback(error, result, wasThrown)
  function propertySetCallback (line 457) | function propertySetCallback(error, result, wasThrown)
  function deletePropertyCallback (line 486) | function deletePropertyCallback(error, result, wasThrown)
  function mycallback (line 533) | function mycallback(error, result, wasThrown)
  function mycallback (line 558) | function mycallback(error, result, wasThrown)
  function didGetCollectionEntries (line 627) | function didGetCollectionEntries(error, response)
  function processCallback (line 667) | function processCallback()
  function allAccessorPropertiesCallback (line 688) | function allAccessorPropertiesCallback(properties, internalProperties)
  function ownPropertiesCallback (line 698) | function ownPropertiesCallback(properties, internalProperties)
  function wrappedCallback (line 756) | function wrappedCallback(properties, internalProperties)
  function setVariableValueCallback (line 780) | function setVariableValueCallback(error)
  method description (line 867) | get description()
  method type (line 959) | get type()
  method subtype (line 967) | get subtype()
  method hasChildren (line 984) | get hasChildren()
  function buildProperty (line 1024) | function buildProperty(propName)
  method description (line 1112) | get description()

FILE: front-end/sdk/Resource.js
  function onResourceContent (line 94) | function onResourceContent(content)
  method request (line 109) | get request()
  method url (line 117) | get url()
  method url (line 122) | set url(x)
  method parsedURL (line 128) | get parsedURL()
  method documentURL (line 136) | get documentURL()
  method frameId (line 144) | get frameId()
  method loaderId (line 152) | get loaderId()
  method displayName (line 160) | get displayName()
  method mimeType (line 176) | get mimeType()
  method messages (line 184) | get messages()
  method errors (line 206) | get errors()
  method errors (line 211) | set errors(x)
  method warnings (line 219) | get warnings()
  method warnings (line 224) | set warnings(x)
  method content (line 240) | get content()
  method contentEncoded (line 248) | get contentEncoded()
  function callbackWrapper (line 304) | function callbackWrapper(error, searchMatches)
  function contentLoaded (line 348) | function contentLoaded(error, content, contentEncoded)
  function replyWithContent (line 362) | function replyWithContent(content, contentEncoded)
  function resourceContentLoaded (line 379) | function resourceContentLoaded(error, content, contentEncoded)
  function requestContentLoaded (line 393) | function requestContentLoaded(content)

FILE: front-end/sdk/ResourceTreeModel.js
  function removeOriginForFrame (line 195) | function removeOriginForFrame(frame)
  function callback (line 411) | function callback(resource)
  method id (line 532) | get id()
  method name (line 540) | get name()
  method url (line 548) | get url()
  method securityOrigin (line 556) | get securityOrigin()
  method loaderId (line 564) | get loaderId()
  method parentFrame (line 572) | get parentFrame()
  method childFrames (line 580) | get childFrames()
  method mainResource (line 614) | get mainResource()
  function filter (line 691) | function filter(resource)

FILE: front-end/sdk/RuntimeModel.js
  function evalCallback (line 261) | function evalCallback(error, result, wasThrown, exceptionDetails)
  function evaluated (line 311) | function evaluated(result, wasThrown)
  function receivedPropertyNamesFromEval (line 359) | function receivedPropertyNamesFromEval(notRelevant, wasThrown, result)
  function receivedPropertyNames (line 370) | function receivedPropertyNames(propertyNames)

FILE: front-end/sdk/Script.js
  function didGetScriptSource (line 114) | function didGetScriptSource(error, source)
  function innerCallback (line 138) | function innerCallback(error, searchMatches)
  function didEditScriptSource (line 183) | function didEditScriptSource(error, errorData, callFrames, debugData, as...

FILE: front-end/sdk/SnippetStorage.js
  method namePrefix (line 47) | get namePrefix()
  method id (line 164) | get id()
  method name (line 172) | get name()
  method name (line 177) | set name(name)
  method content (line 189) | get content()
  method content (line 194) | set content(content)

FILE: front-end/sdk/SourceMap.js
  function SourceMapV3 (line 34) | function SourceMapV3()
  function cachedResourcesLoaded (line 100) | function cachedResourcesLoaded()
  function loadResource (line 106) | function loadResource()
  function contentLoaded (line 118) | function contentLoaded(error, statusCode, headers, content)

FILE: front-end/sdk/Target.js
  function callbackWrapper (line 453) | function callbackWrapper(newTarget)

FILE: front-end/sdk/WorkerTargetManager.js
  function onConnectionReady (line 47) | function onConnectionReady(workerId, connection)
  function targetCreated (line 59) | function targetCreated(workerId, target)
  function calculateTitle (line 79) | function calculateTitle(target)
  function evalCallback (line 101) | function evalCallback(error, result, wasThrown)

FILE: front-end/settings/SettingsScreen.js
  function changeListener (line 194) | function changeListener(e)
  function restoreAndReload (line 222) | function restoreAndReload()
  function processSetting (line 284) | function processSetting(parentFieldset, extension)
  function createSettingControl (line 337) | function createSettingControl(uiTitle, setting, descriptor)
  function listener (line 607) | function listener()
  function removeItemClicked (line 748) | function removeItemClicked(event)
  function rowClicked (line 972) | function rowClicked(event)

FILE: front-end/source_frame/CodeMirrorTextEditor.js
  function updateAnticipateJumpFlag (line 167) | function updateAnticipateJumpFlag(value)
  function innerSmartNewlineAndIndent (line 252) | function innerSmartNewlineAndIndent(codeMirror)
  function valid (line 427) | function valid(charNumber, length)
  function isWordStart (line 437) | function isWordStart(text, charNumber)
  function isWordEnd (line 451) | function isWordEnd(text, charNumber)
  function constrainPosition (line 466) | function constrainPosition(lineNumber, lineLength, columnNumber)
  function processLine (line 569) | function processLine(lineHandle)
  function innerHighlightRegex (line 652) | function innerHighlightRegex()
  function lineIterator (line 820) | function lineIterator(lineHandle)
  function modeConstructor (line 842) | function modeConstructor(config, parserConfig)
  method linesCount (line 1498) | get linesCount()
  function moveLeft (line 1867) | function moveLeft(shift, codeMirror)
  function moveRight (line 1884) | function moveRight(shift, codeMirror)
  function sortSuggestions (line 2212) | function sortSuggestions(a, b)
  function findWordInLine (line 2418) | function findWordInLine(wordRegex, lineNumber, lineText, from, to)
  function lineIterator (line 2432) | function lineIterator(regex, lineHandle)
  function modeConstructor (line 2470) | function modeConstructor(config, parserConfig)
  function tokenOverride (line 2482) | function tokenOverride(superToken, stream, state)

FILE: front-end/source_frame/CodeMirrorUtils.js
  function setWidth (line 114) | function setWidth(editingContext, width)
  function tokenize (line 144) | function tokenize(line, callback)

FILE: front-end/source_frame/ImageView.js
  function onContentAvailable (line 74) | function onContentAvailable(content)

FILE: front-end/source_frame/ResourceSourceFrame.js
  method resource (line 42) | get resource()

FILE: front-end/source_frame/SourceFrame.js
  method loaded (line 192) | get loaded()
  method textEditor (line 197) | get textEditor()
  method currentSearchResultIndex (line 527) | get currentSearchResultIndex()

FILE: front-end/sources/AdvancedSearchView.js
  method searchConfig (line 335) | get searchConfig()

FILE: front-end/sources/BreakpointsSidebarPane.js
  function didRequestContent (line 111) | function didRequestContent(content)
  function enabledBreakpointCount (line 208) | function enabledBreakpointCount(breakpoints)
  function finishEditing (line 340) | function finishEditing(accept, e, text)
  function removeBreakpoint (line 432) | function removeBreakpoint()
  function removeAllBreakpoints (line 441) | function removeAllBreakpoints()
  function finishEditing (line 475) | function finishEditing(accept, e, text)

FILE: front-end/sources/EditingLocationHistoryManager.js
  function filterOut (line 123) | function filterOut(entry)

FILE: front-end/sources/FilteredItemSelectionDialog.js
  function compareIntegers (line 191) | function compareIntegers(a, b)
  function scoreItems (line 200) | function scoreItems(fromIndex)
  function rangesForMatch (line 468) | function rangesForMatch(text, query)

FILE: front-end/sources/InplaceFormatterEditorAction.js
  function contentLoaded (line 92) | function contentLoaded(content)
  function innerCallback (line 104) | function innerCallback(formattedContent, formatterMapping)

FILE: front-end/sources/JavaScriptSourceFrame.js
  function unblackbox (line 155) | function unblackbox()
  function addSourceMapURL (line 282) | function addSourceMapURL(scriptFile)
  function addSourceMapURLDialogCallback (line 291) | function addSourceMapURLDialogCallback(scriptFile, url)
  function liveEditCallback (line 343) | function liveEditCallback(error, errorData, script)
  function logLiveEditError (line 368) | function logLiveEditError(error, errorData, contextScript)
  function showObjectPopover (line 574) | function showObjectPopover(result, wasThrown)
  function finishEditing (line 649) | function finishEditing(committed, element, newText)

FILE: front-end/sources/NavigatorView.js
  function addFolder (line 313) | function addFolder()
  function removeFolder (line 420) | function removeFolder()
  function callback (line 449) | function callback(committed)
  function contentLoaded (line 477) | function contentLoaded(content)
  function createFile (line 491) | function createFile(content)
  function fileCreated (line 500) | function fileCreated(path)
  function typeWeight (line 625) | function typeWeight(treeElement)
  method titleText (line 732) | get titleText()
  method titleText (line 737) | set titleText(titleText)
  method uiSourceCode (line 834) | get uiSourceCode()
  function callback (line 870) | function callback(content)
  function rename (line 897) | function rename()
  function commitHandler (line 1255) | function commitHandler(element, newTitle, oldTitle)
  function renameCallback (line 1269) | function renameCallback(success)
  function cancelHandler (line 1283) | function cancelHandler()
  function afterEditing (line 1292) | function afterEditing(committed)
  function titleForNode (line 1377) | function titleForNode(node)

FILE: front-end/sources/Placard.js
  method title (line 48) | get title()
  method title (line 53) | set title(x)
  method subtitle (line 62) | get subtitle()
  method subtitle (line 67) | set subtitle(x)
  method selected (line 76) | get selected()
  method selected (line 81) | set selected(x)

FILE: front-end/sources/RevisionHistoryView.js
  function populateRevisions (line 50) | function populateRevisions(uiSourceCode)
  function step1 (line 244) | function step1(baseContent)
  function step2 (line 254) | function step2(baseContent, newContent)
  function appendLineNumber (line 315) | function appendLineNumber(lineNumber)

FILE: front-end/sources/ScopeChainSidebarPane.js
  method propertyIdentifier (line 174) | get propertyIdentifier()

FILE: front-end/sources/ScriptFormatterEditorAction.js
  function isInlineScript (line 354) | function isInlineScript(script)
  function contentLoaded (line 394) | function contentLoaded(content)
  function innerCallback (line 406) | function innerCallback(formattedContent, formatterMapping)

FILE: front-end/sources/SourcesNavigator.js
  method view (line 69) | get view()
  function filterNavigators (line 89) | function filterNavigators(objects)

FILE: front-end/sources/SourcesPanel.js
  function didCreateBreakpointHitStatusMessage (line 218) | function didCreateBreakpointHitStatusMessage(element)
  function didGetUILocation (line 227) | function didGetUILocation(uiLocation)
  method visibleView (line 307) | get visibleView()
  function handler (line 737) | function handler()
  function mapFileSystemToNetwork (line 798) | function mapFileSystemToNetwork(networkUISourceCode)
  function mapNetworkToFileSystem (line 818) | function mapNetworkToFileSystem(uiSourceCode)
  function filterProject (line 855) | function filterProject(project)
  function didGetGlobalObject (line 931) | function didGetGlobalObject(global, wasThrown)
  function didSave (line 959) | function didSave(global, result, wasThrown)
  function failedToSave (line 971) | function failedToSave(result)
  function didGetFunctionDetails (line 993) | function didGetFunctionDetails(response)
  function executionStatusCallback (line 1355) | function executionStatusCallback(error, status)

FILE: front-end/sources/SourcesSearchScope.js
  function indexingCanceled (line 77) | function indexingCanceled()
  function filterOutServiceProjects (line 93) | function filterOutServiceProjects(project)
  function filterOutContentScriptsIfNeeded (line 102) | function filterOutContentScriptsIfNeeded(project)
  function searchInNextFile (line 224) | function searchInNextFile(uiSourceCode)
  function contentUpdated (line 236) | function contentUpdated(uiSourceCode)
  function scheduleSearchInNextFileOrFinish (line 244) | function scheduleSearchInNextFileOrFinish()
  function contentLoaded (line 265) | function contentLoaded(uiSourceCode, content)

FILE: front-end/sources/SourcesView.js
  function appendButtonsForExtensions (line 48) | function appendButtonsForExtensions(actions)
  function handleBeforeUnload (line 63) | function handleBeforeUnload(event)
  function registerShortcut (line 109) | function registerShortcut(shortcuts, handler)
  function finishedCallback (line 519) | function finishedCallback(view, searchMatches)
  function currentMatchChanged (line 531) | function currentMatchChanged(currentMatchIndex)
  function searchResultsChanged (line 539) | function searchResultsChanged()
  function fileNamePrefix (line 759) | function fileNamePrefix(name)

FILE: front-end/sources/TabbedEditorContainer.js
  method view (line 84) | get view()
  method visibleView (line 92) | get visibleView()
  function tabIdToURI (line 349) | function tabIdToURI(tabId)

FILE: front-end/sources/WatchExpressionsSidebarPane.js
  function appendResult (line 151) | function appendResult(expression, watchIndex, result, wasThrown)

FILE: front-end/temp_storage_shared_worker/TempStorageSharedWorker.js
  function clearTempStorage (line 57) | function clearTempStorage()
  function didClearTempStorage (line 104) | function didClearTempStorage()
  function notifyTempStorageCleared (line 115) | function notifyTempStorageCleared(port)
  function handleMessage (line 123) | function handleMessage(event)
  function handleError (line 129) | function handleError(event)
  function removePort (line 135) | function removePort(port)

FILE: front-end/timeline/CountersGraph.js
  function findRecordToReveal (line 189) | function findRecordToReveal(record)
  method checked (line 551) | get checked()
  method checked (line 556) | set checked(v)

FILE: front-end/timeline/LayerTreeOutline.js
  function updateLayer (line 95) | function updateLayer(layer)

FILE: front-end/timeline/Layers3DView.js
  function onTextureCreated (line 180) | function onTextureCreated(texture)
  function saveChromeTexture (line 341) | function saveChromeTexture(index, value)
  function checkIntersection (line 665) | function checkIntersection(rect)
  function onGotImage (line 874) | function onGotImage(imageURL)
  function onTextureCreated (line 884) | function onTextureCreated(texture)
  function onImageLoaded (line 905) | function onImageLoaded()
  function onImageError (line 910) | function onImageError()

FILE: front-end/timeline/MemoryCountersGraph.js
  function addStatistics (line 74) | function addStatistics(record)

FILE: front-end/timeline/PaintProfilerView.js
  function onProfileDone (line 95) | function onProfileDone(profiles)
  function highlightNode (line 443) | function highlightNode(node)

FILE: front-end/timeline/TimelineEventOverview.js
  function appendRecord (line 87) | function appendRecord(record)

FILE: front-end/timeline/TimelineFlameChart.js
  function recordToEvent (line 293) | function recordToEvent(record)

FILE: front-end/timeline/TimelineFrameModel.js
  function compareStartTime (line 67) | function compareStartTime(value, object)
  function compareEndTime (line 76) | function compareEndTime(value, object)
  function onGotObject (line 365) | function onGotObject(result)
  function onGotObject (line 474) | function onGotObject(result)

FILE: front-end/timeline/TimelineFrameOverview.js
  function barStartComparator (line 325) | function barStartComparator(time, barTime)
  function barEndComparator (line 334) | function barEndComparator(time, barTime)

FILE: front-end/timeline/TimelineJSProfile.js
  function equalFrames (line 49) | function equalFrames(frame1, frame2)
  function eventEndTime (line 54) | function eventEndTime(e)
  function isJSInvocationEvent (line 59) | function isJSInvocationEvent(e)
  function onStartEvent (line 73) | function onStartEvent(e)
  function onInstantEvent (line 78) | function onInstantEvent(e, top)
  function onEndEvent (line 85) | function onEndEvent(e)
  function extractStackTrace (line 91) | function extractStackTrace(e)

FILE: front-end/timeline/TimelineLayersView.js
  function findRecordWithEvent (line 89) | function findRecordWithEvent(record)
  function onLayersReady (line 118) | function onLayersReady(resolvedLayerTree)
  function onSnapshotLoaded (line 129) | function onSnapshotLoaded(paintEvent, rect, snapshot)
  function onLayersAndTilesReady (line 144) | function onLayersAndTilesReady()

FILE: front-end/timeline/TimelineMemoryOverview.js
  function calculateMinMaxSizes (line 69) | function calculateMinMaxSizes(record)
  function buildHistogram (line 91) | function buildHistogram(record)

FILE: front-end/timeline/TimelineModel.js
  function processRecords (line 164) | function processRecords(records, depth)
  function disabledByDefault (line 404) | function disabledByDefault(category)
  function processRecord (line 463) | function processRecord(record, depth)
  function extractProfile (line 574) | function extractProfile(value)
  function processVirtualThreadEvents (line 740) | function processVirtualThreadEvents(virtualThread)
  function callback (line 1112) | function callback(accepted)
  function updatePaintId (line 1712) | function updatePaintId(invalidationToUpdate)
  function associateWithLayoutEvent (line 1755) | function associateWithLayoutEvent(invalidation)
  function associateWithPaintEvent (line 1790) | function associateWithPaintEvent(invalidation)
  function forAllInvalidationsOfType (line 1826) | function forAllInvalidationsOfType(type)

FILE: front-end/timeline/TimelinePaintProfilerView.js
  function onSnapshotLoaded (line 65) | function onSnapshotLoaded(snapshot)
  function onCommandLogDone (line 77) | function onCommandLogDone(snapshot, log)

FILE: front-end/timeline/TimelinePanel.js
  function finishLoading (line 456) | function finishLoading()
  function handler (line 625) | function handler(statusBarItem)
  function processRecord (line 911) | function processRecord(record)
  function onGotObject (line 1011) | function onGotObject(result)
  function compareEndTime (line 1036) | function compareEndTime(value, task)
  function aggregateTimeForRecordWithinWindow (line 1044) | function aggregateTimeForRecordWithinWindow(record)

FILE: front-end/timeline/TimelinePresentationModel.js
  function revealRecordsInStack (line 228) | function revealRecordsInStack() {

FILE: front-end/timeline/TimelineUIUtils.js
  function linkifyLocation (line 375) | function linkifyLocation(scriptId, url, lineNumber, columnNumber)
  function linkifyTopCallFrame (line 387) | function linkifyTopCallFrame()
  function saveImage (line 431) | function saveImage(element)
  function setRelatedNode (line 439) | function setRelatedNode(nodeIds)
  function updateInvalidationNodeIds (line 449) | function updateInvalidationNodeIds(frontendNodeIds, backendNodeIds)
  function callbackWrapper (line 471) | function callbackWrapper()
  function groupInvalidationsByCause (line 736) | function groupInvalidationsByCause(invalidations)
  function appendInvalidationGroup (line 766) | function appendInvalidationGroup(parentElement, invalidations)
  function createInvalidationNode (line 796) | function createInvalidationNode(invalidation, showUnknownNodes)
  function appendTruncatedNodeList (line 816) | function appendTruncatedNodeList(parentElement, invalidations)
  function appendNodeList (line 843) | function appendNodeList(parentElement, invalidations)
  function toggleDetails (line 861) | function toggleDetails(header, invalidations)
  function createInvalidationGroupDetails (line 880) | function createInvalidationGroupDetails(parentElement, invalidations)
  function eventComparator (line 948) | function eventComparator(startTime, e)
  function onSnapshotLoaded (line 998) | function onSnapshotLoaded(rect, snapshot)
  function onGotImage (line 1011) | function onGotImage(imageURL)
  function showPaintProfiler (line 1027) | function showPaintProfiler()
  function formatter (line 1154) | function formatter(value)
  method hidden (line 1321) | get hidden()
  method hidden (line 1326) | set hidden(hidden)

FILE: front-end/timeline/TimelineView.js
  function compareEndTime (line 645) | function compareEndTime(value, task)

FILE: front-end/timeline/TracingModel.js
  function checkSessionId (line 249) | function checkSessionId(event)
  function onRead (line 511) | function onRead(result)
  function comparator (line 591) | function comparator(a, b)

FILE: front-end/toolbox/MediaQueryInspector.js
  function setWidth (line 104) | function setWidth(width)
  function callback (line 184) | function callback(cssMedias)
  function compareModels (line 240) | function compareModels(model1, model2)

FILE: front-end/toolbox/OverridesUI.js
  function deviceSelected (line 39) | function deviceSelected()
  function emulatedSettingChanged (line 52) | function emulatedSettingChanged()
  function updateButtons (line 69) | function updateButtons()
  function customPresetsChanged (line 77) | function customPresetsChanged()
  function saveClicked (line 124) | function saveClicked()
  function saveDevicePreset (line 132) | function saveDevicePreset(title)
  function removeClicked (line 143) | function removeClicked()
  function presetSelected (line 183) | function presetSelected()
  function settingChanged (line 201) | function settingChanged()
  function userAgentSelected (line 247) | function userAgentSelected()
  function settingChanged (line 263) | function settingChanged()
  function textKeyDown (line 286) | function textKeyDown(event)
  function textDoubleClicked (line 292) | function textDoubleClicked()
  function textChanged (line 298) | function textChanged()

FILE: front-end/toolbox/ResponsiveDesignView.js
  function drawGrid (line 393) | function drawGrid(scrollX, scrollY, color, step)
  function updatePageScaleFactor (line 735) | function updatePageScaleFactor(finishCallback)
  function updatePageScaleFactor (line 756) | function updatePageScaleFactor(finishCallback)

FILE: front-end/toolbox_bootstrap/Toolbox.js
  function toolboxLoaded (line 11) | function toolboxLoaded()

FILE: front-end/treeoutline.js
  function TreeOutline (line 34) | function TreeOutline(listNode, nonFocusable)
  function TreeElement (line 443) | function TreeElement(title, representedObject, hasChildren)
  method selectable (line 464) | get selectable() {
  method selectable (line 470) | set selectable(x) {
  method listItemElement (line 474) | get listItemElement() {
  method childrenListElement (line 478) | get childrenListElement() {
  method title (line 482) | get title() {
  method title (line 486) | set title(x) {
  method tooltip (line 491) | get tooltip() {
  method tooltip (line 495) | set tooltip(x) {
  method hasChildren (line 501) | get hasChildren() {
  method hasChildren (line 505) | set hasChildren(x) {
  method hidden (line 522) | get hidden() {
  method hidden (line 526) | set hidden(x) {
  method shouldRefreshChildren (line 545) | get shouldRefreshChildren() {
  method shouldRefreshChildren (line 549) | set shouldRefreshChildren(x) {

FILE: front-end/ui/ActionRegistry.js
  function registerExtension (line 24) | function registerExtension(extension)
  function handleAction (line 65) | function handleAction(actionDelegate)

FILE: front-end/ui/ContextMenu.js
  function setUseSoftMenu (line 221) | function setUseSoftMenu(event)
  function handler (line 237) | function handler(event)
  function populateAndShow (line 263) | function populateAndShow(appendCallResults)

FILE: front-end/ui/DOMSyntaxHighlighter.js
  function processTokens (line 74) | function processTokens(tokenizerFactory)
  function processToken (line 98) | function processToken(token, tokenType, column, newColumn)

FILE: front-end/ui/DataGrid.js
  function moveToNextIfNeeded (line 341) | function moveToNextIfNeeded(wasChange) {
  method headerTableBody (line 449) | get headerTableBody()
  method dataTableBody (line 463) | get dataTableBody()
  method scrollContainer (line 692) | get scrollContainer()
  method data (line 1172) | get data()
  method data (line 1177) | set data(x)
  method revealed (line 1183) | get revealed()
  method hasChildren (line 1202) | set hasChildren(x)
  method hasChildren (line 1216) | get hasChildren()
  method revealed (line 1221) | set revealed(x)
  method depth (line 1238) | get depth()
  method leftPadding (line 1249) | get leftPadding()
  method shouldRefreshChildren (line 1258) | get shouldRefreshChildren()
  method shouldRefreshChildren (line 1263) | set shouldRefreshChildren(x)
  method selected (line 1270) | get selected()
  method selected (line 1275) | set selected(x)
  method expanded (line 1283) | get expanded()
  method expanded (line 1291) | set expanded(x)

FILE: front-end/ui/EmptyView.js
  method text (line 48) | set text(text)

FILE: front-end/ui/FlameChart.js
  function comparator (line 814) | function comparator(time, entryIndex)
  function checkEntryHit (line 825) | function checkEntryHit(entryIndex)
  function comparator (line 869) | function comparator(time, markerTimestamp)
  function comparator (line 929) | function comparator(time, entryIndex)
  function compare (line 1049) | function compare(time, markerTimestamp)

FILE: front-end/ui/InplaceEditor.js
  function startEditing (line 42) | function startEditing(inplaceEditor)
  function consumeCopy (line 124) | function consumeCopy(e)
  function blurEventListener (line 136) | function blurEventListener(e) {
  function cleanUpAfterEditing (line 143) | function cleanUpAfterEditing()
  function editingCancelled (line 157) | function editingCancelled()
  function editingCommitted (line 165) | function editingCommitted()
  function defaultFinishHandler (line 172) | function defaultFinishHandler(event)
  function handleEditingResult (line 185) | function handleEditingResult(result, event)
  function pasteEventListener (line 200) | function pasteEventListener(event)
  function keyDownEventListener (line 206) | function keyDownEventListener(event)

FILE: front-end/ui/KeyboardShortcut.js
  method CtrlOrMeta (line 47) | get CtrlOrMeta()
  method ShiftOrOption (line 52) | get ShiftOrOption()
  method CtrlOrMeta (line 109) | get CtrlOrMeta()

FILE: front-end/ui/Panel.js
  method name (line 48) | get name()
  function handleSearchShortcuts (line 97) | function handleSearchShortcuts(shortcuts, handler)
  function createPanel (line 265) | function createPanel(panelFactory)

FILE: front-end/ui/Popover.js
  method disposed (line 129) | get disposed()
  function doHide (line 330) | function doHide()

FILE: front-end/ui/SearchableView.js
  function register (line 281) | function register(shortcuts, handler)

FILE: front-end/ui/Section.js
  method title (line 62) | get title()
  method title (line 67) | set title(x)
  method subtitle (line 80) | get subtitle()
  method subtitle (line 85) | set subtitle(x)
  method subtitleAsTextForTest (line 93) | get subtitleAsTextForTest()
  method expanded (line 105) | get expanded()
  method expanded (line 110) | set expanded(x)
  method populated (line 118) | get populated()
  method populated (line 123) | set populated(x)
  method firstSibling (line 137) | get firstSibling()
  method lastSibling (line 153) | get lastSibling()
  method nextSibling (line 169) | get nextSibling()
  method previousSibling (line 179) | get previousSibling()

FILE: front-end/ui/SettingsUI.js
  function settingChanged (line 68) | function settingChanged()
  function inputChanged (line 76) | function inputChanged()
  function onInput (line 121) | function onInput()
  function onKeyDown (line 129) | function onKeyDown(event)
  function incrementForArrows (line 136) | function incrementForArrows(event)
  function validate (line 165) | function validate()
  function apply (line 177) | function apply()
  function onSettingChange (line 188) | function onSettingChange()
  function settingChanged (line 228) | function settingChanged()
  function keyDownListener (line 271) | function keyDownListener(event)

FILE: front-end/ui/ShortcutRegistry.js
  function processActionIdsSequentially (line 99) | function processActionIdsSequentially()
  function isPossiblyInputKey (line 122) | function isPossiblyInputKey()
  function hasModifier (line 141) | function hasModifier(mod)
  function registerExtension (line 181) | function registerExtension(extension)
  function platformMatches (line 197) | function platformMatches(platformsString)

FILE: front-end/ui/SidebarTreeElement.js
  method smallChildren (line 44) | get smallChildren()
  method smallChildren (line 49) | set smallChildren(x)
  method small (line 104) | get small()
  method small (line 109) | set small(x)
  method mainTitle (line 116) | get mainTitle()
  method mainTitle (line 121) | set mainTitle(x)
  method subtitle (line 127) | get subtitle()
  method subtitle (line 132) | set subtitle(x)
  method wait (line 138) | set wait(x)

FILE: front-end/ui/SortableDataGrid.js
  function sortDataGrid (line 111) | function sortDataGrid()

FILE: front-end/ui/SplitView.js
  function callback (line 302) | function callback()
  function animationFrame (line 554) | function animationFrame()
  function buttonClicked (line 897) | function buttonClicked(event)

FILE: front-end/ui/StatusBar.js
  function mouseOver (line 516) | function mouseOver(e)
  function mouseOut (line 524) | function mouseOut(e)
  function mouseUp (line 532) | function mouseUp(e)

FILE: front-end/ui/TabbedPane.js
  method visibleView (line 74) | get visibleView()
  function tabToView (line 88) | function tabToView(tab)
  method selectedTabId (line 98) | get selectedTabId()
  method shrinkableTabs (line 106) | set shrinkableTabs(shrinkableTabs)
  method verticalTabLayout (line 114) | set verticalTabLayout(verticalTabLayout)
  method closeableTabs (line 123) | set closeableTabs(closeableTabs)
  function comparator (line 204) | function comparator(tab1, tab2)
  function tabToTabId (line 347) | function tabToTabId(tab) {
  function compareFunction (line 579) | function compareFunction(tab1, tab2)
  method id (line 791) | get id()
  method title (line 799) | get title()
  method title (line 804) | set title(title)
  method view (line 868) | get view()
  method view (line 873) | set view(view)
  method tooltip (line 881) | get tooltip()
  method tooltip (line 886) | set tooltip(tooltip)
  method tabElement (line 896) | get tabElement()
  function close (line 1028) | function close()
  function closeOthers (line 1036) | function closeOthers()
  function closeAll (line 1044) | function closeAll()
  function viewLoaded (line 1210) | function viewLoaded(view)
  function cacheView (line 1248) | function cacheView(object)

FILE: front-end/ui/TextEditor.js
  method linesCount (line 256) | get linesCount() { }

FILE: front-end/ui/TextPrompt.js
  method proxyElement (line 65) | get proxyElement()
  method text (line 158) | get text()
  method text (line 166) | set text(x)
  function moveBackIfOutside (line 239) | function moveBackIfOutside()
  method historyData (line 783) | get historyData()

FILE: front-end/ui/TimelineGrid.js
  method dividersElement (line 159) | get dividersElement()
  method dividersLabelBarElement (line 164) | get dividersLabelBarElement()

FILE: front-end/ui/UIUtils.js
  function restoreCursor (line 91) | function restoreCursor(oldCursor)
  function createRange (line 370) | function createRange()
  function animationEndCallback (line 829) | function animationEndCallback()
  function animationStep (line 1079) | function animationStep()
  function cancelAnimation (line 1096) | function cancelAnimation()
  function mouseDown (line 1152) | function mouseDown(e)
  function mouseUp (line 1164) | function mouseUp(e)
  function longClicked (line 1175) | function longClicked(e)
  function clickHandler (line 1221) | function clickHandler(event)

FILE: front-end/ui/View.js
  function updateForChild (line 574) | function updateForChild()
  function updateForChild (line 611) | function updateForChild()

FILE: front-end/ui/treeoutline.js
  function TreeContainerNode (line 32) | function TreeContainerNode()
  function TreeOutline (line 264) | function TreeOutline(listNode, nonFocusable)
  function TreeElement (line 438) | function TreeElement(title, representedObject, hasChildren)
  method selectable (line 461) | get selectable() {
  method selectable (line 467) | set selectable(x) {
  method listItemElement (line 471) | get listItemElement() {
  method childrenListElement (line 475) | get childrenListElement() {
  method title (line 479) | get title() {
  method title (line 483) | set title(x) {
  method tooltip (line 488) | get tooltip() {
  method tooltip (line 492) | set tooltip(x) {
  method hasChildren (line 498) | get hasChildren() {
  method hasChildren (line 512) | set hasChildren(x) {
  method hidden (line 529) | get hidden() {
  method hidden (line 533) | set hidden(x) {
  method shouldRefreshChildren (line 552) | get shouldRefreshChildren() {
  method shouldRefreshChildren (line 556) | set shouldRefreshChildren(x) {
  function treeElementSelectStart (line 607) | function treeElementSelectStart(event)

FILE: front-end/workspace/FileSystemWorkspaceBinding.js
  function innerCallback (line 323) | function innerCallback(success, newName)
  function contentCallback (line 358) | function contentCallback(content)
  function searchNextQuery (line 385) | function searchNextQuery()
  function innerCallback (line 400) | function innerCallback(files)
  function innerCallback (line 423) | function innerCallback(files)
  function innerCallback (line 526) | function innerCallback(filePath)
  function contentSet (line 543) | function contentSet()

FILE: front-end/workspace/IsolatedFileSystem.js
  function fileSystemLoaded (line 124) | function fileSystemLoaded(fs)
  function innerCallback (line 136) | function innerCallback(entries)
  function fileSystemLoaded (line 174) | function fileSystemLoaded(fs)
  function dirEntryLoaded (line 185) | function dirEntryLoaded(dirEntry)
  function errorHandler (line 217) | function errorHandler(error)
  function fileSystemLoaded (line 239) | function fileSystemLoaded(fs)
  function fileEntryLoaded (line 250) | function fileEntryLoaded(fileEntry)
  function fileEntryRemoved (line 255) | function fileEntryRemoved()
  function errorHandler (line 263) | function errorHandler(error)
  function fileSystemLoaded (line 281) | function fileSystemLoaded(fs)
  function fileEntryLoaded (line 291) | function fileEntryLoaded(entry)
  function successHandler (line 299) | function successHandler(metadata)
  function errorHandler (line 307) | function errorHandler(error)
  function fileSystemLoaded (line 325) | function fileSystemLoaded(fs)
  function fileEntryLoaded (line 336) | function fileEntryLoaded(entry)
  function fileLoaded (line 344) | function fileLoaded(file)
  function readerLoadEnd (line 354) | function readerLoadEnd()
  function errorHandler (line 369) | function errorHandler(error)
  function fileSystemLoaded (line 396) | function fileSystemLoaded(fs)
  function fileEntryLoaded (line 407) | function fileEntryLoaded(entry)
  function fileWriterCreated (line 416) | function fileWriterCreated(fileWriter)
  function writerEnd (line 430) | function writerEnd()
  function errorHandler (line 438) | function errorHandler(error)
  function fileSystemLoaded (line 467) | function fileSystemLoaded(fs)
  function fileEntryLoaded (line 478) | function fileEntryLoaded(entry)
  function dirEntryLoaded (line 493) | function dirEntryLoaded(entry)
  function newFileEntryLoaded (line 502) | function newFileEntryLoaded(entry)
  function newFileEntryLoadErrorHandler (line 510) | function newFileEntryLoadErrorHandler(error)
  function fileRenamed (line 522) | function fileRenamed(entry)
  function errorHandler (line 530) | function errorHandler(error)
  function innerCallback (line 547) | function innerCallback(results)
  function toArray (line 557) | function toArray(list)
  function errorHandler (line 564) | function errorHandler(error)
  function innerCallback (line 585) | function innerCallback(dirEntry)
  function errorHandler (line 590) | function errorHandler(error)

FILE: front-end/workspace/UISourceCode.js
  method url (line 73) | get url()
  function innerCallback (line 165) | function innerCallback(success, newName, newURL, newOriginURL, newConten...
  function contentLoaded (line 284) | function contentLoaded(updatedContent)
  function callback (line 364) | function callback(accepted)
  function callback (line 416) | function callback(content)
  function revert (line 436) | function revert(content)
  method uiSourceCode (line 642) | get uiSourceCode()
  method timestamp (line 650) | get timestamp()
  method content (line 658) | get content()
  function revert (line 669) | function revert(content)

FILE: front-end/workspace/Workspace.js
  function onSetContent (line 423) | function onSetContent(content)
  function innerCallback (line 460) | function innerCallback(success, newName, newURL, newOriginURL, newConten...
  function innerCallback (line 507) | function innerCallback(filePath)
  function filterUnsaved (line 605) | function filterUnsaved(sourceCode)
  function filterByType (line 710) | function filterByType(project)
  function listener (line 844) | function listener(event)

FILE: index.js
  function buildInspectorUrl (line 15) | function buildInspectorUrl(inspectorHost, inspectorPort, debugPort, isHt...
  function buildWebSocketUrl (line 45) | function buildWebSocketUrl(inspectorHost, inspectorPort, debugPort, isSe...

FILE: lib/BreakEventHandler.js
  function BreakEventHandler (line 13) | function BreakEventHandler(config, session) {

FILE: lib/CallFramesProvider.js
  function CallFramesProvider (line 10) | function CallFramesProvider(config, session) {

FILE: lib/ConsoleAgent.js
  function ConsoleAgent (line 13) | function ConsoleAgent(config, session) {

FILE: lib/ConsoleClient.js
  function ConsoleClient (line 4) | function ConsoleClient(config, session) {

FILE: lib/DebuggerAgent.js
  function DebuggerAgent (line 19) | function DebuggerAgent(config, session) {
  function removeOneBreakpoint (line 81) | function removeOneBreakpoint(bp, next) {
  function sendResponse (line 250) | function sendResponse(callframes) {
  function sendResponseWithCallStack (line 260) | function sendResponseWithCallStack() {
  function setBreakpointState (line 382) | function setBreakpointState(bp, next) {

FILE: lib/DebuggerClient.js
  function createFailingConnection (line 6) | function createFailingConnection(reason) {
  function DebuggerClient (line 24) | function DebuggerClient(debuggerHost, debuggerPort) {
  function ErrorNotConnected (line 185) | function ErrorNotConnected(message) {

FILE: lib/FrontendClient.js
  function FrontendClient (line 13) | function FrontendClient(connection) {

FILE: lib/FrontendCommandHandler.js
  function FrontendCommandHandler (line 21) | function FrontendCommandHandler(config, session) {

FILE: lib/HeapProfilerAgent.js
  function HeapProfilerAgent (line 12) | function HeapProfilerAgent(config, session) {

FILE: lib/HeapProfilerClient.js
  function HeapProfilerClient (line 4) | function HeapProfilerClient(config, session) {

FILE: lib/Injections/ConsoleAgent.js
  function ConsoleMessage (line 9) | function ConsoleMessage(fn, wrapper, args) {
  function getLevel (line 24) | function getLevel(fn) {
  function getCallerFuncLocation (line 28) | function getCallerFuncLocation(wrapper) {
  function clearMessages (line 53) | function clearMessages() {
  function wrapConsole (line 59) | function wrapConsole() {
  function unwrapConsole (line 83) | function unwrapConsole() {
  function wrapFunction (line 97) | function wrapFunction(fn, func) {
  function wrapAssertFunction (line 106) | function wrapAssertFunction(fn, func) {
  function sendMessageToInspector (line 118) | function sendMessageToInspector(fn, wrapper, args) {

FILE: lib/Injections/HeapProfilerAgent.js
  function reportProgress (line 16) | function reportProgress(done, total){
  function sendSnapshotChunk (line 26) | function sendSnapshotChunk(data) {
  function heapStatsIterator (line 37) | function heapStatsIterator(samples) {
  function heapStatsCallback (line 43) | function heapStatsCallback() {
  function nextTrackingChunk (line 58) | function nextTrackingChunk() {
  function heapStatsLoop (line 62) | function heapStatsLoop() {
  function sendSnapshotFinished (line 91) | function sendSnapshotFinished() {
  function sendSnapshotFinished (line 112) | function sendSnapshotFinished() {

FILE: lib/Injections/NetworkAgent.js
  function timestamp (line 13) | function timestamp() {
  function Timing (line 17) | function Timing() {
  function getStackTrace (line 55) | function getStackTrace() {
  function renderHeaders (line 95) | function renderHeaders(request) {
  function getCorrectHeaders (line 106) | function getCorrectHeaders(response) {
  function getStatusText (line 118) | function getStatusText(response) {
  function restoreHeadersText (line 122) | function restoreHeadersText(response) {
  function getMimeType (line 142) | function getMimeType(response) {
  function constructRequestInfo (line 149) | function constructRequestInfo(request) {
  function constructResponseInfo (line 173) | function constructResponseInfo(response) {
  function constructFailureInfo (line 200) | function constructFailureInfo(request, err, canceled) {
  function handleHttpRequest (line 216) | function handleHttpRequest(options) {
  function handleRequestData (line 243) | function handleRequestData(requestInfo) {
  function sendRequestWillBeSent (line 252) | function sendRequestWillBeSent(requestInfo) {
  function handleSocket (line 262) | function handleSocket(requestInfo, socket) {
  function handleSocketConnect (line 275) | function handleSocketConnect() {
  function handleAbort (line 280) | function handleAbort(requestInfo) {
  function handleFailure (line 289) | function handleFailure(requestInfo, err) {
  function handleHttpResponse (line 299) | function handleHttpResponse(wasHandled, response) {
  function wrapHttpRequests (line 367) | function wrapHttpRequests() {
  function unwrapHttpRequests (line 418) | function unwrapHttpRequests() {

FILE: lib/InjectorClient.js
  function InjectorClient (line 12) | function InjectorClient(config, session) {
  function handleBreak (line 91) | function handleBreak(obj) {

FILE: lib/InjectorServer.js
  function injectorServer (line 5) | function injectorServer(options) {

FILE: lib/NetworkAgent.js
  function NetworkAgent (line 9) | function NetworkAgent(config, session) {
  function loadFileResource (line 165) | function loadFileResource(params, done) {
  function ResponseData (line 206) | function ResponseData(id) {

FILE: lib/PageAgent.js
  function PageAgent (line 18) | function PageAgent(config, session) {

FILE: lib/ProfilerAgent.js
  function ProfilerAgent (line 10) | function ProfilerAgent(config, session) {

FILE: lib/RuntimeAgent.js
  function RuntimeAgent (line 14) | function RuntimeAgent(config, session) {
  function callFunctionWithParams (line 59) | function callFunctionWithParams(err, evaluateParams) {

FILE: lib/ScriptFileStorage.js
  function escapeRegex (line 24) | function escapeRegex(str) {
  function ScriptFileStorage (line 33) | function ScriptFileStorage(config, session) {
  function iterator (line 246) | function iterator(error) {
  function iterate (line 252) | function iterate(node) {
  function included (line 278) | function included(rpath) {
  function excluded (line 282) | function excluded(rpath) {
  function relative (line 286) | function relative(apath) {

FILE: lib/ScriptManager.js
  function ScriptManager (line 19) | function ScriptManager(config, session) {
  function fixAbsoluteSourcePaths (line 252) | function fixAbsoluteSourcePaths() {
  function fixWrongFileName (line 262) | function fixWrongFileName() {

FILE: lib/config.js
  function Config (line 178) | function Config(argv, NODE_DEBUG_MODE) {
  function checkDeprecatedNoPreloadStyle (line 193) | function checkDeprecatedNoPreloadStyle(config) {
  function checkDeprecatedWebHostStyle (line 202) | function checkDeprecatedWebHostStyle(config) {
  function checkDeprecatedHiddenStyle (line 210) | function checkDeprecatedHiddenStyle(parsedArgv) {
  function serializeOption (line 246) | function serializeOption(key, value, parent) {
  function getCmd (line 366) | function getCmd() {
  function color (line 370) | function color(_color, string) {
  function showOptionHelp (line 376) | function showOptionHelp(option) {
  function formatUsage (line 403) | function formatUsage(usage) {
  function normalizeOptions (line 416) | function normalizeOptions(options) {
  function checkHiddenOption (line 430) | function checkHiddenOption(options) {
  function checkSslOptions (line 437) | function checkSslOptions(options) {
  function keyToCamelKey (line 451) | function keyToCamelKey(key) {
  function keyToDashedKey (line 457) | function keyToDashedKey(key) {
  function collectDefaultsFromDefinitions (line 463) | function collectDefaultsFromDefinitions(NODE_DEBUG_MODE) {
  function collectAliasesFromDefinitions (line 482) | function collectAliasesFromDefinitions() {
  function parseArgs (line 493) | function parseArgs(argv) {

FILE: lib/debug-server.js
  function debugAction (line 20) | function debugAction(req, res) {
  function inspectorJson (line 24) | function inspectorJson(req, res) {
  function emptyJson (line 28) | function emptyJson(req, res) {
  function jsonAction (line 32) | function jsonAction(req, res) {
  function jsonVersionAction (line 45) | function jsonVersionAction(req, res) {
  function protocolJson (line 55) | function protocolJson(req, res) {
  function handleWebSocketConnection (line 59) | function handleWebSocketConnection(socket) {
  function handleServerListening (line 65) | function handleServerListening() {
  function handleServerError (line 71) | function handleServerError(err) {
  function DebugServer (line 77) | function DebugServer() {}

FILE: lib/debugger.js
  function Debugger (line 11) | function Debugger(host, port){

FILE: lib/plugins.js
  function getPluginPath (line 7) | function getPluginPath(config) {
  function PluginError (line 11) | function PluginError(message) {
  function findEq (line 17) | function findEq(collection, option, value) {
  function mergeByName (line 23) | function mergeByName(acceptor, donor, name, onConflict) {
  function _setMockPlugins (line 38) | function _setMockPlugins(pluginPath, plugins) {
  function getPlugins (line 42) | function getPlugins(config) {
  function validateManifest (line 86) | function validateManifest(manifest) {
  function InspectorJson (line 92) | function InspectorJson(config) {
  function ProtocolJson (line 149) | function ProtocolJson(config) {
  function init (line 239) | function init(config) {

FILE: lib/session.js
  function Session (line 12) | function Session(config, debuggerHost, debuggerPort, wsConnection) {

FILE: test/CallFramesProvider.js
  function objectValueWithId (line 81) | function objectValueWithId(id, className) {
  function scopeWithIndex (line 90) | function scopeWithIndex(index) {
  function assertFrame (line 110) | function assertFrame(expected, actual, frameName) {
  function assertScopeChain (line 120) | function assertScopeChain(expected, actual, objectName) {
  function assertJSONEqual (line 128) | function assertJSONEqual(expected, actual, message) {

FILE: test/ConsoleAgent.js
  function logInChildProcess (line 64) | function logInChildProcess(done) {
  function expectIsConsoleId (line 82) | function expectIsConsoleId(id, value) {
  function initializeConsole (line 145) | function initializeConsole(done) {

FILE: test/DebuggerAgent.js
  function setupDebugScenario (line 64) | function setupDebugScenario(done) {
  function to (line 72) | function to(type, test) {
  function toValueType (line 76) | function toValueType(type, newValue, expectedResult) {
  function toRefType (line 87) | function toRefType(type, newValueExpression, expectedResultCb) {
  function verifyVariableSetter (line 100) | function verifyVariableSetter(agent, newValue, expectedResult, done) {
  function verifyVariableValue (line 127) | function verifyVariableValue(agent,
  function setupDebugScenario (line 216) | function setupDebugScenario(done) {
  function setupDebugScenario (line 234) | function setupDebugScenario(done) {
  function setupDebugScenario (line 256) | function setupDebugScenario(done) {

FILE: test/DebuggerClient.js
  function setupConnectedDebuggerClient (line 83) | function setupConnectedDebuggerClient(breakOnStart, done) {
  function getMainScriptId (line 101) | function getMainScriptId(done) {

FILE: test/FrontendCommandHandler.test.js
  function setupProcess (line 16) | function setupProcess(done) {
  function createFrontendCommandHandler (line 74) | function createFrontendCommandHandler(wsclient, session) {

FILE: test/HeapProfilerAgent.js
  function updateState (line 22) | function updateState() {
  function onReportHeapSnapshotProgress (line 30) | function onReportHeapSnapshotProgress(message) {
  function onAddHeapSnapshotChunk (line 35) | function onAddHeapSnapshotChunk(message) {
  function updateState (line 60) | function updateState(name) {
  function expectIsHeapObjectId (line 95) | function expectIsHeapObjectId(id, value) {
  function initializeProfiler (line 109) | function initializeProfiler(done) {

FILE: test/InjectorClient.js
  function setupInjector (line 10) | function setupInjector(done) {
  function setupInjector (line 32) | function setupInjector(done) {
  function setupInjector (line 75) | function setupInjector(done) {
  function setupInjector (line 92) | function setupInjector(done) {
  function setupInjector (line 145) | function setupInjector(done) {

FILE: test/NetworkAgent.js
  function containKeys (line 255) | function containKeys(obj, keys) {
  function initializeNetwork (line 261) | function initializeNetwork(done) {

FILE: test/PageAgent.js
  function setupDebugScenario (line 18) | function setupDebugScenario(done) {

FILE: test/ProfilerAgent.js
  function initializeProfiler (line 63) | function initializeProfiler(done) {

FILE: test/RuntimeAgent.js
  function setupDebugScenario (line 274) | function setupDebugScenario(done) {
  function to (line 283) | function to(type, test) {
  function toValueType (line 287) | function toValueType(type, value) {
  function toRefType (line 299) | function toRefType(type, expression, valueCb) {
  function verifyPropertySetter (line 313) | function verifyPropertySetter(agent,
  function setupRuntimeAgent (line 342) | function setupRuntimeAgent(session) {
  function convertPropertyArrayToLookup (line 348) | function convertPropertyArrayToLookup(array) {
  function verifyPropertyValue (line 357) | function verifyPropertyValue(runtimeAgent,
  function getCompletions (line 382) | function getCompletions(primitiveType) {
  function setPropertyValue (line 407) | function setPropertyValue(name, value) {

FILE: test/ScriptFileStorage.js
  function relativeToTemp (line 254) | function relativeToTemp(p) {
  function expectRootToEqual (line 258) | function expectRootToEqual(done, expected, err, root) {
  function edited (line 264) | function edited(source) {
  function runLiveEdit (line 268) | function runLiveEdit(transformSource, callback) {
  function createTempFileAsCopyOf (line 282) | function createTempFileAsCopyOf(fixture, transform) {
  function givenTempFiles (line 290) | function givenTempFiles() {
  function createScriptFileStorage (line 307) | function createScriptFileStorage(config) {
  function globPathToNative (line 315) | function globPathToNative(p) {
  function getScriptSourceByName (line 319) | function getScriptSourceByName(debuggerClient, scriptName, callback) {
  function isDir (line 334) | function isDir(path) {
  function deleteTemps (line 338) | function deleteTemps() {

FILE: test/config.js
  function givenConfigFromArgs (line 102) | function givenConfigFromArgs(argv) {

FILE: test/convert.js
  function dummyNormalize (line 33) | function dummyNormalize(name) { return name; }

FILE: test/fixtures/BreakInFunction.js
  function MyObj (line 2) | function MyObj() {
  function globalFunc (line 13) | function globalFunc(msg, meta) {

FILE: test/fixtures/Commandlet.js
  function startServer (line 121) | function startServer(options, callback) {

FILE: test/fixtures/InspectObject.js
  function InspectedClass (line 2) | function InspectedClass() {
  function localFunc (line 8) | function localFunc() { return 'local'; }

FILE: test/helpers/SessionStub.js
  function SessionStub (line 6) | function SessionStub() {
  function DebuggerClientStub (line 14) | function DebuggerClientStub() {}
  function FrontendClientStub (line 21) | function FrontendClientStub() {}

FILE: test/helpers/launcher.js
  function bind (line 11) | function bind(func) {
  function expandArrayFor (line 16) | function expandArrayFor(func, context) {
  function expandInstanceFor (line 22) | function expandInstanceFor(func) {
  function stopAllDebuggers (line 29) | function stopAllDebuggers(err) {
  function instantiate (line 36) | function instantiate(scriptPath, breakOnStart) {
  function appInstance (line 40) | function appInstance(scriptPath, breakOnStart) {
  function setupScript (line 81) | function setupScript(scriptPath, breakOnStart) {
  function computeDebugOptions (line 89) | function computeDebugOptions(breakOnStart) {
  function setupDebugger (line 93) | function setupDebugger(instance) {
  function injectHelpers (line 108) | function injectHelpers(instance) {
  function stopInstance (line 126) | function stopInstance(instance) {

FILE: test/helpers/wsmock.js
  function WebSocketMock (line 6) | function WebSocketMock() {

FILE: test/node-debug.test.js
  function argv (line 89) | function argv(cmdString) {

FILE: test/plugins.js
  function findEq (line 8) | function findEq(collection, option, value) {
  function clearPlugins (line 14) | function clearPlugins() {
  function addCommonPlugin (line 18) | function addCommonPlugin() {
  function addPluginWithProtocol (line 29) | function addPluginWithProtocol() {
Condensed preview — 542 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,003K chars).
[
  {
    "path": ".gitattributes",
    "chars": 71,
    "preview": "# Auto detect text files and perform LF normalization\n*.js text eol=lf\n"
  },
  {
    "path": ".gitignore",
    "chars": 106,
    "preview": "._*\nnode_modules\nplugins/*\nv8.log\n.DS_Store\n.idea/\n/test/fixtures/work\nnpm-debug.log\nnode-inspector-*.tgz\n"
  },
  {
    "path": ".jshintignore",
    "chars": 32,
    "preview": "node_modules\n/front-end\n/plugins"
  },
  {
    "path": ".jshintrc",
    "chars": 288,
    "preview": "{\n\"node\": true,\n\"eqnull\" : true,\n\"indent\": 2,\n\"undef\": true,\n\"quotmark\": \"single\",\n\"maxlen\": 105,\n\"trailing\": true,\n\"new"
  },
  {
    "path": ".npmignore",
    "chars": 106,
    "preview": "._*\nnode_modules\nv8.log\n.DS_Store\n/.idea\n/test\nnode-inspector-*.tgz\n.npmignore\n.travis.yml\nMAINTAINERS.md\n"
  },
  {
    "path": ".travis.yml",
    "chars": 93,
    "preview": "sudo: false\nlanguage: node_js\nnode_js:\n  - \"0.10\"\n  - \"0.12\"\n  - \"4\"\n  - \"5\"\n  - \"6\"\n  - \"7\"\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1148,
    "preview": "Before opening a pull request\n=============================\n\n- [Wiki article on contributing to Node Inspector](https://"
  },
  {
    "path": "ChangeLog.md",
    "chars": 26251,
    "preview": "## 2018-01-31, Version 1.1.2\n\n * fix: ui messed up (#1034) (淘小杰)\n\n * Allow \"blob:\" sources for scripts in Content-Securi"
  },
  {
    "path": "LICENSE",
    "chars": 1282,
    "preview": "Copyright (c) 2011, Danny Coates\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or withou"
  },
  {
    "path": "MAINTAINERS.md",
    "chars": 669,
    "preview": "## How to release a new version\n\nIf you are running on Unix (Mac OSX, Linux), you can run `tools/release.sh`\nthat will r"
  },
  {
    "path": "README.md",
    "chars": 15372,
    "preview": "# Node Inspector\n\n[![Build Status](https://travis-ci.org/node-inspector/node-inspector.svg?branch=master)](https://travi"
  },
  {
    "path": "bin/inspector.js",
    "chars": 1453,
    "preview": "#!/usr/bin/env node\n\nvar DebugServer = require('../lib/debug-server').DebugServer,\n    fs = require('fs'),\n    path = re"
  },
  {
    "path": "bin/node-debug.js",
    "chars": 5300,
    "preview": "#!/usr/bin/env node\n\nvar Config = require('../lib/config');\nvar fork = require('child_process').fork;\nvar fs = require('"
  },
  {
    "path": "bin/run-repl.js",
    "chars": 1887,
    "preview": "// Load the module contained in the current directory (cwd) and start REPL\n// NOTE: Calls process.exit() after REPL was "
  },
  {
    "path": "docs/embedding.md",
    "chars": 1986,
    "preview": "# HOWTO embed Node Inspector\n\nNode Inspector provides two ways of embedding in third-party\napplications.\n\n## 1. Running "
  },
  {
    "path": "front-end/Images/src/optimize_png.hashes",
    "chars": 385,
    "preview": "{\n    \"breakpointConditional.svg\": \"4cf90210b2af2ed84db2f60b07bcde28\",\n    \"errorWave.svg\": \"e183fa242a22ed4784a92f6becb"
  },
  {
    "path": "front-end/Images/src/svg2png.hashes",
    "chars": 385,
    "preview": "{\n    \"breakpointConditional.svg\": \"4cf90210b2af2ed84db2f60b07bcde28\",\n    \"errorWave.svg\": \"e183fa242a22ed4784a92f6becb"
  },
  {
    "path": "front-end/OWNERS",
    "chars": 163,
    "preview": "aandrey@chromium.org\napavlov@chromium.org\ncaseq@chromium.org\ndgozman@chromium.org\nloislo@chromium.org\npfeldman@chromium."
  },
  {
    "path": "front-end/Runtime.js",
    "chars": 28314,
    "preview": "/*\n * Copyright (C) 2014 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/UglifyJS/parse-js.js",
    "chars": 41895,
    "preview": "/***********************************************************************\n\n  A JavaScript tokenizer / parser / beautifier"
  },
  {
    "path": "front-end/audits/AuditCategories.js",
    "chars": 4215,
    "preview": "/*\n * Copyright (C) 2010 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/audits/AuditCategory.js",
    "chars": 2011,
    "preview": "/*\n * Copyright (C) 2014 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/audits/AuditController.js",
    "chars": 6060,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n * Copyright (C) 2013 Samsung Electronics. All rights reserved"
  },
  {
    "path": "front-end/audits/AuditExtensionCategory.js",
    "chars": 7906,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/audits/AuditFormatters.js",
    "chars": 4590,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/audits/AuditLauncherView.js",
    "chars": 13457,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/audits/AuditResultView.js",
    "chars": 5206,
    "preview": "/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/audits/AuditRules.js",
    "chars": 60168,
    "preview": "/*\n * Copyright (C) 2010 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/audits/AuditsPanel.js",
    "chars": 15949,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/audits/auditsPanel.css",
    "chars": 5783,
    "preview": "/*\n * Copyright (C) 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * R"
  },
  {
    "path": "front-end/audits/module.json",
    "chars": 661,
    "preview": "{\n    \"extensions\": [\n        {\n            \"type\": \"@WebInspector.PanelFactory\",\n            \"name\": \"audits\",\n        "
  },
  {
    "path": "front-end/bindings/BreakpointManager.js",
    "chars": 38289,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/CSSWorkspaceBinding.js",
    "chars": 14332,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/bindings/CompilerScriptMapping.js",
    "chars": 14125,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/ContentProviderBasedProjectDelegate.js",
    "chars": 10002,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/ContentScriptProjectDecorator.js",
    "chars": 2661,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/bindings/DebuggerWorkspaceBinding.js",
    "chars": 17709,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/bindings/DefaultScriptMapping.js",
    "chars": 7168,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/FileUtils.js",
    "chars": 7404,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/Linkifier.js",
    "chars": 12416,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/LiveLocation.js",
    "chars": 820,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/bindings/NetworkUISourceCodeProvider.js",
    "chars": 9870,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/NetworkWorkspaceBinding.js",
    "chars": 5967,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/PresentationConsoleMessageHelper.js",
    "chars": 12129,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/ResourceScriptMapping.js",
    "chars": 14690,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/ResourceUtils.js",
    "chars": 7926,
    "preview": "/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2007 Matt Lilek (pewtermoose@gmai"
  },
  {
    "path": "front-end/bindings/SASSSourceMapping.js",
    "chars": 23698,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/ScriptSnippetModel.js",
    "chars": 23414,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/StylesSourceMapping.js",
    "chars": 13380,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/TempFile.js",
    "chars": 12351,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/WorkspaceController.js",
    "chars": 2599,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/bindings/module.json",
    "chars": 772,
    "preview": "{\n    \"dependencies\": [\"sdk\", \"platform\", \"workspace\"],\n    \"scripts\": [\n        \"LiveLocation.js\",\n        \"CompilerScr"
  },
  {
    "path": "front-end/cm/LICENSE",
    "chars": 1094,
    "preview": "Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others\n\nPermission is hereby granted, free of charge, to "
  },
  {
    "path": "front-end/cm/LICENSE_python",
    "chars": 1075,
    "preview": "The MIT License\n\nCopyright (c) 2010 Timothy Farrell\n\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "front-end/cm/PRESUBMIT.py",
    "chars": 2368,
    "preview": "# Copyright (C) 2014 Google Inc. All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or wit"
  },
  {
    "path": "front-end/cm/clike.js",
    "chars": 17288,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/closebrackets.js",
    "chars": 5646,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/codemirror.css",
    "chars": 7067,
    "preview": "/* BASICS */\n\n.CodeMirror {\n  /* Set height, width, borders, and global font properties here */\n  font-family: monospace"
  },
  {
    "path": "front-end/cm/codemirror.js",
    "chars": 312948,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/coffeescript.js",
    "chars": 10108,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/comment.js",
    "chars": 8008,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/css.js",
    "chars": 31653,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/headlesscodemirror.js",
    "chars": 5333,
    "preview": "// Content of the function is equal to runmode-standalone.js file\n// from CodeMirror distribution\n(function(window) {\n//"
  },
  {
    "path": "front-end/cm/htmlembedded.js",
    "chars": 3116,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/htmlmixed.js",
    "chars": 5038,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/javascript.js",
    "chars": 25875,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/markselection.js",
    "chars": 3781,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/matchbrackets.js",
    "chars": 5268,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/overlay.js",
    "chars": 3045,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/php.js",
    "chars": 15852,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/python.js",
    "chars": 12283,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/shell.js",
    "chars": 3751,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/cm/xml.js",
    "chars": 12357,
    "preview": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/L"
  },
  {
    "path": "front-end/common/Color.js",
    "chars": 21135,
    "preview": "/*\n * Copyright (C) 2009 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Joseph Pecoraro\n *\n * Redistribution and"
  },
  {
    "path": "front-end/common/Console.js",
    "chars": 2800,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/common/ContentProvider.js",
    "chars": 3176,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/common/Geometry.js",
    "chars": 9632,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/common/Lock.js",
    "chars": 1066,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/common/ModuleExtensionInterfaces.js",
    "chars": 2022,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/common/NotificationService.js",
    "chars": 608,
    "preview": "/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style li"
  },
  {
    "path": "front-end/common/Object.js",
    "chars": 5232,
    "preview": "/*\n * Copyright (C) 2008 Apple Inc. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with o"
  },
  {
    "path": "front-end/common/ParsedURL.js",
    "chars": 9034,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/common/Progress.js",
    "chars": 5620,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/common/ResourceType.js",
    "chars": 5522,
    "preview": "/*\n * Copyright (C) 2012 Google Inc.  All rights reserved.\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n"
  },
  {
    "path": "front-end/common/Settings.js",
    "chars": 24387,
    "preview": "/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/common/StaticContentProvider.js",
    "chars": 1949,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/common/TextRange.js",
    "chars": 7408,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/common/TextUtils.js",
    "chars": 5675,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/common/Throttler.js",
    "chars": 2720,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/common/UIString.js",
    "chars": 2897,
    "preview": "/*\n * Copyright (C) 2011 Google Inc.  All rights reserved.\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights rese"
  },
  {
    "path": "front-end/common/WebInspector.js",
    "chars": 196,
    "preview": "/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style li"
  },
  {
    "path": "front-end/common/WorkerRuntime.js",
    "chars": 7888,
    "preview": "/*\n * Copyright (C) 2014 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/common/module.json",
    "chars": 566,
    "preview": "{\n    \"dependencies\": [\n        \"platform\"\n    ],\n    \"scripts\": [\n        \"WorkerRuntime.js\",\n        \"WebInspector.js\""
  },
  {
    "path": "front-end/components/CookiesTable.js",
    "chars": 11419,
    "preview": "/*\n * Copyright (C) 2009 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Joseph Pecoraro\n * Copyright (C) 2010 Go"
  },
  {
    "path": "front-end/components/DOMBreakpointsSidebarPane.js",
    "chars": 17548,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/components/DOMPresentationUtils.js",
    "chars": 17405,
    "preview": "/*\n * Copyright (C) 2011 Google Inc.  All rights reserved.\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n"
  },
  {
    "path": "front-end/components/DockController.js",
    "chars": 7350,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/components/Drawer.js",
    "chars": 6759,
    "preview": "/*\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Joseph Pecoraro\n *\n * Redistributi"
  },
  {
    "path": "front-end/components/ExecutionContextSelector.js",
    "chars": 5840,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/components/HandlerRegistry.js",
    "chars": 10710,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/components/InspectElementModeController.js",
    "chars": 4489,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/components/InspectorView.js",
    "chars": 17802,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/components/NativeBreakpointsSidebarPane.js",
    "chars": 3387,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/components/ObjectPopoverHelper.js",
    "chars": 8466,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/components/ObjectPropertiesSection.js",
    "chars": 39891,
    "preview": "/*\n * Copyright (C) 2008 Apple Inc. All Rights Reserved.\n * Copyright (C) 2009 Joseph Pecoraro\n *\n * Redistribution and "
  },
  {
    "path": "front-end/components/ShortcutsScreen.js",
    "chars": 25273,
    "preview": "/*\n * Copyright (C) 2010 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/components/TargetsComboBoxController.js",
    "chars": 2720,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/components/breakpointsList.css",
    "chars": 3333,
    "preview": "/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.o"
  },
  {
    "path": "front-end/components/module.json",
    "chars": 643,
    "preview": "{\n    \"dependencies\": [\n        \"bindings\",\n        \"platform\",\n        \"ui\"\n    ],\n    \"scripts\": [\n        \"CookiesTab"
  },
  {
    "path": "front-end/console/ConsolePanel.js",
    "chars": 4949,
    "preview": "/*\n * Copyright (C) 2009 Joseph Pecoraro\n *\n * Redistribution and use in source and binary forms, with or without\n * mod"
  },
  {
    "path": "front-end/console/ConsoleView.js",
    "chars": 48252,
    "preview": "/*\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Joseph Pecoraro\n *\n * Redistributi"
  },
  {
    "path": "front-end/console/ConsoleViewMessage.js",
    "chars": 52705,
    "preview": "/*\n * Copyright (C) 2011 Google Inc.  All rights reserved.\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n"
  },
  {
    "path": "front-end/console/consoleView.css",
    "chars": 9203,
    "preview": "/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.o"
  },
  {
    "path": "front-end/console/module.json",
    "chars": 2066,
    "preview": "{\n    \"extensions\": [\n        {\n            \"type\": \"@WebInspector.PanelFactory\",\n            \"name\": \"console\",\n       "
  },
  {
    "path": "front-end/devices/DevicesView.js",
    "chars": 7173,
    "preview": "/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style li"
  },
  {
    "path": "front-end/devices/devicesView.css",
    "chars": 869,
    "preview": "/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-styl"
  },
  {
    "path": "front-end/devices/module.json",
    "chars": 425,
    "preview": "{\n    \"extensions\": [\n        {\n            \"type\": \"drawer-view\",\n            \"name\": \"devices\",\n            \"title\": \""
  },
  {
    "path": "front-end/devtools.css",
    "chars": 244,
    "preview": "/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style li"
  },
  {
    "path": "front-end/devtools.html",
    "chars": 1053,
    "preview": "<!--\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style "
  },
  {
    "path": "front-end/devtools.js",
    "chars": 204,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/devtools.json",
    "chars": 197,
    "preview": "[\n    { \"name\": \"platform\", \"type\": \"autostart\" },\n    { \"name\": \"host\", \"type\": \"autostart\" },\n    { \"name\": \"common\", "
  },
  {
    "path": "front-end/devtools_app/DevToolsAPI.js",
    "chars": 8442,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/devtools_app/DevToolsApp.js",
    "chars": 764,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/devtools_app/InspectorFrontendHostImpl.js",
    "chars": 8526,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/devtools_app/UITests.js",
    "chars": 764,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/devtools_app/module.json",
    "chars": 276,
    "preview": "{\n    \"dependencies\": [\n        \"common\",\n        \"host\",\n        \"platform\"\n    ],\n    \"scripts\": [\n        \"UITests.js"
  },
  {
    "path": "front-end/dialog.css",
    "chars": 1158,
    "preview": ".dialog {\n    position: absolute;\n    border: 1px solid rgb(204, 204, 204);\n    box-shadow: rgb(140, 140, 140) 0 3px 14p"
  },
  {
    "path": "front-end/documentation/DocumentationCatalog.js",
    "chars": 6724,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/documentation/DocumentationView.js",
    "chars": 17385,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/documentation/JSArticle.js",
    "chars": 5062,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/documentation/WikiParser.js",
    "chars": 38233,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/documentation/documentationView.css",
    "chars": 2429,
    "preview": "/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style li"
  },
  {
    "path": "front-end/documentation/module.json",
    "chars": 526,
    "preview": "{\n    \"extensions\": [\n        {\n            \"type\": \"@WebInspector.ContextMenu.Provider\",\n            \"contextTypes\": [ "
  },
  {
    "path": "front-end/elements/AnimationsSidebarPane.js",
    "chars": 17260,
    "preview": "// Copyright (c) 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style l"
  },
  {
    "path": "front-end/elements/ElementsBreadcrumbs.js",
    "chars": 14763,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/elements/ElementsPanel.js",
    "chars": 38249,
    "preview": "/*\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>\n"
  },
  {
    "path": "front-end/elements/ElementsSidebarPane.js",
    "chars": 1695,
    "preview": "// Copyright (c) 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style l"
  },
  {
    "path": "front-end/elements/ElementsTreeOutline.js",
    "chars": 113635,
    "preview": "/*\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>\n"
  },
  {
    "path": "front-end/elements/EventListenersSidebarPane.js",
    "chars": 10594,
    "preview": "/*\n * Copyright (C) 2007 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Joseph Pecoraro\n *\n * Redistribution and"
  },
  {
    "path": "front-end/elements/MetricsSidebarPane.js",
    "chars": 20233,
    "preview": "/*\n * Copyright (C) 2007 Apple Inc.  All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/elements/PlatformFontsSidebarPane.js",
    "chars": 6361,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/elements/PropertiesSidebarPane.js",
    "chars": 6316,
    "preview": "/*\n * Copyright (C) 2007 Apple Inc.  All rights reserved.\n * Copyright (C) 2014 Google Inc. All rights reserved.\n *\n * R"
  },
  {
    "path": "front-end/elements/Spectrum.js",
    "chars": 15342,
    "preview": "/*\n * Copyright (C) 2011 Brian Grinstead All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "front-end/elements/StylesSectionModel.js",
    "chars": 10310,
    "preview": "// Copyright (c) 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style l"
  },
  {
    "path": "front-end/elements/StylesSidebarPane.js",
    "chars": 134494,
    "preview": "/*\n * Copyright (C) 2007 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Joseph Pecoraro\n *\n * Redistribution and"
  },
  {
    "path": "front-end/elements/breadcrumbs.css",
    "chars": 839,
    "preview": "/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style li"
  },
  {
    "path": "front-end/elements/elementsPanel.css",
    "chars": 16097,
    "preview": "/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.o"
  },
  {
    "path": "front-end/elements/elementsTreeOutline.css",
    "chars": 6747,
    "preview": "/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-styl"
  },
  {
    "path": "front-end/elements/module.json",
    "chars": 3172,
    "preview": "{\n    \"extensions\": [\n        {\n            \"type\": \"@WebInspector.PanelFactory\",\n            \"name\": \"elements\",\n      "
  },
  {
    "path": "front-end/elements/spectrum.css",
    "chars": 1978,
    "preview": "/* https://github.com/bgrins/spectrum */\n:host {\n    width: 205px;\n    height: 220px;\n    -webkit-user-select: none;\n}\n\n"
  },
  {
    "path": "front-end/extensions/ExtensionAPI.js",
    "chars": 30140,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/extensions/ExtensionAuditCategory.js",
    "chars": 2484,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/extensions/ExtensionPanel.js",
    "chars": 9351,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/extensions/ExtensionRegistryStub.js",
    "chars": 1888,
    "preview": "/*\n * Copyright (C) 2010 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/extensions/ExtensionServer.js",
    "chars": 43045,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/extensions/ExtensionView.js",
    "chars": 3469,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/extensions/module.json",
    "chars": 263,
    "preview": "{\n    \"dependencies\": [\n        \"components\"\n    ],\n    \"scripts\": [\n        \"ExtensionAPI.js\",\n        \"ExtensionAuditC"
  },
  {
    "path": "front-end/externs.js",
    "chars": 16968,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/heap_snapshot_worker/AllocationProfile.js",
    "chars": 13974,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/heap_snapshot_worker/HeapSnapshot.js",
    "chars": 81673,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/heap_snapshot_worker/HeapSnapshotLoader.js",
    "chars": 11133,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/heap_snapshot_worker/HeapSnapshotWorker.js",
    "chars": 1984,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.js",
    "chars": 4268,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/heap_snapshot_worker/JSHeapSnapshot.js",
    "chars": 28383,
    "preview": "/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/heap_snapshot_worker/module.json",
    "chars": 442,
    "preview": "{\n    \"scripts\": [\n        \"../platform/Promise.js\",\n        \"../platform/utilities.js\",\n        \"../common/WebInspector"
  },
  {
    "path": "front-end/host/InspectorFrontendHost.js",
    "chars": 17149,
    "preview": "/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/host/Platform.js",
    "chars": 3429,
    "preview": "/*\n * Copyright (C) 2014 Google Inc.  All rights reserved.\n *\n * Redistribution and use in source and binary forms, with"
  },
  {
    "path": "front-end/host/UserMetrics.js",
    "chars": 3648,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/host/module.json",
    "chars": 177,
    "preview": "{\n    \"dependencies\": [\n        \"common\",\n        \"platform\"\n    ],\n    \"scripts\": [\n        \"InspectorFrontendHost.js\","
  },
  {
    "path": "front-end/inspector.css",
    "chars": 590,
    "preview": "/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style li"
  },
  {
    "path": "front-end/inspector.html",
    "chars": 651,
    "preview": "<!--\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style "
  },
  {
    "path": "front-end/inspector.js",
    "chars": 205,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/inspector.json",
    "chars": 1153,
    "preview": "[\n    { \"name\": \"platform\", \"type\": \"autostart\" },\n    { \"name\": \"main\", \"type\": \"autostart\" },\n    { \"name\": \"component"
  },
  {
    "path": "front-end/inspectorCommon.css",
    "chars": 2725,
    "preview": "html {\n    height: 100%;\n}\n\nbody {\n    height: 100%;\n    width: 100%;\n    position: relative;\n    overflow: hidden;\n    "
  },
  {
    "path": "front-end/inspectorStyle.css",
    "chars": 40595,
    "preview": "/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.o"
  },
  {
    "path": "front-end/inspectorSyntaxHighlight.css",
    "chars": 4816,
    "preview": "/*\n * Copyright (C) 2009 Apple Inc.  All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/layers/LayerPaintProfilerView.js",
    "chars": 2329,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/layers/LayersPanel.js",
    "chars": 10241,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/layers/module.json",
    "chars": 598,
    "preview": "{\n    \"extensions\": [\n        {\n            \"type\": \"@WebInspector.PanelFactory\",\n            \"name\": \"layers\",\n        "
  },
  {
    "path": "front-end/main/AdvancedApp.js",
    "chars": 11372,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/main/App.js",
    "chars": 413,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/main/HelpScreenUntilReload.js",
    "chars": 2398,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/main/Main.js",
    "chars": 34044,
    "preview": "/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2007 Matt Lilek (pewtermoose@gmai"
  },
  {
    "path": "front-end/main/OverridesView.js",
    "chars": 32105,
    "preview": "/*\n * Copyright (C) 2014 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/main/RenderingOptions.js",
    "chars": 4918,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/main/ScreencastApp.js",
    "chars": 4229,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/main/SimpleApp.js",
    "chars": 705,
    "preview": "// Copyright 2014 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licen"
  },
  {
    "path": "front-end/main/TestController.js",
    "chars": 1978,
    "preview": "/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/main/Tests.js",
    "chars": 28855,
    "preview": "/*\n * Copyright (C) 2010 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/main/accelerometer.css",
    "chars": 3366,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/main/module.json",
    "chars": 8482,
    "preview": "{\n    \"extensions\": [\n        {\n            \"type\": \"@WebInspector.ContextMenu.Provider\",\n            \"contextTypes\": [\""
  },
  {
    "path": "front-end/main/overrides.css",
    "chars": 6853,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/network/FilterSuggestionBuilder.js",
    "chars": 6878,
    "preview": "/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/network/HARWriter.js",
    "chars": 4967,
    "preview": "/*\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.o"
  },
  {
    "path": "front-end/network/NetworkDataGridNode.js",
    "chars": 22592,
    "preview": "/*\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.o"
  },
  {
    "path": "front-end/network/NetworkItemView.js",
    "chars": 5603,
    "preview": "/*\n * Copyright (C) 2010 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  },
  {
    "path": "front-end/network/NetworkLogView.js",
    "chars": 72592,
    "preview": "/*\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.o"
  },
  {
    "path": "front-end/network/NetworkPanel.js",
    "chars": 13963,
    "preview": "/*\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.o"
  },
  {
    "path": "front-end/network/NetworkTimeCalculator.js",
    "chars": 10456,
    "preview": "/*\n * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.o"
  },
  {
    "path": "front-end/network/RequestCookiesView.js",
    "chars": 3801,
    "preview": "/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with "
  }
]

// ... and 342 more files (download for full content)

About this extraction

This page contains the full source code of the node-inspector/node-inspector GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 542 files (6.4 MB), approximately 1.7M tokens, and a symbol index with 2109 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!