1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file. 4*635a8641SAndroid Build Coastguard Worker 5*635a8641SAndroid Build Coastguard Worker // Defines base::PathProviderAndroid which replaces base::PathProviderPosix for 6*635a8641SAndroid Build Coastguard Worker // Android in base/path_service.cc. 7*635a8641SAndroid Build Coastguard Worker 8*635a8641SAndroid Build Coastguard Worker #include <limits.h> 9*635a8641SAndroid Build Coastguard Worker #include <unistd.h> 10*635a8641SAndroid Build Coastguard Worker 11*635a8641SAndroid Build Coastguard Worker #include "base/android/jni_android.h" 12*635a8641SAndroid Build Coastguard Worker #include "base/android/path_utils.h" 13*635a8641SAndroid Build Coastguard Worker #include "base/base_paths.h" 14*635a8641SAndroid Build Coastguard Worker #include "base/files/file_path.h" 15*635a8641SAndroid Build Coastguard Worker #include "base/files/file_util.h" 16*635a8641SAndroid Build Coastguard Worker #include "base/logging.h" 17*635a8641SAndroid Build Coastguard Worker #include "base/process/process_metrics.h" 18*635a8641SAndroid Build Coastguard Worker 19*635a8641SAndroid Build Coastguard Worker namespace base { 20*635a8641SAndroid Build Coastguard Worker PathProviderAndroid(int key,FilePath * result)21*635a8641SAndroid Build Coastguard Workerbool PathProviderAndroid(int key, FilePath* result) { 22*635a8641SAndroid Build Coastguard Worker switch (key) { 23*635a8641SAndroid Build Coastguard Worker case base::FILE_EXE: { 24*635a8641SAndroid Build Coastguard Worker FilePath bin_dir; 25*635a8641SAndroid Build Coastguard Worker if (!ReadSymbolicLink(FilePath(kProcSelfExe), &bin_dir)) { 26*635a8641SAndroid Build Coastguard Worker NOTREACHED() << "Unable to resolve " << kProcSelfExe << "."; 27*635a8641SAndroid Build Coastguard Worker return false; 28*635a8641SAndroid Build Coastguard Worker } 29*635a8641SAndroid Build Coastguard Worker *result = bin_dir; 30*635a8641SAndroid Build Coastguard Worker return true; 31*635a8641SAndroid Build Coastguard Worker } 32*635a8641SAndroid Build Coastguard Worker case base::FILE_MODULE: 33*635a8641SAndroid Build Coastguard Worker // dladdr didn't work in Android as only the file name was returned. 34*635a8641SAndroid Build Coastguard Worker NOTIMPLEMENTED(); 35*635a8641SAndroid Build Coastguard Worker return false; 36*635a8641SAndroid Build Coastguard Worker case base::DIR_MODULE: 37*635a8641SAndroid Build Coastguard Worker return base::android::GetNativeLibraryDirectory(result); 38*635a8641SAndroid Build Coastguard Worker case base::DIR_SOURCE_ROOT: 39*635a8641SAndroid Build Coastguard Worker // Used only by tests. 40*635a8641SAndroid Build Coastguard Worker // In that context, hooked up via base/test/test_support_android.cc. 41*635a8641SAndroid Build Coastguard Worker NOTIMPLEMENTED(); 42*635a8641SAndroid Build Coastguard Worker return false; 43*635a8641SAndroid Build Coastguard Worker case base::DIR_USER_DESKTOP: 44*635a8641SAndroid Build Coastguard Worker // Android doesn't support GetUserDesktop. 45*635a8641SAndroid Build Coastguard Worker NOTIMPLEMENTED(); 46*635a8641SAndroid Build Coastguard Worker return false; 47*635a8641SAndroid Build Coastguard Worker case base::DIR_CACHE: 48*635a8641SAndroid Build Coastguard Worker return base::android::GetCacheDirectory(result); 49*635a8641SAndroid Build Coastguard Worker case base::DIR_ASSETS: 50*635a8641SAndroid Build Coastguard Worker // On Android assets are normally loaded from the APK using 51*635a8641SAndroid Build Coastguard Worker // base::android::OpenApkAsset(). In tests, since the assets are no 52*635a8641SAndroid Build Coastguard Worker // packaged, DIR_ASSETS is overridden to point to the build directory. 53*635a8641SAndroid Build Coastguard Worker return false; 54*635a8641SAndroid Build Coastguard Worker case base::DIR_ANDROID_APP_DATA: 55*635a8641SAndroid Build Coastguard Worker return base::android::GetDataDirectory(result); 56*635a8641SAndroid Build Coastguard Worker case base::DIR_ANDROID_EXTERNAL_STORAGE: 57*635a8641SAndroid Build Coastguard Worker return base::android::GetExternalStorageDirectory(result); 58*635a8641SAndroid Build Coastguard Worker default: 59*635a8641SAndroid Build Coastguard Worker // Note: the path system expects this function to override the default 60*635a8641SAndroid Build Coastguard Worker // behavior. So no need to log an error if we don't support a given 61*635a8641SAndroid Build Coastguard Worker // path. The system will just use the default. 62*635a8641SAndroid Build Coastguard Worker return false; 63*635a8641SAndroid Build Coastguard Worker } 64*635a8641SAndroid Build Coastguard Worker } 65*635a8641SAndroid Build Coastguard Worker 66*635a8641SAndroid Build Coastguard Worker } // namespace base 67