// Copyright 2016 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 "ui/base/dragdrop/os_exchange_data_provider_factory.h"

#include "base/notreached.h"
#include "build/build_config.h"

#if defined(OS_LINUX) || defined(OS_CHROMEOS)
#include "ui/base/dragdrop/os_exchange_data_provider_non_backed.h"
#include "ui/base/ui_base_features.h"
#if defined(USE_OZONE)
#include "ui/base/dragdrop/os_exchange_data_provider_factory_ozone.h"
#endif  // defined(USE_OZONE)
#if defined(USE_X11)
#include "ui/base/dragdrop/os_exchange_data_provider_x11.h"
#endif  // defined(USE_X11)
#elif defined(OS_APPLE)
#include "ui/base/dragdrop/os_exchange_data_provider_builder_mac.h"
#elif defined(OS_WIN)
#include "ui/base/dragdrop/os_exchange_data_provider_win.h"
#endif

namespace ui {

namespace {

#if defined(OS_LINUX) || defined(OS_CHROMEOS)
std::unique_ptr<OSExchangeDataProvider> CreateProviderForLinux() {
#if defined(USE_OZONE)
  // The instance can be nullptr in tests that do not instantiate the platform,
  // or on platforms that do not implement specific drag'n'drop.  For them,
  // falling back to the Aura provider should be fine.
  if (OSExchangeDataProviderFactoryOzone::Instance()) {
    auto provider =
        OSExchangeDataProviderFactoryOzone::Instance()->CreateProvider();
    if (provider)
      return provider;
  }
#endif  // defined(USE_OZONE)
  // non-Ozone X11 is never expected to reach this.
  DCHECK(features::IsUsingOzonePlatform());
  return std::make_unique<OSExchangeDataProviderNonBacked>();
}
#endif  // defined(USE_LINUX)

}  // namespace

// static
std::unique_ptr<OSExchangeDataProvider>
OSExchangeDataProviderFactory::CreateProvider() {
#if defined(OS_LINUX) || defined(OS_CHROMEOS)
  if (features::IsUsingOzonePlatform())
    return CreateProviderForLinux();
#if defined(USE_X11)
  return std::make_unique<OSExchangeDataProviderX11>();
#endif  // defined(USE_X11)
  NOTREACHED();
  return nullptr;
#elif defined(OS_APPLE)
  return BuildOSExchangeDataProviderMac();
#elif defined(OS_WIN)
  return std::make_unique<OSExchangeDataProviderWin>();
#elif defined(OS_FUCHSIA)
  // TODO(crbug.com/980371): Implement OSExchangeDataProvider for Fuchsia.
  NOTIMPLEMENTED();
  return nullptr;
#else
#error "Unknown operating system"
#endif
}

}  // namespace ui
