Diff
Modified: trunk/Source/WebInspectorUI/ChangeLog (237651 => 237652)
--- trunk/Source/WebInspectorUI/ChangeLog 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/ChangeLog 2018-10-31 21:19:11 UTC (rev 237652)
@@ -1,3 +1,130 @@
+2018-10-31 Joseph Pecoraro <pecor...@apple.com>
+
+ Web Inspector: Separate target initialization from frontend initialization
+ https://bugs.webkit.org/show_bug.cgi?id=191052
+ <rdar://problem/45658384>
+
+ Reviewed by Brian Burg.
+
+ * UserInterface/Base/Main.js:
+ (WI.loaded):
+ (WI.performOneTimeFrontendInitializationsUsingTarget):
+ Create the targets after the rest of frontend initialization. This is a step
+ toward a frontend opening and being told about multiple targets instead of
+ knowing in advance a single target it is connected to. All backend
+ messages during frontend initialization now happen with an explicit target.
+
+ * UserInterface/Controllers/ApplicationCacheManager.js:
+ (WI.ApplicationCacheManager):
+ (WI.ApplicationCacheManager.prototype.initializeTarget):
+ (WI.ApplicationCacheManager.prototype.initialize):
+ * UserInterface/Controllers/CSSManager.js:
+ (WI.CSSManager):
+ (WI.CSSManager.prototype.initializeTarget):
+ * UserInterface/Controllers/CanvasManager.js:
+ (WI.CanvasManager):
+ (WI.CanvasManager.prototype.initializeTarget):
+ * UserInterface/Controllers/ConsoleManager.js:
+ (WI.ConsoleManager):
+ (WI.ConsoleManager.prototype.initializeLogChannels):
+ * UserInterface/Controllers/DOMManager.js:
+ (WI.DOMManager):
+ (WI.DOMManager.prototype.initializeTarget):
+ * UserInterface/Controllers/DOMStorageManager.js:
+ (WI.DOMStorageManager):
+ (WI.DOMStorageManager.prototype.initializeTarget):
+ * UserInterface/Controllers/DatabaseManager.js:
+ (WI.DatabaseManager):
+ (WI.DatabaseManager.prototype.initializeTarget):
+ * UserInterface/Controllers/DebuggerManager.js:
+ (WI.DebuggerManager):
+ (WI.DebuggerManager.prototype.initializeTarget):
+ (WI.DebuggerManager.restoreBreakpointsSoon): Deleted.
+ * UserInterface/Controllers/HeapManager.js:
+ (WI.HeapManager.prototype.initializeTarget):
+ * UserInterface/Controllers/IndexedDBManager.js:
+ (WI.IndexedDBManager):
+ (WI.IndexedDBManager.prototype.initializeTarget):
+ * UserInterface/Controllers/LayerTreeManager.js:
+ (WI.LayerTreeManager.prototype.initializeTarget):
+ * UserInterface/Controllers/MemoryManager.js:
+ (WI.MemoryManager.prototype.initializeTarget):
+ * UserInterface/Controllers/NetworkManager.js:
+ (WI.NetworkManager):
+ (WI.NetworkManager.prototype.initializeTarget):
+ * UserInterface/Controllers/RuntimeManager.js:
+ (WI.RuntimeManager):
+ (WI.RuntimeManager.prototype.initializeTarget):
+ * UserInterface/Controllers/TargetManager.js:
+ (WI.TargetManager):
+ (WI.TargetManager.prototype.initializeTargetsWithMainTarget):
+ * UserInterface/Controllers/TimelineManager.js:
+ (WI.TimelineManager):
+ (WI.TimelineManager.prototype.initializeTarget):
+ (WI.TimelineManager.prototype.set enabledTimelineTypes):
+ (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
+ * UserInterface/Controllers/WorkerManager.js:
+ (WI.WorkerManager):
+ (WI.WorkerManager.prototype.initializeTarget):
+ Move Target initialization out of the constructor into a top level
+ `initializeTarget` function. This will be expected to be called
+ by any target that the frontend connects to.
+
+ (WI.DebuggerManager.prototype._pauseForInternalScriptsDidChange):
+ Drive-by fix. Update all targets if the setting changes.
+
+ (WI.WorkerManager.prototype.workerCreated):
+ Call initialize on the new target.
+
+ * UserInterface/Models/CSSCompletions.js:
+ (WI.CSSCompletions.initializeCSSCompletions):
+ (WI.CSSCompletions.requestCSSCompletions): Deleted.
+ Rename requestCSSCompletions to initializeCSSCompletions to try
+ and standardize on "initialize" being used for most frontend one
+ time initialization tasks. This being one such operation that
+ only needs to be performed once on a target that supports it.
+
+ * UserInterface/Protocol/Target.js:
+ (WI.Target):
+ (WI.Target.prototype.initialize):
+ Perform explicit target initialization, such as initializing
+ the state of all backend domains / agents. This is done by asking
+ each of the managers to do initialization work for this target.
+
+ (WI.Target.prototype.get ApplicationCacheAgent):
+ (WI.Target.prototype.get CSSAgent):
+ (WI.Target.prototype.get CanvasAgent):
+ (WI.Target.prototype.get ConsoleAgent):
+ (WI.Target.prototype.get DOMAgent):
+ (WI.Target.prototype.get DOMDebuggerAgent):
+ (WI.Target.prototype.get DOMStorageAgent):
+ (WI.Target.prototype.get DatabaseAgent):
+ (WI.Target.prototype.get DebuggerAgent):
+ (WI.Target.prototype.get HeapAgent):
+ (WI.Target.prototype.get IndexedDBAgent):
+ (WI.Target.prototype.get InspectorAgent):
+ (WI.Target.prototype.get LayerTreeAgent):
+ (WI.Target.prototype.get MemoryAgent):
+ (WI.Target.prototype.get NetworkAgent):
+ (WI.Target.prototype.get PageAgent):
+ (WI.Target.prototype.get RecordingAgent):
+ (WI.Target.prototype.get RuntimeAgent):
+ (WI.Target.prototype.get ScriptProfilerAgent):
+ (WI.Target.prototype.get ServiceWorkerAgent):
+ (WI.Target.prototype.get TargetAgent):
+ (WI.Target.prototype.get TimelineAgent):
+ (WI.Target.prototype.get WorkerAgent):
+ Accessors for all of the agents on a Target.
+
+ * UserInterface/Protocol/WorkerTarget.js:
+ (WI.WorkerTarget):
+ This is now automatically done in the base class.
+
+ * UserInterface/Test/Test.js:
+ (WI.loaded):
+ (WI.performOneTimeFrontendInitializationsUsingTarget):
+ New necessary top level hooks, and initialize more like Main.js.
+
2018-10-31 Devin Rousso <drou...@apple.com>
Web Inspector: Audit: show metadata for results
Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -88,17 +88,6 @@
if (InspectorBackend.registerCanvasDispatcher)
InspectorBackend.registerCanvasDispatcher(new WI.CanvasObserver);
- // Main backend target.
- WI.mainTarget = new WI.MainTarget;
- WI.pageTarget = WI.sharedApp.debuggableType === WI.DebuggableType.Web ? WI.mainTarget : null;
-
- // Enable agents.
- if (window.InspectorAgent)
- InspectorAgent.enable();
-
- // Perform one-time tasks.
- WI.CSSCompletions.requestCSSCompletions();
-
// Listen for the ProvisionalLoadStarted event before registering for events so our code gets called before any managers or sidebars.
// This lets us save a state cookie before any managers or sidebars do any resets that would affect state (namely TimelineManager).
WI.Frame.addEventListener(WI.Frame.Event.ProvisionalLoadStarted, this._provisionalLoadStarted, this);
@@ -108,46 +97,38 @@
// Create the singleton managers next, before the user interface elements, so the user interface can register
// as event listeners on these managers.
- this.targetManager = new WI.TargetManager;
- this.branchManager = new WI.BranchManager;
- this.networkManager = new WI.NetworkManager;
- this.domStorageManager = new WI.DOMStorageManager;
- this.databaseManager = new WI.DatabaseManager;
- this.indexedDBManager = new WI.IndexedDBManager;
- this.domManager = new WI.DOMManager;
- this.cssManager = new WI.CSSManager;
- this.consoleManager = new WI.ConsoleManager;
- this.runtimeManager = new WI.RuntimeManager;
- this.heapManager = new WI.HeapManager;
- this.memoryManager = new WI.MemoryManager;
- this.applicationCacheManager = new WI.ApplicationCacheManager;
- this.timelineManager = new WI.TimelineManager;
- this.debuggerManager = new WI.DebuggerManager;
- this.layerTreeManager = new WI.LayerTreeManager;
- this.workerManager = new WI.WorkerManager;
- this.domDebuggerManager = new WI.DOMDebuggerManager;
- this.canvasManager = new WI.CanvasManager;
- this.auditManager = new WI.AuditManager;
+ WI.managers = [
+ WI.targetManager = new WI.TargetManager,
+ WI.branchManager = new WI.BranchManager,
+ WI.networkManager = new WI.NetworkManager,
+ WI.domStorageManager = new WI.DOMStorageManager,
+ WI.databaseManager = new WI.DatabaseManager,
+ WI.indexedDBManager = new WI.IndexedDBManager,
+ WI.domManager = new WI.DOMManager,
+ WI.cssManager = new WI.CSSManager,
+ WI.consoleManager = new WI.ConsoleManager,
+ WI.runtimeManager = new WI.RuntimeManager,
+ WI.heapManager = new WI.HeapManager,
+ WI.memoryManager = new WI.MemoryManager,
+ WI.applicationCacheManager = new WI.ApplicationCacheManager,
+ WI.timelineManager = new WI.TimelineManager,
+ WI.debuggerManager = new WI.DebuggerManager,
+ WI.layerTreeManager = new WI.LayerTreeManager,
+ WI.workerManager = new WI.WorkerManager,
+ WI.domDebuggerManager = new WI.DOMDebuggerManager,
+ WI.canvasManager = new WI.CanvasManager,
+ WI.auditManager = new WI.AuditManager,
+ ];
- // Enable the Console Agent after creating the singleton managers.
- ConsoleAgent.enable();
-
- // Tell the backend we are initialized after all our initialization messages have been sent.
- setTimeout(function() {
- // COMPATIBILITY (iOS 8): Inspector.initialized did not exist yet.
- if (window.InspectorAgent && InspectorAgent.initialized)
- InspectorAgent.initialized();
- }, 0);
-
// Register for events.
- this.debuggerManager.addEventListener(WI.DebuggerManager.Event.Paused, this._debuggerDidPause, this);
- this.debuggerManager.addEventListener(WI.DebuggerManager.Event.Resumed, this._debuggerDidResume, this);
- this.domManager.addEventListener(WI.DOMManager.Event.InspectModeStateChanged, this._inspectModeStateChanged, this);
- this.domManager.addEventListener(WI.DOMManager.Event.DOMNodeWasInspected, this._domNodeWasInspected, this);
- this.domStorageManager.addEventListener(WI.DOMStorageManager.Event.DOMStorageObjectWasInspected, this._domStorageWasInspected, this);
- this.databaseManager.addEventListener(WI.DatabaseManager.Event.DatabaseWasInspected, this._databaseWasInspected, this);
- this.networkManager.addEventListener(WI.NetworkManager.Event.MainFrameDidChange, this._mainFrameDidChange, this);
- this.networkManager.addEventListener(WI.NetworkManager.Event.FrameWasAdded, this._frameWasAdded, this);
+ WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.Paused, this._debuggerDidPause, this);
+ WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.Resumed, this._debuggerDidResume, this);
+ WI.domManager.addEventListener(WI.DOMManager.Event.InspectModeStateChanged, this._inspectModeStateChanged, this);
+ WI.domManager.addEventListener(WI.DOMManager.Event.DOMNodeWasInspected, this._domNodeWasInspected, this);
+ WI.domStorageManager.addEventListener(WI.DOMStorageManager.Event.DOMStorageObjectWasInspected, this._domStorageWasInspected, this);
+ WI.databaseManager.addEventListener(WI.DatabaseManager.Event.DatabaseWasInspected, this._databaseWasInspected, this);
+ WI.networkManager.addEventListener(WI.NetworkManager.Event.MainFrameDidChange, this._mainFrameDidChange, this);
+ WI.networkManager.addEventListener(WI.NetworkManager.Event.FrameWasAdded, this._frameWasAdded, this);
WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
@@ -155,48 +136,32 @@
// Create settings.
this._showingSplitConsoleSetting = new WI.Setting("showing-split-console", false);
-
this._openTabsSetting = new WI.Setting("open-tab-types", ["elements", "network", "debugger", "resources", "timeline", "storage", "canvas", "console"]);
this._selectedTabIndexSetting = new WI.Setting("selected-tab-index", 0);
-
this.showShadowDOMSetting = new WI.Setting("show-shadow-dom", false);
-
- // COMPATIBILITY (iOS 8): Page.enableTypeProfiler did not exist.
this.showJavaScriptTypeInformationSetting = new WI.Setting("show-_javascript_-type-information", false);
this.showJavaScriptTypeInformationSetting.addEventListener(WI.Setting.Event.Changed, this._showJavaScriptTypeInformationSettingChanged, this);
- if (this.showJavaScriptTypeInformationSetting.value && window.RuntimeAgent && RuntimeAgent.enableTypeProfiler)
- RuntimeAgent.enableTypeProfiler();
-
this.enableControlFlowProfilerSetting = new WI.Setting("enable-control-flow-profiler", false);
this.enableControlFlowProfilerSetting.addEventListener(WI.Setting.Event.Changed, this._enableControlFlowProfilerSettingChanged, this);
- if (this.enableControlFlowProfilerSetting.value && window.RuntimeAgent && RuntimeAgent.enableControlFlowProfiler)
- RuntimeAgent.enableControlFlowProfiler();
-
- // COMPATIBILITY (iOS 8): Page.setShowPaintRects did not exist.
this.showPaintRectsSetting = new WI.Setting("show-paint-rects", false);
- if (this.showPaintRectsSetting.value && window.PageAgent && PageAgent.setShowPaintRects)
- PageAgent.setShowPaintRects(true);
+ this.resourceCachingDisabledSetting = new WI.Setting("disable-resource-caching", false);
+ this.resourceCachingDisabledSetting.addEventListener(WI.Setting.Event.Changed, this._resourceCachingDisabledSettingChanged, this);
+ // State.
this.printStylesEnabled = false;
-
- // COMPATIBILITY (iOS 10.3): Network.setDisableResourceCaching did not exist.
- this.resourceCachingDisabledSetting = new WI.Setting("disable-resource-caching", false);
- if (window.NetworkAgent && NetworkAgent.setResourceCachingDisabled) {
- if (this.resourceCachingDisabledSetting.value)
- NetworkAgent.setResourceCachingDisabled(true);
- this.resourceCachingDisabledSetting.addEventListener(WI.Setting.Event.Changed, this._resourceCachingDisabledSettingChanged, this);
- }
-
this.setZoomFactor(WI.settings.zoomFactor.value);
+ this.mouseCoords = {x: 0, y: 0};
+ this.visible = false;
+ this._windowKeydownListeners = [];
- this.mouseCoords = {
- x: 0,
- y: 0
- };
+ // Targets.
+ WI.mainTarget = new WI.MainTarget;
+ WI.mainTarget.initialize();
+ WI.pageTarget = WI.sharedApp.debuggableType === WI.DebuggableType.Web ? WI.mainTarget : null;
- this.visible = false;
-
- this._windowKeydownListeners = [];
+ // Post-target initialization.
+ WI.targetManager.initializeMainTarget();
+ WI.runtimeManager.activeExecutionContext = WI.mainTarget.executionContext;
};
WI.contentLoaded = function()
@@ -519,6 +484,19 @@
this.runBootstrapOperations();
};
+WI.performOneTimeFrontendInitializationsUsingTarget = function(target)
+{
+ if (!WI.__didPerformConsoleInitialization && target.ConsoleAgent) {
+ WI.__didPerformConsoleInitialization = true;
+ WI.consoleManager.initializeLogChannels(target);
+ }
+
+ if (!WI.__didPerformCSSInitialization && target.CSSAgent) {
+ WI.__didPerformCSSInitialization = true;
+ WI.CSSCompletions.initializeCSSCompletions(target);
+ }
+};
+
WI.isTabTypeAllowed = function(tabType)
{
let tabClass = this._knownTabClassesByType.get(tabType);
@@ -682,7 +660,8 @@
{
this.notifications.dispatchEventToListeners(WI.Notification.ExtraDomainsActivated, {domains});
- WI.CSSCompletions.requestCSSCompletions();
+ if (WI.mainTarget && WI.mainTarget.CSSAgent)
+ WI.CSSCompletions.initializeCSSCompletions(WI.assumingMainTarget());
this._updateReloadToolbarButton();
this._updateDownloadToolbarButton();
@@ -2703,7 +2682,7 @@
Object.defineProperty(WI, "targets",
{
- get() { return this.targetManager.targets; }
+ get() { return WI.targetManager.targets; }
});
// Many places assume the main target because they cannot yet be
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -23,6 +23,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: ApplicationCacheManager lacks advanced multi-target support. (ApplciationCache objects per-target)
+
WI.ApplicationCacheManager = class ApplicationCacheManager extends WI.Object
{
constructor()
@@ -29,9 +31,6 @@
{
super();
- if (window.ApplicationCacheAgent)
- ApplicationCacheAgent.enable();
-
WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
WI.Frame.addEventListener(WI.Frame.Event.ChildFrameWasRemoved, this._childFrameWasRemoved, this);
@@ -40,14 +39,21 @@
this.initialize();
}
+ // Target
+
+ initializeTarget(target)
+ {
+ if (target.ApplicationCacheAgent) {
+ target.ApplicationCacheAgent.enable();
+ target.ApplicationCacheAgent.getFramesWithManifests(this._framesWithManifestsLoaded.bind(this));
+ }
+ }
+
// Public
initialize()
{
this._applicationCacheObjects = {};
-
- if (window.ApplicationCacheAgent)
- ApplicationCacheAgent.getFramesWithManifests(this._framesWithManifestsLoaded.bind(this));
}
get applicationCacheObjects()
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/CSSManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/CSSManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/CSSManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -23,6 +23,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: CSSManager lacks advanced multi-target support. (Stylesheets per-target)
+
WI.CSSManager = class CSSManager extends WI.Object
{
constructor()
@@ -29,9 +31,6 @@
{
super();
- if (window.CSSAgent)
- CSSAgent.enable();
-
WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
WI.Frame.addEventListener(WI.Frame.Event.ResourceWasAdded, this._resourceAdded, this);
WI.Resource.addEventListener(WI.SourceCode.Event.ContentDidChange, this._resourceContentDidChange, this);
@@ -52,6 +51,14 @@
this._fetchedInitialStyleSheets = window.CSSAgent && window.CSSAgent.hasEvent("styleSheetAdded");
}
+ // Target
+
+ initializeTarget(target)
+ {
+ if (target.CSSAgent)
+ target.CSSAgent.enable();
+ }
+
// Static
static protocolStyleSheetOriginToEnum(origin)
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -23,6 +23,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: CanvasManager lacks advanced multi-target support. (Canvases per-target)
+
WI.CanvasManager = class CanvasManager extends WI.Object
{
constructor()
@@ -34,9 +36,14 @@
this._canvasIdentifierMap = new Map;
this._shaderProgramIdentifierMap = new Map;
this._importedRecordings = new Set;
+ }
- if (window.CanvasAgent)
- CanvasAgent.enable();
+ // Target
+
+ initializeTarget(target)
+ {
+ if (target.CanvasAgent)
+ target.CanvasAgent.enable();
}
// Public
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/ConsoleManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/ConsoleManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/ConsoleManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -39,20 +39,6 @@
this._customLoggingChannels = [];
this._loggingChannelSources = [];
-
- if (WI.ConsoleManager.supportsLogChannels()) {
- this._loggingChannelSources = [WI.ConsoleMessage.MessageSource.Media, WI.ConsoleMessage.MessageSource.WebRTC];
- ConsoleAgent.getLoggingChannels((error, channels) => {
- if (error)
- return;
-
- for (let channel of channels) {
- console.assert(this._loggingChannelSources.includes(channel.source));
- }
-
- this._customLoggingChannels = channels.map(WI.LoggingChannel.fromPayload);
- });
- }
}
// Static
@@ -164,6 +150,28 @@
target.ConsoleAgent.clearMessages();
}
+ initializeLogChannels(target)
+ {
+ console.assert(target.ConsoleAgent);
+
+ if (!WI.ConsoleManager.supportsLogChannels())
+ return;
+
+ if (this._loggingChannelSources.length)
+ return;
+
+ this._loggingChannelSources = [WI.ConsoleMessage.MessageSource.Media, WI.ConsoleMessage.MessageSource.WebRTC];
+
+ target.ConsoleAgent.getLoggingChannels((error, channels) => {
+ if (error)
+ return;
+
+ console.assert(channels.every((channel) => this._loggingChannelSources.includes(channel.source)));
+
+ this._customLoggingChannels = channels.map(WI.LoggingChannel.fromPayload);
+ });
+ }
+
// Private
_mainResourceDidChange(event)
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -30,6 +30,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: DOMManager lacks advanced multi-target support. (DOMNodes per-target)
+
WI.DOMManager = class DOMManager extends WI.Object
{
constructor()
@@ -46,8 +48,21 @@
this._breakpointsForEventListeners = new Map;
WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
+ }
- this.ensureDocument();
+ // Target
+
+ initializeTarget(target)
+ {
+ // FIXME: This should be improved when adding better DOM multi-target support since it is really per-target.
+ // This currently uses a setTimeout since it doesn't need to happen immediately, and DOMManager uses the
+ // global DOMAgent to request the document, so we want to make sure we've transitioned the global agents
+ // to this target if necessary.
+ if (target.DOMAgent) {
+ setTimeout(() => {
+ this.ensureDocument();
+ });
+ }
}
// Public
@@ -71,19 +86,17 @@
this._pendingDocumentRequestCallbacks = [callback];
- function onDocumentAvailable(error, root)
- {
- if (!error)
- this._setDocument(root);
+ if (window.DOMAgent) {
+ DOMAgent.getDocument((error, root) => {
+ if (!error)
+ this._setDocument(root);
- for (let callback of this._pendingDocumentRequestCallbacks)
- callback(this._document);
+ for (let callback of this._pendingDocumentRequestCallbacks)
+ callback(this._document);
- this._pendingDocumentRequestCallbacks = null;
+ this._pendingDocumentRequestCallbacks = null;
+ });
}
-
- if (window.DOMAgent)
- DOMAgent.getDocument(onDocumentAvailable.bind(this));
}
ensureDocument()
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -24,6 +24,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: DOMStorageManager lacks advanced multi-target support. (DOMStorage per-target)
+
WI.DOMStorageManager = class DOMStorageManager extends WI.Object
{
constructor()
@@ -30,9 +32,6 @@
{
super();
- if (window.DOMStorageAgent)
- DOMStorageAgent.enable();
-
WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
WI.Frame.addEventListener(WI.Frame.Event.SecurityOriginDidChange, this._securityOriginDidChange, this);
@@ -39,6 +38,14 @@
this.initialize();
}
+ // Target
+
+ initializeTarget(target)
+ {
+ if (target.DOMStorageAgent)
+ target.DOMStorageAgent.enable();
+ }
+
// Public
initialize()
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DatabaseManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DatabaseManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DatabaseManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -24,6 +24,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: DatabaseManager lacks advanced multi-target support. (DataBase per-target)
+
WI.DatabaseManager = class DatabaseManager extends WI.Object
{
constructor()
@@ -30,14 +32,19 @@
{
super();
- if (window.DatabaseAgent)
- DatabaseAgent.enable();
-
WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
this.initialize();
}
+ // Target
+
+ initializeTarget(target)
+ {
+ if (target.DatabaseAgent)
+ target.DatabaseAgent.enable();
+ }
+
// Public
initialize()
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -29,8 +29,6 @@
{
super();
- DebuggerAgent.enable();
-
WI.notifications.addEventListener(WI.Notification.DebugUIEnabledDidChange, this._debugUIEnabledDidChange, this);
WI.Breakpoint.addEventListener(WI.Breakpoint.Event.DisplayLocationDidChange, this._breakpointDisplayLocationDidChange, this);
@@ -45,6 +43,8 @@
WI.targetManager.addEventListener(WI.TargetManager.Event.TargetRemoved, this._targetRemoved, this);
+ WI.settings.pauseForInternalScripts.addEventListener(WI.Setting.Event.Changed, this._pauseForInternalScriptsDidChange);
+
WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
this._breakpointsSetting = new WI.Setting("breakpoints", []);
@@ -78,7 +78,6 @@
this._internalWebKitScripts = [];
this._targetDebuggerDataMap = new Map;
- this._targetDebuggerDataMap.set(WI.mainTarget, new WI.DebuggerData(WI.mainTarget));
// Used to detect deleted probe actions.
this._knownProbeIdentifiersForBreakpoint = new Map;
@@ -95,37 +94,54 @@
this._temporarilyDisabledBreakpointsRestoreSetting.value = null;
}
- DebuggerAgent.setBreakpointsActive(this._breakpointsEnabledSetting.value);
- DebuggerAgent.setPauseOnExceptions(this._breakOnExceptionsState);
+ this._ignoreBreakpointDisplayLocationDidChangeEvent = false;
+ // Ensure that all managers learn about restored breakpoints,
+ // regardless of their initialization order.
+ setTimeout(() => {
+ this._restoringBreakpoints = true;
+ for (let cookie of this._breakpointsSetting.value)
+ this.addBreakpoint(new WI.Breakpoint(cookie));
+ this._restoringBreakpoints = false;
+ });
+ }
+
+ // Target
+
+ initializeTarget(target)
+ {
+ let targetData = this.dataForTarget(target);
+
+ // Initialize global state.
+ target.DebuggerAgent.enable();
+ target.DebuggerAgent.setBreakpointsActive(this._breakpointsEnabledSetting.value);
+ target.DebuggerAgent.setPauseOnExceptions(this._breakOnExceptionsState);
+
// COMPATIBILITY (iOS 10): DebuggerAgent.setPauseOnAssertions did not exist yet.
if (DebuggerAgent.setPauseOnAssertions)
- DebuggerAgent.setPauseOnAssertions(this._assertionFailuresBreakpointEnabledSetting.value);
+ target.DebuggerAgent.setPauseOnAssertions(this._assertionFailuresBreakpointEnabledSetting.value);
// COMPATIBILITY (iOS 10): Debugger.setAsyncStackTraceDepth did not exist yet.
if (DebuggerAgent.setAsyncStackTraceDepth)
- DebuggerAgent.setAsyncStackTraceDepth(this._asyncStackTraceDepthSetting.value);
+ target.DebuggerAgent.setAsyncStackTraceDepth(this._asyncStackTraceDepthSetting.value);
// COMPATIBILITY (iOS 12): DebuggerAgent.setPauseForInternalScripts did not exist yet.
- if (DebuggerAgent.setPauseForInternalScripts) {
- let updateBackendSetting = () => { DebuggerAgent.setPauseForInternalScripts(WI.settings.pauseForInternalScripts.value); };
- WI.settings.pauseForInternalScripts.addEventListener(WI.Setting.Event.Changed, updateBackendSetting);
+ if (DebuggerAgent.setPauseForInternalScripts)
+ target.DebuggerAgent.setPauseForInternalScripts(WI.settings.pauseForInternalScripts.value);
- updateBackendSetting();
- }
+ if (this.paused)
+ targetData.pauseIfNeeded();
- this._ignoreBreakpointDisplayLocationDidChangeEvent = false;
-
- function restoreBreakpointsSoon() {
- this._restoringBreakpoints = true;
- for (let cookie of this._breakpointsSetting.value)
- this.addBreakpoint(new WI.Breakpoint(cookie));
- this._restoringBreakpoints = false;
+ // Initialize breakpoints.
+ this._restoringBreakpoints = true;
+ for (let breakpoint of this._breakpoints) {
+ if (breakpoint.disabled)
+ continue;
+ if (!breakpoint.contentIdentifier)
+ continue;
+ this._setBreakpoint(breakpoint, target);
}
-
- // Ensure that all managers learn about restored breakpoints,
- // regardless of their initialization order.
- setTimeout(restoreBreakpointsSoon.bind(this), 0);
+ this._restoringBreakpoints = false;
}
// Public
@@ -539,33 +555,6 @@
return this._nextBreakpointActionIdentifier++;
}
- initializeTarget(target)
- {
- let DebuggerAgent = target.DebuggerAgent;
- let targetData = this.dataForTarget(target);
-
- // Initialize global state.
- DebuggerAgent.enable();
- DebuggerAgent.setBreakpointsActive(this._breakpointsEnabledSetting.value);
- DebuggerAgent.setPauseOnAssertions(this._assertionFailuresBreakpointEnabledSetting.value);
- DebuggerAgent.setPauseOnExceptions(this._breakOnExceptionsState);
- DebuggerAgent.setAsyncStackTraceDepth(this._asyncStackTraceDepthSetting.value);
-
- if (this.paused)
- targetData.pauseIfNeeded();
-
- // Initialize breakpoints.
- this._restoringBreakpoints = true;
- for (let breakpoint of this._breakpoints) {
- if (breakpoint.disabled)
- continue;
- if (!breakpoint.contentIdentifier)
- continue;
- this._setBreakpoint(breakpoint, target);
- }
- this._restoringBreakpoints = false;
- }
-
// Protected (Called from WI.DebuggerObserver)
breakpointResolved(target, breakpointIdentifier, location)
@@ -1165,6 +1154,15 @@
this.dispatchEventToListeners(WI.DebuggerManager.Event.Resumed);
}
+ _pauseForInternalScriptsDidChange(event)
+ {
+ // COMPATIBILITY (iOS 12): DebuggerAgent.setPauseForInternalScripts did not exist yet.
+ console.assert(DebuggerAgent.setPauseForInternalScripts);
+
+ for (let target of WI.targets)
+ target.DebuggerAgent.setPauseForInternalScripts(WI.settings.pauseForInternalScripts.value);
+ }
+
_mainResourceDidChange(event)
{
if (!event.target.isMainFrame())
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/HeapManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/HeapManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/HeapManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -25,12 +25,12 @@
WI.HeapManager = class HeapManager extends WI.Object
{
- constructor()
+ // Target
+
+ initializeTarget(target)
{
- super();
-
- if (window.HeapAgent)
- HeapAgent.enable();
+ if (target.HeapAgent)
+ target.HeapAgent.enable();
}
// Public
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/IndexedDBManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/IndexedDBManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/IndexedDBManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -24,6 +24,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: IndexedDBManager lacks advanced multi-target support. (IndexedDatabase per-target)
+
WI.IndexedDBManager = class IndexedDBManager extends WI.Object
{
constructor()
@@ -30,9 +32,6 @@
{
super();
- if (window.IndexedDBAgent)
- IndexedDBAgent.enable();
-
WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
WI.Frame.addEventListener(WI.Frame.Event.SecurityOriginDidChange, this._securityOriginDidChange, this);
@@ -39,6 +38,14 @@
this.initialize();
}
+ // Target
+
+ initializeTarget(target)
+ {
+ if (target.IndexedDBAgent)
+ target.IndexedDBAgent.enable();
+ }
+
// Public
initialize()
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/LayerTreeManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/LayerTreeManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/LayerTreeManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -23,14 +23,16 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: LayerTreeManager lacks advanced multi-target support. (Layers per-target)
+
WI.LayerTreeManager = class LayerTreeManager extends WI.Object
{
- constructor()
+ // Target
+
+ initializeTarget(target)
{
- super();
-
- if (window.LayerTreeAgent)
- LayerTreeAgent.enable();
+ if (target.LayerTreeAgent)
+ target.LayerTreeAgent.enable();
}
// Public
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/MemoryManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/MemoryManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/MemoryManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -25,12 +25,12 @@
WI.MemoryManager = class MemoryManager extends WI.Object
{
- constructor()
+ // Target
+
+ initializeTarget(target)
{
- super();
-
- if (window.MemoryAgent)
- MemoryAgent.enable();
+ if (target.MemoryAgent)
+ target.MemoryAgent.enable();
}
// Public
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -23,6 +23,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: NetworkManager lacks advanced multi-target support. (Network.loadResource invocations per-target)
+
WI.NetworkManager = class NetworkManager extends WI.Object
{
constructor()
@@ -40,19 +42,37 @@
this._sourceMapURLMap = new Map;
this._downloadingSourceMaps = new Set;
- if (window.PageAgent) {
- PageAgent.enable();
- PageAgent.getResourceTree(this._processMainFrameResourceTreePayload.bind(this));
+ WI.notifications.addEventListener(WI.Notification.ExtraDomainsActivated, this._extraDomainsActivated, this);
+ WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._handleFrameMainResourceDidChange, this);
+ }
+
+ // Target
+
+ initializeTarget(target)
+ {
+ if (target.PageAgent) {
+ target.PageAgent.enable();
+ target.PageAgent.getResourceTree(this._processMainFrameResourceTreePayload.bind(this));
}
- if (window.ServiceWorkerAgent)
- ServiceWorkerAgent.getInitializationInfo(this._processServiceWorkerConfiguration.bind(this));
+ // FIXME: ServiceWorkerAgent should only be exposed in the "serviceworker" target type.
+ // Currently it is exposed to "web" targets. Work around this by only using the
+ // ServiceWorker domain if there is no Page domain.
+ if (target.ServiceWorkerAgent && !target.PageAgent)
+ target.ServiceWorkerAgent.getInitializationInfo(this._processServiceWorkerConfiguration.bind(this));
- if (window.NetworkAgent)
- NetworkAgent.enable();
+ if (target.NetworkAgent) {
+ target.NetworkAgent.enable();
- WI.notifications.addEventListener(WI.Notification.ExtraDomainsActivated, this._extraDomainsActivated, this);
- WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._handleFrameMainResourceDidChange, this);
+ // COMPATIBILITY (iOS 10.3): Network.setDisableResourceCaching did not exist.
+ if (NetworkAgent.setResourceCachingDisabled) {
+ if (WI.resourceCachingDisabledSetting && WI.resourceCachingDisabledSetting.value)
+ target.NetworkAgent.setResourceCachingDisabled(true);
+ }
+ }
+
+ if (target.type === WI.Target.Type.Worker)
+ this.adoptOrphanedResourcesForTarget(target);
}
// Public
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/RuntimeManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/RuntimeManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/RuntimeManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -29,14 +29,26 @@
{
super();
- // Enable the RuntimeAgent to receive notification of execution contexts.
- RuntimeAgent.enable();
+ this._activeExecutionContext = null;
- this._activeExecutionContext = WI.mainTarget.executionContext;
-
WI.Frame.addEventListener(WI.Frame.Event.ExecutionContextsCleared, this._frameExecutionContextsCleared, this);
}
+ // Target
+
+ initializeTarget(target)
+ {
+ target.RuntimeAgent.enable();
+
+ // COMPATIBILITY (iOS 8): Runtime.enableTypeProfiler did not exist.
+ if (WI.showJavaScriptTypeInformationSetting && WI.showJavaScriptTypeInformationSetting.value && RuntimeAgent.enableTypeProfiler)
+ target.RuntimeAgent.enableTypeProfiler();
+
+ // COMPATIBILITY (iOS 10): Runtime.enableControlFlowProfiler did not exist
+ if (WI.enableControlFlowProfilerSetting && WI.enableControlFlowProfilerSetting.value && RuntimeAgent.enableControlFlowProfiler)
+ target.RuntimeAgent.enableControlFlowProfiler();
+ }
+
// Public
get activeExecutionContext()
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/TargetManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -29,9 +29,7 @@
{
super();
- console.assert(WI.mainTarget);
-
- this._targets = new Set([WI.mainTarget]);
+ this._targets = new Set;
}
// Public
@@ -70,6 +68,12 @@
this.dispatchEventToListeners(WI.TargetManager.Event.TargetRemoved, {target});
}
+
+ initializeMainTarget()
+ {
+ console.assert(WI.mainTarget);
+ this._targets.add(WI.mainTarget);
+ }
};
WI.TargetManager.Event = {
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -23,6 +23,8 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+// FIXME: TimelineManager lacks advanced multi-target support. (Instruments/Profilers per-target)
+
WI.TimelineManager = class TimelineManager extends WI.Object
{
constructor()
@@ -38,7 +40,6 @@
WI.memoryManager.addEventListener(WI.MemoryManager.Event.MemoryPressure, this._memoryPressure, this);
this._enabledTimelineTypesSetting = new WI.Setting("enabled-instrument-types", WI.TimelineManager.defaultTimelineTypes());
- this._updateAutoCaptureInstruments();
this._persistentNetworkTimeline = new WI.NetworkTimeline;
@@ -62,6 +63,13 @@
this.reset();
}
+ // Target
+
+ initializeTarget(target)
+ {
+ this._updateAutoCaptureInstruments([target]);
+ }
+
// Static
static defaultTimelineTypes()
@@ -167,7 +175,7 @@
{
this._enabledTimelineTypesSetting.value = x || [];
- this._updateAutoCaptureInstruments();
+ this._updateAutoCaptureInstruments(WI.targets);
}
isCapturing()
@@ -1052,11 +1060,8 @@
// FIXME: <https://webkit.org/b/152904> Web Inspector: Timeline UI should keep up with processing all incoming records
}
- _updateAutoCaptureInstruments()
+ _updateAutoCaptureInstruments(targets)
{
- if (!window.TimelineAgent)
- return;
-
if (!TimelineAgent.setInstruments)
return;
@@ -1082,7 +1087,10 @@
}
}
- TimelineAgent.setInstruments([...instrumentSet]);
+ for (let target of targets) {
+ if (target.TimelineAgent)
+ target.TimelineAgent.setInstruments([...instrumentSet]);
+ }
}
};
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -30,9 +30,14 @@
super();
this._connections = new Map;
+ }
- if (window.WorkerAgent)
- WorkerAgent.enable();
+ // Target
+
+ initializeTarget(target)
+ {
+ if (target.WorkerAgent)
+ target.WorkerAgent.enable();
}
// Public
@@ -41,6 +46,8 @@
{
let connection = new InspectorBackend.WorkerConnection(workerId);
let workerTarget = new WI.WorkerTarget(workerId, url, connection);
+ workerTarget.initialize();
+
WI.targetManager.addTarget(workerTarget);
this._connections.set(workerId, connection);
Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -78,8 +78,10 @@
// Static
- static requestCSSCompletions()
+ static initializeCSSCompletions(target)
{
+ console.assert(target.CSSAgent);
+
if (WI.CSSCompletions.cssNameCompletions)
return;
@@ -162,13 +164,11 @@
WI.CSSKeywordCompletions.addPropertyCompletionValues("font", fontFamilyNames);
}
- if (window.CSSAgent) {
- CSSAgent.getSupportedCSSProperties(propertyNamesCallback);
+ target.CSSAgent.getSupportedCSSProperties(propertyNamesCallback);
- // COMPATIBILITY (iOS 9): CSS.getSupportedSystemFontFamilyNames did not exist.
- if (CSSAgent.getSupportedSystemFontFamilyNames)
- CSSAgent.getSupportedSystemFontFamilyNames(fontFamilyNamesCallback);
- }
+ // COMPATIBILITY (iOS 9): CSS.getSupportedSystemFontFamilyNames did not exist.
+ if (CSSAgent.getSupportedSystemFontFamilyNames)
+ target.CSSAgent.getSupportedSystemFontFamilyNames(fontFamilyNamesCallback);
}
// Public
Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -70,6 +70,7 @@
get dumpInspectorProtocolMessages()
{
+ return true;
return WI.settings.autoLogProtocolMessages.value;
}
Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Target.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Target.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Target.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -33,6 +33,7 @@
this._name = name;
this._type = type;
this._connection = connection;
+ this._agents = connection._agents;
this._executionContext = null;
this._mainResource = null;
this._resourceCollection = new WI.ResourceCollection;
@@ -39,14 +40,81 @@
this._extraScriptCollection = new WI.ScriptCollection;
this._connection.target = this;
+
+ // Agents we always expect in every target.
+ console.assert(this.RuntimeAgent);
+ console.assert(this.DebuggerAgent);
+ console.assert(this.ConsoleAgent);
}
+ // Target
+
+ initialize()
+ {
+ // Intentionally initialize InspectorAgent first if it is available.
+ // This may not be strictly necessary anymore, but is historical.
+ if (this.InspectorAgent)
+ this.InspectorAgent.enable();
+
+ // Initialize agents.
+ for (let manager of WI.managers) {
+ if (manager.initializeTarget)
+ manager.initializeTarget(this);
+ }
+
+ // Non-manager specific initialization.
+ // COMPATIBILITY (iOS 8): Page.setShowPaintRects did not exist.
+ if (this.PageAgent) {
+ if (PageAgent.setShowPaintRects && WI.showPaintRectsSetting && WI.showPaintRectsSetting.value)
+ this.PageAgent.setShowPaintRects(true);
+ }
+
+ // Intentionally defer ConsoleAgent initialization to the end. We do this so that any
+ // previous initialization messages will have their responses arrive before a stream
+ // of console message added events come in after enabling Console.
+ this.ConsoleAgent.enable();
+
+ setTimeout(() => {
+ // Use this opportunity to run any one time frontend initialization
+ // now that we have a target with potentially new capabilities.
+ WI.performOneTimeFrontendInitializationsUsingTarget(this);
+ });
+
+ setTimeout(() => {
+ // Tell the backend we are initialized after all our initialization messages have been sent.
+ // This allows an automatically paused backend to resume execution, but we want to ensure
+ // our breakpoints were already sent to that backend.
+ // COMPATIBILITY (iOS 8): Inspector.initialized did not exist yet.
+ if (this.InspectorAgent && InspectorAgent.initialized)
+ this.InspectorAgent.initialized();
+ });
+ }
+
// Agents
- get RuntimeAgent() { return this._connection._agents.Runtime; }
- get ConsoleAgent() { return this._connection._agents.Console; }
- get DebuggerAgent() { return this._connection._agents.Debugger; }
- get HeapAgent() { return this._connection._agents.Heap; }
+ get ApplicationCacheAgent() { return this._agents.ApplicationCache; }
+ get CSSAgent() { return this._agents.CSS; }
+ get CanvasAgent() { return this._agents.Canvas; }
+ get ConsoleAgent() { return this._agents.Console; }
+ get DOMAgent() { return this._agents.DOM; }
+ get DOMDebuggerAgent() { return this._agents.DOMDebugger; }
+ get DOMStorageAgent() { return this._agents.DOMStorage; }
+ get DatabaseAgent() { return this._agents.Database; }
+ get DebuggerAgent() { return this._agents.Debugger; }
+ get HeapAgent() { return this._agents.Heap; }
+ get IndexedDBAgent() { return this._agents.IndexedDB; }
+ get InspectorAgent() { return this._agents.Inspector; }
+ get LayerTreeAgent() { return this._agents.LayerTree; }
+ get MemoryAgent() { return this._agents.Memory; }
+ get NetworkAgent() { return this._agents.Network; }
+ get PageAgent() { return this._agents.Page; }
+ get RecordingAgent() { return this._agents.Recording; }
+ get RuntimeAgent() { return this._agents.Runtime; }
+ get ScriptProfilerAgent() { return this._agents.ScriptProfiler; }
+ get ServiceWorkerAgent() { return this._agents.ServiceWorker; }
+ get TargetAgent() { return this._agents.Target; }
+ get TimelineAgent() { return this._agents.Timeline; }
+ get WorkerAgent() { return this._agents.Worker; }
// Public
Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/WorkerTarget.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Protocol/WorkerTarget.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/WorkerTarget.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -29,25 +29,7 @@
{
super(workerId, name, WI.Target.Type.Worker, connection);
- WI.networkManager.adoptOrphanedResourcesForTarget(this);
-
- if (this.RuntimeAgent) {
- this._executionContext = new WI.ExecutionContext(this, WI.RuntimeManager.TopLevelExecutionContextIdentifier, this.displayName, false, null);
- this.RuntimeAgent.enable();
- if (WI.showJavaScriptTypeInformationSetting && WI.showJavaScriptTypeInformationSetting.value)
- this.RuntimeAgent.enableTypeProfiler();
- if (WI.enableControlFlowProfilerSetting && WI.enableControlFlowProfilerSetting.value)
- this.RuntimeAgent.enableControlFlowProfiler();
- }
-
- if (this.DebuggerAgent)
- WI.debuggerManager.initializeTarget(this);
-
- if (this.ConsoleAgent)
- this.ConsoleAgent.enable();
-
- if (this.HeapAgent)
- this.HeapAgent.enable();
+ this._executionContext = new WI.ExecutionContext(this, WI.RuntimeManager.TopLevelContextExecutionIdentifier, this.displayName, false, null);
}
// Protected (Target)
Modified: trunk/Source/WebInspectorUI/UserInterface/Test/Test.js (237651 => 237652)
--- trunk/Source/WebInspectorUI/UserInterface/Test/Test.js 2018-10-31 21:04:07 UTC (rev 237651)
+++ trunk/Source/WebInspectorUI/UserInterface/Test/Test.js 2018-10-31 21:19:11 UTC (rev 237652)
@@ -44,38 +44,40 @@
InspectorBackend.registerWorkerDispatcher(new WI.WorkerObserver);
InspectorBackend.registerCanvasDispatcher(new WI.CanvasObserver);
- WI.mainTarget = new WI.MainTarget;
- WI.pageTarget = WI.sharedApp.debuggableType === WI.DebuggableType.Web ? WI.mainTarget : null;
-
// Instantiate controllers used by tests.
- this.targetManager = new WI.TargetManager;
- this.networkManager = new WI.NetworkManager;
- this.domStorageManager = new WI.DOMStorageManager;
- this.domManager = new WI.DOMManager;
- this.cssManager = new WI.CSSManager;
- this.consoleManager = new WI.ConsoleManager;
- this.runtimeManager = new WI.RuntimeManager;
- this.heapManager = new WI.HeapManager;
- this.memoryManager = new WI.MemoryManager;
- this.timelineManager = new WI.TimelineManager;
- this.debuggerManager = new WI.DebuggerManager;
- this.layerTreeManager = new WI.LayerTreeManager;
- this.workerManager = new WI.WorkerManager;
- this.domDebuggerManager = new WI.DOMDebuggerManager;
- this.canvasManager = new WI.CanvasManager;
- this.auditManager = new WI.AuditManager;
+ WI.managers = [
+ WI.targetManager = new WI.TargetManager,
+ WI.networkManager = new WI.NetworkManager,
+ WI.domStorageManager = new WI.DOMStorageManager,
+ WI.domManager = new WI.DOMManager,
+ WI.cssManager = new WI.CSSManager,
+ WI.consoleManager = new WI.ConsoleManager,
+ WI.runtimeManager = new WI.RuntimeManager,
+ WI.heapManager = new WI.HeapManager,
+ WI.memoryManager = new WI.MemoryManager,
+ WI.timelineManager = new WI.TimelineManager,
+ WI.debuggerManager = new WI.DebuggerManager,
+ WI.layerTreeManager = new WI.LayerTreeManager,
+ WI.workerManager = new WI.WorkerManager,
+ WI.domDebuggerManager = new WI.DOMDebuggerManager,
+ WI.canvasManager = new WI.CanvasManager,
+ WI.auditManager = new WI.AuditManager,
+ ];
+ // Register for events.
document.addEventListener("DOMContentLoaded", this.contentLoaded);
- // Enable agents.
- InspectorAgent.enable();
- ConsoleAgent.enable();
+ // Global settings.
+ this.showShadowDOMSetting = new WI.Setting("show-shadow-dom", true);
- // Perform one-time tasks.
- WI.CSSCompletions.requestCSSCompletions();
+ // Targets.
+ WI.mainTarget = new WI.MainTarget;
+ WI.mainTarget.initialize();
+ WI.pageTarget = WI.sharedApp.debuggableType === WI.DebuggableType.Web ? WI.mainTarget : null;
- // Global settings.
- this.showShadowDOMSetting = new WI.Setting("show-shadow-dom", true);
+ // Post-target initialization.
+ WI.targetManager.initializeMainTarget();
+ WI.runtimeManager.activeExecutionContext = WI.mainTarget.executionContext;
};
WI.contentLoaded = function()
@@ -88,9 +90,22 @@
InspectorFrontendHost.loaded();
};
+WI.performOneTimeFrontendInitializationsUsingTarget = function(target)
+{
+ if (!WI.__didPerformConsoleInitialization && target.ConsoleAgent) {
+ WI.__didPerformConsoleInitialization = true;
+ WI.consoleManager.initializeLogChannels(target);
+ }
+
+ if (!WI.__didPerformCSSInitialization && target.CSSAgent) {
+ WI.__didPerformCSSInitialization = true;
+ WI.CSSCompletions.initializeCSSCompletions(target);
+ }
+};
+
Object.defineProperty(WI, "targets",
{
- get() { return this.targetManager.targets; }
+ get() { return WI.targetManager.targets; }
});
WI.assumingMainTarget = () => WI.mainTarget;