Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Merge pull request #23758 from ADLR-es/fix-bug-1060101
Browse files Browse the repository at this point in the history
Bug 1060101 - [Settings][Facebook] Removing a Facebook account from Cont...
  • Loading branch information
jmcanterafonseca committed Sep 12, 2014
2 parents 1928739 + 9d842d6 commit f33bf14
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 113 deletions.
15 changes: 4 additions & 11 deletions apps/communications/contacts/js/contacts.js
Expand Up @@ -10,8 +10,8 @@
/* global navigationStack */
/* global SmsIntegration */
/* global utils */
/* global DeferredActions */
/* global TAG_OPTIONS */
/* global Migrator */

/* exported COMMS_APP_ORIGIN */
/* exported SCALE_RATIO */
Expand Down Expand Up @@ -231,7 +231,9 @@ var Contacts = (function() {

var loadDeferredActions = function loadDeferredActions() {
window.removeEventListener('listRendered', loadDeferredActions);
LazyLoader.load('js/deferred_actions.js');
LazyLoader.load('js/deferred_actions.js', function() {
DeferredActions.execute();
});
};

var init = function init() {
Expand All @@ -243,15 +245,6 @@ var Contacts = (function() {

window.addEventListener('listRendered', loadDeferredActions);

var config = utils.cookie.load();

// If the migration is not complete
if (!config || !config.fbMigrated || !config.accessTokenMigrated) {
LazyLoader.load('js/migrator.js', function() {
Migrator.start(config);
});
}

// Tell audio channel manager that we want to adjust the notification
// channel if the user press the volumeup/volumedown buttons in Contacts.
if (navigator.mozAudioChannelManager) {
Expand Down
26 changes: 19 additions & 7 deletions apps/communications/contacts/js/deferred_actions.js
@@ -1,11 +1,14 @@
'use strict';
/* global ImportStatusData, LazyLoader, fb, utils */
/* global ImportStatusData, LazyLoader, fb, utils, Migrator */
/* exported DeferredActions */

// Methods not related with the list rendering that must be executed after
// render to not damage performance.
(function() {
var init = function init() {
checkFacebookSynchronization(utils.cookie.load());
var DeferredActions = (function() {
var execute = function execute() {
var config = utils.cookie.load();
checkFacebookSynchronization(config);
checkVersionMigration(config);
};

function checkFacebookSynchronization(config) {
Expand All @@ -16,8 +19,7 @@

LazyLoader.load([
'/facebook/js/fb_sync.js',
'/shared/js/contacts/import/import_status_data.js',
'/shared/js/contacts/import/facebook/fb_utils.js'
'/shared/js/contacts/import/import_status_data.js'
], function() {
var fbutils = fb.utils;

Expand Down Expand Up @@ -49,5 +51,15 @@
});
}

init();
function checkVersionMigration(config) {
if (!config || !config.fbMigrated || !config.accessTokenMigrated) {
LazyLoader.load('js/migrator.js', function() {
Migrator.start(config);
});
}
}

return {
'execute': execute
};
})();
1 change: 0 additions & 1 deletion apps/communications/contacts/js/migrator.js
Expand Up @@ -23,7 +23,6 @@ var Migrator = (function(){
function migrateFbToken() {
LazyLoader.load([
'/shared/js/contacts/import/import_status_data.js',
'/shared/js/contacts/import/facebook/fb_utils.js'
], function() {
var STORAGE_KEY = fb.utils.TOKEN_DATA_KEY;

Expand Down
49 changes: 25 additions & 24 deletions apps/communications/contacts/test/unit/deferred_actions_test.js
@@ -1,14 +1,16 @@
'use strict';
/* global MockImportStatusData, Mockfb, MockContacts, MockNavigationStack,
MockCookie */
MockCookie, DeferredActions*/

require('/shared/js/lazy_loader.js');
requireApp('communications/contacts/test/unit/mock_import_status_data.js');
requireApp('communications/contacts/test/unit/mock_fb.js');
requireApp('communications/contacts/test/unit/mock_navigation.js');
requireApp('communications/contacts/test/unit/mock_contacts_list_obj.js');
requireApp('communications/contacts/test/unit/mock_contacts.js');
requireApp('communications/contacts/test/unit/mock_cookie.js');
requireApp('communications/contacts/test/unit/mock_fb.js');
requireApp('communications/contacts/js/deferred_actions.js');


if (!navigator.addIdleObserver) {
Expand All @@ -23,10 +25,6 @@ if (!window.ImportStatusData) {
window.ImportStatusData = null;
}

if (!window.LazyLoader) {
window.LazyLoader = {load: function(){}};
}

if (!window.contacts) {
window.contacts = null;
}
Expand Down Expand Up @@ -61,28 +59,14 @@ suite('Post rendering', function() {
window.fb = Mockfb;

mockNavigationStack = new MockNavigationStack();
sinon.stub(window.LazyLoader, 'load', function(files, callback) {
callback();
});
});

suiteTeardown(function() {
window.ImportStatusData = realImportStatusData;
window.LazyLoader.load.restore();
});

suite('Post rendering actions', function() {
var realAddIdleObserver, realRemoveIdleObserver;

suiteSetup(function() {
realAddIdleObserver = navigator.addIdleObserver;
navigator.addIdleObserver = function(idleObserver) {
idleObserver.onidle();
};

realRemoveIdleObserver = navigator.removeIdleObserver;
navigator.removeIdleObserver = function() {};

sinon.stub(navigator, 'addIdleObserver', function(idleObserver) {
idleObserver.onidle();
});
Expand All @@ -93,8 +77,6 @@ suite('Post rendering', function() {
suiteTeardown(function() {
navigator.addIdleObserver.restore();
navigator.removeIdleObserver.restore();
navigator.addIdleObserver = realAddIdleObserver;
navigator.removeIdleObserver = realRemoveIdleObserver;
});

setup(function() {
Expand All @@ -105,15 +87,34 @@ suite('Post rendering', function() {
test('FB sync scheduling when synced in ftu', function(done) {
sinon.stub(Mockfb.sync, 'scheduleNextSync', function() {
done(function() {
Mockfb.sync.scheduleNextSync.restore();
});
Mockfb.sync.scheduleNextSync.restore();
});
});

MockCookie.update({
fbMigrated: true,
accessTokenMigrated: true
});

window.ImportStatusData.put(Mockfb.utils.SCHEDULE_SYNC_KEY, Date.now())
.then(function() {
requireApp('communications/contacts/js/deferred_actions.js');
DeferredActions.execute();
}
);
});

test('Version migration triggered when needed', function(done) {
sinon.stub(window.LazyLoader, 'load', function(file) {
if (file.indexOf('migrator.js') > -1) {
done();
}
});

MockCookie.update({
fbScheduleDone: true
});

DeferredActions.execute();
});
});
});
142 changes: 72 additions & 70 deletions shared/js/contacts/import/import_status_data.js
Expand Up @@ -9,85 +9,87 @@
*
*/

var ImportStatusData = (function ImportStatusData() {
var store = null;
var DS_NAME = 'Import_Status_Data';
if (!window.ImportStatusData) {
var ImportStatusData = (function() {
var store = null;
var DS_NAME = 'Import_Status_Data';

var datastoreLoading = false;
var datastoreLoaded = false;
var DS_LOADED_EVENT = 'datastore_loaded';
var datastoreLoading = false;
var datastoreLoaded = false;
var DS_LOADED_EVENT = 'datastore_loaded';

var getDatastore = function getDatastore() {
return new Promise(function(resolve, reject) {
if (!navigator.getDataStores) {
reject({
name: 'DatastoreNotEnabled'
});
return;
}
var getDatastore = function getDatastore() {
return new Promise(function(resolve, reject) {
if (!navigator.getDataStores) {
reject({
name: 'DatastoreNotEnabled'
});
return;
}

if (datastoreLoaded) {
resolve(store);
return;
}

if (datastoreLoading) {
document.addEventListener(DS_LOADED_EVENT, function loadedHandler() {
document.removeEventListener(DS_LOADED_EVENT, loadedHandler);
if (datastoreLoaded) {
resolve(store);
});
}
return;
}

datastoreLoading = true;
navigator.getDataStores(DS_NAME).then(function(stores) {
store = stores[0];
}, reject).then(function() {
datastoreLoading = false;
datastoreLoaded = true;
document.dispatchEvent(new CustomEvent(DS_LOADED_EVENT));
if (datastoreLoading) {
document.addEventListener(DS_LOADED_EVENT, function loadedHandler() {
document.removeEventListener(DS_LOADED_EVENT, loadedHandler);
resolve(store);
});
}

resolve(store);
}, reject);
});
};
datastoreLoading = true;
navigator.getDataStores(DS_NAME).then(function(stores) {
store = stores[0];
}, reject).then(function() {
datastoreLoading = false;
datastoreLoaded = true;
document.dispatchEvent(new CustomEvent(DS_LOADED_EVENT));

resolve(store);
}, reject);
});
};

var put = function put(key, obj) {
return new Promise(function(resolve, reject) {
getDatastore().then(function success(store) {
store.put(obj, key).then(resolve, reject);
}, reject);
});
};
var put = function put(key, obj) {
return new Promise(function(resolve, reject) {
getDatastore().then(function success(store) {
store.put(obj, key).then(resolve, reject);
}, reject);
});
};

var remove = function remove(key) {
return new Promise(function(resolve, reject) {
getDatastore().then(function success(store) {
store.remove(key).then(resolve, reject);
}, reject);
});
};
var remove = function remove(key) {
return new Promise(function(resolve, reject) {
getDatastore().then(function success(store) {
store.remove(key).then(resolve, reject);
}, reject);
});
};

var get = function get(key) {
return new Promise(function(resolve, reject) {
getDatastore().then(function success(store) {
store.get(key).then(resolve, reject);
}, reject);
});
};
var get = function get(key) {
return new Promise(function(resolve, reject) {
getDatastore().then(function success(store) {
store.get(key).then(resolve, reject);
}, reject);
});
};

var clear = function clear() {
return new Promise(function(resolve, reject) {
getDatastore().then(function success(store) {
store.clear().then(resolve, reject);
}, reject);
});
};
var clear = function clear() {
return new Promise(function(resolve, reject) {
getDatastore().then(function success(store) {
store.clear().then(resolve, reject);
}, reject);
});
};

return {
put: put,
remove: remove,
get: get,
clear: clear
};
return {
put: put,
remove: remove,
get: get,
clear: clear
};

})();
})();
}

0 comments on commit f33bf14

Please sign in to comment.