tor-browser

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

prefetch_nvs_hint.py (1346B)


      1 import time
      2 
      3 # TODO(https://crbug.com/406819294): Simplify relative import for util.
      4 import importlib
      5 util = importlib.import_module("speculation-rules.prefetch.resources.util")
      6 
      7 def main(request, response):
      8  response.headers.set("Cache-Control", "no-store")
      9  uuid = request.GET[b"uuid"]
     10  wait_for_prefetch_start_uuid = None
     11  if b"wait_for_prefetch_uuid" in request.GET:
     12    wait_for_prefetch_start_uuid = request.GET[b"wait_for_prefetch_uuid"]
     13  prefetch = request.headers.get(
     14      "Sec-Purpose", b"").decode("utf-8").startswith("prefetch")
     15  if b"unblock" in request.GET:
     16    request.server.stash.put(uuid, 0)
     17    return ''
     18 
     19  if b"wait_for_prefetch" in request.GET:
     20    if wait_for_prefetch_start_uuid is None:
     21      return ''
     22    wait_for_prefetch = None
     23    while wait_for_prefetch is None:
     24      time.sleep(0.1)
     25      wait_for_prefetch = request.server.stash.take(wait_for_prefetch_start_uuid)
     26    return ''
     27 
     28  if b"nvs_header" in request.GET:
     29    nvs_header = request.GET[b"nvs_header"]
     30    response.headers.set("No-Vary-Search", nvs_header)
     31 
     32  if prefetch:
     33    if wait_for_prefetch_start_uuid is not None:
     34      request.server.stash.put(wait_for_prefetch_start_uuid, 0)
     35    nvswait = None
     36    while nvswait is None:
     37      time.sleep(0.1)
     38      nvswait = request.server.stash.take(uuid)
     39 
     40  return util.get_executor_html(request, '')