waitForTabLoad function application exported

Last updated: 2026-03-05T10:53:28.864Z

Metrics

LOC: 41 Complexity: 4 Params: 3

Signature

waitForTabLoad( tabId: number, timeoutMs = 30_000, ): : Promise<boolean>

Summary

Wait for a tab to finish loading (status === "complete").

Source Code

export function waitForTabLoad(
  tabId: number,
  timeoutMs = 30_000,
): Promise<boolean> {
  return new Promise((resolve) => {
    const timer = setTimeout(() => {
      chrome.tabs.onUpdated.removeListener(listener);
      log.warn(`Tab ${tabId} load timed out after ${timeoutMs}ms`);
      resolve(false);
    }, timeoutMs);

    function listener(
      updatedTabId: number,
      changeInfo: chrome.tabs.TabChangeInfo,
    ) {
      if (updatedTabId === tabId && changeInfo.status === "complete") {
        clearTimeout(timer);
        chrome.tabs.onUpdated.removeListener(listener);
        resolve(true);
      }
    }

    chrome.tabs.onUpdated.addListener(listener);

    // Check if already loaded
    chrome.tabs
      .get(tabId)
      .then((tab) => {
        if (tab.status === "complete") {
          clearTimeout(timer);
          chrome.tabs.onUpdated.removeListener(listener);
          resolve(true);
        }
      })
      .catch(() => {
        clearTimeout(timer);
        chrome.tabs.onUpdated.removeListener(listener);
        resolve(false);
      });
  });
}

Dependencies (Outgoing)

graph LR waitForTabLoad["waitForTabLoad"] listener["listener"] waitForTabLoad -->|dynamic_call| listener style waitForTabLoad fill:#dbeafe,stroke:#2563eb,stroke-width:2px click waitForTabLoad "f95e5c46991b38e7.html" click listener "8c93922ea0749d9f.html"
TargetType
listener dynamic_call
tabId dynamic_call

Impact (Incoming)

graph LR waitForTabLoad["waitForTabLoad"] navigateAndWait["navigateAndWait"] navigateAndWait -->|calls| waitForTabLoad style waitForTabLoad fill:#dbeafe,stroke:#2563eb,stroke-width:2px click waitForTabLoad "f95e5c46991b38e7.html" click navigateAndWait "915565f33bfb5777.html"
SourceType
navigateAndWait calls