Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: third_party/WebKit/LayoutTests/inspector-protocol/resources/inspector-protocol-test.js

Issue 2951913002: [DevTools] Support multiple sessions in Target domain (Closed)
Patch Set: simplify Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 var TestRunner = class { 5 var TestRunner = class {
6 constructor(baseURL, log, completeTest, fetch) { 6 constructor(baseURL, log, completeTest, fetch) {
7 this._dumpInspectorProtocolMessages = false; 7 this._dumpInspectorProtocolMessages = false;
8 this._baseURL = baseURL; 8 this._baseURL = baseURL;
9 this._log = log; 9 this._log = log;
10 this._completeTest = completeTest; 10 this._completeTest = completeTest;
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 } 160 }
161 }; 161 };
162 162
163 TestRunner.Page = class { 163 TestRunner.Page = class {
164 constructor(testRunner, targetId) { 164 constructor(testRunner, targetId) {
165 this._testRunner = testRunner; 165 this._testRunner = testRunner;
166 this._targetId = targetId; 166 this._targetId = targetId;
167 } 167 }
168 168
169 async createSession() { 169 async createSession() {
170 await DevToolsAPI._sendCommandOrDie('Target.attachToTarget', {targetId: this ._targetId}); 170 var sessionId = (await DevToolsAPI._sendCommandOrDie('Target.attachToTarget' , {targetId: this._targetId})).sessionId;
171 var session = new TestRunner.Session(this); 171 var session = new TestRunner.Session(this, sessionId);
172 DevToolsAPI._sessions.set(this._targetId, session); 172 DevToolsAPI._sessions.set(sessionId, session);
173 return session; 173 return session;
174 } 174 }
175 175
176 navigate(url) { 176 navigate(url) {
177 return this._navigate(this._testRunner.url(url)); 177 return this._navigate(this._testRunner.url(url));
178 } 178 }
179 179
180 async _navigate(url) { 180 async _navigate(url) {
181 if (DevToolsAPI._sessions.get(this._targetId))
182 this._testRunner.die(`Cannot navigate to ${url} with active session`, new Error());
183
184 var session = await this.createSession(); 181 var session = await this.createSession();
185 session.protocol.Page.enable(); 182 session.protocol.Page.enable();
186 session.protocol.Page.navigate({url: url}); 183 session.protocol.Page.navigate({url: url});
187 184
188 var callback; 185 var callback;
189 var promise = new Promise(f => callback = f); 186 var promise = new Promise(f => callback = f);
190 session.protocol.Page.onFrameNavigated(message => { 187 session.protocol.Page.onFrameNavigated(message => {
191 if (!message.params.frame.parentId) 188 if (!message.params.frame.parentId)
192 callback(); 189 callback();
193 }); 190 });
194 await promise; 191 await promise;
195 192
196 await session.disconnect(); 193 await session.disconnect();
197 } 194 }
198 195
199 async loadHTML(html) { 196 async loadHTML(html) {
200 if (DevToolsAPI._sessions.get(this._targetId))
201 this._testRunner.die('Cannot loadHTML with active session', new Error());
202
203 html = html.replace(/'/g, "\\'").replace(/\n/g, '\\n'); 197 html = html.replace(/'/g, "\\'").replace(/\n/g, '\\n');
204 var session = await this.createSession(); 198 var session = await this.createSession();
205 await session.protocol.Runtime.evaluate({expression: `document.body.innerHTM L='${html}'`}); 199 await session.protocol.Runtime.evaluate({expression: `document.body.innerHTM L='${html}'`});
206 await session.disconnect(); 200 await session.disconnect();
207 } 201 }
208 }; 202 };
209 203
210 TestRunner.Session = class { 204 TestRunner.Session = class {
211 constructor(page) { 205 constructor(page, sessionId) {
212 this._testRunner = page._testRunner; 206 this._testRunner = page._testRunner;
213 this._page = page; 207 this._page = page;
208 this._sessionId = sessionId;
214 this._requestId = 0; 209 this._requestId = 0;
215 this._dispatchTable = new Map(); 210 this._dispatchTable = new Map();
216 this._eventHandlers = new Map(); 211 this._eventHandlers = new Map();
217 this.protocol = this._setupProtocol(); 212 this.protocol = this._setupProtocol();
218 } 213 }
219 214
220 async disconnect() { 215 async disconnect() {
221 await DevToolsAPI._sendCommandOrDie('Target.detachFromTarget', {targetId: th is._page._targetId}); 216 await DevToolsAPI._sendCommandOrDie('Target.detachFromTarget', {sessionId: t his._sessionId});
222 DevToolsAPI._sessions.delete(this._page._targetId); 217 DevToolsAPI._sessions.delete(this._sessionId);
223 } 218 }
224 219
225 sendRawCommand(requestId, message) { 220 sendRawCommand(requestId, message) {
226 DevToolsAPI._sendCommandOrDie('Target.sendMessageToTarget', {targetId: this. _page._targetId, message: message}); 221 DevToolsAPI._sendCommandOrDie('Target.sendMessageToTarget', {sessionId: this ._sessionId, message: message});
227 return new Promise(f => this._dispatchTable.set(requestId, f)); 222 return new Promise(f => this._dispatchTable.set(requestId, f));
228 } 223 }
229 224
230 sendCommand(method, params) { 225 sendCommand(method, params) {
231 var requestId = ++this._requestId; 226 var requestId = ++this._requestId;
232 var messageObject = {'id': requestId, 'method': method, 'params': params}; 227 var messageObject = {'id': requestId, 'method': method, 'params': params};
233 if (this._testRunner._dumpInspectorProtocolMessages) 228 if (this._testRunner._dumpInspectorProtocolMessages)
234 this._testRunner.log(`frontend => backend: ${JSON.stringify(messageObject) }`); 229 this._testRunner.log(`frontend => backend: ${JSON.stringify(messageObject) }`);
235 return this.sendRawCommand(requestId, JSON.stringify(messageObject)); 230 return this.sendRawCommand(requestId, JSON.stringify(messageObject));
236 } 231 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 try { 349 try {
355 if (typeof messageId === 'number') { 350 if (typeof messageId === 'number') {
356 var handler = DevToolsAPI._dispatchTable.get(messageId); 351 var handler = DevToolsAPI._dispatchTable.get(messageId);
357 if (handler) { 352 if (handler) {
358 DevToolsAPI._dispatchTable.delete(messageId); 353 DevToolsAPI._dispatchTable.delete(messageId);
359 handler(messageObject); 354 handler(messageObject);
360 } 355 }
361 } else { 356 } else {
362 var eventName = messageObject.method; 357 var eventName = messageObject.method;
363 if (eventName === 'Target.receivedMessageFromTarget') { 358 if (eventName === 'Target.receivedMessageFromTarget') {
364 var targetId = messageObject.params.targetId; 359 var sessionId = messageObject.params.sessionId;
365 var message = messageObject.params.message; 360 var message = messageObject.params.message;
366 var session = DevToolsAPI._sessions.get(targetId); 361 var session = DevToolsAPI._sessions.get(sessionId);
367 if (session) 362 if (session)
368 session._dispatchMessage(JSON.parse(message)); 363 session._dispatchMessage(JSON.parse(message));
369 } 364 }
370 } 365 }
371 } catch(e) { 366 } catch(e) {
372 DevToolsAPI._die(`Exception when dispatching message\n${JSON.stringify(messa geObject)}`, e); 367 DevToolsAPI._die(`Exception when dispatching message\n${JSON.stringify(messa geObject)}`, e);
373 } 368 }
374 }; 369 };
375 370
376 DevToolsAPI._sendCommand = function(method, params) { 371 DevToolsAPI._sendCommand = function(method, params) {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 438
444 window['onerror'] = (message, source, lineno, colno, error) => { 439 window['onerror'] = (message, source, lineno, colno, error) => {
445 DevToolsAPI._log(`${error}\n${error.stack}`); 440 DevToolsAPI._log(`${error}\n${error.stack}`);
446 DevToolsAPI._completeTest(); 441 DevToolsAPI._completeTest();
447 }; 442 };
448 443
449 window.addEventListener('unhandledrejection', e => { 444 window.addEventListener('unhandledrejection', e => {
450 DevToolsAPI._log(`Promise rejection: ${e.reason}\n${e.reason ? e.reason.stack : ''}`); 445 DevToolsAPI._log(`Promise rejection: ${e.reason}\n${e.reason ? e.reason.stack : ''}`);
451 DevToolsAPI._completeTest(); 446 DevToolsAPI._completeTest();
452 }, false); 447 }, false);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698