// Copyright (c) 2015 The Chromium Embedded Framework 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 "libcef/common/resource_bundle_impl.h"

#include "base/memory/ref_counted_memory.h"
#include "ui/base/resource/resource_bundle.h"

CefResourceBundleImpl::CefResourceBundleImpl() {}

CefString CefResourceBundleImpl::GetLocalizedString(int string_id) {
  if (!ui::ResourceBundle::HasSharedInstance()) {
    return CefString();
  }

  return ui::ResourceBundle::GetSharedInstance().GetLocalizedString(string_id);
}

CefRefPtr<CefBinaryValue> CefResourceBundleImpl::GetDataResource(
    int resource_id) {
  return GetDataResourceForScale(resource_id, SCALE_FACTOR_NONE);
}

CefRefPtr<CefBinaryValue> CefResourceBundleImpl::GetDataResourceForScale(
    int resource_id,
    ScaleFactor scale_factor) {
  if (!ui::ResourceBundle::HasSharedInstance()) {
    return nullptr;
  }

  base::RefCountedMemory* result =
      ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
          resource_id, static_cast<ui::ResourceScaleFactor>(scale_factor));
  if (!result) {
    return nullptr;
  }

  return CefBinaryValue::Create(result->data(), result->size());
}

// static
CefRefPtr<CefResourceBundle> CefResourceBundle::GetGlobal() {
  return new CefResourceBundleImpl();
}
