/* 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';

const {classes: Cc, interfaces: Ci, utils: Cu, manager: Cm} = Components;

Cu.import('resource://gre/modules/XPCOMUtils.jsm');

const cid = '{17a84227-28f4-453d-9b80-9ae75a5682e0}';
const contractId = '@mozilla.org/test-update-provider;1';

function TestUpdateProvider() {}
TestUpdateProvider.prototype = {
  QueryInterface: XPCOMUtils.generateQI([Ci.nsISystemUpdateProvider]),

  checkForUpdate: function() {
    dump('check for update');
    this._listener.onUpdateAvailable('test-type', 'test-version', 'test-description', Date.now().valueOf(), 5566);
  },

  startDownload: function() {
    dump('test start download');
    this._listener.onProgress(10, 100);
  },

  stopDownload: function() {
    dump('test stop download');
  },

  applyUpdate: function() {
    dump('apply update');
  },

  setParameter: function(name, value) {
    dump('set parameter');
    return (name === 'dummy' && value === 'dummy-value');
  },

  getParameter: function(name) {
    dump('get parameter');
    if (name === 'dummy') {
      return 'dummy-value';
    }
  },

  setListener: function(listener) {
    this._listener = listener;
  },

  unsetListener: function() {
    this._listener = null;
  },
};

let factory = {
  createInstance: function(outer, iid) {
    if (outer) {
      throw Components.results.NS_ERROR_NO_AGGREGATION;
    }

    return new TestUpdateProvider().QueryInterface(iid);
  },
  lockFactory: function(aLock) {
    throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
  },
  QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory])
};

Cm.nsIComponentRegistrar.registerFactory(Components.ID(cid), '', contractId, factory);

let cm = Cc['@mozilla.org/categorymanager;1'].getService(Ci.nsICategoryManager);
cm.addCategoryEntry('system-update-provider', 'DummyProvider',
                    contractId + ',' + cid, false, true);

Cu.import('resource://gre/modules/SystemUpdateService.jsm');
this.SystemUpdateService.addProvider('{17a84227-28f4-453d-9b80-9ae75a5682e0}',
                                     '@mozilla.org/test-update-provider;1',
                                     'DummyProvider');