dom/tests/mochitest/notification/MockServices.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/tests/mochitest/notification/MockServices.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,81 @@
     1.4 +var MockServices = (function () {
     1.5 +  "use strict";
     1.6 +
     1.7 +  const MOCK_ALERTS_CID = SpecialPowers.wrap(SpecialPowers.Components)
     1.8 +                          .ID("{48068bc2-40ab-4904-8afd-4cdfb3a385f3}");
     1.9 +  const ALERTS_SERVICE_CONTRACT_ID = "@mozilla.org/alerts-service;1";
    1.10 +
    1.11 +  const MOCK_SYSTEM_ALERTS_CID = SpecialPowers.wrap(SpecialPowers.Components)
    1.12 +                                 .ID("{e86d888c-e41b-4b78-9104-2f2742a532de}");
    1.13 +  const SYSTEM_ALERTS_SERVICE_CONTRACT_ID = "@mozilla.org/system-alerts-service;1";
    1.14 +
    1.15 +  var registrar = SpecialPowers.wrap(SpecialPowers.Components).manager
    1.16 +                  .QueryInterface(SpecialPowers.Ci.nsIComponentRegistrar);
    1.17 +
    1.18 +  var activeNotifications = Object.create(null);
    1.19 +
    1.20 +  var mockAlertsService = {
    1.21 +    showAlertNotification: function(imageUrl, title, text, textClickable,
    1.22 +                                    cookie, alertListener, name) {
    1.23 +      var listener = SpecialPowers.wrap(alertListener);
    1.24 +      activeNotifications[name] = {
    1.25 +        listener: listener,
    1.26 +        cookie: cookie
    1.27 +      };
    1.28 +
    1.29 +      // fake async alert show event
    1.30 +      setTimeout(function () {
    1.31 +        listener.observe(null, "alertshow", cookie);
    1.32 +      }, 100);
    1.33 +
    1.34 +      // ?? SpecialPowers.wrap(alertListener).observe(null, "alertclickcallback", cookie);
    1.35 +    },
    1.36 +
    1.37 +    showAppNotification: function(imageUrl, title, text, textClickable,
    1.38 +                                  manifestURL, alertListener, name) {
    1.39 +      this.showAlertNotification(imageUrl, title, text, textClickable, "", alertListener, name);
    1.40 +    },
    1.41 +
    1.42 +    closeAlert: function(name) {
    1.43 +      var notification = activeNotifications[name];
    1.44 +      if (notification) {
    1.45 +        notification.listener.observe(null, "alertfinished", notification.cookie);
    1.46 +        delete activeNotifications[name];
    1.47 +      }
    1.48 +    },
    1.49 +
    1.50 +    QueryInterface: function(aIID) {
    1.51 +      if (SpecialPowers.wrap(aIID).equals(SpecialPowers.Ci.nsISupports) ||
    1.52 +          SpecialPowers.wrap(aIID).equals(SpecialPowers.Ci.nsIAlertsService)) {
    1.53 +        return this;
    1.54 +      }
    1.55 +      throw SpecialPowers.Components.results.NS_ERROR_NO_INTERFACE;
    1.56 +    },
    1.57 +
    1.58 +    createInstance: function(aOuter, aIID) {
    1.59 +      if (aOuter != null) {
    1.60 +        throw SpecialPowers.Components.results.NS_ERROR_NO_AGGREGATION;
    1.61 +      }
    1.62 +      return this.QueryInterface(aIID);
    1.63 +    }
    1.64 +  };
    1.65 +  mockAlertsService = SpecialPowers.wrapCallbackObject(mockAlertsService);
    1.66 +
    1.67 +  // MockServices API
    1.68 +  return {
    1.69 +    register: function () {
    1.70 +      registrar.registerFactory(MOCK_ALERTS_CID, "alerts service",
    1.71 +          ALERTS_SERVICE_CONTRACT_ID,
    1.72 +          mockAlertsService);
    1.73 +
    1.74 +      registrar.registerFactory(MOCK_SYSTEM_ALERTS_CID, "system alerts service",
    1.75 +          SYSTEM_ALERTS_SERVICE_CONTRACT_ID,
    1.76 +          mockAlertsService);
    1.77 +    },
    1.78 +
    1.79 +    unregister: function () {
    1.80 +      registrar.unregisterFactory(MOCK_ALERTS_CID, mockAlertsService);
    1.81 +      registrar.unregisterFactory(MOCK_SYSTEM_ALERTS_CID, mockAlertsService);
    1.82 +    },
    1.83 +  };
    1.84 +})();

mercurial