1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/phonenumberutils/PhoneNumberService.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,99 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this file, 1.6 + * You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +"use strict"; 1.9 + 1.10 +const DEBUG = false; 1.11 +function debug(s) { dump("-*- PhoneNumberService.js: " + s + "\n"); } 1.12 + 1.13 +const Cc = Components.classes; 1.14 +const Ci = Components.interfaces; 1.15 +const Cu = Components.utils; 1.16 + 1.17 +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); 1.18 +Cu.import("resource://gre/modules/Services.jsm"); 1.19 +Cu.import("resource://gre/modules/DOMRequestHelper.jsm"); 1.20 +Cu.import("resource://gre/modules/PhoneNumberUtils.jsm"); 1.21 +Cu.import("resource://gre/modules/PhoneNumberNormalizer.jsm"); 1.22 + 1.23 +XPCOMUtils.defineLazyServiceGetter(this, "cpmm", 1.24 + "@mozilla.org/childprocessmessagemanager;1", 1.25 + "nsIMessageSender"); 1.26 + 1.27 +// PhoneNumberService 1.28 + 1.29 +function PhoneNumberService() 1.30 +{ 1.31 + if (DEBUG) debug("Constructor"); 1.32 +} 1.33 + 1.34 +PhoneNumberService.prototype = { 1.35 + __proto__: DOMRequestIpcHelper.prototype, 1.36 + 1.37 + receiveMessage: function(aMessage) { 1.38 + if (DEBUG) debug("receiveMessage: " + aMessage.name); 1.39 + let msg = aMessage.json; 1.40 + 1.41 + let req = this.getRequest(msg.requestID); 1.42 + if (!req) { 1.43 + return; 1.44 + } 1.45 + 1.46 + switch (aMessage.name) { 1.47 + case "PhoneNumberService:FuzzyMatch:Return:KO": 1.48 + Services.DOMRequest.fireError(req.request, msg.errorMsg); 1.49 + break; 1.50 + case "PhoneNumberService:FuzzyMatch:Return:OK": 1.51 + Services.DOMRequest.fireSuccess(req.request, msg.result); 1.52 + break; 1.53 + default: 1.54 + if (DEBUG) debug("Wrong message: " + aMessage.name); 1.55 + } 1.56 + this.removeRequest(msg.requestID); 1.57 + }, 1.58 + 1.59 + fuzzyMatch: function(aNumber1, aNumber2) { 1.60 + if (DEBUG) debug("fuzzyMatch: " + aNumber1 + ", " + aNumber2); 1.61 + let request = this.createRequest(); 1.62 + 1.63 + if ((aNumber1 && !aNumber2) || (aNumber2 && !aNumber1)) { 1.64 + // if only one of the numbers is empty/null/undefined and the other 1.65 + // number is not, we can fire false result in next tick 1.66 + Services.DOMRequest.fireSuccessAsync(request, false); 1.67 + } else if ((aNumber1 === aNumber2) || 1.68 + (PhoneNumberNormalizer.Normalize(aNumber1) === PhoneNumberNormalizer.Normalize(aNumber2))) { 1.69 + // if we have a simple match fire successful request in next tick 1.70 + Services.DOMRequest.fireSuccessAsync(request, true); 1.71 + } else { 1.72 + // invoke fuzzy matching in the parent 1.73 + let options = { number1: aNumber1, number2: aNumber2 }; 1.74 + cpmm.sendAsyncMessage("PhoneNumberService:FuzzyMatch", 1.75 + {requestID: this.getRequestId({request: request}), 1.76 + options: options}); 1.77 + } 1.78 + 1.79 + return request; 1.80 + }, 1.81 + 1.82 + normalize: function(aNumber) { 1.83 + if (DEBUG) debug("normalize: " + aNumber); 1.84 + return PhoneNumberNormalizer.Normalize(aNumber); 1.85 + }, 1.86 + 1.87 + init: function(aWindow) { 1.88 + if (DEBUG) debug("init call"); 1.89 + this.initDOMRequestHelper(aWindow, [ 1.90 + "PhoneNumberService:FuzzyMatch:Return:OK", 1.91 + "PhoneNumberService:FuzzyMatch:Return:KO" 1.92 + ]); 1.93 + }, 1.94 + 1.95 + classID : Components.ID("{e2768710-eb17-11e2-91e2-0800200c9a66}"), 1.96 + contractID : "@mozilla.org/phoneNumberService;1", 1.97 + QueryInterface : XPCOMUtils.generateQI([Ci.nsIDOMGlobalPropertyInitializer, 1.98 + Ci.nsISupportsWeakReference, 1.99 + Ci.nsIObserver]), 1.100 +} 1.101 + 1.102 +this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PhoneNumberService]);