_registerModules: function()
{
var configuration;
- if (WebInspector.WorkerManager.isWorkerFrontend()) {
- configuration = ["sources", "timeline", "profiles", "console"];
+ if (WebInspector.isWorkerFrontend()) {
+ configuration = ["sources", "timeline", "profiles", "console", "codemirror"];
} else {
- configuration = ["elements", "network", "sources", "timeline", "profiles", "resources", "audits", "console"];
+ configuration = ["elements", "network", "sources", "timeline", "profiles", "resources", "audits", "console", "codemirror", "extensions"];
if (WebInspector.experimentsSettings.layersPanel.isEnabled())
configuration.push("layers");
}
return !!WebInspector.queryParamsObject["remoteFrontend"];
},
- showConsole: function()
+ /**
+ * @return {boolean}
+ */
+ isDedicatedWorkerFrontend: function()
{
- if (this.consoleView.isShowing() && !WebInspector.inspectorView.drawer().isHiding())
- return;
- this.inspectorView.showViewInDrawer("console");
+ return !!WebInspector.queryParamsObject["dedicatedWorkerId"];
},
- _resetErrorAndWarningCounts: function()
+ _calculateWorkerInspectorTitle: function()
{
- WebInspector.inspectorView.setErrorAndWarningCounts(0, 0);
- },
+ var expression = "location.href";
+ if (WebInspector.queryParamsObject["isSharedWorker"])
+ expression += " + (this.name ? ' (' + this.name + ')' : '')";
+ RuntimeAgent.evaluate.invoke({expression:expression, doNotPauseOnExceptionsAndMuteConsole:true, returnByValue: true}, evalCallback.bind(this));
- _updateErrorAndWarningCounts: function()
- {
- var errors = WebInspector.console.errors;
- var warnings = WebInspector.console.warnings;
- WebInspector.inspectorView.setErrorAndWarningCounts(errors, warnings);
+ /**
+ * @param {?Protocol.Error} error
+ * @param {!RuntimeAgent.RemoteObject} result
+ * @param {boolean=} wasThrown
+ */
+ function evalCallback(error, result, wasThrown)
+ {
+ if (error || wasThrown) {
+ console.error(error);
+ return;
+ }
+ InspectorFrontendHost.inspectedURLChanged(result.value);
+ }
},
- get inspectedPageDomain()
+ _initializeDedicatedWorkerFrontend: function(workerId)
{
- var parsedURL = WebInspector.inspectedPageURL && WebInspector.inspectedPageURL.asParsedURL();
- return parsedURL ? parsedURL.host : "";
+ function receiveMessage(event)
+ {
+ var message = event.data;
+ InspectorBackend.dispatch(message);
+ }
+ window.addEventListener("message", receiveMessage, true);
+
+
+ InspectorBackend.sendMessageObjectToBackend = function(message)
+ {
+ window.opener.postMessage({workerId: workerId, command: "sendMessageToBackend", message: message}, "*");
+ }
},
- _initializeCapability: function(name, callback, error, result)
+ _loadCompletedForWorkers: function()
{
- Capabilities[name] = result;
- if (callback)
- callback();
+ // Make sure script execution of dedicated worker is resumed and then paused
+ // on the first script statement in case we autoattached to it.
+ if (WebInspector.queryParamsObject["workerPaused"]) {
+ DebuggerAgent.pause();
+ RuntimeAgent.run(calculateTitle);
+ } else if (WebInspector.isWorkerFrontend())
+ calculateTitle();
+
+ function calculateTitle()
+ {
+ WebInspector._calculateWorkerInspectorTitle();
+ }
},
- _zoomIn: function()
+ /**
+ * @return {boolean}
+ */
+ isWorkerFrontend: function()
{
- this._zoomLevel = Math.min(this._zoomLevel + 1, WebInspector.Zoom.Table.length - WebInspector.Zoom.DefaultOffset - 1);
- this._requestZoom();
+ return !!WebInspector.queryParamsObject["dedicatedWorkerId"] ||
+ !!WebInspector.queryParamsObject["isSharedWorker"];
},
- _zoomOut: function()
+ showConsole: function()
{
- this._zoomLevel = Math.max(this._zoomLevel - 1, -WebInspector.Zoom.DefaultOffset);
- this._requestZoom();
+ if (this.consoleView.isShowing())
+ return;
+ this.inspectorView.showViewInDrawer("console");
},
- _resetZoom: function()
+ _resetErrorAndWarningCounts: function()
{
- this._zoomLevel = 0;
- this._requestZoom();
+ WebInspector.inspectorView.setErrorAndWarningCounts(0, 0);
},
- _adjustExternalZoomFactor: function()
+ _updateErrorAndWarningCounts: function()
{
- var realZoomFactor = InspectorFrontendHost.zoomFactor();
- var expectedZoomFactor = this.zoomFactor();
- if (Math.abs(realZoomFactor - expectedZoomFactor) > 1e-3) {
- // Unexpected zoom factor means that it was overriden by external zoom.
- WebInspector.settings.externalZoomFactor.set(realZoomFactor);
- this._requestZoom();
- }
+ var errors = WebInspector.console.errors;
+ var warnings = WebInspector.console.warnings;
+ WebInspector.inspectorView.setErrorAndWarningCounts(errors, warnings);
},
- /**
- * @return {number}
- * @this {WebInspector}
- */
- zoomFactor: function()
+ get inspectedPageDomain()
{
- // For backwards compatibility, zoomLevel takes integers (with 0 being default zoom).
- var index = this._zoomLevel + WebInspector.Zoom.DefaultOffset;
- index = Math.min(WebInspector.Zoom.Table.length - 1, index);
- index = Math.max(0, index);
- return WebInspector.Zoom.Table[index] * WebInspector.settings.externalZoomFactor.get();
+ var parsedURL = WebInspector.inspectedPageURL && WebInspector.inspectedPageURL.asParsedURL();
+ return parsedURL ? parsedURL.host : "";
},
- _requestZoom: function()
+ _initializeCapability: function(name, callback, error, result)
{
- WebInspector.settings.zoomLevel.set(this._zoomLevel);
- InspectorFrontendHost.setZoomFactor(this.zoomFactor());
+ Capabilities[name] = result;
+ if (callback)
+ callback();
},
_debuggerPaused: function()
var pair = params[i].split("=");
WebInspector.queryParamsObject[pair[0]] = pair[1];
}
+
+ // Patch settings from the URL param (for tests).
+ var settingsParam = WebInspector.queryParamsObject["settings"];
+ if (settingsParam) {
+ try {
+ var settings = JSON.parse(window.decodeURI(settingsParam));
+ for (var key in settings)
+ localStorage[key] = settings[key];
+ } catch(e) {
+ // Ignore malformed settings.
+ }
+ }
})();}
WebInspector.suggestReload = function()
WebInspector.reload = function()
{
InspectorAgent.reset();
-
- var queryParams = window.location.search;
- var url = window.location.href;
- url = url.substring(0, url.length - queryParams.length);
- var queryParamsObject = {};
- for (var name in WebInspector.queryParamsObject)
- queryParamsObject[name] = WebInspector.queryParamsObject[name];
- if (this.dockController)
- queryParamsObject["dockSide"] = this.dockController.dockSide();
- var names = Object.keys(queryParamsObject);
- for (var i = 0; i < names.length; ++i)
- url += (i ? "&" : "?") + names[i] + "=" + queryParamsObject[names[i]];
- document.location = url;
+ window.location.reload();
}
WebInspector.loaded = function()
InspectorBackend.loadFromJSONIfNeeded("../protocol.json");
WebInspector.dockController = new WebInspector.DockController();
- if (WebInspector.WorkerManager.isDedicatedWorkerFrontend()) {
+ if (WebInspector.isDedicatedWorkerFrontend()) {
// Do not create socket for the worker front-end.
WebInspector.doLoadedDone();
return;
if (WebInspector.queryParamsObject.toolbarColor && WebInspector.queryParamsObject.textColor)
WebInspector.setToolbarColors(WebInspector.queryParamsObject.toolbarColor, WebInspector.queryParamsObject.textColor);
- WebInspector.WorkerManager.loaded();
+ var workerId = WebInspector.queryParamsObject["dedicatedWorkerId"];
+ if (workerId)
+ this._initializeDedicatedWorkerFrontend(workerId);
PageAgent.canScreencast(WebInspector._initializeCapability.bind(WebInspector, "canScreencast", null));
WorkerAgent.canInspectWorkers(WebInspector._initializeCapability.bind(WebInspector, "canInspectWorkers", WebInspector._doLoadedDoneWithCapabilities.bind(WebInspector)));
this.networkLog = new WebInspector.NetworkLog();
this.domAgent = new WebInspector.DOMAgent();
this.domAgent.addEventListener(WebInspector.DOMAgent.Events.InspectNodeRequested, this._inspectNodeRequested, this);
+ this.workerManager = new WebInspector.WorkerManager(Capabilities.canInspectWorkers);
this.runtimeModel = new WebInspector.RuntimeModel(this.resourceTreeModel);
- this._zoomLevel = WebInspector.settings.zoomLevel.get();
- // FIXME: when user changes external zoom factor, and after that opens inspector,
- // we should somehow rescale zoom-dependent settings, e.g. inspectorView split size.
- WebInspector.settings.externalZoomFactor.set(InspectorFrontendHost.zoomFactor());
- if (this._zoomLevel)
- this._requestZoom();
+ this.zoomManager = new WebInspector.ZoomManager();
this.advancedSearchController = new WebInspector.AdvancedSearchController();
- WebInspector.CSSMetadata.requestCSSShorthandData();
- this.consoleView = new WebInspector.ConsoleView(WebInspector.WorkerManager.isWorkerFrontend());
+ this.consoleView = new WebInspector.ConsoleView(WebInspector.isWorkerFrontend());
InspectorBackend.registerInspectorDispatcher(this);
this.timelineManager = new WebInspector.TimelineManager();
this.tracingAgent = new WebInspector.TracingAgent();
- if (!WebInspector.WorkerManager.isWorkerFrontend())
+ if (!WebInspector.isWorkerFrontend()) {
this.inspectElementModeController = new WebInspector.InspectElementModeController();
+ this.workerFrontendManager = new WebInspector.WorkerFrontendManager();
+ }
this.settingsController = new WebInspector.SettingsController();
var openAnchorLocationSetting = WebInspector.settings.createSetting("openLinkHandler", autoselectPanel);
this.openAnchorLocationRegistry = new WebInspector.HandlerRegistry(openAnchorLocationSetting);
this.openAnchorLocationRegistry.registerHandler(autoselectPanel, function() { return false; });
+ WebInspector.Linkifier.setLinkHandler(new WebInspector.HandlerRegistry.LinkHandler());
new WebInspector.WorkspaceController(this.workspace);
this.overridesSupport = new WebInspector.OverridesSupport();
this.overridesSupport.applyInitialOverrides();
- new WebInspector.DebuggerScriptMapping(this.workspace, this.networkWorkspaceProvider);
+ new WebInspector.DebuggerScriptMapping(this.debuggerModel, this.workspace, this.networkWorkspaceProvider);
this.liveEditSupport = new WebInspector.LiveEditSupport(this.workspace);
new WebInspector.CSSStyleSheetMapping(this.cssModel, this.workspace, this.networkWorkspaceProvider);
new WebInspector.PresentationConsoleMessageHelper(this.workspace);
WebInspector.inspectorView.show(document.body);
this._createGlobalStatusBarItems();
- if (this.overridesSupport.hasActiveOverrides()) {
- if (!WebInspector.settings.showEmulationViewInDrawer.get())
- WebInspector.settings.showEmulationViewInDrawer.set(true);
- WebInspector.inspectorView.showViewInDrawer("emulation");
- }
-
this.addMainEventListeners(document);
window.addEventListener("resize", this.windowResize.bind(this), true);
errorWarningCount.addEventListener("click", this.showConsole.bind(this), false);
this._updateErrorAndWarningCounts();
- this.extensionServer.initExtensions();
+ WebInspector.extensionServerProxy.setFrontendReady();
this.console.enableAgent();
- InspectorAgent.enable(WebInspector.inspectorView.showInitialPanel.bind(WebInspector.inspectorView));
this.databaseModel = new WebInspector.DatabaseModel();
this.domStorageModel = new WebInspector.DOMStorageModel();
-
this.cpuProfilerModel = new WebInspector.CPUProfilerModel();
- HeapProfilerAgent.enable();
- if (WebInspector.settings.showPaintRects.get() || WebInspector.settings.showDebugBorders.get() || WebInspector.settings.continuousPainting.get() ||
- WebInspector.settings.showFPSCounter.get() || WebInspector.settings.showScrollBottleneckRects.get()) {
- WebInspector.settings.showRenderingViewInDrawer.set(true);
- }
-
- WebInspector.settings.showMetricsRulers.addChangeListener(showRulersChanged);
- function showRulersChanged()
+ InspectorAgent.enable(inspectorAgentEnableCallback.bind(this));
+ /**
+ * @this {WebInspector}
+ */
+ function inspectorAgentEnableCallback()
{
- PageAgent.setShowViewportSizeOnResize(true, WebInspector.settings.showMetricsRulers.get());
+ WebInspector.inspectorView.showInitialPanel();
+
+ if (WebInspector.overridesSupport.hasActiveOverrides()) {
+ if (!WebInspector.settings.showEmulationViewInDrawer.get())
+ WebInspector.settings.showEmulationViewInDrawer.set(true);
+ WebInspector.inspectorView.showViewInDrawer("emulation", true);
+ }
+
+ if (WebInspector.settings.showPaintRects.get() || WebInspector.settings.showDebugBorders.get() || WebInspector.settings.continuousPainting.get() ||
+ WebInspector.settings.showFPSCounter.get() || WebInspector.settings.showScrollBottleneckRects.get()) {
+ WebInspector.settings.showRenderingViewInDrawer.set(true);
+ }
+
+ WebInspector.settings.showMetricsRulers.addChangeListener(showRulersChanged);
+ function showRulersChanged()
+ {
+ PageAgent.setShowViewportSizeOnResize(true, WebInspector.settings.showMetricsRulers.get());
+ }
+ showRulersChanged();
+
+ if (Capabilities.canScreencast)
+ this._screencastView.initialize();
}
- showRulersChanged();
- WebInspector.WorkerManager.loadCompleted();
+ this._loadCompletedForWorkers()
InspectorFrontendAPI.loadCompleted();
-
- if (Capabilities.canScreencast)
- this._screencastView.initialize();
WebInspector.notifications.dispatchEventToListeners(WebInspector.Events.InspectorLoaded);
}
WebInspector.windowResize = function(event)
{
- this._adjustExternalZoomFactor();
- if (WebInspector.inspectorView)
- WebInspector.inspectorView.onResize();
if (WebInspector.settingsController)
WebInspector.settingsController.resize();
}
WebInspector.documentClick = function(event)
{
var anchor = event.target.enclosingNodeOrSelfWithNodeName("a");
- if (!anchor || (anchor.target === "_blank"))
+ if (!anchor || !anchor.href || (anchor.target === "_blank"))
return;
// Prevent the link from navigating, since we don't do any navigation by following links normally.
return;
if (WebInspector.openAnchorLocationRegistry.dispatch({ url: anchor.href, lineNumber: anchor.lineNumber}))
return;
- if (WebInspector.showAnchorLocation(anchor))
+
+ var uiSourceCode = WebInspector.workspace.uiSourceCodeForURL(anchor.href);
+ if (uiSourceCode) {
+ WebInspector.Revealer.reveal(new WebInspector.UILocation(uiSourceCode, anchor.lineNumber || 0, anchor.columnNumber || 0));
return;
+ }
- var parsedURL = anchor.href.asParsedURL();
- if (parsedURL && parsedURL.scheme === "webkit-link-action") {
- if (parsedURL.host === "show-panel") {
- var panel = parsedURL.path.substring(1);
- if (WebInspector.panel(panel))
- WebInspector.showPanel(panel);
- }
+ var resource = WebInspector.resourceForURL(anchor.href);
+ if (resource) {
+ WebInspector.Revealer.reveal(resource);
return;
}
+ var request = WebInspector.networkLog.requestForURL(anchor.href);
+ if (request) {
+ WebInspector.Revealer.reveal(request);
+ return;
+ }
InspectorFrontendHost.openInNewTab(anchor.href);
}
section.addAlternateKeys(keys, WebInspector.UIString("Show general settings"));
}
+WebInspector.handleZoomEvent = function(event)
+{
+ switch (event.keyCode) {
+ case 107: // +
+ case 187: // +
+ InspectorFrontendHost.zoomIn();
+ return true;
+ case 109: // -
+ case 189: // -
+ InspectorFrontendHost.zoomOut();
+ return true;
+ case 48: // 0
+ case 96: // Numpad 0
+ // Zoom reset shortcut does not allow "Shift" when handled by the browser.
+ if (!event.shiftKey) {
+ InspectorFrontendHost.resetZoom();
+ return true;
+ }
+ break;
+ }
+ return false;
+};
+
WebInspector.postDocumentKeyDown = function(event)
{
if (event.handled)
var isValidZoomShortcut = WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) &&
!event.altKey &&
!InspectorFrontendHost.isStub;
- switch (event.keyCode) {
- case 107: // +
- case 187: // +
- if (isValidZoomShortcut) {
- WebInspector._zoomIn();
- event.consume(true);
- return;
- }
- break;
- case 109: // -
- case 189: // -
- if (isValidZoomShortcut) {
- WebInspector._zoomOut();
- event.consume(true);
- return;
- }
- break;
- case 48: // 0
- case 96: // Numpad 0
- // Zoom reset shortcut does not allow "Shift" when handled by the browser.
- if (isValidZoomShortcut && !event.shiftKey) {
- WebInspector._resetZoom();
- event.consume(true);
- return;
- }
- break;
+ if (isValidZoomShortcut && WebInspector.handleZoomEvent(event)) {
+ event.consume(true);
+ return;
}
if (event.keyCode === WebInspector.KeyboardShortcut.Keys.F1.code ||
var Esc = "U+001B";
var doNotOpenDrawerOnEsc = WebInspector.experimentsSettings.doNotOpenDrawerOnEsc.isEnabled();
if (event.keyIdentifier === Esc) {
- if (this.inspectorView.drawer().visible())
- this.inspectorView.drawer().hide();
+ if (this.inspectorView.drawerVisible())
+ this.inspectorView.closeDrawer();
else if (!doNotOpenDrawerOnEsc)
- this.inspectorView.drawer().show();
+ this.inspectorView.showDrawer();
}
if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Tilde.code && event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
function callback(nodeId)
{
WebInspector._updateFocusedNode(nodeId);
+ InspectorFrontendHost.inspectElementCompleted();
object.release();
}
object.pushNodeToFrontend(callback);
return;
}
- if (hints.databaseId)
- WebInspector.showPanel("resources").selectDatabase(WebInspector.databaseModel.databaseForId(hints.databaseId));
- else if (hints.domStorageId)
- WebInspector.showPanel("resources").selectDOMStorage(WebInspector.domStorageModel.storageForId(hints.domStorageId));
- else if (hints.copyToClipboard)
+ if (hints.copyToClipboard)
InspectorFrontendHost.copyText(object.value);
object.release();
}
WebInspector.showPanel("elements").revealAndSelectNode(nodeId);
}
-WebInspector.showAnchorLocation = function(anchor)
-{
- var preferredPanel = this.panels[anchor.preferredPanel];
- if (preferredPanel && WebInspector._showAnchorLocationInPanel(anchor, preferredPanel))
- return true;
- if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("sources")))
- return true;
- if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("resources")))
- return true;
- if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("network")))
- return true;
- return false;
-}
-
-WebInspector._showAnchorLocationInPanel = function(anchor, panel)
-{
- if (!panel)
- return false;
-
- var result = panel.showAnchorLocation(anchor);
- if (result) {
- // FIXME: support webkit-html-external-link links here.
- if (anchor.classList.contains("webkit-html-external-link")) {
- anchor.classList.remove("webkit-html-external-link");
- anchor.classList.add("webkit-html-resource-link");
- }
- }
- return result;
-}
-
WebInspector.evaluateInConsole = function(expression, showResultOnly)
{
this.showConsole();
doc.addEventListener("beforecopy", this.documentCanCopy.bind(this), true);
doc.addEventListener("copy", this.documentCopy.bind(this), false);
doc.addEventListener("contextmenu", this.contextMenuEventFired.bind(this), true);
- doc.addEventListener("click", this.documentClick.bind(this), true);
-}
-
-WebInspector.Zoom = {
- Table: [0.25, 0.33, 0.5, 0.66, 0.75, 0.9, 1, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4, 5],
- DefaultOffset: 6
-}
-
-
-// Ex-DevTools.js content
-
-/**
- * @param {!ExtensionDescriptor} extensionInfo
- * @return {string}
- */
-function buildPlatformExtensionAPI(extensionInfo)
-{
- return "var extensionInfo = " + JSON.stringify(extensionInfo) + ";" +
- "var tabId = " + WebInspector._inspectedTabId + ";" +
- platformExtensionAPI.toString();
-}
-
-WebInspector.setInspectedTabId = function(tabId)
-{
- WebInspector._inspectedTabId = tabId;
+ doc.addEventListener("click", this.documentClick.bind(this), false);
}
window.DEBUG = true;