/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

const { AppConstants } = ChromeUtils.importESModule(
  "resource://gre/modules/AppConstants.sys.mjs"
);

let urlUtils = Cc["@mozilla.org/url-classifier/utils;1"].getService(
  Ci.nsIUrlClassifierUtils
);

function testMobileOnlyThreats() {
  // Mobile-only threat type(s):
  //   - goog-harmful-proto (POTENTIALLY_HARMFUL_APPLICATION)

  (function testUpdateRequest() {
    let requestWithPHA = urlUtils.makeUpdateRequestV4(
      ["goog-phish-proto", "goog-harmful-proto"],
      ["AAAAAA", "AAAAAA"]
    );

    let requestNoPHA = urlUtils.makeUpdateRequestV4(
      ["goog-phish-proto"],
      ["AAAAAA"]
    );

    if (AppConstants.platform === "android") {
      notEqual(
        requestWithPHA,
        requestNoPHA,
        "PHA (i.e. goog-harmful-proto) shouldn't be filtered on mobile platform."
      );
    } else {
      equal(
        requestWithPHA,
        requestNoPHA,
        "PHA (i.e. goog-harmful-proto) should be filtered on non-mobile platform."
      );
    }
  })();

  (function testFullHashRequest() {
    let requestWithPHA = urlUtils.makeFindFullHashRequestV4(
      ["goog-phish-proto", "goog-harmful-proto"],
      ["", ""], // state.
      [btoa("0123")]
    ); // prefix.

    let requestNoPHA = urlUtils.makeFindFullHashRequestV4(
      ["goog-phish-proto"],
      [""], // state.
      [btoa("0123")]
    ); // prefix.

    if (AppConstants.platform === "android") {
      notEqual(
        requestWithPHA,
        requestNoPHA,
        "PHA (i.e. goog-harmful-proto) shouldn't be filtered on mobile platform."
      );
    } else {
      equal(
        requestWithPHA,
        requestNoPHA,
        "PHA (i.e. goog-harmful-proto) should be filtered on non-mobile platform."
      );
    }
  })();
}

function testDesktopOnlyThreats() {
  // Desktop-only threats:
  //   - goog-downloadwhite-proto (CSD_WHITELIST)
  //   - goog-badbinurl-proto (MALICIOUS_BINARY)

  let requestWithDesktopOnlyThreats = urlUtils.makeUpdateRequestV4(
    ["goog-phish-proto", "goog-downloadwhite-proto", "goog-badbinurl-proto"],
    ["", "", ""]
  );

  let requestNoDesktopOnlyThreats = urlUtils.makeUpdateRequestV4(
    ["goog-phish-proto"],
    [""]
  );

  if (AppConstants.platform === "android") {
    equal(
      requestWithDesktopOnlyThreats,
      requestNoDesktopOnlyThreats,
      "Android shouldn't contain 'goog-downloadwhite-proto' and 'goog-badbinurl-proto'."
    );
  } else {
    notEqual(
      requestWithDesktopOnlyThreats,
      requestNoDesktopOnlyThreats,
      "Desktop should contain 'goog-downloadwhite-proto' and 'goog-badbinurl-proto'."
    );
  }
}

function run_test() {
  testMobileOnlyThreats();
  testDesktopOnlyThreats();
}
