﻿<?xml version="1.0" encoding="utf-8" ?>
<AutoVisualizer
    xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="blink::MemberBase&lt;*&gt;">
    <DisplayString Condition="raw_ == 0">null</DisplayString>
    <DisplayString>{*raw_}</DisplayString>
    <Expand>
      <Item Name="Raw">raw_</Item>
    </Expand>
  </Type>
  <Type Name="blink::PersistentBase&lt;*&gt;">
    <DisplayString Condition="raw_ == 0">null</DisplayString>
    <DisplayString>{*raw_}</DisplayString>
    <Expand>
      <Item Name="Raw">raw_</Item>
    </Expand>
  </Type>
  <Type Name="WTF::String">
    <DisplayString Condition="impl_.ptr_ == 0">(null)</DisplayString>
    <DisplayString IncludeView="bare">{*impl_.ptr_,view(bare)}</DisplayString>
    <DisplayString>{*impl_.ptr_}</DisplayString>
    <Expand>
      <Item Name="Impl">impl_.ptr_</Item>
    </Expand>
  </Type>
  <Type Name="WTF::StringImpl">
    <DisplayString IncludeView="bare"
        Condition="is8_bit_">{(this+1),[length_]sb}</DisplayString>
    <DisplayString
        Condition="is8_bit_">[{length_}] {(this+1),[length_]s}</DisplayString>
    <DisplayString IncludeView="bare">{(this+1),[length_]sub}</DisplayString>
    <DisplayString>[{length_}] {(this+1),[length_]su}</DisplayString>
    <Expand>
      <Item Name="Length">length_</Item>
      <Item Name="Hash">hash_</Item>
      <Item Name="AsciiText" Condition="is8_bit_">(this+1),[length_]s</Item>
      <Item Name="UnicodeText" Condition="!is8_bit_">(wchar_t*)(this+1),[length_]su</Item>
    </Expand>
  </Type>
  <Type Name="WTF::AtomicString">
    <DisplayString IncludeView="bare">{string_,view(bare)}</DisplayString>
    <DisplayString>{string_}</DisplayString>
  </Type>
  <Type Name="WTF::Vector&lt;*&gt;">
    <DisplayString Condition="size_==0">(empty)</DisplayString>
    <DisplayString Condition="size_==1">[{size_}] {buffer_,1}</DisplayString>
    <DisplayString Condition="size_==2">[{size_}] {buffer_,2}</DisplayString>
    <DisplayString Condition="size_==3">[{size_}] {buffer_,3}</DisplayString>
    <DisplayString Condition="size_==4">[{size_}] {buffer_,4}</DisplayString>
    <DisplayString
        Condition="size_>=5">[{size_}] {buffer_,4}...</DisplayString>
    <Expand>
      <Item Name="Buffer">buffer_</Item>
      <Item Name="Size">size_</Item>
      <Item Name="Capacity">capacity_</Item>
      <ArrayItems Condition="size_>0">
        <Size>size_</Size>
        <ValuePointer>buffer_</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>
  <Type Name="WTF::HashTable&lt;*&gt;">
    <DisplayString>keyCount={key_count_}, tableSize={table_size_}</DisplayString>
    <Expand>
      <ArrayItems Condition="table_size_>0">
        <Size>table_size_</Size>
        <ValuePointer>table_</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>
  <Type Name="WTF::RefPtr&lt;*&gt;">
    <AlternativeType Name="WTF::PassRefPtr&lt;*&gt;"/>
    <DisplayString Condition="ptr_ == 0">null</DisplayString>
    <DisplayString>{*ptr_}</DisplayString>
    <Expand>
      <Item Name="Ptr">ptr_</Item>
    </Expand>
  </Type>
  <Type Name="blink::LayoutUnit">
    <DisplayString>{(float)value_ / 64}</DisplayString>
    <Expand>
      <Item Name="FloatVal">(float)value_ / 64</Item>
      <Item Name="RawVal">value_</Item>
    </Expand>
  </Type>
  <Type Name="blink::LayoutSize">
    <AlternativeType Name="blink::IntSize"/>
    <AlternativeType Name="blink::FloatSize"/>
    <DisplayString>({width_}, {height_})</DisplayString>
    <Expand>
      <Item Name="Width">width_</Item>
      <Item Name="Height">height_</Item>
    </Expand>
  </Type>
  <Type Name="blink::LayoutPoint">
    <AlternativeType Name="blink::IntPoint"/>
    <AlternativeType Name="blink::FloatPoint"/>
    <DisplayString>({x_}, {y_})</DisplayString>
    <Expand>
      <Item Name="X">x_</Item>
      <Item Name="Y">y_</Item>
    </Expand>
  </Type>
  <Type Name="blink::LayoutRect">
    <AlternativeType Name="blink::IntRect"/>
    <AlternativeType Name="blink::FloatRect"/>
    <DisplayString>({location_.x_}, {location_.y_}) x ({size_.width_}, {size_.height_})</DisplayString>
    <Expand>
      <Item Name="Location">location_</Item>
      <Item Name="Size">size_</Item>
    </Expand>
  </Type>
  <Type Name="blink::Length">
    <DisplayString Condition="is_float_">{(blink::LengthType)type_} {float_value_}</DisplayString>
    <DisplayString>{(blink::LengthType)type_} {int_value_}</DisplayString>
  </Type>
  <Type Name="blink::WebRect">
    <AlternativeType Name="blink::WebFloatRect"/>
    <DisplayString>({x}, {y}) x ({width}, {height})</DisplayString>
    <Expand>
      <Item Name="x">x</Item>
      <Item Name="y">y</Item>
      <Item Name="width">width</Item>
      <Item Name="height">height</Item>
      <Synthetic Name="right">
        <DisplayString>{x + width}</DisplayString>
      </Synthetic>
      <Synthetic Name="bottom">
        <DisplayString>{y + height}</DisplayString>
      </Synthetic>
    </Expand>
  </Type>
  <Type Name="blink::WebPoint">
    <AlternativeType Name="blink::WebFloatPoint"/>
    <DisplayString>({x}, {y})</DisplayString>
    <Expand>
      <Item Name="x">x</Item>
      <Item Name="y">y</Item>
    </Expand>
  </Type>
  <!-- Component build version -->
  <Type Name="blink::WebString">
    <DisplayString>{(blink_platform.dll!WTF::StringImpl*)(private_.storage_)}</DisplayString>
  </Type>
  <!-- Non-component build version -->
  <Type Name="blink::WebString" Priority="Low">
    <DisplayString>{(WTF::StringImpl*)(private_.storage_)}</DisplayString>
  </Type>
  <!-- DOM -->
  <Type Name="blink::QualifiedName">
    <DisplayString Condition="impl_.ptr_ == 0">(null)</DisplayString>
    <DisplayString>{*impl_.ptr_}</DisplayString>
  </Type>
  <Type Name="blink::QualifiedName::QualifiedNameImpl">
    <DisplayString>{local_name_,view(bare)}</DisplayString>
  </Type>
  <Type Name="blink::CharacterData">
    <DisplayString>{data_,view(bare)}</DisplayString>
  </Type>
  <Type Name="blink::ContainerNode">
    <Expand>
      <LinkedListItems>
        <HeadPointer>first_child_.raw_</HeadPointer>
        <NextPointer>next_.raw_</NextPointer>
        <ValueNode>this</ValueNode>
      </LinkedListItems>
    </Expand>
  </Type>
  <Type Name="blink::Element">
    <DisplayString Condition="first_child_.raw_ != 0">&lt;{tag_name_}>{first_child_}</DisplayString>
    <DisplayString>&lt;{tag_name_}></DisplayString>
  </Type>
  <!-- Layout: LayoutObject -->
  <Type Name="blink::LayoutObject">
    <DisplayString Condition="bitfields_.is_anonymous_">Anonymous</DisplayString>
    <DisplayString>{node_}</DisplayString>
  </Type>
  <Type Name="blink::LayoutObjectChildList">
    <Expand>
      <LinkedListItems>
        <HeadPointer>first_child_</HeadPointer>
        <NextPointer>next_</NextPointer>
        <ValueNode>this</ValueNode>
      </LinkedListItems>
    </Expand>
  </Type>
  <!-- Layout: InlineBox -->
  <Type Name="blink::InlineBox">
    <DisplayString>{line_layout_item_}</DisplayString>
  </Type>
  <Type Name="blink::InlineFlowBox">
    <Expand>
      <LinkedListItems>
        <HeadPointer>first_child_</HeadPointer>
        <NextPointer>next_</NextPointer>
        <ValueNode>this</ValueNode>
      </LinkedListItems>
    </Expand>
  </Type>
  <Type Name="blink::LineBoxList">
    <Expand>
      <LinkedListItems>
        <HeadPointer>first_line_box_</HeadPointer>
        <NextPointer>next_line_box_</NextPointer>
        <ValueNode>this</ValueNode>
      </LinkedListItems>
    </Expand>
  </Type>
  <Type Name="blink::LineLayoutItem">
    <DisplayString>{layout_object_}</DisplayString>
  </Type>
  <!-- Layout: LayoutNG -->
  <Type Name="blink::NGBlockNode">
    <DisplayString>{*box_}</DisplayString>
  </Type>
  <Type Name="blink::NGInlineNode">
    <DisplayString>{*box_}</DisplayString>
    <Expand>
      <Item Name="inline_node_data">*((blink::LayoutNGBlockFlow*)box_)->ng_inline_node_data_</Item>
    </Expand>
  </Type>
  <Type Name="blink::NGInlineItem">
    <DisplayString>{(NGInlineItem::NGInlineItemType)type_} {start_offset_}-{end_offset_} {*layout_object_}</DisplayString>
  </Type>
  <Type Name="blink::NGFragment">
    <DisplayString>{physical_fragment_}</DisplayString>
  </Type>
  <Type Name="blink::NGPhysicalFragment">
    <DisplayString>{(blink::NGPhysicalFragment::NGFragmentType)type_} {layout_object_} {size_} {offset_}</DisplayString>
  </Type>
  <Type Name="blink::NGLogicalOffset">
    <DisplayString>({inline_offset}, {block_offset})</DisplayString>
  </Type>
  <Type Name="blink::NGLogicalSize">
    <DisplayString>({inline_size} x {block_size})</DisplayString>
  </Type>
  <Type Name="blink::NGPhysicalOffset">
    <DisplayString>({left}, {top})</DisplayString>
  </Type>
  <Type Name="blink::NGPhysicalSize">
    <DisplayString>({width} x {height})</DisplayString>
  </Type>
  <!-- Layout: TextRun -->
  <Type Name="blink::TextRun">
    <DisplayString Condition="is8_bit_">{data_.characters8,[len_]s}</DisplayString>
    <DisplayString>{(data_.characters16),[len_]su}</DisplayString>
  </Type>
  <Type Name="blink::BidiRun">
    <DisplayString>{*box_} {start_}-{stop_}</DisplayString>
  </Type>
  <!-- Fonts -->
  <Type Name="blink::Font">
    <DisplayString>{font_description_}</DisplayString>
  </Type>
  <Type Name="blink::FontDescription">
    <DisplayString>{computed_size_}px {family_list_}</DisplayString>
  </Type>
  <Type Name="blink::FontFamily">
    <DisplayString Condition="next_.ptr_ == 0">{family_,view(bare)}</DisplayString>
    <DisplayString>{family_,view(bare)}, {next_}</DisplayString>
  </Type>
  <Type Name="blink::SharedFontFamily">
    <DisplayString Condition="next_.ptr_ == 0">{family_,view(bare)}</DisplayString>
    <DisplayString>{family_,view(bare)}, {next_}</DisplayString>
    <Expand>
      <LinkedListItems>
        <HeadPointer>this</HeadPointer>
        <NextPointer>next_.ptr_</NextPointer>
        <ValueNode>this</ValueNode>
      </LinkedListItems>
    </Expand>
  </Type>
  <Type Name="blink::SimpleFontData">
    <DisplayString>{platform_data_}</DisplayString>
  </Type>
  <Type Name="blink::FontPlatformData">
    <DisplayString>{*typeface_.fPtr}, {text_size_}px</DisplayString>
  </Type>
</AutoVisualizer>