Browse Source

fix: change gin_wrappable to scoped crash key (#30578)

Keeley Hammond 3 years ago
parent
commit
cbeae20438

+ 9 - 5
patches/chromium/add_gin_wrappable_crash_key.patch

@@ -15,28 +15,32 @@ This patch should not be upstreamed, and can be removed in Electron 15 and
 beyond once we identify the cause of the crash.
 
 diff --git a/gin/wrappable.cc b/gin/wrappable.cc
-index fe07eb94a8e679859bba6d76ff0d6ee86bd0c67e..d0066fca501eae5be4177440b44dbecc8e34c897 100644
+index fe07eb94a8e679859bba6d76ff0d6ee86bd0c67e..ecb0aa2c4ec57e1814f4c94194e775440f4e35ee 100644
 --- a/gin/wrappable.cc
 +++ b/gin/wrappable.cc
-@@ -8,6 +8,10 @@
+@@ -8,6 +8,11 @@
  #include "gin/object_template_builder.h"
  #include "gin/per_isolate_data.h"
  
 +#if !defined(MAS_BUILD)
++#include "components/crash/core/common/crash_key.h"
 +#include "electron/shell/common/crash_keys.h"
 +#endif
 +
  namespace gin {
  
  WrappableBase::WrappableBase() = default;
-@@ -36,6 +40,12 @@ void WrappableBase::FirstWeakCallback(
+@@ -36,6 +41,15 @@ void WrappableBase::FirstWeakCallback(
  void WrappableBase::SecondWeakCallback(
      const v8::WeakCallbackInfo<WrappableBase>& data) {
    WrappableBase* wrappable = data.GetParameter();
 +
 +#if !defined(MAS_BUILD)
-+  WrapperInfo* info = static_cast<WrapperInfo*>(data.GetInternalField(0));
-+  electron::crash_keys::SetCrashKeyForGinWrappable(info);
++  WrapperInfo* wrapperInfo = static_cast<WrapperInfo*>(data.GetInternalField(0));
++  std::string location = electron::crash_keys::GetCrashValueForGinWrappable(wrapperInfo);
++
++  static crash_reporter::CrashKeyString<32> crash_key("gin-wrappable-fatal.location");
++  crash_reporter::ScopedCrashKeyString auto_clear(&crash_key, location);
 +#endif
 +
    delete wrappable;

+ 2 - 2
shell/common/crash_keys.cc

@@ -185,7 +185,7 @@ void SetPlatformCrashKey() {
 #endif
 }
 
-void SetCrashKeyForGinWrappable(gin::WrapperInfo* info) {
+std::string GetCrashValueForGinWrappable(gin::WrapperInfo* info) {
   std::string crash_location;
 
   // Adds a breadcrumb for crashes within gin::WrappableBase::SecondWeakCallback
@@ -254,7 +254,7 @@ void SetCrashKeyForGinWrappable(gin::WrapperInfo* info) {
         "Deleted kWrapperInfo does not match listed component. Please review "
         "listed crash keys.";
 
-  SetCrashKey("gin-wrappable-fatal.location", crash_location);
+  return crash_location;
 }
 
 }  // namespace crash_keys

+ 2 - 1
shell/common/crash_keys.h

@@ -24,7 +24,8 @@ void GetCrashKeys(std::map<std::string, std::string>* keys);
 
 void SetCrashKeysFromCommandLine(const base::CommandLine& command_line);
 void SetPlatformCrashKey();
-void SetCrashKeyForGinWrappable(gin::WrapperInfo* info);
+
+std::string GetCrashValueForGinWrappable(gin::WrapperInfo* info);
 
 }  // namespace crash_keys