1- define ( 'user' , [ 'capabilities' , 'log' ] , function ( capabilities , log ) {
1+ define ( 'user' ,
2+ [ 'capabilities' , 'log' , 'mobilenetwork' , 'settings' , 'utils' ] ,
3+ function ( capabilities , log , mobilenetwork , site_settings , utils ) {
24
35 var console = log ( 'user' ) ;
46
@@ -15,6 +17,76 @@ define('user', ['capabilities', 'log'], function(capabilities, log) {
1517 permissions = JSON . parse ( localStorage . getItem ( 'permissions' ) || '{}' ) ;
1618 }
1719
20+ function detect_mobile_network ( navigator ) {
21+ navigator = navigator || window . navigator ;
22+
23+ var GET = utils . getVars ( ) ;
24+ var mcc ;
25+ var mnc ;
26+ var region ;
27+
28+ // Hardcoded carrier should never get overridden.
29+ var carrier = site_settings . carrier ;
30+ if ( carrier && typeof carrier === 'object' ) {
31+ carrier = carrier . slug ;
32+ }
33+ carrier = carrier || GET . carrier || null ;
34+
35+ if ( ! carrier ) {
36+ // Get mobile region and carrier information passed via querystring.
37+ mcc = GET . mcc ;
38+ mnc = GET . mnc ;
39+ }
40+
41+ try {
42+ // When Fireplace is served as a privileged packaged app (and not
43+ // served via Yulelog) our JS will have direct access to this API.
44+ var conn = navigator . mozMobileConnection ;
45+ if ( conn ) {
46+ // `MCC`: Mobile Country Code
47+ // `MNC`: Mobile Network Code
48+ // `lastKnownNetwork`: `{MCC}-{MNC}`
49+ var network = ( conn . lastKnownNetwork || conn . lastKnownHomeNetwork || '-' ) . split ( '-' ) ;
50+ mcc = network [ 0 ] ;
51+ mnc = network [ 1 ] ;
52+ console . log ( 'MCC = ' + mcc + ', MNC = ' + mnc ) ;
53+ } else {
54+ console . warn ( 'Error accessing navigator.mozMobileConnection' ) ;
55+ }
56+ } catch ( e ) {
57+ // Fail gracefully if `navigator.mozMobileConnection` gives us problems.
58+ console . warn ( 'Error accessing navigator.mozMobileConnection:' , e ) ;
59+ }
60+
61+ if ( mcc || mnc ) {
62+ // Look up region and carrier from MCC (Mobile Country Code)
63+ // and MNC (Mobile Network Code).
64+ var network = mobilenetwork . getNetwork ( mcc , mnc ) ;
65+ region = network . region ;
66+ carrier = network . carrier ;
67+ }
68+
69+ // Get region from settings saved to localStorage.
70+ region = settings . region || region ;
71+
72+ // If it turns out the region is null, when we get a response from an
73+ // API request, we look at the `API-Filter` header to determine the region
74+ // in which Zamboni geolocated the user.
75+
76+ settings . carrier = carrier || null ;
77+ settings . region = region || null ;
78+ }
79+
80+ detect_mobile_network ( navigator ) ;
81+
82+ if ( save_to_ls ) {
83+ save_settings ( ) ;
84+ }
85+
86+ function clear_settings ( ) {
87+ settings = { } ;
88+ }
89+
1890 function clear_token ( ) {
1991 console . log ( 'Clearing user token' ) ;
2092
@@ -29,7 +101,7 @@ define('user', ['capabilities', 'log'], function(capabilities, log) {
29101 }
30102
31103 function get_setting ( setting ) {
32- return settings [ setting ] ;
104+ return settings [ setting ] || null ;
33105 }
34106
35107 function get_permission ( setting ) {
@@ -96,7 +168,9 @@ define('user', ['capabilities', 'log'], function(capabilities, log) {
96168 }
97169
98170 return {
171+ clear_settings : clear_settings ,
99172 clear_token : clear_token ,
173+ detect_mobile_network : detect_mobile_network ,
100174 get_setting : get_setting ,
101175 get_permission : get_permission ,
102176 get_settings : get_settings ,
0 commit comments