Modified: trunk/Tools/ChangeLog (282311 => 282312)
--- trunk/Tools/ChangeLog 2021-09-11 16:10:13 UTC (rev 282311)
+++ trunk/Tools/ChangeLog 2021-09-11 17:43:56 UTC (rev 282312)
@@ -1,3 +1,28 @@
+2021-09-10 Simon Fraser <[email protected]>
+
+ Add an lldb summary provider for the WebCore::Length type
+ https://bugs.webkit.org/show_bug.cgi?id=230185
+
+ Reviewed by Alan Bujtas.
+
+ Make Length types easier to visualize when debugging in lldb.
+
+ * lldb/lldb_webkit.py:
+ (__lldb_init_module):
+ (WebCoreLength_SummaryProvider):
+ (WebCoreLengthProvider):
+ (WebCoreLengthProvider.__init__):
+ (WebCoreLengthProvider.get_type):
+ (WebCoreLengthProvider.get_type_string):
+ (WebCoreLengthProvider.is_auto):
+ (WebCoreLengthProvider.is_undefined):
+ (WebCoreLengthProvider.is_calculated):
+ (WebCoreLengthProvider.is_fixed):
+ (WebCoreLengthProvider.is_percent):
+ (WebCoreLengthProvider.has_quirk):
+ (WebCoreLengthProvider.is_float):
+ (WebCoreLengthProvider.get_numeric_value):
+
2021-09-10 Chris Dumez <[email protected]>
Implement navigation reporting for Cross-Origin-Opener-Policy
Modified: trunk/Tools/lldb/lldb_webkit.py (282311 => 282312)
--- trunk/Tools/lldb/lldb_webkit.py 2021-09-11 16:10:13 UTC (rev 282311)
+++ trunk/Tools/lldb/lldb_webkit.py 2021-09-11 17:43:56 UTC (rev 282312)
@@ -85,6 +85,8 @@
debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreFloatPoint_SummaryProvider WebCore::FloatPoint')
debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreFloatRect_SummaryProvider WebCore::FloatRect')
+ debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreLength_SummaryProvider WebCore::Length')
+
debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreSecurityOrigin_SummaryProvider WebCore::SecurityOrigin')
debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreFrame_SummaryProvider WebCore::Frame')
@@ -249,6 +251,28 @@
return "{ x = %s, y = %s, width = %s, height = %s }" % (provider.get_x(), provider.get_y(), provider.get_width(), provider.get_height())
+def WebCoreLength_SummaryProvider(valobj, dict):
+ provider = WebCoreLengthProvider(valobj, dict)
+ quirky = ' (quirky)' if provider.has_quirk() else ""
+
+ if (provider.is_auto()):
+ return "{ auto%s }" % (quirky)
+
+ if (provider.is_undefined()):
+ return "{ undefined%s }" % (quirky)
+
+ if (provider.is_calculated()):
+ return "{ calc%s }" % (quirky)
+
+ if (provider.is_fixed()):
+ return "{ %spx%s }" % (provider.get_numeric_value(), quirky)
+
+ if (provider.is_percent()):
+ return "{ %s%%%s }" % (provider.get_numeric_value(), quirky)
+
+ return "{ %s %s%s }" % (provider.get_type_string(), provider.get_numeric_value(), quirky)
+
+
def WebCoreSecurityOrigin_SummaryProvider(valobj, dict):
provider = WebCoreSecurityOriginProvider(valobj, dict)
return '{ %s, domain = %s, hasUniversalAccess = %d }' % (provider.to_string(), provider.domain(), provider.has_universal_access())
@@ -702,6 +726,84 @@
return WebCoreFloatSizeProvider(self.valobj.GetChildMemberWithName('m_size'), dict).get_height()
+class WebCoreLengthProvider:
+ "Print a WebCore::Length"
+
+ AUTO_TYPE = 0
+ RELATIVE_TYPE = 1
+ PERCENT_TYPE = 2
+ FIXED_TYPE = 3
+ INTRINSIC_TYPE = 4
+ MIN_INTRINSIC_TYPE = 5
+ MIN_CONTENT_TYPE = 6
+ MAX_CONTENT_TYPE = 7
+ FILL_AVAILABLE_TYPE = 8
+ FIT_CONTENT_TYPE = 9
+ CALCULATED_TYPE = 10
+ UNDEFINED_TYPE = 11
+
+ def __init__(self, valobj, dict):
+ self.valobj = valobj
+
+ def get_type(self):
+ return self.valobj.GetChildMemberWithName('m_type').GetValueAsUnsigned(0)
+
+ def get_type_string(self):
+ length_type = self.get_type()
+
+ type_names = [
+ "Auto",
+ "Relative",
+ "Percent",
+ "Fixed",
+ "Intrinsic",
+ "MinIntrinsic",
+ "MinContent",
+ "MaxContent",
+ "FillAvailable",
+ "FitContent",
+ "Calculated",
+ "Undefined",
+ ]
+
+ if (length_type <= self.UNDEFINED_TYPE):
+ return type_names[length_type]
+
+ return "Unknown"
+
+ def is_auto(self):
+ return self.get_type() == self.AUTO_TYPE
+
+ def is_undefined(self):
+ return self.get_type() == self.UNDEFINED_TYPE
+
+ def is_calculated(self):
+ return self.get_type() == self.CALCULATED_TYPE
+
+ def is_fixed(self):
+ return self.get_type() == self.FIXED_TYPE
+
+ def is_percent(self):
+ return self.get_type() == self.PERCENT_TYPE
+
+ def has_quirk(self):
+ return bool(self.valobj.GetChildMemberWithName('m_hasQuirk').GetValueAsUnsigned(0))
+
+ def is_float(self):
+ return bool(self.valobj.GetChildMemberWithName('m_isFloat').GetValueAsUnsigned(0))
+
+ def get_numeric_value(self):
+ length_type = self.get_type()
+ if (length_type == self.CALCULATED_TYPE):
+ return 0
+
+ if (self.is_float()):
+ return self.valobj.GetChildMemberWithName('m_floatValue').GetValue()
+
+ return self.valobj.GetChildMemberWithName('m_intValue').GetValueAsSigned()
+
+
+
class WTFURLProvider:
"Print a WTF::URL"
def __init__(self, valobj, dict):