merge mozilla-inbound to mozilla-central a=merge

This commit is contained in:
Carsten "Tomcat" Book 2014-07-24 15:25:20 +02:00
commit db47cd2bf3
276 changed files with 4115 additions and 3226 deletions

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -2,4 +2,5 @@
[test_focusedChild.html]
[test_takeFocus.html]
skip-if = buildapp == 'mulet'
[test_takeFocus.xul]

View File

@ -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]

View File

@ -29,3 +29,4 @@ support-files =
[test_tree.xul]
[test_visibility.html]
[test_visibility.xul]
skip-if = buildapp == "mulet"

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -1,4 +1,5 @@
[DEFAULT]
skip-if = buildapp == 'mulet'
support-files =
head.js
chat.html

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -4,3 +4,4 @@ support-files =
[browser_mozLoop_charPref.js]
[browser_mozLoop_doNotDisturb.js]
skip-if = buildapp == 'mulet'

View File

@ -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

View File

@ -1,4 +1,5 @@
[DEFAULT]
skip-if = buildapp == "mulet"
support-files =
head.js
privacypane_tests_perwindow.js

View File

@ -1,4 +1,5 @@
[DEFAULT]
skip-if = buildapp == "mulet"
support-files =
head.js
privacypane_tests_perwindow.js

View File

@ -1,4 +1,5 @@
[DEFAULT]
skip-if = buildapp == "mulet"
support-files =
browser_privatebrowsing_concurrent_page.html
browser_privatebrowsing_cookieacceptdialog.html

View File

@ -1,4 +1,5 @@
[DEFAULT]
skip-if = buildapp == 'mulet'
support-files =
426329.xml
483086-1.xml

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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) {

View File

@ -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)

View File

@ -3,3 +3,4 @@
[test_bug357450.js]
[test_copypaste.xul]
[test_messagemanager_principal.html]
skip-if = buildapp == 'mulet'

View File

@ -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]

View File

@ -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)

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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;

View File

@ -96,6 +96,14 @@ GMPVideoDecoderChild::ResetComplete()
SendResetComplete();
}
void
GMPVideoDecoderChild::Error(GMPErr aError)
{
MOZ_ASSERT(mPlugin->GMPMessageLoop() == MessageLoop::current());
SendError(aError);
}
void
GMPVideoDecoderChild::CheckThread()
{

View File

@ -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();

View File

@ -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)
{

View File

@ -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;

View File

@ -51,7 +51,7 @@ GMPVideoEncodedFrameImpl::~GMPVideoEncodedFrameImpl()
}
}
const GMPEncryptedBufferData*
const GMPEncryptedBufferMetadata*
GMPVideoEncodedFrameImpl::GetDecryptionData() const
{
return nullptr;

View File

@ -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();

View File

@ -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()
{

View File

@ -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();

View File

@ -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)
{

View File

@ -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;

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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_

View File

@ -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_

View File

@ -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;

View File

@ -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() {}
};

View File

@ -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;

View File

@ -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;

View File

@ -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_

View File

@ -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;
}

View File

@ -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',

View File

@ -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]

View File

@ -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)

View File

@ -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]

View File

@ -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

View File

@ -1,4 +1,5 @@
[DEFAULT]
skip-if = buildapp == 'mulet'
support-files =
animals.rdf
animals.sqlite

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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>

View File

@ -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]

View File

@ -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;
}

View File

@ -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();

View File

@ -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();
}
];

View File

@ -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')

View File

@ -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();

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -1,4 +1,5 @@
[DEFAULT]
skip-if = buildapp == 'mulet'
[test_app_permissions.html]
[test_fs_app_permissions.html]

View File

@ -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

View File

@ -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]

View File

@ -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;
};

View File

@ -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!");

View File

@ -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;

View File

@ -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;
}

View File

@ -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