async fetchCoverageJsonData()

in src/main/resources/static/coverage.js [174:216]


  async fetchCoverageJsonData(changeInfo, type) {
    if (type !== 'lines' && type !== 'percentages') {
      throw new Error(
          'Type is expected to be either "lines" or "percentages"');
    }

    const params = new URLSearchParams({
      host: changeInfo.host,
      project: changeInfo.project,
      change: changeInfo.changeNum,
      patchset: changeInfo.patchNum,
      type: type,
      format: 'json',
      concise: '1',
    });

    let coverageHost = COVERAGE_SERVICE_HOST[changeInfo.host];
    // If the host is not found, use CHROMIUM_COVERAGE_HOST by default.
    if (coverageHost === undefined) {
      coverageHost = CHROMIUM_COVERAGE_HOST;
    }
    const endpoint = coverageHost + COVERAGE_SERVICE_ENDPOINT_SUFFIX;
    const url = `${endpoint}?${params.toString()}`;
    const response = await fetch(url);
    const responseJson = await response.json();
    if (response.status == 400 &&
        responseJson.is_project_supported === false) {
      throw new Error(`"${changeInfo.project}" project is not supported ` +
                      `for code coverage`);
    }

    if (response.status == 500 &&
        responseJson.is_service_enabled === false) {
      throw new Error('Code coverage service is temporarily disabled');
    }

    if (!response.ok) {
      throw new Error(`Request code coverage data returned http ` +
                      `${response.status}`);
    }

    return responseJson;
  }