Title: [237563] trunk/Tools
Revision
237563
Author
[email protected]
Date
2018-10-29 13:55:33 -0700 (Mon, 29 Oct 2018)

Log Message

[llbd-webkit] Add summaries for Document, Frame, and SecurityOrigin
https://bugs.webkit.org/show_bug.cgi?id=191033

Reviewed by Andy Estes.

For Documents we display its origin, URL, whether it's in the main frame, and its page cache state.
We display the same details in the summary for a Frame because its Document tends to be the most
interesting aspect of it. For SecurityOrigin we display its origin, domain (affects cookie access),
and whether the origin has universal access.

* lldb/lldb_webkit.py:
(__lldb_init_module):
Register new summary providers.

(WebCoreSecurityOrigin_SummaryProvider):
(WebCoreFrame_SummaryProvider):
(WebCoreDocument_SummaryProvider):
Add new summary providers.

(StdOptionalWrapper):
(StdOptionalWrapper.__init__):
(StdOptionalWrapper.has_value):
(StdOptionalWrapper.value):
Convenience data type that provides access to the fields of a std::optional<>.

(WebCoreSecurityOriginProvider):
(WebCoreSecurityOriginProvider.__init__):
(WebCoreSecurityOriginProvider.is_unique):
(WebCoreSecurityOriginProvider.scheme):
(WebCoreSecurityOriginProvider.host):
(WebCoreSecurityOriginProvider.port):
(WebCoreSecurityOriginProvider.domain):
(WebCoreSecurityOriginProvider.has_universal_access):
(WebCoreSecurityOriginProvider.to_string):
(WebCoreFrameProvider):
(WebCoreFrameProvider.__init__):
(WebCoreFrameProvider.is_main_frame):
(WebCoreFrameProvider.document):
(WebCoreDocumentProvider):
(WebCoreDocumentProvider.__init__):
(WebCoreDocumentProvider.url):
(WebCoreDocumentProvider.origin):
(WebCoreDocumentProvider.page_cache_state):
(WebCoreDocumentProvider.frame):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (237562 => 237563)


--- trunk/Tools/ChangeLog	2018-10-29 20:34:35 UTC (rev 237562)
+++ trunk/Tools/ChangeLog	2018-10-29 20:55:33 UTC (rev 237563)
@@ -1,3 +1,50 @@
+2018-10-29  Daniel Bates  <[email protected]>
+
+        [llbd-webkit] Add summaries for Document, Frame, and SecurityOrigin
+        https://bugs.webkit.org/show_bug.cgi?id=191033
+
+        Reviewed by Andy Estes.
+
+        For Documents we display its origin, URL, whether it's in the main frame, and its page cache state.
+        We display the same details in the summary for a Frame because its Document tends to be the most
+        interesting aspect of it. For SecurityOrigin we display its origin, domain (affects cookie access),
+        and whether the origin has universal access.
+
+        * lldb/lldb_webkit.py:
+        (__lldb_init_module):
+        Register new summary providers.
+
+        (WebCoreSecurityOrigin_SummaryProvider):
+        (WebCoreFrame_SummaryProvider):
+        (WebCoreDocument_SummaryProvider):
+        Add new summary providers.
+
+        (StdOptionalWrapper):
+        (StdOptionalWrapper.__init__):
+        (StdOptionalWrapper.has_value):
+        (StdOptionalWrapper.value):
+        Convenience data type that provides access to the fields of a std::optional<>.
+        
+        (WebCoreSecurityOriginProvider):
+        (WebCoreSecurityOriginProvider.__init__):
+        (WebCoreSecurityOriginProvider.is_unique):
+        (WebCoreSecurityOriginProvider.scheme):
+        (WebCoreSecurityOriginProvider.host):
+        (WebCoreSecurityOriginProvider.port):
+        (WebCoreSecurityOriginProvider.domain):
+        (WebCoreSecurityOriginProvider.has_universal_access):
+        (WebCoreSecurityOriginProvider.to_string):
+        (WebCoreFrameProvider):
+        (WebCoreFrameProvider.__init__):
+        (WebCoreFrameProvider.is_main_frame):
+        (WebCoreFrameProvider.document):
+        (WebCoreDocumentProvider):
+        (WebCoreDocumentProvider.__init__):
+        (WebCoreDocumentProvider.url):
+        (WebCoreDocumentProvider.origin):
+        (WebCoreDocumentProvider.page_cache_state):
+        (WebCoreDocumentProvider.frame):
+
 2018-10-29  Chris Dumez  <[email protected]>
 
         [PSON] When Safari restores session state after launching, going back and forward does not swap processes

Modified: trunk/Tools/lldb/lldb_webkit.py (237562 => 237563)


--- trunk/Tools/lldb/lldb_webkit.py	2018-10-29 20:34:35 UTC (rev 237562)
+++ trunk/Tools/lldb/lldb_webkit.py	2018-10-29 20:55:33 UTC (rev 237563)
@@ -62,6 +62,10 @@
     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.WebCoreSecurityOrigin_SummaryProvider WebCore::SecurityOrigin')
+    debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreFrame_SummaryProvider WebCore::Frame')
+    debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreDocument_SummaryProvider WebCore::Document')
+
     # synthetic types (see <https://lldb.llvm.org/varformats.html>)
     debugger.HandleCommand('type synthetic add -x "^WTF::Vector<.+>$" --python-class lldb_webkit.WTFVectorProvider')
     debugger.HandleCommand('type synthetic add -x "^WTF::HashTable<.+>$" --python-class lldb_webkit.WTFHashTableProvider')
@@ -189,8 +193,32 @@
     return "{ x = %s, y = %s, width = %s, height = %s }" % (provider.get_x(), provider.get_y(), provider.get_width(), provider.get_height())
 
 
+def WebCoreSecurityOrigin_SummaryProvider(valobj, dict):
+    provider = WebCoreSecurityOriginProvider(valobj, dict)
+    return '{ %s, domain = %s, hasUniversalAccess = %d }' % (provider.to_string(), provider.domain(), provider.has_universal_access())
 
 
+def WebCoreFrame_SummaryProvider(valobj, dict):
+    provider = WebCoreFrameProvider(valobj, dict)
+    document = provider.document()
+    if document:
+        origin = document.origin()
+        url = ""
+        pageCacheState = document.page_cache_state()
+    else:
+        origin = ''
+        url = ''
+        pageCacheState = ''
+    return '{ origin = %s, url = "" isMainFrame = %s, pageCacheState = %s' % (origin, url, provider.is_main_frame(), pageCacheState)
+
+
+def WebCoreDocument_SummaryProvider(valobj, dict):
+    provider = WebCoreDocumentProvider(valobj, dict)
+    frame = provider.frame()
+    in_main_frame = '%d' % frame.is_main_frame() if frame else 'Detached'
+    return '{ origin = %s, url = "" isMainFrame = %s, pageCacheState = %s' % (provider.origin(), provider.url(), in_main_frame, provider.page_cache_state())
+
+
 def btjs(debugger, command, result, internal_dict):
     '''Prints a stack trace of current thread with _javascript_ frames decoded.  Takes optional frame count argument'''
 
@@ -581,6 +609,94 @@
         return WTFStringProvider(self.valobj.GetChildMemberWithName('m_string'), dict).to_string()
 
 
+class StdOptionalWrapper:
+    def __init__(self, valobj, internal_dict):
+        self.valobj = valobj
+
+    def has_value(self):
+        return bool(self.valobj.GetChildMemberWithName('init_').GetValueAsUnsigned(0))
+
+    def value(self):
+        return self.valobj.GetChildMemberWithName('storage_').GetChildMemberWithName('value_')
+
+
+class WebCoreSecurityOriginProvider:
+    def __init__(self, valobj, internal_dict):
+        self.valobj = valobj
+        self._data_ptr = self.valobj.GetChildMemberWithName('m_data')
+
+    def is_unique(self):
+        return bool(self.valobj.GetChildMemberWithName('m_isUnique').GetValueAsUnsigned(0))
+
+    def scheme(self):
+        return WTFStringProvider(self._data_ptr.GetChildMemberWithName('protocol'), dict()).to_string()
+
+    def host(self):
+        return WTFStringProvider(self._data_ptr.GetChildMemberWithName('host'), dict()).to_string()
+
+    def port(self):
+        optional_port = StdOptionalWrapper(self._data_ptr.GetChildMemberWithName('port'), dict())
+        if not optional_port.has_value():
+            return None
+        return optional_port.value().GetValueAsUnsigned(0)
+
+    def domain(self):
+        return WTFStringProvider(self.valobj.GetChildMemberWithName('m_domain'), dict()).to_string()
+
+    def has_universal_access(self):
+        return bool(self.valobj.GetChildMemberWithName('m_universalAccess').GetValueAsUnsigned(0))
+
+    def to_string(self):
+        if self.is_unique():
+            return 'Unique'
+        scheme = self.scheme()
+        host = self.host()
+        port = self.port()
+        if not scheme and not host and not port:
+            return ''
+        if scheme == 'file:':
+            return 'file://'
+        result = '{}://{}'.format(scheme, host)
+        if port:
+            result += ':' + port
+        return result
+
+
+class WebCoreFrameProvider:
+    def __init__(self, valobj, internal_dict):
+        self.valobj = valobj
+
+    def is_main_frame(self):
+        return self.valobj.GetAddress().GetFileAddress() == self.valobj.GetChildMemberWithName('m_mainFrame').GetAddress().GetFileAddress()
+
+    def document(self):
+        document_ptr = self.valobj.GetChildMemberWithName('m_doc').GetChildMemberWithName('m_ptr')
+        if not document_ptr or not bool(document_ptr.GetValueAsUnsigned(0)):
+            return None
+        return WebCoreDocumentProvider(document_ptr, dict())
+
+
+class WebCoreDocumentProvider:
+    def __init__(self, valobj, internal_dict):
+        self.valobj = valobj
+
+    def url(self):
+        return WebCoreURLProvider(self.valobj.GetChildMemberWithName('m_url'), dict()).to_string()
+
+    def origin(self):
+        security_origin_ptr = self.valobj.GetChildMemberWithName('m_securityOriginPolicy').GetChildMemberWithName('m_ptr').GetChildMemberWithName('m_securityOrigin').GetChildMemberWithName('m_ptr')
+        return WebCoreSecurityOriginProvider(security_origin_ptr, dict()).to_string()
+
+    def page_cache_state(self):
+        return self.valobj.GetChildMemberWithName('m_pageCacheState').GetValue()
+
+    def frame(self):
+        frame_ptr = self.valobj.GetChildMemberWithName('m_frame')
+        if not frame_ptr or not bool(frame_ptr.GetValueAsUnsigned(0)):
+            return None
+        return WebCoreFrameProvider(frame_ptr, dict())
+
+
 class WTFOptionSetProvider:
     def __init__(self, valobj, internal_dict):
         self.valobj = valobj
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to