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

Side by Side Diff: src/trusted/service_runtime/sel_main_chrome.c

Issue 1089323006: Add a load_status callback hook that is invoked at the end of chrome LoadApp. (Closed) Base URL: https://chromium.googlesource.com/native_client/src/native_client.git@master
Patch Set: reorder events Created 5 years, 8 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
« src/public/chrome_main.h ('K') | « src/public/chrome_main.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be 3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file. 4 * found in the LICENSE file.
5 */ 5 */
6 6
7 #include "native_client/src/public/chrome_main.h" 7 #include "native_client/src/public/chrome_main.h"
8 8
9 #include "native_client/src/include/build_config.h" 9 #include "native_client/src/include/build_config.h"
10 #include "native_client/src/include/portability.h" 10 #include "native_client/src/include/portability.h"
(...skipping 26 matching lines...) Expand all
37 #include "native_client/src/trusted/service_runtime/sel_ldr.h" 37 #include "native_client/src/trusted/service_runtime/sel_ldr.h"
38 #include "native_client/src/trusted/service_runtime/sel_main_common.h" 38 #include "native_client/src/trusted/service_runtime/sel_main_common.h"
39 #include "native_client/src/trusted/service_runtime/sel_qualify.h" 39 #include "native_client/src/trusted/service_runtime/sel_qualify.h"
40 #include "native_client/src/trusted/service_runtime/win/exception_patch/ntdll_pa tch.h" 40 #include "native_client/src/trusted/service_runtime/win/exception_patch/ntdll_pa tch.h"
41 #include "native_client/src/trusted/validator/rich_file_info.h" 41 #include "native_client/src/trusted/validator/rich_file_info.h"
42 #include "native_client/src/trusted/validator/validation_metadata.h" 42 #include "native_client/src/trusted/validator/validation_metadata.h"
43 43
44 static int g_initialized = 0; 44 static int g_initialized = 0;
45 45
46 static void (*g_fatal_error_handler)(const char *data, size_t bytes) = NULL; 46 static void (*g_fatal_error_handler)(const char *data, size_t bytes) = NULL;
47 static void (*g_load_status_callback)(int load_status) = NULL;
47 48
48 static const int default_argc = 1; 49 static const int default_argc = 1;
49 static const char *const default_argv[1] = {"NaClMain"}; 50 static const char *const default_argv[1] = {"NaClMain"};
50 51
51 #if NACL_LINUX || NACL_OSX 52 #if NACL_LINUX || NACL_OSX
52 void NaClChromeMainSetUrandomFd(int urandom_fd) { 53 void NaClChromeMainSetUrandomFd(int urandom_fd) {
53 CHECK(!g_initialized); 54 CHECK(!g_initialized);
54 NaClSecureRngModuleSetUrandomFd(urandom_fd); 55 NaClSecureRngModuleSetUrandomFd(urandom_fd);
55 } 56 }
56 #endif 57 #endif
(...skipping 12 matching lines...) Expand all
69 } 70 }
70 71
71 void NaClSetFatalErrorCallback(void (*func)(const char *data, size_t bytes)) { 72 void NaClSetFatalErrorCallback(void (*func)(const char *data, size_t bytes)) {
72 CHECK(g_initialized); 73 CHECK(g_initialized);
73 if (g_fatal_error_handler != NULL) 74 if (g_fatal_error_handler != NULL)
74 NaClLog(LOG_FATAL, "NaClSetFatalErrorCallback called twice.\n"); 75 NaClLog(LOG_FATAL, "NaClSetFatalErrorCallback called twice.\n");
75 g_fatal_error_handler = func; 76 g_fatal_error_handler = func;
76 NaClErrorLogHookInit(NaClFatalErrorHandlerCallback, NULL); 77 NaClErrorLogHookInit(NaClFatalErrorHandlerCallback, NULL);
77 } 78 }
78 79
80 void NaClSetLoadStatusCallback(void (*func)(int load_status)) {
81 CHECK(g_initialized);
82 if (g_load_status_callback != NULL)
83 NaClLog(LOG_FATAL, "NaClSetLoadStatusCallback called twice.\n");
84 g_load_status_callback = func;
85 }
86
79 struct NaClChromeMainArgs *NaClChromeMainArgsCreate(void) { 87 struct NaClChromeMainArgs *NaClChromeMainArgsCreate(void) {
80 struct NaClChromeMainArgs *args; 88 struct NaClChromeMainArgs *args;
81 89
82 CHECK(g_initialized); 90 CHECK(g_initialized);
83 args = malloc(sizeof(*args)); 91 args = malloc(sizeof(*args));
84 if (args == NULL) 92 if (args == NULL)
85 return NULL; 93 return NULL;
86 args->imc_bootstrap_handle = NACL_INVALID_HANDLE; 94 args->imc_bootstrap_handle = NACL_INVALID_HANDLE;
87 args->irt_fd = -1; 95 args->irt_fd = -1;
88 args->irt_desc = NULL; 96 args->irt_desc = NULL;
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 if (!NaClDebugInit(nap)) { 372 if (!NaClDebugInit(nap)) {
365 goto done; 373 goto done;
366 } 374 }
367 #if NACL_WINDOWS 375 #if NACL_WINDOWS
368 if (NULL != args->debug_stub_server_port_selected_handler_func) { 376 if (NULL != args->debug_stub_server_port_selected_handler_func) {
369 args->debug_stub_server_port_selected_handler_func(nap->debug_stub_port); 377 args->debug_stub_server_port_selected_handler_func(nap->debug_stub_port);
370 } 378 }
371 #endif 379 #endif
372 } 380 }
373 381
382 if (g_load_status_callback != NULL) {
383 g_load_status_callback(LOAD_OK);
384 }
374 return LOAD_OK; 385 return LOAD_OK;
375 386
376 done: 387 done:
377 fflush(stdout); 388 fflush(stdout);
378 389
379 /* 390 /*
380 * If there is a secure command channel, we sent an RPC reply with 391 * If there is a load_status_callback, call that now. TODO(jvoung): remove
381 * the reason that the nexe was rejected. If we exit now, that 392 * NaClBlockIfCommandChannelExists() and just call g_load_status_callback
382 * reply may still be in-flight and the various channel closure (esp 393 * to indicate the load_status.
383 * reverse channel) may be detected first. This would result in a 394 */
384 * crash being reported, rather than the error in the RPC reply. 395 if (g_load_status_callback != NULL) {
396 /* Don't return LOAD_OK if we had some failure loading. */
397 if (LOAD_OK == errcode) {
398 errcode = LOAD_INTERNAL;
399 }
400 g_load_status_callback(errcode);
401 NaClLog(LOG_ERROR, "reap logs\n");
402 NaClLogRunAbortBehavior();
403 return errcode;
404 }
405 /*
406 * If there is no load_status_callback, but there is a secure command channel,
407 * we sent an RPC reply with the reason that the nexe was rejected.
408 * If we exit now, that reply may still be in-flight and the various
409 * channel closure (esp reverse channel) may be detected first. This would
410 * result in a crash being reported, rather than the error in the RPC reply.
385 * Instead, we wait for the hard-shutdown on the command channel. 411 * Instead, we wait for the hard-shutdown on the command channel.
386 */ 412 */
387 if (LOAD_OK != errcode) { 413 if (LOAD_OK != errcode) {
388 NaClBlockIfCommandChannelExists(nap); 414 NaClBlockIfCommandChannelExists(nap);
389 } else { 415 } else {
390 /* 416 /*
391 * Don't return LOAD_OK if we had some failure loading. 417 * Don't return LOAD_OK if we had some failure loading.
392 */ 418 */
393 errcode = LOAD_INTERNAL; 419 errcode = LOAD_INTERNAL;
394 } 420 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 int NaClChromeMainStart(struct NaClApp *nap, 464 int NaClChromeMainStart(struct NaClApp *nap,
439 struct NaClChromeMainArgs *args, 465 struct NaClChromeMainArgs *args,
440 int *exit_status) { 466 int *exit_status) {
441 int load_ok = LOAD_OK == LoadApp(nap, args); 467 int load_ok = LOAD_OK == LoadApp(nap, args);
442 if (load_ok) { 468 if (load_ok) {
443 *exit_status = StartApp(nap, args); 469 *exit_status = StartApp(nap, args);
444 } 470 }
445 free(args); 471 free(args);
446 return load_ok; 472 return load_ok;
447 } 473 }
OLDNEW
« src/public/chrome_main.h ('K') | « src/public/chrome_main.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698