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

Side by Side Diff: Source/modules/websockets/WebSocket.cpp

Issue 298893008: Add WebSocket unittests. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 7 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
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * 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 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #include "wtf/ArrayBuffer.h" 55 #include "wtf/ArrayBuffer.h"
56 #include "wtf/ArrayBufferView.h" 56 #include "wtf/ArrayBufferView.h"
57 #include "wtf/Assertions.h" 57 #include "wtf/Assertions.h"
58 #include "wtf/HashSet.h" 58 #include "wtf/HashSet.h"
59 #include "wtf/PassOwnPtr.h" 59 #include "wtf/PassOwnPtr.h"
60 #include "wtf/StdLibExtras.h" 60 #include "wtf/StdLibExtras.h"
61 #include "wtf/text/CString.h" 61 #include "wtf/text/CString.h"
62 #include "wtf/text/StringBuilder.h" 62 #include "wtf/text/StringBuilder.h"
63 #include "wtf/text/WTFString.h" 63 #include "wtf/text/WTFString.h"
64 64
65 using namespace std;
66
67 namespace WebCore { 65 namespace WebCore {
68 66
69 WebSocket::EventQueue::EventQueue(EventTarget* target) 67 WebSocket::EventQueue::EventQueue(EventTarget* target)
70 : m_state(Active) 68 : m_state(Active)
71 , m_target(target) 69 , m_target(target)
72 , m_resumeTimer(this, &EventQueue::resumeTimerFired) { } 70 , m_resumeTimer(this, &EventQueue::resumeTimerFired) { }
73 71
74 WebSocket::EventQueue::~EventQueue() { stop(); } 72 WebSocket::EventQueue::~EventQueue() { stop(); }
75 73
76 void WebSocket::EventQueue::dispatch(PassRefPtrWillBeRawPtr<Event> event) 74 void WebSocket::EventQueue::dispatch(PassRefPtrWillBeRawPtr<Event> event)
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 const UChar maximumProtocolCharacter = '~'; // U+007E. 164 const UChar maximumProtocolCharacter = '~'; // U+007E.
167 // Set to true if character does not matches "separators" ABNF defined in 165 // Set to true if character does not matches "separators" ABNF defined in
168 // RFC2616. SP and HT are excluded since the range check excludes them. 166 // RFC2616. SP and HT are excluded since the range check excludes them.
169 bool isNotSeparator = character != '"' && character != '(' && character != ' )' && character != ',' && character != '/' 167 bool isNotSeparator = character != '"' && character != '(' && character != ' )' && character != ',' && character != '/'
170 && !(character >= ':' && character <= '@') // U+003A - U+0040 (':', ';', '<', '=', '>', '?', '@'). 168 && !(character >= ':' && character <= '@') // U+003A - U+0040 (':', ';', '<', '=', '>', '?', '@').
171 && !(character >= '[' && character <= ']') // U+005B - U+005D ('[', '\\' , ']'). 169 && !(character >= '[' && character <= ']') // U+005B - U+005D ('[', '\\' , ']').
172 && character != '{' && character != '}'; 170 && character != '{' && character != '}';
173 return character >= minimumProtocolCharacter && character <= maximumProtocol Character && isNotSeparator; 171 return character >= minimumProtocolCharacter && character <= maximumProtocol Character && isNotSeparator;
174 } 172 }
175 173
176 static bool isValidSubprotocolString(const String& protocol) 174 bool WebSocket::isValidSubprotocolString(const String& protocol)
177 { 175 {
178 if (protocol.isEmpty()) 176 if (protocol.isEmpty())
179 return false; 177 return false;
180 for (size_t i = 0; i < protocol.length(); ++i) { 178 for (size_t i = 0; i < protocol.length(); ++i) {
181 if (!isValidSubprotocolCharacter(protocol[i])) 179 if (!isValidSubprotocolCharacter(protocol[i]))
182 return false; 180 return false;
183 } 181 }
184 return true; 182 return true;
185 } 183 }
186 184
(...skipping 17 matching lines...) Expand all
204 for (size_t i = 0; i < strings.size(); ++i) { 202 for (size_t i = 0; i < strings.size(); ++i) {
205 if (i) 203 if (i)
206 builder.append(separator); 204 builder.append(separator);
207 builder.append(strings[i]); 205 builder.append(strings[i]);
208 } 206 }
209 return builder.toString(); 207 return builder.toString();
210 } 208 }
211 209
212 static unsigned long saturateAdd(unsigned long a, unsigned long b) 210 static unsigned long saturateAdd(unsigned long a, unsigned long b)
213 { 211 {
214 if (numeric_limits<unsigned long>::max() - a < b) 212 if (std::numeric_limits<unsigned long>::max() - a < b)
215 return numeric_limits<unsigned long>::max(); 213 return std::numeric_limits<unsigned long>::max();
216 return a + b; 214 return a + b;
217 } 215 }
218 216
219 static void setInvalidStateErrorForSendMethod(ExceptionState& exceptionState) 217 static void setInvalidStateErrorForSendMethod(ExceptionState& exceptionState)
220 { 218 {
221 exceptionState.throwDOMException(InvalidStateError, "Still in CONNECTING sta te."); 219 exceptionState.throwDOMException(InvalidStateError, "Still in CONNECTING sta te.");
222 } 220 }
223 221
224 const char* WebSocket::subProtocolSeperator() 222 const char* WebSocket::subProtocolSeperator()
225 { 223 {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 Document* document = toDocument(executionContext()); 310 Document* document = toDocument(executionContext());
313 shouldBypassMainWorldContentSecurityPolicy = document->frame()->script() .shouldBypassMainWorldContentSecurityPolicy(); 311 shouldBypassMainWorldContentSecurityPolicy = document->frame()->script() .shouldBypassMainWorldContentSecurityPolicy();
314 } 312 }
315 if (!shouldBypassMainWorldContentSecurityPolicy && !executionContext()->cont entSecurityPolicy()->allowConnectToSource(m_url)) { 313 if (!shouldBypassMainWorldContentSecurityPolicy && !executionContext()->cont entSecurityPolicy()->allowConnectToSource(m_url)) {
316 m_state = CLOSED; 314 m_state = CLOSED;
317 // The URL is safe to expose to JavaScript, as this check happens synchr onously before redirection. 315 // The URL is safe to expose to JavaScript, as this check happens synchr onously before redirection.
318 exceptionState.throwSecurityError("Refused to connect to '" + m_url.elid edString() + "' because it violates the document's Content Security Policy."); 316 exceptionState.throwSecurityError("Refused to connect to '" + m_url.elid edString() + "' because it violates the document's Content Security Policy.");
319 return; 317 return;
320 } 318 }
321 319
322 m_channel = WebSocketChannel::create(executionContext(), this); 320 m_channel = createChannel(executionContext(), this);
323 321
324 for (size_t i = 0; i < protocols.size(); ++i) { 322 for (size_t i = 0; i < protocols.size(); ++i) {
325 if (!isValidSubprotocolString(protocols[i])) { 323 if (!isValidSubprotocolString(protocols[i])) {
326 m_state = CLOSED; 324 m_state = CLOSED;
327 exceptionState.throwDOMException(SyntaxError, "The subprotocol '" + encodeSubprotocolString(protocols[i]) + "' is invalid."); 325 exceptionState.throwDOMException(SyntaxError, "The subprotocol '" + encodeSubprotocolString(protocols[i]) + "' is invalid.");
328 releaseChannel(); 326 releaseChannel();
329 return; 327 return;
330 } 328 }
331 } 329 }
332 HashSet<String> visited; 330 HashSet<String> visited;
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 return overhead; 681 return overhead;
684 } 682 }
685 683
686 void WebSocket::trace(Visitor* visitor) 684 void WebSocket::trace(Visitor* visitor)
687 { 685 {
688 visitor->trace(m_channel); 686 visitor->trace(m_channel);
689 visitor->trace(m_eventQueue); 687 visitor->trace(m_eventQueue);
690 } 688 }
691 689
692 } // namespace WebCore 690 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698