// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/net/proxy_test_utils.h"

#include "base/test/bind.h"
#include "chrome/common/chrome_switches.h"
#include "content/public/common/content_switches.h"
#include "content/public/test/url_loader_interceptor.h"
#include "google_apis/gaia/gaia_urls.h"
#include "net/proxy_resolution/proxy_bypass_rules.h"

ProxyBrowserTest::ProxyBrowserTest()
    : proxy_server_(net::SpawnedTestServer::TYPE_BASIC_AUTH_PROXY,
                    base::FilePath()) {}

ProxyBrowserTest::~ProxyBrowserTest() = default;

void ProxyBrowserTest::SetUp() {
  ASSERT_TRUE(proxy_server_.Start());
  // Block the GaiaAuthFetcher related requests, they somehow interfere with
  // the test when the network service is running.
  url_loader_interceptor_ = std::make_unique<content::URLLoaderInterceptor>(
      base::BindLambdaForTesting(
          [&](content::URLLoaderInterceptor::RequestParams* params) -> bool {
            if (params->url_request.url.host() ==
                GaiaUrls::GetInstance()->gaia_url().host()) {
              return true;
            }
            return false;
          }));
  InProcessBrowserTest::SetUp();
}

void ProxyBrowserTest::PostRunTestOnMainThread() {
  url_loader_interceptor_.reset();
  InProcessBrowserTest::PostRunTestOnMainThread();
}

void ProxyBrowserTest::SetUpCommandLine(base::CommandLine* command_line) {
  command_line->AppendSwitchASCII(switches::kProxyServer,
                                  proxy_server_.host_port_pair().ToString());

  // TODO(crbug.com/40600992): Don't rely on proxying localhost (Relied
  // on by BasicAuthWSConnect)
  command_line->AppendSwitchASCII(
      switches::kProxyBypassList,
      net::ProxyBypassRules::GetRulesToSubtractImplicit());
}
