tor-browser

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

clients-get-other-origin.html (1890B)


      1 <!DOCTYPE html>
      2 <script src="/common/get-host-info.sub.js"></script>
      3 <script src="test-helpers.sub.js"></script>
      4 <script>
      5 var host_info = get_host_info();
      6 var SCOPE = 'blank.html?clients-get';
      7 var SCRIPT = 'clients-get-worker.js';
      8 
      9 var registration;
     10 var worker;
     11 var wait_for_worker_promise = navigator.serviceWorker.getRegistration(SCOPE)
     12  .then(function(reg) {
     13      if (reg)
     14        return reg.unregister();
     15    })
     16  .then(function() {
     17      return navigator.serviceWorker.register(SCRIPT, {scope: SCOPE});
     18    })
     19  .then(function(reg) {
     20      registration = reg;
     21      worker = reg.installing;
     22      return new Promise(function(resolve) {
     23          worker.addEventListener('statechange', function() {
     24              if (worker.state == 'activated')
     25                resolve();
     26            });
     27        });
     28    });
     29 
     30 function send_result(result) {
     31  window.parent.postMessage(
     32      {result: result},
     33      host_info['HTTPS_ORIGIN']);
     34 }
     35 
     36 window.addEventListener("message", on_message, false);
     37 
     38 function on_message(e) {
     39  if (e.origin != host_info['HTTPS_ORIGIN']) {
     40    console.error('invalid origin: ' + e.origin);
     41    return;
     42  }
     43  if (e.data.message == 'get_client_id') {
     44    var otherOriginClientId = e.data.clientId;
     45    wait_for_worker_promise
     46      .then(function() {
     47          return with_iframe(SCOPE);
     48        })
     49      .then(function(iframe) {
     50          var channel = new MessageChannel();
     51          channel.port1.onmessage = function(e) {
     52            navigator.serviceWorker.getRegistration(SCOPE)
     53              .then(function(reg) {
     54                  reg.unregister();
     55                  send_result(e.data);
     56                });
     57          };
     58          iframe.contentWindow.navigator.serviceWorker.controller.postMessage(
     59              {port:channel.port2, clientId: otherOriginClientId,
     60               message: 'get_other_client_id'}, [channel.port2]);
     61        })
     62  }
     63 }
     64 </script>