Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(462)

Unified Diff: apps/app_shim/app_shim_host_manager_browsertest_mac.mm

Issue 66043003: Put app shim IPC socket in a temporary directory. (Mac) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use PathService(DIR_TEMP) instead of "/tmp" Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: apps/app_shim/app_shim_host_manager_browsertest_mac.mm
diff --git a/apps/app_shim/app_shim_host_manager_browsertest_mac.mm b/apps/app_shim/app_shim_host_manager_browsertest_mac.mm
index 0363315f1da39cb7a14aee676fbe8ed90229b573..2dc1eafe7d5ee946247732431206b665bc946d34 100644
--- a/apps/app_shim/app_shim_host_manager_browsertest_mac.mm
+++ b/apps/app_shim/app_shim_host_manager_browsertest_mac.mm
@@ -29,7 +29,7 @@ const char kTestAppMode[] = "test_app";
// A test version of the AppShimController IPC client in chrome_main_app_mode.
class TestShimClient : public IPC::Listener {
public:
- TestShimClient(const base::FilePath& socket_path);
+ TestShimClient();
virtual ~TestShimClient();
template <class T>
@@ -48,12 +48,21 @@ class TestShimClient : public IPC::Listener {
DISALLOW_COPY_AND_ASSIGN(TestShimClient);
};
-TestShimClient::TestShimClient(const base::FilePath& socket_path)
+TestShimClient::TestShimClient()
: io_thread_("TestShimClientIO") {
base::Thread::Options io_thread_options;
io_thread_options.message_loop_type = base::MessageLoop::TYPE_IO;
io_thread_.StartWithOptions(io_thread_options);
+ base::FilePath user_data_dir;
+ CHECK(PathService::Get(chrome::DIR_USER_DATA, &user_data_dir));
+ base::FilePath symlink_path =
+ user_data_dir.Append(app_mode::kAppShimSocketSymlinkName);
+
+ base::FilePath socket_path;
+ CHECK(base::ReadSymbolicLink(symlink_path, &socket_path));
+ app_mode::VerifySocketPermissions(socket_path);
+
IPC::ChannelHandle handle(socket_path.value());
channel_.reset(new IPC::ChannelProxy(handle, IPC::Channel::MODE_NAMED_CLIENT,
this, io_thread_.message_loop_proxy().get()));
@@ -86,7 +95,6 @@ class AppShimHostManagerBrowserTest : public InProcessBrowserTest,
// InProcessBrowserTest overrides:
virtual void SetUpOnMainThread() OVERRIDE;
virtual void TearDownOnMainThread() OVERRIDE;
- virtual bool SetUpUserDataDirectory() OVERRIDE;
// AppShimHandler overrides:
virtual void OnShimLaunch(apps::AppShimHandler::Host* host,
@@ -101,13 +109,11 @@ class AppShimHostManagerBrowserTest : public InProcessBrowserTest,
virtual void OnShimQuit(apps::AppShimHandler::Host* host) OVERRIDE;
scoped_ptr<TestShimClient> test_client_;
- base::FilePath short_socket_path_;
std::vector<base::FilePath> last_launch_files_;
apps::AppShimLaunchType last_launch_type_;
private:
scoped_refptr<content::MessageLoopRunner> runner_;
- base::ScopedTempDir short_temp_dir_;
int launch_count_;
int quit_count_;
@@ -148,26 +154,6 @@ void AppShimHostManagerBrowserTest::TearDownOnMainThread() {
apps::AppShimHandler::RemoveHandler(kTestAppMode);
}
-bool AppShimHostManagerBrowserTest::SetUpUserDataDirectory() {
- // Create a symlink at /tmp/scoped_dir_XXXXXX/udd that points to the real user
- // data dir, and use this as the domain socket path. This is required because
- // there is a path length limit for named sockets that is exceeded in
- // multi-process test spawning.
- base::FilePath real_user_data_dir;
- EXPECT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &real_user_data_dir));
- EXPECT_TRUE(
- short_temp_dir_.CreateUniqueTempDirUnderPath(base::FilePath("/tmp")));
- base::FilePath shortened_user_data_dir = short_temp_dir_.path().Append("udd");
- EXPECT_EQ(0, ::symlink(real_user_data_dir.AsUTF8Unsafe().c_str(),
- shortened_user_data_dir.AsUTF8Unsafe().c_str()));
-
- test::AppShimHostManagerTestApi::OverrideUserDataDir(shortened_user_data_dir);
- short_socket_path_ =
- shortened_user_data_dir.Append(app_mode::kAppShimSocketName);
-
- return InProcessBrowserTest::SetUpUserDataDirectory();
-}
-
void AppShimHostManagerBrowserTest::OnShimLaunch(
apps::AppShimHandler::Host* host,
apps::AppShimLaunchType launch_type,
@@ -187,7 +173,7 @@ void AppShimHostManagerBrowserTest::OnShimQuit(
// Test regular launch, which would ask Chrome to launch the app.
IN_PROC_BROWSER_TEST_F(AppShimHostManagerBrowserTest, LaunchNormal) {
- test_client_.reset(new TestShimClient(short_socket_path_));
+ test_client_.reset(new TestShimClient());
test_client_->Send(new AppShimHostMsg_LaunchApp(
browser()->profile()->GetPath(),
kTestAppMode,
@@ -201,7 +187,7 @@ IN_PROC_BROWSER_TEST_F(AppShimHostManagerBrowserTest, LaunchNormal) {
// Test register-only launch, used when Chrome has already launched the app.
IN_PROC_BROWSER_TEST_F(AppShimHostManagerBrowserTest, LaunchRegisterOnly) {
- test_client_.reset(new TestShimClient(short_socket_path_));
+ test_client_.reset(new TestShimClient());
test_client_->Send(new AppShimHostMsg_LaunchApp(
browser()->profile()->GetPath(),
kTestAppMode,
@@ -230,43 +216,54 @@ IN_PROC_BROWSER_TEST_F(AppShimHostManagerBrowserTest,
EXPECT_TRUE(test_api.factory());
}
-// Test for AppShimHostManager that fails to create the socket.
-class AppShimHostManagerBrowserTestFailsCreate :
+// Tests for the files created by AppShimHostManager.
+class AppShimHostManagerBrowserTestSocketFiles :
public AppShimHostManagerBrowserTest {
public:
- AppShimHostManagerBrowserTestFailsCreate() {}
+ AppShimHostManagerBrowserTestSocketFiles() {}
+
+ protected:
+ base::FilePath directory_in_tmp_;
+ base::FilePath symlink_path_;
private:
virtual bool SetUpUserDataDirectory() OVERRIDE;
+ virtual void TearDownInProcessBrowserTestFixture() OVERRIDE;
- base::ScopedTempDir barrier_dir_;
-
- DISALLOW_COPY_AND_ASSIGN(AppShimHostManagerBrowserTestFailsCreate);
+ DISALLOW_COPY_AND_ASSIGN(AppShimHostManagerBrowserTestSocketFiles);
};
-bool AppShimHostManagerBrowserTestFailsCreate::SetUpUserDataDirectory() {
+bool AppShimHostManagerBrowserTestSocketFiles::SetUpUserDataDirectory() {
+ // Create an existing symlink. It should be replaced by AppShimHostManager.
base::FilePath user_data_dir;
- // Start in the "real" user data dir for this test. This is a meta-test for
- // the symlinking steps used in the superclass. That is, by putting the
- // clobber in the actual user data dir, the test will fail if the symlink
- // does not actually point to the user data dir, since it won't be clobbered.
EXPECT_TRUE(PathService::Get(chrome::DIR_USER_DATA, &user_data_dir));
- base::FilePath socket_path =
- user_data_dir.Append(app_mode::kAppShimSocketName);
- // Create a "barrier" to forming the UNIX domain socket. This is just a
- // pre-existing directory which can not be unlink()ed, in order to place a
- // named socked there instead.
- EXPECT_TRUE(barrier_dir_.Set(socket_path));
+ symlink_path_ = user_data_dir.Append(app_mode::kAppShimSocketSymlinkName);
+ EXPECT_TRUE(base::CreateSymbolicLink(base::FilePath("/tmp"), symlink_path_));
tapted 2014/01/31 07:04:12 does this need to be updated?
jackhou1 2014/01/31 07:19:21 Done.
return AppShimHostManagerBrowserTest::SetUpUserDataDirectory();
}
-// Test error handling. This is essentially testing for lifetime correctness
-// during startup for unexpected failures.
-IN_PROC_BROWSER_TEST_F(AppShimHostManagerBrowserTestFailsCreate,
- SocketFailure) {
+void AppShimHostManagerBrowserTestSocketFiles::
+ TearDownInProcessBrowserTestFixture() {
+ // Check that created files have been deleted.
+ EXPECT_FALSE(base::PathExists(directory_in_tmp_));
+ EXPECT_FALSE(base::PathExists(symlink_path_));
+}
+
+IN_PROC_BROWSER_TEST_F(AppShimHostManagerBrowserTestSocketFiles,
+ ReplacesSymlinkAndCleansUpFiles) {
+ // Get the directory created by AppShimHostManager.
test::AppShimHostManagerTestApi test_api(
g_browser_process->platform_part()->app_shim_host_manager());
- EXPECT_FALSE(test_api.factory());
+ directory_in_tmp_ = test_api.directory_in_tmp();
+
+ // Check that socket files have been created.
+ EXPECT_TRUE(base::PathExists(directory_in_tmp_));
+ EXPECT_TRUE(base::PathExists(symlink_path_));
+
+ // Check that the symlink has been replaced.
+ base::FilePath socket_path;
+ ASSERT_TRUE(base::ReadSymbolicLink(symlink_path_, &socket_path));
+ EXPECT_EQ(app_mode::kAppShimSocketShortName, socket_path.BaseName().value());
}
} // namespace
« no previous file with comments | « no previous file | apps/app_shim/app_shim_host_manager_mac.h » ('j') | apps/app_shim/app_shim_host_manager_mac.mm » ('J')

Powered by Google App Engine
This is Rietveld 408576698