| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "ui/base/ui_base_paths.h" | |
| 6 | |
| 7 #include "base/command_line.h" | |
| 8 #include "base/files/file_path.h" | |
| 9 #include "base/files/file_util.h" | |
| 10 #include "base/logging.h" | |
| 11 #include "base/path_service.h" | |
| 12 | |
| 13 #if defined(OS_ANDROID) | |
| 14 #include "base/android/path_utils.h" | |
| 15 #endif | |
| 16 | |
| 17 namespace ui { | |
| 18 | |
| 19 bool PathProvider(int key, base::FilePath* result) { | |
| 20 // Assume that we will not need to create the directory if it does not exist. | |
| 21 // This flag can be set to true for the cases where we want to create it. | |
| 22 bool create_dir = false; | |
| 23 | |
| 24 base::FilePath cur; | |
| 25 switch (key) { | |
| 26 case DIR_LOCALES: | |
| 27 if (!PathService::Get(base::DIR_MODULE, &cur)) | |
| 28 return false; | |
| 29 #if defined(OS_MACOSX) | |
| 30 // On Mac, locale files are in Contents/Resources, a sibling of the | |
| 31 // App dir. | |
| 32 cur = cur.DirName(); | |
| 33 cur = cur.Append(FILE_PATH_LITERAL("Resources")); | |
| 34 #elif defined(OS_ANDROID) | |
| 35 if (!PathService::Get(DIR_RESOURCE_PAKS_ANDROID, &cur)) | |
| 36 return false; | |
| 37 #else | |
| 38 cur = cur.Append(FILE_PATH_LITERAL("locales")); | |
| 39 #endif | |
| 40 create_dir = true; | |
| 41 break; | |
| 42 // The following are only valid in the development environment, and | |
| 43 // will fail if executed from an installed executable (because the | |
| 44 // generated path won't exist). | |
| 45 case UI_DIR_TEST_DATA: | |
| 46 if (!PathService::Get(base::DIR_SOURCE_ROOT, &cur)) | |
| 47 return false; | |
| 48 cur = cur.Append(FILE_PATH_LITERAL("ui")); | |
| 49 cur = cur.Append(FILE_PATH_LITERAL("base")); | |
| 50 cur = cur.Append(FILE_PATH_LITERAL("test")); | |
| 51 cur = cur.Append(FILE_PATH_LITERAL("data")); | |
| 52 if (!base::PathExists(cur)) // we don't want to create this | |
| 53 return false; | |
| 54 break; | |
| 55 #if defined(OS_ANDROID) | |
| 56 case DIR_RESOURCE_PAKS_ANDROID: | |
| 57 if (!PathService::Get(base::DIR_ANDROID_APP_DATA, &cur)) | |
| 58 return false; | |
| 59 cur = cur.Append(FILE_PATH_LITERAL("paks")); | |
| 60 break; | |
| 61 #endif | |
| 62 case UI_TEST_PAK: | |
| 63 if (!PathService::Get(base::DIR_MODULE, &cur)) | |
| 64 return false; | |
| 65 cur = cur.AppendASCII("ui_test.pak"); | |
| 66 break; | |
| 67 default: | |
| 68 return false; | |
| 69 } | |
| 70 | |
| 71 if (create_dir && !base::PathExists(cur) && | |
| 72 !base::CreateDirectory(cur)) | |
| 73 return false; | |
| 74 | |
| 75 *result = cur; | |
| 76 return true; | |
| 77 } | |
| 78 | |
| 79 // This cannot be done as a static initializer sadly since Visual Studio will | |
| 80 // eliminate this object file if there is no direct entry point into it. | |
| 81 void RegisterPathProvider() { | |
| 82 PathService::RegisterProvider(PathProvider, PATH_START, PATH_END); | |
| 83 } | |
| 84 | |
| 85 } // namespace ui | |
| OLD | NEW |