tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

common.py (2655B)


      1 GPT_SHIM_MSG = "Google Publisher Tags is being shimmed by Firefox"
      2 GAGTA_SHIM_MSG = "Google Analytics and Tag Manager is being shimmed by Firefox"
      3 
      4 
      5 async def is_gtag_placeholder_displayed(client, url, finder, **kwargs):
      6    await client.navigate(url, **kwargs)
      7    client.execute_async_script(
      8        """
      9        const done = arguments[0];
     10        if (window.dataLayer?.push?.toString() === [].push.toString()) {
     11            return done();
     12        }
     13        setTimeout(() => {
     14            dataLayer.push({
     15                event: "datalayerReady",
     16                eventTimeout: 1,
     17                eventCallback: done,
     18            });
     19        }, 100);
     20    """
     21    )
     22    return client.is_displayed(client.find_element(finder))
     23 
     24 
     25 async def clicking_link_navigates(client, url, finder, **kwargs):
     26    await client.navigate(url, **kwargs)
     27    elem = client.await_element(finder)
     28    return client.session.execute_async_script(
     29        """
     30        const elem = arguments[0],
     31              done = arguments[1];
     32        window.onbeforeunload = function() {
     33            done(true);
     34        };
     35        elem.click();
     36        setTimeout(() => {
     37            done(false);
     38        }, 1000);
     39    """,
     40        args=[elem],
     41    )
     42 
     43 
     44 async def verify_redirectors(client, urls, expected="REDIRECTED"):
     45    await client.navigate(client.inline("<html>"))
     46    for url, type in urls.items():
     47        assert expected == client.execute_async_script(
     48            """
     49            const [url, type, resolve] = arguments;
     50            fetch(url).then(async response => {
     51              if (!response.ok) {
     52                return resolve("FAILED");
     53              }
     54 
     55              try {
     56                if (type === "image") {
     57                  const blob = await response.blob();
     58                  const url = URL.createObjectURL(blob);
     59                  const img = new Image(1, 1);
     60                  await new Promise((res, rej) => {
     61                    img.onerror = rej;
     62                    img.onload = res;
     63                    img.src = url;
     64                  });
     65                } else if (type === "js") {
     66                  const text = await response.text();
     67                  if (!text.includes("This script is intentionally empty")) {
     68                    throw "";
     69                  }
     70                } else {
     71                  return resolve("UNKNOWN TYPE");
     72                }
     73              } catch(_) {
     74                return resolve("TYPE MISMATCH");
     75              }
     76 
     77              resolve(response.redirected ? "REDIRECTED" : "LOADED");
     78            }).catch(_ => {
     79              resolve("BLOCKED");
     80            });
     81        """,
     82            url,
     83            type,
     84        )