From d850db6de5dafcbd6ffdb10141bcb04c4accf65c Mon Sep 17 00:00:00 2001 From: "caseq@chromium.org" Date: Mon, 26 Sep 2011 12:15:14 +0000 Subject: [PATCH] 2011-09-26 Andrey Kosyakov Web Inspector: [Extensions API] allow resources to hook on click on resource links https://bugs.webkit.org/show_bug.cgi?id=68528 Reviewed by Yury Semikhatsky. * WebCore.gypi: * WebCore.vcproj/WebCore.vcproj: * inspector/front-end/ExtensionAPI.js: (injectedExtensionAPI.Console.prototype.get Severity): (injectedExtensionAPI.Panels.prototype.create): (injectedExtensionAPI.Panels.prototype.setOpenResourceHandler.else.callbackWrapper): (injectedExtensionAPI.Panels.prototype.setOpenResourceHandler): (injectedExtensionAPI.ExtensionServerClient.prototype.hasHandler): (injectedExtensionAPI.ExtensionServerClient.prototype.deregisterHandler): * inspector/front-end/ExtensionServer.js: (WebInspector.ExtensionServer): (WebInspector.ExtensionServer.prototype._onSetOpenResourceHandler): (WebInspector.ExtensionServer.prototype._handleAnchorClicked): (WebInspector.ExtensionServer.prototype._addExtensions): (WebInspector.ExtensionServer.prototype._addExtension): (WebInspector.ExtensionServer.prototype._registerExtension): * inspector/front-end/SettingsScreen.js: (WebInspector.SettingsScreen): (WebInspector.SettingsScreen.prototype._createCustomSetting): * inspector/front-end/WebKit.qrc: * inspector/front-end/helpScreen.css: (.help-content select): (.help-content select:disabled): (.help-content option): * inspector/front-end/inspector.html: * inspector/front-end/inspector.js: (WebInspector.set attached): (WebInspector._showAnchorLocation): 2011-09-26 Andrey Kosyakov Web Inspector: [Extensions API] allow resources to hook on click on resource links https://bugs.webkit.org/show_bug.cgi?id=68528 Reviewed by Yury Semikhatsky. * http/tests/inspector/extensions-test.js: (initialize_ExtensionsTest.InspectorTest.runExtensionTests): (initialize_ExtensionsTest): * inspector/extensions/extensions-api-expected.txt: * inspector/extensions/extensions-resources-expected.txt: * inspector/extensions/extensions-resources.html: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@95942 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 14 +++ .../http/tests/inspector/extensions-test.js | 2 +- .../extensions/extensions-api-expected.txt | 1 + .../extensions/extensions-resources-expected.txt | 7 ++ .../inspector/extensions/extensions-resources.html | 36 +++++++ Source/WebCore/ChangeLog | 36 +++++++ Source/WebCore/English.lproj/localizedStrings.js | Bin 64682 -> 65028 bytes Source/WebCore/WebCore.gypi | 1 + Source/WebCore/WebCore.vcproj/WebCore.vcproj | 4 + Source/WebCore/inspector/front-end/ExtensionAPI.js | 30 +++++- .../WebCore/inspector/front-end/ExtensionServer.js | 32 +++++- .../WebCore/inspector/front-end/HandlerRegistry.js | 113 +++++++++++++++++++++ Source/WebCore/inspector/front-end/Settings.js | 3 +- .../WebCore/inspector/front-end/SettingsScreen.js | 14 +++ Source/WebCore/inspector/front-end/WebKit.qrc | 1 + Source/WebCore/inspector/front-end/helpScreen.css | 18 ++++ Source/WebCore/inspector/front-end/inspector.html | 1 + Source/WebCore/inspector/front-end/inspector.js | 9 +- Source/WebKit/chromium/src/js/DevTools.js | 1 + 19 files changed, 314 insertions(+), 9 deletions(-) create mode 100644 Source/WebCore/inspector/front-end/HandlerRegistry.js diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index 532c201..6d2237e 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,17 @@ +2011-09-26 Andrey Kosyakov + + Web Inspector: [Extensions API] allow resources to hook on click on resource links + https://bugs.webkit.org/show_bug.cgi?id=68528 + + Reviewed by Yury Semikhatsky. + + * http/tests/inspector/extensions-test.js: + (initialize_ExtensionsTest.InspectorTest.runExtensionTests): + (initialize_ExtensionsTest): + * inspector/extensions/extensions-api-expected.txt: + * inspector/extensions/extensions-resources-expected.txt: + * inspector/extensions/extensions-resources.html: + 2011-09-23 Ilya Tikhonovsky Web Inspector: Timeline: record root event for the function calls enforced by console eval. diff --git a/LayoutTests/http/tests/inspector/extensions-test.js b/LayoutTests/http/tests/inspector/extensions-test.js index 48c6985..821d249 100644 --- a/LayoutTests/http/tests/inspector/extensions-test.js +++ b/LayoutTests/http/tests/inspector/extensions-test.js @@ -50,7 +50,7 @@ InspectorTest.runExtensionTests = function() pageURL.replace(/^(https?:\/\/[^/]*\/).*$/,"$1") : pageURL.replace(/\/inspector\/extensions\/[^/]*$/, "/http/tests")) + "/inspector/resources/extension-main.html"; - WebInspector.addExtensions([{ startPage: extensionURL }]); + WebInspector.addExtensions([{ startPage: extensionURL, name: "test extension" }]); }); } diff --git a/LayoutTests/inspector/extensions/extensions-api-expected.txt b/LayoutTests/inspector/extensions/extensions-api-expected.txt index 71b2100..de4215e 100644 --- a/LayoutTests/inspector/extensions/extensions-api-expected.txt +++ b/LayoutTests/inspector/extensions/extensions-api-expected.txt @@ -37,6 +37,7 @@ RUNNING TEST: extension_testAPI } } create : + setOpenResourceHandler : } network : { onRequestFinished : { diff --git a/LayoutTests/inspector/extensions/extensions-resources-expected.txt b/LayoutTests/inspector/extensions/extensions-resources-expected.txt index 876be30..1d09ffa 100644 --- a/LayoutTests/inspector/extensions/extensions-resources-expected.txt +++ b/LayoutTests/inspector/extensions/extensions-resources-expected.txt @@ -1,3 +1,4 @@ +CONSOLE MESSAGE: line 146: don't panic! Tests resource-related methods of WebInspector extension API @@ -67,6 +68,12 @@ resource added: setContent : } } +RUNNING TEST: extension_testOpenResourceHandler +handleOpenResource() invoked [this should only appear once!]: +{ + url : .../extensions-resources.html + type : "document" +} RUNNING TEST: extension_testSetResourceContent div.test width after stylesheet edited (should be 126): 126 All tests done. diff --git a/LayoutTests/inspector/extensions/extensions-resources.html b/LayoutTests/inspector/extensions/extensions-resources.html index bb15214..0115eed 100644 --- a/LayoutTests/inspector/extensions/extensions-resources.html +++ b/LayoutTests/inspector/extensions/extensions-resources.html @@ -7,6 +7,21 @@ diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 647428d..5aef6d2 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,39 @@ +2011-09-26 Andrey Kosyakov + + Web Inspector: [Extensions API] allow resources to hook on click on resource links + https://bugs.webkit.org/show_bug.cgi?id=68528 + + Reviewed by Yury Semikhatsky. + + * WebCore.gypi: + * WebCore.vcproj/WebCore.vcproj: + * inspector/front-end/ExtensionAPI.js: + (injectedExtensionAPI.Console.prototype.get Severity): + (injectedExtensionAPI.Panels.prototype.create): + (injectedExtensionAPI.Panels.prototype.setOpenResourceHandler.else.callbackWrapper): + (injectedExtensionAPI.Panels.prototype.setOpenResourceHandler): + (injectedExtensionAPI.ExtensionServerClient.prototype.hasHandler): + (injectedExtensionAPI.ExtensionServerClient.prototype.deregisterHandler): + * inspector/front-end/ExtensionServer.js: + (WebInspector.ExtensionServer): + (WebInspector.ExtensionServer.prototype._onSetOpenResourceHandler): + (WebInspector.ExtensionServer.prototype._handleAnchorClicked): + (WebInspector.ExtensionServer.prototype._addExtensions): + (WebInspector.ExtensionServer.prototype._addExtension): + (WebInspector.ExtensionServer.prototype._registerExtension): + * inspector/front-end/SettingsScreen.js: + (WebInspector.SettingsScreen): + (WebInspector.SettingsScreen.prototype._createCustomSetting): + * inspector/front-end/WebKit.qrc: + * inspector/front-end/helpScreen.css: + (.help-content select): + (.help-content select:disabled): + (.help-content option): + * inspector/front-end/inspector.html: + * inspector/front-end/inspector.js: + (WebInspector.set attached): + (WebInspector._showAnchorLocation): + 2011-09-23 Ilya Tikhonovsky Web Inspector: Timeline: record root event for the function calls enforced by console eval. diff --git a/Source/WebCore/English.lproj/localizedStrings.js b/Source/WebCore/English.lproj/localizedStrings.js index 13eed344eb558a02e1a8819b7ce4dea2f91f4cd0..a3cefa18382255498c9e97d3d1c7582f869dc3b9 100644 GIT binary patch delta 217 zcmZ4Wley&&^9EOM#^}j?-iniL3%NE=^p@N>`Inw5t1CkVL&@YiXK5&Fp0nlT)kQ+Q z#S97znGAUhdLTHNuSA|3No4YY2;KTbpo#*9M4*~fh8!R}nIVHApP?AY%LDQf8A=&S kfc#t_s|09LGLX&z!b%1uhFGAyEf6aK#mF_onu&o60Hx + + diff --git a/Source/WebCore/inspector/front-end/ExtensionAPI.js b/Source/WebCore/inspector/front-end/ExtensionAPI.js index 7cc3191..1698a19 100644 --- a/Source/WebCore/inspector/front-end/ExtensionAPI.js +++ b/Source/WebCore/inspector/front-end/ExtensionAPI.js @@ -150,7 +150,7 @@ Console.prototype = { get Severity() { return apiPrivate.console.Severity; - }, + } }; function Network() @@ -229,6 +229,24 @@ Panels.prototype = { page: page }; extensionServer.sendRequest(request, callback && bind(callback, this, new ExtensionPanel(id))); + }, + + setOpenResourceHandler: function(callback) + { + var hadHandler = extensionServer.hasHandler("open-resource"); + + if (!callback) + extensionServer.deregisterHandler("open-resource"); + else { + function callbackWrapper(message) + { + callback.call(null, message.resource); + } + extensionServer.registerHandler("open-resource", callbackWrapper); + } + // Only send command if we either removed an existing handler or added handler and had none before. + if (hadHandler === !callback) + extensionServer.sendRequest({ command: "setOpenResourceHandler", "handlerPresent": !!callback }); } } @@ -513,11 +531,21 @@ ExtensionServerClient.prototype = { return this._port.postMessage(message); }, + hasHandler: function(command) + { + return !!this._handlers[command]; + }, + registerHandler: function(command, handler) { this._handlers[command] = handler; }, + deregisterHandler: function(command) + { + delete this._handlers[command]; + }, + nextObjectId: function() { return injectedScriptId + "_" + ++this._lastObjectId; diff --git a/Source/WebCore/inspector/front-end/ExtensionServer.js b/Source/WebCore/inspector/front-end/ExtensionServer.js index e627a24..fd2d850 100644 --- a/Source/WebCore/inspector/front-end/ExtensionServer.js +++ b/Source/WebCore/inspector/front-end/ExtensionServer.js @@ -38,7 +38,7 @@ WebInspector.ExtensionServer = function() this._extraHeaders = {}; this._requests = {}; this._lastRequestId = 0; - this._allowedOrigins = {}; + this._registeredExtensions = {}; this._status = new WebInspector.ExtensionStatus(); this._registerHandler("addAuditCategory", this._onAddAuditCategory.bind(this)); @@ -55,6 +55,7 @@ WebInspector.ExtensionServer = function() this._registerHandler("getResourceContent", this._onGetResourceContent.bind(this)); this._registerHandler("log", this._onLog.bind(this)); this._registerHandler("reload", this._onReload.bind(this)); + this._registerHandler("setOpenResourceHandler", this._onSetOpenResourceHandler.bind(this)); this._registerHandler("setResourceContent", this._onSetResourceContent.bind(this)); this._registerHandler("setSidebarHeight", this._onSetSidebarHeight.bind(this)); this._registerHandler("setSidebarContent", this._onSetSidebarContent.bind(this)); @@ -251,6 +252,27 @@ WebInspector.ExtensionServer.prototype = { sidebar.setPage(this._expandResourcePath(port._extensionOrigin, message.page)); }, + _onSetOpenResourceHandler: function(message, port) + { + var name = this._registeredExtensions[port._extensionOrigin].name || ("Extension " + port._extensionOrigin); + if (message.handlerPresent) + WebInspector.openAnchorLocationRegistry.registerHandler(name, this._handleAnchorClicked.bind(this, port)); + else + WebInspector.openAnchorLocationRegistry.deregisterHandler(name); + }, + + _handleAnchorClicked: function(port, anchor) + { + var resource = WebInspector.resourceForURL(anchor.href); + if (!resource) + return false; + port.postMessage({ + command: "open-resource", + resource: this._makeResource(resource) + }); + return true; + }, + _onLog: function(message) { WebInspector.log(message.message); @@ -528,10 +550,10 @@ WebInspector.ExtensionServer.prototype = { // See ExtensionAPI.js and ExtensionCommon.js for details. InspectorFrontendHost.setExtensionAPI(this._buildExtensionAPIScript()); for (var i = 0; i < extensions.length; ++i) - this._addExtension(extensions[i].startPage); + this._addExtension(extensions[i].startPage, extensions[i].name); }, - _addExtension: function(startPage) + _addExtension: function(startPage, name) { const urlOriginRegExp = new RegExp("([^:]+:\/\/[^/]*)\/"); // Can't use regexp literal here, MinJS chokes on it. @@ -541,7 +563,7 @@ WebInspector.ExtensionServer.prototype = { console.error("Skipping extension with invalid URL: " + startPage); return false; } - this._allowedOrigins[originMatch[1]] = true; + this._registeredExtensions[originMatch[1]] = { name: name }; var iframe = document.createElement("iframe"); iframe.src = startPage; iframe.style.display = "none"; @@ -567,7 +589,7 @@ WebInspector.ExtensionServer.prototype = { _registerExtension: function(origin, port) { - if (!this._allowedOrigins.hasOwnProperty(origin)) { + if (!this._registeredExtensions.hasOwnProperty(origin)) { if (origin !== location.origin) // Just ignore inspector frames. console.error("Ignoring unauthorized client request from " + origin); return; diff --git a/Source/WebCore/inspector/front-end/HandlerRegistry.js b/Source/WebCore/inspector/front-end/HandlerRegistry.js new file mode 100644 index 0000000..e397106 --- /dev/null +++ b/Source/WebCore/inspector/front-end/HandlerRegistry.js @@ -0,0 +1,113 @@ +/* + * 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. + */ + +WebInspector.HandlerRegistry = function(setting) +{ + WebInspector.Object.call(this); + this._handlers = {}; + this._setting = setting; + this._activeHandler = this._setting.get(); +} + +WebInspector.HandlerRegistry.prototype = { + get handlerNames() + { + return Object.getOwnPropertyNames(this._handlers); + }, + + get activeHandler() + { + return this._activeHandler; + }, + + set activeHandler(value) + { + this._activeHandler = value; + this._setting.set(value); + }, + + dispatch: function() + { + var handler = this._handlers[this._activeHandler]; + var result = handler && handler.apply(null, arguments); + return !!result; + }, + + registerHandler: function(name, handler) + { + this._handlers[name] = handler; + this.dispatchEventToListeners(WebInspector.HandlerRegistry.EventTypes.HandlersUpdated); + }, + + deregisterHandler: function(name) + { + delete this._handlers[name]; + this.dispatchEventToListeners(WebInspector.HandlerRegistry.EventTypes.HandlersUpdated); + } +} + +WebInspector.HandlerRegistry.EventTypes = { + HandlersUpdated: "HandlersUpdated" +} + +WebInspector.HandlerRegistry.prototype.__proto__ = WebInspector.Object.prototype; + +WebInspector.HandlerSelector = function(handlerRegistry) +{ + this._handlerRegistry = handlerRegistry; + this.element = document.createElement("select"); + this.element.addEventListener("change", this._onChange.bind(this), false); + this._update(); + this._handlerRegistry.addEventListener(WebInspector.HandlerRegistry.EventTypes.HandlersUpdated, this._update.bind(this)); +} + +WebInspector.HandlerSelector.prototype = +{ + _update: function() + { + this.element.removeChildren(); + var names = this._handlerRegistry.handlerNames; + var activeHandler = this._handlerRegistry.activeHandler; + + for (var i = 0; i < names.length; ++i) { + var option = document.createElement("option"); + option.textContent = names[i]; + option.selected = activeHandler === names[i]; + this.element.appendChild(option); + } + this.element.disabled = names.length <= 1; + }, + + _onChange: function(event) + { + var value = event.target.value; + this._handlerRegistry.activeHandler = value; + } +} diff --git a/Source/WebCore/inspector/front-end/Settings.js b/Source/WebCore/inspector/front-end/Settings.js index 2571e26..a022d11 100644 --- a/Source/WebCore/inspector/front-end/Settings.js +++ b/Source/WebCore/inspector/front-end/Settings.js @@ -55,7 +55,8 @@ var Preferences = { canInspectWorkers: false, canClearCacheAndCookies: false, canDisableCache: false, - showNetworkPanelInitiatorColumn: false + showNetworkPanelInitiatorColumn: false, + haveExtensions: false } /** diff --git a/Source/WebCore/inspector/front-end/SettingsScreen.js b/Source/WebCore/inspector/front-end/SettingsScreen.js index fbc485a..fa53d8d 100644 --- a/Source/WebCore/inspector/front-end/SettingsScreen.js +++ b/Source/WebCore/inspector/front-end/SettingsScreen.js @@ -58,6 +58,11 @@ WebInspector.SettingsScreen = function() p.appendChild(this._createCheckboxSetting(WebInspector.UIString("Log XMLHttpRequests"), WebInspector.settings.monitoringXHREnabled)); p.appendChild(this._createCheckboxSetting(WebInspector.UIString("Preserve log upon navigation"), WebInspector.settings.preserveConsoleLog)); + if (Preferences.haveExtensions) { + var handlerSelector = new WebInspector.HandlerSelector(WebInspector.openAnchorLocationRegistry); + p = this._appendSection(WebInspector.UIString("Extensions"), true); + p.appendChild(this._createCustomSetting(WebInspector.UIString("Open links in..."), handlerSelector.element)); + } var table = document.createElement("table"); table.className = "help-table"; var tr = document.createElement("tr"); @@ -140,6 +145,15 @@ WebInspector.SettingsScreen.prototype = { pp.appendChild(fieldsetElement); return pp; + }, + + _createCustomSetting: function(name, element) + { + var div = document.createElement("div"); + var p = div.createChild("p"); + p.textContent = name; + div.appendChild(element); + return div; } }; diff --git a/Source/WebCore/inspector/front-end/WebKit.qrc b/Source/WebCore/inspector/front-end/WebKit.qrc index de5cad4..d27acb5 100644 --- a/Source/WebCore/inspector/front-end/WebKit.qrc +++ b/Source/WebCore/inspector/front-end/WebKit.qrc @@ -54,6 +54,7 @@ FontView.js GoToLineDialog.js HAREntry.js + HandlerRegistry.js HeapSnapshot.js HeapSnapshotProxy.js HeapSnapshotWorker.js diff --git a/Source/WebCore/inspector/front-end/helpScreen.css b/Source/WebCore/inspector/front-end/helpScreen.css index 38fee18..f69cd21 100644 --- a/Source/WebCore/inspector/front-end/helpScreen.css +++ b/Source/WebCore/inspector/front-end/helpScreen.css @@ -188,3 +188,21 @@ body.platform-mac .help-key { margin-right: 0; margin-right: 4px; } + +.help-content select { + margin-left: 1em; + background-color: rgb(64, 64, 64); + color: white; + border-color: black; + padding: 0px 4px; +} + +.help-content select:disabled { + background-color: rgb(32, 32, 32); + color: graytext; +} + +.help-content option { + background-color: black; + color: white; +} diff --git a/Source/WebCore/inspector/front-end/inspector.html b/Source/WebCore/inspector/front-end/inspector.html index ba12f6c..480d6f5 100644 --- a/Source/WebCore/inspector/front-end/inspector.html +++ b/Source/WebCore/inspector/front-end/inspector.html @@ -178,6 +178,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +
diff --git a/Source/WebCore/inspector/front-end/inspector.js b/Source/WebCore/inspector/front-end/inspector.js index d930f82..1bc7adb 100644 --- a/Source/WebCore/inspector/front-end/inspector.js +++ b/Source/WebCore/inspector/front-end/inspector.js @@ -298,7 +298,7 @@ var WebInspector = { this._dockToggleButton.toggled = !x; } - // This may be called before onLoadedDone, hence the bulk of inspector objects may + // This may be called before doLoadedDone, hence the bulk of inspector objects may // not be created yet. if (WebInspector.toolbar) WebInspector.toolbar.attached = x; @@ -549,6 +549,11 @@ WebInspector.doLoadedDone = function() errorWarningCount.addEventListener("click", this.showConsole.bind(this), false); this._updateErrorAndWarningCounts(); + var autoselectPanel = WebInspector.UIString("a panel chosen automatically"); + var openAnchorLocationSetting = WebInspector.settings.createSetting("openLinkHandler", autoselectPanel); + this.openAnchorLocationRegistry = new WebInspector.HandlerRegistry(openAnchorLocationSetting); + this.openAnchorLocationRegistry.registerHandler(autoselectPanel, function() { return false; }); + this.extensionServer.initExtensions(); this.console.enableAgent(); @@ -1222,6 +1227,8 @@ WebInspector.displayNameForURL = function(url) WebInspector._showAnchorLocation = function(anchor) { + if (WebInspector.openAnchorLocationRegistry.dispatch(anchor)) + return true; var preferedPanel = this.panels[anchor.getAttribute("preferred_panel") || "resources"]; if (WebInspector._showAnchorLocationInPanel(anchor, preferedPanel)) return true; diff --git a/Source/WebKit/chromium/src/js/DevTools.js b/Source/WebKit/chromium/src/js/DevTools.js index 3a7fdfd..515843e 100644 --- a/Source/WebKit/chromium/src/js/DevTools.js +++ b/Source/WebKit/chromium/src/js/DevTools.js @@ -56,6 +56,7 @@ var context = {}; // Used by WebCore's inspector routines. Preferences.canClearCacheAndCookies = true; Preferences.canDisableCache = true; Preferences.showNetworkPanelInitiatorColumn = true; + Preferences.haveExtensions = true; })(); // Recognize WebP as a valid image mime type. -- 2.7.4