// Copyright 2015 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/chrome_mojo_proxy_resolver_factory.h"

#include <utility>

#include "base/bind.h"
#include "base/logging.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
#include "content/public/common/service_manager_connection.h"
#include "mojo/public/cpp/bindings/strong_binding.h"

ChromeMojoProxyResolverFactory::ChromeMojoProxyResolverFactory() = default;

ChromeMojoProxyResolverFactory::~ChromeMojoProxyResolverFactory() {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}

proxy_resolver::mojom::ProxyResolverFactoryPtr
ChromeMojoProxyResolverFactory::CreateWithStrongBinding() {
  proxy_resolver::mojom::ProxyResolverFactoryPtr proxy_resolver_factory;
  mojo::MakeStrongBinding(std::make_unique<ChromeMojoProxyResolverFactory>(),
                          mojo::MakeRequest(&proxy_resolver_factory));
  return proxy_resolver_factory;
}

void ChromeMojoProxyResolverFactory::CreateResolver(
    const std::string& pac_script,
    proxy_resolver::mojom::ProxyResolverRequest req,
    proxy_resolver::mojom::ProxyResolverFactoryRequestClientPtr client) {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);

  // Bind a ProxyResolverFactory backed by the proxy resolver service, have it
  // create a ProxyResolverFactory and then destroy the factory, to avoid
  // keeping the service alive after all resolvers have been destroyed.
  proxy_resolver::mojom::ProxyResolverFactoryPtr resolver_factory;
  content::ServiceManagerConnection::GetForProcess()
      ->GetConnector()
      ->BindInterface(proxy_resolver::mojom::kProxyResolverServiceName,
                      mojo::MakeRequest(&resolver_factory));
  resolver_factory->CreateResolver(pac_script, std::move(req),
                                   std::move(client));
}
