chromium/third_party/blink/web_tests/external/wpt/webrtc-identity/identity-helper.sub.js

'use strict';

/*
  In web-platform-test, a number of domains are required to be set up locally.
  The list is available at docs/_writing-tests/server-features.md. The
  appropriate hosts file entries can be generated with the WPT CLI via the
  following command: `wpt make-hosts-file`.
 */

/*
    dictionary RTCIdentityProviderDetails {
      required DOMString domain;
               DOMString protocol = "default";
    };
 */

// Parse a base64 JSON encoded string returned from getIdentityAssertion().
// This is also the string that is set in the a=identity line.
// Returns a { idp, assertion } where idp is of type RTCIdentityProviderDetails
// and assertion is the deserialized JSON that was returned by the
// IdP proxy's generateAssertion() function.
function parseAssertionResult(assertionResultStr) {
  const assertionResult = JSON.parse(atob(assertionResultStr));

  const { idp } = assertionResult;
  const assertion = JSON.parse(assertionResult.assertion);

  return { idp, assertion };
}

// Return two distinct IdP domains that are different from current domain
function getIdpDomains() {
  const domainA = '{{domains[www]}}';
  const domainB = '{{domains[www1]}}';
  const domainC = '{{domains[www2]}}';

  if(window.location.hostname === domainA) {
    return [domainB, domainC];
  } else if(window.location.hostname === domainB) {
    return [domainA, domainC];
  } else {
    return [domainA, domainB];
  }
}

function assert_rtcerror_rejection(errorDetail, promise, desc) {
  return promise.then(
    res => {
      assert_unreached(`Expect promise to be rejected with RTCError, but instead got ${res}`);
    }, err => {
      assert_true(err instanceof RTCError,
        'Expect error object to be instance of RTCError');

      assert_equals(err.errorDetail, errorDetail,
        `Expect RTCError object have errorDetail set to ${errorDetail}`);

      return err;
    });
}

// construct a host string consist of domain and optionally port
// If the default HTTP/HTTPS port is used, window.location.port returns
// empty string.
function hostString(domain, port) {
  if(port === '') {
    return domain;
  } else {
    return `${domain}:${port}`;
  }
}