| Index: content/public/browser/utility_process_mojo_client.h
|
| diff --git a/content/public/browser/utility_process_mojo_client.h b/content/public/browser/utility_process_mojo_client.h
|
| index cfcb93b953dd1b87f3c8dc4dba6722809db9ac8b..35ff7fe516b7ffd172ac001dee2c3d6c780329b5 100644
|
| --- a/content/public/browser/utility_process_mojo_client.h
|
| +++ b/content/public/browser/utility_process_mojo_client.h
|
| @@ -8,6 +8,7 @@
|
| #include <string>
|
|
|
| #include "base/callback.h"
|
| +#include "base/files/file_path.h"
|
| #include "base/logging.h"
|
| #include "base/macros.h"
|
| #include "base/strings/string16.h"
|
| @@ -38,8 +39,15 @@ class UtilityProcessMojoClient {
|
|
|
| // Sets the error callback. A valid callback must be set before calling
|
| // Start().
|
| - void set_error_callback(const base::Closure& on_error_callback) {
|
| - on_error_callback_ = on_error_callback;
|
| + void set_error_callback(const base::Closure& error_callback) {
|
| + error_callback_ = error_callback;
|
| + }
|
| +
|
| + // Allows a directory to be opened through the utility process sandbox.
|
| + void set_exposed_directory(const base::FilePath& directory) {
|
| + DCHECK(!start_called_);
|
| + DCHECK(!directory.empty());
|
| + helper_->set_exposed_directory(directory);
|
| }
|
|
|
| // Disables the sandbox in the utility process.
|
| @@ -49,24 +57,24 @@ class UtilityProcessMojoClient {
|
| }
|
|
|
| #if defined(OS_WIN)
|
| - // Allow the utility process to run with elevated privileges.
|
| + // Allows the utility process to run with elevated privileges.
|
| void set_run_elevated() {
|
| DCHECK(!start_called_);
|
| helper_->set_run_elevated();
|
| }
|
| #endif // defined(OS_WIN)
|
|
|
| - // Starts the utility process and connect to the remote Mojo service.
|
| + // Starts the utility process and connects to the remote Mojo service.
|
| void Start() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(!on_error_callback_.is_null());
|
| + DCHECK(error_callback_);
|
| DCHECK(!start_called_);
|
|
|
| start_called_ = true;
|
|
|
| - mojo::InterfaceRequest<MojoInterface> req(&service_);
|
| - service_.set_connection_error_handler(on_error_callback_);
|
| - helper_->Start(MojoInterface::Name_, req.PassMessagePipe());
|
| + mojo::InterfaceRequest<MojoInterface> request(&service_);
|
| + service_.set_connection_error_handler(error_callback_);
|
| + helper_->Start(MojoInterface::Name_, request.PassMessagePipe());
|
| }
|
|
|
| // Returns the Mojo service used to make calls to the utility process.
|
| @@ -102,6 +110,10 @@ class UtilityProcessMojoClient {
|
| mojo_interface_name, base::Passed(&interface_pipe)));
|
| }
|
|
|
| + void set_exposed_directory(const base::FilePath& directory) {
|
| + exposed_directory_ = directory;
|
| + }
|
| +
|
| void set_disable_sandbox() { disable_sandbox_ = true; }
|
|
|
| #if defined(OS_WIN)
|
| @@ -120,6 +132,9 @@ class UtilityProcessMojoClient {
|
| utility_host_ = UtilityProcessHost::Create(nullptr, nullptr)->AsWeakPtr();
|
| utility_host_->SetName(process_name_);
|
|
|
| + if (!exposed_directory_.empty())
|
| + utility_host_->SetExposedDir(exposed_directory_);
|
| +
|
| if (disable_sandbox_)
|
| utility_host_->DisableSandbox();
|
| #if defined(OS_WIN)
|
| @@ -137,6 +152,7 @@ class UtilityProcessMojoClient {
|
|
|
| // Properties of the utility process.
|
| base::string16 process_name_;
|
| + base::FilePath exposed_directory_;
|
| bool disable_sandbox_ = false;
|
| #if defined(OS_WIN)
|
| bool run_elevated_ = false;
|
| @@ -151,7 +167,7 @@ class UtilityProcessMojoClient {
|
| std::unique_ptr<Helper> helper_;
|
|
|
| // Called when a connection error happens or if the process didn't start.
|
| - base::Closure on_error_callback_;
|
| + base::Closure error_callback_;
|
|
|
| mojo::InterfacePtr<MojoInterface> service_;
|
|
|
|
|