1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "components/nacl/common/nacl_paths.h"
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/path_service.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace {
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_POSIX) && !defined(OS_MACOSX)
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// File name of the nacl_helper and nacl_helper_bootstrap, Linux only.
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst base::FilePath::CharType kInternalNaClHelperFileName[] =
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FILE_PATH_LITERAL("nacl_helper");
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst base::FilePath::CharType kInternalNaClHelperBootstrapFileName[] =
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FILE_PATH_LITERAL("nacl_helper_bootstrap");
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace nacl {
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool PathProvider(int key, base::FilePath* result) {
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::FilePath cur;
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  switch (key) {
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_LINUX)
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    case FILE_NACL_HELPER:
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      if (!PathService::Get(base::DIR_MODULE, &cur))
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        return false;
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      cur = cur.Append(kInternalNaClHelperFileName);
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      break;
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    case FILE_NACL_HELPER_BOOTSTRAP:
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      if (!PathService::Get(base::DIR_MODULE, &cur))
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        return false;
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      cur = cur.Append(kInternalNaClHelperBootstrapFileName);
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      break;
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    default:
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      return false;
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  *result = cur;
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return true;
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// This cannot be done as a static initializer sadly since Visual Studio will
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// eliminate this object file if there is no direct entry point into it.
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid RegisterPathProvider() {
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PathService::RegisterProvider(PathProvider, PATH_START, PATH_END);
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace nacl
54