diff --git a/metrics/c_metrics_library.cc b/metrics/c_metrics_library.cc
index 3450918..8946699 100644
--- a/metrics/c_metrics_library.cc
+++ b/metrics/c_metrics_library.cc
@@ -51,6 +51,14 @@
   return lib->SendUserActionToUMA(std::string(action));
 }
 
+extern "C" int CMetricsLibrarySendCrashToUMA(CMetricsLibrary handle,
+                                            const char* crash_kind) {
+  MetricsLibrary* lib = reinterpret_cast<MetricsLibrary*>(handle);
+  if (lib == NULL)
+    return 0;
+  return lib->SendCrashToUMA(crash_kind);
+}
+
 extern "C" int CMetricsLibraryAreMetricsEnabled(CMetricsLibrary handle) {
   MetricsLibrary* lib = reinterpret_cast<MetricsLibrary*>(handle);
   if (lib == NULL)
diff --git a/metrics/c_metrics_library.h b/metrics/c_metrics_library.h
index 9500aad..5c7003d 100644
--- a/metrics/c_metrics_library.h
+++ b/metrics/c_metrics_library.h
@@ -32,6 +32,10 @@
 int CMetricsLibrarySendUserActionToUMA(CMetricsLibrary handle,
                                        const char* action);
 
+// C wrapper for MetricsLibrary::SendCrashToUMA.
+int CMetricsLibrarySendCrashToUMA(CMetricsLibrary handle,
+                                  const char* crash_kind);
+
 // C wrapper for MetricsLibrary::AreMetricsEnabled.
 int CMetricsLibraryAreMetricsEnabled(CMetricsLibrary handle);
 
diff --git a/metrics/metrics_library.cc b/metrics/metrics_library.cc
index 05e63ac..f2046a3 100644
--- a/metrics/metrics_library.cc
+++ b/metrics/metrics_library.cc
@@ -255,3 +255,17 @@
   // Send the message.
   return SendMessageToChrome(message_length, message);
 }
+
+bool MetricsLibrary::SendCrashToUMA(const char *crash_kind) {
+  // Format the message.
+  char message[kBufferSize];
+  int32_t message_length =
+      FormatChromeMessage(kBufferSize, message,
+                          "crash%c%s", '\0', crash_kind);
+
+  if (message_length < 0)
+    return false;
+
+  // Send the message.
+  return SendMessageToChrome(message_length, message);
+}
diff --git a/metrics/metrics_library.h b/metrics/metrics_library.h
index ed83862..3f860eb 100644
--- a/metrics/metrics_library.h
+++ b/metrics/metrics_library.h
@@ -82,6 +82,10 @@
   // |action| is the user-generated event (e.g., "MuteKeyPressed").
   bool SendUserActionToUMA(const std::string& action);
 
+  // Sends a signal to UMA that a crash of the given |crash_kind|
+  // has occurred.  Used by UMA to generate stability statistics.
+  bool SendCrashToUMA(const char *crash_kind);
+
   // Sends to Autotest and returns true on success.
   static bool SendToAutotest(const std::string& name, int value);
 
diff --git a/metrics/metrics_library_test.cc b/metrics/metrics_library_test.cc
index 3e49f69..762be4a 100644
--- a/metrics/metrics_library_test.cc
+++ b/metrics/metrics_library_test.cc
@@ -231,6 +231,23 @@
   EXPECT_FALSE(file_util::PathExists(kTestUMAEventsFile));
 }
 
+TEST_F(MetricsLibraryTest, SendCrashToUMAEnabled) {
+  EXPECT_TRUE(lib_.SendCrashToUMA("kernel"));
+  char exp[100];
+  int len = sprintf(exp, "%c%c%c%ccrash%ckernel",
+                    0, 0, 0, 0, 0) + 1;
+  exp[0] = len;
+  char buf[100];
+  EXPECT_EQ(len, file_util::ReadFile(kTestUMAEventsFile, buf, 100));
+  EXPECT_EQ(0, memcmp(exp, buf, len));
+}
+
+TEST_F(MetricsLibraryTest, SendCrashToUMANotEnabled) {
+  SetMetricsEnabled(false);
+  EXPECT_TRUE(lib_.SendCrashToUMA("kernel"));
+  EXPECT_FALSE(file_util::PathExists(kTestUMAEventsFile));
+}
+
 class CMetricsLibraryTest : public testing::Test {
  protected:
   virtual void SetUp() {
@@ -296,6 +313,17 @@
   EXPECT_EQ(0, memcmp(exp, buf, kLen));
 }
 
+TEST_F(CMetricsLibraryTest, SendCrashToUMA) {
+  char buf[100];
+  char exp[100];
+  int len = sprintf(exp, "%c%c%c%ccrash%cuser", 0, 0, 0, 0, 0) + 1;
+  exp[0] = len;
+  EXPECT_TRUE(CMetricsLibrarySendCrashToUMA(lib_, "user"));
+  EXPECT_EQ(len, file_util::ReadFile(kTestUMAEventsFile, buf, 100));
+
+  EXPECT_EQ(0, memcmp(exp, buf, len));
+}
+
 int main(int argc, char** argv) {
   testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
