Index: content/browser/utility_process_mojo_client_browsertest.cc |
diff --git a/content/browser/utility_process_mojo_client_browsertest.cc b/content/browser/utility_process_mojo_client_browsertest.cc |
index e3f031a65e02d539639a0254480e6761779ab81f..6ac13b5d5314d41080575a34c51fa54c8ca9ab41 100644 |
--- a/content/browser/utility_process_mojo_client_browsertest.cc |
+++ b/content/browser/utility_process_mojo_client_browsertest.cc |
@@ -20,7 +20,7 @@ namespace content { |
// Test fixture used to make different Mojo calls to the utility process. |
class UtilityProcessMojoClientBrowserTest : public ContentBrowserTest { |
public: |
- void StartMojoService(bool disable_sandbox) { |
+ void StartMojoService(bool disable_sandbox, bool run_elevated = false) { |
mojo_client_.reset(new UtilityProcessMojoClient<mojom::TestService>( |
base::ASCIIToUTF16("TestMojoProcess"))); |
@@ -31,6 +31,14 @@ class UtilityProcessMojoClientBrowserTest : public ContentBrowserTest { |
// This test case needs to have the sandbox disabled. |
if (disable_sandbox) |
mojo_client_->set_disable_sandbox(); |
+#if defined(OS_WIN) |
+ // This test case needs utility process privilege elevation. |
+ if (run_elevated) { |
+ CHECK(disable_sandbox); |
+ mojo_client_->set_run_elevated(); |
+ } |
+#endif // defined(OS_WIN) |
+ |
mojo_client_->Start(); |
} |
@@ -136,6 +144,28 @@ IN_PROC_BROWSER_TEST_F(UtilityProcessMojoClientBrowserTest, SandboxSuccess) { |
EXPECT_TRUE(sandbox_succeeded_); |
EXPECT_FALSE(error_happened_); |
} |
-#endif |
+#endif // !defined(OS_ANDROID) |
+ |
+#if defined(OS_WIN) |
+// Call a function that succeeds with process elevation. Elevation is only |
+// available on WIN, and is used to permit UAC prompts for operations that |
+// need user approval before proceeding. |
+IN_PROC_BROWSER_TEST_F(UtilityProcessMojoClientBrowserTest, ElevatedSuccess) { |
+ base::RunLoop run_loop; |
+ done_closure_ = run_loop.QuitClosure(); |
+ |
+ bool elevated_utility_process = true; |
+ StartMojoService(true, elevated_utility_process); |
+ |
+ mojo_client_->service()->CreateFolder( |
+ base::Bind(&UtilityProcessMojoClientBrowserTest::OnCreateFolderFinished, |
+ base::Unretained(this))); |
+ |
+ run_loop.Run(); |
+ EXPECT_TRUE(response_received_); |
+ EXPECT_TRUE(sandbox_succeeded_); |
+ EXPECT_FALSE(error_happened_); |
+} |
+#endif // defined(OS_WIN) |
} // namespace content |