2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2007 Matt Lilek (pewtermoose@gmail.com).
4 * Copyright (C) 2009 Joseph Pecoraro
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
16 * its contributors may be used to endorse or promote products derived
17 * from this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 * @implements {InspectorAgent.Dispatcher}
35 WebInspector.Main = function()
37 var boundListener = windowLoaded.bind(this);
40 * @this {WebInspector.Main}
42 function windowLoaded()
45 window.removeEventListener("DOMContentLoaded", boundListener, false);
47 window.addEventListener("DOMContentLoaded", boundListener, false);
50 WebInspector.Main.prototype = {
51 _registerModules: function()
54 if (!Capabilities.isMainFrontend) {
55 configuration = ["main", "sources", "timeline", "profiles", "console", "codemirror"];
57 configuration = ["main", "elements", "network", "sources", "timeline", "profiles", "resources", "audits", "console", "codemirror", "extensions", "settings"];
58 if (WebInspector.experimentsSettings.layersPanel.isEnabled())
59 configuration.push("layers");
61 WebInspector.moduleManager.registerModules(configuration);
64 _createGlobalStatusBarItems: function()
66 if (WebInspector.inspectElementModeController)
67 WebInspector.inspectorView.appendToLeftToolbar(WebInspector.inspectElementModeController.toggleSearchButton.element);
69 WebInspector.inspectorView.appendToRightToolbar(WebInspector.settingsController.statusBarItem);
70 if (WebInspector.dockController.element)
71 WebInspector.inspectorView.appendToRightToolbar(WebInspector.dockController.element);
73 if (WebInspector._screencastController)
74 WebInspector.inspectorView.appendToRightToolbar(WebInspector._screencastController.statusBarItem());
77 _createRootView: function()
79 var rootView = new WebInspector.RootView();
81 this._rootSplitView = new WebInspector.SplitView(false, true, WebInspector.dockController.canDock() ? "InspectorView.splitViewState" : "InspectorView.dummySplitViewState", 300, 300);
82 this._rootSplitView.show(rootView.element);
84 WebInspector.inspectorView.show(this._rootSplitView.sidebarElement());
86 var inspectedPagePlaceholder = new WebInspector.InspectedPagePlaceholder();
87 inspectedPagePlaceholder.show(this._rootSplitView.mainElement());
89 WebInspector.dockController.addEventListener(WebInspector.DockController.Events.DockSideChanged, this._updateRootSplitViewOnDockSideChange, this);
90 this._updateRootSplitViewOnDockSideChange();
92 rootView.attachToBody();
95 _updateRootSplitViewOnDockSideChange: function()
97 var dockSide = WebInspector.dockController.dockSide();
98 if (dockSide === WebInspector.DockController.State.Undocked) {
99 this._rootSplitView.toggleResizer(this._rootSplitView.resizerElement(), false);
100 this._rootSplitView.toggleResizer(WebInspector.inspectorView.topResizerElement(), false);
101 this._rootSplitView.hideMain();
105 this._rootSplitView.setVertical(dockSide === WebInspector.DockController.State.DockedToLeft || dockSide === WebInspector.DockController.State.DockedToRight);
106 this._rootSplitView.setSecondIsSidebar(dockSide === WebInspector.DockController.State.DockedToRight || dockSide === WebInspector.DockController.State.DockedToBottom);
107 this._rootSplitView.toggleResizer(this._rootSplitView.resizerElement(), true);
108 this._rootSplitView.toggleResizer(WebInspector.inspectorView.topResizerElement(), dockSide === WebInspector.DockController.State.DockedToBottom);
109 this._rootSplitView.showBoth();
112 _calculateWorkerInspectorTitle: function()
114 var expression = "location.href";
115 if (WebInspector.queryParam("isSharedWorker"))
116 expression += " + (this.name ? ' (' + this.name + ')' : '')";
117 RuntimeAgent.invoke_evaluate({expression:expression, doNotPauseOnExceptionsAndMuteConsole:true, returnByValue: true}, evalCallback);
120 * @param {?Protocol.Error} error
121 * @param {!RuntimeAgent.RemoteObject} result
122 * @param {boolean=} wasThrown
124 function evalCallback(error, result, wasThrown)
126 if (error || wasThrown) {
127 console.error(error);
130 InspectorFrontendHost.inspectedURLChanged(result.value);
134 _loadCompletedForWorkers: function()
136 // Make sure script execution of dedicated worker is resumed and then paused
137 // on the first script statement in case we autoattached to it.
138 if (WebInspector.queryParam("workerPaused")) {
139 DebuggerAgent.pause();
140 RuntimeAgent.run(calculateTitle.bind(this));
141 } else if (!Capabilities.isMainFrontend) {
142 calculateTitle.call(this);
146 * @this {WebInspector.Main}
148 function calculateTitle()
150 this._calculateWorkerInspectorTitle();
154 _resetErrorAndWarningCounts: function()
156 WebInspector.inspectorView.setErrorAndWarningCounts(0, 0);
159 _updateErrorAndWarningCounts: function()
161 var errors = WebInspector.console.errors;
162 var warnings = WebInspector.console.warnings;
163 WebInspector.inspectorView.setErrorAndWarningCounts(errors, warnings);
166 _debuggerPaused: function()
168 WebInspector.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
169 WebInspector.inspectorView.showPanel("sources");
174 if (!InspectorFrontendHost.sendMessageToEmbedder) {
175 var helpScreen = new WebInspector.HelpScreen(WebInspector.UIString("Incompatible Chrome version"));
176 var p = helpScreen.contentElement.createChild("p", "help-section");
177 p.textContent = WebInspector.UIString("Please upgrade to a newer Chrome version (you might need a Dev or Canary build).");
178 helpScreen.showModal();
182 InspectorBackend.loadFromJSONIfNeeded("../protocol.json");
183 WebInspector.dockController = new WebInspector.DockController(!!WebInspector.queryParam("can_dock"));
185 var onConnectionReady = this._doLoadedDone.bind(this);
187 var workerId = WebInspector.queryParam("dedicatedWorkerId");
189 new WebInspector.ExternalWorkerConnection(workerId, onConnectionReady);
194 if (WebInspector.queryParam("ws")) {
195 ws = "ws://" + WebInspector.queryParam("ws");
196 } else if (WebInspector.queryParam("page")) {
197 var page = WebInspector.queryParam("page");
198 var host = WebInspector.queryParam("host") || window.location.host;
199 ws = "ws://" + host + "/devtools/page/" + page;
203 document.body.classList.add("remote");
204 new InspectorBackendClass.WebSocketConnection(ws, onConnectionReady);
208 if (!InspectorFrontendHost.isStub) {
209 new InspectorBackendClass.MainConnection(onConnectionReady);
213 InspectorFrontendAPI.dispatchQueryParameters(WebInspector.queryParam("dispatch"));
214 new InspectorBackendClass.StubConnection(onConnectionReady);
218 * @param {!InspectorBackendClass.Connection} connection
220 _doLoadedDone: function(connection)
222 connection.addEventListener(InspectorBackendClass.Connection.Events.Disconnected, onDisconnected);
225 * @param {!WebInspector.Event} event
227 function onDisconnected(event)
229 if (WebInspector._disconnectedScreenWithReasonWasShown)
231 new WebInspector.RemoteDebuggingTerminatedScreen(event.data.reason).showModal();
234 InspectorBackend.setConnection(connection);
236 // Install styles and themes
237 WebInspector.installPortStyles();
239 if (WebInspector.queryParam("toolbarColor") && WebInspector.queryParam("textColor"))
240 WebInspector.setToolbarColors(WebInspector.queryParam("toolbarColor"), WebInspector.queryParam("textColor"));
242 WebInspector.targetManager = new WebInspector.TargetManager();
243 WebInspector.targetManager.createTarget(connection, this._doLoadedDoneWithCapabilities.bind(this));
246 _doLoadedDoneWithCapabilities: function(mainTarget)
248 new WebInspector.VersionController().updateVersion();
249 WebInspector.shortcutsScreen = new WebInspector.ShortcutsScreen();
250 this._registerShortcuts();
252 // set order of some sections explicitly
253 WebInspector.shortcutsScreen.section(WebInspector.UIString("Console"));
254 WebInspector.shortcutsScreen.section(WebInspector.UIString("Elements Panel"));
255 WebInspector.ShortcutsScreen.registerShortcuts();
257 if (WebInspector.experimentsSettings.workersInMainWindow.isEnabled())
258 new WebInspector.WorkerTargetManager(mainTarget, WebInspector.targetManager);
260 WebInspector.console.addEventListener(WebInspector.ConsoleModel.Events.ConsoleCleared, this._resetErrorAndWarningCounts, this);
261 WebInspector.console.addEventListener(WebInspector.ConsoleModel.Events.MessageAdded, this._updateErrorAndWarningCounts, this);
263 WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
264 WebInspector.networkLog = new WebInspector.NetworkLog();
266 WebInspector.zoomManager = new WebInspector.ZoomManager();
268 WebInspector.advancedSearchController = new WebInspector.AdvancedSearchController();
270 InspectorBackend.registerInspectorDispatcher(this);
272 WebInspector.isolatedFileSystemManager = new WebInspector.IsolatedFileSystemManager();
273 WebInspector.isolatedFileSystemDispatcher = new WebInspector.IsolatedFileSystemDispatcher(WebInspector.isolatedFileSystemManager);
274 WebInspector.workspace = new WebInspector.Workspace(WebInspector.isolatedFileSystemManager.mapping());
276 WebInspector.cssModel = new WebInspector.CSSStyleModel(WebInspector.workspace);
277 WebInspector.timelineManager = new WebInspector.TimelineManager();
278 WebInspector.tracingAgent = new WebInspector.TracingAgent();
280 if (Capabilities.isMainFrontend) {
281 WebInspector.inspectElementModeController = new WebInspector.InspectElementModeController();
282 WebInspector.workerFrontendManager = new WebInspector.WorkerFrontendManager();
284 mainTarget.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerDisconnected, onWorkerDisconnected);
287 function onWorkerDisconnected()
289 var screen = new WebInspector.WorkerTerminatedScreen();
290 var listener = hideScreen.bind(null, screen);
291 mainTarget.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, listener);
294 * @param {!WebInspector.WorkerTerminatedScreen} screen
296 function hideScreen(screen)
298 mainTarget.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, listener);
305 WebInspector.settingsController = new WebInspector.SettingsController();
307 WebInspector.domBreakpointsSidebarPane = new WebInspector.DOMBreakpointsSidebarPane();
309 var autoselectPanel = WebInspector.UIString("a panel chosen automatically");
310 var openAnchorLocationSetting = WebInspector.settings.createSetting("openLinkHandler", autoselectPanel);
311 WebInspector.openAnchorLocationRegistry = new WebInspector.HandlerRegistry(openAnchorLocationSetting);
312 WebInspector.openAnchorLocationRegistry.registerHandler(autoselectPanel, function() { return false; });
313 WebInspector.Linkifier.setLinkHandler(new WebInspector.HandlerRegistry.LinkHandler());
315 new WebInspector.WorkspaceController(WebInspector.workspace);
317 WebInspector.fileSystemWorkspaceProvider = new WebInspector.FileSystemWorkspaceProvider(WebInspector.isolatedFileSystemManager, WebInspector.workspace);
319 WebInspector.networkWorkspaceProvider = new WebInspector.SimpleWorkspaceProvider(WebInspector.workspace, WebInspector.projectTypes.Network);
320 new WebInspector.NetworkUISourceCodeProvider(WebInspector.networkWorkspaceProvider, WebInspector.workspace);
322 WebInspector.breakpointManager = new WebInspector.BreakpointManager(WebInspector.settings.breakpoints, WebInspector.debuggerModel, WebInspector.workspace);
324 WebInspector.scriptSnippetModel = new WebInspector.ScriptSnippetModel(WebInspector.workspace);
326 WebInspector.overridesSupport = new WebInspector.OverridesSupport();
327 WebInspector.overridesSupport.applyInitialOverrides();
329 new WebInspector.DebuggerScriptMapping(WebInspector.debuggerModel, WebInspector.workspace, WebInspector.networkWorkspaceProvider);
330 WebInspector.liveEditSupport = new WebInspector.LiveEditSupport(WebInspector.workspace);
331 new WebInspector.CSSStyleSheetMapping(WebInspector.cssModel, WebInspector.workspace, WebInspector.networkWorkspaceProvider);
332 new WebInspector.PresentationConsoleMessageHelper(WebInspector.workspace);
334 // Create settings before loading modules.
335 WebInspector.settings.initializeBackendSettings();
337 this._registerModules();
338 WebInspector.KeyboardShortcut.registerActions();
340 WebInspector.panels = {};
341 WebInspector.inspectorView = new WebInspector.InspectorView();
342 // Screencast controller creates a root view itself.
343 if (mainTarget.canScreencast)
344 this._screencastController = new WebInspector.ScreencastController();
346 this._createRootView();
347 this._createGlobalStatusBarItems();
349 this._addMainEventListeners(document);
353 if (WebInspector.settingsController)
354 WebInspector.settingsController.resize();
356 window.addEventListener("resize", onResize, true);
358 var errorWarningCount = document.getElementById("error-warning-count");
360 function showConsole()
362 WebInspector.console.show();
364 errorWarningCount.addEventListener("click", showConsole, false);
365 this._updateErrorAndWarningCounts();
367 WebInspector.extensionServerProxy.setFrontendReady();
369 WebInspector.databaseModel = new WebInspector.DatabaseModel();
370 WebInspector.domStorageModel = new WebInspector.DOMStorageModel();
371 WebInspector.cpuProfilerModel = new WebInspector.CPUProfilerModel();
373 InspectorAgent.enable(inspectorAgentEnableCallback.bind(this));
376 * @this {WebInspector.Main}
378 function inspectorAgentEnableCallback()
380 WebInspector.inspectorView.showInitialPanel();
382 if (WebInspector.overridesSupport.hasActiveOverrides())
383 WebInspector.inspectorView.showViewInDrawer("emulation", true);
385 WebInspector.settings.showMetricsRulers.addChangeListener(showRulersChanged);
386 function showRulersChanged()
388 PageAgent.setShowViewportSizeOnResize(true, WebInspector.settings.showMetricsRulers.get());
392 if (this._screencastController)
393 this._screencastController.initialize();
396 this._loadCompletedForWorkers();
397 InspectorFrontendAPI.loadCompleted();
398 WebInspector.notifications.dispatchEventToListeners(WebInspector.NotificationService.Events.InspectorLoaded);
401 _documentClick: function(event)
403 var anchor = event.target.enclosingNodeOrSelfWithNodeName("a");
404 if (!anchor || !anchor.href || (anchor.target === "_blank"))
407 // Prevent the link from navigating, since we don't do any navigation by following links normally.
410 function followLink()
412 if (WebInspector.isBeingEdited(event.target))
414 if (WebInspector.openAnchorLocationRegistry.dispatch({ url: anchor.href, lineNumber: anchor.lineNumber}))
417 var uiSourceCode = WebInspector.workspace.uiSourceCodeForURL(anchor.href);
419 WebInspector.Revealer.reveal(new WebInspector.UILocation(uiSourceCode, anchor.lineNumber || 0, anchor.columnNumber || 0));
423 var resource = WebInspector.resourceForURL(anchor.href);
425 WebInspector.Revealer.reveal(resource);
429 var request = WebInspector.networkLog.requestForURL(anchor.href);
431 WebInspector.Revealer.reveal(request);
434 InspectorFrontendHost.openInNewTab(anchor.href);
437 if (WebInspector.followLinkTimeout)
438 clearTimeout(WebInspector.followLinkTimeout);
440 if (anchor.preventFollowOnDoubleClick) {
441 // Start a timeout if this is the first click, if the timeout is canceled
442 // before it fires, then a double clicked happened or another link was clicked.
443 if (event.detail === 1)
444 WebInspector.followLinkTimeout = setTimeout(followLink, 333);
451 _registerShortcuts: function()
453 var shortcut = WebInspector.KeyboardShortcut;
454 var section = WebInspector.shortcutsScreen.section(WebInspector.UIString("All Panels"));
456 shortcut.makeDescriptor("[", shortcut.Modifiers.CtrlOrMeta),
457 shortcut.makeDescriptor("]", shortcut.Modifiers.CtrlOrMeta)
459 section.addRelatedKeys(keys, WebInspector.UIString("Go to the panel to the left/right"));
462 shortcut.makeDescriptor("[", shortcut.Modifiers.CtrlOrMeta | shortcut.Modifiers.Alt),
463 shortcut.makeDescriptor("]", shortcut.Modifiers.CtrlOrMeta | shortcut.Modifiers.Alt)
465 section.addRelatedKeys(keys, WebInspector.UIString("Go back/forward in panel history"));
467 var toggleConsoleLabel = WebInspector.UIString("Show console");
468 section.addKey(shortcut.makeDescriptor(shortcut.Keys.Tilde, shortcut.Modifiers.Ctrl), toggleConsoleLabel);
469 var doNotOpenDrawerOnEsc = WebInspector.experimentsSettings.doNotOpenDrawerOnEsc.isEnabled();
470 var toggleDrawerLabel = doNotOpenDrawerOnEsc ? WebInspector.UIString("Hide drawer") : WebInspector.UIString("Toggle drawer");
471 section.addKey(shortcut.makeDescriptor(shortcut.Keys.Esc), toggleDrawerLabel);
472 section.addKey(shortcut.makeDescriptor("f", shortcut.Modifiers.CtrlOrMeta), WebInspector.UIString("Search"));
474 var advancedSearchShortcut = WebInspector.AdvancedSearchController.createShortcut();
475 section.addKey(advancedSearchShortcut, WebInspector.UIString("Search across all sources"));
477 var inspectElementModeShortcut = WebInspector.InspectElementModeController.createShortcut();
478 section.addKey(inspectElementModeShortcut, WebInspector.UIString("Select node to inspect"));
480 var openResourceShortcut = WebInspector.KeyboardShortcut.makeDescriptor("o", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta);
481 section.addKey(openResourceShortcut, WebInspector.UIString("Go to source"));
483 if (WebInspector.isMac()) {
485 shortcut.makeDescriptor("g", shortcut.Modifiers.Meta),
486 shortcut.makeDescriptor("g", shortcut.Modifiers.Meta | shortcut.Modifiers.Shift)
488 section.addRelatedKeys(keys, WebInspector.UIString("Find next/previous"));
493 * @param {?Event} event
496 _handleZoomEvent: function(event)
498 switch (event.keyCode) {
501 InspectorFrontendHost.zoomIn();
505 InspectorFrontendHost.zoomOut();
509 // Zoom reset shortcut does not allow "Shift" when handled by the browser.
510 if (!event.shiftKey) {
511 InspectorFrontendHost.resetZoom();
519 _postDocumentKeyDown: function(event)
524 if (!WebInspector.Dialog.currentInstance() && WebInspector.inspectorView.currentPanel()) {
525 WebInspector.inspectorView.currentPanel().handleShortcut(event);
532 if (!WebInspector.Dialog.currentInstance() && WebInspector.advancedSearchController.handleShortcut(event))
534 if (!WebInspector.Dialog.currentInstance() && WebInspector.inspectElementModeController && WebInspector.inspectElementModeController.handleShortcut(event))
537 var isValidZoomShortcut = WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) &&
539 !InspectorFrontendHost.isStub;
540 if (!WebInspector.Dialog.currentInstance() && isValidZoomShortcut && this._handleZoomEvent(event)) {
544 WebInspector.KeyboardShortcut.handleShortcut(event);
547 _documentCanCopy: function(event)
549 if (WebInspector.inspectorView.currentPanel() && WebInspector.inspectorView.currentPanel()["handleCopyEvent"])
550 event.preventDefault();
553 _documentCopy: function(event)
555 if (WebInspector.inspectorView.currentPanel() && WebInspector.inspectorView.currentPanel()["handleCopyEvent"])
556 WebInspector.inspectorView.currentPanel()["handleCopyEvent"](event);
559 _contextMenuEventFired: function(event)
561 if (event.handled || event.target.classList.contains("popup-glasspane"))
562 event.preventDefault();
565 _inspectNodeRequested: function(event)
567 this._updateFocusedNode(event.data);
570 _updateFocusedNode: function(nodeId)
572 var node = WebInspector.domModel.nodeForId(nodeId);
573 console.assert(node);
574 WebInspector.Revealer.reveal(node);
577 _addMainEventListeners: function(doc)
579 doc.addEventListener("keydown", this._postDocumentKeyDown.bind(this), false);
580 doc.addEventListener("beforecopy", this._documentCanCopy.bind(this), true);
581 doc.addEventListener("copy", this._documentCopy.bind(this), false);
582 doc.addEventListener("contextmenu", this._contextMenuEventFired.bind(this), true);
583 doc.addEventListener("click", this._documentClick.bind(this), false);
588 * @param {!RuntimeAgent.RemoteObject} payload
589 * @param {!Object=} hints
591 inspect: function(payload, hints)
593 var object = WebInspector.RemoteObject.fromPayload(payload);
594 if (object.subtype === "node") {
595 object.pushNodeToFrontend(callback);
596 var elementsPanel = /** @type {!WebInspector.ElementsPanel} */ (WebInspector.inspectorView.panel("elements"));
597 elementsPanel.omitDefaultSelection();
598 WebInspector.inspectorView.setCurrentPanel(elementsPanel);
602 function callback(nodeId)
604 elementsPanel.stopOmittingDefaultSelection();
605 WebInspector.Revealer.reveal(WebInspector.domModel.nodeForId(nodeId));
606 if (!WebInspector.inspectorView.drawerVisible() && !WebInspector._notFirstInspectElement)
607 InspectorFrontendHost.inspectElementCompleted();
608 WebInspector._notFirstInspectElement = true;
612 if (object.type === "function") {
614 * @param {?Protocol.Error} error
615 * @param {!DebuggerAgent.FunctionDetails} response
617 DebuggerAgent.getFunctionDetails(object.objectId, didGetDetails);
621 function didGetDetails(error, response)
626 console.error(error);
630 var uiLocation = WebInspector.debuggerModel.rawLocationToUILocation(response.location);
634 // FIXME: Dependency violation.
635 /** @type {!WebInspector.SourcesPanel} */ (WebInspector.inspectorView.panel("sources")).showUILocation(uiLocation, true);
638 if (hints.copyToClipboard)
639 InspectorFrontendHost.copyText(object.value);
645 * @param {string} reason
647 detached: function(reason)
649 WebInspector._disconnectedScreenWithReasonWasShown = true;
650 new WebInspector.RemoteDebuggingTerminatedScreen(reason).showModal();
656 targetCrashed: function()
658 (new WebInspector.HelpScreenUntilReload(
659 WebInspector.UIString("Inspected target crashed"),
660 WebInspector.UIString("Inspected target has crashed. Once it reloads we will attach to it automatically."))).showModal();
665 * @param {number} callId
666 * @param {string} script
668 evaluateForTestInFrontend: function(callId, script)
670 WebInspector.evaluateForTestInFrontend(callId, script);
674 WebInspector.reload = function()
676 InspectorAgent.reset();
677 window.location.reload();
682 * @implements {WebInspector.ActionDelegate}
684 WebInspector.Main.ReloadActionDelegate = function()
688 WebInspector.Main.ReloadActionDelegate.prototype = {
692 handleAction: function()
694 if (!WebInspector.Dialog.currentInstance()) {
695 WebInspector.debuggerModel.skipAllPauses(true, true);
696 WebInspector.resourceTreeModel.reloadPage(false);
704 * @implements {WebInspector.ActionDelegate}
706 WebInspector.Main.HardReloadActionDelegate = function()
710 WebInspector.Main.HardReloadActionDelegate.prototype = {
714 handleAction: function()
716 if (!WebInspector.Dialog.currentInstance()) {
717 WebInspector.debuggerModel.skipAllPauses(true, true);
718 WebInspector.resourceTreeModel.reloadPage(true);
726 * @implements {WebInspector.ActionDelegate}
728 WebInspector.Main.DebugReloadActionDelegate = function()
732 WebInspector.Main.DebugReloadActionDelegate.prototype = {
736 handleAction: function()
738 WebInspector.reload();
743 new WebInspector.Main();
747 // These methods are added for backwards compatibility with Devtools CodeSchool extension.
750 WebInspector.__defineGetter__("inspectedPageURL", function()
752 return WebInspector.resourceTreeModel.inspectedPageURL();
755 WebInspector.panel = function(name)
757 return WebInspector.inspectorView.panel(name);