| 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 |