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

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

Issue 2097563002: Split the mediastream module in Blink into mediastream and peerconnection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add DEPS file Created 4 years, 5 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "modules/mediastream/RTCDataChannel.h"
6
7 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
8 #include "core/dom/DOMArrayBuffer.h"
9 #include "core/dom/DOMException.h"
10 #include "core/events/Event.h"
11 #include "platform/heap/Heap.h"
12 #include "public/platform/WebRTCDataChannelHandler.h"
13 #include "public/platform/WebVector.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "wtf/PtrUtil.h"
16 #include "wtf/RefPtr.h"
17 #include "wtf/text/WTFString.h"
18
19 namespace blink {
20 namespace {
21
22 class MockHandler final : public WebRTCDataChannelHandler {
23 public:
24 MockHandler()
25 : m_client(0)
26 , m_state(WebRTCDataChannelHandlerClient::ReadyStateConnecting)
27 , m_bufferedAmount(0)
28 {
29 }
30 void setClient(WebRTCDataChannelHandlerClient* client) override { m_client = client; }
31 WebString label() override { return WebString(""); }
32 bool ordered() const override { return true; }
33 unsigned short maxRetransmitTime() const override { return 0; }
34 unsigned short maxRetransmits() const override { return 0; }
35 WebString protocol() const override { return WebString(""); }
36 bool negotiated() const override { return false; }
37 unsigned short id() const override { return 0; }
38
39 WebRTCDataChannelHandlerClient::ReadyState state() const override { return m _state; }
40 unsigned long bufferedAmount() override { return m_bufferedAmount; }
41 bool sendStringData(const WebString& s) override
42 {
43 m_bufferedAmount += s.length();
44 return true;
45 }
46 bool sendRawData(const char* data, size_t length) override
47 {
48 m_bufferedAmount += length;
49 return true;
50 }
51 void close() override { }
52
53 // Methods for testing.
54 void changeState(WebRTCDataChannelHandlerClient::ReadyState state)
55 {
56 m_state = state;
57 if (m_client) {
58 m_client->didChangeReadyState(m_state);
59 }
60 }
61 void drainBuffer(unsigned long bytes)
62 {
63 unsigned long oldBufferedAmount = m_bufferedAmount;
64 m_bufferedAmount -= bytes;
65 if (m_client) {
66 m_client->didDecreaseBufferedAmount(oldBufferedAmount);
67 }
68 }
69
70 private:
71 WebRTCDataChannelHandlerClient* m_client;
72 WebRTCDataChannelHandlerClient::ReadyState m_state;
73 unsigned long m_bufferedAmount;
74 };
75
76 } // namespace
77
78 TEST(RTCDataChannelTest, BufferedAmount)
79 {
80 MockHandler* handler = new MockHandler();
81 RTCDataChannel* channel = RTCDataChannel::create(0, wrapUnique(handler));
82
83 handler->changeState(WebRTCDataChannelHandlerClient::ReadyStateOpen);
84 String message(std::string(100, 'A').c_str());
85 channel->send(message, IGNORE_EXCEPTION);
86 EXPECT_EQ(100U, channel->bufferedAmount());
87 }
88
89 TEST(RTCDataChannelTest, BufferedAmountLow)
90 {
91 MockHandler* handler = new MockHandler();
92 RTCDataChannel* channel = RTCDataChannel::create(0, wrapUnique(handler));
93
94 // Add and drain 100 bytes
95 handler->changeState(WebRTCDataChannelHandlerClient::ReadyStateOpen);
96 String message(std::string(100, 'A').c_str());
97 channel->send(message, IGNORE_EXCEPTION);
98 EXPECT_EQ(100U, channel->bufferedAmount());
99 EXPECT_EQ(1U, channel->m_scheduledEvents.size());
100
101 handler->drainBuffer(100);
102 EXPECT_EQ(0U, channel->bufferedAmount());
103 EXPECT_EQ(2U, channel->m_scheduledEvents.size());
104 EXPECT_EQ("bufferedamountlow", std::string(channel->m_scheduledEvents.last() ->type().utf8().data()));
105
106 // Add and drain 1 byte
107 channel->send("A", IGNORE_EXCEPTION);
108 EXPECT_EQ(1U, channel->bufferedAmount());
109 EXPECT_EQ(2U, channel->m_scheduledEvents.size());
110
111 handler->drainBuffer(1);
112 EXPECT_EQ(0U, channel->bufferedAmount());
113 EXPECT_EQ(3U, channel->m_scheduledEvents.size());
114 EXPECT_EQ("bufferedamountlow", std::string(channel->m_scheduledEvents.last() ->type().utf8().data()));
115
116 // Set the threshold to 99 bytes, add 101, and drain 1 byte at a time.
117 channel->setBufferedAmountLowThreshold(99U);
118 channel->send(message, IGNORE_EXCEPTION);
119 EXPECT_EQ(100U, channel->bufferedAmount());
120
121 channel->send("A", IGNORE_EXCEPTION);
122 EXPECT_EQ(101U, channel->bufferedAmount());
123
124 handler->drainBuffer(1);
125 EXPECT_EQ(100U, channel->bufferedAmount());
126 EXPECT_EQ(3U, channel->m_scheduledEvents.size()); // No new events.
127
128 handler->drainBuffer(1);
129 EXPECT_EQ(99U, channel->bufferedAmount());
130 EXPECT_EQ(4U, channel->m_scheduledEvents.size()); // One new event.
131 EXPECT_EQ("bufferedamountlow", std::string(channel->m_scheduledEvents.last() ->type().utf8().data()));
132
133 handler->drainBuffer(1);
134 EXPECT_EQ(98U, channel->bufferedAmount());
135
136 channel->setBufferedAmountLowThreshold(97U);
137 EXPECT_EQ(4U, channel->m_scheduledEvents.size()); // No new events.
138
139 handler->drainBuffer(1);
140 EXPECT_EQ(97U, channel->bufferedAmount());
141 EXPECT_EQ(5U, channel->m_scheduledEvents.size()); // New event.
142 EXPECT_EQ("bufferedamountlow", std::string(channel->m_scheduledEvents.last() ->type().utf8().data()));
143 }
144
145 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698