| // 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() {} |
| ~SafeSearchUtilTest() override {} |
| |
| 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"); |
| } |