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

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

Issue 339213003: Pepper: Simplify OpenResource() for Non-SFI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | ppapi/nacl_irt/manifest_service.cc » ('j') | ppapi/nacl_irt/manifest_service.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "components/nacl/renderer/ppb_nacl_private_impl.h" 5 #include "components/nacl/renderer/ppb_nacl_private_impl.h"
6 6
7 #include <numeric> 7 #include <numeric>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 LAZY_INSTANCE_INITIALIZER; 106 LAZY_INSTANCE_INITIALIZER;
107 107
108 nacl::NexeLoadManager* GetNexeLoadManager(PP_Instance instance) { 108 nacl::NexeLoadManager* GetNexeLoadManager(PP_Instance instance) {
109 NexeLoadManagerMap& map = g_load_manager_map.Get(); 109 NexeLoadManagerMap& map = g_load_manager_map.Get();
110 NexeLoadManagerMap::iterator iter = map.find(instance); 110 NexeLoadManagerMap::iterator iter = map.find(instance);
111 if (iter != map.end()) 111 if (iter != map.end())
112 return iter->second; 112 return iter->second;
113 return NULL; 113 return NULL;
114 } 114 }
115 115
116 PP_NaClFileInfo MakeInvalidNaClFileInfo() {
hidehiko 2014/06/18 04:43:11 Just FYI: How about using a constant here? const
teravest 2014/06/18 20:13:43 Done.
117 PP_NaClFileInfo info;
118 info.handle = PP_kInvalidFileHandle;
119 info.token_lo = 0;
120 info.token_hi = 0;
121 return info;
122 }
123
116 int GetRoutingID(PP_Instance instance) { 124 int GetRoutingID(PP_Instance instance) {
117 // Check that we are on the main renderer thread. 125 // Check that we are on the main renderer thread.
118 DCHECK(content::RenderThread::Get()); 126 DCHECK(content::RenderThread::Get());
119 content::RendererPpapiHost *host = 127 content::RendererPpapiHost *host =
120 content::RendererPpapiHost::GetForPPInstance(instance); 128 content::RendererPpapiHost::GetForPPInstance(instance);
121 if (!host) 129 if (!host)
122 return 0; 130 return 0;
123 return host->GetRoutingIDForWidget(instance); 131 return host->GetRoutingIDForWidget(instance);
124 } 132 }
125 133
(...skipping 12 matching lines...) Expand all
138 return true; 146 return true;
139 } 147 }
140 148
141 void PostPPCompletionCallback(PP_CompletionCallback callback, 149 void PostPPCompletionCallback(PP_CompletionCallback callback,
142 int32_t status) { 150 int32_t status) {
143 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( 151 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
144 FROM_HERE, 152 FROM_HERE,
145 base::Bind(callback.func, callback.user_data, status)); 153 base::Bind(callback.func, callback.user_data, status));
146 } 154 }
147 155
156 bool ManifestResolveKey(PP_Instance instance,
hidehiko 2014/06/18 04:43:11 I'm rarely see this kind of forward declaration. C
teravest 2014/06/18 20:13:43 I don't think so; I could try to reorganize the fi
157 bool is_helper_process,
158 const std::string& key,
159 std::string* full_url,
160 PP_PNaClOptions* pnacl_options);
161
162 void DownloadFile(PP_Instance instance,
163 const char* url,
164 base::Callback<void(int32_t, PP_NaClFileInfo)> callback);
hidehiko 2014/06/18 04:43:11 const PP_NaClFileInfo& ? Ditto for below.
teravest 2014/06/18 20:13:44 Done.
165
148 // Thin adapter from PPP_ManifestService to ManifestServiceChannel::Delegate. 166 // Thin adapter from PPP_ManifestService to ManifestServiceChannel::Delegate.
149 // Note that user_data is managed by the caller of LaunchSelLdr. Please see 167 // Note that user_data is managed by the caller of LaunchSelLdr. Please see
150 // also PP_ManifestService's comment for more details about resource 168 // also PP_ManifestService's comment for more details about resource
151 // management. 169 // management.
152 class ManifestServiceProxy : public ManifestServiceChannel::Delegate { 170 class ManifestServiceProxy : public ManifestServiceChannel::Delegate {
153 public: 171 public:
154 ManifestServiceProxy(const PPP_ManifestService* manifest_service, 172 ManifestServiceProxy(PP_Instance pp_instance,
173 const PPP_ManifestService* manifest_service,
155 void* user_data) 174 void* user_data)
156 : manifest_service_(*manifest_service), 175 : pp_instance_(pp_instance),
157 user_data_(user_data) { 176 manifest_service_(*manifest_service),
177 user_data_(user_data),
178 weak_factory_(this) {
158 } 179 }
159 180
160 virtual ~ManifestServiceProxy() { 181 virtual ~ManifestServiceProxy() {
161 Quit(); 182 Quit();
162 } 183 }
163 184
164 virtual void StartupInitializationComplete() OVERRIDE { 185 virtual void StartupInitializationComplete() OVERRIDE {
165 if (!user_data_) 186 if (!user_data_)
166 return; 187 return;
167 188
168 if (!PP_ToBool( 189 if (!PP_ToBool(
169 manifest_service_.StartupInitializationComplete(user_data_))) { 190 manifest_service_.StartupInitializationComplete(user_data_))) {
170 user_data_ = NULL; 191 user_data_ = NULL;
171 } 192 }
172 } 193 }
173 194
174 virtual void OpenResource( 195 virtual void OpenResource(
175 const std::string& key, 196 const std::string& key,
176 const ManifestServiceChannel::OpenResourceCallback& callback) OVERRIDE { 197 const ManifestServiceChannel::OpenResourceCallback& callback) OVERRIDE {
177 if (!user_data_) 198 if (!user_data_)
178 return; 199 return;
179 200
180 // The allocated callback will be freed in DidOpenResource, which is always 201 std::string url;
181 // called regardless whether OpenResource() succeeds or fails. 202 PP_PNaClOptions pnacl_options = {PP_FALSE, PP_FALSE, 2};
dmichael (off chromium) 2014/06/17 21:52:28 nit: This would be more readable if you zero-initi
teravest 2014/06/18 20:13:44 Done.
182 if (!PP_ToBool(manifest_service_.OpenResource( 203 if (!ManifestResolveKey(pp_instance_, false, key, &url, &pnacl_options)) {
183 user_data_, 204 base::MessageLoop::current()->PostTask(
184 key.c_str(), 205 FROM_HERE,
185 DidOpenResource, 206 base::Bind(callback, PP_kInvalidFileHandle));
186 new ManifestServiceChannel::OpenResourceCallback(callback)))) { 207 return;
187 user_data_ = NULL;
188 } 208 }
209
210 DownloadFile(pp_instance_, url.c_str(),
211 base::Bind(&ManifestServiceProxy::DidDownloadFile,
212 weak_factory_.GetWeakPtr(),
213 callback));
189 } 214 }
190 215
191 private: 216 private:
192 static void DidOpenResource(void* user_data, PP_FileHandle file_handle) { 217 void DidDownloadFile(ManifestServiceChannel::OpenResourceCallback callback,
hidehiko 2014/06/18 04:43:11 Can be static? Or is it intentional change that th
teravest 2014/06/18 20:13:44 Changed this to be static. It's better without the
193 scoped_ptr<ManifestServiceChannel::OpenResourceCallback> callback( 218 int32_t pp_error,
194 static_cast<ManifestServiceChannel::OpenResourceCallback*>(user_data)); 219 PP_NaClFileInfo file_info) {
195 callback->Run(file_handle); 220 if (pp_error != PP_OK) {
221 callback.Run(base::kInvalidPlatformFileValue);
222 return;
223 }
224 callback.Run(file_info.handle);
196 } 225 }
197 226
198 void Quit() { 227 void Quit() {
199 if (!user_data_) 228 if (!user_data_)
200 return; 229 return;
201 230
202 bool result = PP_ToBool(manifest_service_.Quit(user_data_)); 231 bool result = PP_ToBool(manifest_service_.Quit(user_data_));
203 DCHECK(!result); 232 DCHECK(!result);
204 user_data_ = NULL; 233 user_data_ = NULL;
205 } 234 }
206 235
236 PP_Instance pp_instance_;
207 PPP_ManifestService manifest_service_; 237 PPP_ManifestService manifest_service_;
208 void* user_data_; 238 void* user_data_;
239 base::WeakPtrFactory<ManifestServiceProxy> weak_factory_;
240
209 DISALLOW_COPY_AND_ASSIGN(ManifestServiceProxy); 241 DISALLOW_COPY_AND_ASSIGN(ManifestServiceProxy);
210 }; 242 };
211 243
212 blink::WebURLLoader* CreateWebURLLoader(const blink::WebDocument& document, 244 blink::WebURLLoader* CreateWebURLLoader(const blink::WebDocument& document,
213 const GURL& gurl) { 245 const GURL& gurl) {
214 blink::WebURLLoaderOptions options; 246 blink::WebURLLoaderOptions options;
215 options.untrustedHTTP = true; 247 options.untrustedHTTP = true;
216 248
217 // Options settings here follow the original behavior in the trusted 249 // Options settings here follow the original behavior in the trusted
218 // plugin and PepperURLLoaderHost. 250 // plugin and PepperURLLoaderHost.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 void* imc_handle, 296 void* imc_handle,
265 PP_CompletionCallback callback) { 297 PP_CompletionCallback callback) {
266 CHECK(ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()-> 298 CHECK(ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->
267 BelongsToCurrentThread()); 299 BelongsToCurrentThread());
268 300
269 // Create the manifest service proxy here, so on error case, it will be 301 // Create the manifest service proxy here, so on error case, it will be
270 // destructed (without passing it to ManifestServiceChannel), and QUIT 302 // destructed (without passing it to ManifestServiceChannel), and QUIT
271 // will be called in its destructor so that the caller of this function 303 // will be called in its destructor so that the caller of this function
272 // can free manifest_service_user_data properly. 304 // can free manifest_service_user_data properly.
273 scoped_ptr<ManifestServiceChannel::Delegate> manifest_service_proxy( 305 scoped_ptr<ManifestServiceChannel::Delegate> manifest_service_proxy(
274 new ManifestServiceProxy(manifest_service_interface, 306 new ManifestServiceProxy(instance,
307 manifest_service_interface,
275 manifest_service_user_data)); 308 manifest_service_user_data));
276 309
277 FileDescriptor result_socket; 310 FileDescriptor result_socket;
278 IPC::Sender* sender = content::RenderThread::Get(); 311 IPC::Sender* sender = content::RenderThread::Get();
279 DCHECK(sender); 312 DCHECK(sender);
280 int routing_id = 0; 313 int routing_id = 0;
281 // If the nexe uses ppapi APIs, we need a routing ID. 314 // If the nexe uses ppapi APIs, we need a routing ID.
282 // To get the routing ID, we must be on the main thread. 315 // To get the routing ID, we must be on the main thread.
283 // Some nexes do not use ppapi and launch from the background thread, 316 // Some nexes do not use ppapi and launch from the background thread,
284 // so those nexes can skip finding a routing_id. 317 // so those nexes can skip finding a routing_id.
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 if (load_manager) 1055 if (load_manager)
1023 load_manager->ReportLoadError(error_info.error, error_info.string); 1056 load_manager->ReportLoadError(error_info.error, error_info.string);
1024 return PP_FALSE; 1057 return PP_FALSE;
1025 } 1058 }
1026 1059
1027 bool ManifestResolveKey(PP_Instance instance, 1060 bool ManifestResolveKey(PP_Instance instance,
1028 bool is_helper_process, 1061 bool is_helper_process,
1029 const std::string& key, 1062 const std::string& key,
1030 std::string* full_url, 1063 std::string* full_url,
1031 PP_PNaClOptions* pnacl_options) { 1064 PP_PNaClOptions* pnacl_options) {
1032 // For "helper" processes (llc and ld), we resolve keys manually as there is 1065 // For "helper" processes (llc and ld), we resolve keys manually as there is
hidehiko 2014/06/18 04:43:11 Update this comment, too?
teravest 2014/06/18 20:13:43 Not exactly sure what you want here, but I did upd
1033 // no existing .nmf file to parse. 1066 // no existing .nmf file to parse.
1034 if (is_helper_process) { 1067 if (is_helper_process) {
1035 pnacl_options->translate = PP_FALSE; 1068 pnacl_options->translate = PP_FALSE;
1036 // We can only resolve keys in the files/ namespace. 1069 // We can only resolve keys in the files/ namespace.
1037 const std::string kFilesPrefix = "files/"; 1070 const std::string kFilesPrefix = "files/";
1038 if (key.find(kFilesPrefix) == std::string::npos) { 1071 if (key.find(kFilesPrefix) == std::string::npos) {
1039 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance); 1072 nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
1040 if (load_manager) 1073 if (load_manager)
1041 load_manager->ReportLoadError(PP_NACL_ERROR_MANIFEST_RESOLVE_URL, 1074 load_manager->ReportLoadError(PP_NACL_ERROR_MANIFEST_RESOLVE_URL,
1042 "key did not start with files/"); 1075 "key did not start with files/");
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
1361 } 1394 }
1362 1395
1363 if (pp_error == PP_OK && target_file.IsValid()) 1396 if (pp_error == PP_OK && target_file.IsValid())
1364 out_file_info->handle = target_file.TakePlatformFile(); 1397 out_file_info->handle = target_file.TakePlatformFile();
1365 else 1398 else
1366 out_file_info->handle = PP_kInvalidFileHandle; 1399 out_file_info->handle = PP_kInvalidFileHandle;
1367 1400
1368 request.callback.func(request.callback.user_data, pp_error); 1401 request.callback.func(request.callback.user_data, pp_error);
1369 } 1402 }
1370 1403
1371 void DownloadFileCompletion(PP_NaClFileInfo* file_info, 1404 void DownloadFileCompletion(
1372 PP_CompletionCallback callback, 1405 base::Callback<void(int32_t, PP_NaClFileInfo)> callback,
1373 FileDownloader::Status status, 1406 FileDownloader::Status status,
1374 base::File file, 1407 base::File file,
1375 int http_status) { 1408 int http_status) {
1376 int32_t pp_error = FileDownloaderToPepperError(status); 1409 int32_t pp_error = FileDownloaderToPepperError(status);
1377 if (pp_error == PP_OK) { 1410 PP_NaClFileInfo file_info = MakeInvalidNaClFileInfo();
1378 file_info->handle = file.TakePlatformFile(); 1411 if (pp_error == PP_OK)
1379 file_info->token_lo = 0; 1412 file_info.handle = file.TakePlatformFile();
hidehiko 2014/06/18 04:43:11 Setting the platform file handle to invalid file i
teravest 2014/06/18 20:13:44 Done.
1380 file_info->token_hi = 0; 1413 callback.Run(pp_error, file_info);
1381 }
1382 callback.func(callback.user_data, pp_error);
1383 } 1414 }
1384 1415
1385 void DownloadFile(PP_Instance instance, 1416 void DownloadFile(PP_Instance instance,
1386 const char* url, 1417 const char* url,
1387 struct PP_NaClFileInfo* file_info, 1418 base::Callback<void(int32_t, PP_NaClFileInfo)> callback) {
1388 struct PP_CompletionCallback callback) {
1389 CHECK(url); 1419 CHECK(url);
1390 CHECK(file_info);
1391 1420
1392 NexeLoadManager* load_manager = GetNexeLoadManager(instance); 1421 NexeLoadManager* load_manager = GetNexeLoadManager(instance);
1393 DCHECK(load_manager); 1422 DCHECK(load_manager);
1394 if (!load_manager) { 1423 if (!load_manager) {
1395 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( 1424 base::MessageLoop::current()->PostTask(
dmichael (off chromium) 2014/06/17 21:52:28 Is this only a cosmetic change, or are you trying
teravest 2014/06/18 20:13:44 Done.
1396 FROM_HERE, 1425 FROM_HERE,
1397 base::Bind(callback.func, callback.user_data, 1426 base::Bind(callback,
1398 static_cast<int32_t>(PP_ERROR_FAILED))); 1427 static_cast<int32_t>(PP_ERROR_FAILED),
1428 MakeInvalidNaClFileInfo()));
1399 return; 1429 return;
1400 } 1430 }
1401 1431
1402 // Handle special PNaCl support files which are installed on the user's 1432 // Handle special PNaCl support files which are installed on the user's
1403 // machine. 1433 // machine.
1404 std::string url_string(url); 1434 std::string url_string(url);
1405 if (url_string.find(kPNaClTranslatorBaseUrl, 0) == 0) { 1435 if (url_string.find(kPNaClTranslatorBaseUrl, 0) == 0) {
1406 PP_FileHandle handle = GetReadonlyPnaclFd(url); 1436 PP_FileHandle handle = GetReadonlyPnaclFd(url);
1407 if (handle == PP_kInvalidFileHandle) { 1437 if (handle == PP_kInvalidFileHandle) {
1408 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( 1438 base::MessageLoop::current()->PostTask(
1409 FROM_HERE, 1439 FROM_HERE,
1410 base::Bind(callback.func, callback.user_data, 1440 base::Bind(callback,
1411 static_cast<int32_t>(PP_ERROR_FAILED))); 1441 static_cast<int32_t>(PP_ERROR_FAILED),
1442 MakeInvalidNaClFileInfo()));
1412 return; 1443 return;
1413 } 1444 }
1414 // TODO(ncbray): enable the fast loading and validation paths for this type 1445 // TODO(ncbray): enable the fast loading and validation paths for this type
1415 // of file. 1446 // of file.
1416 file_info->handle = handle; 1447 PP_NaClFileInfo file_info;
1417 file_info->token_lo = 0; 1448 file_info.handle = handle;
1418 file_info->token_hi = 0; 1449 file_info.token_lo = 0;
1419 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( 1450 file_info.token_hi = 0;
1451 base::MessageLoop::current()->PostTask(
1420 FROM_HERE, 1452 FROM_HERE,
1421 base::Bind(callback.func, callback.user_data, 1453 base::Bind(callback, static_cast<int32_t>(PP_OK), file_info));
1422 static_cast<int32_t>(PP_OK)));
1423 return; 1454 return;
1424 } 1455 }
1425 1456
1426 // We have to ensure that this url resolves relative to the plugin base url 1457 // We have to ensure that this url resolves relative to the plugin base url
1427 // before downloading it. 1458 // before downloading it.
1428 const GURL& test_gurl = load_manager->plugin_base_url().Resolve(url); 1459 const GURL& test_gurl = load_manager->plugin_base_url().Resolve(url);
1429 if (!test_gurl.is_valid()) { 1460 if (!test_gurl.is_valid()) {
1430 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( 1461 base::MessageLoop::current()->PostTask(
1431 FROM_HERE, 1462 FROM_HERE,
1432 base::Bind(callback.func, callback.user_data, 1463 base::Bind(callback,
1433 static_cast<int32_t>(PP_ERROR_FAILED))); 1464 static_cast<int32_t>(PP_ERROR_FAILED),
1465 MakeInvalidNaClFileInfo()));
1434 return; 1466 return;
1435 } 1467 }
1436 1468
1437 // Try the fast path for retrieving the file first. 1469 // Try the fast path for retrieving the file first.
1438 uint64_t file_token_lo = 0; 1470 uint64_t file_token_lo = 0;
1439 uint64_t file_token_hi = 0; 1471 uint64_t file_token_hi = 0;
1440 PP_FileHandle file_handle = OpenNaClExecutable(instance, 1472 PP_FileHandle file_handle = OpenNaClExecutable(instance,
1441 url, 1473 url,
1442 &file_token_lo, 1474 &file_token_lo,
1443 &file_token_hi); 1475 &file_token_hi);
1444 if (file_handle != PP_kInvalidFileHandle) { 1476 if (file_handle != PP_kInvalidFileHandle) {
1445 file_info->handle = file_handle; 1477 PP_NaClFileInfo file_info;
1446 file_info->token_lo = file_token_lo; 1478 file_info.handle = file_handle;
1447 file_info->token_hi = file_token_hi; 1479 file_info.token_lo = file_token_lo;
1448 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( 1480 file_info.token_hi = file_token_hi;
1481 base::MessageLoop::current()->PostTask(
1449 FROM_HERE, 1482 FROM_HERE,
1450 base::Bind(callback.func, callback.user_data, 1483 base::Bind(callback, static_cast<int32_t>(PP_OK), file_info));
1451 static_cast<int32_t>(PP_OK)));
1452 return; 1484 return;
1453 } 1485 }
1454 1486
1455 // The fast path didn't work, we'll fetch the file using URLLoader and write 1487 // The fast path didn't work, we'll fetch the file using URLLoader and write
1456 // it to local storage. 1488 // it to local storage.
1457 base::File target_file(CreateTemporaryFile(instance)); 1489 base::File target_file(CreateTemporaryFile(instance));
1458 GURL gurl(url); 1490 GURL gurl(url);
1459 1491
1460 content::PepperPluginInstance* plugin_instance = 1492 content::PepperPluginInstance* plugin_instance =
1461 content::PepperPluginInstance::Get(instance); 1493 content::PepperPluginInstance::Get(instance);
1462 if (!plugin_instance) { 1494 if (!plugin_instance) {
1463 ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask( 1495 base::MessageLoop::current()->PostTask(
1464 FROM_HERE, 1496 FROM_HERE,
1465 base::Bind(callback.func, callback.user_data, 1497 base::Bind(callback,
1466 static_cast<int32_t>(PP_ERROR_FAILED))); 1498 static_cast<int32_t>(PP_ERROR_FAILED),
1499 MakeInvalidNaClFileInfo()));
1467 } 1500 }
1468 const blink::WebDocument& document = 1501 const blink::WebDocument& document =
1469 plugin_instance->GetContainer()->element().document(); 1502 plugin_instance->GetContainer()->element().document();
1470 scoped_ptr<blink::WebURLLoader> url_loader( 1503 scoped_ptr<blink::WebURLLoader> url_loader(
1471 CreateWebURLLoader(document, gurl)); 1504 CreateWebURLLoader(document, gurl));
1472 blink::WebURLRequest url_request = CreateWebURLRequest(document, gurl); 1505 blink::WebURLRequest url_request = CreateWebURLRequest(document, gurl);
1473 1506
1474 ProgressEventRateLimiter* tracker = new ProgressEventRateLimiter(instance); 1507 ProgressEventRateLimiter* tracker = new ProgressEventRateLimiter(instance);
1475 1508
1476 // FileDownloader deletes itself after invoking DownloadNexeCompletion. 1509 // FileDownloader deletes itself after invoking DownloadNexeCompletion.
1477 FileDownloader* file_downloader = new FileDownloader( 1510 FileDownloader* file_downloader = new FileDownloader(
1478 url_loader.Pass(), 1511 url_loader.Pass(),
1479 target_file.Pass(), 1512 target_file.Pass(),
1480 base::Bind(&DownloadFileCompletion, file_info, callback), 1513 base::Bind(&DownloadFileCompletion, callback),
1481 base::Bind(&ProgressEventRateLimiter::ReportProgress, 1514 base::Bind(&ProgressEventRateLimiter::ReportProgress,
1482 base::Owned(tracker), url)); 1515 base::Owned(tracker), url));
1483 file_downloader->Load(url_request); 1516 file_downloader->Load(url_request);
1484 } 1517 }
1485 1518
1519 void ExternalDownloadFileCompletion(struct PP_NaClFileInfo* out_file_info,
1520 struct PP_CompletionCallback callback,
1521 int32_t pp_error,
1522 PP_NaClFileInfo file_info) {
1523 DCHECK(callback.func);
dmichael (off chromium) 2014/06/17 21:52:28 nit: This DCHECK seems either unnecessary or like
teravest 2014/06/18 20:13:43 Done.
1524 if (pp_error == PP_OK) {
1525 out_file_info->handle = file_info.handle;
hidehiko 2014/06/18 04:43:11 Maybe: *out_file_info = file_info;
teravest 2014/06/18 20:13:43 Done.
1526 out_file_info->token_lo = file_info.token_lo;
1527 out_file_info->token_hi = file_info.token_hi;
1528 }
1529 callback.func(callback.user_data, pp_error);
1530 }
1531
1532 void ExternalDownloadFile(PP_Instance instance,
1533 const char* url,
1534 struct PP_NaClFileInfo* file_info,
1535 struct PP_CompletionCallback callback) {
1536 CHECK(ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->
1537 BelongsToCurrentThread());
1538 DownloadFile(instance, url,
1539 base::Bind(&ExternalDownloadFileCompletion,
1540 file_info,
1541 callback));
1542 }
1543
1486 void ReportSelLdrStatus(PP_Instance instance, 1544 void ReportSelLdrStatus(PP_Instance instance,
1487 int32_t load_status, 1545 int32_t load_status,
1488 int32_t max_status) { 1546 int32_t max_status) {
1489 HistogramEnumerate("NaCl.LoadStatus.SelLdr", load_status, max_status); 1547 HistogramEnumerate("NaCl.LoadStatus.SelLdr", load_status, max_status);
1490 NexeLoadManager* load_manager = GetNexeLoadManager(instance); 1548 NexeLoadManager* load_manager = GetNexeLoadManager(instance);
1491 DCHECK(load_manager); 1549 DCHECK(load_manager);
1492 if (!load_manager) 1550 if (!load_manager)
1493 return; 1551 return;
1494 1552
1495 // Gather data to see if being installed changes load outcomes. 1553 // Gather data to see if being installed changes load outcomes.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1539 &RequestNaClManifest, 1597 &RequestNaClManifest,
1540 &GetManifestBaseURL, 1598 &GetManifestBaseURL,
1541 &ProcessNaClManifest, 1599 &ProcessNaClManifest,
1542 &DevInterfacesEnabled, 1600 &DevInterfacesEnabled,
1543 &ManifestGetProgramURL, 1601 &ManifestGetProgramURL,
1544 &ExternalManifestResolveKey, 1602 &ExternalManifestResolveKey,
1545 &GetPNaClResourceInfo, 1603 &GetPNaClResourceInfo,
1546 &GetCpuFeatureAttrs, 1604 &GetCpuFeatureAttrs,
1547 &PostMessageToJavaScript, 1605 &PostMessageToJavaScript,
1548 &DownloadNexe, 1606 &DownloadNexe,
1549 &DownloadFile, 1607 &ExternalDownloadFile,
1550 &ReportSelLdrStatus, 1608 &ReportSelLdrStatus,
1551 &LogTranslateTime 1609 &LogTranslateTime
1552 }; 1610 };
1553 1611
1554 } // namespace 1612 } // namespace
1555 1613
1556 const PPB_NaCl_Private* GetNaClPrivateInterface() { 1614 const PPB_NaCl_Private* GetNaClPrivateInterface() {
1557 return &nacl_interface; 1615 return &nacl_interface;
1558 } 1616 }
1559 1617
1560 } // namespace nacl 1618 } // namespace nacl
OLDNEW
« no previous file with comments | « no previous file | ppapi/nacl_irt/manifest_service.cc » ('j') | ppapi/nacl_irt/manifest_service.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698