mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-29 15:52:07 +00:00
merge mozilla-inbound to mozilla-central a=merge
This commit is contained in:
commit
db47cd2bf3
@ -9,6 +9,7 @@
|
||||
[test_keys_menu.xul]
|
||||
[test_link.html]
|
||||
[test_media.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_select.html]
|
||||
[test_tree.xul]
|
||||
[test_treegrid.xul]
|
||||
|
@ -1,9 +1,11 @@
|
||||
[DEFAULT]
|
||||
|
||||
[test_HTMLSpec.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_figure.html]
|
||||
[test_listbox.xul]
|
||||
[test_nsApplicationAcc.html]
|
||||
[test_plugin.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_canvas.html]
|
||||
[test_shadowroot.html]
|
||||
|
@ -16,6 +16,7 @@ support-files =
|
||||
[test_descrchange.html]
|
||||
[test_docload.html]
|
||||
[test_docload.xul]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_docload_aria.html]
|
||||
[test_dragndrop.html]
|
||||
[test_flush.html]
|
||||
@ -46,6 +47,7 @@ skip-if = os == 'win' || os == 'linux'
|
||||
[test_namechange.html]
|
||||
[test_scroll.xul]
|
||||
[test_selection.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_selection.xul]
|
||||
[test_selection_aria.html]
|
||||
[test_statechange.html]
|
||||
|
@ -2,4 +2,5 @@
|
||||
|
||||
[test_focusedChild.html]
|
||||
[test_takeFocus.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_takeFocus.xul]
|
||||
|
@ -10,7 +10,9 @@ support-files =
|
||||
|
||||
[test_alive.html]
|
||||
[test_content_integration.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_content_text.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_explicit_names.html]
|
||||
[test_gesture_tracker.html]
|
||||
[test_landmarks.html]
|
||||
|
@ -29,3 +29,4 @@ support-files =
|
||||
[test_tree.xul]
|
||||
[test_visibility.html]
|
||||
[test_visibility.xul]
|
||||
skip-if = buildapp == "mulet"
|
||||
|
@ -20,6 +20,7 @@ skip-if = true # Bug 561508
|
||||
[test_dockids.html]
|
||||
[test_filectrl.html]
|
||||
[test_formctrl.html]
|
||||
skip-if = buildapp == "mulet"
|
||||
[test_formctrl.xul]
|
||||
[test_gencontent.html]
|
||||
[test_groupbox.xul]
|
||||
@ -30,6 +31,7 @@ skip-if = true # Bug 561508
|
||||
[test_list.html]
|
||||
[test_map.html]
|
||||
[test_media.html]
|
||||
skip-if = buildapp == "mulet"
|
||||
[test_select.html]
|
||||
[test_tabbox.xul]
|
||||
[test_tabbrowser.xul]
|
||||
|
@ -14,6 +14,7 @@
|
||||
[test_gencontent.html]
|
||||
[test_hidden.html]
|
||||
[test_imagemap.html]
|
||||
skip-if = buildapp == "mulet"
|
||||
[test_list.html]
|
||||
[test_list_editabledoc.html]
|
||||
[test_listbox.xul]
|
||||
|
@ -1,5 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #require OOP support for mochitest-b2g-desktop, Bug 957554
|
||||
skip-if = ((buildapp == 'mulet' || buildapp == 'b2g') && toolkit != 'gonk') #require OOP support for mochitest-b2g-desktop, Bug 957554
|
||||
support-files =
|
||||
RecordingStatusChromeScript.js
|
||||
RecordingStatusHelper.js
|
||||
|
@ -1,4 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == 'mulet'
|
||||
support-files =
|
||||
head.js
|
||||
chat.html
|
||||
|
@ -101,7 +101,7 @@ skip-if = os == "linux" || e10s # Linux: Intermittent failures, bug 951680; e10s
|
||||
skip-if = os != "win" || e10s # The Fitts Law back button is only supported on Windows (bug 571454) / e10s - Bug ?????? test touches content (attempts to add an event listener directly to the contentWindow)
|
||||
[browser_blob-channelname.js]
|
||||
[browser_bookmark_titles.js]
|
||||
skip-if = toolkit == "windows" || e10s # Disabled on Windows due to frequent failures (bugs 825739, 841341) / e10s - Bug ?????? test checks event.target on load event, which our e10s utils don't support
|
||||
skip-if = buildapp == 'mulet' || toolkit == "windows" || e10s # Disabled on Windows due to frequent failures (bugs 825739, 841341) / e10s - Bug ?????? test checks event.target on load event, which our e10s utils don't support
|
||||
[browser_bug304198.js]
|
||||
[browser_bug321000.js]
|
||||
skip-if = true # browser_bug321000.js is disabled because newline handling is shaky (bug 592528)
|
||||
@ -135,9 +135,9 @@ skip-if = e10s # Bug ?????? - test directly manipulates content (eg, var expertD
|
||||
[browser_bug432599.js]
|
||||
[browser_bug435035.js]
|
||||
[browser_bug435325.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ?????? - test directly manipulates content
|
||||
[browser_bug441778.js]
|
||||
skip-if = e10s # Bug 691614 - no e10s zoom support yet
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 691614 - no e10s zoom support yet
|
||||
[browser_bug455852.js]
|
||||
[browser_bug460146.js]
|
||||
skip-if = e10s # Bug 866413 - PageInfo doesn't work in e10s
|
||||
@ -148,12 +148,12 @@ skip-if = e10s # Bug 924260 - "Window is closed"
|
||||
[browser_bug477014.js]
|
||||
skip-if = e10s # Bug 918634 - swapFrameLoaders not implemented for e10s
|
||||
[browser_bug479408.js]
|
||||
skip-if = e10s # Bug 918663 - DOMLinkAdded events don't make their way to chrome
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 918663 - DOMLinkAdded events don't make their way to chrome
|
||||
[browser_bug481560.js]
|
||||
skip-if = e10s # Bug ????? - This bug attached an event listener directly to the content
|
||||
[browser_bug484315.js]
|
||||
[browser_bug491431.js]
|
||||
skip-if = e10s # Bug 918634 - swapFrameLoaders (and thus replaceTabWithWindow) not implemented for e10s
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 918634 - swapFrameLoaders (and thus replaceTabWithWindow) not implemented for e10s
|
||||
[browser_bug495058.js]
|
||||
skip-if = e10s # Bug 918634 - swapFrameLoaders (and thus replaceTabWithWindow) not implemented for e10s
|
||||
[browser_bug517902.js]
|
||||
@ -165,13 +165,13 @@ skip-if = e10s # Bug ?????? - some weird timing issue with progress listeners th
|
||||
skip-if = e10s # Bug 918663 - DOMLinkAdded events don't make their way to chrome
|
||||
[browser_bug533232.js]
|
||||
[browser_bug537013.js]
|
||||
skip-if = e10s # Bug 918634 - swapFrameLoaders not implemented for e10s (test calls replaceTabWithWindow)
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 918634 - swapFrameLoaders not implemented for e10s (test calls replaceTabWithWindow)
|
||||
[browser_bug537474.js]
|
||||
skip-if = e10s # Bug ?????? - test doesn't wait for document to be created before it checks it
|
||||
[browser_bug550565.js]
|
||||
skip-if = e10s # Bug 918663 - DOMLinkAdded events don't make their way to chrome (which is how gBrowser.getIcon works)
|
||||
[browser_bug553455.js]
|
||||
skip-if = e10s # Bug ????? - I don't think either popup notifications nor addon install stuff works?
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ????? - I don't think either popup notifications nor addon install stuff works?
|
||||
[browser_bug555224.js]
|
||||
skip-if = e10s # Bug 691614 - no e10s zoom support yet
|
||||
[browser_bug555767.js]
|
||||
@ -233,11 +233,11 @@ skip-if = e10s # Bug 916974 - Session history doesn't work in e10s
|
||||
[browser_bug633691.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (eg, var expertDiv = gBrowser.contentDocument.getElementById("expertContent");)
|
||||
[browser_bug647886.js]
|
||||
skip-if = e10s # Bug 916974 - Session history doesn't work in e10s
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 916974 - Session history doesn't work in e10s
|
||||
[browser_bug655584.js]
|
||||
[browser_bug664672.js]
|
||||
[browser_bug676619.js]
|
||||
skip-if = os == "mac" || e10s # mac: Intermittent failures, bug 925225; e10s: Bug ?????? - test directly manipulates content (event.target.location)
|
||||
skip-if = buildapp == 'mulet' || os == "mac" || e10s # mac: Intermittent failures, bug 925225; e10s: Bug ?????? - test directly manipulates content (event.target.location)
|
||||
[browser_bug678392.js]
|
||||
skip-if = e10s # Bug ?????? - Obscure non-windows failures ("Snapshot array has correct length of 1 after loading one page. - Got 0, expected 1" and more)
|
||||
[browser_bug710878.js]
|
||||
@ -269,7 +269,7 @@ skip-if = e10s # Bug 921959 - reload with LOAD_FLAGS_ALLOW_MIXED_CONTENT fails i
|
||||
[browser_bug902156.js]
|
||||
skip-if = e10s # Bug 921959 - reload with LOAD_FLAGS_ALLOW_MIXED_CONTENT fails in e10s
|
||||
[browser_bug906190.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (strange - gets an element from a child which it tries to treat as a string, but that fails)
|
||||
skip-if = buildapp == "mulet" || e10s # Bug ?????? - test directly manipulates content (strange - gets an element from a child which it tries to treat as a string, but that fails)
|
||||
[browser_bug970746.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (directly gets elements from the content)
|
||||
[browser_canonizeURL.js]
|
||||
@ -283,7 +283,7 @@ skip-if = e10s # Bug ????? - thumbnail captures need e10s love (tabPreviews_capt
|
||||
[browser_datareporting_notification.js]
|
||||
run-if = datareporting
|
||||
[browser_devices_get_user_media.js]
|
||||
skip-if = (os == "linux" && debug) || e10s # linux: bug 976544; e10s: Bug 973001 - appears user media notifications only happen in the child and don't make their way to the parent?
|
||||
skip-if = buildapp == 'mulet' || (os == "linux" && debug) || e10s # linux: bug 976544; e10s: Bug 973001 - appears user media notifications only happen in the child and don't make their way to the parent?
|
||||
[browser_devices_get_user_media_about_urls.js]
|
||||
skip-if = e10s # Bug 973001 - appears user media notifications only happen in the child and don't make their way to the parent?
|
||||
[browser_discovery.js]
|
||||
@ -295,12 +295,13 @@ skip-if = true # browser_drag.js is disabled, as it needs to be updated for the
|
||||
[browser_findbarClose.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (tries to grab an iframe directly from content)
|
||||
[browser_fullscreen-window-open.js]
|
||||
skip-if = e10s || os == "linux" # Bug 933103 - mochitest's EventUtils.synthesizeMouse functions not e10s friendly. Linux: Intermittent failures - bug 941575.
|
||||
skip-if = buildapp == 'mulet' || e10s || os == "linux" # Bug 933103 - mochitest's EventUtils.synthesizeMouse functions not e10s friendly. Linux: Intermittent failures - bug 941575.
|
||||
[browser_gestureSupport.js]
|
||||
skip-if = e10s # Bug 863514 - no gesture support.
|
||||
[browser_getshortcutoruri.js]
|
||||
[browser_hide_removing.js]
|
||||
[browser_homeDrop.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_identity_UI.js]
|
||||
skip-if = e10s # Bug ?????? - this test fails for obscure reasons on non-windows builds only.
|
||||
[browser_keywordBookmarklets.js]
|
||||
@ -323,13 +324,13 @@ skip-if = e10s # Bug ?????? - test directly manipulates content (TypeError: gBro
|
||||
[browser_mixedcontent_securityflags.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content ("cannot ipc non-cpow object")
|
||||
[browser_notification_tab_switching.js]
|
||||
skip-if = e10s # Bug ?????? - uncaught exception - Error: cannot ipc non-cpow object at chrome://mochitests/content/browser/browser/base/content/test/general/browser_notification_tab_switching.js:32
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ?????? - uncaught exception - Error: cannot ipc non-cpow object at chrome://mochitests/content/browser/browser/base/content/test/general/browser_notification_tab_switching.js:32
|
||||
[browser_offlineQuotaNotification.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (gBrowser.selectedBrowser.contentWindow.applicationCache.oncached = function() {...})
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ?????? - test directly manipulates content (gBrowser.selectedBrowser.contentWindow.applicationCache.oncached = function() {...})
|
||||
[browser_overflowScroll.js]
|
||||
skip-if = e10s # Bug 921905 - pinTab/unpinTab fail in e10s
|
||||
[browser_pageInfo.js]
|
||||
skip-if = e10s # Bug 866413 - PageInfo doesn't work in e10s
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 866413 - PageInfo doesn't work in e10s
|
||||
[browser_page_style_menu.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content
|
||||
|
||||
@ -340,11 +341,13 @@ skip-if = e10s # Bug 921905 - pinTab/unpinTab fail in e10s
|
||||
[browser_plainTextLinks.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (creates and fetches elements directly from content document)
|
||||
[browser_popupUI.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (tries to get a popup element directly from content)
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ?????? - test directly manipulates content (tries to get a popup element directly from content)
|
||||
[browser_printpreview.js]
|
||||
skip-if = e10s # Bug ?????? - timeout after logging "Error: Channel closing: too late to send/recv, messages will be lost"
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ?????? - timeout after logging "Error: Channel closing: too late to send/recv, messages will be lost"
|
||||
[browser_private_browsing_window.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_private_no_prompt.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_relatedTabs.js]
|
||||
[browser_removeTabsToTheEnd.js]
|
||||
skip-if = e10s # Bug 921905 - pinTab/unpinTab fail in e10s
|
||||
@ -354,17 +357,19 @@ skip-if = true # bug 432425
|
||||
[browser_sanitize-passwordDisabledHosts.js]
|
||||
[browser_sanitize-sitepermissions.js]
|
||||
[browser_sanitize-timespans.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_sanitizeDialog.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_sanitizeDialog_treeView.js]
|
||||
skip-if = true # disabled until the tree view is added
|
||||
# back to the clear recent history dialog (sanitize.xul), if
|
||||
# it ever is (bug 480169)
|
||||
[browser_save_link-perwindowpb.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (event.target)
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ?????? - test directly manipulates content (event.target)
|
||||
[browser_save_private_link_perwindowpb.js]
|
||||
skip-if = e10s # e10s: Bug 933103 - mochitest's EventUtils.synthesizeMouse functions not e10s friendly
|
||||
skip-if = buildapp == 'mulet' || e10s # e10s: Bug 933103 - mochitest's EventUtils.synthesizeMouse functions not e10s friendly
|
||||
[browser_save_video.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (event.target)
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ?????? - test directly manipulates content (event.target)
|
||||
[browser_scope.js]
|
||||
[browser_selectTabAtIndex.js]
|
||||
skip-if = e10s # Bug ?????? - no idea! "Accel+9 selects expected tab - Got 0, expected 9"
|
||||
@ -372,12 +377,15 @@ skip-if = e10s # Bug ?????? - no idea! "Accel+9 selects expected tab - Got 0, ex
|
||||
skip-if = e10s # Bug ?????? - timeout after logging "Error: Channel closing: too late to send/recv, messages will be lost"
|
||||
[browser_subframe_favicons_not_used.js]
|
||||
[browser_tabDrop.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tabMatchesInAwesomebar_perwindowpb.js]
|
||||
skip-if = e10s # Bug 918634 - swapFrameLoaders not implemented for e10s (test uses gBrowser.swapBrowsersAndCloseOther)
|
||||
[browser_tab_drag_drop_perwindow.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tab_dragdrop.js]
|
||||
skip-if = e10s # Bug 918634 - swapFrameLoaders not implemented for e10s (test uses gBrowser.swapBrowsersAndCloseOther)
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 918634 - swapFrameLoaders not implemented for e10s (test uses gBrowser.swapBrowsersAndCloseOther)
|
||||
[browser_tab_dragdrop2.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tabbar_big_widgets.js]
|
||||
skip-if = os == "linux" || os == "mac" # No tabs in titlebar on linux
|
||||
# Disabled on OS X because of bug 967917
|
||||
@ -390,7 +398,7 @@ skip-if = e10s # Bug ?????? - test needs to be updated for e10s (captures a stac
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (tries to get/set attributes directly on content docshell)
|
||||
[browser_tabs_owner.js]
|
||||
[browser_typeAheadFind.js]
|
||||
skip-if = e10s # Bug 921935 - focusmanager issues with e10s (test calls waitForFocus)
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 921935 - focusmanager issues with e10s (test calls waitForFocus)
|
||||
[browser_unloaddialogs.js]
|
||||
skip-if = e10s # Bug ?????? - test uses chrome windowMediator to try and see alert() from content
|
||||
[browser_urlHighlight.js]
|
||||
@ -422,6 +430,7 @@ skip-if = e10s # Bug 921905 - pinTab/unpinTab fail in e10s
|
||||
[browser_visibleTabs_tabPreview.js]
|
||||
skip-if = (os == "win" && !debug) || e10s # Bug 1007418 / Bug 698371 - thumbnail captures need e10s love (tabPreviews_capture fails with Argument 1 of CanvasRenderingContext2D.drawWindow does not implement interface Window.)
|
||||
[browser_windowopen_reflows.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_wyciwyg_urlbarCopying.js]
|
||||
skip-if = e10s # Bug ?????? - test directly manipulates content (content.document.getElementById)
|
||||
[browser_zbug569342.js]
|
||||
|
@ -1,5 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = e10s # Bug ?????? - about:newtab tests don't work in e10s
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ?????? - about:newtab tests don't work in e10s
|
||||
support-files =
|
||||
head.js
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
# * Bug XXXXX - no plugins in content processes ("Error: You cannot use the AddonManager in child processes!")
|
||||
# * Bug 866413 - PageInfo doesn't work in e10s [browser_pageInfo_plugins.js]
|
||||
# * Bug 921957 - remote webprogress doesn't supply originalURI attribute on the request object [browser_clearplugindata.js]
|
||||
skip-if = e10s
|
||||
skip-if = buildapp == "mulet" || e10s
|
||||
support-files =
|
||||
blockNoPlugins.xml
|
||||
blockPluginHard.xml
|
||||
|
@ -1,5 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = e10s # Bug 915547 (social providers don't install)
|
||||
skip-if = buildapp == "mulet" || e10s # Bug 915547 (social providers don't install)
|
||||
support-files =
|
||||
blocklist.xml
|
||||
checked.jpg
|
||||
|
@ -1,4 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == "mulet"
|
||||
support-files =
|
||||
head.js
|
||||
support/test_967000_charEncoding_page.html
|
||||
@ -75,7 +76,7 @@ skip-if = e10s # Bug ?????? - test uses promiseTabLoadEvent() which isn't e10s f
|
||||
[browser_967000_button_charEncoding.js]
|
||||
skip-if = e10s # Bug ?????? - test uses promiseTabLoadEvent() which isn't e10s friendly.
|
||||
[browser_967000_button_feeds.js]
|
||||
skip-if = e10s # Bug ?????? - test uses promiseTabLoadEvent() which isn't e10s friendly.
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug ?????? - test uses promiseTabLoadEvent() which isn't e10s friendly.
|
||||
[browser_967000_button_sync.js]
|
||||
skip-if = e10s # Bug ?????? - test uses promiseTabLoadEvent() which isn't e10s friendly.
|
||||
[browser_967000_button_tabView.js]
|
||||
|
@ -2,6 +2,7 @@
|
||||
support-files = head.js
|
||||
|
||||
[browser_basic_functionality.js]
|
||||
skip-if = buildapp == "mulet"
|
||||
[browser_first_download_panel.js]
|
||||
skip-if = os == "linux" # Bug 949434
|
||||
[browser_overflow_anchor.js]
|
||||
|
@ -4,4 +4,5 @@ support-files = sample_feed.atom
|
||||
[test_423060.xul]
|
||||
[test_bug368464.html]
|
||||
[test_bug408328.html]
|
||||
skip-if= buildapp == 'mulet'
|
||||
[test_maxSniffing.html]
|
||||
|
@ -1,5 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == 'b2g' || e10s
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || e10s
|
||||
support-files =
|
||||
bug368464-data.xml
|
||||
bug408328-data.xml
|
||||
|
@ -4,3 +4,4 @@ support-files =
|
||||
|
||||
[browser_mozLoop_charPref.js]
|
||||
[browser_mozLoop_doNotDisturb.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
|
@ -3,6 +3,7 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == "mulet"
|
||||
support-files =
|
||||
head.js
|
||||
framedPage.html
|
||||
|
@ -1,4 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == "mulet"
|
||||
support-files =
|
||||
head.js
|
||||
privacypane_tests_perwindow.js
|
||||
|
@ -1,4 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == "mulet"
|
||||
support-files =
|
||||
head.js
|
||||
privacypane_tests_perwindow.js
|
||||
|
@ -1,4 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == "mulet"
|
||||
support-files =
|
||||
browser_privatebrowsing_concurrent_page.html
|
||||
browser_privatebrowsing_cookieacceptdialog.html
|
||||
|
@ -1,4 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == 'mulet'
|
||||
support-files =
|
||||
426329.xml
|
||||
483086-1.xml
|
||||
|
@ -68,6 +68,7 @@ support-files =
|
||||
[browser_dynamic_frames.js]
|
||||
[browser_form_restore_events.js]
|
||||
[browser_formdata.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_formdata_format.js]
|
||||
[browser_formdata_xpath.js]
|
||||
[browser_frametree.js]
|
||||
|
@ -16,6 +16,7 @@ support-files =
|
||||
[browser_tabview_bug586553.js]
|
||||
[browser_tabview_bug587043.js]
|
||||
[browser_tabview_bug587231.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tabview_bug587276.js]
|
||||
[browser_tabview_bug587351.js]
|
||||
[browser_tabview_bug587503.js]
|
||||
@ -69,6 +70,7 @@ skip-if = os == "win" # Bug 951477
|
||||
[browser_tabview_bug616967.js]
|
||||
[browser_tabview_bug618816.js]
|
||||
[browser_tabview_bug618828.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tabview_bug619937.js]
|
||||
[browser_tabview_bug622835.js]
|
||||
[browser_tabview_bug623768.js]
|
||||
@ -76,6 +78,7 @@ skip-if = os == "win" # Bug 951477
|
||||
skip-if = true # Bug 921984, hopefully fixed by bug 930202
|
||||
[browser_tabview_bug624692.js]
|
||||
[browser_tabview_bug624727_perwindowpb.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tabview_bug624847.js]
|
||||
[browser_tabview_bug624931.js]
|
||||
[browser_tabview_bug624953.js]
|
||||
@ -87,6 +90,7 @@ skip-if = true # Bug 921984, hopefully fixed by bug 930202
|
||||
[browser_tabview_bug626455.js]
|
||||
[browser_tabview_bug626525.js]
|
||||
[browser_tabview_bug626791.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tabview_bug627736.js]
|
||||
[browser_tabview_bug628061.js]
|
||||
[browser_tabview_bug628165.js]
|
||||
@ -107,6 +111,7 @@ skip-if = true # Bug 922422
|
||||
[browser_tabview_bug634672.js]
|
||||
[browser_tabview_bug635696.js]
|
||||
[browser_tabview_bug637840.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tabview_bug640765.js]
|
||||
[browser_tabview_bug641802.js]
|
||||
[browser_tabview_bug642793.js]
|
||||
@ -133,6 +138,7 @@ skip-if = os == "mac" || e10s # mac: Bug 939617; e10s - Bug ?????? - "leaked unt
|
||||
[browser_tabview_bug662266.js]
|
||||
[browser_tabview_bug663421.js]
|
||||
[browser_tabview_bug665502.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tabview_bug669694.js]
|
||||
[browser_tabview_bug673196.js]
|
||||
[browser_tabview_bug673729.js]
|
||||
@ -149,6 +155,7 @@ skip-if = true # Bug 736425
|
||||
[browser_tabview_bug705621.js]
|
||||
[browser_tabview_bug706430.js]
|
||||
[browser_tabview_bug706736.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_tabview_bug707466.js]
|
||||
[browser_tabview_bug712203.js]
|
||||
[browser_tabview_bug715454.js]
|
||||
|
@ -7,6 +7,7 @@ support-files =
|
||||
mockCommands.js
|
||||
|
||||
[browser_cmd_addon.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_cmd_calllog.js]
|
||||
skip-if = true || e10s # Bug 845831
|
||||
[browser_cmd_calllog_chrome.js]
|
||||
|
@ -288,6 +288,7 @@ skip-if = (os == 'mac' || os == 'win') && (debug == false) # Bug 986166
|
||||
[browser_dbg_variables-view-frame-parameters-03.js]
|
||||
[browser_dbg_variables-view-frame-with.js]
|
||||
[browser_dbg_variables-view-frozen-sealed-nonext.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_dbg_variables-view-hide-non-enums.js]
|
||||
[browser_dbg_variables-view-large-array-buffer.js]
|
||||
[browser_dbg_variables-view-override-01.js]
|
||||
|
@ -39,6 +39,7 @@ support-files =
|
||||
[browser_net_charts-01.js]
|
||||
[browser_net_charts-02.js]
|
||||
[browser_net_charts-03.js]
|
||||
skip-if= buildapp == 'mulet'
|
||||
[browser_net_charts-04.js]
|
||||
[browser_net_charts-05.js]
|
||||
[browser_net_charts-06.js]
|
||||
|
@ -6,8 +6,11 @@ support-files =
|
||||
helper_edits.js
|
||||
|
||||
[browser_projecteditor_app_options.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_projecteditor_delete_file.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_projecteditor_editing_01.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_projecteditor_editors_image.js]
|
||||
[browser_projecteditor_external_change.js]
|
||||
[browser_projecteditor_immediate_destroy.js]
|
||||
|
@ -8,6 +8,7 @@ support-files = head.js
|
||||
[browser_scratchpad_reset_undo.js]
|
||||
[browser_scratchpad_display_outputs_errors.js]
|
||||
[browser_scratchpad_eval_func.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_scratchpad_goto_line_ui.js]
|
||||
[browser_scratchpad_reload_and_run.js]
|
||||
[browser_scratchpad_display_non_error_exceptions.js]
|
||||
|
@ -42,6 +42,7 @@ support-files =
|
||||
[browser_tableWidget_basic.js]
|
||||
[browser_tableWidget_keyboard_interaction.js]
|
||||
[browser_tableWidget_mouse_interaction.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_telemetry_button_paintflashing.js]
|
||||
[browser_telemetry_button_responsive.js]
|
||||
[browser_telemetry_button_scratchpad.js]
|
||||
@ -62,6 +63,7 @@ support-files =
|
||||
[browser_toolbar_basic.js]
|
||||
[browser_toolbar_tooltip.js]
|
||||
[browser_toolbar_webconsole_errors_count.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_treeWidget_basic.js]
|
||||
[browser_treeWidget_keyboard_interaction.js]
|
||||
[browser_treeWidget_mouse_interaction.js]
|
||||
|
@ -122,6 +122,7 @@ support-files =
|
||||
[browser_bug_869003_inspect_cross_domain_object.js]
|
||||
[browser_bug_871156_ctrlw_close_tab.js]
|
||||
[browser_cached_messages.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_console.js]
|
||||
[browser_console_addonsdk_loader_exception.js]
|
||||
[browser_console_clear_on_reload.js]
|
||||
@ -129,18 +130,23 @@ support-files =
|
||||
[browser_console_consolejsm_output.js]
|
||||
[browser_console_dead_objects.js]
|
||||
[browser_console_error_source_click.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_console_filters.js]
|
||||
[browser_console_iframe_messages.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_console_keyboard_accessibility.js]
|
||||
[browser_console_log_inspectable_object.js]
|
||||
[browser_console_native_getters.js]
|
||||
[browser_console_navigation_marker.js]
|
||||
[browser_console_nsiconsolemessage.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_console_optimized_out_vars.js]
|
||||
[browser_console_private_browsing.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_console_variables_view.js]
|
||||
[browser_console_variables_view_dom_nodes.js]
|
||||
[browser_console_variables_view_dont_sort_non_sortable_classes_properties.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_console_variables_view_while_debugging.js]
|
||||
[browser_console_variables_view_while_debugging_and_inspecting.js]
|
||||
[browser_eval_in_debugger_stackframe.js]
|
||||
@ -150,13 +156,16 @@ support-files =
|
||||
[browser_output_breaks_after_console_dir_uninspectable.js]
|
||||
[browser_output_longstring_expand.js]
|
||||
[browser_repeated_messages_accuracy.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_result_format_as_string.js]
|
||||
[browser_warn_user_about_replaced_api.js]
|
||||
[browser_webconsole_abbreviate_source_url.js]
|
||||
[browser_webconsole_allow_mixedcontent_securityerrors.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_assert.js]
|
||||
[browser_webconsole_basic_net_logging.js]
|
||||
[browser_webconsole_block_mixedcontent_securityerrors.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_bug_579412_input_focus.js]
|
||||
[browser_webconsole_bug_580001_closing_after_completion.js]
|
||||
[browser_webconsole_bug_580030_errors_after_page_reload.js]
|
||||
@ -223,16 +232,22 @@ run-if = os == "win"
|
||||
[browser_webconsole_bug_734061_No_input_change_and_Tab_key_pressed.js]
|
||||
[browser_webconsole_bug_737873_mixedcontent.js]
|
||||
[browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_bug_764572_output_open_url.js]
|
||||
[browser_webconsole_bug_766001_JS_Console_in_Debugger.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_bug_770099_violation.js]
|
||||
[browser_webconsole_bug_782653_CSS_links_in_Style_Editor.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_bug_804845_ctrl_key_nav.js]
|
||||
run-if = os == "mac"
|
||||
[browser_webconsole_bug_817834_add_edited_input_to_history.js]
|
||||
[browser_webconsole_bug_837351_securityerrors.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_bug_846918_hsts_invalid-headers.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_bug_915141_toggle_response_logging_with_keyboard.js]
|
||||
[browser_webconsole_bug_1006027_message_timestamps_incorrect.js]
|
||||
[browser_webconsole_bug_1010953_cspro.js]
|
||||
|
@ -2181,7 +2181,11 @@ this.Experiments.PreviousExperimentProvider.prototype = Object.freeze({
|
||||
|
||||
shutdown: function () {
|
||||
this._log.trace("shutdown()");
|
||||
Services.obs.removeObserver(this, EXPERIMENTS_CHANGED_TOPIC);
|
||||
try {
|
||||
Services.obs.removeObserver(this, EXPERIMENTS_CHANGED_TOPIC);
|
||||
} catch(e) {
|
||||
// Prevent crash in mochitest-browser3 on Mulet
|
||||
}
|
||||
},
|
||||
|
||||
observe: function (subject, topic, data) {
|
||||
|
@ -797,6 +797,7 @@ endif
|
||||
ifdef DTRACE_PROBE_OBJ
|
||||
EXTRA_DEPS += $(DTRACE_PROBE_OBJ)
|
||||
OBJS += $(DTRACE_PROBE_OBJ)
|
||||
EXCLUDED_OBJS += $(DTRACE_PROBE_OBJ)
|
||||
endif
|
||||
|
||||
$(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
|
||||
|
@ -3,3 +3,4 @@
|
||||
[test_bug357450.js]
|
||||
[test_copypaste.xul]
|
||||
[test_messagemanager_principal.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
|
@ -33,6 +33,7 @@ support-files =
|
||||
[test_bug549682.xul]
|
||||
[test_bug571390.xul]
|
||||
[test_bug574596.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_bug599295.html]
|
||||
[test_bug616841.xul]
|
||||
[test_bug635835.xul]
|
||||
@ -52,7 +53,7 @@ support-files =
|
||||
[test_bug914381.html]
|
||||
[test_bug990812.xul]
|
||||
[test_cpows.xul]
|
||||
skip-if = toolkit == "cocoa"
|
||||
skip-if = buildapp == 'mulet' || toolkit == "cocoa"
|
||||
[test_document_register.xul]
|
||||
[test_domparsing.xul]
|
||||
[test_fileconstructor.xul]
|
||||
|
@ -1,4 +1,4 @@
|
||||
[test_messagemanager_assertpermission.html]
|
||||
skip-if = buildapp == 'b2g' #b2g(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE) b2g-debug(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE) b2g-desktop(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' #b2g(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE) b2g-debug(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE) b2g-desktop(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE)
|
||||
[test_child_process_shutdown_message.html]
|
||||
skip-if = buildapp == 'b2g' #b2g(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE) b2g-debug(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE) b2g-desktop(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' #b2g(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE) b2g-debug(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE) b2g-desktop(specialpowers.wrap issue, NS_ERROR_XPC_GS_RETURNED_FAILURE)
|
||||
|
@ -536,7 +536,7 @@ skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #bug 901343, specialpowers.wr
|
||||
[test_bug819051.html]
|
||||
[test_bug820909.html]
|
||||
[test_bug827160.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #needs plugin support # b2g(needs plugin support) b2g-debug(debug-only failure) b2g-desktop(needs plugin support)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s #needs plugin support # b2g(needs plugin support) b2g-debug(debug-only failure) b2g-desktop(needs plugin support)
|
||||
[test_bug840098.html]
|
||||
[test_bug864595.html]
|
||||
[test_bug868999.html]
|
||||
@ -592,20 +592,20 @@ skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #bug 775227
|
||||
[test_meta_viewport5.html]
|
||||
[test_meta_viewport6.html]
|
||||
[test_mixed_content_blocker.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT, SSL_REQUIRED
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT, SSL_REQUIRED
|
||||
[test_mixed_content_blocker_bug803225.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT, SSL_REQUIRED
|
||||
[test_mixed_content_blocker_frameNavigation.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT, SSL_REQUIRED
|
||||
[test_mozfiledataurl.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT
|
||||
[test_mutationobservers.html]
|
||||
skip-if = buildapp == 'b2g' || e10s # b2g(bug 901385, showmodaldialog) b2g-debug(bug 901385, showmodaldialog) b2g-desktop(bug 901385, showmodaldialog)
|
||||
[test_nodelist_holes.html]
|
||||
[test_object.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s # b2g(needs plugin support) b2g-debug(needs plugin support) b2g-desktop(needs plugin support)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s # b2g(needs plugin support) b2g-debug(needs plugin support) b2g-desktop(needs plugin support)
|
||||
[test_plugin_freezing.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #CLICK_TO_PLAY
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s #CLICK_TO_PLAY
|
||||
[test_processing_instruction_update_stylesheet.xhtml]
|
||||
[test_range_bounds.html]
|
||||
skip-if = toolkit == 'android' || e10s
|
||||
|
@ -202,7 +202,7 @@ skip-if = os == "android" || appname == "b2g"
|
||||
[test_drawImage_edge_cases.html]
|
||||
[test_drawWindow.html]
|
||||
support-files = file_drawWindow_source.html file_drawWindow_common.js
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk')
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk')
|
||||
[test_ImageData_ctor.html]
|
||||
[test_isPointInStroke.html]
|
||||
[test_mozDashOffset.html]
|
||||
|
@ -18,4 +18,4 @@ support-files =
|
||||
skipped_tests_winxp.txt
|
||||
|
||||
[test_webgl_conformance_test_suite.html]
|
||||
skip-if = (buildapp == 'b2g') # bug 865443- separate suite - the non_conf* tests pass except for one on armv6 tests
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' # bug 865443- separate suite - the non_conf* tests pass except for one on armv6 tests
|
||||
|
@ -15,7 +15,7 @@ support-files =
|
||||
[test_webgl_available.html]
|
||||
skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
|
||||
[test_webgl_conformance.html]
|
||||
skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
|
||||
skip-if = buildapp == 'mulet' || toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
|
||||
[test_webgl_request_context.html]
|
||||
skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
|
||||
[test_webgl_request_mismatch.html]
|
||||
|
@ -7,7 +7,7 @@ support-files =
|
||||
[test_button_attributes_reflection.html]
|
||||
[test_input_radio_radiogroup.html]
|
||||
[test_change_event.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_datalist_element.html]
|
||||
[test_experimental_forms_pref.html]
|
||||
[test_form_attribute-1.html]
|
||||
@ -17,42 +17,49 @@ skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop spec
|
||||
[test_form_attributes_reflection.html]
|
||||
[test_form_named_getter_dynamic.html]
|
||||
[test_formaction_attribute.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_formnovalidate_attribute.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_input_attributes_reflection.html]
|
||||
[test_input_autocomplete.html]
|
||||
[test_input_color_input_change_events.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_input_color_picker_initial.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_input_color_picker_popup.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_input_color_picker_update.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_input_defaultValue.html]
|
||||
[test_input_email.html]
|
||||
[test_input_event.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop and mulet specific, initial triage
|
||||
[test_input_file_picker.html]
|
||||
skip-if = buildapp == 'b2g' # b2g(5 failures out of 139 and timing out, bug 901581) b2g-debug(5 failures out of 139 and timing out, bug 901581) b2g-desktop(5 failures out of 139 and timing out, bug 901581)
|
||||
[test_input_list_attribute.html]
|
||||
[test_input_number_l10n.html]
|
||||
# We don't build ICU for Firefox for Android or Firefox OS:
|
||||
skip-if = os == "android" || appname == "b2g"
|
||||
skip-if = buildapp == 'mulet' || os == "android" || appname == "b2g"
|
||||
[test_input_number_key_events.html]
|
||||
[test_input_number_mouse_events.html]
|
||||
# Not run on Firefox OS and Firefox for Android where the spin buttons are hidden:
|
||||
skip-if = os == "android" || appname == "b2g"
|
||||
skip-if = os == "android" || appname == "b2g" || buildapp == "mulet"
|
||||
[test_input_number_rounding.html]
|
||||
skip-if = os == "android"
|
||||
skip-if = os == "android" || buildapp == "mulet"
|
||||
[test_input_number_validation.html]
|
||||
# We don't build ICU for Firefox for Android or Firefox OS:
|
||||
skip-if = os == "android" || appname == "b2g"
|
||||
skip-if = buildapp == 'mulet' || os == "android" || appname == "b2g"
|
||||
[test_input_range_attr_order.html]
|
||||
[test_input_range_key_events.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_input_range_mouse_and_touch_events.html]
|
||||
skip-if = (toolkit == 'gonk' && debug) #debug-only failure; bug 926546
|
||||
[test_input_range_rounding.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_input_sanitization.html]
|
||||
[test_input_textarea_set_value_no_scroll.html]
|
||||
[test_input_typing_sanitization.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_input_untrusted_key_events.html]
|
||||
[test_input_url.html]
|
||||
[test_label_control_attribute.html]
|
||||
|
@ -324,14 +324,14 @@ skip-if = e10s
|
||||
[test_bug610687.html]
|
||||
[test_bug611189.html]
|
||||
[test_bug612730.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' # b2g(form control not selected/checked with synthesizeMouse, also fails on Android) b2g-debug(form control not selected/checked with synthesizeMouse, also fails on Android) b2g-desktop(form control not selected/checked with synthesizeMouse, also fails on Android)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' # b2g(form control not selected/checked with synthesizeMouse, also fails on Android) b2g-debug(form control not selected/checked with synthesizeMouse, also fails on Android) b2g-desktop(form control not selected/checked with synthesizeMouse, also fails on Android)
|
||||
[test_bug613113.html]
|
||||
skip-if = buildapp == 'b2g' || e10s # b2g(bug 587671, need an invalidformsubmit observer) b2g-debug(bug 587671, need an invalidformsubmit observer) b2g-desktop(bug 587671, need an invalidformsubmit observer)
|
||||
[test_bug613722.html]
|
||||
[test_bug613979.html]
|
||||
[test_bug615595.html]
|
||||
[test_bug615833.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' #TIMED_OUT # b2g(form control not selected/checked with synthesizeMouse, also fails on Android) b2g-debug(form control not selected/checked with synthesizeMouse, also fails on Android) b2g-desktop(form control not selected/checked with synthesizeMouse, also fails on Android)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' #TIMED_OUT # b2g(form control not selected/checked with synthesizeMouse, also fails on Android) b2g-debug(form control not selected/checked with synthesizeMouse, also fails on Android) b2g-desktop(form control not selected/checked with synthesizeMouse, also fails on Android)
|
||||
[test_bug617528.html]
|
||||
[test_bug618948.html]
|
||||
skip-if = buildapp == 'b2g' || e10s # b2g(bug 587671, need an invalidformsubmit observer) b2g-debug(bug 587671, need an invalidformsubmit observer) b2g-desktop(bug 587671, need an invalidformsubmit observer)
|
||||
@ -432,7 +432,7 @@ skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT # b2g(NS_
|
||||
skip-if = toolkit == 'android'
|
||||
[test_formelements.html]
|
||||
[test_fullscreen-api.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT # b2g(time out, some kind of focus issue) b2g-debug(time out, some kind of focus issue) b2g-desktop(time out, some kind of focus issue)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT # b2g(time out, some kind of focus issue) b2g-debug(time out, some kind of focus issue) b2g-desktop(time out, some kind of focus issue)
|
||||
[test_hidden.html]
|
||||
[test_html_attributes_reflection.html]
|
||||
[test_htmlcollection.html]
|
||||
@ -440,13 +440,13 @@ skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT # b2g(tim
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_iframe_sandbox_inheritance.html]
|
||||
[test_iframe_sandbox_modal.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #modal tests fail on android # b2g(modal tests fail on B2G) b2g-debug(modal tests fail on B2G) b2g-desktop(Bug 931116, b2g desktop specific, initial triage)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s #modal tests fail on android # b2g(modal tests fail on B2G) b2g-debug(modal tests fail on B2G) b2g-desktop(Bug 931116, b2g desktop specific, initial triage)
|
||||
[test_iframe_sandbox_navigation.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #time out on b2g desktop specific
|
||||
[test_iframe_sandbox_navigation2.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #time out on b2g desktop specific
|
||||
[test_iframe_sandbox_plugins.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s # b2g(plugins not supported) b2g-debug(plugins not supported) b2g-desktop(plugins not supported)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s # b2g(plugins not supported) b2g-debug(plugins not supported) b2g-desktop(plugins not supported)
|
||||
[test_iframe_sandbox_popups.html]
|
||||
skip-if = buildapp == 'b2g' # b2g(multiple concurrent window.open()s fail on B2G) b2g-debug(multiple concurrent window.open()s fail on B2G) b2g-desktop(Bug 931116, b2g desktop specific, initial triage)
|
||||
[test_iframe_sandbox_popups_inheritance.html]
|
||||
@ -466,12 +466,12 @@ skip-if = buildapp == 'b2g' || e10s # b2g(multiple concurrent window.open()s fai
|
||||
[test_meta_attributes_reflection.html]
|
||||
[test_mod_attributes_reflection.html]
|
||||
[test_mozaudiochannel.html]
|
||||
skip-if = (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) # b2g-debug(Perma-orange on debug emulator) b2g-desktop(Bug 931116, b2g desktop specific, initial triage)
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) # b2g-debug(Perma-orange on debug emulator) b2g-desktop(Bug 931116, b2g desktop specific, initial triage)
|
||||
[test_named_options.html]
|
||||
[test_nested_invalid_fieldsets.html]
|
||||
[test_object_attributes_reflection.html]
|
||||
[test_object_plugin_nav.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT # b2g(plugins not supported) b2g-debug(plugins not supported) b2g-desktop(plugins not supported)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s #TIMED_OUT # b2g(plugins not supported) b2g-debug(plugins not supported) b2g-desktop(plugins not supported)
|
||||
[test_ol_attributes_reflection.html]
|
||||
[test_option_defaultSelected.html]
|
||||
[test_option_selected_state.html]
|
||||
|
@ -38,10 +38,10 @@ skip-if = (buildapp == 'b2g' && toolkit != 'gonk') || toolkit == 'android' || e1
|
||||
[test_bug340017.xhtml]
|
||||
[test_bug359657.html]
|
||||
[test_bug369370.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s
|
||||
[test_bug380383.html]
|
||||
[test_bug391777.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s # b2g(showmodaldialog) b2g-debug(showmodaldialog) b2g-desktop(showmodaldialog)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s # b2g(showmodaldialog) b2g-debug(showmodaldialog) b2g-desktop(showmodaldialog)
|
||||
[test_bug402680.html]
|
||||
[test_bug403868.html]
|
||||
[test_bug403868.xhtml]
|
||||
|
@ -1405,7 +1405,9 @@ void MediaDecoderStateMachine::Play()
|
||||
|
||||
void MediaDecoderStateMachine::ResetPlayback()
|
||||
{
|
||||
MOZ_ASSERT(mState == DECODER_STATE_SEEKING || mState == DECODER_STATE_SHUTDOWN);
|
||||
MOZ_ASSERT(mState == DECODER_STATE_SEEKING ||
|
||||
mState == DECODER_STATE_SHUTDOWN ||
|
||||
mState == DECODER_STATE_DORMANT);
|
||||
mVideoFrameEndTime = -1;
|
||||
mAudioStartTime = -1;
|
||||
mAudioEndTime = -1;
|
||||
|
@ -96,6 +96,14 @@ GMPVideoDecoderChild::ResetComplete()
|
||||
SendResetComplete();
|
||||
}
|
||||
|
||||
void
|
||||
GMPVideoDecoderChild::Error(GMPErr aError)
|
||||
{
|
||||
MOZ_ASSERT(mPlugin->GMPMessageLoop() == MessageLoop::current());
|
||||
|
||||
SendError(aError);
|
||||
}
|
||||
|
||||
void
|
||||
GMPVideoDecoderChild::CheckThread()
|
||||
{
|
||||
|
@ -36,6 +36,7 @@ public:
|
||||
virtual void InputDataExhausted() MOZ_OVERRIDE;
|
||||
virtual void DrainComplete() MOZ_OVERRIDE;
|
||||
virtual void ResetComplete() MOZ_OVERRIDE;
|
||||
virtual void Error(GMPErr aError) MOZ_OVERRIDE;
|
||||
|
||||
// GMPSharedMemManager
|
||||
virtual void CheckThread();
|
||||
|
@ -266,6 +266,19 @@ GMPVideoDecoderParent::RecvResetComplete()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
GMPVideoDecoderParent::RecvError(const GMPErr& aError)
|
||||
{
|
||||
if (!mCallback) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Ignore any return code. It is OK for this to fail without killing the process.
|
||||
mCallback->Error(aError);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
GMPVideoDecoderParent::RecvParentShmemForPool(Shmem& aEncodedBuffer)
|
||||
{
|
||||
|
@ -70,6 +70,7 @@ private:
|
||||
virtual bool RecvInputDataExhausted() MOZ_OVERRIDE;
|
||||
virtual bool RecvDrainComplete() MOZ_OVERRIDE;
|
||||
virtual bool RecvResetComplete() MOZ_OVERRIDE;
|
||||
virtual bool RecvError(const GMPErr& aError) MOZ_OVERRIDE;
|
||||
virtual bool RecvParentShmemForPool(Shmem& aEncodedBuffer) MOZ_OVERRIDE;
|
||||
virtual bool AnswerNeedShmem(const uint32_t& aFrameBufferSize,
|
||||
Shmem* aMem) MOZ_OVERRIDE;
|
||||
|
@ -51,7 +51,7 @@ GMPVideoEncodedFrameImpl::~GMPVideoEncodedFrameImpl()
|
||||
}
|
||||
}
|
||||
|
||||
const GMPEncryptedBufferData*
|
||||
const GMPEncryptedBufferMetadata*
|
||||
GMPVideoEncodedFrameImpl::GetDecryptionData() const
|
||||
{
|
||||
return nullptr;
|
||||
|
@ -91,7 +91,7 @@ public:
|
||||
virtual uint8_t* Buffer() MOZ_OVERRIDE;
|
||||
virtual GMPBufferType BufferType() const MOZ_OVERRIDE;
|
||||
virtual void SetBufferType(GMPBufferType aBufferType) MOZ_OVERRIDE;
|
||||
virtual const GMPEncryptedBufferData* GetDecryptionData() const MOZ_OVERRIDE;
|
||||
virtual const GMPEncryptedBufferMetadata* GetDecryptionData() const MOZ_OVERRIDE;
|
||||
|
||||
private:
|
||||
void DestroyBuffer();
|
||||
|
@ -57,6 +57,14 @@ GMPVideoEncoderChild::Encoded(GMPVideoEncodedFrame* aEncodedFrame,
|
||||
aEncodedFrame->Destroy();
|
||||
}
|
||||
|
||||
void
|
||||
GMPVideoEncoderChild::Error(GMPErr aError)
|
||||
{
|
||||
MOZ_ASSERT(mPlugin->GMPMessageLoop() == MessageLoop::current());
|
||||
|
||||
SendError(aError);
|
||||
}
|
||||
|
||||
void
|
||||
GMPVideoEncoderChild::CheckThread()
|
||||
{
|
||||
|
@ -32,6 +32,7 @@ public:
|
||||
virtual void Encoded(GMPVideoEncodedFrame* aEncodedFrame,
|
||||
const uint8_t* aCodecSpecificInfo,
|
||||
uint32_t aCodecSpecificInfoLength) MOZ_OVERRIDE;
|
||||
virtual void Error(GMPErr aError) MOZ_OVERRIDE;
|
||||
|
||||
// GMPSharedMemManager
|
||||
virtual void CheckThread();
|
||||
|
@ -219,6 +219,19 @@ GMPVideoEncoderParent::RecvEncoded(const GMPVideoEncodedFrameData& aEncodedFrame
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
GMPVideoEncoderParent::RecvError(const GMPErr& aError)
|
||||
{
|
||||
if (!mCallback) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Ignore any return code. It is OK for this to fail without killing the process.
|
||||
mCallback->Error(aError);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
GMPVideoEncoderParent::RecvParentShmemForPool(Shmem& aFrameBuffer)
|
||||
{
|
||||
|
@ -67,6 +67,7 @@ private:
|
||||
virtual void ActorDestroy(ActorDestroyReason aWhy) MOZ_OVERRIDE;
|
||||
virtual bool RecvEncoded(const GMPVideoEncodedFrameData& aEncodedFrame,
|
||||
const nsTArray<uint8_t>& aCodecSpecificInfo) MOZ_OVERRIDE;
|
||||
virtual bool RecvError(const GMPErr& aError) MOZ_OVERRIDE;
|
||||
virtual bool RecvParentShmemForPool(Shmem& aFrameBuffer) MOZ_OVERRIDE;
|
||||
virtual bool AnswerNeedShmem(const uint32_t& aEncodedBufferSize,
|
||||
Shmem* aMem) MOZ_OVERRIDE;
|
||||
|
@ -15,6 +15,7 @@ class GMPVideoEncoderCallbackProxy {
|
||||
public:
|
||||
virtual void Encoded(GMPVideoEncodedFrame* aEncodedFrame,
|
||||
const nsTArray<uint8_t>& aCodecSpecificInfo) = 0;
|
||||
virtual void Error(GMPErr aError) = 0;
|
||||
};
|
||||
|
||||
// A proxy to GMPVideoEncoder in the child process.
|
||||
|
@ -7,6 +7,7 @@ include protocol PGMP;
|
||||
include GMPTypes;
|
||||
|
||||
using GMPVideoCodec from "gmp-video-codec.h";
|
||||
using GMPErr from "gmp-errors.h";
|
||||
|
||||
include "GMPMessageUtils.h";
|
||||
|
||||
@ -37,6 +38,7 @@ parent:
|
||||
async InputDataExhausted();
|
||||
async DrainComplete();
|
||||
async ResetComplete();
|
||||
async Error(GMPErr aErr);
|
||||
async ParentShmemForPool(Shmem aEncodedBuffer);
|
||||
// MUST be intr - if sync and we create a new Shmem, when the returned
|
||||
// Shmem is received in the Child it will fail to Deserialize
|
||||
|
@ -8,6 +8,7 @@ include GMPTypes;
|
||||
|
||||
using GMPVideoCodec from "gmp-video-codec.h";
|
||||
using GMPVideoFrameType from "gmp-video-frame-encoded.h";
|
||||
using GMPErr from "gmp-errors.h";
|
||||
|
||||
include "GMPMessageUtils.h";
|
||||
|
||||
@ -35,6 +36,7 @@ parent:
|
||||
async __delete__();
|
||||
async Encoded(GMPVideoEncodedFrameData aEncodedFrame,
|
||||
uint8_t[] aCodecSpecificInfo);
|
||||
async Error(GMPErr aErr);
|
||||
async ParentShmemForPool(Shmem aFrameBuffer);
|
||||
// MUST be intr - if sync and we create a new Shmem, when the returned
|
||||
// Shmem is received in the Child it will fail to Deserialize
|
||||
|
@ -35,6 +35,10 @@ public:
|
||||
virtual void DrainComplete() = 0;
|
||||
|
||||
virtual void ResetComplete() = 0;
|
||||
|
||||
// Called when the decoder encounters a catestrophic error and cannot
|
||||
// continue. Gecko will not send any more input for decoding.
|
||||
virtual void Error(GMPErr aError) = 0;
|
||||
};
|
||||
|
||||
// ALL METHODS MUST BE CALLED ON THE MAIN THREAD
|
||||
@ -46,24 +50,24 @@ public:
|
||||
// aCallback: Subclass should retain reference to it until DecodingComplete
|
||||
// is called. Do not attempt to delete it, host retains ownership.
|
||||
// TODO: Pass AudioHost so decoder can create GMPAudioEncodedFrame objects?
|
||||
virtual GMPErr InitDecode(const GMPAudioCodec& aCodecSettings,
|
||||
GMPAudioDecoderCallback* aCallback) = 0;
|
||||
virtual void InitDecode(const GMPAudioCodec& aCodecSettings,
|
||||
GMPAudioDecoderCallback* aCallback) = 0;
|
||||
|
||||
// Decode encoded audio frames (as a part of an audio stream). The decoded
|
||||
// frames must be returned to the user through the decode complete callback.
|
||||
virtual GMPErr Decode(GMPAudioSamples* aEncodedSamples) = 0;
|
||||
virtual void Decode(GMPAudioSamples* aEncodedSamples) = 0;
|
||||
|
||||
// Reset decoder state and prepare for a new call to Decode(...).
|
||||
// Flushes the decoder pipeline.
|
||||
// The decoder should enqueue a task to run ResetComplete() on the main
|
||||
// thread once the reset has finished.
|
||||
virtual GMPErr Reset() = 0;
|
||||
virtual void Reset() = 0;
|
||||
|
||||
// Output decoded frames for any data in the pipeline, regardless of ordering.
|
||||
// All remaining decoded frames should be immediately returned via callback.
|
||||
// The decoder should enqueue a task to run DrainComplete() on the main
|
||||
// thread once the reset has finished.
|
||||
virtual GMPErr Drain() = 0;
|
||||
virtual void Drain() = 0;
|
||||
|
||||
// May free decoder memory.
|
||||
virtual void DecodingComplete() = 0;
|
||||
|
@ -49,9 +49,9 @@ public:
|
||||
virtual const uint8_t* Buffer() const = 0;
|
||||
virtual uint8_t* Buffer() = 0;
|
||||
|
||||
// Get data describing how this frame is encrypted, or nullptr if the
|
||||
// Get metadata describing how this frame is encrypted, or nullptr if the
|
||||
// buffer is not encrypted.
|
||||
virtual const GMPEncryptedBufferData* GetDecryptionData() const = 0;
|
||||
virtual const GMPEncryptedBufferMetadata* GetDecryptionData() const = 0;
|
||||
};
|
||||
|
||||
#endif // GMP_AUDIO_FRAME_h_
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
#include "gmp-platform.h"
|
||||
|
||||
class GMPEncryptedBufferData {
|
||||
class GMPEncryptedBufferMetadata {
|
||||
public:
|
||||
// Key ID to identify the decryption key.
|
||||
virtual const uint8_t* KeyId() const = 0;
|
||||
@ -33,14 +33,23 @@ public:
|
||||
// Size (in bytes) of |IV|.
|
||||
virtual uint32_t IVSize() const = 0;
|
||||
|
||||
// Number of enties returned by ClearBytes and CipherBytes().
|
||||
// Number of entries returned by ClearBytes() and CipherBytes().
|
||||
virtual uint32_t NumSubsamples() const = 0;
|
||||
|
||||
virtual const uint32_t* ClearBytes() const = 0;
|
||||
virtual const uint16_t* ClearBytes() const = 0;
|
||||
|
||||
virtual const uint32_t* CipherBytes() const = 0;
|
||||
};
|
||||
|
||||
class GMPBuffer {
|
||||
public:
|
||||
virtual uint32_t Id() const = 0;
|
||||
virtual uint8_t* Data() = 0;
|
||||
virtual uint32_t Size() const = 0;
|
||||
virtual void Resize(uint32_t aSize) = 0;
|
||||
virtual ~GMPBuffer() {}
|
||||
};
|
||||
|
||||
// These match to the DOMException codes as per:
|
||||
// http://www.w3.org/TR/dom/#domexception
|
||||
enum GMPDOMException {
|
||||
@ -60,71 +69,106 @@ enum GMPDOMException {
|
||||
// Time in milliseconds, as offset from epoch, 1 Jan 1970.
|
||||
typedef int64_t GMPTimestamp;
|
||||
|
||||
// Capability definitions. The capabilities of the EME GMP are reported
|
||||
// to Gecko by calling the GMPDecryptorCallback::SetCapabilities()
|
||||
// callback and specifying the logical OR of the GMP_EME_CAP_* flags below.
|
||||
//
|
||||
// Note the DECRYPT and the DECRYPT_AND_DECODE are mutually exclusive;
|
||||
// only one mode should be reported for each stream type, but different
|
||||
// modes can be reported for different stream types.
|
||||
//
|
||||
// Note: Gecko does not currently support the caps changing at runtime.
|
||||
// Set them once per plugin initialization, during the startup of
|
||||
// the GMPdecryptor.
|
||||
|
||||
// Capability; CDM can decrypt encrypted buffers and return still
|
||||
// compressed buffers back to Gecko for decompression there.
|
||||
#define GMP_EME_CAP_DECRYPT_AUDIO (uint64_t(1) << 0)
|
||||
#define GMP_EME_CAP_DECRYPT_VIDEO (uint64_t(1) << 1)
|
||||
|
||||
// Capability; CDM can decrypt and then decode encrypted buffers,
|
||||
// and return decompressed samples to Gecko for playback.
|
||||
#define GMP_EME_CAP_DECRYPT_AND_DECODE_AUDIO (uint64_t(1) << 2)
|
||||
#define GMP_EME_CAP_DECRYPT_AND_DECODE_VIDEO (uint64_t(1) << 3)
|
||||
|
||||
class GMPDecryptorCallback {
|
||||
public:
|
||||
// Resolves a promise for a session created or loaded.
|
||||
// Passes the session id to be exposed to JavaScript.
|
||||
// Must be called before OnSessionMessage().
|
||||
// Must be called before SessionMessage().
|
||||
// aSessionId must be null terminated.
|
||||
virtual void OnResolveNewSessionPromise(uint32_t aPromiseId,
|
||||
const char* aSessionId,
|
||||
uint32_t aSessionIdLength) = 0;
|
||||
virtual void ResolveNewSessionPromise(uint32_t aPromiseId,
|
||||
const char* aSessionId,
|
||||
uint32_t aSessionIdLength) = 0;
|
||||
|
||||
// Called to resolve a specified promise with "undefined".
|
||||
virtual void OnResolvePromise(uint32_t aPromiseId) = 0;
|
||||
virtual void ResolvePromise(uint32_t aPromiseId) = 0;
|
||||
|
||||
// Called to reject a promise with a DOMException.
|
||||
// aMessage is logged to the WebConsole.
|
||||
// aMessage is optional, but if present must be null terminated.
|
||||
virtual void OnRejectPromise(uint32_t aPromiseId,
|
||||
GMPDOMException aException,
|
||||
const char* aMessage,
|
||||
uint32_t aMessageLength) = 0;
|
||||
virtual void RejectPromise(uint32_t aPromiseId,
|
||||
GMPDOMException aException,
|
||||
const char* aMessage,
|
||||
uint32_t aMessageLength) = 0;
|
||||
|
||||
// Called by the CDM when it has a message for session |session_id|.
|
||||
// Length parameters should not include null termination.
|
||||
// aSessionId must be null terminated.
|
||||
virtual void OnSessionMessage(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
const uint8_t* aMessage,
|
||||
uint32_t aMessageLength,
|
||||
const char* aDestinationURL,
|
||||
uint32_t aDestinationURLLength) = 0;
|
||||
virtual void SessionMessage(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
const uint8_t* aMessage,
|
||||
uint32_t aMessageLength,
|
||||
const char* aDestinationURL,
|
||||
uint32_t aDestinationURLLength) = 0;
|
||||
|
||||
// aSessionId must be null terminated.
|
||||
virtual void OnExpirationChange(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
GMPTimestamp aExpiryTime) = 0;
|
||||
virtual void ExpirationChange(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
GMPTimestamp aExpiryTime) = 0;
|
||||
|
||||
// Called by the GMP when a session is closed. All file IO
|
||||
// that a session requires should be complete before calling this.
|
||||
// aSessionId must be null terminated.
|
||||
virtual void OnSessionClosed(const char* aSessionId,
|
||||
uint32_t aSessionIdLength) = 0;
|
||||
virtual void SessionClosed(const char* aSessionId,
|
||||
uint32_t aSessionIdLength) = 0;
|
||||
|
||||
// Called by the GMP when an error occurs in a session.
|
||||
// aSessionId must be null terminated.
|
||||
// aMessage is logged to the WebConsole.
|
||||
// aMessage is optional, but if present must be null terminated.
|
||||
virtual void OnSessionError(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
GMPDOMException aException,
|
||||
uint32_t aSystemCode,
|
||||
const char* aMessage,
|
||||
uint32_t aMessageLength) = 0;
|
||||
virtual void SessionError(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
GMPDOMException aException,
|
||||
uint32_t aSystemCode,
|
||||
const char* aMessage,
|
||||
uint32_t aMessageLength) = 0;
|
||||
|
||||
virtual void OnKeyIdUsable(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
const uint8_t* aKeyId,
|
||||
uint32_t aKeyIdLength) = 0;
|
||||
// Marks a key as usable. Gecko will not call into the CDM to decrypt
|
||||
// or decode content encrypted with a key unless the CDM has marked it
|
||||
// usable first. So a CDM *MUST* mark its usable keys as usable!
|
||||
virtual void KeyIdUsable(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
const uint8_t* aKeyId,
|
||||
uint32_t aKeyIdLength) = 0;
|
||||
|
||||
// Marks a key as no longer usable.
|
||||
// Note: Keys are assumed to be not usable when a session is closed or removed.
|
||||
virtual void OnKeyIdNotUsable(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
const uint8_t* aKeyId,
|
||||
uint32_t aKeyIdLength) = 0;
|
||||
virtual void KeyIdNotUsable(const char* aSessionId,
|
||||
uint32_t aSessionIdLength,
|
||||
const uint8_t* aKeyId,
|
||||
uint32_t aKeyIdLength) = 0;
|
||||
|
||||
// The CDM must report its capabilites of this CDM. aCaps should be a
|
||||
// logical OR of the GMP_EME_CAP_* flags. The CDM *MUST* call this
|
||||
// function and report whether it can decrypt and/or decode. Without
|
||||
// this, Gecko does not know how to use the CDM and will not send
|
||||
// samples to the CDM to decrypt or decrypt-and-decode mode. Note a
|
||||
// CDM cannot change modes once playback has begun.
|
||||
virtual void SetCapabilities(uint64_t aCaps) = 0;
|
||||
|
||||
// Returns decrypted buffer to Gecko, or reports failure.
|
||||
virtual void Decrypted(GMPBuffer* aBuffer, GMPErr aResult) = 0;
|
||||
};
|
||||
|
||||
// Host interface, passed to GetAPIFunc(), with "decrypt".
|
||||
@ -166,10 +210,14 @@ public:
|
||||
virtual void Init(GMPDecryptorCallback* aCallback) = 0;
|
||||
|
||||
// Requests the creation of a session given |aType| and |aInitData|.
|
||||
// Decryptor should callback GMPDecryptorCallback::OnSessionCreated()
|
||||
// with the web session ID on success, or OnSessionError() on failure,
|
||||
// and then call OnSessionReady() once all keys for that session are
|
||||
// available.
|
||||
// Decryptor should callback GMPDecryptorCallback::SessionCreated()
|
||||
// with the web session ID on success, or SessionError() on failure,
|
||||
// and then call KeyIdUsable() as keys for that session become
|
||||
// usable.
|
||||
//
|
||||
// The CDM must also call GMPDecryptorCallback::SetCapabilities()
|
||||
// exactly once during start up, to inform Gecko whether to use the CDM
|
||||
// in decrypt or decrypt-and-decode mode.
|
||||
virtual void CreateSession(uint32_t aPromiseId,
|
||||
const char* aInitDataType,
|
||||
uint32_t aInitDataTypeSize,
|
||||
@ -203,6 +251,19 @@ public:
|
||||
virtual void SetServerCertificate(uint32_t aPromiseId,
|
||||
const uint8_t* aServerCert,
|
||||
uint32_t aServerCertSize) = 0;
|
||||
|
||||
// Asynchronously decrypts aBuffer in place. When the decryption is
|
||||
// complete, GMPDecryptor should write the decrypted data back into the
|
||||
// same GMPBuffer object and return it to Gecko by calling Decrypted(),
|
||||
// with the GMPNoErr successcode. If decryption fails, call Decrypted()
|
||||
// with a failure code, and an error event will fire on the media element.
|
||||
virtual void Decrypt(GMPBuffer* aBuffer,
|
||||
GMPEncryptedBufferMetadata* aMetadata) = 0;
|
||||
|
||||
// Called when the decryption operations are complete.
|
||||
// Do not call the GMPDecryptorCallback's functions after this is called.
|
||||
virtual void DecryptingComplete() = 0;
|
||||
|
||||
};
|
||||
|
||||
#endif // GMP_DECRYPTION_h_
|
||||
|
@ -39,8 +39,12 @@ typedef enum {
|
||||
GMPClosedErr = 2,
|
||||
GMPAllocErr = 3,
|
||||
GMPNotImplementedErr = 4,
|
||||
GMPNotClosedErr = 5,
|
||||
GMPRecordInUse = 5,
|
||||
GMPQuotaExceededErr = 6,
|
||||
GMPDecodeErr = 7,
|
||||
GMPEncodeErr = 8,
|
||||
GMPNoKeyErr = 9,
|
||||
GMPCryptoErr = 10,
|
||||
GMPLastErr // Placeholder, must be last. This enum's values must remain consecutive!
|
||||
} GMPErr;
|
||||
|
||||
|
@ -21,30 +21,31 @@
|
||||
#include <stdint.h>
|
||||
|
||||
// Provides basic per-origin storage for CDMs. GMPRecord instances can be
|
||||
// retrieved by calling GMPPlatformAPI->openstorage. Multiple GMPRecord
|
||||
// can be open at once. This interface is asynchronous, with results
|
||||
// being returned via callbacks to the GMPRecordClient pointer provided
|
||||
// to the GMPPlatformAPI->openstorage call, on the main thread.
|
||||
// retrieved by calling GMPPlatformAPI->openstorage. Multiple GMPRecords
|
||||
// with different names can be open at once, but a single record can only
|
||||
// be opened by one client at a time. This interface is asynchronous, with
|
||||
// results being returned via callbacks to the GMPRecordClient pointer
|
||||
// provided to the GMPPlatformAPI->openstorage call, on the main thread.
|
||||
class GMPRecord {
|
||||
public:
|
||||
|
||||
// Opens the record. Calls OnOpenComplete() once the record is open.
|
||||
// Note: OnReadComplete() is only called if this returns GMPNoErr.
|
||||
// Opens the record. Calls OpenComplete() once the record is open.
|
||||
// Note: OpenComplete() is only called if this returns GMPNoErr.
|
||||
virtual GMPErr Open() = 0;
|
||||
|
||||
// Reads the entire contents of the file, and calls
|
||||
// GMPRecordClient::OnReadComplete() once the operation is complete.
|
||||
// Note: OnReadComplete() is only called if this returns GMPNoErr.
|
||||
// Reads the entire contents of the record, and calls
|
||||
// GMPRecordClient::ReadComplete() once the operation is complete.
|
||||
// Note: ReadComplete() is only called if this returns GMPNoErr.
|
||||
virtual GMPErr Read() = 0;
|
||||
|
||||
// Writes aDataSize bytes of aData into the file, overwritting the contents
|
||||
// of the file. Overwriting with 0 bytes "deletes" the file.
|
||||
// Write 0 bytes to "delete" a file.
|
||||
// Note: OnWriteComplete is only called if this returns GMPNoErr.
|
||||
// Writes aDataSize bytes of aData into the record, overwriting the
|
||||
// contents of the record. Overwriting with 0 bytes "deletes" the file.
|
||||
// Note: WriteComplete is only called if this returns GMPNoErr.
|
||||
virtual GMPErr Write(const uint8_t* aData, uint32_t aDataSize) = 0;
|
||||
|
||||
// Closes a file. File must not be used after this is called. Cancels all
|
||||
// callbacks.
|
||||
// Closes a record. GMPRecord object must not be used after this is
|
||||
// called, request a new one with GMPPlatformAPI->openstorage to re-open
|
||||
// this record. Cancels all callbacks.
|
||||
virtual GMPErr Close() = 0;
|
||||
|
||||
virtual ~GMPRecord() {}
|
||||
@ -57,32 +58,34 @@ class GMPRecordClient {
|
||||
|
||||
// Response to a GMPRecord::Open() call with the open |status|.
|
||||
// aStatus values:
|
||||
// - GMPNoErr - File opened successfully. File may be empty.
|
||||
// - GMPFileInUse - There file is in use by another client.
|
||||
// - GMPNoErr - Record opened successfully. Record may be empty.
|
||||
// - GMPRecordInUse - This record is in use by another client.
|
||||
// - GMPGenericErr - Unspecified error.
|
||||
// Do not use the GMPRecord if aStatus is not GMPNoErr.
|
||||
virtual void OnOpenComplete(GMPErr aStatus) = 0;
|
||||
virtual void OpenComplete(GMPErr aStatus) = 0;
|
||||
|
||||
// Response to a GMPRecord::Read() call, where aData is the file contents,
|
||||
// Response to a GMPRecord::Read() call, where aData is the record contents,
|
||||
// of length aDataSize.
|
||||
// aData is only valid for the duration of the call to OnReadComplete.
|
||||
// aData is only valid for the duration of the call to ReadComplete.
|
||||
// Copy it if you want to hang onto it!
|
||||
// aStatus values:
|
||||
// - GMPNoErr - File contents read successfully, aDataSize 0 means file
|
||||
// - GMPNoErr - Record contents read successfully, aDataSize 0 means record
|
||||
// is empty.
|
||||
// - GMPFileInUse - There are other operations or clients in use on this file.
|
||||
// - GMPRecordInUse - There are other operations or clients in use on
|
||||
// this record.
|
||||
// - GMPGenericErr - Unspecified error.
|
||||
// Do not continue to use the GMPRecord if aStatus is not GMPNoErr.
|
||||
virtual void OnReadComplete(GMPErr aStatus,
|
||||
const uint8_t* aData,
|
||||
uint32_t aDataSize) = 0;
|
||||
virtual void ReadComplete(GMPErr aStatus,
|
||||
const uint8_t* aData,
|
||||
uint32_t aDataSize) = 0;
|
||||
|
||||
// Response to a GMPRecord::Write() call.
|
||||
// - GMPNoErr - File contents written successfully.
|
||||
// - GMPFileInUse - There are other operations or clients in use on this file.
|
||||
// - GMPGenericErr - Unspecified error. File should be regarded as corrupt.
|
||||
// - GMPRecordInUse - There are other operations or clients in use on
|
||||
// this record.
|
||||
// - GMPGenericErr - Unspecified error.
|
||||
// Do not continue to use the GMPRecord if aStatus is not GMPNoErr.
|
||||
virtual void OnWriteComplete(GMPErr aStatus) = 0;
|
||||
virtual void WriteComplete(GMPErr aStatus) = 0;
|
||||
|
||||
virtual ~GMPRecordClient() {}
|
||||
};
|
||||
|
@ -57,6 +57,10 @@ public:
|
||||
virtual void DrainComplete() = 0;
|
||||
|
||||
virtual void ResetComplete() = 0;
|
||||
|
||||
// Called when the decoder encounters a catestrophic error and cannot
|
||||
// continue. Gecko will not send any more input for decoding.
|
||||
virtual void Error(GMPErr aError) = 0;
|
||||
};
|
||||
|
||||
// ALL METHODS MUST BE CALLED ON THE MAIN THREAD
|
||||
@ -72,11 +76,11 @@ public:
|
||||
// - aCallback: Subclass should retain reference to it until DecodingComplete
|
||||
// is called. Do not attempt to delete it, host retains ownership.
|
||||
// aCoreCount: number of CPU cores.
|
||||
virtual GMPErr InitDecode(const GMPVideoCodec& aCodecSettings,
|
||||
const uint8_t* aCodecSpecific,
|
||||
uint32_t aCodecSpecificLength,
|
||||
GMPVideoDecoderCallback* aCallback,
|
||||
int32_t aCoreCount) = 0;
|
||||
virtual void InitDecode(const GMPVideoCodec& aCodecSettings,
|
||||
const uint8_t* aCodecSpecific,
|
||||
uint32_t aCodecSpecificLength,
|
||||
GMPVideoDecoderCallback* aCallback,
|
||||
int32_t aCoreCount) = 0;
|
||||
|
||||
// Decode encoded frame (as a part of a video stream). The decoded frame
|
||||
// will be returned to the user through the decode complete callback.
|
||||
@ -90,23 +94,23 @@ public:
|
||||
// - aCodecSpecificInfoLength : number of bytes in aCodecSpecificInfo
|
||||
// - renderTimeMs : System time to render in milliseconds. Only used by
|
||||
// decoders with internal rendering.
|
||||
virtual GMPErr Decode(GMPVideoEncodedFrame* aInputFrame,
|
||||
bool aMissingFrames,
|
||||
const uint8_t* aCodecSpecificInfo,
|
||||
uint32_t aCodecSpecificInfoLength,
|
||||
int64_t aRenderTimeMs = -1) = 0;
|
||||
virtual void Decode(GMPVideoEncodedFrame* aInputFrame,
|
||||
bool aMissingFrames,
|
||||
const uint8_t* aCodecSpecificInfo,
|
||||
uint32_t aCodecSpecificInfoLength,
|
||||
int64_t aRenderTimeMs = -1) = 0;
|
||||
|
||||
// Reset decoder state and prepare for a new call to Decode(...).
|
||||
// Flushes the decoder pipeline.
|
||||
// The decoder should enqueue a task to run ResetComplete() on the main
|
||||
// thread once the reset has finished.
|
||||
virtual GMPErr Reset() = 0;
|
||||
virtual void Reset() = 0;
|
||||
|
||||
// Output decoded frames for any data in the pipeline, regardless of ordering.
|
||||
// All remaining decoded frames should be immediately returned via callback.
|
||||
// The decoder should enqueue a task to run DrainComplete() on the main
|
||||
// thread once the reset has finished.
|
||||
virtual GMPErr Drain() = 0;
|
||||
virtual void Drain() = 0;
|
||||
|
||||
// May free decoder memory.
|
||||
virtual void DecodingComplete() = 0;
|
||||
|
@ -51,6 +51,10 @@ public:
|
||||
virtual void Encoded(GMPVideoEncodedFrame* aEncodedFrame,
|
||||
const uint8_t* aCodecSpecificInfo,
|
||||
uint32_t aCodecSpecificInfoLength) = 0;
|
||||
|
||||
// Called when the encoder encounters a catestrophic error and cannot
|
||||
// continue. Gecko will not send any more input for encoding.
|
||||
virtual void Error(GMPErr aError) = 0;
|
||||
};
|
||||
|
||||
// ALL METHODS MUST BE CALLED ON THE MAIN THREAD
|
||||
@ -72,12 +76,12 @@ public:
|
||||
// - aNnumberOfCores : Number of cores available for the encoder
|
||||
// - aMaxPayloadSize : The maximum size each payload is allowed
|
||||
// to have. Usually MTU - overhead.
|
||||
virtual GMPErr InitEncode(const GMPVideoCodec& aCodecSettings,
|
||||
const uint8_t* aCodecSpecific,
|
||||
uint32_t aCodecSpecificLength,
|
||||
GMPVideoEncoderCallback* aCallback,
|
||||
int32_t aNumberOfCores,
|
||||
uint32_t aMaxPayloadSize) = 0;
|
||||
virtual void InitEncode(const GMPVideoCodec& aCodecSettings,
|
||||
const uint8_t* aCodecSpecific,
|
||||
uint32_t aCodecSpecificLength,
|
||||
GMPVideoEncoderCallback* aCallback,
|
||||
int32_t aNumberOfCores,
|
||||
uint32_t aMaxPayloadSize) = 0;
|
||||
|
||||
// Encode an I420 frame (as a part of a video stream). The encoded frame
|
||||
// will be returned to the user through the encode complete callback.
|
||||
@ -90,11 +94,11 @@ public:
|
||||
// - aCodecSpecificInfoLength : number of bytes in aCodecSpecific
|
||||
// - aFrameTypes : The frame type to encode
|
||||
// - aFrameTypesLength : The number of elements in aFrameTypes array.
|
||||
virtual GMPErr Encode(GMPVideoi420Frame* aInputFrame,
|
||||
const uint8_t* aCodecSpecificInfo,
|
||||
uint32_t aCodecSpecificInfoLength,
|
||||
const GMPVideoFrameType* aFrameTypes,
|
||||
uint32_t aFrameTypesLength) = 0;
|
||||
virtual void Encode(GMPVideoi420Frame* aInputFrame,
|
||||
const uint8_t* aCodecSpecificInfo,
|
||||
uint32_t aCodecSpecificInfoLength,
|
||||
const GMPVideoFrameType* aFrameTypes,
|
||||
uint32_t aFrameTypesLength) = 0;
|
||||
|
||||
// Inform the encoder about the packet loss and round trip time on the
|
||||
// network used to decide the best pattern and signaling.
|
||||
@ -102,19 +106,19 @@ public:
|
||||
// - packetLoss : Fraction lost (loss rate in percent =
|
||||
// 100 * packetLoss / 255)
|
||||
// - rtt : Round-trip time in milliseconds
|
||||
virtual GMPErr SetChannelParameters(uint32_t aPacketLoss, uint32_t aRTT) = 0;
|
||||
virtual void SetChannelParameters(uint32_t aPacketLoss, uint32_t aRTT) = 0;
|
||||
|
||||
// Inform the encoder about the new target bit rate.
|
||||
//
|
||||
// - newBitRate : New target bit rate
|
||||
// - frameRate : The target frame rate
|
||||
virtual GMPErr SetRates(uint32_t aNewBitRate, uint32_t aFrameRate) = 0;
|
||||
virtual void SetRates(uint32_t aNewBitRate, uint32_t aFrameRate) = 0;
|
||||
|
||||
// Use this function to enable or disable periodic key frames. Can be useful for codecs
|
||||
// which have other ways of stopping error propagation.
|
||||
//
|
||||
// - enable : Enable or disable periodic key frames
|
||||
virtual GMPErr SetPeriodicKeyFrames(bool aEnable) = 0;
|
||||
virtual void SetPeriodicKeyFrames(bool aEnable) = 0;
|
||||
|
||||
// May free Encoder memory.
|
||||
virtual void EncodingComplete() = 0;
|
||||
|
@ -90,9 +90,9 @@ public:
|
||||
virtual GMPBufferType BufferType() const = 0;
|
||||
virtual void SetBufferType(GMPBufferType aBufferType) = 0;
|
||||
|
||||
// Get data describing how this frame is encrypted, or nullptr if the
|
||||
// Get metadata describing how this frame is encrypted, or nullptr if the
|
||||
// frame is not encrypted.
|
||||
virtual const GMPEncryptedBufferData* GetDecryptionData() const = 0;
|
||||
virtual const GMPEncryptedBufferMetadata* GetDecryptionData() const = 0;
|
||||
};
|
||||
|
||||
#endif // GMP_VIDEO_FRAME_ENCODED_h_
|
||||
|
@ -24,6 +24,11 @@
|
||||
#include "SourceBufferList.h"
|
||||
#include "VideoUtils.h"
|
||||
|
||||
#ifdef MOZ_FMP4
|
||||
#include "MP4Decoder.h"
|
||||
#include "MP4Reader.h"
|
||||
#endif
|
||||
|
||||
#ifdef PR_LOGGING
|
||||
extern PRLogModuleInfo* gMediaSourceLog;
|
||||
#define MSE_DEBUG(...) PR_LOG(gMediaSourceLog, PR_LOG_DEBUG, (__VA_ARGS__))
|
||||
@ -418,6 +423,23 @@ MediaSourceReader::InitializePendingDecoders()
|
||||
mDecoder->NotifyWaitingForResourcesStatusChanged();
|
||||
}
|
||||
|
||||
MediaDecoderReader*
|
||||
CreateReaderForType(const nsACString& aType, AbstractMediaDecoder* aDecoder)
|
||||
{
|
||||
#ifdef MOZ_FMP4
|
||||
// The MP4Reader that supports fragmented MP4 and uses
|
||||
// PlatformDecoderModules is hidden behind prefs for regular video
|
||||
// elements, but we always want to use it for MSE, so instantiate it
|
||||
// directly here.
|
||||
if ((aType.LowerCaseEqualsLiteral("video/mp4") ||
|
||||
aType.LowerCaseEqualsLiteral("audio/mp4")) &&
|
||||
MP4Decoder::IsEnabled()) {
|
||||
return new MP4Reader(aDecoder);
|
||||
}
|
||||
#endif
|
||||
return DecoderTraits::CreateReader(aType, aDecoder);
|
||||
}
|
||||
|
||||
already_AddRefed<SubBufferDecoder>
|
||||
MediaSourceReader::CreateSubDecoder(const nsACString& aType,
|
||||
MediaSourceDecoder* aParentDecoder,
|
||||
@ -426,7 +448,7 @@ MediaSourceReader::CreateSubDecoder(const nsACString& aType,
|
||||
// XXX: Why/when is mDecoder null here, since it should be equal to aParentDecoder?!
|
||||
nsRefPtr<SubBufferDecoder> decoder =
|
||||
new SubBufferDecoder(new SourceBufferResource(nullptr, aType), aParentDecoder);
|
||||
nsRefPtr<MediaDecoderReader> reader(DecoderTraits::CreateReader(aType, decoder));
|
||||
nsRefPtr<MediaDecoderReader> reader(CreateReaderForType(aType, decoder));
|
||||
if (!reader) {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ if 'rtsp' in CONFIG['NECKO_PROTOCOLS']:
|
||||
'RtspOmxReader.cpp',
|
||||
]
|
||||
|
||||
if CONFIG['ANDROID_VERSION'] and int(CONFIG['ANDROID_VERSION']) >= 18:
|
||||
if CONFIG['ANDROID_VERSION'] >= '18':
|
||||
EXPORTS += [
|
||||
'I420ColorConverterHelper.h',
|
||||
'MediaCodecDecoder.h',
|
||||
|
@ -22,7 +22,7 @@
|
||||
# do ok(true, "Type not supported") and stop the test.
|
||||
|
||||
[DEFAULT]
|
||||
skip-if = (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) # b2g-debug,b2g-desktop(bug 918299)
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) # b2g-debug,b2g-desktop(bug 918299)
|
||||
support-files =
|
||||
320x240.ogv
|
||||
320x240.ogv^headers^
|
||||
@ -306,7 +306,7 @@ skip-if = true # bug 475110 - disabled since we don't play Wave files standalone
|
||||
[test_autoplay_contentEditable.html]
|
||||
[test_buffered.html]
|
||||
[test_bug448534.html]
|
||||
skip-if = os == 'win' # bug 894922
|
||||
skip-if = buildapp == 'mulet' || os == 'win' # bug 894922
|
||||
[test_bug463162.xhtml]
|
||||
[test_bug465498.html]
|
||||
[test_bug493187.html]
|
||||
|
@ -10,7 +10,7 @@ support-files =
|
||||
[test_audio_capture_error.html]
|
||||
[test_call_start_from_end_handler.html]
|
||||
[test_nested_eventloop.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s # b2g(showmodaldialog)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s # b2g(showmodaldialog)
|
||||
[test_preference_enable.html]
|
||||
[test_recognition_service_error.html]
|
||||
skip-if = buildapp == 'b2g' # b2g(timed out)
|
||||
|
@ -86,7 +86,7 @@ skip-if = true
|
||||
[test_text_lengthAdjust.html]
|
||||
[test_text_scaled.html]
|
||||
[test_text_selection.html]
|
||||
skip-if = buildapp == 'b2g' # b2g(Mouse selection not workin on b2g) b2g-debug(Mouse selection not workin on b2g) b2g-desktop(Mouse selection not workin on b2g)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' # b2g(Mouse selection not workin on b2g) b2g-debug(Mouse selection not workin on b2g) b2g-desktop(Mouse selection not workin on b2g)
|
||||
[test_text_update.html]
|
||||
[test_transform.xhtml]
|
||||
[test_transformParsing.html]
|
||||
|
@ -1,5 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == 'b2g' #tests that use xul
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' #tests that use xul
|
||||
|
||||
[test_bug486990.xul]
|
||||
skip-if = toolkit == 'android' #TIMED_OUT
|
||||
|
@ -1,4 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == 'mulet'
|
||||
support-files =
|
||||
animals.rdf
|
||||
animals.sqlite
|
||||
|
@ -72,8 +72,9 @@ skip-if = e10s # Bug 933103 - mochitest's EventUtils.synthesizeMouse functions n
|
||||
[browser_bug422543.js]
|
||||
skip-if = e10s # Bug ?????? - obscure test failures (shistory has a new entry - Got initial, expected newentry)
|
||||
[browser_bug441169.js]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_bug503832.js]
|
||||
skip-if = e10s # Bug 933103 - mochitest's EventUtils.synthesizeMouse functions not e10s friendly
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 933103 - mochitest's EventUtils.synthesizeMouse functions not e10s friendly
|
||||
[browser_bug554155.js]
|
||||
[browser_bug655270.js]
|
||||
skip-if = e10s # Bug ?????? - PlacesUtils.history.addObserver notifications don't seem to fire
|
||||
|
@ -56,10 +56,12 @@ support-files =
|
||||
[test_bug301397.xul]
|
||||
[test_bug303267.xul]
|
||||
[test_bug311007.xul]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_bug321671.xul]
|
||||
[test_bug360511.xul]
|
||||
[test_bug364461.xul]
|
||||
[test_bug396519.xul]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_bug396649.xul]
|
||||
[test_bug428288.html]
|
||||
[test_bug449778.xul]
|
||||
|
@ -40,7 +40,7 @@ support-files =
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_bug123696.html]
|
||||
[test_bug369814.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_bug384014.html]
|
||||
[test_bug385434.html]
|
||||
[test_bug387979.html]
|
||||
@ -57,9 +57,9 @@ skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop spec
|
||||
skip-if = toolkit != "cocoa" || e10s
|
||||
support-files = file_bug511449.html
|
||||
[test_bug529119-1.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_bug529119-2.html]
|
||||
skip-if = (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) # b2g-debug(debug-only failure) b2g-desktop(Bug 931116, b2g desktop specific, initial triage)
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) # b2g-debug(debug-only failure) b2g-desktop(Bug 931116, b2g desktop specific, initial triage)
|
||||
[test_bug530396.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Timeouts on B2G desktop
|
||||
support-files = bug530396-noref.sjs bug530396-subframe.html
|
||||
|
@ -5,16 +5,16 @@ support-files =
|
||||
file_empty.html
|
||||
|
||||
[test_alarm_add_data.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = ((buildapp == 'mulet' || buildapp == 'b2g') && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_alarm_add_date.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = ((buildapp == 'mulet' || buildapp == 'b2g') && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_alarm_add_respectTimezone.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = ((buildapp == 'mulet' || buildapp == 'b2g') && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_alarm_non_permitted_app.html]
|
||||
[test_alarm_permitted_app.html]
|
||||
[test_alarm_remove.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = ((buildapp == 'mulet' || buildapp == 'b2g') && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_bug1015540.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_bug1037079.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
#include "AnimationTimeline.h"
|
||||
#include "mozilla/dom/AnimationTimelineBinding.h"
|
||||
#include "mozilla/TimeStamp.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsPresContext.h"
|
||||
@ -36,7 +35,18 @@ TimeStamp
|
||||
AnimationTimeline::GetCurrentTimeStamp() const
|
||||
{
|
||||
// Always return the same object to benefit from return-value optimization.
|
||||
TimeStamp result; // Initializes to null timestamp
|
||||
TimeStamp result = mLastCurrentTime;
|
||||
|
||||
// If we've never been sampled, initialize the current time to the timeline's
|
||||
// zero time since that is the time we'll use if we don't have a refresh
|
||||
// driver.
|
||||
if (result.IsNull()) {
|
||||
nsRefPtr<nsDOMNavigationTiming> timing = mDocument->GetNavigationTiming();
|
||||
if (!timing) {
|
||||
return result;
|
||||
}
|
||||
result = timing->GetNavigationStartTimeStamp();
|
||||
}
|
||||
|
||||
nsIPresShell* presShell = mDocument->GetShell();
|
||||
if (MOZ_UNLIKELY(!presShell)) {
|
||||
@ -49,6 +59,11 @@ AnimationTimeline::GetCurrentTimeStamp() const
|
||||
}
|
||||
|
||||
result = presContext->RefreshDriver()->MostRecentRefresh();
|
||||
// FIXME: We would like to assert that:
|
||||
// mLastCurrentTime.IsNull() || result >= mLastCurrentTime
|
||||
// but due to bug 1043078 this will not be the case when the refresh driver
|
||||
// is restored from test control.
|
||||
mLastCurrentTime = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -9,15 +9,13 @@
|
||||
#include "nsWrapperCache.h"
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/TimeStamp.h"
|
||||
#include "js/TypeDecls.h"
|
||||
#include "nsIDocument.h"
|
||||
|
||||
struct JSContext;
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
class TimeStamp;
|
||||
|
||||
namespace dom {
|
||||
|
||||
class AnimationTimeline MOZ_FINAL : public nsWrapperCache
|
||||
@ -44,6 +42,11 @@ protected:
|
||||
virtual ~AnimationTimeline() { }
|
||||
|
||||
nsCOMPtr<nsIDocument> mDocument;
|
||||
|
||||
// Store the most recently returned value of current time. This is used
|
||||
// in cases where we don't have a refresh driver (e.g. because we are in
|
||||
// a display:none iframe).
|
||||
mutable mozilla::TimeStamp mLastCurrentTime;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
@ -7,6 +7,7 @@
|
||||
<script src="/resources/idlharness.js"></script>
|
||||
<div id="log"></div>
|
||||
<iframe src="data:text/html;charset=utf-8," width="10" height="10" id="iframe"></iframe>
|
||||
<iframe src="data:text/html;charset=utf-8,%3Chtml%20style%3D%22display%3Anone%22%3E%3C%2Fhtml%3E" width="10" height="10" id="hidden-iframe"></iframe>
|
||||
<script type="text/plain" id="AnimationTimeline-IDL">
|
||||
interface AnimationTimeline {
|
||||
readonly attribute double? currentTime;
|
||||
@ -102,4 +103,50 @@ async_test(function(t) {
|
||||
author: 'Brian Birtles'
|
||||
});
|
||||
|
||||
test(function() {
|
||||
var hiddenIFrame = document.getElementById('hidden-iframe');
|
||||
assert_equals(typeof hiddenIFrame.contentDocument.timeline.currentTime,
|
||||
'number',
|
||||
'currentTime of an initially hidden subframe\'s timeline is a number');
|
||||
assert_true(hiddenIFrame.contentDocument.timeline.currentTime >= 0,
|
||||
'currentTime of an initially hidden subframe\'s timeline is >= 0');
|
||||
}, 'document.timeline.currentTime hidden subframe test');
|
||||
|
||||
async_test(function(t) {
|
||||
var hiddenIFrame = document.getElementById('hidden-iframe');
|
||||
|
||||
// Don't run the test until after the iframe has completed loading or else the
|
||||
// contentDocument may change.
|
||||
var testToRunOnLoad = t.step_func(function() {
|
||||
// Remove display:none
|
||||
hiddenIFrame.style.display = 'block';
|
||||
window.getComputedStyle(hiddenIFrame).display;
|
||||
|
||||
window.requestAnimationFrame(t.step_func(function() {
|
||||
assert_true(hiddenIFrame.contentDocument.timeline.currentTime > 0,
|
||||
'document.timeline.currentTime is positive after removing'
|
||||
+ ' display:none');
|
||||
var previousValue = hiddenIFrame.contentDocument.timeline.currentTime;
|
||||
|
||||
// Re-introduce display:none
|
||||
hiddenIFrame.style.display = 'none';
|
||||
window.getComputedStyle(hiddenIFrame).display;
|
||||
|
||||
window.requestAnimationFrame(t.step_func(function() {
|
||||
assert_true(
|
||||
hiddenIFrame.contentDocument.timeline.currentTime >= previousValue,
|
||||
'document.timeline.currentTime does not go backwards after'
|
||||
+ ' re-setting display:none');
|
||||
t.done();
|
||||
}));
|
||||
}));
|
||||
});
|
||||
|
||||
if (hiddenIFrame.contentDocument.readyState === 'complete') {
|
||||
testToRunOnLoad();
|
||||
} else {
|
||||
hiddenIFrame.addEventListener("load", testToRunOnLoad);
|
||||
}
|
||||
}, 'document.timeline.currentTime hidden subframe dynamic test');
|
||||
|
||||
</script>
|
||||
|
@ -1,3 +1,5 @@
|
||||
[animation-timeline/test_animation-timeline.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[css-integration/test_element-get-animation-players.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[css-integration/test_animations-dynamic-changes.html]
|
||||
|
@ -20,12 +20,23 @@ var gDevUrl = "http://dev.url";
|
||||
function handleRequest(request, response) {
|
||||
var query = getQuery(request);
|
||||
|
||||
response.setHeader("Access-Control-Allow-Origin", "*", false);
|
||||
|
||||
var packageSize = ("packageSize" in query) ? query.packageSize : 0;
|
||||
var appName = ("appName" in query) ? query.appName : gAppName;
|
||||
var devName = ("devName" in query) ? query.devName : gDevName;
|
||||
var devUrl = ("devUrl" in query) ? query.devUrl : gDevUrl;
|
||||
// allowCancel just means deliver the file slowly so we have time to cancel it
|
||||
var allowCancel = "allowCancel" in query;
|
||||
var getPackage = "getPackage" in query;
|
||||
var alreadyDeferred = Number(getState("alreadyDeferred"));
|
||||
|
||||
if (allowCancel && getPackage && !alreadyDeferred) {
|
||||
// Only do this for the actual package delivery.
|
||||
response.processAsync();
|
||||
// And to avoid timer problems, only do this once.
|
||||
setState("alreadyDeferred", "1");
|
||||
}
|
||||
|
||||
response.setHeader("Access-Control-Allow-Origin", "*", false);
|
||||
|
||||
// If this is a version update, update state, prepare the manifest,
|
||||
// the application package and return.
|
||||
@ -36,7 +47,8 @@ function handleRequest(request, response) {
|
||||
var packageName = "test_packaged_app_" + packageVersion + ".zip";
|
||||
|
||||
setState("packageName", packageName);
|
||||
var packagePath = "/" + gBasePath + "file_packaged_app.sjs?getPackage=" +
|
||||
var packagePath = "/" + gBasePath + "file_packaged_app.sjs?" +
|
||||
(allowCancel?"allowCancel&": "") + "getPackage=" +
|
||||
packageName;
|
||||
setState("packagePath", packagePath);
|
||||
|
||||
@ -84,11 +96,20 @@ function handleRequest(request, response) {
|
||||
response.setHeader("Etag", etag, false);
|
||||
|
||||
// Serve the application package corresponding to the requested app version.
|
||||
if ("getPackage" in query) {
|
||||
if (getPackage) {
|
||||
var resource = readFile(packageName, true);
|
||||
response.setHeader("Content-Type",
|
||||
"Content-Type: application/java-archive", false);
|
||||
response.write(resource);
|
||||
if (allowCancel && !alreadyDeferred) {
|
||||
var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
||||
timer.initWithCallback(function (aTimer) {
|
||||
response.write(resource);
|
||||
aTimer.cancel();
|
||||
response.finish();
|
||||
}, 1000, Ci.nsITimer.TYPE_ONE_SHOT);
|
||||
} else {
|
||||
response.write(resource);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -57,13 +57,17 @@ var PackagedTestHelper = (function PackagedTestHelper() {
|
||||
finish();
|
||||
}
|
||||
|
||||
function setAppVersion(aVersion, aCb, aDontUpdatePackage) {
|
||||
function setAppVersion(aVersion, aCb, aDontUpdatePackage, aAllowCancel) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
var dontUpdate = "";
|
||||
var allowCancel = "";
|
||||
if (aDontUpdatePackage) {
|
||||
dontUpdate = "&dontUpdatePackage=1";
|
||||
}
|
||||
var url = gSJS + "?setVersion=" + aVersion + dontUpdate;
|
||||
if (aAllowCancel) {
|
||||
allowCancel= "&allowCancel=1";
|
||||
}
|
||||
var url = gSJS + "?setVersion=" + aVersion + dontUpdate + allowCancel;
|
||||
xhr.addEventListener("load", function() {
|
||||
is(xhr.responseText, "OK", "setAppVersion OK");
|
||||
aCb();
|
||||
|
@ -34,7 +34,7 @@ function checkAppInstallError(aMiniManifestURL, aExpectedError) {
|
||||
req.onerror = function(evt) {
|
||||
var error = evt.target.error.name;
|
||||
if (error == aExpectedError) {
|
||||
ok(true, "Got expected " + aExpectedError);
|
||||
info("Got expected " + aExpectedError);
|
||||
PackagedTestHelper.next();
|
||||
} else {
|
||||
ok(false, "Got unexpected " + error);
|
||||
@ -46,7 +46,7 @@ function checkAppInstallError(aMiniManifestURL, aExpectedError) {
|
||||
function checkUninstallApp(aApp) {
|
||||
var req = navigator.mozApps.mgmt.uninstall(aApp);
|
||||
req.onsuccess = function() {
|
||||
ok(true, "App uninstalled");
|
||||
info("App uninstalled");
|
||||
aApp.ondownloadsuccess = null;
|
||||
aApp.ondownloaderror = null;
|
||||
aApp.onprogress = null;
|
||||
@ -83,11 +83,11 @@ var steps = [
|
||||
// Set up
|
||||
SpecialPowers.setAllAppsLaunchable(true);
|
||||
SpecialPowers.addPermission("webapps-manage", true, document);
|
||||
ok(true, "Set up");
|
||||
info("Set up");
|
||||
PackagedTestHelper.next();
|
||||
},
|
||||
function() {
|
||||
ok(true, "autoConfirmAppInstall");
|
||||
info("autoConfirmAppInstall");
|
||||
SpecialPowers.autoConfirmAppInstall(PackagedTestHelper.next);
|
||||
},
|
||||
function() {
|
||||
@ -96,17 +96,17 @@ var steps = [
|
||||
function() {
|
||||
// Bug 927699 - navigator.mozApps.install(url) lets NS_ERROR_FAILURE onto
|
||||
// the web.
|
||||
ok(true, "== TEST == INVALID_URL");
|
||||
info("== TEST == INVALID_URL");
|
||||
checkAppInstallError("", "INVALID_URL");
|
||||
},
|
||||
function() {
|
||||
// Test network error.
|
||||
ok(true, "== TEST == Network error");
|
||||
info("== TEST == Network error");
|
||||
checkAppInstallError("http://notvalidurl", "NETWORK_ERROR");
|
||||
},
|
||||
function() {
|
||||
// Test wrong mini-manifest content type.
|
||||
ok(true, "== TEST == Not valid mini-manifest content type");
|
||||
info("== TEST == Not valid mini-manifest content type");
|
||||
var miniManifestURL = PackagedTestHelper.gSJS +
|
||||
"?getManifest=true" +
|
||||
"&noManifestContentType=true";
|
||||
@ -114,7 +114,7 @@ var steps = [
|
||||
},
|
||||
function() {
|
||||
// Test mini-manifest 'size' value is not number. Bug 839435.
|
||||
ok(true, "== TEST == Size value is not a number");
|
||||
info("== TEST == Size value is not a number");
|
||||
var miniManifestURL = PackagedTestHelper.gSJS +
|
||||
"?getManifest=true" +
|
||||
"&packageSize=\"NotANumber\"";
|
||||
@ -122,7 +122,7 @@ var steps = [
|
||||
},
|
||||
function() {
|
||||
// Test mini-manifest negative 'size' value. Bug 839435.
|
||||
ok(true, "== TEST == Negative size value");
|
||||
info("== TEST == Negative size value");
|
||||
var miniManifestURL = PackagedTestHelper.gSJS +
|
||||
"?getManifest=true" +
|
||||
"&packageSize=-1";
|
||||
@ -130,7 +130,7 @@ var steps = [
|
||||
},
|
||||
function() {
|
||||
// Test wrong package path
|
||||
ok(true, "== TEST == Installing app with wrong package path");
|
||||
info("== TEST == Installing app with wrong package path");
|
||||
var miniManifestURL = PackagedTestHelper.gSJS +
|
||||
"?getManifest=true" +
|
||||
"&wrongPackagePath=true";
|
||||
@ -138,7 +138,7 @@ var steps = [
|
||||
},
|
||||
function() {
|
||||
// Test no manifest in zip file.
|
||||
ok(true, "== TEST == No manifest in the zip file");
|
||||
info("== TEST == No manifest in the zip file");
|
||||
var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true";
|
||||
PackagedTestHelper.checkAppDownloadError(miniManifestURL,
|
||||
"MISSING_MANIFEST", 0, true, true,
|
||||
@ -150,7 +150,7 @@ var steps = [
|
||||
function() {
|
||||
// Test mini-manifest app name is different from the webapp manifest name.
|
||||
// Bug 844243.
|
||||
ok(true, "== TEST == Mini-manifest app name is different from webapp " +
|
||||
info("== TEST == Mini-manifest app name is different from webapp " +
|
||||
"manifest name");
|
||||
var miniManifestURL = PackagedTestHelper.gSJS +
|
||||
"?getManifest=true" +
|
||||
@ -187,11 +187,11 @@ var steps = [
|
||||
PackagedTestHelper.setAppVersion(2, PackagedTestHelper.next);
|
||||
},
|
||||
function() {
|
||||
ok(true, "== TEST == Install packaged app");
|
||||
info("== TEST == Install packaged app");
|
||||
var miniManifestURL = PackagedTestHelper.gSJS +
|
||||
"?getManifest=true";
|
||||
navigator.mozApps.mgmt.oninstall = function(evt) {
|
||||
ok(true, "Got oninstall event");
|
||||
info("Got oninstall event");
|
||||
PackagedTestHelper.gApp = evt.application;
|
||||
PackagedTestHelper.gApp.ondownloaderror = function() {
|
||||
ok(false, "Download error " +
|
||||
@ -199,7 +199,7 @@ var steps = [
|
||||
PackagedTestHelper.finish();
|
||||
};
|
||||
PackagedTestHelper.gApp.ondownloadsuccess = function() {
|
||||
ok(true, "App downloaded");
|
||||
info("App downloaded");
|
||||
var expected = {
|
||||
name: PackagedTestHelper.gAppName,
|
||||
manifestURL: miniManifestURL,
|
||||
@ -220,11 +220,92 @@ var steps = [
|
||||
var request = navigator.mozApps.installPackage(miniManifestURL);
|
||||
request.onerror = PackagedTestHelper.mozAppsError;
|
||||
request.onsuccess = function() {
|
||||
ok(true, "Application installed");
|
||||
info("Application installed");
|
||||
};
|
||||
},
|
||||
function() {
|
||||
ok(true, "all done!\n");
|
||||
PackagedTestHelper.setAppVersion(3, PackagedTestHelper.next, false, true);
|
||||
},
|
||||
function() {
|
||||
info("== TEST == Install packaged app with a cancel/resume");
|
||||
var miniManifestURL = PackagedTestHelper.gSJS +
|
||||
"?getManifest=true&allowCancel";
|
||||
navigator.mozApps.mgmt.oninstall = function(evt) {
|
||||
info("Got oninstall event");
|
||||
PackagedTestHelper.gApp = evt.application;
|
||||
|
||||
PackagedTestHelper.gApp.onprogress = function() {
|
||||
// The first onprogress event is generated *before* the actual
|
||||
// download is started. And the next one will be generated too late.
|
||||
// So we just try to delay the canceling a bit.
|
||||
setTimeout(function() {
|
||||
// Let's try cancelling and resuming the download later on.
|
||||
info("Cancelling the download");
|
||||
PackagedTestHelper.gApp.cancelDownload();
|
||||
// And only do this once.
|
||||
PackagedTestHelper.gApp.onprogress = null;
|
||||
}, 40);
|
||||
};
|
||||
|
||||
var alreadyCanceled = false;
|
||||
PackagedTestHelper.gApp.ondownloaderror = function() {
|
||||
info("Got a expected download error");
|
||||
ok(!alreadyCanceled, "The download should be cancelled only once!");
|
||||
is(PackagedTestHelper.gApp.downloadError.name, "DOWNLOAD_CANCELED",
|
||||
"Download error " + PackagedTestHelper.gApp.downloadError.name);
|
||||
if (!alreadyCanceled) {
|
||||
PackagedTestHelper.gApp.download();
|
||||
alreadyCanceled = true;
|
||||
}
|
||||
};
|
||||
|
||||
PackagedTestHelper.gApp.ondownloadsuccess = function() {
|
||||
info("App downloaded");
|
||||
// We could try also applying the download we just made.
|
||||
var expected = {
|
||||
name: PackagedTestHelper.gAppName,
|
||||
manifestURL: miniManifestURL,
|
||||
installOrigin: PackagedTestHelper.gInstallOrigin,
|
||||
progress: 0,
|
||||
installState: "pending",
|
||||
downloadAvailable: false,
|
||||
downloading: false,
|
||||
downloadSize: 0,
|
||||
size: 0,
|
||||
readyToApplyDownload: true
|
||||
};
|
||||
PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, 3, expected,
|
||||
true, false, function() {});
|
||||
};
|
||||
|
||||
PackagedTestHelper.gApp.ondownloadapplied = function() {
|
||||
info("App download applied.");
|
||||
var expected = {
|
||||
name: PackagedTestHelper.gAppName,
|
||||
manifestURL: miniManifestURL,
|
||||
installOrigin: PackagedTestHelper.gInstallOrigin,
|
||||
progress: 0,
|
||||
installState: "installed",
|
||||
downloadAvailable: false,
|
||||
downloading: false,
|
||||
downloadSize: 0,
|
||||
size: 0,
|
||||
readyToApplyDownload: false
|
||||
};
|
||||
PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, 3, expected,
|
||||
true, false, PackagedTestHelper.next);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var request = navigator.mozApps.installPackage(miniManifestURL);
|
||||
request.onerror = PackagedTestHelper.mozAppsError;
|
||||
request.onsuccess = function() {
|
||||
info("Application installed");
|
||||
};
|
||||
},
|
||||
function() {
|
||||
info("all done!\n");
|
||||
PackagedTestHelper.finish();
|
||||
}
|
||||
];
|
||||
|
@ -6,6 +6,6 @@ support-files =
|
||||
AudioChannelChromeScript.js
|
||||
|
||||
[test_telephonyPolicy.html]
|
||||
skip-if = (toolkit == 'gonk' || e10s)
|
||||
skip-if = buildapp == 'mulet' || (toolkit == 'gonk' || e10s)
|
||||
[test_audioChannelChange.html]
|
||||
skip-if = (toolkit != 'gonk')
|
||||
|
@ -63,6 +63,7 @@
|
||||
|
||||
#include "Layers.h"
|
||||
#include "mozilla/layers/ShadowLayers.h"
|
||||
#include "gfxPrefs.h"
|
||||
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "mozilla/dom/TabChild.h"
|
||||
@ -358,11 +359,13 @@ nsDOMWindowUtils::SetDisplayPortForElement(float aXPx, float aYPx,
|
||||
new DisplayPortPropertyData(displayport, aPriority),
|
||||
nsINode::DeleteProperty<DisplayPortPropertyData>);
|
||||
|
||||
nsIFrame* rootScrollFrame = presShell->GetRootScrollFrame();
|
||||
if (rootScrollFrame && content == rootScrollFrame->GetContent()) {
|
||||
// We are setting a root displayport for a document.
|
||||
// The pres shell needs a special flag set.
|
||||
presShell->SetIgnoreViewportScrolling(true);
|
||||
if (gfxPrefs::AsyncPanZoomEnabled()) {
|
||||
nsIFrame* rootScrollFrame = presShell->GetRootScrollFrame();
|
||||
if (rootScrollFrame && content == rootScrollFrame->GetContent()) {
|
||||
// We are setting a root displayport for a document.
|
||||
// The pres shell needs a special flag set.
|
||||
presShell->SetIgnoreViewportScrolling(true);
|
||||
}
|
||||
}
|
||||
|
||||
nsIFrame* rootFrame = presShell->FrameManager()->GetRootFrame();
|
||||
|
@ -13,6 +13,7 @@ support-files =
|
||||
[test_appname_override.html]
|
||||
[test_audioWindowUtils.html]
|
||||
[test_audioNotification.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_bug793311.html]
|
||||
[test_bug913761.html]
|
||||
[test_bug976673.html]
|
||||
@ -25,7 +26,7 @@ support-files =
|
||||
[test_constructor-assignment.html]
|
||||
[test_constructor.html]
|
||||
[test_dialogArguments.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s
|
||||
[test_document.all_unqualified.html]
|
||||
[test_domcursor.html]
|
||||
[test_domrequest.html]
|
||||
|
@ -3,7 +3,7 @@
|
||||
# so we don't run that test on platforms which don't support OOP tests.
|
||||
# OOP tests don't work on native-fennec (bug 774939).
|
||||
# Bug 960345 - Disabled on OSX debug for frequent crashes.
|
||||
skip-if = os == "android" || (toolkit == "cocoa" && debug) || (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) || e10s
|
||||
skip-if = os == "android" || (toolkit == "cocoa" && debug) || buildapp == 'mulet' || (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) || e10s
|
||||
support-files =
|
||||
browserElement_OpenMixedProcess.js
|
||||
file_browserElement_OpenMixedProcess.html
|
||||
|
@ -1,5 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) || e10s
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) || e10s
|
||||
support-files =
|
||||
../../../browser/base/content/test/general/audio.ogg
|
||||
../../../content/media/test/short-video.ogv
|
||||
|
@ -1,6 +1,6 @@
|
||||
[DEFAULT]
|
||||
# Good luck running these tests on anything but desktop Linux.
|
||||
skip-if = toolkit != "gtk2" || (buildapp == 'b2g' && (toolkit != 'gonk' || debug)) || e10s
|
||||
skip-if = toolkit != "gtk2" || ((buildapp =='mulet' || buildapp == 'b2g') && (toolkit != 'gonk' || debug)) || e10s
|
||||
|
||||
# Note: ../browserElementTestHelpers.js makes all tests in this directory OOP,
|
||||
# because testing the process-priority manager without OOP frames does not make
|
||||
|
@ -3,4 +3,4 @@ skip-if = toolkit == 'android' || e10s #bug 781789 & bug 782275
|
||||
support-files = ../test/devicestorage_common.js
|
||||
|
||||
[test_ipc.html]
|
||||
skip-if = buildapp == 'b2g' # b2g(nested ipc not working) b2g-debug(nested ipc not working) b2g-desktop(nested ipc not working)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' # b2g(nested ipc not working) b2g-debug(nested ipc not working) b2g-desktop(nested ipc not working)
|
||||
|
@ -1,4 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == 'mulet'
|
||||
|
||||
[test_app_permissions.html]
|
||||
[test_fs_app_permissions.html]
|
||||
|
@ -1,5 +1,5 @@
|
||||
[DEFAULT]
|
||||
skip-if = buildapp == 'b2g' # bug 979446, frequent failures
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' # bug 979446, frequent failures
|
||||
support-files =
|
||||
serve_file.sjs
|
||||
|
||||
|
@ -40,30 +40,32 @@ skip-if = buildapp == 'b2g' || toolkit == 'android' #TIMED_OUT
|
||||
[test_bug422132.html]
|
||||
skip-if = buildapp == 'b2g' || e10s # b2g(2 failures out of 8, mousewheel test) b2g-debug(2 failures out of 8, mousewheel test) b2g-desktop(2 failures out of 8, mousewheel test)
|
||||
[test_bug426082.html]
|
||||
skip-if = buildapp == 'b2g' || os == "win" || toolkit == 'android' || e10s # Intermittent failures, bug 921693 # b2g(1 failure out of 6, Moving the mouse down from the label should have unpressed the button) b2g-debug(1 failure out of 6, Moving the mouse down from the label should have unpressed the button) b2g-desktop(1 failure out of 6, Moving the mouse down from the label should have unpressed the button)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || os == "win" || toolkit == 'android' || e10s # Intermittent failures, bug 921693 # b2g(1 failure out of 6, Moving the mouse down from the label should have unpressed the button) b2g-debug(1 failure out of 6, Moving the mouse down from the label should have unpressed the button) b2g-desktop(1 failure out of 6, Moving the mouse down from the label should have unpressed the button)
|
||||
[test_bug427537.html]
|
||||
[test_bug428988.html]
|
||||
[test_bug432698.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_bug443985.html]
|
||||
[test_bug447736.html]
|
||||
[test_bug448602.html]
|
||||
[test_bug450876.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_bug456273.html]
|
||||
[test_bug457672.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
[test_bug489671.html]
|
||||
[test_bug493251.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_bug502818.html]
|
||||
skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
[test_bug508479.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || e10s #CRASH_DUMP, RANDOM # b2g(drag event, also fails on Android) b2g-debug(drag event, also fails on Android) b2g-desktop(drag event, also fails on Android)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s #CRASH_DUMP, RANDOM # b2g(drag event, also fails on Android) b2g-debug(drag event, also fails on Android) b2g-desktop(drag event, also fails on Android)
|
||||
[test_bug822898.html]
|
||||
[test_bug517851.html]
|
||||
[test_bug534833.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' #CRASH_DUMP, RANDOM # b2g(4 failures out of 6, bug 901564,click not fired, also disabled on Android) b2g-debug(4 failures out of 6, bug 901564,click not fired, also disabled on Android) b2g-desktop(4 failures out of 6, bug 901564,click not fired, also disabled on Android)
|
||||
[test_bug545268.html]
|
||||
skip-if = (buildapp == 'b2g' && toolkit != 'gonk') || toolkit == 'android' #CRASH_DUMP, RANDOM #Bug 931116, b2g desktop specific, initial triage
|
||||
skip-if = buildapp == 'mulet' || (buildapp == 'b2g' && toolkit != 'gonk') || toolkit == 'android' #CRASH_DUMP, RANDOM #Bug 931116, b2g desktop specific, initial triage
|
||||
[test_bug547996-1.html]
|
||||
skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
[test_bug547996-2.xhtml]
|
||||
@ -81,7 +83,7 @@ skip-if = buildapp == 'b2g' || toolkit == 'android' # b2g(1 failure out of 615,
|
||||
[test_bug605242.html]
|
||||
skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
[test_bug607464.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
[test_bug613634.html]
|
||||
skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
[test_bug615597.html]
|
||||
@ -143,18 +145,20 @@ skip-if = buildapp == 'b2g' || e10s # b2g(456 failed out of 19873, mousewheel te
|
||||
[test_draggableprop.html]
|
||||
skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
[test_dragstart.html]
|
||||
skip-if = buildapp == 'b2g' # b2g(drag event, also fails on Android) b2g-debug(drag event, also fails on Android) b2g-desktop(drag event, also fails on Android)
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' # b2g(drag event, also fails on Android) b2g-debug(drag event, also fails on Android) b2g-desktop(drag event, also fails on Android)
|
||||
[test_error_events.html]
|
||||
skip-if = toolkit == 'android' #TIMED_OUT
|
||||
[test_eventctors.html]
|
||||
skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
|
||||
[test_eventTimeStamp.html]
|
||||
[test_focus_disabled.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_messageEvent.html]
|
||||
[test_moz_mouse_pixel_scroll_event.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[test_onerror_handler_args.html]
|
||||
[test_wheel_default_action.html]
|
||||
skip-if = buildapp == 'b2g' || e10s
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g' || e10s
|
||||
[test_bug985988.html]
|
||||
[test_dom_storage_event.html]
|
||||
[test_bug998809.html]
|
||||
|
@ -71,7 +71,7 @@ private:
|
||||
InfallibleTArray<uint8_t> mArrayData;
|
||||
bool mReplace;
|
||||
|
||||
// This cannot be a DOMFile bacause this object is created on a different
|
||||
// This cannot be a DOMFile because this object is created on a different
|
||||
// thread and DOMFile is not thread-safe. Let's use the DOMFileImpl instead.
|
||||
nsRefPtr<DOMFileImpl> mTargetFileImpl;
|
||||
};
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsDebug.h"
|
||||
#include "nsDeviceStorage.h"
|
||||
#include "nsIDOMFile.h"
|
||||
#include "nsDOMFile.h"
|
||||
#include "nsIFile.h"
|
||||
#include "nsPIDOMWindow.h"
|
||||
|
||||
@ -114,7 +114,7 @@ DeviceStorageFileSystem::GetLocalFile(const nsAString& aRealPath) const
|
||||
}
|
||||
|
||||
bool
|
||||
DeviceStorageFileSystem::GetRealPath(nsIDOMFile* aFile, nsAString& aRealPath) const
|
||||
DeviceStorageFileSystem::GetRealPath(DOMFileImpl* aFile, nsAString& aRealPath) const
|
||||
{
|
||||
MOZ_ASSERT(FileSystemUtils::IsParentProcess(),
|
||||
"Should be on parent process!");
|
||||
|
@ -37,7 +37,7 @@ public:
|
||||
GetLocalFile(const nsAString& aRealPath) const MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
GetRealPath(nsIDOMFile* aFile, nsAString& aRealPath) const MOZ_OVERRIDE;
|
||||
GetRealPath(DOMFileImpl* aFile, nsAString& aRealPath) const MOZ_OVERRIDE;
|
||||
|
||||
virtual const nsAString&
|
||||
GetRootName() const MOZ_OVERRIDE;
|
||||
|
@ -195,12 +195,12 @@ Directory::RemoveInternal(const StringOrFileOrDirectory& aPath, bool aRecursive,
|
||||
{
|
||||
nsresult error = NS_OK;
|
||||
nsString realPath;
|
||||
nsCOMPtr<nsIDOMFile> file;
|
||||
nsRefPtr<DOMFileImpl> file;
|
||||
|
||||
// Check and get the target path.
|
||||
|
||||
if (aPath.IsFile()) {
|
||||
file = aPath.GetAsFile();
|
||||
file = static_cast<DOMFile*>(aPath.GetAsFile())->Impl();
|
||||
goto parameters_check_done;
|
||||
}
|
||||
|
||||
|
@ -10,13 +10,13 @@
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
class nsIDOMFile;
|
||||
class nsPIDOMWindow;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class Directory;
|
||||
class DOMFileImpl;
|
||||
|
||||
class FileSystemBase
|
||||
{
|
||||
@ -73,7 +73,7 @@ public:
|
||||
* empty string.
|
||||
*/
|
||||
virtual bool
|
||||
GetRealPath(nsIDOMFile* aFile, nsAString& aRealPath) const = 0;
|
||||
GetRealPath(DOMFileImpl* aFile, nsAString& aRealPath) const = 0;
|
||||
|
||||
/*
|
||||
* Get the permission name required to access this file system.
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user