Chromium Code Reviews| 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..6c033f9736905aa231a4b188a301546e028ff68d 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::kAppShimSocketName); |
| + |
| + base::FilePath socket_path; |
| + ASSERT_TRUE(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,7 +109,6 @@ 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_; |
| @@ -148,26 +155,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 +174,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 +188,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 +217,35 @@ IN_PROC_BROWSER_TEST_F(AppShimHostManagerBrowserTest, |
| EXPECT_TRUE(test_api.factory()); |
| } |
| -// Test for AppShimHostManager that fails to create the socket. |
| -class AppShimHostManagerBrowserTestFailsCreate : |
| +// Test where a symlink already exists in the UDD. |
|
tapted
2014/01/03 13:06:54
nit: maybe expand `UDD` -> `user data dir` - I thi
jackhou1
2014/01/06 05:29:52
Done.
|
| +class AppShimHostManagerBrowserTestExistingSymlink : |
| public AppShimHostManagerBrowserTest { |
| public: |
| - AppShimHostManagerBrowserTestFailsCreate() {} |
| + AppShimHostManagerBrowserTestExistingSymlink() {} |
| private: |
| virtual bool SetUpUserDataDirectory() OVERRIDE; |
| base::ScopedTempDir barrier_dir_; |
| - DISALLOW_COPY_AND_ASSIGN(AppShimHostManagerBrowserTestFailsCreate); |
| + DISALLOW_COPY_AND_ASSIGN(AppShimHostManagerBrowserTestExistingSymlink); |
| }; |
| -bool AppShimHostManagerBrowserTestFailsCreate::SetUpUserDataDirectory() { |
| +bool AppShimHostManagerBrowserTestExistingSymlink::SetUpUserDataDirectory() { |
| 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 = |
| + base::FilePath symlink_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)); |
| + EXPECT_TRUE(base::CreateSymbolicLink(base::FilePath("/tmp"), symlink_path)); |
| 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) { |
| +// Test that existing symlinks are deleted. |
|
tapted
2014/01/03 13:06:54
Can this be double-checked in ~AppShimHostManagerB
jackhou1
2014/01/06 05:29:52
This checks that an existing file at the symlink p
tapted
2014/01/06 07:31:28
Is it possible to have a regression test for Chrom
jackhou1
2014/01/07 05:24:36
Done.
|
| +IN_PROC_BROWSER_TEST_F(AppShimHostManagerBrowserTestExistingSymlink, |
| + DeletesSymlink) { |
| test::AppShimHostManagerTestApi test_api( |
| g_browser_process->platform_part()->app_shim_host_manager()); |
| - EXPECT_FALSE(test_api.factory()); |
| + EXPECT_TRUE(test_api.factory()); |
| } |
| } // namespace |