Bumping manifests a=b2g-bump
[gecko.git] / dom / phonenumberutils / PhoneNumberService.js
bloba91d8635442d1b6218c856d856a35eab8b605595
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3  * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 "use strict";
7 const DEBUG = false;
8 function debug(s) { dump("-*- PhoneNumberService.js: " + s + "\n"); }
10 const Cc = Components.classes;
11 const Ci = Components.interfaces;
12 const Cu = Components.utils;
14 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
15 Cu.import("resource://gre/modules/Services.jsm");
16 Cu.import("resource://gre/modules/DOMRequestHelper.jsm");
17 Cu.import("resource://gre/modules/PhoneNumberUtils.jsm");
18 Cu.import("resource://gre/modules/PhoneNumberNormalizer.jsm");
20 XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
21                                    "@mozilla.org/childprocessmessagemanager;1",
22                                    "nsIMessageSender");
24 // PhoneNumberService
26 function PhoneNumberService()
28   if (DEBUG) debug("Constructor");
31 PhoneNumberService.prototype = {
32   __proto__: DOMRequestIpcHelper.prototype,
34   receiveMessage: function(aMessage) {
35     if (DEBUG) debug("receiveMessage: " + aMessage.name);
36     let msg = aMessage.json;
38     let req = this.getRequest(msg.requestID);
39     if (!req) {
40       return;
41     }
43     switch (aMessage.name) {
44       case "PhoneNumberService:FuzzyMatch:Return:KO":
45         Services.DOMRequest.fireError(req.request, msg.errorMsg);
46         break;
47       case "PhoneNumberService:FuzzyMatch:Return:OK":
48         Services.DOMRequest.fireSuccess(req.request, msg.result);
49         break;
50       default:
51         if (DEBUG) debug("Wrong message: " + aMessage.name);
52     }
53     this.removeRequest(msg.requestID);
54   },
56   fuzzyMatch: function(aNumber1, aNumber2) {
57     if (DEBUG) debug("fuzzyMatch: " + aNumber1 + ", " + aNumber2);
58     let request = this.createRequest();
60     if ((aNumber1 && !aNumber2) || (aNumber2 && !aNumber1)) {
61       // if only one of the numbers is empty/null/undefined and the other
62       // number is not, we can fire false result in next tick
63       Services.DOMRequest.fireSuccessAsync(request, false);
64     } else if ((aNumber1 === aNumber2) ||
65         (PhoneNumberNormalizer.Normalize(aNumber1) === PhoneNumberNormalizer.Normalize(aNumber2))) {
66       // if we have a simple match fire successful request in next tick
67       Services.DOMRequest.fireSuccessAsync(request, true);
68     } else {
69       // invoke fuzzy matching in the parent
70       let options = { number1: aNumber1, number2: aNumber2 };
71       cpmm.sendAsyncMessage("PhoneNumberService:FuzzyMatch",
72                            {requestID: this.getRequestId({request: request}),
73                             options: options});
74     }
76     return request;
77   },
79   normalize: function(aNumber) {
80     if (DEBUG) debug("normalize: " + aNumber);
81     return PhoneNumberNormalizer.Normalize(aNumber);
82   },
84   init: function(aWindow) {
85     if (DEBUG) debug("init call");
86     this.initDOMRequestHelper(aWindow, [
87       "PhoneNumberService:FuzzyMatch:Return:OK",
88       "PhoneNumberService:FuzzyMatch:Return:KO"
89     ]);
90   },
92   classID : Components.ID("{e2768710-eb17-11e2-91e2-0800200c9a66}"),
93   contractID : "@mozilla.org/phoneNumberService;1",
94   QueryInterface : XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer,
95                                           Ci.nsISupportsWeakReference,
96                                           Ci.nsIObserver]),
99 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PhoneNumberService]);