зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1157712 - Fix multiple OS X notifications when someone joins a Loop room. Ensure we don't attempt to re-initialise twice. r=mikedeboer
This commit is contained in:
Родитель
2cf8e6853f
Коммит
1307e179d1
|
@ -218,7 +218,15 @@ let LoopUI;
|
|||
// Add observer notifications before the service is initialized
|
||||
Services.obs.addObserver(this, "loop-status-changed", false);
|
||||
|
||||
this.MozLoopService.initialize();
|
||||
// This is a promise for test purposes, but we don't want to be logging
|
||||
// expected errors to the console, so we catch them here.
|
||||
this.MozLoopService.initialize().catch(ex => {
|
||||
if (!ex.message ||
|
||||
(!ex.message.contains("not enabled") &&
|
||||
!ex.message.contains("not needed"))) {
|
||||
console.error(ex);
|
||||
}
|
||||
});
|
||||
this.updateToolbarState();
|
||||
},
|
||||
|
||||
|
|
|
@ -1072,6 +1072,7 @@ let gInitializeTimerFunc = (deferredInitialization) => {
|
|||
MozLoopServiceInternal.initialRegistrationDelayMilliseconds);
|
||||
};
|
||||
|
||||
let gServiceInitialized = false;
|
||||
|
||||
/**
|
||||
* Public API
|
||||
|
@ -1089,10 +1090,21 @@ this.MozLoopService = {
|
|||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Used to override the initalize timer function for test purposes.
|
||||
*/
|
||||
set initializeTimerFunc(value) {
|
||||
gInitializeTimerFunc = value;
|
||||
},
|
||||
|
||||
/**
|
||||
* Used to reset if the service has been initialized or not - for test
|
||||
* purposes.
|
||||
*/
|
||||
resetServiceInitialized: function() {
|
||||
gServiceInitialized = false;
|
||||
},
|
||||
|
||||
get roomsParticipantsCount() {
|
||||
return LoopRooms.participantsCount;
|
||||
},
|
||||
|
@ -1101,9 +1113,18 @@ this.MozLoopService = {
|
|||
* Initialized the loop service, and starts registration with the
|
||||
* push and loop servers.
|
||||
*
|
||||
* Note: this returns a promise for unit test purposes.
|
||||
*
|
||||
* @return {Promise}
|
||||
*/
|
||||
initialize: Task.async(function*() {
|
||||
// Ensure we don't setup things like listeners more than once.
|
||||
if (gServiceInitialized) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
gServiceInitialized = true;
|
||||
|
||||
// Do this here, rather than immediately after definition, so that we can
|
||||
// stub out API functions for unit testing
|
||||
Object.freeze(this);
|
||||
|
|
|
@ -40,11 +40,19 @@ add_task(function test_initialize_no_guest_rooms() {
|
|||
add_task(function test_initialize_with_guest_rooms() {
|
||||
Services.prefs.setBoolPref("loop.createdRoom", true);
|
||||
startTimerCalled = false;
|
||||
MozLoopService.resetServiceInitialized();
|
||||
|
||||
MozLoopService.initialize();
|
||||
|
||||
Assert.equal(startTimerCalled, true,
|
||||
"should start the timer when guest rooms have been created");
|
||||
|
||||
startTimerCalled = false;
|
||||
|
||||
MozLoopService.initialize();
|
||||
|
||||
Assert.equal(startTimerCalled, false,
|
||||
"should not have initialized a second time");
|
||||
});
|
||||
|
||||
function run_test() {
|
||||
|
|
|
@ -39,6 +39,7 @@ add_task(function* test_initialize_with_no_guest_rooms_and_no_auth_token() {
|
|||
add_task(function* test_initialize_with_created_room_and_no_auth_token() {
|
||||
Services.prefs.setBoolPref(LOOP_CREATED_ROOM_PREF, true);
|
||||
Services.prefs.clearUserPref(LOOP_FXA_TOKEN_PREF);
|
||||
MozLoopService.resetServiceInitialized();
|
||||
|
||||
loopServer.registerPathHandler("/registration", (request, response) => {
|
||||
response.setStatusLine(null, 200, "OK");
|
||||
|
@ -55,6 +56,7 @@ add_task(function* test_initialize_with_created_room_and_no_auth_token() {
|
|||
add_task(function* test_initialize_with_invalid_fxa_token() {
|
||||
Services.prefs.setCharPref(LOOP_FXA_PROFILE_PREF, FAKE_FXA_PROFILE);
|
||||
Services.prefs.setCharPref(LOOP_FXA_TOKEN_PREF, FAKE_FXA_TOKEN_DATA);
|
||||
MozLoopService.resetServiceInitialized();
|
||||
|
||||
// Only need to implement the FxA registration because the previous
|
||||
// test registered as a guest.
|
||||
|
@ -88,6 +90,7 @@ add_task(function* test_initialize_with_invalid_fxa_token() {
|
|||
add_task(function* test_initialize_with_fxa_token() {
|
||||
Services.prefs.setCharPref(LOOP_FXA_PROFILE_PREF, FAKE_FXA_PROFILE);
|
||||
Services.prefs.setCharPref(LOOP_FXA_TOKEN_PREF, FAKE_FXA_TOKEN_DATA);
|
||||
MozLoopService.resetServiceInitialized();
|
||||
|
||||
MozLoopService.errors.clear();
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче