WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
68464
Update MediaStream to use WebCore platform interfaces
https://bugs.webkit.org/show_bug.cgi?id=68464
Summary
Update MediaStream to use WebCore platform interfaces
Adam Bergkvist
Reported
2011-09-20 13:18:39 PDT
Modify MediaStream/MediaStreamTrack to use MediaStreamManager and store its data in MediaStreamDescriptor.
Attachments
proposed patch
(52.98 KB, patch)
2011-10-11 16:46 PDT
,
Adam Bergkvist
no flags
Details
Formatted Diff
Diff
Updated patch
(53.20 KB, patch)
2011-10-13 10:31 PDT
,
Adam Bergkvist
abarth
: review+
abarth
: commit-queue-
Details
Formatted Diff
Diff
Patch 3
(53.42 KB, patch)
2011-10-17 07:37 PDT
,
Adam Bergkvist
abarth
: review+
webkit.review.bot
: commit-queue-
Details
Formatted Diff
Diff
Patch for landing
(53.39 KB, patch)
2011-10-19 07:40 PDT
,
Adam Bergkvist
no flags
Details
Formatted Diff
Diff
Show Obsolete
(3)
View All
Add attachment
proposed patch, testcase, etc.
Adam Bergkvist
Comment 1
2011-10-11 16:46:12 PDT
Created
attachment 110604
[details]
proposed patch
Adam Barth
Comment 2
2011-10-12 10:23:24 PDT
Comment on
attachment 110604
[details]
proposed patch View in context:
https://bugs.webkit.org/attachment.cgi?id=110604&action=review
This looks pretty good. There's still the question of whether |context| should be first in constructors. Also, almost all the places in this patch where we're using unsigned, we probably should be using size_t.
> Source/WebCore/dom/MediaStream.cpp:48 > + MediaStreamTrackVector trackVector; > + unsigned numberOfTracks = m_descriptor->numberOfComponents();
You can call reserveCapacity on the vector if you know ahead of time how many items you're going to append.
> Source/WebCore/dom/MediaStreamTrack.cpp:50 > + DEFINE_STATIC_LOCAL(AtomicString, kind, (m_streamDescriptor->component(m_trackIndex)->source()->type() == MediaStreamSource::TypeAudio ? "audio" : "video"));
It's strange to use a static local that's based on member variables... This doesn't seem right.
WebKit Review Bot
Comment 3
2011-10-12 16:00:51 PDT
Please wait for approval from
fishd@chromium.org
before submitting because this patch contains changes to the Chromium public API.
Adam Barth
Comment 4
2011-10-12 16:01:43 PDT
@fishd: This just deletes interfaces from the WebKit API. The plan is to add new interfaces to WebKitPlatformSupport later.
Adam Bergkvist
Comment 5
2011-10-13 10:31:23 PDT
Created
attachment 110871
[details]
Updated patch (In reply to
comment #2
)
> (From update of
attachment 110604
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=110604&action=review
> > This looks pretty good. There's still the question of whether |context| should be first in constructors.
I've updated the patch to follow the new context first convention.
> Also, almost all the places in this patch where we're using unsigned, we probably should be using size_t.
Fixed "internal" usage (left unsigned in the DOM API signatures).
> > Source/WebCore/dom/MediaStream.cpp:48 > > + MediaStreamTrackVector trackVector; > > + unsigned numberOfTracks = m_descriptor->numberOfComponents(); > > You can call reserveCapacity on the vector if you know ahead of time how many items you're going to append.
Good point. Fixed.
> > Source/WebCore/dom/MediaStreamTrack.cpp:50 > > + DEFINE_STATIC_LOCAL(AtomicString, kind, (m_streamDescriptor->component(m_trackIndex)->source()->type() == MediaStreamSource::TypeAudio ? "audio" : "video")); > > It's strange to use a static local that's based on member variables... This doesn't seem right.
True. That was a bad last minute optimization. :) Fixed.
Adam Barth
Comment 6
2011-10-13 12:06:43 PDT
Comment on
attachment 110871
[details]
Updated patch View in context:
https://bugs.webkit.org/attachment.cgi?id=110871&action=review
In one of your earlier patches, you moved all the non-platform files into a mediastream directory. I think that would be a valuable change to do sooner rather than later. Please fix the out-of-bounds read before landing.
> Source/WebCore/ChangeLog:8 > + Update MediaStream to use WebCore platform interfaces > +
https://bugs.webkit.org/show_bug.cgi?id=68464
> + > + Reviewed by NOBODY (OOPS!). > + > + Currently not testable.
Generally we like a litt more information in ChangeLogs. For this change, I'd explain that this is part of a series of patches that convert the DOM interfaces over to using a new Platform API. Also, I'd include some information about how you plan to test this code and at what stage of this process we'll be able to add tests. I understand that there are a lots of wires to connect before everything is fully functional, but we might be able to add some basic API tests soon.
> Source/WebCore/dom/MediaStream.h:84 > + ScriptExecutionContext* m_scriptExecutionContext;
This doesn't need to be a RefPtr?
> Source/WebCore/dom/MediaStreamTrack.cpp:51 > -const String& MediaStreamTrack::kind() const > +String MediaStreamTrack::kind() const > { > - return m_kind; > + DEFINE_STATIC_LOCAL(AtomicString, audioKind, ("audio")); > + DEFINE_STATIC_LOCAL(AtomicString, videoKind, ("video"));
Should this function return an AtomicString? If not, then should these statics be Strings rather than AtomicStrings? (Let me know if you're unsure of the difference between Strings and AtomicStrings.)
> Source/WebCore/dom/MediaStreamTrack.cpp:61 > + ASSERT_NOT_REACHED(); > }
I'm surprised you don't need to return String() here.
> Source/WebCore/dom/MediaStreamTrack.cpp:70 > + return m_streamDescriptor->component(m_trackIndex)->enabled();
It's kind of strange that all of these methods are basically trampolines into m_streamDescriptor components. I guess this object is like a DOM wrapper around the Platform concept, which makes sense, but they we're holding on to the root objects in the Platform object tree and walking the tree each time. I guess that's fine. It's just slightly different from what I woud have expected.
> Source/WebCore/dom/MediaStreamTrack.h:54 > + const size_t m_trackIndex;
We don't usually have const member variables, but it works nicely here.
> Source/WebCore/dom/MediaStreamTrackList.cpp:54 > + ASSERT(index < length());
This is an API exposed to JavaScript, right? What ensures that JavaScript won't call this function with a nutty index?
> Source/WebCore/page/MediaStreamController.h:44 > class MediaStreamController {
All of MediaStreamController is going away eventually, right?
> Source/WebCore/page/MediaStreamFrameController.h:52 > MediaStreamFrameController(Frame*);
This one is going away too, I presume.
Adam Bergkvist
Comment 7
2011-10-17 07:37:01 PDT
Created
attachment 111261
[details]
Patch 3 (In reply to
comment #6
)
> (From update of
attachment 110871
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=110871&action=review
> > In one of your earlier patches, you moved all the non-platform files into a mediastream directory. I think that would be a valuable change to do sooner rather than later.
> I've created a bug to move the files. See
http://webkit.org/b/70233
> Please fix the out-of-bounds read before landing.
item() is an index getter and thus the binding will prevent out-of-bounds reads.
> > Source/WebCore/ChangeLog:8 > > + Update MediaStream to use WebCore platform interfaces > > +
https://bugs.webkit.org/show_bug.cgi?id=68464
> > + > > + Reviewed by NOBODY (OOPS!). > > + > > + Currently not testable. > > Generally we like a litt more information in ChangeLogs. For this change, I'd explain that this is part of a series of patches that convert the DOM interfaces over to using a new Platform API.
> Fixed.
> Also, I'd include some information about how you plan to test this code and at what stage of this process we'll be able to add tests. I understand that there are a lots of wires to connect before everything is fully functional, but we might be able to add some basic API tests soon.
> Fixed (now referring to an existing bug).
> > Source/WebCore/dom/MediaStream.h:84 > > + ScriptExecutionContext* m_scriptExecutionContext; > > This doesn't need to be a RefPtr?
I made it a RefPtr to be safe.
> > Source/WebCore/dom/MediaStreamTrack.cpp:51 > > -const String& MediaStreamTrack::kind() const > > +String MediaStreamTrack::kind() const > > { > > - return m_kind; > > + DEFINE_STATIC_LOCAL(AtomicString, audioKind, ("audio")); > > + DEFINE_STATIC_LOCAL(AtomicString, videoKind, ("video")); > > Should this function return an AtomicString? If not, then should these statics be Strings rather than AtomicStrings? (Let me know if you're unsure of the difference between Strings and AtomicStrings.)
> Fixed (they don't have to be AtomicStrings).
> > > Source/WebCore/dom/MediaStreamTrack.cpp:70 > > + return m_streamDescriptor->component(m_trackIndex)->enabled(); > > It's kind of strange that all of these methods are basically trampolines into m_streamDescriptor components. I guess this object is like a DOM wrapper around the Platform concept, which makes sense, but they we're holding on to the root objects in the Platform object tree and walking the tree each time. I guess that's fine. It's just slightly different from what I woud have expected.
We need to hold on to the MediaStreamDescriptor object since a MediaStreamTrack can exist without its MediaStream and the descriptor is the key to do platform operations on a stream (including the tracks). Since the descriptor is available we can get the information we want from it, but we could cache the information in member variables.
> > Source/WebCore/dom/MediaStreamTrackList.cpp:54 > > + ASSERT(index < length()); > > This is an API exposed to JavaScript, right? What ensures that JavaScript won't call this function with a nutty index?
> The binding makes sure that this function is called with a valid index (0 <= index < length()).
> > Source/WebCore/page/MediaStreamController.h:44 > > class MediaStreamController { > > All of MediaStreamController is going away eventually, right?
>
> > Source/WebCore/page/MediaStreamFrameController.h:52 > > MediaStreamFrameController(Frame*); > > This one is going away too, I presume.
We have a single controller and a page client that only deals with user consent for getUserMedia(). I hope that they could be accepted as replacements for the current controllers and client. I'll file a bug to discuss this further.
WebKit Review Bot
Comment 8
2011-10-17 07:37:45 PDT
Attachment 111261
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/update-webkit', '--chromium']" exit_code: 2 Updating OpenSource Current branch master is up to date. Updating chromium port dependencies using gclient... Error: Can't switch the checkout to
http://v8.googlecode.com/svn/branches/3.6@9637
; UUID don't match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again. Re-trying 'depot_tools/gclient sync' Error: Can't switch the checkout to
http://v8.googlecode.com/svn/branches/3.6@9637
; UUID don't match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again. Re-trying 'depot_tools/gclient sync' Error: Can't switch the checkout to
http://v8.googlecode.com/svn/branches/3.6@9637
; UUID don't match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again. Error: 'depot_tools/gclient sync' failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107. Re-trying 'depot_tools/gclient sync' No such file or directory at Tools/Scripts/update-webkit line 104. If any of these errors are false positives, please file a bug against check-webkit-style.
Darin Fisher (:fishd, Google)
Comment 9
2011-10-17 08:18:04 PDT
(In reply to
comment #4
)
> @fishd: This just deletes interfaces from the WebKit API. The plan is to add new interfaces to WebKitPlatformSupport later.
OK!
Adam Barth
Comment 10
2011-10-18 09:49:00 PDT
Thanks!
WebKit Review Bot
Comment 11
2011-10-19 03:19:39 PDT
Comment on
attachment 111261
[details]
Patch 3 Rejecting
attachment 111261
[details]
from commit-queue. Failed to run "['/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch', '--status-host=queues.webkit.org', '-..." exit_code: 2 Last 500 characters of output: rror: no match for 'operator!' in '!sources' Source/WebCore/page/MediaStreamFrameController.cpp:256: note: candidates are: operator!(bool) <built-in> Source/JavaScriptCore/wtf/text/WTFString.h:368: note: bool WTF::operator!(const WTF::String&) CXX(target) out/Debug/obj.target/webcore_remaining/Source/WebCore/page/WindowFeatures.o make: *** [out/Debug/obj.target/webcore_remaining/Source/WebCore/page/MediaStreamFrameController.o] Error 1 make: *** Waiting for unfinished jobs.... Full output:
http://queues.webkit.org/results/10145353
Adam Bergkvist
Comment 12
2011-10-19 07:40:22 PDT
Created
attachment 111616
[details]
Patch for landing Removed bad ASSERT.
WebKit Review Bot
Comment 13
2011-10-19 17:52:28 PDT
Comment on
attachment 111616
[details]
Patch for landing Clearing flags on attachment: 111616 Committed
r97904
: <
http://trac.webkit.org/changeset/97904
>
WebKit Review Bot
Comment 14
2011-10-19 17:52:34 PDT
All reviewed patches have been landed. Closing bug.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug