"use strict"; function* test_decoder_doctor_notification(type, notificationMessage, options) { yield BrowserTestUtils.withNewTab({ gBrowser }, function*(browser) { let awaitNotificationBar = BrowserTestUtils.waitForNotificationBar(gBrowser, browser, "decoder-doctor-notification"); yield ContentTask.spawn(browser, type, function*(aType) { Services.obs.notifyObservers(content.window, "decoder-doctor-notification", JSON.stringify({type: aType, isSolved: false, decoderDoctorReportId: "test", formats: "test"})); }); let notification; try { notification = yield awaitNotificationBar; } catch (ex) { ok(false, ex); return; } ok(notification, "Got decoder-doctor-notification notification"); is(notification.getAttribute("label"), notificationMessage, "notification message should match expectation"); let button = notification.childNodes[0]; if (options && options.noLearnMoreButton) { ok(!button, "There should not be a Learn More button"); return; } is(button.getAttribute("label"), gNavigatorBundle.getString("decoder.noCodecs.button"), "notification button should be 'Learn more'"); is(button.getAttribute("accesskey"), gNavigatorBundle.getString("decoder.noCodecs.accesskey"), "notification button should have accesskey"); let baseURL = Services.urlFormatter.formatURLPref("app.support.baseURL"); let url = baseURL + ((options && options.sumo) || "fix-video-audio-problems-firefox-windows"); let awaitNewTab = BrowserTestUtils.waitForNewTab(gBrowser, url); button.click(); let sumoTab = yield awaitNewTab; yield BrowserTestUtils.removeTab(sumoTab); }); } add_task(function* test_adobe_cdm_not_found() { // This is only sent on Windows. if (AppConstants.platform != "win") { return; } let message; if (AppConstants.isPlatformAndVersionAtMost("win", "5.9")) { message = gNavigatorBundle.getFormattedString("emeNotifications.drmContentDisabled.message", [""]); } else { message = gNavigatorBundle.getString("decoder.noCodecs.message"); } yield test_decoder_doctor_notification("adobe-cdm-not-found", message); }); add_task(function* test_adobe_cdm_not_activated() { // This is only sent on Windows. if (AppConstants.platform != "win") { return; } let message; if (AppConstants.isPlatformAndVersionAtMost("win", "5.9")) { message = gNavigatorBundle.getString("decoder.noCodecsXP.message"); } else { message = gNavigatorBundle.getString("decoder.noCodecs.message"); } yield test_decoder_doctor_notification("adobe-cdm-not-activated", message); }); add_task(function* test_platform_decoder_not_found() { // Not sent on Windows XP. if (AppConstants.isPlatformAndVersionAtMost("win", "5.9")) { return; } let message; let isLinux = AppConstants.platform == "linux"; if (isLinux) { message = gNavigatorBundle.getString("decoder.noCodecsLinux.message"); } else { message = gNavigatorBundle.getString("decoder.noHWAcceleration.message"); } yield test_decoder_doctor_notification("platform-decoder-not-found", message, {noLearnMoreButton: isLinux}); }); add_task(function* test_cannot_initialize_pulseaudio() { // This is only sent on Linux. if (AppConstants.platform != "linux") { return; } let message = gNavigatorBundle.getString("decoder.noPulseAudio.message"); yield test_decoder_doctor_notification("cannot-initialize-pulseaudio", message, {sumo: "fix-common-audio-and-video-issues"}); }); add_task(function* test_unsupported_libavcodec() { // This is only sent on Linux. if (AppConstants.platform != "linux") { return; } let message = gNavigatorBundle.getString("decoder.unsupportedLibavcodec.message"); yield test_decoder_doctor_notification("unsupported-libavcodec", message, {noLearnMoreButton: true}); });