Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(986)

Side by Side Diff: Source/modules/mediastream/MediaStream.cpp

Issue 173363002: Move mediastream module to oilpan transition types (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: toRefPtrWillBeMemberNativeArray Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * Copyright (C) 2011, 2012 Ericsson AB. All rights reserved. 3 * Copyright (C) 2011, 2012 Ericsson AB. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 static void processTrack(MediaStreamTrack* track, MediaStreamTrackVector& trackV ector) 48 static void processTrack(MediaStreamTrack* track, MediaStreamTrackVector& trackV ector)
49 { 49 {
50 if (track->ended()) 50 if (track->ended())
51 return; 51 return;
52 52
53 MediaStreamSource* source = track->component()->source(); 53 MediaStreamSource* source = track->component()->source();
54 if (!containsSource(trackVector, source)) 54 if (!containsSource(trackVector, source))
55 trackVector.append(track); 55 trackVector.append(track);
56 } 56 }
57 57
58 PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context) 58 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* contex t)
59 { 59 {
60 MediaStreamTrackVector audioTracks; 60 MediaStreamTrackVector audioTracks;
61 MediaStreamTrackVector videoTracks; 61 MediaStreamTrackVector videoTracks;
62 62
63 return adoptRef(new MediaStream(context, audioTracks, videoTracks)); 63 return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, aud ioTracks, videoTracks));
64 } 64 }
65 65
66 PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, PassRefPt r<MediaStream> stream) 66 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* contex t, PassRefPtrWillBeRawPtr<MediaStream> stream)
67 { 67 {
68 ASSERT(stream); 68 ASSERT(stream);
69 69
70 MediaStreamTrackVector audioTracks; 70 MediaStreamTrackVector audioTracks;
71 MediaStreamTrackVector videoTracks; 71 MediaStreamTrackVector videoTracks;
72 72
73 for (size_t i = 0; i < stream->m_audioTracks.size(); ++i) 73 for (size_t i = 0; i < stream->m_audioTracks.size(); ++i)
74 processTrack(stream->m_audioTracks[i].get(), audioTracks); 74 processTrack(stream->m_audioTracks[i].get(), audioTracks);
75 75
76 for (size_t i = 0; i < stream->m_videoTracks.size(); ++i) 76 for (size_t i = 0; i < stream->m_videoTracks.size(); ++i)
77 processTrack(stream->m_videoTracks[i].get(), videoTracks); 77 processTrack(stream->m_videoTracks[i].get(), videoTracks);
78 78
79 return adoptRef(new MediaStream(context, audioTracks, videoTracks)); 79 return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, aud ioTracks, videoTracks));
80 } 80 }
81 81
82 PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, const Med iaStreamTrackVector& tracks) 82 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* contex t, const MediaStreamTrackVector& tracks)
83 { 83 {
84 MediaStreamTrackVector audioTracks; 84 MediaStreamTrackVector audioTracks;
85 MediaStreamTrackVector videoTracks; 85 MediaStreamTrackVector videoTracks;
86 86
87 for (size_t i = 0; i < tracks.size(); ++i) 87 for (size_t i = 0; i < tracks.size(); ++i)
88 processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioTracks : videoTracks); 88 processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioTracks : videoTracks);
89 89
90 return adoptRef(new MediaStream(context, audioTracks, videoTracks)); 90 return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, aud ioTracks, videoTracks));
91 } 91 }
92 92
93 PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, PassRefPt r<MediaStreamDescriptor> streamDescriptor) 93 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* contex t, PassRefPtr<MediaStreamDescriptor> streamDescriptor)
94 { 94 {
95 return adoptRef(new MediaStream(context, streamDescriptor)); 95 return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, str eamDescriptor));
96 } 96 }
97 97
98 MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescri ptor> streamDescriptor) 98 MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescri ptor> streamDescriptor)
99 : ContextLifecycleObserver(context) 99 : ContextLifecycleObserver(context)
100 , m_stopped(false) 100 , m_stopped(false)
101 , m_descriptor(streamDescriptor) 101 , m_descriptor(streamDescriptor)
102 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) 102 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired)
103 { 103 {
104 ScriptWrappable::init(this); 104 ScriptWrappable::init(this);
105 m_descriptor->setClient(this); 105 m_descriptor->setClient(this);
106 106
107 size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents(); 107 size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents();
108 m_audioTracks.reserveCapacity(numberOfAudioTracks); 108 m_audioTracks.reserveCapacity(numberOfAudioTracks);
109 for (size_t i = 0; i < numberOfAudioTracks; i++) { 109 for (size_t i = 0; i < numberOfAudioTracks; i++) {
110 RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(context, m_ descriptor->audioComponent(i)); 110 RefPtrWillBeRawPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create (context, m_descriptor->audioComponent(i));
111 newTrack->addObserver(this); 111 newTrack->addObserver(this);
112 m_audioTracks.append(newTrack.release()); 112 m_audioTracks.append(newTrack.release());
113 } 113 }
114 114
115 size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents(); 115 size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents();
116 m_videoTracks.reserveCapacity(numberOfVideoTracks); 116 m_videoTracks.reserveCapacity(numberOfVideoTracks);
117 for (size_t i = 0; i < numberOfVideoTracks; i++) { 117 for (size_t i = 0; i < numberOfVideoTracks; i++) {
118 RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(context, m_ descriptor->videoComponent(i)); 118 RefPtrWillBeRawPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create (context, m_descriptor->videoComponent(i));
119 newTrack->addObserver(this); 119 newTrack->addObserver(this);
120 m_videoTracks.append(newTrack.release()); 120 m_videoTracks.append(newTrack.release());
121 } 121 }
122 } 122 }
123 123
124 MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector & audioTracks, const MediaStreamTrackVector& videoTracks) 124 MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector & audioTracks, const MediaStreamTrackVector& videoTracks)
125 : ContextLifecycleObserver(context) 125 : ContextLifecycleObserver(context)
126 , m_stopped(false) 126 , m_stopped(false)
127 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) 127 , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired)
128 { 128 {
(...skipping 16 matching lines...) Expand all
145 m_descriptor->setClient(this); 145 m_descriptor->setClient(this);
146 MediaStreamCenter::instance().didCreateMediaStream(m_descriptor.get()); 146 MediaStreamCenter::instance().didCreateMediaStream(m_descriptor.get());
147 147
148 m_audioTracks = audioTracks; 148 m_audioTracks = audioTracks;
149 m_videoTracks = videoTracks; 149 m_videoTracks = videoTracks;
150 } 150 }
151 151
152 MediaStream::~MediaStream() 152 MediaStream::~MediaStream()
153 { 153 {
154 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) 154 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter)
155 (*iter)->removeObserver(this); 155 (*iter)->removeObserver(this);
haraken 2014/04/08 04:42:35 You cannot touch the track vector because the vect
keishi 2014/04/11 20:03:06 Done.
156 156
157 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) 157 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter)
158 (*iter)->removeObserver(this); 158 (*iter)->removeObserver(this);
haraken 2014/04/08 04:42:35 Ditto. You need to remove this code by making Medi
keishi 2014/04/11 20:03:06 Done.
159 159
160 m_descriptor->setClient(0); 160 m_descriptor->setClient(0);
161 } 161 }
162 162
163 bool MediaStream::ended() const 163 bool MediaStream::ended() const
164 { 164 {
165 return m_stopped || m_descriptor->ended(); 165 return m_stopped || m_descriptor->ended();
166 } 166 }
167 167
168 void MediaStream::addTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionState & exceptionState) 168 void MediaStream::addTrack(PassRefPtrWillBeRawPtr<MediaStreamTrack> prpTrack, Ex ceptionState& exceptionState)
169 { 169 {
170 if (ended()) { 170 if (ended()) {
171 exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished."); 171 exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished.");
172 return; 172 return;
173 } 173 }
174 174
175 if (!prpTrack) { 175 if (!prpTrack) {
176 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac k provided is invalid."); 176 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac k provided is invalid.");
177 return; 177 return;
178 } 178 }
179 179
180 RefPtr<MediaStreamTrack> track = prpTrack; 180 RefPtrWillBeRawPtr<MediaStreamTrack> track = prpTrack;
181 181
182 if (getTrackById(track->id())) 182 if (getTrackById(track->id()))
183 return; 183 return;
184 184
185 switch (track->component()->source()->type()) { 185 switch (track->component()->source()->type()) {
186 case MediaStreamSource::TypeAudio: 186 case MediaStreamSource::TypeAudio:
187 m_audioTracks.append(track); 187 m_audioTracks.append(track);
188 break; 188 break;
189 case MediaStreamSource::TypeVideo: 189 case MediaStreamSource::TypeVideo:
190 m_videoTracks.append(track); 190 m_videoTracks.append(track);
191 break; 191 break;
192 } 192 }
193 track->addObserver(this); 193 track->addObserver(this);
194 m_descriptor->addComponent(track->component()); 194 m_descriptor->addComponent(track->component());
195 MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor.get(), tra ck->component()); 195 MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor.get(), tra ck->component());
196 } 196 }
197 197
198 void MediaStream::removeTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionSt ate& exceptionState) 198 void MediaStream::removeTrack(PassRefPtrWillBeRawPtr<MediaStreamTrack> prpTrack, ExceptionState& exceptionState)
199 { 199 {
200 if (ended()) { 200 if (ended()) {
201 exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished."); 201 exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished.");
202 return; 202 return;
203 } 203 }
204 204
205 if (!prpTrack) { 205 if (!prpTrack) {
206 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac k provided is invalid."); 206 exceptionState.throwDOMException(TypeMismatchError, "The MediaStreamTrac k provided is invalid.");
207 return; 207 return;
208 } 208 }
209 209
210 RefPtr<MediaStreamTrack> track = prpTrack; 210 RefPtrWillBeRawPtr<MediaStreamTrack> track = prpTrack;
211 211
212 size_t pos = kNotFound; 212 size_t pos = kNotFound;
213 switch (track->component()->source()->type()) { 213 switch (track->component()->source()->type()) {
214 case MediaStreamSource::TypeAudio: 214 case MediaStreamSource::TypeAudio:
215 pos = m_audioTracks.find(track); 215 pos = m_audioTracks.find(track);
216 if (pos != kNotFound) 216 if (pos != kNotFound)
217 m_audioTracks.remove(pos); 217 m_audioTracks.remove(pos);
218 break; 218 break;
219 case MediaStreamSource::TypeVideo: 219 case MediaStreamSource::TypeVideo:
220 pos = m_videoTracks.find(track); 220 pos = m_videoTracks.find(track);
(...skipping 22 matching lines...) Expand all
243 } 243 }
244 244
245 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) { 245 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) {
246 if ((*iter)->id() == id) 246 if ((*iter)->id() == id)
247 return (*iter).get(); 247 return (*iter).get();
248 } 248 }
249 249
250 return 0; 250 return 0;
251 } 251 }
252 252
253 PassRefPtr<MediaStream> MediaStream::clone(ExecutionContext* context) 253 PassRefPtrWillBeRawPtr<MediaStream> MediaStream::clone(ExecutionContext* context )
254 { 254 {
255 MediaStreamTrackVector tracks; 255 MediaStreamTrackVector tracks;
256 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) 256 for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter)
257 tracks.append((*iter)->clone(context)); 257 tracks.append((*iter)->clone(context));
258 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) 258 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter)
259 tracks.append((*iter)->clone(context)); 259 tracks.append((*iter)->clone(context));
260 RefPtr<MediaStream> clonedStream = MediaStream::create(context, tracks); 260 RefPtrWillBeRawPtr<MediaStream> clonedStream = MediaStream::create(context, tracks);
sof 2014/04/07 14:22:16 No need to bind this to 'clonedStream' before retu
keishi 2014/04/11 20:03:06 Done.
261 return clonedStream.release(); 261 return clonedStream.release();
262 } 262 }
263 263
264 void MediaStream::stop() 264 void MediaStream::stop()
265 { 265 {
266 if (ended()) 266 if (ended())
267 return; 267 return;
268 268
269 MediaStreamCenter::instance().didStopLocalMediaStream(descriptor()); 269 MediaStreamCenter::instance().didStopLocalMediaStream(descriptor());
270 270
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 { 310 {
311 return ContextLifecycleObserver::executionContext(); 311 return ContextLifecycleObserver::executionContext();
312 } 312 }
313 313
314 void MediaStream::addRemoteTrack(MediaStreamComponent* component) 314 void MediaStream::addRemoteTrack(MediaStreamComponent* component)
315 { 315 {
316 ASSERT(component); 316 ASSERT(component);
317 if (ended()) 317 if (ended())
318 return; 318 return;
319 319
320 RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(executionContext() , component); 320 RefPtrWillBeRawPtr<MediaStreamTrack> track = MediaStreamTrack::create(execut ionContext(), component);
321 switch (component->source()->type()) { 321 switch (component->source()->type()) {
322 case MediaStreamSource::TypeAudio: 322 case MediaStreamSource::TypeAudio:
323 m_audioTracks.append(track); 323 m_audioTracks.append(track);
324 break; 324 break;
325 case MediaStreamSource::TypeVideo: 325 case MediaStreamSource::TypeVideo:
326 m_videoTracks.append(track); 326 m_videoTracks.append(track);
327 break; 327 break;
328 } 328 }
329 track->addObserver(this); 329 track->addObserver(this);
330 m_descriptor->addComponent(component); 330 m_descriptor->addComponent(component);
(...skipping 21 matching lines...) Expand all
352 if ((*tracks)[i]->component() == component) { 352 if ((*tracks)[i]->component() == component) {
353 index = i; 353 index = i;
354 break; 354 break;
355 } 355 }
356 } 356 }
357 if (index == kNotFound) 357 if (index == kNotFound)
358 return; 358 return;
359 359
360 m_descriptor->removeComponent(component); 360 m_descriptor->removeComponent(component);
361 361
362 RefPtr<MediaStreamTrack> track = (*tracks)[index]; 362 RefPtrWillBeRawPtr<MediaStreamTrack> track = (*tracks)[index];
363 track->removeObserver(this); 363 track->removeObserver(this);
364 tracks->remove(index); 364 tracks->remove(index);
365 scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::removetr ack, false, false, track)); 365 scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::removetr ack, false, false, track));
366 } 366 }
367 367
368 void MediaStream::scheduleDispatchEvent(PassRefPtrWillBeRawPtr<Event> event) 368 void MediaStream::scheduleDispatchEvent(PassRefPtrWillBeRawPtr<Event> event)
369 { 369 {
370 m_scheduledEvents.append(event); 370 m_scheduledEvents.append(event);
371 371
372 if (!m_scheduledEventTimer.isActive()) 372 if (!m_scheduledEventTimer.isActive())
(...skipping 13 matching lines...) Expand all
386 dispatchEvent((*it).release()); 386 dispatchEvent((*it).release());
387 387
388 events.clear(); 388 events.clear();
389 } 389 }
390 390
391 URLRegistry& MediaStream::registry() const 391 URLRegistry& MediaStream::registry() const
392 { 392 {
393 return MediaStreamRegistry::registry(); 393 return MediaStreamRegistry::registry();
394 } 394 }
395 395
396 void MediaStream::trace(Visitor* visitor)
397 {
398 visitor->trace(m_audioTracks);
399 visitor->trace(m_videoTracks);
400 visitor->trace(m_scheduledEvents);
401 }
402
396 } // namespace WebCore 403 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698