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

Side by Side Diff: components/nacl/renderer/pnacl_translation_resource_host.cc

Issue 2514323004: Convert NaCl renderer-browser messages to mojo. (Closed)
Patch Set: rebase Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "pnacl_translation_resource_host.h" 5 #include "pnacl_translation_resource_host.h"
6 6
7 #include "base/single_thread_task_runner.h"
8 #include "components/nacl/common/nacl_host_messages.h"
9 #include "ppapi/c/pp_errors.h" 7 #include "ppapi/c/pp_errors.h"
10 #include "ppapi/shared_impl/ppapi_globals.h" 8 #include "ppapi/shared_impl/ppapi_globals.h"
11 9
12 using ppapi::PpapiGlobals; 10 using ppapi::PpapiGlobals;
13 11
14 PnaclTranslationResourceHost::PnaclTranslationResourceHost( 12 namespace {
15 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) 13
16 : io_task_runner_(io_task_runner), sender_(NULL) { 14 void OnNexeTempFileReply(
15 const PnaclTranslationResourceHost::RequestNexeFdCallback& callback,
16 PP_Instance instance,
17 base::File file,
18 bool is_hit) {
19 DCHECK(PpapiGlobals::Get()
20 ->GetMainThreadMessageLoop()
21 ->BelongsToCurrentThread());
22
23 callback.Run(instance, is_hit, file.TakePlatformFile());
17 } 24 }
18 25
19 PnaclTranslationResourceHost::~PnaclTranslationResourceHost() { 26 } // namespace
20 DCHECK(io_task_runner_->BelongsToCurrentThread()); 27
21 CleanupCacheRequests(); 28 PnaclTranslationResourceHost::PnaclTranslationResourceHost(
29 nacl::mojom::NaClHost* host)
30 : host_(host) {
31 DCHECK(host_);
22 } 32 }
23 33
24 void PnaclTranslationResourceHost::OnFilterAdded(IPC::Channel* channel) { 34 PnaclTranslationResourceHost::~PnaclTranslationResourceHost() = default;
25 DCHECK(io_task_runner_->BelongsToCurrentThread());
26 sender_ = channel;
27 }
28
29 void PnaclTranslationResourceHost::OnFilterRemoved() {
30 DCHECK(io_task_runner_->BelongsToCurrentThread());
31 sender_ = NULL;
32 }
33
34 void PnaclTranslationResourceHost::OnChannelClosing() {
35 DCHECK(io_task_runner_->BelongsToCurrentThread());
36 sender_ = NULL;
37 }
38
39 bool PnaclTranslationResourceHost::OnMessageReceived(
40 const IPC::Message& message) {
41 DCHECK(io_task_runner_->BelongsToCurrentThread());
42 bool handled = true;
43 IPC_BEGIN_MESSAGE_MAP(PnaclTranslationResourceHost, message)
44 IPC_MESSAGE_HANDLER(NaClViewMsg_NexeTempFileReply, OnNexeTempFileReply)
45 IPC_MESSAGE_UNHANDLED(handled = false)
46 IPC_END_MESSAGE_MAP()
47 return handled;
48 }
49 35
50 void PnaclTranslationResourceHost::RequestNexeFd( 36 void PnaclTranslationResourceHost::RequestNexeFd(
51 int render_view_id, 37 int render_view_id,
52 PP_Instance instance, 38 PP_Instance instance,
53 const nacl::PnaclCacheInfo& cache_info, 39 const nacl::PnaclCacheInfo& cache_info,
54 RequestNexeFdCallback callback) { 40 RequestNexeFdCallback callback) {
55 DCHECK(PpapiGlobals::Get()-> 41 DCHECK(PpapiGlobals::Get()
56 GetMainThreadMessageLoop()->BelongsToCurrentThread()); 42 ->GetMainThreadMessageLoop()
57 io_task_runner_->PostTask( 43 ->BelongsToCurrentThread());
58 FROM_HERE, 44 host_->NexeTempFileRequest(render_view_id, instance, cache_info,
59 base::Bind(&PnaclTranslationResourceHost::SendRequestNexeFd, this, 45 base::Bind(&OnNexeTempFileReply, callback));
60 render_view_id, instance, cache_info, callback));
61 return;
62 }
63
64 void PnaclTranslationResourceHost::SendRequestNexeFd(
65 int render_view_id,
66 PP_Instance instance,
67 const nacl::PnaclCacheInfo& cache_info,
68 RequestNexeFdCallback callback) {
69 DCHECK(io_task_runner_->BelongsToCurrentThread());
70 if (!sender_ || !sender_->Send(new NaClHostMsg_NexeTempFileRequest(
71 render_view_id, instance, cache_info))) {
72 PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
73 FROM_HERE,
74 base::Bind(callback,
75 static_cast<int32_t>(PP_ERROR_FAILED),
76 false,
77 PP_kInvalidFileHandle));
78 return;
79 }
80 pending_cache_requests_.insert(std::make_pair(instance, callback));
81 } 46 }
82 47
83 void PnaclTranslationResourceHost::ReportTranslationFinished( 48 void PnaclTranslationResourceHost::ReportTranslationFinished(
84 PP_Instance instance, 49 PP_Instance instance,
85 PP_Bool success) { 50 PP_Bool success) {
86 DCHECK(PpapiGlobals::Get()-> 51 DCHECK(PpapiGlobals::Get()->
87 GetMainThreadMessageLoop()->BelongsToCurrentThread()); 52 GetMainThreadMessageLoop()->BelongsToCurrentThread());
88 io_task_runner_->PostTask( 53 host_->ReportTranslationFinished(instance, PP_ToBool(success));
89 FROM_HERE,
90 base::Bind(&PnaclTranslationResourceHost::SendReportTranslationFinished,
91 this, instance, success));
92 return;
93 } 54 }
94
95 void PnaclTranslationResourceHost::SendReportTranslationFinished(
96 PP_Instance instance,
97 PP_Bool success) {
98 DCHECK(io_task_runner_->BelongsToCurrentThread());
99 // If the sender is closed or we have been detached, we are probably shutting
100 // down, so just don't send anything.
101 if (!sender_)
102 return;
103 DCHECK(pending_cache_requests_.count(instance) == 0);
104 sender_->Send(new NaClHostMsg_ReportTranslationFinished(instance,
105 PP_ToBool(success)));
106 }
107
108 void PnaclTranslationResourceHost::OnNexeTempFileReply(
109 PP_Instance instance,
110 bool is_hit,
111 IPC::PlatformFileForTransit file) {
112 DCHECK(io_task_runner_->BelongsToCurrentThread());
113 base::File base_file = IPC::PlatformFileForTransitToFile(file);
114 CacheRequestInfoMap::iterator it = pending_cache_requests_.find(instance);
115 if (!base_file.IsValid()) {
116 DLOG(ERROR) << "Got invalid platformfilefortransit";
117 }
118 if (it != pending_cache_requests_.end()) {
119 PP_FileHandle file_handle = PP_kInvalidFileHandle;
120 int32_t status = PP_ERROR_FAILED;
121 if (base_file.IsValid()) {
122 file_handle = base_file.TakePlatformFile();
123 status = PP_OK;
124 }
125 PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
126 FROM_HERE,
127 base::Bind(it->second, status, is_hit, file_handle));
128 pending_cache_requests_.erase(it);
129 } else {
130 DLOG(ERROR) << "Could not find pending request for reply";
131 }
132 }
133
134 void PnaclTranslationResourceHost::CleanupCacheRequests() {
135 DCHECK(io_task_runner_->BelongsToCurrentThread());
136 for (CacheRequestInfoMap::iterator it = pending_cache_requests_.begin();
137 it != pending_cache_requests_.end();
138 ++it) {
139 PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
140 FROM_HERE,
141 base::Bind(it->second,
142 static_cast<int32_t>(PP_ERROR_ABORTED),
143 false,
144 PP_kInvalidFileHandle));
145 }
146 pending_cache_requests_.clear();
147 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698