1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/omnibox/browser/remote_suggestions_service.h"
6 
7 #include <memory>
8 #include <string>
9 
10 #include "base/bind.h"
11 #include "base/memory/scoped_refptr.h"
12 #include "base/test/bind.h"
13 #include "base/test/test_mock_time_task_runner.h"
14 #include "components/omnibox/common/omnibox_features.h"
15 #include "components/search_engines/template_url_service.h"
16 #include "net/base/load_flags.h"
17 #include "services/network/public/cpp/resource_request.h"
18 #include "services/network/public/cpp/shared_url_loader_factory.h"
19 #include "services/network/public/cpp/simple_url_loader.h"
20 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
21 #include "services/network/test/test_url_loader_factory.h"
22 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gtest/include/gtest/gtest.h"
24 
25 class RemoteSuggestionsServiceTest : public testing::Test {
26  public:
RemoteSuggestionsServiceTest()27   RemoteSuggestionsServiceTest()
28       : mock_task_runner_(new base::TestMockTimeTaskRunner(
29             base::TestMockTimeTaskRunner::Type::kBoundToThread)) {}
30 
GetUrlLoaderFactory()31   scoped_refptr<network::SharedURLLoaderFactory> GetUrlLoaderFactory() {
32     return base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
33         &test_url_loader_factory_);
34   }
35 
RunAndWait()36   void RunAndWait() { mock_task_runner_->FastForwardUntilNoTasksRemain(); }
37 
OnRequestStart(std::unique_ptr<network::SimpleURLLoader> loader)38   void OnRequestStart(std::unique_ptr<network::SimpleURLLoader> loader) {}
39 
OnRequestComplete(const network::SimpleURLLoader * source,std::unique_ptr<std::string> response_body)40   void OnRequestComplete(const network::SimpleURLLoader* source,
41                          std::unique_ptr<std::string> response_body) {}
42 
43  protected:
44   scoped_refptr<base::TestMockTimeTaskRunner> mock_task_runner_;
45   network::TestURLLoaderFactory test_url_loader_factory_;
46 };
47 
TEST_F(RemoteSuggestionsServiceTest,EnsureAttachCookies)48 TEST_F(RemoteSuggestionsServiceTest, EnsureAttachCookies) {
49   network::ResourceRequest resource_request;
50   test_url_loader_factory_.SetInterceptor(
51       base::BindLambdaForTesting([&](const network::ResourceRequest& request) {
52         resource_request = request;
53       }));
54 
55   RemoteSuggestionsService service(GetUrlLoaderFactory());
56   TemplateURLService template_url_service(nullptr, 0);
57   TemplateURLRef::SearchTermsArgs search_terms_args;
58   search_terms_args.current_page_url = "https://www.google.com/";
59   service.CreateSuggestionsRequest(
60       search_terms_args, &template_url_service,
61       base::BindOnce(&RemoteSuggestionsServiceTest::OnRequestStart,
62                      base::Unretained(this)),
63       base::BindOnce(&RemoteSuggestionsServiceTest::OnRequestComplete,
64                      base::Unretained(this)));
65 
66   RunAndWait();
67   EXPECT_TRUE(resource_request.force_ignore_site_for_cookies);
68   EXPECT_EQ(net::LOAD_DO_NOT_SAVE_COOKIES, resource_request.load_flags);
69   EXPECT_TRUE(resource_request.site_for_cookies.IsEquivalent(
70       net::SiteForCookies::FromUrl(resource_request.url)));
71   const std::string kServiceUri = "https://www.google.com/complete/search";
72   EXPECT_EQ(kServiceUri,
73             resource_request.url.spec().substr(0, kServiceUri.size()));
74 }
75