mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 09:15:35 +00:00
Bug 1383070
- Intermittent: Uncaught exception Should load onboarding overlay, r=mossop
MozReview-Commit-ID: 6avWDMV3PAg --HG-- extra : rebase_source : e8a9ed4d88d9fe566b5589b1bfd208ecb59a2fa4
This commit is contained in:
parent
f690118f45
commit
ca0a680558
@ -683,8 +683,6 @@ class Onboarding {
|
||||
// Show the target tour notification
|
||||
this._notificationBar = this._renderNotificationBar();
|
||||
this._notificationBar.addEventListener("click", this);
|
||||
this._window.document.body.appendChild(this._notificationBar);
|
||||
|
||||
this._notificationBar.dataset.targetTourId = targetTour.id;
|
||||
let notificationStrings = targetTour.getNotificationStrings(this._bundle);
|
||||
let actionBtn = this._notificationBar.querySelector("#onboarding-notification-action-btn");
|
||||
@ -694,6 +692,7 @@ class Onboarding {
|
||||
let tourMessage = this._notificationBar.querySelector("#onboarding-notification-tour-message");
|
||||
tourMessage.textContent = notificationStrings.message;
|
||||
this._notificationBar.classList.add("onboarding-opened");
|
||||
this._window.document.body.appendChild(this._notificationBar);
|
||||
|
||||
let params = [];
|
||||
if (startQueueLength != queue.length) {
|
||||
@ -889,6 +888,12 @@ if (Services.prefs.getBoolPref("browser.onboarding.enabled", false) &&
|
||||
let window = evt.target.defaultView;
|
||||
let location = window.location.href;
|
||||
if (location == ABOUT_NEWTAB_URL || location == ABOUT_HOME_URL) {
|
||||
// We just want to run tests as quick as possible
|
||||
// so in the automation test, we don't do `requestIdleCallback`.
|
||||
if (Cu.isInAutomation) {
|
||||
new Onboarding(window);
|
||||
return;
|
||||
}
|
||||
window.requestIdleCallback(() => {
|
||||
new Onboarding(window);
|
||||
});
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(3);
|
||||
|
||||
add_task(async function test_show_tour_notifications_in_order() {
|
||||
resetOnboardingDefaultState();
|
||||
Preferences.set("browser.onboarding.notification.max-prompt-count-per-tour", 1);
|
||||
@ -11,15 +13,12 @@ add_task(async function test_show_tour_notifications_in_order() {
|
||||
let tourIds = TOUR_IDs;
|
||||
let tab = null;
|
||||
let targetTourId = null;
|
||||
let reloadPromise = null;
|
||||
let expectedPrefUpdate = null;
|
||||
await loopTourNotificationQueueOnceInOrder();
|
||||
await loopTourNotificationQueueOnceInOrder();
|
||||
|
||||
expectedPrefUpdate = promisePrefUpdated("browser.onboarding.notification.finished", true);
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await expectedPrefUpdate;
|
||||
let tourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -29,12 +28,9 @@ add_task(async function test_show_tour_notifications_in_order() {
|
||||
async function loopTourNotificationQueueOnceInOrder() {
|
||||
for (let i = 0; i < tourIds.length; ++i) {
|
||||
if (tab) {
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
} else {
|
||||
tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
}
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
@ -48,8 +44,7 @@ add_task(async function test_open_target_tour_from_notification() {
|
||||
resetOnboardingDefaultState();
|
||||
skipMuteNotificationOnFirstSession();
|
||||
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
let targetTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -61,4 +56,3 @@ add_task(async function test_open_target_tour_from_notification() {
|
||||
is(`${targetTourId}-page`, activePageId, "Should display the target tour page.");
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
});
|
||||
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(3);
|
||||
|
||||
add_task(async function test_not_show_notification_for_completed_tour() {
|
||||
resetOnboardingDefaultState();
|
||||
skipMuteNotificationOnFirstSession();
|
||||
@ -16,8 +18,7 @@ add_task(async function test_not_show_notification_for_completed_tour() {
|
||||
}
|
||||
}
|
||||
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
let targetTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -35,17 +36,14 @@ add_task(async function test_skip_notification_for_completed_tour() {
|
||||
await setTourCompletedState(tourIds[1], true);
|
||||
|
||||
// Test show notification for the 1st tour
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
let targetTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
is(targetTourId, tourIds[0], "Should show notification for incompleted tour");
|
||||
|
||||
// Test skip the 2nd tour and show notification for the 3rd tour
|
||||
let reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
targetTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -57,15 +55,12 @@ add_task(async function test_mute_notification_on_1st_session() {
|
||||
resetOnboardingDefaultState();
|
||||
|
||||
// Test no notifications during the mute duration on the 1st session
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
// The tour notification would be prompted on idle, so we wait idle twice here before proceeding
|
||||
await waitUntilWindowIdle(tab.linkedBrowser);
|
||||
await waitUntilWindowIdle(tab.linkedBrowser);
|
||||
let reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await waitUntilWindowIdle(tab.linkedBrowser);
|
||||
await waitUntilWindowIdle(tab.linkedBrowser);
|
||||
@ -76,9 +71,7 @@ add_task(async function test_mute_notification_on_1st_session() {
|
||||
let muteTime = Preferences.get("browser.onboarding.notification.mute-duration-on-first-session-ms");
|
||||
let lastTime = Math.floor((Date.now() - muteTime - 1) / 1000);
|
||||
Preferences.set("browser.onboarding.notification.last-time-of-changing-tour-sec", lastTime);
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
promptCount = Preferences.get("browser.onboarding.notification.prompt-count", 0);
|
||||
|
@ -3,32 +3,28 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(3);
|
||||
|
||||
add_task(async function test_move_on_to_next_notification_when_reaching_max_prompt_count() {
|
||||
resetOnboardingDefaultState();
|
||||
skipMuteNotificationOnFirstSession();
|
||||
let maxCount = Preferences.get("browser.onboarding.notification.max-prompt-count-per-tour");
|
||||
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
let previousTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
|
||||
let currentTourId = null;
|
||||
let reloadPromise = null;
|
||||
for (let i = maxCount - 1; i > 0; --i) {
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
currentTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
is(previousTourId, currentTourId, "Should not move on to next tour notification until reaching the max prompt count per tour");
|
||||
}
|
||||
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
currentTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -41,8 +37,7 @@ add_task(async function test_move_on_to_next_notification_when_reaching_max_life
|
||||
resetOnboardingDefaultState();
|
||||
skipMuteNotificationOnFirstSession();
|
||||
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
let previousTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -50,9 +45,7 @@ add_task(async function test_move_on_to_next_notification_when_reaching_max_life
|
||||
let maxTime = Preferences.get("browser.onboarding.notification.max-life-time-per-tour-ms");
|
||||
let lastTime = Math.floor((Date.now() - maxTime - 1) / 1000);
|
||||
Preferences.set("browser.onboarding.notification.last-time-of-changing-tour-sec", lastTime);
|
||||
let reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
let currentTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -65,16 +58,13 @@ add_task(async function test_move_on_to_next_notification_after_interacting_with
|
||||
resetOnboardingDefaultState();
|
||||
skipMuteNotificationOnFirstSession();
|
||||
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
let previousTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-notification-close-btn", {}, tab.linkedBrowser);
|
||||
|
||||
let reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
let currentTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -82,9 +72,7 @@ add_task(async function test_move_on_to_next_notification_after_interacting_with
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-notification-action-btn", {}, tab.linkedBrowser);
|
||||
previousTourId = currentTourId;
|
||||
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
currentTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(3);
|
||||
|
||||
add_task(async function test_remove_all_tour_notifications_through_close_button() {
|
||||
resetOnboardingDefaultState();
|
||||
skipMuteNotificationOnFirstSession();
|
||||
@ -10,13 +12,10 @@ add_task(async function test_remove_all_tour_notifications_through_close_button(
|
||||
let tourIds = TOUR_IDs;
|
||||
let tab = null;
|
||||
let targetTourId = null;
|
||||
let reloadPromise = null;
|
||||
await closeTourNotificationsOneByOne();
|
||||
|
||||
let expectedPrefUpdate = promisePrefUpdated("browser.onboarding.notification.finished", true);
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await expectedPrefUpdate;
|
||||
let tourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -26,12 +25,9 @@ add_task(async function test_remove_all_tour_notifications_through_close_button(
|
||||
async function closeTourNotificationsOneByOne() {
|
||||
for (let i = 0; i < tourIds.length; ++i) {
|
||||
if (tab) {
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
} else {
|
||||
tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
}
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
@ -50,13 +46,10 @@ add_task(async function test_remove_all_tour_notifications_through_action_button
|
||||
let tourIds = TOUR_IDs;
|
||||
let tab = null;
|
||||
let targetTourId = null;
|
||||
let reloadPromise = null;
|
||||
await clickTourNotificationActionButtonsOneByOne();
|
||||
|
||||
let expectedPrefUpdate = promisePrefUpdated("browser.onboarding.notification.finished", true);
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await expectedPrefUpdate;
|
||||
let tourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
|
||||
@ -66,12 +59,9 @@ add_task(async function test_remove_all_tour_notifications_through_action_button
|
||||
async function clickTourNotificationActionButtonsOneByOne() {
|
||||
for (let i = 0; i < tourIds.length; ++i) {
|
||||
if (tab) {
|
||||
reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
await reloadPromise;
|
||||
await reloadTab(tab);
|
||||
} else {
|
||||
tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
|
||||
tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
}
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await promiseTourNotificationOpened(tab.linkedBrowser);
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(2);
|
||||
|
||||
function assertOnboardingDestroyed(browser) {
|
||||
return ContentTask.spawn(browser, {}, function() {
|
||||
let expectedRemovals = [
|
||||
@ -33,8 +35,7 @@ add_task(async function test_hide_onboarding_tours() {
|
||||
let tourIds = TOUR_IDs;
|
||||
let tabs = [];
|
||||
for (let url of URLs) {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
|
||||
let tab = await openTab(url);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
@ -64,8 +65,7 @@ add_task(async function test_click_action_button_to_set_tour_completed() {
|
||||
let tourIds = TOUR_IDs;
|
||||
let tabs = [];
|
||||
for (let url of URLs) {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
|
||||
let tab = await openTab(url);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
@ -86,7 +86,6 @@ add_task(async function test_click_action_button_to_set_tour_completed() {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
add_task(async function test_set_right_tour_completed_style_on_overlay() {
|
||||
resetOnboardingDefaultState();
|
||||
|
||||
@ -98,8 +97,7 @@ add_task(async function test_set_right_tour_completed_style_on_overlay() {
|
||||
|
||||
let tabs = [];
|
||||
for (let url of URLs) {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
|
||||
let tab = await openTab(url);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
|
@ -3,17 +3,15 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
requestLongerTimeout(2);
|
||||
|
||||
add_task(async function test_onboarding_default_new_tourset() {
|
||||
resetOnboardingDefaultState();
|
||||
let tabs = [];
|
||||
for (let url of URLs) {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
tabs.push(tab);
|
||||
}
|
||||
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
|
||||
let doc = content && content.document;
|
||||
let doms = doc.querySelectorAll(".onboarding-tour-item");
|
||||
@ -22,10 +20,7 @@ add_task(async function test_onboarding_default_new_tourset() {
|
||||
is(TOUR_IDs[idx], dom.id, "contain defined onboarding id");
|
||||
});
|
||||
|
||||
for (let i = tabs.length - 1; i >= 0; --i) {
|
||||
let tab = tabs[i];
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
}
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
});
|
||||
|
||||
add_task(async function test_onboarding_custom_new_tourset() {
|
||||
@ -43,15 +38,10 @@ add_task(async function test_onboarding_custom_new_tourset() {
|
||||
["browser.onboarding.newtour", "private,addons,customize"],
|
||||
]});
|
||||
|
||||
let tabs = [];
|
||||
for (let url of URLs) {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
tabs.push(tab);
|
||||
}
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
|
||||
let doc = content && content.document;
|
||||
let doms = doc.querySelectorAll(".onboarding-tour-item");
|
||||
@ -60,10 +50,7 @@ add_task(async function test_onboarding_custom_new_tourset() {
|
||||
is(CUSTOM_NEW_TOURs[idx], dom.id, "contain defined onboarding id");
|
||||
});
|
||||
|
||||
for (let i = tabs.length - 1; i >= 0; --i) {
|
||||
let tab = tabs[i];
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
}
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
});
|
||||
|
||||
add_task(async function test_onboarding_custom_update_tourset() {
|
||||
@ -80,15 +67,10 @@ add_task(async function test_onboarding_custom_update_tourset() {
|
||||
["browser.onboarding.updatetour", "customize,private,addons"],
|
||||
]});
|
||||
|
||||
let tabs = [];
|
||||
for (let url of URLs) {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
tabs.push(tab);
|
||||
}
|
||||
let tab = await openTab(ABOUT_NEWTAB_URL);
|
||||
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
|
||||
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
|
||||
|
||||
let doc = content && content.document;
|
||||
let doms = doc.querySelectorAll(".onboarding-tour-item");
|
||||
@ -97,8 +79,5 @@ add_task(async function test_onboarding_custom_update_tourset() {
|
||||
is(CUSTOM_UPDATE_TOURs[idx], dom.id, "contain defined onboarding id");
|
||||
});
|
||||
|
||||
for (let i = tabs.length - 1; i >= 0; --i) {
|
||||
let tab = tabs[i];
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
}
|
||||
await BrowserTestUtils.removeTab(tab);
|
||||
});
|
||||
|
@ -37,27 +37,43 @@ function setTourCompletedState(tourId, state) {
|
||||
Preferences.set(`browser.onboarding.tour.${tourId}.completed`, state);
|
||||
}
|
||||
|
||||
async function openTab(url) {
|
||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
let loadedPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
|
||||
await loadedPromise;
|
||||
return tab;
|
||||
}
|
||||
|
||||
function reloadTab(tab) {
|
||||
let reloadPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
||||
tab.linkedBrowser.reload();
|
||||
return reloadPromise;
|
||||
}
|
||||
|
||||
function promiseOnboardingOverlayLoaded(browser) {
|
||||
// The onboarding overlay is init inside window.requestIdleCallback, not immediately,
|
||||
// so we use check conditions here.
|
||||
let condition = () => {
|
||||
return ContentTask.spawn(browser, {}, function() {
|
||||
return new Promise(resolve => {
|
||||
let doc = content && content.document;
|
||||
if (doc && doc.querySelector("#onboarding-overlay")) {
|
||||
resolve(true);
|
||||
return;
|
||||
}
|
||||
resolve(false);
|
||||
function isLoaded() {
|
||||
let doc = content && content.document;
|
||||
if (doc.querySelector("#onboarding-overlay")) {
|
||||
ok(true, "Should load onboarding overlay");
|
||||
return Promise.resolve();
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
let observer = new content.MutationObserver(mutations => {
|
||||
mutations.forEach(mutation => {
|
||||
let overlay = Array.from(mutation.addedNodes)
|
||||
.find(node => node.id == "onboarding-overlay");
|
||||
if (overlay) {
|
||||
observer.disconnect();
|
||||
ok(true, "Should load onboarding overlay");
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
})
|
||||
};
|
||||
return BrowserTestUtils.waitForCondition(
|
||||
condition,
|
||||
"Should load onboarding overlay",
|
||||
100,
|
||||
50 // Bug 1381335 increased retries, so debug builds can trigger idle in time
|
||||
);
|
||||
observer.observe(doc.body, { childList: true });
|
||||
});
|
||||
}
|
||||
return ContentTask.spawn(browser, {}, isLoaded);
|
||||
}
|
||||
|
||||
function promiseOnboardingOverlayOpened(browser) {
|
||||
@ -93,24 +109,29 @@ function promisePrefUpdated(name, expectedValue) {
|
||||
}
|
||||
|
||||
function promiseTourNotificationOpened(browser) {
|
||||
let condition = () => {
|
||||
return ContentTask.spawn(browser, {}, function() {
|
||||
return new Promise(resolve => {
|
||||
let bar = content.document.querySelector("#onboarding-notification-bar");
|
||||
if (bar && bar.classList.contains("onboarding-opened")) {
|
||||
resolve(true);
|
||||
return;
|
||||
}
|
||||
resolve(false);
|
||||
function isOpened() {
|
||||
let doc = content && content.document;
|
||||
let notification = doc.querySelector("#onboarding-notification-bar");
|
||||
if (notification && notification.classList.contains("onboarding-opened")) {
|
||||
ok(true, "Should open tour notification");
|
||||
return Promise.resolve();
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
let observer = new content.MutationObserver(mutations => {
|
||||
mutations.forEach(mutation => {
|
||||
let bar = Array.from(mutation.addedNodes)
|
||||
.find(node => node.id == "onboarding-notification-bar");
|
||||
if (bar && bar.classList.contains("onboarding-opened")) {
|
||||
observer.disconnect();
|
||||
ok(true, "Should open tour notification");
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
})
|
||||
};
|
||||
return BrowserTestUtils.waitForCondition(
|
||||
condition,
|
||||
"Should open tour notification",
|
||||
100,
|
||||
30
|
||||
);
|
||||
observer.observe(doc.body, { childList: true });
|
||||
});
|
||||
}
|
||||
return ContentTask.spawn(browser, {}, isOpened);
|
||||
}
|
||||
|
||||
function promiseTourNotificationClosed(browser) {
|
||||
|
Loading…
Reference in New Issue
Block a user