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/. */
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",
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);
43 switch (aMessage.name) {
44 case "PhoneNumberService:FuzzyMatch:Return:KO":
45 Services.DOMRequest.fireError(req.request, msg.errorMsg);
47 case "PhoneNumberService:FuzzyMatch:Return:OK":
48 Services.DOMRequest.fireSuccess(req.request, msg.result);
51 if (DEBUG) debug("Wrong message: " + aMessage.name);
53 this.removeRequest(msg.requestID);
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);
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}),
79 normalize: function(aNumber) {
80 if (DEBUG) debug("normalize: " + aNumber);
81 return PhoneNumberNormalizer.Normalize(aNumber);
84 init: function(aWindow) {
85 if (DEBUG) debug("init call");
86 this.initDOMRequestHelper(aWindow, [
87 "PhoneNumberService:FuzzyMatch:Return:OK",
88 "PhoneNumberService:FuzzyMatch:Return:KO"
92 classID : Components.ID("{e2768710-eb17-11e2-91e2-0800200c9a66}"),
93 contractID : "@mozilla.org/phoneNumberService;1",
94 QueryInterface : XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer,
95 Ci.nsISupportsWeakReference,
99 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PhoneNumberService]);