blob: c75549e7f8778a4661b8713bb98cd3706878afbe [file] [log] [blame]
// 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');
}