// Copyright 2013 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 "device/nfc/nfc_adapter_factory.h" #include "base/lazy_instance.h" #include "base/logging.h" #include "base/memory/weak_ptr.h" #include "build/build_config.h" #if defined(OS_CHROMEOS) #include "device/nfc/nfc_adapter_chromeos.h" #endif namespace device { namespace { // Shared default adapter instance, we don't want to keep this class around // if nobody is using it so use a WeakPtr and create the object when needed; // since Google C++ Style (and clang's static analyzer) forbids us having // exit-time destructors we use a leaky lazy instance for it. base::LazyInstance >::Leaky default_adapter = LAZY_INSTANCE_INITIALIZER; } // namespace // static bool NfcAdapterFactory::IsNfcAvailable() { #if defined(OS_CHROMEOS) return true; #else return false; #endif } // static void NfcAdapterFactory::GetAdapter(const AdapterCallback& callback) { if (!IsNfcAvailable()) { LOG(WARNING) << "NFC is not available on the current platform."; return; } if (!default_adapter.Get().get()) { #if defined(OS_CHROMEOS) chromeos::NfcAdapterChromeOS* new_adapter = new chromeos::NfcAdapterChromeOS(); default_adapter.Get() = new_adapter->weak_ptr_factory_.GetWeakPtr(); #endif } if (default_adapter.Get()->IsInitialized()) callback.Run(scoped_refptr(default_adapter.Get().get())); } } // namespace device