<!DOCTYPE html>
<meta charset=utf-8>
<title>Test workers self.origin</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
function assertOriginWorker(workerSource, expectedOrigin, testName) {
  async_test(function(t) {
    w = new Worker(workerSource);
    w.onmessage = t.step_func(function(e) {
      assert_equals(e.data, expectedOrigin);
      t.done();
    });
  }, testName + ' Worker');
}

function assertOriginSharedWorker(workerSource, expectedOrigin, testName) {
  async_test(function(t) {
    w = new SharedWorker(workerSource);
    w.port.start();
    w.port.onmessage = t.step_func(function(e) {
      assert_equals(e.data, expectedOrigin);
      t.done();
    });
  }, testName + ' SharedWorker');
}

// Test same-origin workers
assertOriginWorker("./support/WorkerSelfOriginWorker.js", self.origin, "Same Origin");
assertOriginSharedWorker("./support/WorkerSelfOriginSharedWorker.js", self.origin, "Same Origin");

// Test data url workers have opaque origin
assertOriginWorker("data:application/javascript,postMessage(self.origin);", "null", "Data Url");
assertOriginSharedWorker("data:application/javascript,onconnect = function(e) { e.ports[0].postMessage(self.origin); }", "null", "Data Url");

// Test blob url workers
blob = new Blob(["postMessage(self.origin);"]);
blobUrl = URL.createObjectURL(blob);
assertOriginWorker(blobUrl, self.origin, "Blob Url");

blob = new Blob(["onconnect = function(e) { e.ports[0].postMessage(self.origin); }"]);
blobUrl = URL.createObjectURL(blob);
assertOriginSharedWorker(blobUrl, self.origin, "Blob Url");
</script>
