| Index: services/nacl/nonsfi/content_handler_main_pexe.cc
|
| diff --git a/services/nacl/nonsfi/content_handler_main_pexe.cc b/services/nacl/nonsfi/content_handler_main_pexe.cc
|
| index d590b89f0650245dc9b933247339c9126e2efe17..7fcc2a10a6caf8772c4bdba56a006cdcfd395f4a 100644
|
| --- a/services/nacl/nonsfi/content_handler_main_pexe.cc
|
| +++ b/services/nacl/nonsfi/content_handler_main_pexe.cc
|
| @@ -21,57 +21,11 @@
|
| #include "mojo/public/cpp/bindings/synchronous_interface_ptr.h"
|
| #include "mojo/services/files/interfaces/directory.mojom-sync.h"
|
| #include "mojo/services/files/interfaces/files.mojom.h"
|
| -#include "services/nacl/nonsfi/pnacl_compile.mojom.h"
|
| -#include "services/nacl/nonsfi/pnacl_link.mojom.h"
|
| +#include "services/nacl/nonsfi/pnacl_compile.mojom-sync.h"
|
| +#include "services/nacl/nonsfi/pnacl_link.mojom-sync.h"
|
|
|
| namespace nacl {
|
| namespace content_handler {
|
| -namespace {
|
| -
|
| -class CompilerUI {
|
| - public:
|
| - explicit CompilerUI(mojo::ScopedMessagePipeHandle handle) {
|
| - compiler_.Bind(
|
| - mojo::InterfaceHandle<mojo::nacl::PexeCompiler>(handle.Pass(), 0u));
|
| - }
|
| -
|
| - // Synchronous method to compile pexe into object file.
|
| - mojo::Array<mojo::String> CompilePexe(mojo::String pexe_file_path) {
|
| - mojo::Array<mojo::String> output;
|
| - compiler_->PexeCompile(
|
| - pexe_file_path,
|
| - [&output](mojo::Array<mojo::String> o) { output = o.Pass(); });
|
| - CHECK(compiler_.WaitForIncomingResponse())
|
| - << "Waiting for pexe compiler failed";
|
| - return output;
|
| - }
|
| -
|
| - private:
|
| - mojo::nacl::PexeCompilerPtr compiler_;
|
| -};
|
| -
|
| -class LinkerUI {
|
| - public:
|
| - explicit LinkerUI(mojo::ScopedMessagePipeHandle handle) {
|
| - linker_.Bind(
|
| - mojo::InterfaceHandle<mojo::nacl::PexeLinker>(handle.Pass(), 0u));
|
| - }
|
| -
|
| - // Synchronous method to link object file into nexe.
|
| - mojo::String LinkPexe(mojo::Array<mojo::String> object_file_paths) {
|
| - mojo::String output;
|
| - linker_->PexeLink(std::move(object_file_paths),
|
| - [&output](mojo::String o) { output = o; });
|
| - CHECK(linker_.WaitForIncomingResponse())
|
| - << "Waiting for pexe linker failed";
|
| - return output;
|
| - }
|
| -
|
| - private:
|
| - mojo::nacl::PexeLinkerPtr linker_;
|
| -};
|
| -
|
| -} // namespace anonymous
|
|
|
| class PexeContentHandler : public mojo::ApplicationDelegate,
|
| public mojo::ContentHandlerFactory::Delegate {
|
| @@ -82,9 +36,9 @@ class PexeContentHandler : public mojo::ApplicationDelegate,
|
| // Overridden from ApplicationDelegate:
|
| void Initialize(mojo::ApplicationImpl* app) override {
|
| mojo::ConnectToService(app->shell(), "mojo:pnacl_compile",
|
| - GetProxy(&compiler_init_));
|
| + GetSynchronousProxy(&compiler_init_));
|
| mojo::ConnectToService(app->shell(), "mojo:pnacl_link",
|
| - GetProxy(&linker_init_));
|
| + GetSynchronousProxy(&linker_init_));
|
| mojo::ConnectToService(app->shell(), "mojo:files", GetProxy(&files_));
|
| mojo::files::Error error = mojo::files::Error::INTERNAL;
|
| files_->OpenFileSystem("app_persistent_cache",
|
| @@ -136,28 +90,20 @@ class PexeContentHandler : public mojo::ApplicationDelegate,
|
|
|
| int DoPexeTranslation(base::FilePath& pexe_file_path) {
|
| // Compile the pexe into an object file
|
| - mojo::ScopedMessagePipeHandle parent_compile_pipe;
|
| - mojo::ScopedMessagePipeHandle child_compile_pipe;
|
| - CHECK_EQ(CreateMessagePipe(nullptr, &parent_compile_pipe,
|
| - &child_compile_pipe), MOJO_RESULT_OK)
|
| - << "Could not create message pipe to compiler";
|
| - compiler_init_->PexeCompilerStart(child_compile_pipe.Pass());
|
| + mojo::SynchronousInterfacePtr<mojo::nacl::PexeCompiler> compiler;
|
| + CHECK(compiler_init_->PexeCompilerStart(GetSynchronousProxy(&compiler)));
|
|
|
| // Communicate with the compiler using a mojom interface.
|
| - CompilerUI compiler_ui(parent_compile_pipe.Pass());
|
| - mojo::Array<mojo::String> object_files =
|
| - compiler_ui.CompilePexe(pexe_file_path.value());
|
| + mojo::Array<mojo::String> object_files;
|
| + CHECK(compiler->PexeCompile(pexe_file_path.value(), &object_files));
|
|
|
| // Link the object file into a nexe
|
| - mojo::ScopedMessagePipeHandle parent_link_pipe;
|
| - mojo::ScopedMessagePipeHandle child_link_pipe;
|
| - CHECK_EQ(CreateMessagePipe(nullptr, &parent_link_pipe, &child_link_pipe),
|
| - MOJO_RESULT_OK) << "Could not create message pipe to linker";
|
| - linker_init_->PexeLinkerStart(child_link_pipe.Pass());
|
| + mojo::SynchronousInterfacePtr<mojo::nacl::PexeLinker> linker;
|
| + CHECK(linker_init_->PexeLinkerStart(GetSynchronousProxy(&linker)));
|
|
|
| // Communicate with the linker using a mojom interface.
|
| - LinkerUI linker_ui(parent_link_pipe.Pass());
|
| - mojo::String nexe_file = linker_ui.LinkPexe(std::move(object_files));
|
| + mojo::String nexe_file;
|
| + CHECK(linker->PexeLink(std::move(object_files), &nexe_file));
|
|
|
| // Open the nexe file and launch it (with our mojo handle)
|
| int nexe_fd = open(nexe_file.get().c_str(), O_RDONLY);
|
| @@ -205,8 +151,8 @@ class PexeContentHandler : public mojo::ApplicationDelegate,
|
| mojo::SynchronousInterfacePtr<mojo::files::Directory> nexe_cache_directory_;
|
| mojo::files::FilesPtr files_;
|
| mojo::ContentHandlerFactory content_handler_factory_;
|
| - mojo::nacl::PexeCompilerInitPtr compiler_init_;
|
| - mojo::nacl::PexeLinkerInitPtr linker_init_;
|
| + mojo::SynchronousInterfacePtr<mojo::nacl::PexeCompilerInit> compiler_init_;
|
| + mojo::SynchronousInterfacePtr<mojo::nacl::PexeLinkerInit> linker_init_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PexeContentHandler);
|
| };
|
|
|