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

Side by Side Diff: Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp

Issue 11339018: Merge 132420 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1271/
Patch Set: Created 8 years, 1 month 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
« no previous file with comments | « Source/WebCore/Modules/mediastream/RTCPeerConnection.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 120
121 return peerConnection.release(); 121 return peerConnection.release();
122 } 122 }
123 123
124 RTCPeerConnection::RTCPeerConnection(ScriptExecutionContext* context, PassRefPtr <RTCConfiguration> configuration, PassRefPtr<MediaConstraints> constraints, Exce ptionCode& ec) 124 RTCPeerConnection::RTCPeerConnection(ScriptExecutionContext* context, PassRefPtr <RTCConfiguration> configuration, PassRefPtr<MediaConstraints> constraints, Exce ptionCode& ec)
125 : ActiveDOMObject(context, this) 125 : ActiveDOMObject(context, this)
126 , m_readyState(ReadyStateNew) 126 , m_readyState(ReadyStateNew)
127 , m_iceState(IceStateClosed) 127 , m_iceState(IceStateClosed)
128 , m_localStreams(MediaStreamList::create()) 128 , m_localStreams(MediaStreamList::create())
129 , m_remoteStreams(MediaStreamList::create()) 129 , m_remoteStreams(MediaStreamList::create())
130 , m_scheduledEventTimer(this, &RTCPeerConnection::scheduledEventTimerFired)
130 { 131 {
131 m_peerHandler = RTCPeerConnectionHandler::create(this); 132 m_peerHandler = RTCPeerConnectionHandler::create(this);
132 if (!m_peerHandler || !m_peerHandler->initialize(configuration, constraints) ) 133 if (!m_peerHandler || !m_peerHandler->initialize(configuration, constraints) )
133 ec = NOT_SUPPORTED_ERR; 134 ec = NOT_SUPPORTED_ERR;
134 } 135 }
135 136
136 RTCPeerConnection::~RTCPeerConnection() 137 RTCPeerConnection::~RTCPeerConnection()
137 { 138 {
138 } 139 }
139 140
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 return; 387 return;
387 } 388 }
388 389
389 changeIceState(IceStateClosed); 390 changeIceState(IceStateClosed);
390 changeReadyState(ReadyStateClosed); 391 changeReadyState(ReadyStateClosed);
391 stop(); 392 stop();
392 } 393 }
393 394
394 void RTCPeerConnection::negotiationNeeded() 395 void RTCPeerConnection::negotiationNeeded()
395 { 396 {
396 dispatchEvent(Event::create(eventNames().negotiationneededEvent, false, fals e)); 397 scheduleDispatchEvent(Event::create(eventNames().negotiationneededEvent, fal se, false));
397 } 398 }
398 399
399 void RTCPeerConnection::didGenerateIceCandidate(PassRefPtr<RTCIceCandidateDescri ptor> iceCandidateDescriptor) 400 void RTCPeerConnection::didGenerateIceCandidate(PassRefPtr<RTCIceCandidateDescri ptor> iceCandidateDescriptor)
400 { 401 {
401 ASSERT(scriptExecutionContext()->isContextThread()); 402 ASSERT(scriptExecutionContext()->isContextThread());
402 if (!iceCandidateDescriptor) 403 if (!iceCandidateDescriptor)
403 dispatchEvent(RTCIceCandidateEvent::create(false, false, 0)); 404 scheduleDispatchEvent(RTCIceCandidateEvent::create(false, false, 0));
404 else { 405 else {
405 RefPtr<RTCIceCandidate> iceCandidate = RTCIceCandidate::create(iceCandid ateDescriptor); 406 RefPtr<RTCIceCandidate> iceCandidate = RTCIceCandidate::create(iceCandid ateDescriptor);
406 dispatchEvent(RTCIceCandidateEvent::create(false, false, iceCandidate.re lease())); 407 scheduleDispatchEvent(RTCIceCandidateEvent::create(false, false, iceCand idate.release()));
407 } 408 }
408 } 409 }
409 410
410 void RTCPeerConnection::didChangeReadyState(ReadyState newState) 411 void RTCPeerConnection::didChangeReadyState(ReadyState newState)
411 { 412 {
412 ASSERT(scriptExecutionContext()->isContextThread()); 413 ASSERT(scriptExecutionContext()->isContextThread());
413 changeReadyState(newState); 414 changeReadyState(newState);
414 } 415 }
415 416
416 void RTCPeerConnection::didChangeIceState(IceState newState) 417 void RTCPeerConnection::didChangeIceState(IceState newState)
417 { 418 {
418 ASSERT(scriptExecutionContext()->isContextThread()); 419 ASSERT(scriptExecutionContext()->isContextThread());
419 changeIceState(newState); 420 changeIceState(newState);
420 } 421 }
421 422
422 void RTCPeerConnection::didAddRemoteStream(PassRefPtr<MediaStreamDescriptor> str eamDescriptor) 423 void RTCPeerConnection::didAddRemoteStream(PassRefPtr<MediaStreamDescriptor> str eamDescriptor)
423 { 424 {
424 ASSERT(scriptExecutionContext()->isContextThread()); 425 ASSERT(scriptExecutionContext()->isContextThread());
425 426
426 if (m_readyState == ReadyStateClosed) 427 if (m_readyState == ReadyStateClosed)
427 return; 428 return;
428 429
429 RefPtr<MediaStream> stream = MediaStream::create(scriptExecutionContext(), s treamDescriptor); 430 RefPtr<MediaStream> stream = MediaStream::create(scriptExecutionContext(), s treamDescriptor);
430 m_remoteStreams->append(stream); 431 m_remoteStreams->append(stream);
431 432
432 dispatchEvent(MediaStreamEvent::create(eventNames().addstreamEvent, false, f alse, stream.release())); 433 scheduleDispatchEvent(MediaStreamEvent::create(eventNames().addstreamEvent, false, false, stream.release()));
433 } 434 }
434 435
435 void RTCPeerConnection::didRemoveRemoteStream(MediaStreamDescriptor* streamDescr iptor) 436 void RTCPeerConnection::didRemoveRemoteStream(MediaStreamDescriptor* streamDescr iptor)
436 { 437 {
437 ASSERT(scriptExecutionContext()->isContextThread()); 438 ASSERT(scriptExecutionContext()->isContextThread());
438 ASSERT(streamDescriptor->owner()); 439 ASSERT(streamDescriptor->owner());
439 440
440 RefPtr<MediaStream> stream = static_cast<MediaStream*>(streamDescriptor->own er()); 441 RefPtr<MediaStream> stream = static_cast<MediaStream*>(streamDescriptor->own er());
441 stream->streamEnded(); 442 stream->streamEnded();
442 443
443 if (m_readyState == ReadyStateClosed) 444 if (m_readyState == ReadyStateClosed)
444 return; 445 return;
445 446
446 ASSERT(m_remoteStreams->contains(stream.get())); 447 ASSERT(m_remoteStreams->contains(stream.get()));
447 m_remoteStreams->remove(stream.get()); 448 m_remoteStreams->remove(stream.get());
448 449
449 dispatchEvent(MediaStreamEvent::create(eventNames().removestreamEvent, false , false, stream.release())); 450 scheduleDispatchEvent(MediaStreamEvent::create(eventNames().removestreamEven t, false, false, stream.release()));
450 } 451 }
451 452
452 const AtomicString& RTCPeerConnection::interfaceName() const 453 const AtomicString& RTCPeerConnection::interfaceName() const
453 { 454 {
454 return eventNames().interfaceForRTCPeerConnection; 455 return eventNames().interfaceForRTCPeerConnection;
455 } 456 }
456 457
457 ScriptExecutionContext* RTCPeerConnection::scriptExecutionContext() const 458 ScriptExecutionContext* RTCPeerConnection::scriptExecutionContext() const
458 { 459 {
459 return ActiveDOMObject::scriptExecutionContext(); 460 return ActiveDOMObject::scriptExecutionContext();
(...skipping 24 matching lines...) Expand all
484 { 485 {
485 if (readyState == m_readyState || m_readyState == ReadyStateClosed) 486 if (readyState == m_readyState || m_readyState == ReadyStateClosed)
486 return; 487 return;
487 488
488 m_readyState = readyState; 489 m_readyState = readyState;
489 490
490 switch (m_readyState) { 491 switch (m_readyState) {
491 case ReadyStateOpening: 492 case ReadyStateOpening:
492 break; 493 break;
493 case ReadyStateActive: 494 case ReadyStateActive:
494 dispatchEvent(Event::create(eventNames().openEvent, false, false)); 495 scheduleDispatchEvent(Event::create(eventNames().openEvent, false, false ));
495 break; 496 break;
496 case ReadyStateClosing: 497 case ReadyStateClosing:
497 case ReadyStateClosed: 498 case ReadyStateClosed:
498 break; 499 break;
499 case ReadyStateNew: 500 case ReadyStateNew:
500 ASSERT_NOT_REACHED(); 501 ASSERT_NOT_REACHED();
501 break; 502 break;
502 } 503 }
503 504
504 dispatchEvent(Event::create(eventNames().statechangeEvent, false, false)); 505 scheduleDispatchEvent(Event::create(eventNames().statechangeEvent, false, fa lse));
505 } 506 }
506 507
507 void RTCPeerConnection::changeIceState(IceState iceState) 508 void RTCPeerConnection::changeIceState(IceState iceState)
508 { 509 {
509 if (iceState == m_iceState || m_readyState == ReadyStateClosed) 510 if (iceState == m_iceState || m_readyState == ReadyStateClosed)
510 return; 511 return;
511 512
512 m_iceState = iceState; 513 m_iceState = iceState;
513 dispatchEvent(Event::create(eventNames().icechangeEvent, false, false)); 514 scheduleDispatchEvent(Event::create(eventNames().icechangeEvent, false, fals e));
515 }
516
517 void RTCPeerConnection::scheduleDispatchEvent(PassRefPtr<Event> event)
518 {
519 m_scheduledEvents.append(event);
520
521 if (!m_scheduledEventTimer.isActive())
522 m_scheduledEventTimer.startOneShot(0);
523 }
524
525 void RTCPeerConnection::scheduledEventTimerFired(Timer<RTCPeerConnection>*)
526 {
527 Vector<RefPtr<Event> > events;
528 events.swap(m_scheduledEvents);
529
530 Vector<RefPtr<Event> >::iterator it = events.begin();
531 for (; it != events.end(); ++it)
532 dispatchEvent((*it).release());
533
534 events.clear();
514 } 535 }
515 536
516 } // namespace WebCore 537 } // namespace WebCore
517 538
518 #endif // ENABLE(MEDIA_STREAM) 539 #endif // ENABLE(MEDIA_STREAM)
OLDNEW
« no previous file with comments | « Source/WebCore/Modules/mediastream/RTCPeerConnection.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698