haikuwebkit/LayoutTests/media/media-file.js

205 lines
13 KiB
JavaScript
Raw Permalink Normal View History

var audioCodecs = [
2009-09-17 Alpha Lam <hclam@chromium.org> Reviewed by Eric Carlson. Media layout tests should have a way to provide test files in different formats https://bugs.webkit.org/show_bug.cgi?id=28327 Updating 19 media layout tests to use media files based on supported codecs. * media/media-file.js: Prefer .wav over other formats as this is used the most in tests for mac port. Most of audio tests use media/content/test.wav as test file for mac, so this change would make sure findMediaFile() will return test.wav but not test.mp3 or other formats. (setSrcById): Fixing bug in code. * media/video-canvas-source.html: Use findMediaFile() to locate a media file based on supported types. * media/video-click-dblckick-standalone.html: ditto. * media/video-controls-transformed.html: ditto. * media/video-controls-visible-audio-only.html: ditto. * media/video-controls-zoomed.html: ditto. * media/video-controls.html: ditto. * media/video-currentTime-set.html: ditto. * media/video-currentTime-set2.html: ditto. * media/video-currentTime.html: ditto. * media/video-display-none-crash.html: ditto. * media/video-display-toggle.html: ditto. * media/video-dom-autoplay.html: ditto. * media/video-dom-src.html: ditto. * media/video-error-abort.html: ditto. * media/video-load-networkState.html: ditto. * media/video-load-readyState.html: ditto. * media/video-loop.html: ditto. * media/video-muted.html: ditto. * media/video-no-autoplay.html: ditto. Canonical link: https://commits.webkit.org/40059@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@48494 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2009-09-17 22:48:32 +00:00
["audio/wav", "wav"],
["audio/aac", "m4a"],
["audio/mpeg", "mp3"],
["audio/ogg", "oga"]
];
var videoCodecs = [
["video/mp4", "mp4"],
["video/mpeg", "mpg"],
["video/quicktime", "mov"],
["video/ogg", "ogv"]
];
function findMediaFile(tagName, name) {
var codecs;
if (tagName == "audio")
codecs = audioCodecs;
else
codecs = videoCodecs;
2009-09-17 Alpha Lam <hclam@chromium.org> Reviewed by Eric Carlson. Media layout tests should have a way to provide test files in different formats https://bugs.webkit.org/show_bug.cgi?id=28327 Updating 19 media layout tests to use media files based on supported codecs. * media/media-file.js: Prefer .wav over other formats as this is used the most in tests for mac port. Most of audio tests use media/content/test.wav as test file for mac, so this change would make sure findMediaFile() will return test.wav but not test.mp3 or other formats. (setSrcById): Fixing bug in code. * media/video-canvas-source.html: Use findMediaFile() to locate a media file based on supported types. * media/video-click-dblckick-standalone.html: ditto. * media/video-controls-transformed.html: ditto. * media/video-controls-visible-audio-only.html: ditto. * media/video-controls-zoomed.html: ditto. * media/video-controls.html: ditto. * media/video-currentTime-set.html: ditto. * media/video-currentTime-set2.html: ditto. * media/video-currentTime.html: ditto. * media/video-display-none-crash.html: ditto. * media/video-display-toggle.html: ditto. * media/video-dom-autoplay.html: ditto. * media/video-dom-src.html: ditto. * media/video-error-abort.html: ditto. * media/video-load-networkState.html: ditto. * media/video-load-readyState.html: ditto. * media/video-loop.html: ditto. * media/video-muted.html: ditto. * media/video-no-autoplay.html: ditto. Canonical link: https://commits.webkit.org/40059@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@48494 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2009-09-17 22:48:32 +00:00
var element = document.getElementsByTagName(tagName)[0];
if (!element)
element = document.createElement(tagName);
for (var i = 0; i < codecs.length; ++i) {
if (element.canPlayType(codecs[i][0]))
return name + "." + codecs[i][1];
}
return "";
}
2010-10-19 Eric Carlson <eric.carlson@apple.com> Reviewed by Darin Adler. https://bugs.webkit.org/show_bug.cgi?id=46763 CRASH in WebCore::ThreadTimers::sharedTimerFiredInternal Fix crashes caused by moving and deleting <source> element(s) of active media element. Tests: media/video-source-moved.html media/video-source-removed.html * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): Add logging. Initialize selectNextSourceChild. (WebCore::HTMLMediaElement::~HTMLMediaElement): Ditto. (WebCore::HTMLMediaElement::insertedIntoDocument): Ditto. (WebCore::HTMLMediaElement::removedFromDocument): Ditto. (WebCore::HTMLMediaElement::scheduleLoad): Ditto. (WebCore::HTMLMediaElement::setNetworkState): Deal with m_currentSourceNode being null when the media engine signals a failure by skipping the error message and continuing as usual. (WebCore::HTMLMediaElement::setVolume): Fix logging typo. (WebCore::HTMLMediaElement::havePotentialSourceChild): Save and restore m_nextChildNodeToConsider around call to selectNextSourceChild because they are both significant. (WebCore::HTMLMediaElement::selectNextSourceChild): Use m_nextChildNodeToConsider to pick the first node to consider. Bail immediately if it signals that we have already processed every <source> node. Stach the node following the current source element in m_nextChildNodeToConsider so we can resume the search even if m_currentSourceNode is removed while it is being processed. (WebCore::HTMLMediaElement::sourceWasAdded): New, move logic from HTMLSourceElement::insertedIntoTree here and correct it to deal with a <source> node being inserted immediately after the current <source> node and a new <source> node being inserted at the end of the list after all candidates have failed. (WebCore::HTMLMediaElement::sourceWillBeRemoved): New, deal with current source node and next potential node being removed. * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::sourceChildEndOfListValue): New, define sentinal value used to indicate that all nodes have been processed. * html/HTMLSourceElement.cpp: (WebCore::HTMLSourceElement::HTMLSourceElement): Add logging. (WebCore::HTMLSourceElement::insertedIntoTree): Call mediaElement->sourceWasAdded instead of having logic here. (WebCore::HTMLSourceElement::willRemove): New, call mediaElement->sourceWillBeRemoved (WebCore::HTMLSourceElement::scheduleErrorEvent): Add logging. (WebCore::HTMLSourceElement::cancelPendingErrorEvent): Add logging. * html/HTMLSourceElement.h: 2010-10-19 Eric Carlson <eric.carlson@apple.com> Reviewed by Darin Adler. https://bugs.webkit.org/show_bug.cgi?id=46763 CRASH in WebCore::ThreadTimers::sharedTimerFiredInternal Test moving and deleting <source> element(s) of active <video>. * media/media-file.js: (mimeTypeForExtension): New, added to make it possible to set 'type' attribute on <source>. * media/video-source-moved-expected.txt: Added. * media/video-source-moved.html: Added. * media/video-source-removed-expected.txt: Added. * media/video-source-removed.html: Added. Canonical link: https://commits.webkit.org/60625@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@70063 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2010-10-19 16:43:37 +00:00
function mimeTypeForExtension(extension) {
for (var i = 0; i < videoCodecs.length; ++i) {
if (extension == videoCodecs[i][1])
return videoCodecs[i][0];
}
for (var i = 0; i < audioCodecs.length; ++i) {
if (extension == audioCodecs[i][1])
return audioCodecs[i][0];
}
return "";
}
function mimeTypeForFile(filename) {
var lastPeriodIndex = filename.lastIndexOf(".");
if (lastPeriodIndex > 0)
return mimeTypeForExtension(filename.substring(lastPeriodIndex + 1));
return "";
}
function setSrcByTagName(tagName, src) {
var elements = document.getElementsByTagName(tagName);
if (elements) {
for (var i = 0; i < elements.length; ++i)
elements[i].src = src;
}
}
function setSrcById(id, src) {
var element = document.getElementById(id);
if (element)
2009-09-17 Alpha Lam <hclam@chromium.org> Reviewed by Eric Carlson. Media layout tests should have a way to provide test files in different formats https://bugs.webkit.org/show_bug.cgi?id=28327 Updating 19 media layout tests to use media files based on supported codecs. * media/media-file.js: Prefer .wav over other formats as this is used the most in tests for mac port. Most of audio tests use media/content/test.wav as test file for mac, so this change would make sure findMediaFile() will return test.wav but not test.mp3 or other formats. (setSrcById): Fixing bug in code. * media/video-canvas-source.html: Use findMediaFile() to locate a media file based on supported types. * media/video-click-dblckick-standalone.html: ditto. * media/video-controls-transformed.html: ditto. * media/video-controls-visible-audio-only.html: ditto. * media/video-controls-zoomed.html: ditto. * media/video-controls.html: ditto. * media/video-currentTime-set.html: ditto. * media/video-currentTime-set2.html: ditto. * media/video-currentTime.html: ditto. * media/video-display-none-crash.html: ditto. * media/video-display-toggle.html: ditto. * media/video-dom-autoplay.html: ditto. * media/video-dom-src.html: ditto. * media/video-error-abort.html: ditto. * media/video-load-networkState.html: ditto. * media/video-load-readyState.html: ditto. * media/video-loop.html: ditto. * media/video-muted.html: ditto. * media/video-no-autoplay.html: ditto. Canonical link: https://commits.webkit.org/40059@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@48494 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2009-09-17 22:48:32 +00:00
element.src = src;
}
2011-02-07 Ami Fischman <fischman@google.com> Reviewed by Eric Carlson. Removed two of the three almost-duplicate test expectations between {media,platform/chromium-{mac,win}} by excluding file extensions from the emitted output. Removed outdated test_expectation for deleted test. http://crbug.com/28993 * media/controls-right-click-on-timebar-expected.txt: * media/controls-right-click-on-timebar.html: * media/media-file.js: (stripExtension): * media/media-startTime-expected.txt: * media/media-startTime.html: * media/video-append-source-expected.txt: * media/video-append-source.html: * media/video-canvas-source-expected.txt: * media/video-canvas-source.html: * media/video-dom-src-expected.txt: * media/video-dom-src.html: * media/video-load-networkState-expected.txt: * media/video-load-networkState.html: * media/video-played-reset-expected.txt: * media/video-played-reset.html: * media/video-seek-past-end-paused-expected.txt: * media/video-seek-past-end-paused.html: * media/video-seek-past-end-playing-expected.txt: * media/video-seek-past-end-playing.html: * media/video-source-expected.txt: * media/video-source-type-expected.txt: * media/video-source-type-params-expected.txt: * media/video-source-type-params.html: * media/video-source-type.html: * media/video-source.html: * media/video-src-change-expected.txt: * media/video-src-change.html: * media/video-src-expected.txt: * media/video-src-remove-expected.txt: * media/video-src-remove.html: * media/video-src-set-expected.txt: * media/video-src-set.html: * media/video-src-source-expected.txt: * media/video-src-source.html: * media/video-src.html: * media/video-test.js: (enableFullTestDetailsPrinting): (test): (testExpected): (waitForEvent._eventCallback): (waitForEvent): (waitForEventAndTest._eventCallback): (waitForEventAndTest): (testException): (endTest): * platform/chromium-mac/media/controls-right-click-on-timebar-expected.txt: Removed. * platform/chromium-mac/media/media-startTime-expected.txt: Removed. * platform/chromium-mac/media/video-append-source-expected.txt: Removed. * platform/chromium-mac/media/video-canvas-source-expected.txt: Removed. * platform/chromium-mac/media/video-dom-src-expected.txt: Removed. * platform/chromium-mac/media/video-load-networkState-expected.txt: Removed. * platform/chromium-mac/media/video-played-reset-expected.txt: Removed. * platform/chromium-mac/media/video-seek-past-end-paused-expected.txt: Removed. * platform/chromium-mac/media/video-seek-past-end-playing-expected.txt: Removed. * platform/chromium-mac/media/video-source-add-src-expected.txt: Removed. * platform/chromium-mac/media/video-source-error-expected.txt: Removed. * platform/chromium-mac/media/video-source-expected.txt: Removed. * platform/chromium-mac/media/video-source-type-expected.txt: Removed. * platform/chromium-mac/media/video-source-type-params-expected.txt: Removed. * platform/chromium-mac/media/video-src-change-expected.txt: Removed. * platform/chromium-mac/media/video-src-expected.txt: Removed. * platform/chromium-mac/media/video-src-remove-expected.txt: Removed. * platform/chromium-mac/media/video-src-set-expected.txt: Removed. * platform/chromium-mac/media/video-src-source-expected.txt: Removed. * platform/chromium-win/media/controls-right-click-on-timebar-expected.txt: Removed. * platform/chromium-win/media/media-startTime-expected.txt: Removed. * platform/chromium-win/media/video-append-source-expected.txt: Removed. * platform/chromium-win/media/video-canvas-source-expected.txt: Removed. * platform/chromium-win/media/video-dom-src-expected.txt: Removed. * platform/chromium-win/media/video-load-networkState-expected.txt: Removed. * platform/chromium-win/media/video-played-reset-expected.txt: Removed. * platform/chromium-win/media/video-seek-past-end-paused-expected.txt: Removed. * platform/chromium-win/media/video-seek-past-end-playing-expected.txt: Removed. * platform/chromium-win/media/video-source-add-src-expected.txt: Removed. * platform/chromium-win/media/video-source-error-expected.txt: Removed. * platform/chromium-win/media/video-source-expected.txt: Removed. * platform/chromium-win/media/video-source-type-expected.txt: Removed. * platform/chromium-win/media/video-source-type-params-expected.txt: Removed. * platform/chromium-win/media/video-src-change-expected.txt: Removed. * platform/chromium-win/media/video-src-expected.txt: Removed. * platform/chromium-win/media/video-src-remove-expected.txt: Removed. * platform/chromium-win/media/video-src-set-expected.txt: Removed. * platform/chromium-win/media/video-src-source-expected.txt: Removed. * platform/chromium/test_expectations.txt: Canonical link: https://commits.webkit.org/67952@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@77893 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-02-08 05:37:02 +00:00
function stripExtension(filename) {
var lastPeriodIndex = filename.lastIndexOf(".");
if (lastPeriodIndex > 0)
return filename.substring(0, lastPeriodIndex);
return filename;
}
Support for promise rejection events (unhandledrejection) https://bugs.webkit.org/show_bug.cgi?id=150358 <rdar://problem/28441651> Reviewed by Saam Barati. Patch by Joseph Pecoraro and Yusuke Suzuki. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits-expected.txt: * web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys-expected.txt: * web-platform-tests/html/semantics/embedded-content/media-elements/event_pause_noautoplay-expected.txt: * web-platform-tests/html/semantics/embedded-content/media-elements/event_play_noautoplay-expected.txt: * web-platform-tests/html/semantics/embedded-content/media-elements/paused_true_during_pause-expected.txt: * web-platform-tests/html/syntax/parsing/html5lib_innerHTML_adoption01-expected.txt: * web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers-expected.txt: * web-platform-tests/streams/piping/close-propagation-forward-expected.txt: * web-platform-tests/streams/piping/error-propagation-backward-expected.txt: * web-platform-tests/streams/piping/error-propagation-forward-expected.txt: * web-platform-tests/streams/piping/flow-control-expected.txt: * web-platform-tests/streams/piping/general-expected.txt: * web-platform-tests/user-timing/measure_exceptions_navigation_timing-expected.txt: Rebaseline expectations to include unhandled promise rejection messages. Also change how the test harness reports success or failure to use the values immediately on completion and then allow a run loop cycle before completing the test to gather the output. * web-platform-tests/resource-timing/rt-resource-errors.html: This is our own WPT test yet to be uploaded, so update the test to prevent an unexpected unhandled rejection. Source/JavaScriptCore: Implement support for promise.[[PromiseIsHandled]] and the HostPromiseRejectionTracker hook for HTML to track promise rejections: https://tc39.github.io/ecma262/#sec-host-promise-rejection-tracker https://html.spec.whatwg.org/multipage/webappapis.html#unhandled-promise-rejections * builtins/BuiltinNames.h: New private symbols. * builtins/PromiseOperations.js: (globalPrivate.newHandledRejectedPromise): Utility to create a rejected promise with [[PromiseIsHandled]] to true. (globalPrivate.rejectPromise): (globalPrivate.initializePromise): * builtins/PromisePrototype.js: (then): Implement standard behavior of [[PromiseIsHandled]] and the host hook. * runtime/JSPromise.cpp: (JSC::JSPromise::isHandled): * runtime/JSPromise.h: C++ accessors for the [[PromiseIsHandled]] state. * bytecode/BytecodeIntrinsicRegistry.cpp: (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry): * bytecode/BytecodeIntrinsicRegistry.h: Expose private values for the Reject / Handle enum values in built-ins. * jsc.cpp: * runtime/JSGlobalObject.h: (JSC::JSGlobalObject::promiseResolveFunction): Add a new GlobalObjectMethodTable hook matching the promise rejection hook. * runtime/JSGlobalObject.cpp: (JSC::JSGlobalObject::init): (JSC::JSGlobalObject::visitChildren): * runtime/JSGlobalObjectFunctions.cpp: (JSC::globalFuncHostPromiseRejectionTracker): * runtime/JSGlobalObjectFunctions.h: Plumb the builtin hook through to the optional GlobalObjectMethodTable hook. * inspector/InjectedScriptSource.js: (InjectedScript.prototype.createFakeValueDescriptor): Silence possible rejected promises created internally via Web Inspector. Source/WebCore: Implement support for the `onunhandledrejection` and `rejectionhandled` events. They dispatch a new PromiseRejectionEvent using the ES6 HostPromiseRejectionTracker hook: https://tc39.github.io/ecma262/#sec-host-promise-rejection-tracker https://html.spec.whatwg.org/multipage/webappapis.html#unhandled-promise-rejections This is currently implemented only for Documents and not yet Web Workers. Tests: js/dom/unhandled-promise-rejection-basic.html js/dom/unhandled-promise-rejection-bindings-type-error.html js/dom/unhandled-promise-rejection-console-no-report.html js/dom/unhandled-promise-rejection-console-report.html js/dom/unhandled-promise-rejection-handle-during-event.html js/dom/unhandled-promise-rejection-handle-in-handler.html js/dom/unhandled-promise-rejection-handle.html js/dom/unhandled-promise-rejection-order.html * CMakeLists.txt: * DerivedSources.cpp: * DerivedSources.make: * WebCore.xcodeproj/project.pbxproj: * dom/DOMAllInOne.cpp: New files. * bindings/scripts/CodeGenerator.pm: (IsPromiseType): * bindings/scripts/CodeGeneratorJS.pm: (AddToIncludesForIDLType): (GetBaseIDLType): Binding support for Promise<T> attributes. * bindings/js/JSDOMConvert.h: * bindings/js/JSDOMConvertPromise.h: Copied from Source/JavaScriptCore/runtime/JSPromise.h. (WebCore::Converter<IDLPromise<T>>::convert): (WebCore::JSConverter<IDLPromise<T>>::convert): Promise<T> binding conversion is currently unimplemented, which only means web developers creating their own PromiseRejectionEvent will not get autowrapping of values assigned to `promise` in event initialization. Engine generated events will have expected behavior. * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::promiseRejectionTracker): * bindings/js/JSDOMWindowBase.h: * bindings/js/JSWorkerGlobalScopeBase.cpp: Implement HostPromiseRejectionTracker hook for Document but not Worker. Passes through to the ScriptExecutionContext's tracker. * bindings/js/JSMainThreadExecState.cpp: (WebCore::JSMainThreadExecState::didLeaveScriptContext): * bindings/js/JSMainThreadExecState.h: (WebCore::JSMainThreadExecState::~JSMainThreadExecState): When completing script execution and performing microtasks notify about rejected promises. Technically this should go inside of performing a microtask checkpoint, except lacking EventLoop concepts we use ScriptExecutionState. * dom/EventNames.h: * dom/EventNames.in: * dom/PromiseRejectionEvent.cpp: Added. (WebCore::PromiseRejectionEvent::PromiseRejectionEvent): (WebCore::PromiseRejectionEvent::~PromiseRejectionEvent): * dom/PromiseRejectionEvent.h: Added. * dom/PromiseRejectionEvent.idl: Added. New PromiseRejectionEvent event interface. * dom/GlobalEventHandlers.idl: New onunhandledrejection and onrejectionhandled. * dom/RejectedPromiseTracker.cpp: Added. (WebCore::RejectedPromise::RejectedPromise): (WebCore::RejectedPromise::globalObject): (WebCore::RejectedPromise::promise): (WebCore::UnhandledPromise::UnhandledPromise): (WebCore::UnhandledPromise::callStack): (WebCore::RejectedPromiseTracker::RejectedPromiseTracker): (WebCore::RejectedPromiseTracker::~RejectedPromiseTracker): (WebCore::createScriptCallStackFromReason): (WebCore::RejectedPromiseTracker::promiseRejected): (WebCore::RejectedPromiseTracker::promiseHandled): (WebCore::RejectedPromiseTracker::processQueueSoon): (WebCore::RejectedPromiseTracker::reportUnhandledRejections): (WebCore::RejectedPromiseTracker::reportRejectionHandled): * dom/RejectedPromiseTracker.h: Added. Track and report rejected promises. The promises are tracked weakly allowing them to be collected before they are reported. When reporting we dispatch PromiseRejectionEvent events, and if the default is not prevented we log a message to the console. * dom/ScriptExecutionContext.cpp: (WebCore::ScriptExecutionContext::reportUnhandledPromiseRejection): (WebCore::ScriptExecutionContext::ensureRejectedPromiseTrackerSlow): * dom/ScriptExecutionContext.h: (WebCore::ScriptExecutionContext::ensureRejectedPromiseTracker): Each ScriptExecutionContext can own a rejected promise tracker. * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::pauseInternal): https://html.spec.whatwg.org/multipage/embedded-content.html#internal-pause-steps Internal pause steps say to timeupdate, pause, and rejecting pending play promises should all happen in a queued task. Here the first two actions are already scheduled on tasks, but rejecting play promises was not being done in a task, so this makes that change. * Modules/streams/ReadableStream.js: (pipeThrough): * Modules/streams/ReadableStreamInternals.js: (readableStreamReaderGenericInitialize): (readableStreamError): (readableStreamReaderGenericRelease): Satisfy parts of the Streams specification which state to set the [[PromiseIsHandled]] internal state of promises created internally by the Streams APIs. This prevents some internal promises from appearing as unhandled promise rejections. LayoutTests: * js/dom/unhandled-promise-rejection-basic-expected.txt: Added. * js/dom/unhandled-promise-rejection-basic.html: Added. * js/dom/unhandled-promise-rejection-bindings-type-error-expected.txt: Added. * js/dom/unhandled-promise-rejection-bindings-type-error.html: Added. * js/dom/unhandled-promise-rejection-console-no-report-expected.txt: Added. * js/dom/unhandled-promise-rejection-console-no-report.html: Added. * js/dom/unhandled-promise-rejection-console-report-expected.txt: Added. * js/dom/unhandled-promise-rejection-console-report.html: Added. * js/dom/unhandled-promise-rejection-handle-during-event-expected.txt: Added. * js/dom/unhandled-promise-rejection-handle-during-event.html: Added. * js/dom/unhandled-promise-rejection-handle-expected.txt: Added. * js/dom/unhandled-promise-rejection-handle-in-handler-expected.txt: Added. * js/dom/unhandled-promise-rejection-handle-in-handler.html: Added. * js/dom/unhandled-promise-rejection-handle.html: Added. * js/dom/unhandled-promise-rejection-order-expected.txt: Added. * js/dom/unhandled-promise-rejection-order.html: Added. New tests specific to the `onunhandledrejection` and `onrejectionhandled` events. * resources/testharnessreport.js: (self.testRunner.add_completion_callback.sanitize): (self.testRunner.add_completion_callback): Report results immediately and then finish the test after a turn. This way if the test ends with a pass, but may get unhandled rejections after completing which should not make the test appear as if it failed. Some tests have unhandled promise rejections but are expected to pass. Likewise some tests perform cleanup in their own completion callbacks, which happen after this initial completion callback, and we want to report results after all the work is done as it may eliminate non-deterministic debug test output. * TestExpectations: Mark some tests as flakey that have sometimes have unhandled promise rejections. These tests are all various imported tests that use the testharness. * fast/mediastream/MediaStream-MediaElement-setObject-null-expected.txt: * http/tests/security/video-cross-origin-caching-expected.txt: * inspector/debugger/break-on-exception-throw-in-promise-expected.txt: * inspector/debugger/break-on-uncaught-exception-throw-in-promise-expected.txt: * inspector/worker/resources-in-worker-expected.txt: * js/dom/dom-static-property-for-in-iteration-expected.txt: * js/dom/global-constructors-attributes-dedicated-worker-expected.txt: * js/promises-tests/promises-tests-2-2-6-expected.txt: * platform/mac/inspector/model/remote-object-expected.txt: * webrtc/libwebrtc/release-while-creating-offer-expected.txt: * webrtc/libwebrtc/release-while-setting-local-description-expected.txt: Update tests with unhandled promise rejection messages. * media/W3C/audio/events/event_pause_manual.html: * media/audio-playback-restriction-play-expected.txt: * media/audio-playback-restriction-play.html: * media/click-volume-bar-not-pausing.html: * media/remote-control-command-is-user-gesture-expected.txt: * media/remote-control-command-is-user-gesture.html: * media/track/track-mode.html: * media/video-autoplay-allowed-but-fullscreen-required.html: * media/video-display-none-crash.html: * media/video-main-content-deny-display-none.html: * media/video-main-content-deny-not-in-dom.html: * media/video-main-content-deny-not-visible.html: * media/video-main-content-deny-obscured.html: * media/video-main-content-deny-too-small.html: * media/video-multiple-concurrent-playback-expected.txt: * media/video-play-audio-require-user-gesture-expected.txt: * media/video-play-audio-require-user-gesture.html: * media/video-play-pause-events-expected.txt: * media/video-play-pause-events.html: * media/video-play-pause-exception-expected.txt: * media/video-play-pause-exception.html: * media/video-play-require-user-gesture-expected.txt: * media/video-play-require-user-gesture.html: * media/video-preload-expected.txt: * media/video-preload.html: * media/video-test.js: (handlePromise.handle): Snuff many possible unhandled promise rejections in media via media.play(). * streams/reference-implementation/pipe-to-expected.txt: * streams/reference-implementation/pipe-to-options-expected.txt: * streams/reference-implementation/readable-stream-templated-expected.txt: * streams/reference-implementation/writable-stream-abort-expected.txt: * streams/reference-implementation/writable-stream-expected.txt: These stream tests are out of date and produce unhandled rejections. * streams/shadowing-Promise.html: Update non-imported tests to prevent unhandled rejection messages. Canonical link: https://commits.webkit.org/188310@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215916 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-28 03:33:57 +00:00
function handlePromise(promise) {
function handle() { }
return promise.then(handle, handle);
}
// The base64'd data below was generated from the corresponding content/test.{mp4,ogv} files with:
// rm -f test-frame.ogv test-frame.mp4 && \
// ~/tmp/ffmpeg/ffmpeg -i test.mp4 -an -vframes 1 test-frame.png && \
// pngtopnm test-frame.png > test-frame.pnm && pnmscale 0.25 test-frame.pnm|pnmtopng > test-frame.png && \
// ~/tmp/ffmpeg/ffmpeg -i test-frame.png -an -vframes 1 -s 80x60 test-frame.mp4 && \
// ffmpeg2theora test-frame.mp4 -o test-frame.ogv && rm test-frame.png test-frame.pnm
// Followed by [base64 -w 120 test-frame.ogv] and [base64 -w 120 test-frame.mp4].
//
const dataURLs = {
"mp4" : `data:video/mp4;base64,
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
AQAAAABMYXZmNTQuMC4xMDA=`,
"ogg" : `data:video/ogg;base64,
T2dnUwACAAAAAAAAAABDt3UdAAAAAG1FPOwBQGZpc2hlYWQAAwAAAAAAAAAAAAAA6AMAAAAAAAAAAAAAAAAAAOgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABPZ2dTAAIAAAAAAAAAAKK34ysAAAAAwlsClQEqgHRoZW9yYQMCAQAFAAQAAFAAADwABAAAABkAAAABAAABAAABAgAAAIDAT2dnUwAAAAAAAAAAAABDt3Ud
AQAAAFp3fKUBUGZpc2JvbmUALAAAAKK34ysDAAAAGQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABDb250ZW50LVR5cGU6IHZpZGVvL3RoZW9yYQ0K
T2dnUwAAAAAAAAAAAACit+MrAQAAAHoeC5AOWP///////////////5CBdGhlb3JhKwAAAFhpcGguT3JnIGxpYnRoZW9yYSAxLjEgMjAwOTA4MjIgKFRodXNu
ZWxkYSkBAAAAGgAAAEVOQ09ERVI9ZmZtcGVnMnRoZW9yYS0wLjI0gnRoZW9yYb7NKPe5zWsYtalJShBznOYxjFKUpCEIMYxiEIQhCEAAAAAAAAAAAAARba5T
Z5LI/FYS/Hg5W2zmKvVoq1QoEykkWhD+eTmbjWZTCXiyVSmTiSSCGQh8PB2OBqNBgLxWKhQJBGIhCHw8HAyGAsFAiDgVFtrlNnksj8VhL8eDlbbOYq9WirVC
gTKSRaEP55OZuNZlMJeLJVKZOJJIIZCHw8HY4Go0GAvFYqFAkEYiEIfDwcDIYCwUCIOBQLDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw
8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8MDA8SFBQVDQ0OERIVFRQODg8SFBUVFQ4QERMUFRUVEBEUFRUVFRUSExQVFRUVFRQVFRUVFRUVFRUVFRUVFR
UQDAsQFBkbHA0NDhIVHBwbDg0QFBkcHBwOEBMWGx0dHBETGRwcHh4dFBgbHB0eHh0bHB0dHh4eHh0dHR0eHh4dEAsKEBgoMz0MDA4TGjo8Nw4NEBgoOUU4Dh
EWHTNXUD4SFiU6RG1nTRgjN0BRaHFcMUBOV2d5eGVIXF9icGRnYxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx
MTExMTExMTExMTExMSEhUZGhoaGhIUFhoaGhoaFRYZGhoaGhoZGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaERIWHyQkJCQSFBgiJC
QkJBYYISQkJCQkHyIkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBESGC9jY2NjEhUaQmNjY2MYGjhjY2NjYy9CY2NjY2NjY2NjY2NjY2
NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVEh
ISFRcYGRsSEhUXGBkbHBIVFxgZGxwdFRcYGRscHR0XGBkbHB0dHRgZGxwdHR0eGRscHR0dHh4bHB0dHR4eHhERERQXGhwgEREUFxocICIRFBcaHCAiJRQXGh
wgIiUlFxocICIlJSUaHCAiJSUlKRwgIiUlJSkqICIlJSUpKioQEBAUGBwgKBAQFBgcICgwEBQYHCAoMEAUGBwgKDBAQBgcICgwQEBAHCAoMEBAQGAgKDBAQE
BggCgwQEBAYICAB8Xlx0fV7c7D8vrrAaZid8hRvB1RN7csxFuo43wH7lEkS9wbGS+tVSNMyuxdiECcjB7R1Ml85htasNjKpSvPt3D8k7iGmZXYuxBC+RR4ar
UGxkvH5y7mJXR7R5Jwn3VUhBiuap91VIrsaCM5TSg9o867khwMrWY2+cP4rwvBLzt/wnHaYe0edSRMYC6tZmU1BrvhktIUf2gXoU8bHMuyNA7lB7R51ym213
sFcFKowIviT/i0Wscg+4RDubX+4haRsMxZWgN05K5FD3bzqS9VSVCPM4TpWs2C43ihFdgaSByeKHu3Xf/2TG8tgpB7PAtOs7jixWYw+Ayo5GjUTSybX/1KW5
2RxYfB8nBNLJtHgt4DPq6BZWBFpjyZX/1KW5Ca0evOwG1EX/A9j5fQm5hOz6W2CtcCaWTXTFAeZO71VIgCTX69y9TiaXag3Os2ES1DcLKw0/xR5HfnCqkpQF
0Z1kxKNfhZWLycml2keduHMQh3HubB/pbUUoCK5wxetZRZWPJF/bdyE21H2YjMOhP/pkthqKUCOEWVm68+1J5n7ahES5sOhaZPdOC5j4kc91FVIsrF8ofe+A
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
aWtuFpwSSSSHPcIguQA=`,
};
function dataURL(type)
{
const url = dataURLs[type];
if (!url)
console.log(`No base64 url for type ${type}`)
return url;
}
function findDataURL(tagName) {
let element = document.getElementsByTagName(tagName)[0];
if (!element)
element = document.createElement(tagName);
for (let type in dataURLs) {
if (element.canPlayType(`${tagName}/${type}`))
return dataURLs[type];
}
console.log(`No base64 url for type ${type}`)
return '';
}