MediaStream API: Change the data channel descriptor pattern to a handler pattern
https://bugs.webkit.org/show_bug.cgi?id=104543

Reviewed by Kent Tamura.

Source/Platform:

In short the code is refactured to use the Handler/Client pattern (see RTCPeerConnectionHandler)
instead of the Descriptor pattern.
This will fix lifetime/memory/code structure issues in the chromium port.

* Platform.gypi:
* chromium/public/WebRTCDataChannel.h: Removed.
* chromium/public/WebRTCDataChannelHandler.h: Added.
(WebKit):
(WebRTCDataChannelHandler):
(WebKit::WebRTCDataChannelHandler::~WebRTCDataChannelHandler):
* chromium/public/WebRTCDataChannelHandlerClient.h: Added.
(WebKit):
(WebRTCDataChannelHandlerClient):
(WebKit::WebRTCDataChannelHandlerClient::~WebRTCDataChannelHandlerClient):
* chromium/public/WebRTCPeerConnectionHandler.h:
(WebKit):
(WebKit::WebRTCPeerConnectionHandler::createDataChannel):
* chromium/public/WebRTCPeerConnectionHandlerClient.h:
(WebKit):
(WebKit::WebRTCPeerConnectionHandlerClient::didAddRemoteDataChannel):

Source/WebCore:

In short the code is refactured to use the Handler/Client pattern (see RTCPeerConnectionHandler)
instead of the Descriptor pattern.
This will fix lifetime/memory/code structure issues in the chromium port.

Existing tests cover this patch.

* CMakeLists.txt:
* GNUmakefile.list.am:
* Modules/mediastream/RTCDataChannel.cpp:
(WebCore::RTCDataChannel::create):
(WebCore::RTCDataChannel::RTCDataChannel):
(WebCore::RTCDataChannel::~RTCDataChannel):
(WebCore::RTCDataChannel::label):
(WebCore::RTCDataChannel::reliable):
(WebCore::RTCDataChannel::readyState):
(WebCore::RTCDataChannel::bufferedAmount):
(WebCore::RTCDataChannel::send):
(WebCore::RTCDataChannel::close):
(WebCore::RTCDataChannel::didChangeReadyState):
(WebCore::RTCDataChannel::didReceiveStringData):
(WebCore::RTCDataChannel::didReceiveRawData):
(WebCore::RTCDataChannel::didDetectError):
(WebCore::RTCDataChannel::stop):
* Modules/mediastream/RTCDataChannel.h:
(WebCore):
(RTCDataChannel):
* Modules/mediastream/RTCPeerConnection.cpp:
(WebCore::RTCPeerConnection::didAddRemoteDataChannel):
* Modules/mediastream/RTCPeerConnection.h:
(RTCPeerConnection):
* WebCore.gypi:
* platform/chromium/support/WebRTCDataChannel.cpp: Removed.
* platform/mediastream/RTCDataChannelDescriptor.h: Removed.
* platform/mediastream/RTCDataChannelHandler.h: Copied from Source/WebCore/platform/mediastream/RTCDataChannelDescriptor.cpp.
(WebCore):
(RTCDataChannelHandler):
(WebCore::RTCDataChannelHandler::~RTCDataChannelHandler):
* platform/mediastream/RTCDataChannelHandlerClient.h: Renamed from Source/WebCore/platform/mediastream/RTCDataChannelDescriptor.cpp.
(WebCore):
(RTCDataChannelHandlerClient):
(WebCore::RTCDataChannelHandlerClient::~RTCDataChannelHandlerClient):
* platform/mediastream/RTCPeerConnectionHandler.cpp:
(WebCore):
(WebCore::RTCPeerConnectionHandler::create):
* platform/mediastream/RTCPeerConnectionHandler.h:
(WebCore):
(RTCPeerConnectionHandler):
* platform/mediastream/RTCPeerConnectionHandlerClient.h:
(WebCore):
(RTCPeerConnectionHandlerClient):
* platform/mediastream/chromium/RTCDataChannelHandlerChromium.cpp: Added.
(WebCore):
(WebCore::RTCDataChannelHandlerChromium::create):
(WebCore::RTCDataChannelHandlerChromium::RTCDataChannelHandlerChromium):
(WebCore::RTCDataChannelHandlerChromium::~RTCDataChannelHandlerChromium):
(WebCore::RTCDataChannelHandlerChromium::setClient):
(WebCore::RTCDataChannelHandlerChromium::label):
(WebCore::RTCDataChannelHandlerChromium::isReliable):
(WebCore::RTCDataChannelHandlerChromium::bufferedAmount):
(WebCore::RTCDataChannelHandlerChromium::sendStringData):
(WebCore::RTCDataChannelHandlerChromium::sendRawData):
(WebCore::RTCDataChannelHandlerChromium::close):
(WebCore::RTCDataChannelHandlerChromium::didChangeReadyState):
(WebCore::RTCDataChannelHandlerChromium::didReceiveStringData):
(WebCore::RTCDataChannelHandlerChromium::didReceiveRawData):
(WebCore::RTCDataChannelHandlerChromium::didDetectError):
* platform/mediastream/chromium/RTCDataChannelHandlerChromium.h: Added.
(WebCore):
(RTCDataChannelHandlerChromium):
* platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
(WebCore::RTCPeerConnectionHandlerChromium::createDataChannel):
(WebCore::RTCPeerConnectionHandlerChromium::didAddRemoteDataChannel):
* platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
(WebCore):
(RTCPeerConnectionHandlerChromium):

Source/WebKit/chromium:

* src/AssertMatchingEnums.cpp:

Tools:

Adding mocks to be able to test this refactoring.

* DumpRenderTree/DumpRenderTree.gypi:
* DumpRenderTree/chromium/MockWebRTCDataChannelHandler.cpp: Added.
(DataChannelReadyStateTask):
(DataChannelReadyStateTask::DataChannelReadyStateTask):
(MockWebRTCDataChannelHandler::MockWebRTCDataChannelHandler):
(MockWebRTCDataChannelHandler::setClient):
(MockWebRTCDataChannelHandler::bufferedAmount):
(MockWebRTCDataChannelHandler::sendStringData):
(MockWebRTCDataChannelHandler::sendRawData):
(MockWebRTCDataChannelHandler::close):
* DumpRenderTree/chromium/MockWebRTCDataChannelHandler.h: Added.
(MockWebRTCDataChannelHandler):
(MockWebRTCDataChannelHandler::taskList):
* DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.cpp:
(RTCPeerConnectionReadyStateTask::RTCPeerConnectionReadyStateTask):
(RemoteDataChannelTask::RemoteDataChannelTask):
(MockWebRTCPeerConnectionHandler::createDataChannel):
(MockWebRTCPeerConnectionHandler::stop):
* DumpRenderTree/chromium/MockWebRTCPeerConnectionHandler.h:
(MockWebRTCPeerConnectionHandler):

LayoutTests:

Expanding data channels tests.

* fast/mediastream/RTCPeerConnection-datachannel-expected.txt:
* fast/mediastream/RTCPeerConnection-datachannel.html:


git-svn-id: https://svn.webkit.org/repository/webkit/trunk/Source/Platform/chromium/public@137441 268f45cc-cd09-0410-ab3c-d52691b4dbfc
5 files changed
tree: ab1f62eba526d4a5a651053bde1c46d517286387
  1. android/
  2. default/
  3. linux/
  4. mac/
  5. win/
  6. Platform.h
  7. WebAnimation.h
  8. WebAnimationCurve.h
  9. WebAnimationDelegate.h
  10. WebAudioBus.h
  11. WebAudioDestinationConsumer.h
  12. WebAudioDevice.h
  13. WebBlobData.h
  14. WebBlobRegistry.h
  15. WebCanvas.h
  16. WebClipboard.h
  17. WebColor.h
  18. WebCommon.h
  19. WebCompositorOutputSurface.h
  20. WebCompositorSupport.h
  21. WebCompositorTransferableResourceList.h
  22. WebContentLayer.h
  23. WebContentLayerClient.h
  24. WebCookie.h
  25. WebCookieJar.h
  26. WebCString.h
  27. WebData.h
  28. WebDelegatedRendererLayer.h
  29. WebDragData.h
  30. WebExternalTextureLayer.h
  31. WebExternalTextureLayerClient.h
  32. WebFileInfo.h
  33. WebFileSystem.h
  34. WebFileUtilities.h
  35. WebFilterOperation.h
  36. WebFilterOperations.h
  37. WebFlingAnimator.h
  38. WebFloatAnimationCurve.h
  39. WebFloatKeyframe.h
  40. WebFloatPoint.h
  41. WebFloatQuad.h
  42. WebFloatRect.h
  43. WebGamepad.h
  44. WebGamepads.h
  45. WebGestureCurve.h
  46. WebGestureCurveTarget.h
  47. WebGraphicsContext3D.h
  48. WebGraphicsMemoryAllocation.h
  49. WebGraphicsMemoryStats.h
  50. WebHTTPBody.h
  51. WebHTTPHeaderVisitor.h
  52. WebHTTPLoadInfo.h
  53. WebImage.h
  54. WebImageLayer.h
  55. WebInputHandler.h
  56. WebInputHandlerClient.h
  57. WebIOSurfaceLayer.h
  58. WebLayer.h
  59. WebLayerScrollClient.h
  60. WebLayerTreeView.h
  61. WebLayerTreeViewClient.h
  62. WebLocalizedString.h
  63. WebMediaConstraints.h
  64. WebMediaStreamCenter.h
  65. WebMediaStreamCenterClient.h
  66. WebMediaStreamComponent.h
  67. WebMediaStreamDescriptor.h
  68. WebMediaStreamSource.h
  69. WebMediaStreamSourcesRequest.h
  70. WebMessagePortChannel.h
  71. WebMessagePortChannelClient.h
  72. WebMimeRegistry.h
  73. WebNonCopyable.h
  74. WebPluginListBuilder.h
  75. WebPoint.h
  76. WebPrerender.h
  77. WebPrerenderingSupport.h
  78. WebPrivateOwnPtr.h
  79. WebPrivatePtr.h
  80. WebRect.h
  81. WebReferrerPolicy.h
  82. WebRenderingStats.h
  83. WebRTCConfiguration.h
  84. WebRTCDataChannelHandler.h
  85. WebRTCDataChannelHandlerClient.h
  86. WebRTCICECandidate.h
  87. WebRTCPeerConnectionHandler.h
  88. WebRTCPeerConnectionHandlerClient.h
  89. WebRTCSessionDescription.h
  90. WebRTCSessionDescriptionRequest.h
  91. WebRTCStatsRequest.h
  92. WebRTCStatsResponse.h
  93. WebRTCVoidRequest.h
  94. WebScreenInfo.h
  95. WebScrollbar.h
  96. WebScrollbarLayer.h
  97. WebScrollbarThemeGeometry.h
  98. WebScrollbarThemePainter.h
  99. WebSharedGraphicsContext3D.h
  100. WebSize.h
  101. WebSocketStreamError.h
  102. WebSocketStreamHandle.h
  103. WebSocketStreamHandleClient.h
  104. WebSolidColorLayer.h
  105. WebStorageArea.h
  106. WebStorageNamespace.h
  107. WebString.h
  108. WebThread.h
  109. WebThreadSafeData.h
  110. WebTransformAnimationCurve.h
  111. WebTransformationMatrix.h
  112. WebTransformKeyframe.h
  113. WebTransformOperations.h
  114. WebURL.h
  115. WebURLError.h
  116. WebURLLoader.h
  117. WebURLLoaderClient.h
  118. WebURLLoadTiming.h
  119. WebURLRequest.h
  120. WebURLResponse.h
  121. WebVector.h
  122. WebVideoFrame.h
  123. WebVideoFrameProvider.h
  124. WebVideoLayer.h
  125. WebWorkerRunLoop.h