Changeset 156522 in webkit


Ignore:
Timestamp:
Sep 26, 2013 6:08:17 PM (11 years ago)
Author:
eric.carlson@apple.com
Message:

[MediaStream] make MediaStream testable
https://bugs.webkit.org/show_bug.cgi?id=121967

Reviewed by Dean Jackson.

Source/WebCore:

No new tests, existing tests updated.

  • CMakeLists.txt: Add MockMediaStreamCenter.
  • GNUmakefile.list.am: Ditto.
  • Modules/mediastream/MediaStreamTrack.idl: Add SkipVTableValidation.
  • Modules/mediastream/NavigatorUserMediaError.idl: Add JSGenerateToJSObject.
  • WebCore.exp.in: Export MockMediaStreamCenter::registerMockMediaStreamCenter.
  • WebCore.xcodeproj/project.pbxproj: Add MockMediaStreamCenter.
  • dom/DOMError.h: Make the destructor virtual because it has a derived class.
  • dom/DOMError.idl:
  • platform/mock/MockMediaStreamCenter.cpp: Added.
  • platform/mock/MockMediaStreamCenter.h: Added.
  • testing/Internals.cpp: Register the mock stream center.

Source/WebKit:

  • WebKit.xcodeproj/project.pbxproj: Add WebUserMediaClient.

Source/WebKit/mac:

  • WebCoreSupport/WebUserMediaClient.h: Added.
  • WebCoreSupport/WebUserMediaClient.mm: Added.
  • WebView/WebUIDelegatePrivate.h: Declare decidePolicyForUserMediaRequestFromOrigin:listener:
  • WebView/WebView.mm:

(-[WebView _commonInitializationWithFrameName:groupName:]): Register WebUserMediaClient.
(-[WebView _setUserMediaClient:]): New.
(-[WebView _userMediaClient]): New.

  • WebView/WebViewData.h:
  • WebView/WebViewPrivate.h:

Tools:

  • DumpRenderTree/mac/UIDelegate.mm:

(-[UIDelegate webView:decidePolicyForUserMediaRequestFromOrigin:listener:]): Add a very permissive

user media request policy delegate.

LayoutTests:

  • fast/mediastream/MediaStream-add-remove-tracks-expected.txt:
  • fast/mediastream/MediaStream-add-remove-tracks.html: Make the test results more understandable

to simplify debugging failures.

  • fast/mediastream/MediaStream-onended-expected.txt:
  • fast/mediastream/MediaStream-onended.html: Ditto. Fix a test error: stopping stream A should

not stop stream B even when it was created from stream A.

  • fast/mediastream/MediaStreamConstructor-expected.txt:
  • fast/mediastream/MediaStreamConstructor.html: Make the test results more understandable. Fix a

logic errors: webkitMediaStream is an object, not a function. JSC does not support
object.constructor.name, use object.constructor.toString() instead.

  • fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt:
  • fast/mediastream/MediaStreamTrackEvent-constructor.html: Update now that getUserMedia() works.
  • fast/mediastream/argument-types-expected.txt: Updated with "Failing" results because the correct

behavior is unknown. The spec says "the syntax for getUserMedia() is still under discussion".

Location:
trunk
Files:
4 added
29 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r156519 r156522  
    1 2013-09-26  Alexey Proskuryakov  <ap@apple.com>
    2 
    3         Layout Test http/tests/inspector/network/network-iframe-load-and-delete.html is flaky
    4         https://bugs.webkit.org/show_bug.cgi?id=121998
    5 
    6         * platform/mac/TestExpectations: Marking as such.
    7 
    8 2013-09-25  Oliver Hunt  <oliver@apple.com>
    9 
    10         Implement prefixed-destructuring assignment
    11         https://bugs.webkit.org/show_bug.cgi?id=121930
    12 
    13         Reviewed by Mark Hahnenberg.
    14 
    15         Relanding with fix after rollout
    16 
    17 2013-09-26  Alexey Proskuryakov  <ap@apple.com>
    18 
    19         Flaky Test: transitions/cancel-transition.html
    20         https://bugs.webkit.org/show_bug.cgi?id=114193
    21 
    22         * platform/mac/TestExpectations: Marking as flaky. Dean says that such tests are
    23         currently broken by design.
    24 
    25 2013-09-26  Dean Jackson  <dino@apple.com>
    26 
    27         Expose a setting to disable hardware accelerated animations
    28         https://bugs.webkit.org/show_bug.cgi?id=121978
    29         <rdar://problem/15091284>
    30 
    31         Reviewed by Eric Carlson.
    32 
    33         * animations/resources/animation-test-helpers.js: Add a callback
    34         for when the tests finish. Minor cleanup.
    35         (endTest):
    36         (.else):
    37         (runAnimationTest):
    38         * animations/transform-non-accelerated.html: New test.
    39         * animations/transform-non-accelerated-expected.txt: Result.
    40 
    41 2013-09-26  Commit Queue  <commit-queue@webkit.org>
    42 
    43         Unreviewed, rolling out r156464 and r156480.
    44         http://trac.webkit.org/changeset/156464
    45         http://trac.webkit.org/changeset/156480
    46         https://bugs.webkit.org/show_bug.cgi?id=121981
    47 
    48         Leaking too much and killi
    49 ng buildbot. (Requested by xenon on
    50         #webkit).
    51 
    52         * js/destructuring-assignment-expected.txt: Removed.
    53         * js/destructuring-assignment.html: Removed.
    54         * js/mozilla/strict/13.1-expected.txt:
    55         * js/mozilla/strict/regress-532254-expected.txt:
    56         * js/mozilla/strict/script-tests/13.1.js:
    57         * js/regress/destructuring-arguments-expected.txt: Removed.
    58         * js/regress/destructuring-arguments-length-expected.txt: Removed.
    59         * js/regress/destructuring-arguments-length.html: Removed.
    60         * js/regress/destructuring-arguments.html: Removed.
    61         * js/regress/destructuring-swap-expected.txt: Removed.
    62         * js/regress/destructuring-swap.html: Removed.
    63         * js/regress/script-tests/destructuring-arguments-length.js: Removed.
    64         * js/regress/script-tests/destructuring-arguments.js: Removed.
    65         * js/regress/script-tests/destructuring-swap.js: Removed.
    66         * js/script-tests/destructuring-assignment.js: Removed.
    67         * sputnik/Conformance/13_Function_Definition/S13_A5.html:
     12013-09-26  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream] make MediaStream testable
     4        https://bugs.webkit.org/show_bug.cgi?id=121967
     5
     6        Reviewed by Dean Jackson.
     7
     8        * fast/mediastream/MediaStream-add-remove-tracks-expected.txt:
     9        * fast/mediastream/MediaStream-add-remove-tracks.html: Make the test results more understandable
     10            to simplify debugging failures.
     11        * fast/mediastream/MediaStream-onended-expected.txt:
     12        * fast/mediastream/MediaStream-onended.html: Ditto. Fix a test error: stopping stream A should
     13            not stop stream B even when it was created from stream A.
     14        * fast/mediastream/MediaStreamConstructor-expected.txt:
     15        * fast/mediastream/MediaStreamConstructor.html: Make the test results more understandable. Fix a
     16            logic errors: webkitMediaStream is an object, not a function. JSC does not support
     17            object.constructor.name, use object.constructor.toString() instead.
     18        * fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt:
     19        * fast/mediastream/MediaStreamTrackEvent-constructor.html: Update now that getUserMedia() works.
     20        * fast/mediastream/argument-types-expected.txt: Updated with "Failing" results because the correct
     21            behavior is unknown. The spec says "the syntax for getUserMedia() is still under discussion".
    6822
    69232013-09-26  Alexey Proskuryakov  <ap@apple.com>
  • trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks-expected.txt

    r146046 r156522  
    88PASS stream2.getAudioTracks().length is 1
    99PASS stream2.getVideoTracks().length is 1
     10
     11*** remove an audio track
    1012PASS stream1.getAudioTracks().length is 0
    1113PASS stream1.getTrackById(audioTrack.id) is null
     14
     15*** remove a non-existent (already removed) track (should not throw)
     16
     17*** add the track back to the stream
     18
     19*** remove a video track
    1220PASS stream1.getVideoTracks().length is 0
    1321PASS stream1.getTrackById(videoTrack.id) is null
     22
     23*** remove a non-existent (already removed) track (should not throw)
     24
     25*** add the track back to the stream
     26
     27*** verify added tracks
    1428PASS stream1.getAudioTracks().length is 1
    1529PASS stream1.getVideoTracks().length is 1
     
    1832PASS stream1.getVideoTracks()[0].kind is videoTrack.kind
    1933PASS stream1.getVideoTracks()[0].label is videoTrack.label
     34
     35*** try adding a stream's own tracks again (nothing should happen)
    2036PASS stream1.getAudioTracks().length is 1
    2137PASS stream1.getVideoTracks().length is 1
     38
     39*** add tracks from another stream
     40
     41*** verify added tracks
    2242PASS stream1.getAudioTracks().length is 2
    2343PASS stream1.getVideoTracks().length is 2
     44
     45*** after all tracks have been removed, stream.ended should return true
    2446PASS stream2.ended is true
     47
     48*** it should be impossible to add a track after the stream has been stopped
    2549PASS stream1.addTrack(audioTrack) threw exception Error: InvalidStateError: DOM Exception 11.
    2650PASS stream1.removeTrack(audioTrack) threw exception Error: InvalidStateError: DOM Exception 11.
  • trunk/LayoutTests/fast/mediastream/MediaStream-add-remove-tracks.html

    r155410 r156522  
    6363    stream1.onremovetrack = shouldNotFire;
    6464
    65     // remove a track of each kind
    6665    audioTrack = stream1.getAudioTracks()[0];
    6766    videoTrack = stream1.getVideoTracks()[0];
    6867
     68    debug("<br>*** remove an audio track");
    6969    tryRemoveTrack(stream1, audioTrack);
    70     // verify removed tracks
    7170    shouldBe('stream1.getAudioTracks().length', '0');
    7271    shouldBeNull('stream1.getTrackById(audioTrack.id)');
    73     // remove a non-existent (already removed) track (should not throw)
     72
     73    debug("<br>*** remove a non-existent (already removed) track (should not throw)");
    7474    tryRemoveTrack(stream1, audioTrack);
    75     // (re-)add tracks
     75
     76    debug("<br>*** add the track back to the stream");
    7677    tryAddTrack(stream1, audioTrack);
    7778
     79    debug("<br>*** remove a video track");
    7880    tryRemoveTrack(stream1, videoTrack);
    7981    shouldBe('stream1.getVideoTracks().length', '0');
    8082    shouldBeNull('stream1.getTrackById(videoTrack.id)');
     83
     84    debug("<br>*** remove a non-existent (already removed) track (should not throw)");
    8185    tryRemoveTrack(stream1, videoTrack);
     86
     87    debug("<br>*** add the track back to the stream");
    8288    tryAddTrack(stream1, videoTrack);
    8389
    84     // verify added tracks
     90    debug("<br>*** verify added tracks");
    8591    shouldBe('stream1.getAudioTracks().length', '1');
    8692    shouldBe('stream1.getVideoTracks().length', '1');
    87 
    88     // verify that kind and label is preserved
    8993    shouldBe('stream1.getAudioTracks()[0].kind', 'audioTrack.kind');
    9094    shouldBe('stream1.getAudioTracks()[0].label', 'audioTrack.label');
     
    9296    shouldBe('stream1.getVideoTracks()[0].label', 'videoTrack.label');
    9397
    94     // try adding stream1's own tracks
     98    debug("<br>*** try adding a stream's own tracks again (nothing should happen)");
    9599    tryAddTrack(stream1, stream1.getAudioTracks()[0]);
    96100    tryAddTrack(stream1, stream1.getVideoTracks()[0]);
    97 
    98     // verify that nothing has changed
    99101    shouldBe('stream1.getAudioTracks().length', '1');
    100102    shouldBe('stream1.getVideoTracks().length', '1');
    101103
    102     // add new tracks (from stream2)
     104    debug("<br>*** add tracks from another stream");
    103105    tryAddTrack(stream1, stream2.getAudioTracks()[0]);
    104106    tryAddTrack(stream1, stream2.getVideoTracks()[0]);
    105107
    106     // verify added tracks
     108    debug("<br>*** verify added tracks");
    107109    shouldBe('stream1.getAudioTracks().length', '2');
    108110    shouldBe('stream1.getVideoTracks().length', '2');
    109111
    110     // when all tracks have been removed, stream.ended should return true.
     112    debug("<br>*** after all tracks have been removed, stream.ended should return true");
    111113    tryRemoveTrack(stream2, stream2.getAudioTracks()[0]);
    112114    tryRemoveTrack(stream2, stream2.getVideoTracks()[0]);
     
    115117    stream1.stop();
    116118
     119    debug("<br>*** it should be impossible to add a track after the stream has been stopped");
    117120    shouldThrow('stream1.addTrack(audioTrack)', '"Error: InvalidStateError: DOM Exception 11"');
    118121    shouldThrow('stream1.removeTrack(audioTrack)', '"Error: InvalidStateError: DOM Exception 11"');
  • trunk/LayoutTests/fast/mediastream/MediaStream-onended-expected.txt

    r155573 r156522  
    44
    55
     6
     7PASS gotStream was called.
    68PASS stream.ended is false
     9
    710PASS streamEnded was called.
    811PASS stream.ended is true
     12
     13PASS gotStream2 was called.
    914PASS stream.ended is false
    10 PASS streamEnded was called.
     15
     16PASS streamEnded2 was called.
    1117PASS stream.ended is true
    1218PASS successfullyParsed is true
  • trunk/LayoutTests/fast/mediastream/MediaStream-onended.html

    r155573 r156522  
    2727
    2828function streamEnded2() {
    29     testPassed('streamEnded was called.');
     29    debug("");
     30    testPassed('streamEnded2 was called.');
    3031    shouldBeTrue('stream.ended');
    3132    finishJSTest();
     
    3334
    3435function gotStream2(s) {
     36    debug("");
     37    testPassed('gotStream2 was called.');
    3538    stream = new webkitMediaStream(s);
    3639    shouldBeFalse('stream.ended');
    3740    try {
    3841        stream.onended = streamEnded2;
    39         s.stop();
     42        stream.stop();
    4043    } catch (e) {
    4144        testFailed('MediaStream threw exception :' + e);
     
    4548
    4649function streamEnded() {
     50    debug("");
    4751    testPassed('streamEnded was called.');
    4852    shouldBeTrue('stream.ended');
     
    5256
    5357function gotStream(s) {
     58    debug("");
     59    testPassed('gotStream was called.');
    5460    stream = s;
    5561    shouldBeFalse('stream.ended');
  • trunk/LayoutTests/fast/mediastream/MediaStreamConstructor-expected.txt

    r155199 r156522  
    77PASS localStream.getAudioTracks().length is 1
    88PASS localStream.getVideoTracks().length is 1
    9 PASS typeof webkitMediaStream === 'function' is true
     9PASS typeof webkitMediaStream === 'object' is true
    1010PASS checkIdAttribute(localStream.id) is true
    1111PASS new webkitMediaStream(document) threw exception TypeError: Type error.
     
    1616PASS new webkitMediaStream(null) threw exception TypeError: Type error.
    1717PASS new webkitMediaStream(undefined) threw exception TypeError: Type error.
     18
     19*** testing "new webkitMediaStream()"
    1820PASS Stream constructed
    19 PASS [object MediaStream] is non-null.
    20 PASS [object MediaStream] is defined.
    21 PASS newStream.constructor.name is 'MediaStream'
     21PASS [object webkitMediaStream] is non-null.
     22PASS [object webkitMediaStream] is defined.
     23PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    2224PASS newStream.getAudioTracks().length is nAudio
    2325PASS newStream.getVideoTracks().length is nVideo
    2426PASS checkIdAttribute(newStream.id) is true
     27
     28*** testing "new webkitMediaStream([])"
    2529PASS Stream constructed
    26 PASS [object MediaStream] is non-null.
    27 PASS [object MediaStream] is defined.
    28 PASS newStream.constructor.name is 'MediaStream'
     30PASS [object webkitMediaStream] is non-null.
     31PASS [object webkitMediaStream] is defined.
     32PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    2933PASS newStream.getAudioTracks().length is nAudio
    3034PASS newStream.getVideoTracks().length is nVideo
    3135PASS checkIdAttribute(newStream.id) is true
     36
     37*** testing "new webkitMediaStream(stream)"
    3238PASS Stream constructed
    33 PASS [object MediaStream] is non-null.
    34 PASS [object MediaStream] is defined.
    35 PASS newStream.constructor.name is 'MediaStream'
     39PASS [object webkitMediaStream] is non-null.
     40PASS [object webkitMediaStream] is defined.
     41PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    3642PASS newStream.getAudioTracks().length is nAudio
    3743PASS newStream.getVideoTracks().length is nVideo
    3844PASS checkIdAttribute(newStream.id) is true
     45
     46*** testing "new webkitMediaStream([stream.getAudioTracks()[0]])"
    3947PASS Stream constructed
    40 PASS [object MediaStream] is non-null.
    41 PASS [object MediaStream] is defined.
    42 PASS newStream.constructor.name is 'MediaStream'
     48PASS [object webkitMediaStream] is non-null.
     49PASS [object webkitMediaStream] is defined.
     50PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    4351PASS newStream.getAudioTracks().length is nAudio
    4452PASS newStream.getVideoTracks().length is nVideo
    4553PASS checkIdAttribute(newStream.id) is true
     54
     55*** testing "new webkitMediaStream([stream.getVideoTracks()[0]])"
    4656PASS Stream constructed
    47 PASS [object MediaStream] is non-null.
    48 PASS [object MediaStream] is defined.
    49 PASS newStream.constructor.name is 'MediaStream'
     57PASS [object webkitMediaStream] is non-null.
     58PASS [object webkitMediaStream] is defined.
     59PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    5060PASS newStream.getAudioTracks().length is nAudio
    5161PASS newStream.getVideoTracks().length is nVideo
    5262PASS checkIdAttribute(newStream.id) is true
     63
     64*** testing "new webkitMediaStream([stream.getAudioTracks()[0], stream.getVideoTracks()[0]])"
    5365PASS Stream constructed
    54 PASS [object MediaStream] is non-null.
    55 PASS [object MediaStream] is defined.
    56 PASS newStream.constructor.name is 'MediaStream'
     66PASS [object webkitMediaStream] is non-null.
     67PASS [object webkitMediaStream] is defined.
     68PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    5769PASS newStream.getAudioTracks().length is nAudio
    5870PASS newStream.getVideoTracks().length is nVideo
    5971PASS checkIdAttribute(newStream.id) is true
     72
     73*** testing "new webkitMediaStream([stream.getVideoTracks()[0], stream.getAudioTracks()[0], stream.getVideoTracks()[0]])"
    6074PASS Stream constructed
    61 PASS [object MediaStream] is non-null.
    62 PASS [object MediaStream] is defined.
    63 PASS newStream.constructor.name is 'MediaStream'
     75PASS [object webkitMediaStream] is non-null.
     76PASS [object webkitMediaStream] is defined.
     77PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    6478PASS newStream.getAudioTracks().length is nAudio
    6579PASS newStream.getVideoTracks().length is nVideo
    6680PASS checkIdAttribute(newStream.id) is true
     81
     82Creating a new stream from a stream that has stopped
     83
     84*** testing "new webkitMediaStream([stream.getAudioTracks()[0]])"
    6785PASS Stream constructed
    68 PASS [object MediaStream] is non-null.
    69 PASS [object MediaStream] is defined.
    70 PASS newStream.constructor.name is 'MediaStream'
     86PASS [object webkitMediaStream] is non-null.
     87PASS [object webkitMediaStream] is defined.
     88PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    7189PASS newStream.getAudioTracks().length is nAudio
    7290PASS newStream.getVideoTracks().length is nVideo
    7391PASS checkIdAttribute(newStream.id) is true
     92
     93*** testing "new webkitMediaStream([stream.getVideoTracks()[0]])"
    7494PASS Stream constructed
    75 PASS [object MediaStream] is non-null.
    76 PASS [object MediaStream] is defined.
    77 PASS newStream.constructor.name is 'MediaStream'
     95PASS [object webkitMediaStream] is non-null.
     96PASS [object webkitMediaStream] is defined.
     97PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    7898PASS newStream.getAudioTracks().length is nAudio
    7999PASS newStream.getVideoTracks().length is nVideo
    80100PASS checkIdAttribute(newStream.id) is true
     101
     102*** testing "new webkitMediaStream([stream.getAudioTracks()[0], stream.getVideoTracks()[0]])"
    81103PASS Stream constructed
    82 PASS [object MediaStream] is non-null.
    83 PASS [object MediaStream] is defined.
    84 PASS newStream.constructor.name is 'MediaStream'
     104PASS [object webkitMediaStream] is non-null.
     105PASS [object webkitMediaStream] is defined.
     106PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    85107PASS newStream.getAudioTracks().length is nAudio
    86108PASS newStream.getVideoTracks().length is nVideo
    87109PASS checkIdAttribute(newStream.id) is true
     110
     111*** testing "new webkitMediaStream(stream)"
    88112PASS Stream constructed
    89 PASS [object MediaStream] is non-null.
    90 PASS [object MediaStream] is defined.
    91 PASS newStream.constructor.name is 'MediaStream'
     113PASS [object webkitMediaStream] is non-null.
     114PASS [object webkitMediaStream] is defined.
     115PASS newStream.constructor.toString() is '[object webkitMediaStreamConstructor]'
    92116PASS newStream.getAudioTracks().length is nAudio
    93117PASS newStream.getVideoTracks().length is nVideo
  • trunk/LayoutTests/fast/mediastream/MediaStreamConstructor.html

    r155410 r156522  
    6161    shouldBe('localStream.getVideoTracks().length', '1');
    6262
    63     shouldBeTrue("typeof webkitMediaStream === 'function'");
     63    shouldBeTrue("typeof webkitMediaStream === 'object'");
    6464    shouldBeTrue('checkIdAttribute(localStream.id)');
    6565    testConstructor(localStream);
     
    7676    shouldThrow('new webkitMediaStream(undefined)');
    7777
    78     verifyStream(new webkitMediaStream(), 0, 0);
    79     verifyStream(new webkitMediaStream([]), 0, 0);
     78    verifyStream("new webkitMediaStream()", 0, 0);
     79    verifyStream("new webkitMediaStream([])", 0, 0);
    8080
    81     verifyStream(new webkitMediaStream(s), s.getAudioTracks().length, s.getVideoTracks().length);
     81    verifyStream("new webkitMediaStream(stream)", s.getAudioTracks().length, s.getVideoTracks().length);
    8282
    83     verifyStream(new webkitMediaStream([s.getAudioTracks()[0]]), 1, 0);
    84     verifyStream(new webkitMediaStream([s.getVideoTracks()[0]]), 0, 1);
    85     verifyStream(new webkitMediaStream([s.getAudioTracks()[0], s.getVideoTracks()[0]]), 1, 1);
    86     verifyStream(new webkitMediaStream([s.getVideoTracks()[0], s.getAudioTracks()[0], s.getVideoTracks()[0]]), 1, 1);
     83    verifyStream("new webkitMediaStream([stream.getAudioTracks()[0]])", 1, 0);
     84    verifyStream("new webkitMediaStream([stream.getVideoTracks()[0]])", 0, 1);
     85    verifyStream("new webkitMediaStream([stream.getAudioTracks()[0], stream.getVideoTracks()[0]])", 1, 1);
     86    verifyStream("new webkitMediaStream([stream.getVideoTracks()[0], stream.getAudioTracks()[0], stream.getVideoTracks()[0]])", 1, 1);
    8787
    88     s.onended = function () {
    89         verifyStream(new webkitMediaStream([s.getAudioTracks()[0]]), 0, 0);
    90         verifyStream(new webkitMediaStream([s.getVideoTracks()[0]]), 0, 0);
    91         verifyStream(new webkitMediaStream([s.getAudioTracks()[0], s.getVideoTracks()[0]]), 0, 0);
    92         verifyStream(new webkitMediaStream(s), 0, 0);
     88    stream.onended = function () {
     89        debug("<br>Creating a new stream from a stream that has stopped");
     90        verifyStream("new webkitMediaStream([stream.getAudioTracks()[0]])", 0, 0);
     91        verifyStream("new webkitMediaStream([stream.getVideoTracks()[0]])", 0, 0);
     92        verifyStream("new webkitMediaStream([stream.getAudioTracks()[0], stream.getVideoTracks()[0]])", 0, 0);
     93        verifyStream("new webkitMediaStream(stream)", 0, 0);
    9394
    9495        finishJSTest();
     
    9899}
    99100
    100 function verifyStream(s, numAudioTracks, numVideoTracks) {
    101     newStream = s;
     101function verifyStream(script, numAudioTracks, numVideoTracks) {
     102    debug("<br>*** testing \"" + script + "\"");
     103    newStream = eval(script);
    102104    nAudio = numAudioTracks;
    103105    nVideo = numVideoTracks;
     
    106108    shouldBeNonNull(newStream);
    107109    shouldBeDefined(newStream);
    108     shouldBe("newStream.constructor.name", "'MediaStream'");
     110    shouldBe("newStream.constructor.toString()", "'[object webkitMediaStreamConstructor]'");
    109111    shouldBe('newStream.getAudioTracks().length', 'nAudio');
    110112    shouldBe('newStream.getVideoTracks().length', 'nVideo');
  • trunk/LayoutTests/fast/mediastream/MediaStreamTrackEvent-constructor-expected.txt

    r156135 r156522  
    44
    55
     6PASS getUserMedia({audio:true, video:true}, gotStream) did not throw exception.
     7
     8*** getUserMedia() succeeded, test stream ***
     9PASS mediaStream is non-null.
     10PASS mediaStream.getVideoTracks()[0] is non-null.
    611
    712*** No initializer passed ***
     
    3136
    3237*** Initialize 'track' with valid track object ***
    33 FAIL new MediaStreamTrackEvent('MediaStreamTrackEvent', { track: mediaStreamTrack }).track should be non-null. Was null
     38PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { track: mediaStreamTrack }).track is non-null.
    3439PASS new MediaStreamTrackEvent('MediaStreamTrackEvent', { track: mediaStreamTrack }).track is mediaStreamTrack
    3540
  • trunk/LayoutTests/fast/mediastream/MediaStreamTrackEvent-constructor.html

    r156135 r156522  
    1313
    1414            description("This tests the constructor for the MediaStreamTrackEvent DOM class.");
     15
     16            function endTest()
     17            {
     18                clearTimeout(timer);
     19                finishJSTest();
     20            }
     21
     22            function error()
     23            {
     24                testFailed('Stream generation failed.');
     25                endTest();
     26            }
     27
     28            function getUserMedia(constraints, callback)
     29            {
     30                try {
     31                    navigator.webkitGetUserMedia(constraints, callback, error);
     32                } catch (e) {
     33                    testFailed('webkitGetUserMedia threw exception :' + e);
     34                    endTest();
     35                }
     36            }
    1537
    1638            function testMediaStreamTrackEvent()
     
    4769
    4870                debug("");
    49                 finishJSTest();
     71                endTest();
    5072            }
    5173
     
    5375            {
    5476                clearTimeout(timer);
    55                 testPassed('getUserMedia succeeded.');
    5677
     78                debug("<br>*** getUserMedia() succeeded, test stream ***");
    5779                mediaStream = stream;
    5880                shouldBeNonNull("mediaStream");
     
    6587            {
    6688                clearTimeout(timer);
    67                 timer = setTimeout(function() { testFailed(msg); finishJSTest() }, 4000);
     89                timer = setTimeout(function() { testFailed(msg); endTest() }, 4000);
    6890            }
    6991
    7092            function test()
    7193            {
    72             /*
    73                 @@@@@ NOTE: we can't get a MediaStreamTrack until we have a functional mock getUserMedia, so just test what we can for now @@@@@
    7494                primeTimeout("Timeout waiting for getUserMedia()");
    7595                shouldNotThrow('getUserMedia({audio:true, video:true}, gotStream)');
    76             */
    77 
    78                 testMediaStreamTrackEvent();
    7996            }
    8097
  • trunk/LayoutTests/fast/mediastream/argument-types-expected.txt

    r134792 r156522  
    1818PASS navigator.webkitGetUserMedia(null, emptyFunction) threw exception Error: NotSupportedError: DOM Exception 9.
    1919PASS navigator.webkitGetUserMedia({ }, emptyFunction) threw exception Error: NotSupportedError: DOM Exception 9.
    20 PASS navigator.webkitGetUserMedia(true, emptyFunction) threw exception TypeError: Not an object..
    21 PASS navigator.webkitGetUserMedia(42, emptyFunction) threw exception TypeError: Not an object..
    22 PASS navigator.webkitGetUserMedia(Infinity, emptyFunction) threw exception TypeError: Not an object..
    23 PASS navigator.webkitGetUserMedia(-Infinity, emptyFunction) threw exception TypeError: Not an object..
     20FAIL navigator.webkitGetUserMedia(true, emptyFunction) should throw TypeError: Not an object.. Threw exception Error: NotSupportedError: DOM Exception 9.
     21FAIL navigator.webkitGetUserMedia(42, emptyFunction) should throw TypeError: Not an object.. Threw exception Error: NotSupportedError: DOM Exception 9.
     22FAIL navigator.webkitGetUserMedia(Infinity, emptyFunction) should throw TypeError: Not an object.. Threw exception Error: NotSupportedError: DOM Exception 9.
     23FAIL navigator.webkitGetUserMedia(-Infinity, emptyFunction) should throw TypeError: Not an object.. Threw exception Error: NotSupportedError: DOM Exception 9.
    2424PASS navigator.webkitGetUserMedia(emptyFunction, emptyFunction) threw exception Error: NotSupportedError: DOM Exception 9.
    2525PASS navigator.webkitGetUserMedia({video: true}, "foobar") threw exception TypeError: Type error.
  • trunk/Source/WebCore/CMakeLists.txt

    r156488 r156522  
    20392039    platform/mock/DeviceOrientationClientMock.cpp
    20402040    platform/mock/GeolocationClientMock.cpp
     2041    platform/mock/MockMediaStreamCenter.cpp
    20412042    platform/mock/ScrollbarThemeMock.cpp
    20422043
  • trunk/Source/WebCore/ChangeLog

    r156515 r156522  
     12013-09-26  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream] make MediaStream testable
     4        https://bugs.webkit.org/show_bug.cgi?id=121967
     5
     6        Reviewed by Dean Jackson.
     7
     8        No new tests, existing tests updated.
     9
     10        * CMakeLists.txt: Add MockMediaStreamCenter.
     11        * GNUmakefile.list.am: Ditto.
     12
     13        * Modules/mediastream/MediaStreamTrack.idl: Add SkipVTableValidation.
     14        * Modules/mediastream/NavigatorUserMediaError.idl: Add JSGenerateToJSObject.
     15        * WebCore.exp.in: Export MockMediaStreamCenter::registerMockMediaStreamCenter.
     16
     17        * WebCore.xcodeproj/project.pbxproj: Add MockMediaStreamCenter.
     18        * dom/DOMError.h: Make the destructor virtual because it has a derived class.
     19        * dom/DOMError.idl:
     20
     21        * platform/mock/MockMediaStreamCenter.cpp: Added.
     22        * platform/mock/MockMediaStreamCenter.h: Added.
     23
     24        * testing/Internals.cpp: Register the mock stream center.
     25
    1262013-09-26  Benjamin Poulain  <benjamin@webkit.org>
    227
  • trunk/Source/WebCore/GNUmakefile.list.am

    r156488 r156522  
    54955495        Source/WebCore/platform/mock/GeolocationClientMock.cpp \
    54965496        Source/WebCore/platform/mock/GeolocationClientMock.h \
     5497        Source/WebCore/platform/mock/MockMediaStreamCenter.cpp \
     5498        Source/WebCore/platform/mock/MockMediaStreamCenter.h \
    54975499        Source/WebCore/platform/mock/ScrollbarThemeMock.cpp \
    54985500        Source/WebCore/platform/mock/ScrollbarThemeMock.h \
  • trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl

    r156135 r156522  
    2626    Conditional=MEDIA_STREAM,
    2727    EventTarget,
    28     ActiveDOMObject
     28    ActiveDOMObject,
     29    SkipVTableValidation
    2930] interface MediaStreamTrack {
    3031    readonly attribute DOMString kind;
  • trunk/Source/WebCore/Modules/mediastream/NavigatorUserMediaError.idl

    r156108 r156522  
    11/*
    22 * Copyright (C) 2011 Google Inc. All rights reserved.
     3 * Copyright (C) 2013 Apple Inc. All rights reserved.
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    2526[
    2627    NoInterfaceObject,
    27     Conditional=MEDIA_STREAM
     28    Conditional=MEDIA_STREAM,
     29    JSGenerateToJSObject,
    2830] interface NavigatorUserMediaError : DOMError {
    2931    readonly attribute DOMString constraintName;
  • trunk/Source/WebCore/WebCore.exp.in

    r156506 r156522  
    28072807__ZN7WebCore18provideUserMediaToEPNS_4PageEPNS_15UserMediaClientE
    28082808__ZNK7WebCore16UserMediaRequest14securityOriginEv
    2809 #endif
     2809__ZN7WebCore21MockMediaStreamCenter29registerMockMediaStreamCenterEv
     2810#endif
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r156488 r156522  
    275275                07C59B5F17F4B208000FBCBB /* JSVideoStreamTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B5B17F4B208000FBCBB /* JSVideoStreamTrack.cpp */; };
    276276                07C59B6017F4B208000FBCBB /* JSVideoStreamTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B5C17F4B208000FBCBB /* JSVideoStreamTrack.h */; };
     277                07C59B6317F4D1BF000FBCBB /* MockMediaStreamCenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C59B6117F4CF87000FBCBB /* MockMediaStreamCenter.cpp */; };
     278                07C59B6417F4D1C4000FBCBB /* MockMediaStreamCenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C59B6217F4CF87000FBCBB /* MockMediaStreamCenter.h */; };
    277279                07CE77D516712A6A00C55A47 /* InbandTextTrackPrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
    278280                07DC5FD417D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */; };
     
    66866688                07C59B5B17F4B208000FBCBB /* JSVideoStreamTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JSVideoStreamTrack.cpp; path = JSVideoStreamTrack.cpp; sourceTree = "<group>"; };
    66876689                07C59B5C17F4B208000FBCBB /* JSVideoStreamTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSVideoStreamTrack.h; path = JSVideoStreamTrack.h; sourceTree = "<group>"; };
     6690                07C59B6117F4CF87000FBCBB /* MockMediaStreamCenter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MockMediaStreamCenter.cpp; path = mock/MockMediaStreamCenter.cpp; sourceTree = "<group>"; };
     6691                07C59B6217F4CF87000FBCBB /* MockMediaStreamCenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MockMediaStreamCenter.h; path = mock/MockMediaStreamCenter.h; sourceTree = "<group>"; };
    66886692                07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivateClient.h; sourceTree = "<group>"; };
    66896693                07DC5FD317D3EEE90099F890 /* JSRTCStatsResponseCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSRTCStatsResponseCustom.cpp; sourceTree = "<group>"; };
     
    1489814902                        isa = PBXGroup;
    1489914903                        children = (
     14904                                07C59B6117F4CF87000FBCBB /* MockMediaStreamCenter.cpp */,
     14905                                07C59B6217F4CF87000FBCBB /* MockMediaStreamCenter.h */,
    1490014906                                59309A1011F4AE5800250603 /* DeviceOrientationClientMock.cpp */,
    1490114907                                59309A1211F4AE6A00250603 /* DeviceOrientationClientMock.h */,
     
    2191921925                                1C4C8F020AD85D87009475CE /* DeleteButtonController.h in Headers */,
    2192021926                                93309DDF099E64920056E581 /* DeleteFromTextNodeCommand.h in Headers */,
     21927                                07C59B6417F4D1C4000FBCBB /* MockMediaStreamCenter.h in Headers */,
    2192121928                                93309DE1099E64920056E581 /* DeleteSelectionCommand.h in Headers */,
    2192221929                                FD1660A513787C6D001FFA7B /* DenormalDisabler.h in Headers */,
     
    2613726144                                FDA15ED112B03F94003A583A /* JSDelayNode.cpp in Sources */,
    2613826145                                31FB1A65120A5D3F00DC02A0 /* JSDeviceMotionEvent.cpp in Sources */,
     26146                                07C59B6317F4D1BF000FBCBB /* MockMediaStreamCenter.cpp in Sources */,
    2613926147                                31FB1A6C120A5D6900DC02A0 /* JSDeviceMotionEventCustom.cpp in Sources */,
    2614026148                                59A86006119DAF7F00DEF1EF /* JSDeviceOrientationEvent.cpp in Sources */,
  • trunk/Source/WebCore/dom/DOMError.h

    r156108 r156522  
    3939        return adoptRef(new DOMError(name));
    4040    }
     41    virtual ~DOMError() { }
    4142
    4243    const String& name() const { return m_name; }
  • trunk/Source/WebCore/dom/DOMError.idl

    r149796 r156522  
    2828[
    2929    NoInterfaceObject,
    30     ImplementationLacksVTable
     30    SkipVTableValidation
    3131] interface  DOMError {
    3232    readonly attribute DOMString name;
    33   };
     33};
    3434
  • trunk/Source/WebCore/testing/Internals.cpp

    r156422 r156522  
    153153#endif
    154154
     155#if ENABLE(MEDIA_STREAM)
     156#include "MockMediaStreamCenter.h"
     157#endif
     158
    155159namespace WebCore {
    156160
     
    289293    if (document && document->page())
    290294        document->page()->group().captionPreferences()->setTestingMode(true);
     295#endif
     296   
     297#if ENABLE(MEDIA_STREAM)
     298    MockMediaStreamCenter::registerMockMediaStreamCenter();
    291299#endif
    292300}
  • trunk/Source/WebKit/ChangeLog

    r156517 r156522  
     12013-09-26  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream] make MediaStream testable
     4        https://bugs.webkit.org/show_bug.cgi?id=121967
     5
     6        Reviewed by Dean Jackson.
     7
     8        * WebKit.xcodeproj/project.pbxproj: Add WebUserMediaClient.
     9
    1102013-09-26  Brent Fulgham  <bfulgham@apple.com>
    211
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r152571 r156522  
    1212                06693DDC0BFBA85200216072 /* WebInspectorClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 06693DDA0BFBA85200216072 /* WebInspectorClient.h */; };
    1313                06693DDD0BFBA85200216072 /* WebInspectorClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 06693DDB0BFBA85200216072 /* WebInspectorClient.mm */; };
     14                070F549B17F1E42B00169E04 /* WebUserMediaClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 070F549917F1E42B00169E04 /* WebUserMediaClient.h */; };
     15                070F549C17F1E42B00169E04 /* WebUserMediaClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 070F549A17F1E42B00169E04 /* WebUserMediaClient.mm */; };
    1416                0AB752370FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AB752350FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.h */; };
    1517                0AB752380FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0AB752360FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.mm */; };
     
    387389                06693DDA0BFBA85200216072 /* WebInspectorClient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebInspectorClient.h; sourceTree = "<group>"; };
    388390                06693DDB0BFBA85200216072 /* WebInspectorClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebInspectorClient.mm; sourceTree = "<group>"; };
     391                070F549917F1E42B00169E04 /* WebUserMediaClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebUserMediaClient.h; sourceTree = "<group>"; };
     392                070F549A17F1E42B00169E04 /* WebUserMediaClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebUserMediaClient.mm; sourceTree = "<group>"; };
    389393                0AB752350FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebNetscapeContainerCheckContextInfo.h; sourceTree = "<group>"; };
    390394                0AB752360FA2E4DB00D7CBB1 /* WebNetscapeContainerCheckContextInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebNetscapeContainerCheckContextInfo.mm; sourceTree = "<group>"; };
     
    12751279                        isa = PBXGroup;
    12761280                        children = (
     1281                                070F549917F1E42B00169E04 /* WebUserMediaClient.h */,
     1282                                070F549A17F1E42B00169E04 /* WebUserMediaClient.mm */,
    12771283                                B82958D1132707D0000D0E79 /* CorrectionPanel.h */,
    12781284                                B82958D2132707D0000D0E79 /* CorrectionPanel.mm */,
     
    14271433                                1A60519417502A5D00BC62F5 /* HistoryPropertyList.h in Headers */,
    14281434                                939810680824BF01008DF038 /* HIViewAdapter.h in Headers */,
     1435                                070F549B17F1E42B00169E04 /* WebUserMediaClient.h in Headers */,
    14291436                                939810690824BF01008DF038 /* HIWebView.h in Headers */,
    14301437                                1A8DED500EE88B8A00F25022 /* HostedNetscapePluginStream.h in Headers */,
     
    18801887                                7C01CB86173435C900C5D807 /* PopupMenuMac.mm in Sources */,
    18811888                                1A2DBEA00F251E3A0036F8A6 /* ProxyInstance.mm in Sources */,
     1889                                070F549C17F1E42B00169E04 /* WebUserMediaClient.mm in Sources */,
    18821890                                E169836C11346D5600894115 /* ProxyRuntimeObject.mm in Sources */,
    18831891                                7C01CB88173435C900C5D807 /* SearchPopupMenuMac.mm in Sources */,
  • trunk/Source/WebKit/mac/ChangeLog

    r156485 r156522  
     12013-09-26  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream] make MediaStream testable
     4        https://bugs.webkit.org/show_bug.cgi?id=121967
     5
     6        Reviewed by Dean Jackson.
     7
     8        * WebCoreSupport/WebUserMediaClient.h: Added.
     9        * WebCoreSupport/WebUserMediaClient.mm: Added.
     10
     11        * WebView/WebUIDelegatePrivate.h: Declare decidePolicyForUserMediaRequestFromOrigin:listener:
     12
     13        * WebView/WebView.mm:
     14        (-[WebView _commonInitializationWithFrameName:groupName:]): Register WebUserMediaClient.
     15        (-[WebView _setUserMediaClient:]): New.
     16        (-[WebView _userMediaClient]): New.
     17        * WebView/WebViewData.h:
     18        * WebView/WebViewPrivate.h:
     19
    1202013-09-25  Sam Weinig  <sam@webkit.org>
    221
  • trunk/Source/WebKit/mac/WebView/WebUIDelegatePrivate.h

    r144949 r156522  
    227227- (void)webView:(WebView *)webView decidePolicyForNotificationRequestFromOrigin:(WebSecurityOrigin *)origin listener:(id<WebAllowDenyPolicyListener>)listener;
    228228
     229- (void)webView:(WebView *)webView decidePolicyForUserMediaRequestFromOrigin:(WebSecurityOrigin *)origin listener:(id<WebAllowDenyPolicyListener>)listener;
     230
    229231- (void)webView:(WebView *)sender elementDidFocusNode:(DOMNode *)node;
    230232- (void)webView:(WebView *)sender elementDidBlurNode:(DOMNode *)node;
  • trunk/Source/WebKit/mac/WebView/WebView.mm

    r156424 r156522  
    109109#import "WebUIDelegate.h"
    110110#import "WebUIDelegatePrivate.h"
     111#import "WebUserMediaClient.h"
    111112#import <CoreFoundation/CFSet.h>
    112113#import <Foundation/NSURLConnection.h>
     
    767768    WebCore::provideDeviceOrientationTo(_private->page, new WebDeviceOrientationClient(self));
    768769#endif
     770#if ENABLE(MEDIA_STREAM)
     771    WebCore::provideUserMediaTo(_private->page, new WebUserMediaClient(self));
     772#endif
    769773
    770774    _private->page->setCanStartMedia([self window]);
     
    66566660@end
    66576661
     6662#if ENABLE(MEDIA_STREAM)
     6663@implementation WebView (WebViewUserMedia)
     6664
     6665- (void)_setUserMediaClient:(id<WebUserMediaClient>)userMediaClient
     6666{
     6667    if (_private)
     6668        _private->m_userMediaClient = userMediaClient;
     6669}
     6670
     6671- (id<WebUserMediaClient>)_userMediaClient
     6672{
     6673    if (_private)
     6674        return _private->m_userMediaClient;
     6675    return nil;
     6676}
     6677@end
     6678#endif
     6679
    66586680@implementation WebView (WebViewGeolocation)
    66596681
  • trunk/Source/WebKit/mac/WebView/WebViewData.h

    r152733 r156522  
    6060@class WebFullScreenController;
    6161#endif
     62#if ENABLE(MEDIA_STREAM)
     63@protocol WebUserMediaClient;
     64#endif
    6265
    6366extern BOOL applicationIsTerminating;
     
    209212    id<WebNotificationProvider> _notificationProvider;
    210213
     214#if ENABLE(MEDIA_STREAM)
     215    id<WebUserMediaClient> m_userMediaClient;
     216#endif
     217
    211218    RefPtr<WebCore::HistoryItem> _globalHistoryItem;
    212219
  • trunk/Source/WebKit/mac/WebView/WebViewPrivate.h

    r155726 r156522  
    4848@protocol WebDeviceOrientationProvider;
    4949@protocol WebFormDelegate;
     50@protocol WebUserMediaClient;
    5051
    5152extern NSString *_WebCanGoBackKey;
     
    717718@end
    718719
     720@interface WebView (WebViewUserMedia)
     721- (void)_setUserMediaClient:(id<WebUserMediaClient>)userMediaClient;
     722- (id<WebUserMediaClient>)_userMediaClient;
     723@end
     724
    719725@protocol WebGeolocationProvider <NSObject>
    720726- (void)registerWebView:(WebView *)webView;
  • trunk/Tools/ChangeLog

    r156493 r156522  
     12013-09-26  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [MediaStream] make MediaStream testable
     4        https://bugs.webkit.org/show_bug.cgi?id=121967
     5
     6        Reviewed by Dean Jackson.
     7
     8        * DumpRenderTree/mac/UIDelegate.mm:
     9        (-[UIDelegate webView:decidePolicyForUserMediaRequestFromOrigin:listener:]): Add a very permissive
     10            user media request policy delegate.
     11
    1122013-09-26  Brian J. Burg  <burg@cs.washington.edu>
    213
  • trunk/Tools/DumpRenderTree/mac/UIDelegate.mm

    r154027 r156522  
    313313}
    314314
     315- (void)webView:(WebView *)webView decidePolicyForUserMediaRequestFromOrigin:(WebSecurityOrigin *)origin listener:(id<WebAllowDenyPolicyListener>)listener
     316{
     317    // Allow all user media requests for now.
     318    [listener allow];
     319}
     320
    315321- (void)dealloc
    316322{
Note: See TracChangeset for help on using the changeset viewer.