Browse Source

fix: change gin::Wrappable crash key type to ScopedCrashKey (#30609)

* fix: change gin_wrappable to scoped crash key

* fix: build dependency

Dependency was missed in cbeae20438be8baf03ce0e32a73563a80aeccb37

Co-authored-by: VerteDinde <[email protected]>
Co-authored-by: deepak1556 <[email protected]>
trop[bot] 3 years ago
parent
commit
832c6c0296

+ 24 - 5
patches/chromium/add_gin_wrappable_crash_key.patch

@@ -14,29 +14,48 @@ help determine where the crash originated from.
 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/BUILD.gn b/gin/BUILD.gn
+index c6059fdb0e0f74ee3ef78c5517634ed5a36f1b10..e16b2ec43b98c3b8724fd85085a33fe52a1e1979 100644
+--- a/gin/BUILD.gn
++++ b/gin/BUILD.gn
+@@ -88,6 +88,10 @@ component("gin") {
+     frameworks = [ "CoreFoundation.framework" ]
+   }
+ 
++  if (!is_mas_build) {
++    public_deps += [ "//components/crash/core/common:crash_key" ]
++  }
++
+   configs += [
+     "//tools/v8_context_snapshot:use_v8_context_snapshot",
+     "//v8:external_startup_data",
 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