// 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 "extensions/renderer/string_source_map.h"

#include "gin/converter.h"
#include "third_party/zlib/google/compression_utils.h"

namespace extensions {

StringSourceMap::StringSourceMap() {}
StringSourceMap::~StringSourceMap() {}

v8::Local<v8::String> StringSourceMap::GetSource(
    v8::Isolate* isolate,
    const std::string& name) const {
  const auto& iter = sources_.find(name);
  if (iter == sources_.end())
    return v8::Local<v8::String>();
  return gin::StringToV8(isolate, iter->second);
}

bool StringSourceMap::Contains(const std::string& name) const {
  return sources_.find(name) != sources_.end();
}

void StringSourceMap::RegisterModule(const std::string& name,
                                     const std::string& source,
                                     bool gzipped) {
  CHECK_EQ(0u, sources_.count(name)) << "A module for '" << name
                                     << "' already exists.";
  if (!gzipped) {
    sources_[name] = source;
    return;
  }

  std::string uncompressed;
  CHECK(compression::GzipUncompress(source, &uncompressed));
  sources_[name] = uncompressed;
}

}  // namespace extensions
