Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 1 | // Copyright 2018 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
cjamcl@google.com | aa1532c | 2019-05-31 03:01:24 +0000 | [diff] [blame] | 5 | Audits.ProtocolService = class extends Common.Object { |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 6 | constructor() { |
| 7 | super(); |
Dmitry Gozman | 99d7a6c | 2018-11-12 17:55:11 +0000 | [diff] [blame] | 8 | /** @type {?Protocol.Connection} */ |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 9 | this._rawConnection = null; |
| 10 | /** @type {?Services.ServiceManager.Service} */ |
| 11 | this._backend = null; |
| 12 | /** @type {?Promise} */ |
| 13 | this._backendPromise = null; |
| 14 | /** @type {?function(string)} */ |
| 15 | this._status = null; |
| 16 | } |
| 17 | |
| 18 | /** |
| 19 | * @return {!Promise<undefined>} |
| 20 | */ |
Connor Clark | ca8905e | 2019-08-23 18:35:10 +0000 | [diff] [blame^] | 21 | async attach() { |
| 22 | await SDK.targetManager.suspendAllTargets(); |
| 23 | const childTargetManager = SDK.targetManager.mainTarget().model(SDK.ChildTargetManager); |
| 24 | this._rawConnection = await childTargetManager.createParallelConnection(this._dispatchProtocolMessage.bind(this)); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 25 | } |
| 26 | |
| 27 | /** |
| 28 | * @param {string} auditURL |
| 29 | * @param {!Array<string>} categoryIDs |
| 30 | * @param {!Object} flags |
Paul Irish | 8f1e33d | 2018-05-31 02:29:50 +0000 | [diff] [blame] | 31 | * @return {!Promise<!ReportRenderer.RunnerResult>} |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 32 | */ |
| 33 | startLighthouse(auditURL, categoryIDs, flags) { |
| 34 | return this._send('start', {url: auditURL, categoryIDs, flags}); |
| 35 | } |
| 36 | |
| 37 | /** |
Connor Clark | ca8905e | 2019-08-23 18:35:10 +0000 | [diff] [blame^] | 38 | * @return {!Promise<undefined>} |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 39 | */ |
Connor Clark | ca8905e | 2019-08-23 18:35:10 +0000 | [diff] [blame^] | 40 | async detach() { |
| 41 | await this._send('stop'); |
| 42 | await this._backend.dispose(); |
| 43 | delete this._backend; |
| 44 | delete this._backendPromise; |
| 45 | await this._rawConnection.disconnect(); |
| 46 | await SDK.targetManager.resumeAllTargets(); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 47 | } |
| 48 | |
| 49 | /** |
| 50 | * @param {function (string): undefined} callback |
| 51 | */ |
| 52 | registerStatusCallback(callback) { |
| 53 | this._status = callback; |
| 54 | } |
| 55 | |
| 56 | /** |
Connor Clark | ca8905e | 2019-08-23 18:35:10 +0000 | [diff] [blame^] | 57 | * @param {!Object} message |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 58 | */ |
| 59 | _dispatchProtocolMessage(message) { |
Connor Clark | ca8905e | 2019-08-23 18:35:10 +0000 | [diff] [blame^] | 60 | this._send('dispatchProtocolMessage', {message: JSON.stringify(message)}); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 61 | } |
| 62 | |
| 63 | _initWorker() { |
cjamcl@google.com | aa1532c | 2019-05-31 03:01:24 +0000 | [diff] [blame] | 64 | this._backendPromise = Services.serviceManager.createAppService('audits_worker', 'AuditsService').then(backend => { |
| 65 | if (this._backend) |
| 66 | return; |
| 67 | this._backend = backend; |
| 68 | this._backend.on('statusUpdate', result => this._status(result.message)); |
| 69 | this._backend.on('sendProtocolMessage', result => this._sendProtocolMessage(result.message)); |
| 70 | }); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 71 | } |
| 72 | |
| 73 | /** |
| 74 | * @param {string} message |
| 75 | */ |
| 76 | _sendProtocolMessage(message) { |
Alexey Kozyatinskiy | bd7d3a6 | 2018-07-28 02:33:51 +0000 | [diff] [blame] | 77 | this._rawConnection.sendRawMessage(message); |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 78 | } |
| 79 | |
| 80 | /** |
| 81 | * @param {string} method |
| 82 | * @param {!Object=} params |
Paul Irish | 8f1e33d | 2018-05-31 02:29:50 +0000 | [diff] [blame] | 83 | * @return {!Promise<!ReportRenderer.RunnerResult>} |
Blink Reformat | 4c46d09 | 2018-04-07 15:32:37 +0000 | [diff] [blame] | 84 | */ |
| 85 | _send(method, params) { |
| 86 | if (!this._backendPromise) |
| 87 | this._initWorker(); |
| 88 | |
| 89 | return this._backendPromise.then(_ => this._backend.send(method, params)); |
| 90 | } |
| 91 | }; |