// 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/memory/ptr_util.h"
#include "build/build_config.h"

#if defined(USE_X11)
#include "ui/base/dragdrop/os_exchange_data_provider_aurax11.h"
#elif defined(OS_LINUX)
#include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
#elif defined(OS_MACOSX)
#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 {

OSExchangeDataProviderFactory::Factory* factory_ = nullptr;

// static
void OSExchangeDataProviderFactory::SetFactory(Factory* factory) {
  DCHECK(!factory_ || !factory);
  factory_ = factory;
}

// static
OSExchangeDataProviderFactory::Factory*
OSExchangeDataProviderFactory::TakeFactory() {
  OSExchangeDataProviderFactory::Factory* to_return = factory_;
  factory_ = nullptr;
  return to_return;
}

//static
std::unique_ptr<OSExchangeData::Provider>
OSExchangeDataProviderFactory::CreateProvider() {
  if (factory_)
    return factory_->BuildProvider();

#if defined(USE_X11)
  return std::make_unique<OSExchangeDataProviderAuraX11>();
#elif defined(OS_LINUX)
  return std::make_unique<OSExchangeDataProviderAura>();
#elif defined(OS_MACOSX)
  return ui::BuildOSExchangeDataProviderMac();
#elif defined(OS_WIN)
  return std::make_unique<OSExchangeDataProviderWin>();
#elif defined(OS_FUCHSIA)
  // TODO(fuchsia): Implement this when UI support is added. (crbug.com/750934)
  NOTIMPLEMENTED();
  return nullptr;
#else
#error "Unknown operating system"
#endif
}

}  // namespace ui
