blob: 567aee1b9b9ee60c8b8a88c8d739875b65373de5 [file]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'dart:io';
import 'package:path/path.dart' as p;
import 'package:puppeteer/puppeteer.dart';
Future<String> buildDebugExtension() async {
final currentDir = Directory.current.path;
if (!currentDir.endsWith('dwds')) {
throw StateError(
'Expected to be in /dwds directory, instead path was $currentDir.');
}
final extensionDir = p.join(currentDir, 'debug_extension_mv3');
// TODO(elliette): This doesn't work on Windows, see https://github.com/dart-lang/webdev/issues/1724.
await Process.run(
p.join('tool', 'build_extension.sh'),
[],
workingDirectory: extensionDir,
);
return '$extensionDir/compiled';
}
Future<Page> navigateToPage(
Browser browser, {
required String url,
bool isNew = false,
}) async {
final page = isNew
? await browser.newPage()
: await _getPageForUrl(
browser,
url: url,
);
if (isNew) {
await page.goto(url, wait: Until.domContentLoaded);
}
await page.bringToFront();
return page;
}
String getExtensionOrigin(Browser browser) {
final chromeExtension = 'chrome-extension:';
final extensionUrl = _getUrlsInBrowser(browser)
.firstWhere((url) => url.contains(chromeExtension));
final urlSegments = p.split(extensionUrl);
final extensionId = urlSegments[urlSegments.indexOf(chromeExtension) + 1];
return '$chromeExtension//$extensionId';
}
Iterable<String> _getUrlsInBrowser(Browser browser) {
return browser.targets.map((target) => target.url);
}
Future<Page> _getPageForUrl(Browser browser, {required String url}) {
final pageTarget = browser.targets.firstWhere((target) => target.url == url);
return pageTarget.page;
}
final clickIconJs = '''
async () => {
const activeTabs = await chrome.tabs.query({ active: true });
const tab = activeTabs[0];
chrome.action.onClicked.dispatch(tab);
}
''';