Android: Get the cache directory using path service.

"/data/local" is not writable on non-rooted devices and
while running tests in an APK.

BUG=125059

TEST=


Review URL: https://chromiumcodereview.appspot.com/10443021

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@138981 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 5f6259d5aa9bb29f15db051a3c6be3d78b82e1db
diff --git a/ipc/ipc_channel_posix_unittest.cc b/ipc/ipc_channel_posix_unittest.cc
index b4ec401..24fe2b0 100644
--- a/ipc/ipc_channel_posix_unittest.cc
+++ b/ipc/ipc_channel_posix_unittest.cc
@@ -17,6 +17,7 @@
 #include "base/file_util.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop.h"
+#include "base/path_service.h"
 #include "base/test/multiprocess_test.h"
 #include "base/test/test_timeouts.h"
 #include "testing/multiprocess_func_list.h"
@@ -94,10 +95,11 @@
 
 class IPCChannelPosixTest : public base::MultiProcessTest {
  public:
-  static const char kConnectionSocketTestName[];
   static void SetUpSocket(IPC::ChannelHandle *handle,
                           IPC::Channel::Mode mode);
   static void SpinRunLoop(int milliseconds);
+  static const std::string GetConnectionSocketName();
+  static const std::string GetChannelDirName();
 
  protected:
   virtual void SetUp();
@@ -107,13 +109,19 @@
   scoped_ptr<MessageLoopForIO> message_loop_;
 };
 
+const std::string IPCChannelPosixTest::GetChannelDirName() {
 #if defined(OS_ANDROID)
-const char IPCChannelPosixTest::kConnectionSocketTestName[] =
-    "/data/local/chrome_IPCChannelPosixTest__ConnectionSocket";
+  FilePath tmp_dir;
+  PathService::Get(base::DIR_CACHE, &tmp_dir);
+  return tmp_dir.value();
 #else
-const char IPCChannelPosixTest::kConnectionSocketTestName[] =
-    "/var/tmp/chrome_IPCChannelPosixTest__ConnectionSocket";
+  return "/var/tmp";
 #endif
+}
+
+const std::string IPCChannelPosixTest::GetConnectionSocketName() {
+  return GetChannelDirName() + "/chrome_IPCChannelPosixTest__ConnectionSocket";
+}
 
 void IPCChannelPosixTest::SetUp() {
   MultiProcessTest::SetUp();
@@ -185,12 +193,9 @@
 }
 
 TEST_F(IPCChannelPosixTest, BasicListen) {
+  const std::string kChannelName =
+      GetChannelDirName() + "/IPCChannelPosixTest_BasicListen";
 
-#if defined(OS_ANDROID)
-  const char* kChannelName = "/data/local/IPCChannelPosixTest_BasicListen";
-#else
-  const char* kChannelName = "/var/tmp/IPCChannelPosixTest_BasicListen";
-#endif
   // Test creating a socket that is listening.
   IPC::ChannelHandle handle(kChannelName);
   SetUpSocket(&handle, IPC::Channel::MODE_NAMED_SERVER);
@@ -228,7 +233,7 @@
 TEST_F(IPCChannelPosixTest, AdvancedConnected) {
   // Test creating a connection to an external process.
   IPCChannelPosixTestListener listener(false);
-  IPC::ChannelHandle chan_handle(kConnectionSocketTestName);
+  IPC::ChannelHandle chan_handle(GetConnectionSocketName());
   SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER);
   IPC::Channel channel(chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener);
   ASSERT_TRUE(channel.Connect());
@@ -258,7 +263,7 @@
   // but continue to listen and make sure another external process can connect
   // to us.
   IPCChannelPosixTestListener listener(false);
-  IPC::ChannelHandle chan_handle(kConnectionSocketTestName);
+  IPC::ChannelHandle chan_handle(GetConnectionSocketName());
   SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER);
   IPC::Channel channel(chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener);
   ASSERT_TRUE(channel.Connect());
@@ -317,7 +322,7 @@
   // Test setting up a connection to an external process, and then have
   // another external process attempt to connect to us.
   IPCChannelPosixTestListener listener(false);
-  IPC::ChannelHandle chan_handle(kConnectionSocketTestName);
+  IPC::ChannelHandle chan_handle(GetConnectionSocketName());
   SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER);
   IPC::Channel channel(chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener);
   ASSERT_TRUE(channel.Connect());
@@ -354,7 +359,7 @@
   // Test setting up two servers with the same name.
   IPCChannelPosixTestListener listener(false);
   IPCChannelPosixTestListener listener2(false);
-  IPC::ChannelHandle chan_handle(kConnectionSocketTestName);
+  IPC::ChannelHandle chan_handle(GetConnectionSocketName());
   IPC::Channel channel(chan_handle, IPC::Channel::MODE_SERVER, &listener);
   IPC::Channel channel2(chan_handle, IPC::Channel::MODE_SERVER, &listener2);
   ASSERT_TRUE(channel.Connect());
@@ -364,30 +369,31 @@
 TEST_F(IPCChannelPosixTest, BadMode) {
   // Test setting up two servers with a bad mode.
   IPCChannelPosixTestListener listener(false);
-  IPC::ChannelHandle chan_handle(kConnectionSocketTestName);
+  IPC::ChannelHandle chan_handle(GetConnectionSocketName());
   IPC::Channel channel(chan_handle, IPC::Channel::MODE_NONE, &listener);
   ASSERT_FALSE(channel.Connect());
 }
 
 TEST_F(IPCChannelPosixTest, IsNamedServerInitialized) {
+  const std::string& connection_socket_name = GetConnectionSocketName();
   IPCChannelPosixTestListener listener(false);
-  IPC::ChannelHandle chan_handle(kConnectionSocketTestName);
-  ASSERT_TRUE(file_util::Delete(FilePath(kConnectionSocketTestName), false));
+  IPC::ChannelHandle chan_handle(connection_socket_name);
+  ASSERT_TRUE(file_util::Delete(FilePath(connection_socket_name), false));
   ASSERT_FALSE(IPC::Channel::IsNamedServerInitialized(
-      kConnectionSocketTestName));
+      connection_socket_name));
   IPC::Channel channel(chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener);
   ASSERT_TRUE(IPC::Channel::IsNamedServerInitialized(
-      kConnectionSocketTestName));
+      connection_socket_name));
   channel.Close();
   ASSERT_FALSE(IPC::Channel::IsNamedServerInitialized(
-      kConnectionSocketTestName));
+      connection_socket_name));
 }
 
 // A long running process that connects to us
 MULTIPROCESS_TEST_MAIN(IPCChannelPosixTestConnectionProc) {
   MessageLoopForIO message_loop;
   IPCChannelPosixTestListener listener(true);
-  IPC::ChannelHandle handle(IPCChannelPosixTest::kConnectionSocketTestName);
+  IPC::ChannelHandle handle(IPCChannelPosixTest::GetConnectionSocketName());
   IPCChannelPosixTest::SetUpSocket(&handle, IPC::Channel::MODE_NAMED_CLIENT);
   IPC::Channel channel(handle, IPC::Channel::MODE_NAMED_CLIENT, &listener);
   EXPECT_TRUE(channel.Connect());
@@ -400,7 +406,7 @@
 MULTIPROCESS_TEST_MAIN(IPCChannelPosixFailConnectionProc) {
   MessageLoopForIO message_loop;
   IPCChannelPosixTestListener listener(false);
-  IPC::ChannelHandle handle(IPCChannelPosixTest::kConnectionSocketTestName);
+  IPC::ChannelHandle handle(IPCChannelPosixTest::GetConnectionSocketName());
   IPCChannelPosixTest::SetUpSocket(&handle, IPC::Channel::MODE_NAMED_CLIENT);
   IPC::Channel channel(handle, IPC::Channel::MODE_NAMED_CLIENT, &listener);