| // 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. |
| |
| @JS() |
| library utils; |
| |
| import 'dart:async'; |
| import 'dart:js_util'; |
| |
| import 'package:js/js.dart'; |
| |
| import 'chrome_api.dart'; |
| |
| Future<Tab> createTab(String url, {bool inNewWindow = false}) async { |
| if (inNewWindow) { |
| final windowPromise = chrome.windows.create( |
| WindowInfo(focused: true, url: url), |
| ); |
| final windowObj = await promiseToFuture<WindowObj>(windowPromise); |
| return windowObj.tabs.first; |
| } |
| final tabPromise = chrome.tabs.create(TabInfo( |
| active: true, |
| url: url, |
| )); |
| return promiseToFuture<Tab>(tabPromise); |
| } |
| |
| Future<Tab?> getTab(int tabId) { |
| return promiseToFuture<Tab?>(chrome.tabs.get(tabId)); |
| } |
| |
| Future<Tab?> getActiveTab() async { |
| final query = QueryInfo(active: true, currentWindow: true); |
| final tabs = List<Tab>.from(await promiseToFuture(chrome.tabs.query(query))); |
| return tabs.isNotEmpty ? tabs.first : null; |
| } |
| |
| bool? _isDevMode; |
| |
| bool isDevMode() { |
| if (_isDevMode != null) { |
| return _isDevMode!; |
| } |
| final extensionManifest = chrome.runtime.getManifest(); |
| final extensionName = getProperty(extensionManifest, 'name') ?? ''; |
| return extensionName.contains('DEV'); |
| } |