OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 3 * Copyright (C) Research In Motion Limited 2011. 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 are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 } | 249 } |
250 | 250 |
251 PassRefPtr<WebSocketHandshakeRequest> WebSocketHandshake::clientHandshakeRequest
() const | 251 PassRefPtr<WebSocketHandshakeRequest> WebSocketHandshake::clientHandshakeRequest
() const |
252 { | 252 { |
253 // Keep the following consistent with clientHandshakeMessage(). | 253 // Keep the following consistent with clientHandshakeMessage(). |
254 // FIXME: do we need to store m_secWebSocketKey1, m_secWebSocketKey2 and | 254 // FIXME: do we need to store m_secWebSocketKey1, m_secWebSocketKey2 and |
255 // m_key3 in WebSocketHandshakeRequest? | 255 // m_key3 in WebSocketHandshakeRequest? |
256 RefPtr<WebSocketHandshakeRequest> request = WebSocketHandshakeRequest::creat
e("GET", m_url); | 256 RefPtr<WebSocketHandshakeRequest> request = WebSocketHandshakeRequest::creat
e("GET", m_url); |
257 request->addHeaderField("Upgrade", "websocket"); | 257 request->addHeaderField("Upgrade", "websocket"); |
258 request->addHeaderField("Connection", "Upgrade"); | 258 request->addHeaderField("Connection", "Upgrade"); |
259 request->addHeaderField("Host", hostName(m_url, m_secure)); | 259 request->addHeaderField("Host", AtomicString(hostName(m_url, m_secure))); |
260 request->addHeaderField("Origin", clientOrigin()); | 260 request->addHeaderField("Origin", AtomicString(clientOrigin())); |
261 if (!m_clientProtocol.isEmpty()) | 261 if (!m_clientProtocol.isEmpty()) |
262 request->addHeaderField("Sec-WebSocket-Protocol", m_clientProtocol); | 262 request->addHeaderField("Sec-WebSocket-Protocol", AtomicString(m_clientP
rotocol)); |
263 | 263 |
264 KURL url = httpURLForAuthenticationAndCookies(); | 264 KURL url = httpURLForAuthenticationAndCookies(); |
265 if (m_context->isDocument()) { | 265 if (m_context->isDocument()) { |
266 Document* document = toDocument(m_context); | 266 Document* document = toDocument(m_context); |
267 String cookie = cookieRequestHeaderFieldValue(document, url); | 267 String cookie = cookieRequestHeaderFieldValue(document, url); |
268 if (!cookie.isEmpty()) | 268 if (!cookie.isEmpty()) |
269 request->addHeaderField("Cookie", cookie); | 269 request->addHeaderField("Cookie", AtomicString(cookie)); |
270 // Set "Cookie2: <cookie>" if cookies 2 exists for url? | 270 // Set "Cookie2: <cookie>" if cookies 2 exists for url? |
271 } | 271 } |
272 | 272 |
273 request->addHeaderField("Pragma", "no-cache"); | 273 request->addHeaderField("Pragma", "no-cache"); |
274 request->addHeaderField("Cache-Control", "no-cache"); | 274 request->addHeaderField("Cache-Control", "no-cache"); |
275 | 275 |
276 request->addHeaderField("Sec-WebSocket-Key", m_secWebSocketKey); | 276 request->addHeaderField("Sec-WebSocket-Key", AtomicString(m_secWebSocketKey)
); |
277 request->addHeaderField("Sec-WebSocket-Version", "13"); | 277 request->addHeaderField("Sec-WebSocket-Version", "13"); |
278 const String extensionValue = m_extensionDispatcher.createHeaderValue(); | 278 const String extensionValue = m_extensionDispatcher.createHeaderValue(); |
279 if (extensionValue.length()) | 279 if (extensionValue.length()) |
280 request->addHeaderField("Sec-WebSocket-Extensions", extensionValue); | 280 request->addHeaderField("Sec-WebSocket-Extensions", AtomicString(extensi
onValue)); |
281 | 281 |
282 // Add a User-Agent header. | 282 // Add a User-Agent header. |
283 request->addHeaderField("User-Agent", m_context->userAgent(m_context->url())
); | 283 request->addHeaderField("User-Agent", AtomicString(m_context->userAgent(m_co
ntext->url()))); |
284 | 284 |
285 return request.release(); | 285 return request.release(); |
286 } | 286 } |
287 | 287 |
288 void WebSocketHandshake::reset() | 288 void WebSocketHandshake::reset() |
289 { | 289 { |
290 m_mode = Incomplete; | 290 m_mode = Incomplete; |
291 m_extensionDispatcher.reset(); | 291 m_extensionDispatcher.reset(); |
292 } | 292 } |
293 | 293 |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 } | 513 } |
514 m_response.addHeaderField(name, value); | 514 m_response.addHeaderField(name, value); |
515 sawSecWebSocketProtocolHeaderField = true; | 515 sawSecWebSocketProtocolHeaderField = true; |
516 } else { | 516 } else { |
517 m_response.addHeaderField(name, value); | 517 m_response.addHeaderField(name, value); |
518 } | 518 } |
519 } | 519 } |
520 | 520 |
521 String extensions = m_extensionDispatcher.acceptedExtensions(); | 521 String extensions = m_extensionDispatcher.acceptedExtensions(); |
522 if (!extensions.isEmpty()) | 522 if (!extensions.isEmpty()) |
523 m_response.addHeaderField("Sec-WebSocket-Extensions", extensions); | 523 m_response.addHeaderField("Sec-WebSocket-Extensions", AtomicString(exten
sions)); |
524 return p; | 524 return p; |
525 } | 525 } |
526 | 526 |
527 bool WebSocketHandshake::checkResponseHeaders() | 527 bool WebSocketHandshake::checkResponseHeaders() |
528 { | 528 { |
529 const AtomicString& serverWebSocketProtocol = this->serverWebSocketProtocol(
); | 529 const AtomicString& serverWebSocketProtocol = this->serverWebSocketProtocol(
); |
530 const AtomicString& serverUpgrade = this->serverUpgrade(); | 530 const AtomicString& serverUpgrade = this->serverUpgrade(); |
531 const AtomicString& serverConnection = this->serverConnection(); | 531 const AtomicString& serverConnection = this->serverConnection(); |
532 const AtomicString& serverWebSocketAccept = this->serverWebSocketAccept(); | 532 const AtomicString& serverWebSocketAccept = this->serverWebSocketAccept(); |
533 | 533 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 } | 581 } |
582 if (!match) { | 582 if (!match) { |
583 m_failureReason = formatHandshakeFailureReason("Sent non-empty 'Sec-
WebSocket-Protocol' header but no response was received"); | 583 m_failureReason = formatHandshakeFailureReason("Sent non-empty 'Sec-
WebSocket-Protocol' header but no response was received"); |
584 return false; | 584 return false; |
585 } | 585 } |
586 } | 586 } |
587 return true; | 587 return true; |
588 } | 588 } |
589 | 589 |
590 } // namespace WebCore | 590 } // namespace WebCore |
OLD | NEW |