Index: android_webview/common/crash_reporter/crash_keys.cc |
diff --git a/android_webview/common/crash_reporter/crash_keys.cc b/android_webview/common/crash_reporter/crash_keys.cc |
index cd82afc34bb68a402c48d870c89d9344f8e29f08..5ed8ca7f3f890c6724f7bac5027d9eec62a88a48 100644 |
--- a/android_webview/common/crash_reporter/crash_keys.cc |
+++ b/android_webview/common/crash_reporter/crash_keys.cc |
@@ -5,6 +5,8 @@ |
#include "android_webview/common/crash_reporter/crash_keys.h" |
#include "base/debug/crash_logging.h" |
+#include "base/format_macros.h" |
+#include "base/strings/string_util.h" |
#include "components/crash/core/common/crash_keys.h" |
using namespace crash_keys; |
@@ -12,32 +14,183 @@ using namespace crash_keys; |
namespace android_webview { |
namespace crash_keys { |
+const char kActiveURL[] = "url-chunk"; |
+ |
+const char kFontKeyName[] = "font_key_name"; |
+ |
+const size_t kExtensionIDMaxCount = 10; |
+const char kExtensionID[] = "extension-%" PRIuS; |
+const char kNumExtensionsCount[] = "num-extensions"; |
+ |
+const char kShutdownType[] = "shutdown-type"; |
+const char kBrowserUnpinTrace[] = "browser-unpin-trace"; |
+ |
const char kGPUDriverVersion[] = "gpu-driver"; |
const char kGPUPixelShaderVersion[] = "gpu-psver"; |
const char kGPUVertexShaderVersion[] = "gpu-vsver"; |
const char kGPUVendor[] = "gpu-gl-vendor"; |
const char kGPURenderer[] = "gpu-gl-renderer"; |
+const char kInputEventFilterSendFailure[] = "input-event-filter-send-failure"; |
+ |
+const char kPrinterInfo[] = "prn-info-%" PRIuS; |
+ |
+const char kViewCount[] = "view-count"; |
+ |
+const char kZeroEncodeDetails[] = "zero-encode-details"; |
+ |
size_t RegisterWebViewCrashKeys() { |
+ // TODO these are never used? |
+ // Register the printer info. |
+ //{ |
+ // static char formatted_keys[kPrinterInfoCount][sizeof(kPrinterInfo) + 1] = |
+ // {{ 0 }}; |
+ // const size_t formatted_key_len = sizeof(formatted_keys[0]); |
+ // for (size_t i = 0; i < kPrinterInfoCount; ++i) { |
+ // // Key names are 1-indexed. |
+ // int n = base::snprintf( |
+ // formatted_keys[i], formatted_key_len, kPrinterInfo, i + 1); |
+ // DCHECK_GT(n, 0); |
+ // base::debug::CrashKey crash_key = { formatted_keys[i], kSmallSize }; |
+ // keys.push_back(crash_key); |
+ // } |
+ //} |
+ std::vector<base::debug::CrashKey> keys = GetWebViewCrashKeysToRegister(); |
+ return base::debug::InitCrashKeys(&keys.at(0), keys.size(), kChunkMaxLength); |
+} |
+ |
+std::vector<base::debug::CrashKey> GetWebViewCrashKeysToRegister() { |
base::debug::CrashKey fixed_keys[] = { |
- { kGPUDriverVersion, kSmallSize }, |
- { kGPUPixelShaderVersion, kSmallSize }, |
- { kGPUVertexShaderVersion, kSmallSize }, |
- { kGPUVendor, kSmallSize }, |
- { kGPURenderer, kSmallSize }, |
- |
- // content/: |
- { "bad_message_reason", kSmallSize }, |
- { "discardable-memory-allocated", kSmallSize }, |
- { "discardable-memory-free", kSmallSize }, |
- { "mojo-message-error", kMediumSize }, |
- { "total-discardable-memory-allocated", kSmallSize }, |
+ {"AW_WHITELISTED_DEBUG_KEY", kSmallSize}, |
+ {"AW_NONWHITELISTED_DEBUG_KEY", kSmallSize}, |
+ {kClientId, kSmallSize}, |
+ {kChannel, kSmallSize}, |
+ {kActiveURL, kLargeSize}, |
+ {kNumVariations, kSmallSize}, |
+ {kVariations, kHugeSize}, |
+ {kNumExtensionsCount, kSmallSize}, |
+ {kShutdownType, kSmallSize}, |
+ {kBrowserUnpinTrace, kMediumSize}, |
+ {kGPUDriverVersion, kSmallSize}, |
+ {kGPUPixelShaderVersion, kSmallSize}, |
+ {kGPUVertexShaderVersion, kSmallSize}, |
+ {kGPUVendor, kSmallSize}, |
+ {kGPURenderer, kSmallSize}, |
+ |
+ // content/: |
+ {"bad_message_reason", kSmallSize}, |
+ {"discardable-memory-allocated", kSmallSize}, |
+ {"discardable-memory-free", kSmallSize}, |
+ {kFontKeyName, kSmallSize}, |
+ {"mojo-message-error", kMediumSize}, |
+ {"ppapi_path", kMediumSize}, |
+ {"subresource_url", kLargeSize}, |
+ {"total-discardable-memory-allocated", kSmallSize}, |
+ {kInputEventFilterSendFailure, kSmallSize}, |
+ {kBug464926CrashKey, kSmallSize}, |
+ {kViewCount, kSmallSize}, |
+ |
+ // media/: |
+ {kZeroEncodeDetails, kSmallSize}, |
+ |
+ // gin/: |
+ {"v8-ignition", kSmallSize}, |
+ |
+ // sandbox/: |
+ {"seccomp-sigsys", kMediumSize}, |
+ |
+ // Temporary for http://crbug.com/575245. |
+ {"swapout_frame_id", kSmallSize}, |
+ {"swapout_proxy_id", kSmallSize}, |
+ {"swapout_view_id", kSmallSize}, |
+ {"commit_frame_id", kSmallSize}, |
+ {"commit_proxy_id", kSmallSize}, |
+ {"commit_view_id", kSmallSize}, |
+ {"commit_main_render_frame_id", kSmallSize}, |
+ {"newproxy_proxy_id", kSmallSize}, |
+ {"newproxy_view_id", kSmallSize}, |
+ {"newproxy_opener_id", kSmallSize}, |
+ {"newproxy_parent_id", kSmallSize}, |
+ {"rvinit_view_id", kSmallSize}, |
+ {"rvinit_proxy_id", kSmallSize}, |
+ {"rvinit_main_frame_id", kSmallSize}, |
+ {"initrf_frame_id", kSmallSize}, |
+ {"initrf_proxy_id", kSmallSize}, |
+ {"initrf_view_id", kSmallSize}, |
+ {"initrf_main_frame_id", kSmallSize}, |
+ {"initrf_view_is_live", kSmallSize}, |
+ |
+ // Temporary for https://crbug.com/591478. |
+ {"initrf_parent_proxy_exists", kSmallSize}, |
+ {"initrf_render_view_is_live", kSmallSize}, |
+ {"initrf_parent_is_in_same_site_instance", kSmallSize}, |
+ {"initrf_parent_process_is_live", kSmallSize}, |
+ {"initrf_root_is_in_same_site_instance", kSmallSize}, |
+ {"initrf_root_is_in_same_site_instance_as_parent", kSmallSize}, |
+ {"initrf_root_process_is_live", kSmallSize}, |
+ {"initrf_root_proxy_is_live", kSmallSize}, |
+ |
+ // Temporary for https://crbug.com/626802. |
+ {"newframe_routing_id", kSmallSize}, |
+ {"newframe_proxy_id", kSmallSize}, |
+ {"newframe_opener_id", kSmallSize}, |
+ {"newframe_parent_id", kSmallSize}, |
+ {"newframe_widget_id", kSmallSize}, |
+ {"newframe_widget_hidden", kSmallSize}, |
+ {"newframe_replicated_origin", kSmallSize}, |
+ {"newframe_oopifs_possible", kSmallSize}, |
+ |
+ // Temporary for https://crbug.com/630103. |
+ {"origin_mismatch_url", kLargeSize}, |
+ {"origin_mismatch_origin", kMediumSize}, |
+ {"origin_mismatch_transition", kSmallSize}, |
+ {"origin_mismatch_redirects", kSmallSize}, |
+ {"origin_mismatch_same_page", kSmallSize}, |
+ |
+ // Temporary for https://crbug.com/612711. |
+ {"aci_wrong_sp_extension_id", kSmallSize}, |
+ |
+ // Temporary for https://crbug.com/668633. |
+ {"swdh_set_hosted_version_worker_pid", kSmallSize}, |
+ {"swdh_set_hosted_version_host_pid", kSmallSize}, |
+ {"swdh_set_hosted_version_is_new_process", kSmallSize}, |
+ {"swdh_set_hosted_version_restart_count", kSmallSize}, |
}; |
+ // This dynamic set of keys is used for sets of key value pairs when gathering |
+ // a collection of data, like command line switches or extension IDs. |
std::vector<base::debug::CrashKey> keys(fixed_keys, |
fixed_keys + arraysize(fixed_keys)); |
- return base::debug::InitCrashKeys(&keys.at(0), keys.size(), kChunkMaxLength); |
+ GetCrashKeysForCommandLineSwitches(&keys); |
+ |
+ // Register the extension IDs. |
Robert Sesek
2017/03/02 15:00:38
Why extensions? Isn't that a //chrome-level concep
gsennton
2017/03/02 16:18:01
Removed now (also removed the printer-id stuff sin
|
+ { |
+ static char formatted_keys[kExtensionIDMaxCount][sizeof(kExtensionID) + 1] = |
+ {{0}}; |
+ const size_t formatted_key_len = sizeof(formatted_keys[0]); |
+ for (size_t i = 0; i < kExtensionIDMaxCount; ++i) { |
+ int n = base::snprintf(formatted_keys[i], formatted_key_len, kExtensionID, |
+ i + 1); |
+ DCHECK_GT(n, 0); |
+ base::debug::CrashKey crash_key = {formatted_keys[i], kSmallSize}; |
+ keys.push_back(crash_key); |
+ } |
+ } |
+ return keys; |
+} |
+ |
+std::vector<const char*> GetWhiteListedWebViewCrashKeys() { |
+ return std::vector<const char*>{ |
+ "AW_WHITELISTED_DEBUG_KEY", kGPUDriverVersion, kGPUPixelShaderVersion, |
+ kGPUVertexShaderVersion, kGPUVendor, kGPURenderer, |
+ |
+ // content/: |
+ "bad_message_reason", "discardable-memory-allocated", |
+ "discardable-memory-free", "mojo-message-error-1", "mojo-message-error-2", |
+ "mojo-message-error-3", "mojo-message-error-4", |
+ "total-discardable-memory-allocated", |
+ }; |
} |
} |