| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/spdy/spdy_test_util.h" | 5 #include "net/spdy/spdy_test_util.h" | 
| 6 | 6 | 
| 7 #include <string> | 7 #include <string> | 
| 8 | 8 | 
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" | 
| 10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" | 
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 244   if (!*this_value) | 244   if (!*this_value) | 
| 245     this_value = ""; | 245     this_value = ""; | 
| 246   int n = base::snprintf(buffer, | 246   int n = base::snprintf(buffer, | 
| 247                          buffer_length, | 247                          buffer_length, | 
| 248                          "%s: %s\r\n", | 248                          "%s: %s\r\n", | 
| 249                          this_header, | 249                          this_header, | 
| 250                          this_value); | 250                          this_value); | 
| 251   return n; | 251   return n; | 
| 252 } | 252 } | 
| 253 | 253 | 
|  | 254 spdy::SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[], | 
|  | 255                                            int extra_header_count, | 
|  | 256                                            bool compressed, | 
|  | 257                                            int stream_id, | 
|  | 258                                            RequestPriority request_priority, | 
|  | 259                                            spdy::SpdyControlType type, | 
|  | 260                                            spdy::SpdyControlFlags flags, | 
|  | 261                                            const char* const* kHeaders, | 
|  | 262                                            int kHeadersSize) { | 
|  | 263   return ConstructSpdyControlFrame(extra_headers, | 
|  | 264                                    extra_header_count, | 
|  | 265                                    compressed, | 
|  | 266                                    stream_id, | 
|  | 267                                    request_priority, | 
|  | 268                                    type, | 
|  | 269                                    flags, | 
|  | 270                                    kHeaders, | 
|  | 271                                    kHeadersSize, | 
|  | 272                                    0); | 
|  | 273 } | 
|  | 274 | 
|  | 275 spdy::SpdyFrame* ConstructSpdyControlFrame(const char* const extra_headers[], | 
|  | 276                                            int extra_header_count, | 
|  | 277                                            bool compressed, | 
|  | 278                                            int stream_id, | 
|  | 279                                            RequestPriority request_priority, | 
|  | 280                                            spdy::SpdyControlType type, | 
|  | 281                                            spdy::SpdyControlFlags flags, | 
|  | 282                                            const char* const* kHeaders, | 
|  | 283                                            int kHeadersSize, | 
|  | 284                                            int associated_stream_id) { | 
|  | 285   const SpdyHeaderInfo kSynStartHeader = { | 
|  | 286     type,                         // Kind = Syn | 
|  | 287     stream_id,                    // Stream ID | 
|  | 288     associated_stream_id,         // Associated stream ID | 
|  | 289     net::ConvertRequestPriorityToSpdyPriority(request_priority), | 
|  | 290                                   // Priority | 
|  | 291     flags,                        // Control Flags | 
|  | 292     compressed,                   // Compressed | 
|  | 293     spdy::INVALID,                // Status | 
|  | 294     NULL,                         // Data | 
|  | 295     0,                            // Length | 
|  | 296     spdy::DATA_FLAG_NONE          // Data Flags | 
|  | 297   }; | 
|  | 298   return ConstructSpdyPacket(kSynStartHeader, | 
|  | 299                              extra_headers, | 
|  | 300                              extra_header_count, | 
|  | 301                              kHeaders, | 
|  | 302                              kHeadersSize / 2); | 
|  | 303 } | 
|  | 304 | 
| 254 // Constructs a standard SPDY GET SYN packet, optionally compressed | 305 // Constructs a standard SPDY GET SYN packet, optionally compressed | 
| 255 // for the url |url|. | 306 // for the url |url|. | 
| 256 // |extra_headers| are the extra header-value pairs, which typically | 307 // |extra_headers| are the extra header-value pairs, which typically | 
| 257 // will vary the most between calls. | 308 // will vary the most between calls. | 
| 258 // Returns a SpdyFrame. | 309 // Returns a SpdyFrame. | 
| 259 spdy::SpdyFrame* ConstructSpdyGet(const char* const url, | 310 spdy::SpdyFrame* ConstructSpdyGet(const char* const url, | 
| 260                                   bool compressed, | 311                                   bool compressed, | 
| 261                                   int stream_id, | 312                                   int stream_id, | 
| 262                                   RequestPriority request_priority) { | 313                                   RequestPriority request_priority) { | 
| 263   const SpdyHeaderInfo kSynStartHeader = { | 314   const SpdyHeaderInfo kSynStartHeader = { | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 312 | 363 | 
| 313 // Constructs a standard SPDY GET SYN packet, optionally compressed. | 364 // Constructs a standard SPDY GET SYN packet, optionally compressed. | 
| 314 // |extra_headers| are the extra header-value pairs, which typically | 365 // |extra_headers| are the extra header-value pairs, which typically | 
| 315 // will vary the most between calls. | 366 // will vary the most between calls. | 
| 316 // Returns a SpdyFrame. | 367 // Returns a SpdyFrame. | 
| 317 spdy::SpdyFrame* ConstructSpdyGet(const char* const extra_headers[], | 368 spdy::SpdyFrame* ConstructSpdyGet(const char* const extra_headers[], | 
| 318                                   int extra_header_count, | 369                                   int extra_header_count, | 
| 319                                   bool compressed, | 370                                   bool compressed, | 
| 320                                   int stream_id, | 371                                   int stream_id, | 
| 321                                   RequestPriority request_priority) { | 372                                   RequestPriority request_priority) { | 
| 322   const SpdyHeaderInfo kSynStartHeader = { |  | 
| 323     spdy::SYN_STREAM,             // Kind = Syn |  | 
| 324     stream_id,                    // Stream ID |  | 
| 325     0,                            // Associated stream ID |  | 
| 326     net::ConvertRequestPriorityToSpdyPriority(request_priority), |  | 
| 327                                   // Priority |  | 
| 328     spdy::CONTROL_FLAG_FIN,       // Control Flags |  | 
| 329     compressed,                   // Compressed |  | 
| 330     spdy::INVALID,                // Status |  | 
| 331     NULL,                         // Data |  | 
| 332     0,                            // Length |  | 
| 333     spdy::DATA_FLAG_NONE          // Data Flags |  | 
| 334   }; |  | 
| 335   static const char* const kStandardGetHeaders[] = { | 373   static const char* const kStandardGetHeaders[] = { | 
| 336     "method", | 374     "method", | 
| 337     "GET", | 375     "GET", | 
| 338     "url", | 376     "url", | 
| 339     "/", | 377     "/", | 
| 340     "host", | 378     "host", | 
| 341     "www.google.com", | 379     "www.google.com", | 
| 342     "scheme", | 380     "scheme", | 
| 343     "http", | 381     "http", | 
| 344     "version", | 382     "version", | 
| 345     "HTTP/1.1" | 383     "HTTP/1.1" | 
| 346   }; | 384   }; | 
| 347   return ConstructSpdyPacket( | 385   return ConstructSpdyControlFrame(extra_headers, | 
| 348       kSynStartHeader, | 386                                    extra_header_count, | 
| 349       extra_headers, | 387                                    compressed, | 
| 350       extra_header_count, | 388                                    stream_id, | 
| 351       kStandardGetHeaders, | 389                                    request_priority, | 
| 352       arraysize(kStandardGetHeaders) / 2); | 390                                    spdy::SYN_STREAM, | 
|  | 391                                    spdy::CONTROL_FLAG_FIN, | 
|  | 392                                    kStandardGetHeaders, | 
|  | 393                                    arraysize(kStandardGetHeaders)); | 
|  | 394 } | 
|  | 395 | 
|  | 396 // Constructs a standard SPDY push SYN packet. | 
|  | 397 // |extra_headers| are the extra header-value pairs, which typically | 
|  | 398 // will vary the most between calls. | 
|  | 399 // Returns a SpdyFrame. | 
|  | 400 spdy::SpdyFrame* ConstructSpdyPush(const char* const extra_headers[], | 
|  | 401                                    int extra_header_count, | 
|  | 402                                    int stream_id, | 
|  | 403                                    int associated_stream_id) { | 
|  | 404   const char* const kStandardGetHeaders[] = { | 
|  | 405     "hello", | 
|  | 406     "bye", | 
|  | 407     "status", | 
|  | 408     "200", | 
|  | 409     "version", | 
|  | 410     "HTTP/1.1" | 
|  | 411   }; | 
|  | 412   return ConstructSpdyControlFrame(extra_headers, | 
|  | 413                                    extra_header_count, | 
|  | 414                                    false, | 
|  | 415                                    stream_id, | 
|  | 416                                    LOWEST, | 
|  | 417                                    spdy::SYN_STREAM, | 
|  | 418                                    spdy::CONTROL_FLAG_NONE, | 
|  | 419                                    kStandardGetHeaders, | 
|  | 420                                    arraysize(kStandardGetHeaders), | 
|  | 421                                    associated_stream_id); | 
|  | 422 } | 
|  | 423 | 
|  | 424 spdy::SpdyFrame* ConstructSpdyPush(const char* const extra_headers[], | 
|  | 425                                    int extra_header_count, | 
|  | 426                                    int stream_id, | 
|  | 427                                    int associated_stream_id, | 
|  | 428                                    const char* path) { | 
|  | 429   const char* const kStandardGetHeaders[] = { | 
|  | 430     "hello", | 
|  | 431     "bye", | 
|  | 432     "path", | 
|  | 433     path, | 
|  | 434     "status", | 
|  | 435     "200 OK", | 
|  | 436     "url", | 
|  | 437     path, | 
|  | 438     "version", | 
|  | 439     "HTTP/1.1" | 
|  | 440   }; | 
|  | 441   return ConstructSpdyControlFrame(extra_headers, | 
|  | 442                                    extra_header_count, | 
|  | 443                                    false, | 
|  | 444                                    stream_id, | 
|  | 445                                    LOWEST, | 
|  | 446                                    spdy::SYN_STREAM, | 
|  | 447                                    spdy::CONTROL_FLAG_NONE, | 
|  | 448                                    kStandardGetHeaders, | 
|  | 449                                    arraysize(kStandardGetHeaders), | 
|  | 450                                    associated_stream_id); | 
|  | 451 | 
|  | 452 } | 
|  | 453 spdy::SpdyFrame* ConstructSpdyPush(const char* const extra_headers[], | 
|  | 454                                    int extra_header_count, | 
|  | 455                                    int stream_id, | 
|  | 456                                    int associated_stream_id, | 
|  | 457                                    const char* path, | 
|  | 458                                    const char* status, | 
|  | 459                                    const char* location, | 
|  | 460                                    const char* url) { | 
|  | 461   const char* const kStandardGetHeaders[] = { | 
|  | 462     "hello", | 
|  | 463     "bye", | 
|  | 464     "path", | 
|  | 465     path, | 
|  | 466     "status", | 
|  | 467     status, | 
|  | 468     "location", | 
|  | 469     location, | 
|  | 470     "url", | 
|  | 471     url, | 
|  | 472     "version", | 
|  | 473     "HTTP/1.1" | 
|  | 474   }; | 
|  | 475   return ConstructSpdyControlFrame(extra_headers, | 
|  | 476                                    extra_header_count, | 
|  | 477                                    false, | 
|  | 478                                    stream_id, | 
|  | 479                                    LOWEST, | 
|  | 480                                    spdy::SYN_STREAM, | 
|  | 481                                    spdy::CONTROL_FLAG_NONE, | 
|  | 482                                    kStandardGetHeaders, | 
|  | 483                                    arraysize(kStandardGetHeaders), | 
|  | 484                                    associated_stream_id); | 
| 353 } | 485 } | 
| 354 | 486 | 
| 355 // Constructs a standard SPDY SYN_REPLY packet to match the SPDY GET. | 487 // Constructs a standard SPDY SYN_REPLY packet to match the SPDY GET. | 
|  | 488 // |extra_headers| are the extra header-value pairs, which typically | 
|  | 489 // will vary the most between calls. | 
|  | 490 // Returns a SpdyFrame. | 
|  | 491 spdy::SpdyFrame* ConstructSpdyGetSynReplyRedirect(int stream_id) { | 
|  | 492   static const char* const kStandardGetHeaders[] = { | 
|  | 493     "hello", | 
|  | 494     "bye", | 
|  | 495     "status", | 
|  | 496     "301 Moved Permanently", | 
|  | 497     "location", | 
|  | 498     "http://www.foo.com/index.php", | 
|  | 499     "version", | 
|  | 500     "HTTP/1.1" | 
|  | 501   }; | 
|  | 502   return ConstructSpdyControlFrame(NULL, | 
|  | 503                                    0, | 
|  | 504                                    false, | 
|  | 505                                    stream_id, | 
|  | 506                                    LOWEST, | 
|  | 507                                    spdy::SYN_REPLY, | 
|  | 508                                    spdy::CONTROL_FLAG_NONE, | 
|  | 509                                    kStandardGetHeaders, | 
|  | 510                                    arraysize(kStandardGetHeaders)); | 
|  | 511 } | 
|  | 512 | 
|  | 513 // Constructs a standard SPDY SYN_REPLY packet to match the SPDY GET. | 
| 356 // |extra_headers| are the extra header-value pairs, which typically | 514 // |extra_headers| are the extra header-value pairs, which typically | 
| 357 // will vary the most between calls. | 515 // will vary the most between calls. | 
| 358 // Returns a SpdyFrame. | 516 // Returns a SpdyFrame. | 
| 359 spdy::SpdyFrame* ConstructSpdyGetSynReply(const char* const extra_headers[], | 517 spdy::SpdyFrame* ConstructSpdyGetSynReply(const char* const extra_headers[], | 
| 360                                           int extra_header_count, | 518                                           int extra_header_count, | 
| 361                                           int stream_id) { | 519                                           int stream_id) { | 
| 362   const SpdyHeaderInfo kSynStartHeader = { |  | 
| 363     spdy::SYN_REPLY,              // Kind = SynReply |  | 
| 364     stream_id,                    // Stream ID |  | 
| 365     0,                            // Associated stream ID |  | 
| 366     net::ConvertRequestPriorityToSpdyPriority(LOWEST), |  | 
| 367                                   // Priority |  | 
| 368     spdy::CONTROL_FLAG_NONE,      // Control Flags |  | 
| 369     false,                        // Compressed |  | 
| 370     spdy::INVALID,                // Status |  | 
| 371     NULL,                         // Data |  | 
| 372     0,                            // Length |  | 
| 373     spdy::DATA_FLAG_NONE          // Data Flags |  | 
| 374   }; |  | 
| 375   static const char* const kStandardGetHeaders[] = { | 520   static const char* const kStandardGetHeaders[] = { | 
| 376     "hello", | 521     "hello", | 
| 377     "bye", | 522     "bye", | 
| 378     "status", | 523     "status", | 
| 379     "200", | 524     "200", | 
| 380     "url", | 525     "url", | 
| 381     "/index.php", | 526     "/index.php", | 
| 382     "version", | 527     "version", | 
| 383     "HTTP/1.1" | 528     "HTTP/1.1" | 
| 384   }; | 529   }; | 
| 385   return ConstructSpdyPacket( | 530   return ConstructSpdyControlFrame(extra_headers, | 
| 386       kSynStartHeader, | 531                                    extra_header_count, | 
| 387       extra_headers, | 532                                    false, | 
| 388       extra_header_count, | 533                                    stream_id, | 
| 389       kStandardGetHeaders, | 534                                    LOWEST, | 
| 390       arraysize(kStandardGetHeaders) / 2); | 535                                    spdy::SYN_REPLY, | 
|  | 536                                    spdy::CONTROL_FLAG_NONE, | 
|  | 537                                    kStandardGetHeaders, | 
|  | 538                                    arraysize(kStandardGetHeaders)); | 
| 391 } | 539 } | 
| 392 | 540 | 
| 393 // Constructs a standard SPDY POST SYN packet. | 541 // Constructs a standard SPDY POST SYN packet. | 
| 394 // |content_length| is the size of post data. | 542 // |content_length| is the size of post data. | 
| 395 // |extra_headers| are the extra header-value pairs, which typically | 543 // |extra_headers| are the extra header-value pairs, which typically | 
| 396 // will vary the most between calls. | 544 // will vary the most between calls. | 
| 397 // Returns a SpdyFrame. | 545 // Returns a SpdyFrame. | 
| 398 spdy::SpdyFrame* ConstructSpdyPost(int64 content_length, | 546 spdy::SpdyFrame* ConstructSpdyPost(int64 content_length, | 
| 399                                    const char* const extra_headers[], | 547                                    const char* const extra_headers[], | 
| 400                                    int extra_header_count) { | 548                                    int extra_header_count) { | 
| 401   const SpdyHeaderInfo kSynStartHeader = { |  | 
| 402     spdy::SYN_STREAM,             // Kind = Syn |  | 
| 403     1,                            // Stream ID |  | 
| 404     0,                            // Associated stream ID |  | 
| 405     net::ConvertRequestPriorityToSpdyPriority(LOWEST), |  | 
| 406                                   // Priority |  | 
| 407     spdy::CONTROL_FLAG_NONE,      // Control Flags |  | 
| 408     false,                        // Compressed |  | 
| 409     spdy::INVALID,                // Status |  | 
| 410     NULL,                         // Data |  | 
| 411     0,                            // Length |  | 
| 412     spdy::DATA_FLAG_NONE          // Data Flags |  | 
| 413   }; |  | 
| 414   std::string length_str = base::Int64ToString(content_length); | 549   std::string length_str = base::Int64ToString(content_length); | 
| 415   const char* post_headers[] = { | 550   const char* post_headers[] = { | 
| 416     "method", | 551     "method", | 
| 417     "POST", | 552     "POST", | 
| 418     "url", | 553     "url", | 
| 419     "/", | 554     "/", | 
| 420     "host", | 555     "host", | 
| 421     "www.google.com", | 556     "www.google.com", | 
| 422     "scheme", | 557     "scheme", | 
| 423     "http", | 558     "http", | 
| 424     "version", | 559     "version", | 
| 425     "HTTP/1.1", | 560     "HTTP/1.1", | 
| 426     "content-length", | 561     "content-length", | 
| 427     length_str.c_str() | 562     length_str.c_str() | 
| 428   }; | 563   }; | 
| 429   return ConstructSpdyPacket( | 564   return ConstructSpdyControlFrame(extra_headers, | 
| 430       kSynStartHeader, | 565                                    extra_header_count, | 
| 431       extra_headers, | 566                                    false, | 
| 432       extra_header_count, | 567                                    1, | 
| 433       post_headers, | 568                                    LOWEST, | 
| 434       arraysize(post_headers) / 2); | 569                                    spdy::SYN_STREAM, | 
|  | 570                                    spdy::CONTROL_FLAG_NONE, | 
|  | 571                                    post_headers, | 
|  | 572                                    arraysize(post_headers)); | 
| 435 } | 573 } | 
| 436 | 574 | 
| 437 // Constructs a standard SPDY SYN_REPLY packet to match the SPDY POST. | 575 // Constructs a standard SPDY SYN_REPLY packet to match the SPDY POST. | 
| 438 // |extra_headers| are the extra header-value pairs, which typically | 576 // |extra_headers| are the extra header-value pairs, which typically | 
| 439 // will vary the most between calls. | 577 // will vary the most between calls. | 
| 440 // Returns a SpdyFrame. | 578 // Returns a SpdyFrame. | 
| 441 spdy::SpdyFrame* ConstructSpdyPostSynReply(const char* const extra_headers[], | 579 spdy::SpdyFrame* ConstructSpdyPostSynReply(const char* const extra_headers[], | 
| 442                                            int extra_header_count) { | 580                                            int extra_header_count) { | 
| 443   const SpdyHeaderInfo kSynStartHeader = { |  | 
| 444     spdy::SYN_REPLY,              // Kind = SynReply |  | 
| 445     1,                            // Stream ID |  | 
| 446     0,                            // Associated stream ID |  | 
| 447     net::ConvertRequestPriorityToSpdyPriority(LOWEST), |  | 
| 448                                   // Priority |  | 
| 449     spdy::CONTROL_FLAG_NONE,      // Control Flags |  | 
| 450     false,                        // Compressed |  | 
| 451     spdy::INVALID,                // Status |  | 
| 452     NULL,                         // Data |  | 
| 453     0,                            // Length |  | 
| 454     spdy::DATA_FLAG_NONE          // Data Flags |  | 
| 455   }; |  | 
| 456   static const char* const kStandardGetHeaders[] = { | 581   static const char* const kStandardGetHeaders[] = { | 
| 457     "hello", | 582     "hello", | 
| 458     "bye", | 583     "bye", | 
| 459     "status", | 584     "status", | 
| 460     "200", | 585     "200", | 
| 461     "url", | 586     "url", | 
| 462     "/index.php", | 587     "/index.php", | 
| 463     "version", | 588     "version", | 
| 464     "HTTP/1.1" | 589     "HTTP/1.1" | 
| 465   }; | 590   }; | 
| 466   return ConstructSpdyPacket( | 591   return ConstructSpdyControlFrame(extra_headers, | 
| 467       kSynStartHeader, | 592                                    extra_header_count, | 
| 468       extra_headers, | 593                                    false, | 
| 469       extra_header_count, | 594                                    1, | 
| 470       kStandardGetHeaders, | 595                                    LOWEST, | 
| 471       arraysize(kStandardGetHeaders) / 2); | 596                                    spdy::SYN_REPLY, | 
|  | 597                                    spdy::CONTROL_FLAG_NONE, | 
|  | 598                                    kStandardGetHeaders, | 
|  | 599                                    arraysize(kStandardGetHeaders)); | 
| 472 } | 600 } | 
| 473 | 601 | 
| 474 // Constructs a single SPDY data frame with the contents "hello!" | 602 // Constructs a single SPDY data frame with the contents "hello!" | 
| 475 spdy::SpdyFrame* ConstructSpdyBodyFrame(int stream_id, bool fin) { | 603 spdy::SpdyFrame* ConstructSpdyBodyFrame(int stream_id, bool fin) { | 
| 476   spdy::SpdyFramer framer; | 604   spdy::SpdyFramer framer; | 
| 477   return | 605   return | 
| 478       framer.CreateDataFrame(stream_id, "hello!", 6, | 606       framer.CreateDataFrame(stream_id, "hello!", 6, | 
| 479                              fin ? spdy::DATA_FLAG_FIN : spdy::DATA_FLAG_NONE); | 607                              fin ? spdy::DATA_FLAG_FIN : spdy::DATA_FLAG_NONE); | 
| 480 } | 608 } | 
| 481 | 609 | 
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 600 } | 728 } | 
| 601 | 729 | 
| 602 // This creates a proxy for testing purposes. | 730 // This creates a proxy for testing purposes. | 
| 603 // |proxy| should be in the form "myproxy:70". | 731 // |proxy| should be in the form "myproxy:70". | 
| 604 ProxyService* SpdyCreateFixedProxyService(const std::string& proxy) { | 732 ProxyService* SpdyCreateFixedProxyService(const std::string& proxy) { | 
| 605   net::ProxyConfig proxy_config; | 733   net::ProxyConfig proxy_config; | 
| 606   proxy_config.proxy_rules().ParseFromString(proxy); | 734   proxy_config.proxy_rules().ParseFromString(proxy); | 
| 607   return ProxyService::CreateFixed(proxy_config); | 735   return ProxyService::CreateFixed(proxy_config); | 
| 608 } | 736 } | 
| 609 | 737 | 
|  | 738 const SpdyHeaderInfo make_spdy_header(spdy::SpdyControlType type) { | 
|  | 739   const SpdyHeaderInfo kHeader = { | 
|  | 740     type,                         // Kind = Syn | 
|  | 741     1,                            // Stream ID | 
|  | 742     0,                            // Associated stream ID | 
|  | 743     2,                            // Priority | 
|  | 744     spdy::CONTROL_FLAG_FIN,       // Control Flags | 
|  | 745     false,                        // Compressed | 
|  | 746     spdy::INVALID,                // Status | 
|  | 747     NULL,                         // Data | 
|  | 748     0,                            // Length | 
|  | 749     spdy::DATA_FLAG_NONE          // Data Flags | 
|  | 750   }; | 
|  | 751   return kHeader; | 
|  | 752 } | 
| 610 }  // namespace net | 753 }  // namespace net | 
| OLD | NEW | 
|---|