// Copyright 2019 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/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() {}

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(https://crbug.com/901896): Don't rely on proxying localhost (Relied
  // on by BasicAuthWSConnect)
  command_line->AppendSwitchASCII(
      switches::kProxyBypassList,
      net::ProxyBypassRules::GetRulesToSubtractImplicit());
}
