15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/files/file_util.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest-spi.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/platform_test.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/windows_version.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if PathService::Get returns true and sets the path parameter 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to non-empty for the given PathService::DirType enumeration value. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ReturnsValidPath(int dir_type) { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = PathService::Get(dir_type, &path); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some paths might not exist on some platforms in which case confirming 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |result| is true and !path.empty() is the best we can do. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool check_path_exists = true; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If chromium has never been started on this account, the cache path may not 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // exist. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dir_type == base::DIR_CACHE) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_path_exists = false; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On the linux try-bots: a path is returned (e.g. /home/chrome-bot/Desktop), 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but it doesn't exist. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dir_type == base::DIR_USER_DESKTOP) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_path_exists = false; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (dir_type == base::DIR_TASKBAR_PINS) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There is no pinned-to-taskbar shortcuts prior to Win7. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_WIN7) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) check_path_exists = false; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (dir_type != base::DIR_EXE && dir_type != base::DIR_MODULE && 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dir_type != base::FILE_EXE && dir_type != base::FILE_MODULE) { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (path.ReferencesParent()) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (path.ReferencesParent()) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result && !path.empty() && (!check_path_exists || 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::PathExists(path)); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Function to test any directory keys that are not supported on some versions 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of Windows. Checks that the function fails and that the returned path is 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// empty. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ReturnsInvalidPath(int dir_type) { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = PathService::Get(dir_type, &path); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !result && path.empty(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On the Mac this winds up using some autoreleased objects, so we need to 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be a PlatformTest. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PlatformTest PathServiceTest; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that all PathService::Get calls return a value and a true result 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in the development environment. (This test was created because a few 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// later changes to Get broke the semantics of the function and yielded the 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// correct value while returning false.) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PathServiceTest, Get) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int key = base::PATH_START + 1; key < base::PATH_END; ++key) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (key == base::FILE_MODULE || key == base::DIR_USER_DESKTOP || 90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) key == base::DIR_HOME) 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) continue; // Android doesn't implement these. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key == base::DIR_USER_DESKTOP) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; // iOS doesn't implement DIR_USER_DESKTOP; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED1(ReturnsValidPath, key); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int key = base::PATH_WIN_START + 1; key < base::PATH_WIN_END; ++key) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool valid = true; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch(key) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case base::DIR_LOCAL_APP_DATA_LOW: 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DIR_LOCAL_APP_DATA_LOW is not supported prior Vista and is expected 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to fail. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) valid = base::win::GetVersion() >= base::win::VERSION_VISTA; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case base::DIR_APP_SHORTCUTS: 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DIR_APP_SHORTCUTS is not supported prior Windows 8 and is expected to 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fail. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) valid = base::win::GetVersion() >= base::win::VERSION_WIN8; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (valid) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ReturnsValidPath(key)) << key; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ReturnsInvalidPath(key)) << key; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int key = base::PATH_MAC_START + 1; key < base::PATH_MAC_END; ++key) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED1(ReturnsValidPath, key); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int key = base::PATH_ANDROID_START + 1; key < base::PATH_ANDROID_END; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++key) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED1(ReturnsValidPath, key); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int key = base::PATH_POSIX_START + 1; key < base::PATH_POSIX_END; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++key) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED1(ReturnsValidPath, key); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Test that all versions of the Override function of PathService do what they 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are supposed to do. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PathServiceTest, Override) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int my_special_key = 666; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath fake_cache_dir(temp_dir.path().AppendASCII("cache")); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PathService::Override should always create the path provided if it doesn't 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // exist. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Override(my_special_key, fake_cache_dir)); 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(fake_cache_dir)); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath fake_cache_dir2(temp_dir.path().AppendASCII("cache2")); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PathService::OverrideAndCreateIfNeeded should obey the |create| parameter. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::OverrideAndCreateIfNeeded(my_special_key, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_cache_dir2, 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(base::PathExists(fake_cache_dir2)); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::OverrideAndCreateIfNeeded(my_special_key, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_cache_dir2, 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true)); 1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(fake_cache_dir2)); 160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(OS_POSIX) 162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath non_existent( 163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::MakeAbsoluteFilePath(temp_dir.path()).AppendASCII("non_existent")); 164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(non_existent.IsAbsolute()); 165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(base::PathExists(non_existent)); 166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if !defined(OS_ANDROID) 167010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // This fails because MakeAbsoluteFilePath fails for non-existent files. 168010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Earlier versions of Bionic libc don't fail for non-existent files, so 169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // skip this check on Android. 170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(PathService::OverrideAndCreateIfNeeded(my_special_key, 171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) non_existent, 172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false, 173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false)); 174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // This works because indicating that |non_existent| is absolute skips the 176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // internal MakeAbsoluteFilePath call. 177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(PathService::OverrideAndCreateIfNeeded(my_special_key, 178010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) non_existent, 179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) true, 180010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) false)); 181010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Check that the path has been overridden and no directory was created. 182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(base::PathExists(non_existent)); 183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath path; 184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(PathService::Get(my_special_key, &path)); 185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(non_existent, path); 186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check if multiple overrides can co-exist. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PathServiceTest, OverrideMultiple) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int my_special_key = 666; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath fake_cache_dir1(temp_dir.path().AppendASCII("1")); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Override(my_special_key, fake_cache_dir1)); 1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(fake_cache_dir1)); 197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_EQ(1, base::WriteFile(fake_cache_dir1.AppendASCII("t1"), ".", 1)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath fake_cache_dir2(temp_dir.path().AppendASCII("2")); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Override(my_special_key + 1, fake_cache_dir2)); 2017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(fake_cache_dir2)); 202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ASSERT_EQ(1, base::WriteFile(fake_cache_dir2.AppendASCII("t2"), ".", 1)); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath result; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Get(my_special_key, &result)); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override might have changed the path representation but our test file 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should be still there. 2087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(result.AppendASCII("t1"))); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Get(my_special_key + 1, &result)); 2107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(base::PathExists(result.AppendASCII("t2"))); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(PathServiceTest, RemoveOverride) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Before we start the test we have to call RemoveOverride at least once to 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // clear any overrides that might have been left from other tests. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::RemoveOverride(base::DIR_TEMP); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath original_user_data_dir; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Get(base::DIR_TEMP, &original_user_data_dir)); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(PathService::RemoveOverride(base::DIR_TEMP)); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Override(base::DIR_TEMP, temp_dir.path())); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath new_user_data_dir; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Get(base::DIR_TEMP, &new_user_data_dir)); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(original_user_data_dir, new_user_data_dir); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::RemoveOverride(base::DIR_TEMP)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(PathService::Get(base::DIR_TEMP, &new_user_data_dir)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(original_user_data_dir, new_user_data_dir); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 233