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 |