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