// Copyright (c) 2012 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 "include/cef_path_util.h"

#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/path_service.h"
#include "chrome/common/chrome_paths.h"

bool CefGetPath(PathKey key, CefString& path) {
  int pref_key = base::PATH_START;
  switch (key) {
    case PK_DIR_CURRENT:
      pref_key = base::DIR_CURRENT;
      break;
    case PK_DIR_EXE:
      pref_key = base::DIR_EXE;
      break;
    case PK_DIR_MODULE:
      pref_key = base::DIR_MODULE;
      break;
    case PK_DIR_TEMP:
      pref_key = base::DIR_TEMP;
      break;
    case PK_FILE_EXE:
      pref_key = base::FILE_EXE;
      break;
    case PK_FILE_MODULE:
      pref_key = base::FILE_MODULE;
      break;
#if defined(OS_WIN)
    case PK_LOCAL_APP_DATA:
      pref_key = base::DIR_LOCAL_APP_DATA;
      break;
#endif
    case PK_USER_DATA:
      pref_key = chrome::DIR_USER_DATA;
      break;
    case PK_DIR_RESOURCES:
      pref_key = chrome::DIR_RESOURCES;
      break;
    default:
      NOTREACHED() << "invalid argument";
      return false;
  }

  base::FilePath file_path;
  if (base::PathService::Get(pref_key, &file_path)) {
    path = file_path.value();
    return true;
  }

  return false;
}
