// Copyright 2017 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 "components/about_ui/credit_utils.h"

#include <stdint.h>

#include "base/strings/string_piece.h"
#include "components/grit/components_resources.h"
#include "third_party/brotli/include/brotli/decode.h"
#include "ui/base/resource/resource_bundle.h"

#if defined(OS_ANDROID)
#include "base/android/jni_array.h"
#include "jni/CreditUtils_jni.h"
#endif

namespace about_ui {

std::string GetCredits(bool include_scripts) {
  std::string response;
  base::StringPiece raw_response =
      ui::ResourceBundle::GetSharedInstance().GetRawDataResource(
          IDR_ABOUT_UI_CREDITS_HTML);
  const uint8_t* next_encoded_byte =
      reinterpret_cast<const uint8_t*>(raw_response.data());
  size_t input_size_remaining = raw_response.size();
  BrotliDecoderState* decoder = BrotliDecoderCreateInstance(
      nullptr /* no custom allocator */, nullptr /* no custom deallocator */,
      nullptr /* no custom memory handle */);
  CHECK(!!decoder);
  while (!BrotliDecoderIsFinished(decoder)) {
    size_t output_size_remaining = 0;
    CHECK(BrotliDecoderDecompressStream(
              decoder, &input_size_remaining, &next_encoded_byte,
              &output_size_remaining, nullptr,
              nullptr) != BROTLI_DECODER_RESULT_ERROR);
    const uint8_t* output_buffer =
        BrotliDecoderTakeOutput(decoder, &output_size_remaining);
    response.insert(response.end(), output_buffer,
                    output_buffer + output_size_remaining);
  }
  BrotliDecoderDestroyInstance(decoder);
  if (include_scripts) {
    response +=
        "\n<script src=\"chrome://resources/js/cr.js\"></script>\n"
        "<script src=\"chrome://credits/credits.js\"></script>\n";
  }
  response += "</body>\n</html>";
  return response;
}

#if defined(OS_ANDROID)
static base::android::ScopedJavaLocalRef<jbyteArray>
JNI_CreditUtils_GetJavaWrapperCredits(JNIEnv* env) {
  std::string html_content = GetCredits(false);
  const char* html_content_arr = html_content.c_str();
  return base::android::ToJavaByteArray(
      env, reinterpret_cast<const uint8_t*>(html_content_arr),
      html_content.size());
}
#endif

}  // namespace about_ui
