// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/net/safe_search_util.h" #include "base/message_loop/message_loop.h" #include "base/strings/string_piece.h" #include "net/http/http_request_headers.h" #include "net/url_request/url_request_test_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" class SafeSearchUtilTest : public ::testing::Test { protected: SafeSearchUtilTest() {} virtual ~SafeSearchUtilTest() {} scoped_ptr<net::URLRequest> CreateYoutubeRequest() { return context_.CreateRequest(GURL("http://www.youtube.com"), net::DEFAULT_PRIORITY, NULL, NULL); } scoped_ptr<net::URLRequest> CreateNonYoutubeRequest() { return context_.CreateRequest(GURL("http://www.notyoutube.com"), net::DEFAULT_PRIORITY, NULL, NULL); } static void SetCookie(net::HttpRequestHeaders* headers, const std::string& value) { headers->SetHeader(base::StringPiece(net::HttpRequestHeaders::kCookie), base::StringPiece(value)); } static void CheckHeaders(net::URLRequest* request, const std::string& header_string_original, const std::string& header_string_expected) { net::HttpRequestHeaders headers; SetCookie(&headers, header_string_original); safe_search_util::ForceYouTubeSafetyMode(request, &headers); net::HttpRequestHeaders headers_expected; SetCookie(&headers_expected, header_string_expected); EXPECT_EQ(headers_expected.ToString(), headers.ToString()); } base::MessageLoop message_loop_; net::TestURLRequestContext context_; }; // ForceGoogleSafeSearch is already tested quite extensively in // ChromeNetworkDelegateSafeSearchTest (in chrome_network_delegate_unittest.cc), // so we won't test it again here. TEST_F(SafeSearchUtilTest, CreateYoutubePrefCookie) { scoped_ptr<net::URLRequest> request = CreateYoutubeRequest(); CheckHeaders(request.get(), "OtherCookie=value", "OtherCookie=value; PREF=f2=8000000"); } TEST_F(SafeSearchUtilTest, ModifyYoutubePrefCookie) { scoped_ptr<net::URLRequest> request = CreateYoutubeRequest(); CheckHeaders(request.get(), "PREF=f1=123; OtherCookie=value", "PREF=f1=123&f2=8000000; OtherCookie=value"); CheckHeaders(request.get(), "PREF=", "PREF=f2=8000000"); CheckHeaders(request.get(), "PREF=\"\"", "PREF=\"f2=8000000\""); CheckHeaders(request.get(), "PREF=f1=123&f2=4321&foo=bar", "PREF=f1=123&f2=8004321&foo=bar"); CheckHeaders(request.get(), "PREF=\"f1=1&f2=4321\"; OtherCookie=value", "PREF=\"f1=1&f2=8004321\"; OtherCookie=value"); } TEST_F(SafeSearchUtilTest, DoesntTouchNonYoutubeURL) { scoped_ptr<net::URLRequest> request = CreateNonYoutubeRequest(); CheckHeaders(request.get(), "PREF=f2=0", "PREF=f2=0"); }