blob: 4b965dddb9a5d9b887071b6fa621f1425e25e78c [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// 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 BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FUCHSIA)
#include "ui/base/dragdrop/os_exchange_data_provider_factory_ozone.h"
#include "ui/base/dragdrop/os_exchange_data_provider_non_backed.h"
#elif BUILDFLAG(IS_APPLE)
#include "ui/base/dragdrop/os_exchange_data_provider_builder_mac.h"
#elif BUILDFLAG(IS_WIN)
#include "ui/base/dragdrop/os_exchange_data_provider_win.h"
#endif
namespace ui {
// static
std::unique_ptr<OSExchangeDataProvider>
OSExchangeDataProviderFactory::CreateProvider() {
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
// 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 (auto* factory = OSExchangeDataProviderFactoryOzone::Instance()) {
auto provider = factory->CreateProvider();
if (provider)
return provider;
}
return std::make_unique<OSExchangeDataProviderNonBacked>();
#elif BUILDFLAG(IS_APPLE)
return BuildOSExchangeDataProviderMac();
#elif BUILDFLAG(IS_WIN)
return std::make_unique<OSExchangeDataProviderWin>();
#elif BUILDFLAG(IS_FUCHSIA)
// TODO(crbug.com/42050646): Implement OSExchangeDataProvider for Fuchsia.
return std::make_unique<OSExchangeDataProviderNonBacked>();
#else
#error "Unknown operating system"
#endif
}
} // namespace ui