| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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); |
| OLD | NEW |