summaryrefslogtreecommitdiffstats
path: root/ppapi/native_client/src/trusted
diff options
context:
space:
mode:
authorncbray@google.com <ncbray@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-05 18:38:56 +0000
committerncbray@google.com <ncbray@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-05 18:38:56 +0000
commit9993310623dcf7a6b9834def8fec39a810ca6693 (patch)
treec0074f944030f819539fa8d518522d63331c863e /ppapi/native_client/src/trusted
parentd24ed86e553643a54e834fac818b787d6c2633eb (diff)
downloadchromium_src-9993310623dcf7a6b9834def8fec39a810ca6693.zip
chromium_src-9993310623dcf7a6b9834def8fec39a810ca6693.tar.gz
chromium_src-9993310623dcf7a6b9834def8fec39a810ca6693.tar.bz2
Instrument NaCl's plugin to generate a crash dump to help diagnose in-the-field failiures.
BUG= http://code.google.com/p/chromium/issues/detail?id=122057 TEST= none Review URL: https://chromiumcodereview.appspot.com/9960029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@130979 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/native_client/src/trusted')
-rw-r--r--ppapi/native_client/src/trusted/plugin/plugin.cc19
-rw-r--r--ppapi/native_client/src/trusted/plugin/plugin.h2
2 files changed, 20 insertions, 1 deletions
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.cc b/ppapi/native_client/src/trusted/plugin/plugin.cc
index 7e3abe4..ace9821 100644
--- a/ppapi/native_client/src/trusted/plugin/plugin.cc
+++ b/ppapi/native_client/src/trusted/plugin/plugin.cc
@@ -1689,8 +1689,14 @@ void Plugin::ReportLoadError(const ErrorInfo& error_info) {
// UMA
HistogramEnumerateLoadStatus(error_info.error_code());
-}
+ // Temporary in-the-field debugging.
+ // TODO(ncbray) remove.
+ // http://code.google.com/p/chromium/issues/detail?id=122057
+ if (error_info.error_code() == ERROR_START_PROXY_CRASH) {
+ GenerateCrashReportWithoutCrashing();
+ }
+}
void Plugin::ReportLoadAbort() {
PLUGIN_PRINTF(("Plugin::ReportLoadAbort\n"));
@@ -1921,4 +1927,15 @@ void Plugin::AddToConsole(const nacl::string& text) {
var_interface->Release(str);
}
+void Plugin::GenerateCrashReportWithoutCrashing() {
+#if NACL_WINDOWS && !defined(NACL_STANDALONE)
+ typedef void (__cdecl *DumpProcessFunction)();
+ // Find the dump function inside chrome.exe and call it.
+ DumpProcessFunction request_dump = reinterpret_cast<DumpProcessFunction>(
+ ::GetProcAddress(::GetModuleHandle(NULL), "DumpProcessWithoutCrash"));
+ if (request_dump)
+ request_dump();
+#endif
+}
+
} // namespace plugin
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.h b/ppapi/native_client/src/trusted/plugin/plugin.h
index 2946181..6119d5e 100644
--- a/ppapi/native_client/src/trusted/plugin/plugin.h
+++ b/ppapi/native_client/src/trusted/plugin/plugin.h
@@ -420,6 +420,8 @@ class Plugin : public pp::InstancePrivate {
// Shuts down the proxy for PPAPI nexes.
void ShutdownProxy(); // Nexe shutdown + proxy deletion.
+ void GenerateCrashReportWithoutCrashing();
+
ScriptablePlugin* scriptable_plugin_;
int argc_;