Commit 573fc373 authored by Luca Greco's avatar Luca Greco Committed by luca.greco@alcacoop.it
Browse files

Bug 1961440 - Defer ModelHubAddonWrapper initialization to first...

Bug 1961440 - Defer ModelHubAddonWrapper initialization to first AddonManager.getAddonsByTypes including mlmodel type. r=robwu

Differential Revision: https://phabricator.services.mozilla.com/D250453
parent ee073369
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -129,6 +129,9 @@ export const ModelHubProvider = {
  },

  async getAddonByID(id) {
    if (id?.endsWith(MODELHUB_ADDON_ID_SUFFIX) && !this.cache.size) {
      await this.refreshAddonCache();
    }
    return this.cache.get(id);
  },

@@ -149,7 +152,7 @@ export const ModelHubProvider = {
    }
  },

  async init() {
  init() {
    if (!lazy.MODELHUB_PROVIDER_ENABLED || this.initialized) {
      return;
    }
@@ -157,7 +160,6 @@ export const ModelHubProvider = {
    this.initialized = true;
    lazy.AddonManagerPrivate.registerProvider(this, [MODELHUB_ADDON_TYPE]);
    this.modelHub = new lazy.ModelHub();
    await this.refreshAddonCache();
  },

  async onUninstalled(addon) {
@@ -168,7 +170,7 @@ export const ModelHubProvider = {
    lazy.AddonManagerPrivate.callAddonListeners("onUninstalled", addon);
  },

  async clearAddonCache() {
  clearAddonCache() {
    this.cache.clear();
  },

@@ -180,6 +182,12 @@ export const ModelHubProvider = {
  },

  async refreshAddonCache() {
    // Return earlier if the model hub provider was disabled.
    // by the time it was being called.
    if (!lazy.MODELHUB_PROVIDER_ENABLED) {
      return;
    }

    const models = await this.modelHub.listModels();

    for (const model of models) {
+23 −6
Original line number Diff line number Diff line
@@ -58,17 +58,12 @@ add_task(
  },
  async function test_modelhub_provider_addon_wrappers() {
    let sandbox = sinon.createSandbox();
    await ModelHubProvider.clearAddonCache();
    ModelHubProvider.clearAddonCache();
    // Sanity checks.
    ok(
      AddonManager.hasProvider("ModelHubProvider"),
      "Expect ModelHubProvider to be registered"
    );
    Assert.deepEqual(
      await AddonManager.getAddonsByTypes(["mlmodel"]),
      [],
      "Expect getAddonsByTypes result to be initially empty"
    );
    Assert.ok(
      ModelHubProvider.modelHub,
      "Expect modelHub instance to be found"
@@ -136,6 +131,10 @@ add_task(
      .stub(ModelHubProvider.modelHub, "getOwnerIcon")
      .resolves("chrome://mozapps/skin/extensions/extensionGeneric.svg");

    const deleteModels = sinon
      .stub(ModelHubProvider.modelHub, "deleteModels")
      .resolves();

    const modelWrappers = await AddonManager.getAddonsByTypes(["mlmodel"]);

    // Check that the stubs were called the expected number of times.
@@ -268,6 +267,24 @@ add_task(
      `Got the expected result from getAddonByID for ${modelWrappers[1].id}`
    );

    Assert.equal(
      deleteModels.callCount,
      1,
      "Got the expected number of ModelHub.deleteModels() method calls"
    );

    Assert.deepEqual(
      deleteModels.firstCall.args,
      [
        {
          model: mockModels[0].name,
          revision: mockModels[0].revision,
          deletedBy: "about:addons",
        },
      ],
      "Got the expected arguments in the ModelHub.deleteModels() method call"
    );

    // Reset all sinon stubs.
    sandbox.restore();