1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker // Defines base::PathProviderAndroid which replaces base::PathProviderPosix for 6*6777b538SAndroid Build Coastguard Worker // Android in base/path_service.cc. 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <limits.h> 9*6777b538SAndroid Build Coastguard Worker #include <unistd.h> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include <ostream> 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker #include "base/android/jni_android.h" 14*6777b538SAndroid Build Coastguard Worker #include "base/android/path_utils.h" 15*6777b538SAndroid Build Coastguard Worker #include "base/base_paths.h" 16*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h" 17*6777b538SAndroid Build Coastguard Worker #include "base/files/file_util.h" 18*6777b538SAndroid Build Coastguard Worker #include "base/logging.h" 19*6777b538SAndroid Build Coastguard Worker #include "base/notimplemented.h" 20*6777b538SAndroid Build Coastguard Worker #include "base/process/process_metrics.h" 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker namespace base { 23*6777b538SAndroid Build Coastguard Worker PathProviderAndroid(int key,FilePath * result)24*6777b538SAndroid Build Coastguard Workerbool PathProviderAndroid(int key, FilePath* result) { 25*6777b538SAndroid Build Coastguard Worker switch (key) { 26*6777b538SAndroid Build Coastguard Worker case base::FILE_EXE: { 27*6777b538SAndroid Build Coastguard Worker FilePath bin_dir; 28*6777b538SAndroid Build Coastguard Worker if (!ReadSymbolicLink(FilePath(kProcSelfExe), &bin_dir)) { 29*6777b538SAndroid Build Coastguard Worker // This fails for some devices (maybe custom OEM selinux policy?) 30*6777b538SAndroid Build Coastguard Worker // https://crbug.com/1416753 31*6777b538SAndroid Build Coastguard Worker LOG(ERROR) << "Unable to resolve " << kProcSelfExe << "."; 32*6777b538SAndroid Build Coastguard Worker return false; 33*6777b538SAndroid Build Coastguard Worker } 34*6777b538SAndroid Build Coastguard Worker *result = bin_dir; 35*6777b538SAndroid Build Coastguard Worker return true; 36*6777b538SAndroid Build Coastguard Worker } 37*6777b538SAndroid Build Coastguard Worker case base::FILE_MODULE: 38*6777b538SAndroid Build Coastguard Worker // dladdr didn't work in Android as only the file name was returned. 39*6777b538SAndroid Build Coastguard Worker NOTIMPLEMENTED(); 40*6777b538SAndroid Build Coastguard Worker return false; 41*6777b538SAndroid Build Coastguard Worker case base::DIR_MODULE: 42*6777b538SAndroid Build Coastguard Worker return base::android::GetNativeLibraryDirectory(result); 43*6777b538SAndroid Build Coastguard Worker case base::DIR_SRC_TEST_DATA_ROOT: 44*6777b538SAndroid Build Coastguard Worker case base::DIR_OUT_TEST_DATA_ROOT: 45*6777b538SAndroid Build Coastguard Worker // These are only used by tests. In that context, they are overridden by 46*6777b538SAndroid Build Coastguard Worker // PathProviders in //base/test/test_support_android.cc. 47*6777b538SAndroid Build Coastguard Worker NOTIMPLEMENTED(); 48*6777b538SAndroid Build Coastguard Worker return false; 49*6777b538SAndroid Build Coastguard Worker case base::DIR_USER_DESKTOP: 50*6777b538SAndroid Build Coastguard Worker // Android doesn't support GetUserDesktop. 51*6777b538SAndroid Build Coastguard Worker NOTIMPLEMENTED(); 52*6777b538SAndroid Build Coastguard Worker return false; 53*6777b538SAndroid Build Coastguard Worker case base::DIR_CACHE: 54*6777b538SAndroid Build Coastguard Worker return base::android::GetCacheDirectory(result); 55*6777b538SAndroid Build Coastguard Worker case base::DIR_ASSETS: 56*6777b538SAndroid Build Coastguard Worker // On Android assets are normally loaded from the APK using 57*6777b538SAndroid Build Coastguard Worker // base::android::OpenApkAsset(). In tests, since the assets are no 58*6777b538SAndroid Build Coastguard Worker // packaged, DIR_ASSETS is overridden to point to the build directory. 59*6777b538SAndroid Build Coastguard Worker return false; 60*6777b538SAndroid Build Coastguard Worker case base::DIR_ANDROID_APP_DATA: 61*6777b538SAndroid Build Coastguard Worker return base::android::GetDataDirectory(result); 62*6777b538SAndroid Build Coastguard Worker case base::DIR_ANDROID_EXTERNAL_STORAGE: 63*6777b538SAndroid Build Coastguard Worker return base::android::GetExternalStorageDirectory(result); 64*6777b538SAndroid Build Coastguard Worker } 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker // For all other keys, let the PathService fall back to a default, if defined. 67*6777b538SAndroid Build Coastguard Worker return false; 68*6777b538SAndroid Build Coastguard Worker } 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker } // namespace base 71