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

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

Issue 2549353005: Remove ContextLifecycleObserver from MediaStream (Closed)
Patch Set: temp Created 4 years 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
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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 return new MediaStream(context, audioTracks, videoTracks); 89 return new MediaStream(context, audioTracks, videoTracks);
90 } 90 }
91 91
92 MediaStream* MediaStream::create(ExecutionContext* context, 92 MediaStream* MediaStream::create(ExecutionContext* context,
93 MediaStreamDescriptor* streamDescriptor) { 93 MediaStreamDescriptor* streamDescriptor) {
94 return new MediaStream(context, streamDescriptor); 94 return new MediaStream(context, streamDescriptor);
95 } 95 }
96 96
97 MediaStream::MediaStream(ExecutionContext* context, 97 MediaStream::MediaStream(ExecutionContext* context,
98 MediaStreamDescriptor* streamDescriptor) 98 MediaStreamDescriptor* streamDescriptor)
99 : ContextLifecycleObserver(context), 99 : m_descriptor(streamDescriptor),
100 m_stopped(false), 100 m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired),
101 m_descriptor(streamDescriptor), 101 m_executionContext(context) {
102 m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) {
103 m_descriptor->setClient(this); 102 m_descriptor->setClient(this);
104 103
105 size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents(); 104 size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents();
106 m_audioTracks.reserveCapacity(numberOfAudioTracks); 105 m_audioTracks.reserveCapacity(numberOfAudioTracks);
107 for (size_t i = 0; i < numberOfAudioTracks; i++) { 106 for (size_t i = 0; i < numberOfAudioTracks; i++) {
108 MediaStreamTrack* newTrack = 107 MediaStreamTrack* newTrack =
109 MediaStreamTrack::create(context, m_descriptor->audioComponent(i)); 108 MediaStreamTrack::create(context, m_descriptor->audioComponent(i));
110 newTrack->registerMediaStream(this); 109 newTrack->registerMediaStream(this);
111 m_audioTracks.append(newTrack); 110 m_audioTracks.append(newTrack);
112 } 111 }
113 112
114 size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents(); 113 size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents();
115 m_videoTracks.reserveCapacity(numberOfVideoTracks); 114 m_videoTracks.reserveCapacity(numberOfVideoTracks);
116 for (size_t i = 0; i < numberOfVideoTracks; i++) { 115 for (size_t i = 0; i < numberOfVideoTracks; i++) {
117 MediaStreamTrack* newTrack = 116 MediaStreamTrack* newTrack =
118 MediaStreamTrack::create(context, m_descriptor->videoComponent(i)); 117 MediaStreamTrack::create(context, m_descriptor->videoComponent(i));
119 newTrack->registerMediaStream(this); 118 newTrack->registerMediaStream(this);
120 m_videoTracks.append(newTrack); 119 m_videoTracks.append(newTrack);
121 } 120 }
122 121
123 if (emptyOrOnlyEndedTracks()) { 122 if (emptyOrOnlyEndedTracks()) {
124 m_descriptor->setActive(false); 123 m_descriptor->setActive(false);
125 } 124 }
126 } 125 }
127 126
128 MediaStream::MediaStream(ExecutionContext* context, 127 MediaStream::MediaStream(ExecutionContext* context,
129 const MediaStreamTrackVector& audioTracks, 128 const MediaStreamTrackVector& audioTracks,
130 const MediaStreamTrackVector& videoTracks) 129 const MediaStreamTrackVector& videoTracks)
131 : ContextLifecycleObserver(context), 130 : m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired),
132 m_stopped(false), 131 m_executionContext(context) {
133 m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) {
134 MediaStreamComponentVector audioComponents; 132 MediaStreamComponentVector audioComponents;
135 MediaStreamComponentVector videoComponents; 133 MediaStreamComponentVector videoComponents;
136 134
137 MediaStreamTrackVector::const_iterator iter; 135 MediaStreamTrackVector::const_iterator iter;
138 for (iter = audioTracks.begin(); iter != audioTracks.end(); ++iter) { 136 for (iter = audioTracks.begin(); iter != audioTracks.end(); ++iter) {
139 (*iter)->registerMediaStream(this); 137 (*iter)->registerMediaStream(this);
140 audioComponents.append((*iter)->component()); 138 audioComponents.append((*iter)->component());
141 } 139 }
142 for (iter = videoTracks.begin(); iter != videoTracks.end(); ++iter) { 140 for (iter = videoTracks.begin(); iter != videoTracks.end(); ++iter) {
143 (*iter)->registerMediaStream(this); 141 (*iter)->registerMediaStream(this);
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); 288 for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin();
291 iter != m_videoTracks.end(); ++iter) { 289 iter != m_videoTracks.end(); ++iter) {
292 if (!(*iter)->ended()) 290 if (!(*iter)->ended())
293 return; 291 return;
294 } 292 }
295 293
296 streamEnded(); 294 streamEnded();
297 } 295 }
298 296
299 void MediaStream::streamEnded() { 297 void MediaStream::streamEnded() {
300 if (m_stopped) 298 if (m_executionContext->isContextDestroyed())
301 return; 299 return;
302 300
303 if (active()) { 301 if (active()) {
304 m_descriptor->setActive(false); 302 m_descriptor->setActive(false);
305 scheduleDispatchEvent(Event::create(EventTypeNames::inactive)); 303 scheduleDispatchEvent(Event::create(EventTypeNames::inactive));
306 } 304 }
307 } 305 }
308 306
309 bool MediaStream::addEventListenerInternal( 307 bool MediaStream::addEventListenerInternal(
310 const AtomicString& eventType, 308 const AtomicString& eventType,
311 EventListener* listener, 309 EventListener* listener,
312 const AddEventListenerOptionsResolved& options) { 310 const AddEventListenerOptionsResolved& options) {
313 if (eventType == EventTypeNames::active) 311 if (eventType == EventTypeNames::active)
314 UseCounter::count(getExecutionContext(), UseCounter::MediaStreamOnActive); 312 UseCounter::count(m_executionContext, UseCounter::MediaStreamOnActive);
315 else if (eventType == EventTypeNames::inactive) 313 else if (eventType == EventTypeNames::inactive)
316 UseCounter::count(getExecutionContext(), UseCounter::MediaStreamOnInactive); 314 UseCounter::count(m_executionContext, UseCounter::MediaStreamOnInactive);
317 315
318 return EventTargetWithInlineData::addEventListenerInternal(eventType, 316 return EventTargetWithInlineData::addEventListenerInternal(eventType,
319 listener, options); 317 listener, options);
320 } 318 }
321 319
322 void MediaStream::contextDestroyed() {
323 ContextLifecycleObserver::contextDestroyed();
324 m_stopped = true;
325 }
326
327 const AtomicString& MediaStream::interfaceName() const { 320 const AtomicString& MediaStream::interfaceName() const {
328 return EventTargetNames::MediaStream; 321 return EventTargetNames::MediaStream;
329 } 322 }
330 323
331 ExecutionContext* MediaStream::getExecutionContext() const {
332 return ContextLifecycleObserver::getExecutionContext();
333 }
334
335 void MediaStream::addRemoteTrack(MediaStreamComponent* component) { 324 void MediaStream::addRemoteTrack(MediaStreamComponent* component) {
336 DCHECK(component); 325 DCHECK(component);
337 if (m_stopped) 326 if (m_executionContext->isContextDestroyed())
338 return; 327 return;
339 328
340 MediaStreamTrack* track = 329 MediaStreamTrack* track =
341 MediaStreamTrack::create(getExecutionContext(), component); 330 MediaStreamTrack::create(m_executionContext, component);
342 switch (component->source()->type()) { 331 switch (component->source()->type()) {
343 case MediaStreamSource::TypeAudio: 332 case MediaStreamSource::TypeAudio:
344 m_audioTracks.append(track); 333 m_audioTracks.append(track);
345 break; 334 break;
346 case MediaStreamSource::TypeVideo: 335 case MediaStreamSource::TypeVideo:
347 m_videoTracks.append(track); 336 m_videoTracks.append(track);
348 break; 337 break;
349 } 338 }
350 track->registerMediaStream(this); 339 track->registerMediaStream(this);
351 m_descriptor->addComponent(component); 340 m_descriptor->addComponent(component);
352 341
353 scheduleDispatchEvent( 342 scheduleDispatchEvent(
354 MediaStreamTrackEvent::create(EventTypeNames::addtrack, track)); 343 MediaStreamTrackEvent::create(EventTypeNames::addtrack, track));
355 344
356 if (!active() && !track->ended()) { 345 if (!active() && !track->ended()) {
357 m_descriptor->setActive(true); 346 m_descriptor->setActive(true);
358 scheduleDispatchEvent(Event::create(EventTypeNames::active)); 347 scheduleDispatchEvent(Event::create(EventTypeNames::active));
359 } 348 }
360 } 349 }
361 350
362 void MediaStream::removeRemoteTrack(MediaStreamComponent* component) { 351 void MediaStream::removeRemoteTrack(MediaStreamComponent* component) {
363 DCHECK(component); 352 DCHECK(component);
364 if (m_stopped) 353 if (m_executionContext->isContextDestroyed())
365 return; 354 return;
366 355
367 MediaStreamTrackVector* tracks = 0; 356 MediaStreamTrackVector* tracks = 0;
368 switch (component->source()->type()) { 357 switch (component->source()->type()) {
369 case MediaStreamSource::TypeAudio: 358 case MediaStreamSource::TypeAudio:
370 tracks = &m_audioTracks; 359 tracks = &m_audioTracks;
371 break; 360 break;
372 case MediaStreamSource::TypeVideo: 361 case MediaStreamSource::TypeVideo:
373 tracks = &m_videoTracks; 362 tracks = &m_videoTracks;
374 break; 363 break;
(...skipping 24 matching lines...) Expand all
399 } 388 }
400 389
401 void MediaStream::scheduleDispatchEvent(Event* event) { 390 void MediaStream::scheduleDispatchEvent(Event* event) {
402 m_scheduledEvents.append(event); 391 m_scheduledEvents.append(event);
403 392
404 if (!m_scheduledEventTimer.isActive()) 393 if (!m_scheduledEventTimer.isActive())
405 m_scheduledEventTimer.startOneShot(0, BLINK_FROM_HERE); 394 m_scheduledEventTimer.startOneShot(0, BLINK_FROM_HERE);
406 } 395 }
407 396
408 void MediaStream::scheduledEventTimerFired(TimerBase*) { 397 void MediaStream::scheduledEventTimerFired(TimerBase*) {
409 if (m_stopped) 398 if (m_executionContext->isContextDestroyed())
410 return; 399 return;
411 400
412 HeapVector<Member<Event>> events; 401 HeapVector<Member<Event>> events;
413 events.swap(m_scheduledEvents); 402 events.swap(m_scheduledEvents);
414 403
415 HeapVector<Member<Event>>::iterator it = events.begin(); 404 HeapVector<Member<Event>>::iterator it = events.begin();
416 for (; it != events.end(); ++it) 405 for (; it != events.end(); ++it)
417 dispatchEvent((*it).release()); 406 dispatchEvent((*it).release());
418 407
419 events.clear(); 408 events.clear();
420 } 409 }
421 410
422 URLRegistry& MediaStream::registry() const { 411 URLRegistry& MediaStream::registry() const {
423 return MediaStreamRegistry::registry(); 412 return MediaStreamRegistry::registry();
424 } 413 }
425 414
426 DEFINE_TRACE(MediaStream) { 415 DEFINE_TRACE(MediaStream) {
427 visitor->trace(m_audioTracks); 416 visitor->trace(m_audioTracks);
428 visitor->trace(m_videoTracks); 417 visitor->trace(m_videoTracks);
429 visitor->trace(m_descriptor); 418 visitor->trace(m_descriptor);
430 visitor->trace(m_scheduledEvents); 419 visitor->trace(m_scheduledEvents);
420 visitor->trace(m_executionContext);
431 EventTargetWithInlineData::trace(visitor); 421 EventTargetWithInlineData::trace(visitor);
432 ContextLifecycleObserver::trace(visitor);
433 MediaStreamDescriptorClient::trace(visitor); 422 MediaStreamDescriptorClient::trace(visitor);
434 } 423 }
435 424
436 MediaStream* toMediaStream(MediaStreamDescriptor* descriptor) { 425 MediaStream* toMediaStream(MediaStreamDescriptor* descriptor) {
437 return static_cast<MediaStream*>(descriptor->client()); 426 return static_cast<MediaStream*>(descriptor->client());
438 } 427 }
439 428
440 } // namespace blink 429 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698