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) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "media/blink/cache_util.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/format_macros.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string_util.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/stringprintf.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebString.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURLResponse.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebString; 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebURLResponse; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace media { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Inputs & expected output for GetReasonsForUncacheability. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GRFUTestCase { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTPVersion version; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int status_code; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* headers; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 expected_reasons; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Create a new WebURLResponse object. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static WebURLResponse CreateResponse(const GRFUTestCase& test) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse response; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.initialize(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.setHTTPVersion(test.version); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.setHTTPStatusCode(test.status_code); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> lines; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Tokenize(test.headers, "\n", &lines); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < lines.size(); ++i) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t colon = lines[i].find(": "); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) response.addHTTPHeaderField( 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebString::fromUTF8(lines[i].substr(0, colon)), 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebString::fromUTF8(lines[i].substr(colon + 2))); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return response; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(CacheUtilTest, GetReasonsForUncacheability) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum { kNoReasons = 0 }; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GRFUTestCase tests[] = { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_1, 206, "ETag: 'fooblort'", kNoReasons 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_1, 206, "", kNoStrongValidatorOnPartialResponse 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_0, 206, "", 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPre11PartialResponse | kNoStrongValidatorOnPartialResponse 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_1, 200, "cache-control: max-Age=42", kShortMaxAge 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_1, 200, "cache-control: max-Age=4200", kNoReasons 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_1, 200, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Date: Tue, 22 May 2012 23:46:08 GMT\n" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Expires: Tue, 22 May 2012 23:56:08 GMT", kExpiresTooSoon 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_1, 200, "cache-control: must-revalidate", 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kHasMustRevalidate 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_1, 200, "cache-control: no-cache", kNoCache 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_1, 200, "cache-control: no-store", kNoStore 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebURLResponse::HTTP_1_1, 200, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cache-control: no-cache\ncache-control: no-store", kNoCache | kNoStore 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(tests); ++i) { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(base::StringPrintf("case: %" PRIuS 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ", version: %d, code: %d, headers: %s", 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) i, tests[i].version, tests[i].status_code, 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tests[i].headers)); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetReasonsForUncacheability(CreateResponse(tests[i])), 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tests[i].expected_reasons); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace media 98