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

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: Address comments 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
« no previous file with comments | « no previous file | apps/app_shim/app_shim_host_manager_mac.h » ('j') | apps/app_shim/chrome_main_app_mode_mac.mm » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..e04339222118ace2602c6c34a259038e205afbbb 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,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,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 user data dir.
+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 replaced.
+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
« no previous file with comments | « no previous file | apps/app_shim/app_shim_host_manager_mac.h » ('j') | apps/app_shim/chrome_main_app_mode_mac.mm » ('J')

Powered by Google App Engine
This is Rietveld 408576698