| Index: chrome/browser/ui/webui/crashes_ui.cc | 
| diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/crashes_ui.cc | 
| index 67d9a55fbee40e06891f92b69367280967fca323..2f5d3985e8de3adeaa455e5f0b5b6b80ea9fb2cb 100644 | 
| --- a/chrome/browser/ui/webui/crashes_ui.cc | 
| +++ b/chrome/browser/ui/webui/crashes_ui.cc | 
| @@ -32,6 +32,8 @@ | 
|  | 
| #if defined(OS_CHROMEOS) | 
| #include "chrome/browser/chromeos/settings/cros_settings.h" | 
| +#include "chromeos/dbus/dbus_thread_manager.h" | 
| +#include "chromeos/dbus/debug_daemon_client.h" | 
| #endif | 
|  | 
| using content::WebContents; | 
| @@ -55,6 +57,7 @@ content::WebUIDataSource* CreateCrashesUIHTMLSource() { | 
| IDS_CRASHES_NO_CRASHES_MESSAGE); | 
| source->AddLocalizedString("disabledHeader", IDS_CRASHES_DISABLED_HEADER); | 
| source->AddLocalizedString("disabledMessage", IDS_CRASHES_DISABLED_MESSAGE); | 
| +  source->AddLocalizedString("uploadCrashesLinkText", IDS_CRASHES_UPLOAD_MESSAGE); | 
| source->SetJsonPath("strings.js"); | 
| source->AddResourcePath("crashes.js", IDR_CRASHES_JS); | 
| source->SetDefaultResource(IDR_CRASHES_HTML); | 
| @@ -84,6 +87,11 @@ class CrashesDOMHandler : public WebUIMessageHandler, | 
| // Asynchronously fetches the list of crashes. Called from JS. | 
| void HandleRequestCrashes(const ListValue* args); | 
|  | 
| +#if defined(OS_CHROMEOS) | 
| +  // Asynchronously triggers crash uploading. Called from JS. | 
| +  void HandleRequestUploads(const ListValue* args); | 
| +#endif | 
| + | 
| // Sends the recent crashes list JS. | 
| void UpdateUI(); | 
|  | 
| @@ -108,6 +116,12 @@ void CrashesDOMHandler::RegisterMessages() { | 
| web_ui()->RegisterMessageCallback("requestCrashList", | 
| base::Bind(&CrashesDOMHandler::HandleRequestCrashes, | 
| base::Unretained(this))); | 
| + | 
| +#if defined(OS_CHROMEOS) | 
| +  web_ui()->RegisterMessageCallback("requestCrashUpload", | 
| +      base::Bind(&CrashesDOMHandler::HandleRequestUploads, | 
| +                 base::Unretained(this))); | 
| +#endif | 
| } | 
|  | 
| void CrashesDOMHandler::HandleRequestCrashes(const ListValue* args) { | 
| @@ -121,6 +135,16 @@ void CrashesDOMHandler::HandleRequestCrashes(const ListValue* args) { | 
| } | 
| } | 
|  | 
| +#if defined(OS_CHROMEOS) | 
| +void CrashesDOMHandler::HandleRequestUploads(const ListValue* args) { | 
| +  chromeos::DebugDaemonClient* debugd_client = | 
| +      chromeos::DBusThreadManager::Get()->GetDebugDaemonClient(); | 
| +  DCHECK(debugd_client); | 
| + | 
| +  debugd_client->UploadCrashes(); | 
| +} | 
| +#endif | 
| + | 
| void CrashesDOMHandler::OnUploadListAvailable() { | 
| list_available_ = true; | 
| if (!first_load_) | 
| @@ -151,6 +175,10 @@ void CrashesDOMHandler::UpdateUI() { | 
|  | 
| web_ui()->CallJavascriptFunction("updateCrashList", enabled, crash_list, | 
| version); | 
| + | 
| +#if defined(OS_CHROMEOS) | 
| +  web_ui()->CallJavascriptFunction("updateCrashUploadStatus", enabled); | 
| +#endif | 
| } | 
|  | 
| }  // namespace | 
| @@ -178,6 +206,7 @@ base::RefCountedMemory* CrashesUI::GetFaviconResourceBytes( | 
|  | 
| // static | 
| bool CrashesUI::CrashReportingUIEnabled() { | 
| +  return true; | 
| #if defined(GOOGLE_CHROME_BUILD) | 
| #if defined(OS_CHROMEOS) | 
| bool reporting_enabled = false; | 
|  |