| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/websockets/websocket_frame_parser.h" | 5 #include "net/websockets/websocket_frame_parser.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 { "\x81\x06" "Second", 8, "Second", 6 }, | 119 { "\x81\x06" "Second", 8, "Second", 6 }, |
| 120 { "\x81\x05" "Third", 7, "Third", 5 }, | 120 { "\x81\x05" "Third", 7, "Third", 5 }, |
| 121 { "\x81\x06" "Fourth", 8, "Fourth", 6 }, | 121 { "\x81\x06" "Fourth", 8, "Fourth", 6 }, |
| 122 { "\x81\x05" "Fifth", 7, "Fifth", 5 }, | 122 { "\x81\x05" "Fifth", 7, "Fifth", 5 }, |
| 123 { "\x81\x05" "Sixth", 7, "Sixth", 5 }, | 123 { "\x81\x05" "Sixth", 7, "Sixth", 5 }, |
| 124 { "\x81\x07" "Seventh", 9, "Seventh", 7 }, | 124 { "\x81\x07" "Seventh", 9, "Seventh", 7 }, |
| 125 { "\x81\x06" "Eighth", 8, "Eighth", 6 }, | 125 { "\x81\x06" "Eighth", 8, "Eighth", 6 }, |
| 126 { "\x81\x05" "Ninth", 7, "Ninth", 5 }, | 126 { "\x81\x05" "Ninth", 7, "Ninth", 5 }, |
| 127 { "\x81\x05" "Tenth", 7, "Tenth", 5 } | 127 { "\x81\x05" "Tenth", 7, "Tenth", 5 } |
| 128 }; | 128 }; |
| 129 static const int kNumInputs = ARRAYSIZE_UNSAFE(kInputs); | 129 static const int kNumInputs = arraysize(kInputs); |
| 130 | 130 |
| 131 std::vector<char> input; | 131 std::vector<char> input; |
| 132 // Concatenate all frames. | 132 // Concatenate all frames. |
| 133 for (int i = 0; i < kNumInputs; ++i) { | 133 for (int i = 0; i < kNumInputs; ++i) { |
| 134 input.insert(input.end(), | 134 input.insert(input.end(), |
| 135 kInputs[i].frame, | 135 kInputs[i].frame, |
| 136 kInputs[i].frame + kInputs[i].frame_length); | 136 kInputs[i].frame + kInputs[i].frame_length); |
| 137 } | 137 } |
| 138 | 138 |
| 139 WebSocketFrameParser parser; | 139 WebSocketFrameParser parser; |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 static const TestCase kTests[] = { | 425 static const TestCase kTests[] = { |
| 426 // For frames with two-byte extended length field, the payload length | 426 // For frames with two-byte extended length field, the payload length |
| 427 // should be 126 (0x7E) bytes or more. | 427 // should be 126 (0x7E) bytes or more. |
| 428 { "\x81\x7E\x00\x00", 4 }, | 428 { "\x81\x7E\x00\x00", 4 }, |
| 429 { "\x81\x7E\x00\x7D", 4 }, | 429 { "\x81\x7E\x00\x7D", 4 }, |
| 430 // For frames with eight-byte extended length field, the payload length | 430 // For frames with eight-byte extended length field, the payload length |
| 431 // should be 0x10000 bytes or more. | 431 // should be 0x10000 bytes or more. |
| 432 { "\x81\x7F\x00\x00\x00\x00\x00\x00\x00\x00", 10 }, | 432 { "\x81\x7F\x00\x00\x00\x00\x00\x00\x00\x00", 10 }, |
| 433 { "\x81\x7E\x00\x00\x00\x00\x00\x00\xFF\xFF", 10 }, | 433 { "\x81\x7E\x00\x00\x00\x00\x00\x00\xFF\xFF", 10 }, |
| 434 }; | 434 }; |
| 435 static const int kNumTests = ARRAYSIZE_UNSAFE(kTests); | 435 static const int kNumTests = arraysize(kTests); |
| 436 | 436 |
| 437 for (int i = 0; i < kNumTests; ++i) { | 437 for (int i = 0; i < kNumTests; ++i) { |
| 438 const char* frame_header = kTests[i].frame_header; | 438 const char* frame_header = kTests[i].frame_header; |
| 439 size_t frame_header_length = kTests[i].frame_header_length; | 439 size_t frame_header_length = kTests[i].frame_header_length; |
| 440 | 440 |
| 441 WebSocketFrameParser parser; | 441 WebSocketFrameParser parser; |
| 442 | 442 |
| 443 ScopedVector<WebSocketFrameChunk> frames; | 443 ScopedVector<WebSocketFrameChunk> frames; |
| 444 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error()); | 444 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error()); |
| 445 EXPECT_FALSE(parser.Decode(frame_header, frame_header_length, &frames)); | 445 EXPECT_FALSE(parser.Decode(frame_header, frame_header_length, &frames)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 473 { "\x84\x00", 2, 0x4 }, | 473 { "\x84\x00", 2, 0x4 }, |
| 474 { "\x85\x00", 2, 0x5 }, | 474 { "\x85\x00", 2, 0x5 }, |
| 475 { "\x86\x00", 2, 0x6 }, | 475 { "\x86\x00", 2, 0x6 }, |
| 476 { "\x87\x00", 2, 0x7 }, | 476 { "\x87\x00", 2, 0x7 }, |
| 477 { "\x8B\x00", 2, 0xB }, | 477 { "\x8B\x00", 2, 0xB }, |
| 478 { "\x8C\x00", 2, 0xC }, | 478 { "\x8C\x00", 2, 0xC }, |
| 479 { "\x8D\x00", 2, 0xD }, | 479 { "\x8D\x00", 2, 0xD }, |
| 480 { "\x8E\x00", 2, 0xE }, | 480 { "\x8E\x00", 2, 0xE }, |
| 481 { "\x8F\x00", 2, 0xF } | 481 { "\x8F\x00", 2, 0xF } |
| 482 }; | 482 }; |
| 483 static const int kNumTests = ARRAYSIZE_UNSAFE(kTests); | 483 static const int kNumTests = arraysize(kTests); |
| 484 | 484 |
| 485 for (int i = 0; i < kNumTests; ++i) { | 485 for (int i = 0; i < kNumTests; ++i) { |
| 486 const char* frame_header = kTests[i].frame_header; | 486 const char* frame_header = kTests[i].frame_header; |
| 487 size_t frame_header_length = kTests[i].frame_header_length; | 487 size_t frame_header_length = kTests[i].frame_header_length; |
| 488 WebSocketFrameHeader::OpCode opcode = kTests[i].opcode; | 488 WebSocketFrameHeader::OpCode opcode = kTests[i].opcode; |
| 489 | 489 |
| 490 WebSocketFrameParser parser; | 490 WebSocketFrameParser parser; |
| 491 | 491 |
| 492 ScopedVector<WebSocketFrameChunk> frames; | 492 ScopedVector<WebSocketFrameChunk> frames; |
| 493 EXPECT_TRUE(parser.Decode(frame_header, frame_header_length, &frames)); | 493 EXPECT_TRUE(parser.Decode(frame_header, frame_header_length, &frames)); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 }; | 526 }; |
| 527 static const TestCase kTests[] = { | 527 static const TestCase kTests[] = { |
| 528 { "\x81\x00", 2, true, false, false, false }, | 528 { "\x81\x00", 2, true, false, false, false }, |
| 529 { "\x01\x00", 2, false, false, false, false }, | 529 { "\x01\x00", 2, false, false, false, false }, |
| 530 { "\xC1\x00", 2, true, true, false, false }, | 530 { "\xC1\x00", 2, true, true, false, false }, |
| 531 { "\xA1\x00", 2, true, false, true, false }, | 531 { "\xA1\x00", 2, true, false, true, false }, |
| 532 { "\x91\x00", 2, true, false, false, true }, | 532 { "\x91\x00", 2, true, false, false, true }, |
| 533 { "\x71\x00", 2, false, true, true, true }, | 533 { "\x71\x00", 2, false, true, true, true }, |
| 534 { "\xF1\x00", 2, true, true, true, true } | 534 { "\xF1\x00", 2, true, true, true, true } |
| 535 }; | 535 }; |
| 536 static const int kNumTests = ARRAYSIZE_UNSAFE(kTests); | 536 static const int kNumTests = arraysize(kTests); |
| 537 | 537 |
| 538 for (int i = 0; i < kNumTests; ++i) { | 538 for (int i = 0; i < kNumTests; ++i) { |
| 539 const char* frame_header = kTests[i].frame_header; | 539 const char* frame_header = kTests[i].frame_header; |
| 540 size_t frame_header_length = kTests[i].frame_header_length; | 540 size_t frame_header_length = kTests[i].frame_header_length; |
| 541 bool final = kTests[i].final; | 541 bool final = kTests[i].final; |
| 542 bool reserved1 = kTests[i].reserved1; | 542 bool reserved1 = kTests[i].reserved1; |
| 543 bool reserved2 = kTests[i].reserved2; | 543 bool reserved2 = kTests[i].reserved2; |
| 544 bool reserved3 = kTests[i].reserved3; | 544 bool reserved3 = kTests[i].reserved3; |
| 545 | 545 |
| 546 WebSocketFrameParser parser; | 546 WebSocketFrameParser parser; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 567 EXPECT_EQ(reserved3, header->reserved3); | 567 EXPECT_EQ(reserved3, header->reserved3); |
| 568 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header->opcode); | 568 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header->opcode); |
| 569 EXPECT_FALSE(header->masked); | 569 EXPECT_FALSE(header->masked); |
| 570 EXPECT_EQ(0u, header->payload_length); | 570 EXPECT_EQ(0u, header->payload_length); |
| 571 } | 571 } |
| 572 } | 572 } |
| 573 | 573 |
| 574 } // Unnamed namespace | 574 } // Unnamed namespace |
| 575 | 575 |
| 576 } // namespace net | 576 } // namespace net |
| OLD | NEW |