DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (c68fe15a81fc)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

Cu.importGlobalProperties(["fetch"]);

var EXPORTED_SYMBOLS = ["TopSiteAttribution"];

ChromeUtils.defineModuleGetter(
  this,
  "Services",
  "resource://gre/modules/Services.jsm"
);

ChromeUtils.defineModuleGetter(
  this,
  "Region",
  "resource://gre/modules/Region.jsm"
);

var TopSiteAttribution = {
  async makeRequest({ searchProvider, siteURL, source }) {
    function record(objectString, value = "") {
      recordTelemetryEvent("search_override_exp", objectString, value, {
        searchProvider,
        source,
      });
    }
    record("click");

    const attributionUrl = Services.prefs.getStringPref(
      `browser.newtabpage.searchTileOverride.${searchProvider}.attributionURL`,
      ""
    );
    if (!attributionUrl) {
      record("attribution", "abort");
      return;
    }
    const request = new Request(attributionUrl);
    request.headers.set("X-Region", Region.home);
    request.headers.set("X-Source", source);
    const response = await fetch(request);

    if (response.ok) {
      if (siteURL == response.responseText) {
        record("attribution", "success");
      } else {
        record("attribution", "url_mismatch");
      }
    } else {
      record("attribution", "failure");
    }
  },
};

function recordTelemetryEvent(method, objectString, value, extra) {
  Services.telemetry.setEventRecordingEnabled("top_sites", true);
  Services.telemetry.recordEvent(
    "top_sites",
    method,
    objectString,
    value,
    extra
  );
}