1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CONTENT_RENDERER_MEDIA_TEST_RESPONSE_GENERATOR_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CONTENT_RENDERER_MEDIA_TEST_RESPONSE_GENERATOR_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLError.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLResponse.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace content {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Generates WebURLErrors and WebURLResponses suitable for testing purposes.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestResponseGenerator {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum Flags {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kNormal = 0,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kNoAcceptRanges = 1 << 0,   // Don't include Accept-Ranges in 206 response.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kNoContentRange = 1 << 1,   // Don't include Content-Range in 206 response.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kNoContentLength = 1 << 2,  // Don't include Content-Length in 206 response.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    kNoContentRangeInstanceSize = 1 << 3,  // Content-Range: N-M/* in 206.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Build an HTTP response generator for the given URL. |content_length| is
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // used to generate Content-Length and Content-Range headers.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestResponseGenerator(const GURL& gurl, int64 content_length);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Generates a WebURLError object.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebKit::WebURLError GenerateError();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Generates a regular HTTP 200 response.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebKit::WebURLResponse Generate200();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Generates a regular HTTP 206 response starting from |first_byte_offset|
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // until the end of the resource.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebKit::WebURLResponse Generate206(int64 first_byte_offset);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Generates a custom HTTP 206 response starting from |first_byte_offset|
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // until the end of the resource. You can tweak what gets included in the
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // headers via |flags|.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebKit::WebURLResponse Generate206(int64 first_byte_offset, Flags flags);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Generates a regular HTTP 404 response.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebKit::WebURLResponse Generate404();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Generates a file:// response starting from |first_byte_offset| until the
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // end of the resource.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If |first_byte_offset| is negative a response containing no content length
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // will be returned.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebKit::WebURLResponse GenerateFileResponse(int64 first_byte_offset);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 content_length() { return content_length_; }
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL gurl_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 content_length_;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestResponseGenerator);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace content
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // CONTENT_RENDERER_MEDIA_TEST_RESPONSE_GENERATOR_H_
67