bt query -url hangs when the pattern has no path component (e.g., *://example.com instead of *://example.com/*).
Reproduction
# Hangs (no path component):
bt query -url '*://example.com'
# Works (has path):
bt query -url '*://example.com/*'
Root Cause
When the browser's tabs.query() API rejects an invalid pattern, the extension's error handler logs but never sends a response back to the mediator.
Code flow
- CLI calls
api.query_tabs() which makes HTTP request to mediator
- Mediator calls
remote_api.query_tabs() which sends command to extension
transport.recv() blocks on self._in.read(4) waiting for response
- Extension calls
browserTabs.query(query, queryTabsOnSuccess)
FirefoxTabs.query() in background.js:70-74:
query(queryInfo, onSuccess) {
this._browser.tabs.query(queryInfo).then(
onSuccess,
(error) => console.log(`Error executing queryTabs: ${error}`) // ❌ No response sent!
);
}
When the promise rejects, only console.log is called. No port.postMessage([]) is sent, so the mediator waits forever.
Suggested Fix
query(queryInfo, onSuccess) {
this._browser.tabs.query(queryInfo).then(
onSuccess,
(error) => {
console.log(`Error executing queryTabs: ${error}`);
port.postMessage([]); // Send empty response on error
}
);
}
Environment
- brotab version: 1.4.2
- Browser: Zen Browser (Firefox-based)
- OS: macOS
bt query -urlhangs when the pattern has no path component (e.g.,*://example.cominstead of*://example.com/*).Reproduction
Root Cause
When the browser's
tabs.query()API rejects an invalid pattern, the extension's error handler logs but never sends a response back to the mediator.Code flow
api.query_tabs()which makes HTTP request to mediatorremote_api.query_tabs()which sends command to extensiontransport.recv()blocks onself._in.read(4)waiting for responsebrowserTabs.query(query, queryTabsOnSuccess)FirefoxTabs.query()inbackground.js:70-74:When the promise rejects, only
console.logis called. Noport.postMessage([])is sent, so the mediator waits forever.Suggested Fix
Environment