마지막 update : 2014-08-06 (우분투 13.10)



webkit을 빌드할면 소스코드부터 받아야 합니다.

소스코드를 받는 방법은 svn을 이용하거나 git을 이용하면 됩니다.(http://www.webkit.org/building/checkout.html)

 - svn에서 받기 : svn checkout https://svn.webkit.org/repository/webkit/trunk WebKit

 - git에서 받기 : git clone git://git.webkit.org/WebKit.git


EFL latest 기반에서 빌드하려면 아래 "최신 EFL을 사용하여 빌드하기"를 참고하세요.


* jhBuild를 사용하여 빌드하기


WebKit/EFL을 빌드하는 가장 쉬운 방법은 https://trac.webkit.org/wiki/EFLWebKit 을 읽고 따라하는 것입니다.

하지만, 현재 EFL 1.8에 기반하고 있습니다.

간단히 요약하면


1. 관련 패키지 설치

패키지를 설치하는 방법은 아래 스크립트를 실행하는 것입니다.(우분투만 지원)

./Tools/efl/install-dependencies


2. dependency 패키지 업데이트

./Tools/Scripts/update-webkitefl-libs


3. 웹킷 빌드

./Tools/Scripts/build-webkit --efl --cmakeargs="-DSHARED_CORE=ON"


(SHARED_CORE 옵션은 선택사항입니다.)


* 최신 EFL을 사용하여 빌드하기(trunk build)


단, 위 방법은 jhbuild를 사용하여야 하기 때문에 최신 EFL을 사용해서 빌드할 수 없습니다.

** EFL이 /usr/elocal에 설치되어 있다고 가정하겠습니다.


아래 환경 변수들을 세팅합니다. (prefix를 가정했기 때문입니다. 아래 내용을 아시면 적절히 수정하시면 됩니다.)

export LD_LIBRARY_PATH=/usr/elocal/lib:$LD_LIBRARY_PATH

export PKG_CONFIG_PATH=/usr/elocal/lib/pkgconfig:$LD_LIBRARY_PATH

export PATH=/usr/elocal/bin:$PATH


Ubuntu 12.10는 최신 libsoup이 제공되지 않습니다.

 libsoup을 설치합니다.


libsoup은 jhbuild에 있는 url을 통해 받으실 수 있습니다.

ftp://ftp.gnome.org/pub/gnome/sources/libsoup/2.42/libsoup-2.42.0.tar.xz


압축을 풀고, 폴더로 이동하여 아래 명령을 실행합니다.

./configure --without-gnome --disable-introspection --prefix=/usr/elocal

make -j4

sudo make install


이제 웹킷 폴더로 이동하여 build 폴더를 만들고 이동합니다.

mkdir build && cd build


빌드합니다.

cmake .. -DPORT=Efl -DENABLE_ACCESSIBILITY=Off -DENABLE_BATTERY_STATUS=Off -DCMAKE_INSTALL_PREFIX=/usr/elocal

make -j4

sudo make install


(첨:

최신 EFL을 사용하신다면 gstreamer가 설치되어 있을 것입니다.

아니라면, -DENABLE_VIDEO=OFF -DENABLE_VIDEO_TRACK=OFF -DENABLE_WEB_AUDIO=OFF 를 통해 VIDEO 관련 기능을 꺼주셔야 합니다.

gstreamer 빌드 관련해서는 gstreamer 최신 버전 설치하기를 참조하시면 됩니다.

)

위에 몇가지 OFF한 옵션들을 모두 켜서 빌드하려면 atk(ENABLE_ACCESSIBILITY), e_dbus(ENABLE_BATTERY_STATUS)가 있어야 합니다.


test browser

WebKit/Efl을 빌드하면 MiniBrowser라는 테스트 브라우저를 제공하고 있습니다.


아래 명령으로 테스트 브라우저를 실행할 수 있습니다.

./bin/MiniBrowser


* 최신 EFL을 사용하여 빌드하기(tarball)


최근부터 ewebkit의 tarball을 제공하기 시작했습니다.

현재 버전은 1.11 alpha입니다.

http://download.enlightenment.org/rel/libs/webkit-efl/ 에서 받으실 수 있습니다.

(주의: 위에서 제공되는 압축 파일은 전체 소스를 가지고 있지 않고 ewebkit을 빌드하는데 필요한 파일들만을 담고 있습니다.)


기본적으로는 위 trunk 빌드를 참고하시면 됩니다.

빌드할 때는 아래와 같이 적으시면 됩니다.


cmake .. -DCMAKE_INSTALL_PREFIX=/usr/elocal

make -j4

sudo make install


trunk 빌드와의 차이는 EFL port가 기본이며 몇가지 옵션들이 자동으로 꺼집니다. (BATTERY_STATUS)

저작자 표시
신고
Posted by 소혼

이 이미지는 아래 URL과 동일

http://www.chromium.org/developers/class-diagram-webkit-webcore-to-chrome-browser




저작자 표시
신고
Posted by 소혼

이전에 작성한 linkElement, style element에 이어 media rule을 사용해 media query를 주었을 때 웹킷이 처리하는 과정을 정리해보고자 합니다.


이전글 1 : Media query in webkit(link Element)

이전글 2 : Media query in webkit(style element)


특히 이전글2는 반드시 읽으셔야 합니다.


사용할 예제는 이전글2에서 잠깐 보여드렸던 것과 동일합니다.

### html

<!doctype html>
<head>
<style>
@media screen and (min-width:300px) {
body { background-color:red; }
}
</style>
<body>
hello
</body>


시작 지점은 이전 예제의 밑에서 두번째 코드인 DocumentRuleSets::appendAuthorStyleSheets 입니다.

### c++ ; highlight : 21

void DocumentRuleSets::appendAuthorStyleSheets(unsigned firstNew, const Vector<RefPtr<CSSStyleSheet> >& styleSheets, MediaQueryEvaluator* medium, InspectorCSSOMWrappers& inspectorCSSOMWrappers, bool isViewSource, StyleResolver* resolver)
{
    // This handles sheets added to the end of the stylesheet list only. In other cases the style resolver
    // needs to be reconstructed. To handle insertions too the rule order numbers would need to be updated.
    unsigned size = styleSheets.size();
    for (unsigned i = firstNew; i < size; ++i) {
        CSSStyleSheet* cssSheet = styleSheets[i].get();
        ASSERT(!cssSheet->disabled());
        if (cssSheet->mediaQueries() && !medium->eval(cssSheet->mediaQueries(), resolver))
            continue;
        StyleSheetContents* sheet = cssSheet->contents();
#if ENABLE(STYLE_SCOPED) || ENABLE(SHADOW_DOM)
        if (const ContainerNode* scope = StyleScopeResolver::scopeFor(cssSheet)) {
            // FIXME: Remove a dependency to calling a StyleResolver's member function.
            // If we can avoid calling resolver->ensureScopeResolver() here, we don't have to include "StyleResolver.h".
            // https://bugs.webkit.org/show_bug.cgi?id=108890
            resolver->ensureScopeResolver()->ensureRuleSetFor(scope)->addRulesFromSheet(sheet, *medium, resolver, scope);
            continue;
        }
#endif
        m_authorStyle->addRulesFromSheet(sheet, *medium, resolver);
        inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet);
    }
    m_authorStyle->shrinkToFit();
    collectFeatures(isViewSource, resolver->scopeResolver());
}


현재 styleSheet에 mediaQuery가 있다면, 2번글에서와 같이 eval과정을 거쳐서 addRulesFromSheet를 수행할지 말지를 결정할 것입니다. [9, 21라인]

하지만, 이번 예제에서 stylesheet에는 mediaQuery가 없습니다. 따라서 addRulesFromSheet가 수행됩니다.


addRulesFromSheet는 다음과 같습니다.


### c++

void RuleSet::addRulesFromSheet(StyleSheetContents* sheet, const MediaQueryEvaluator& medium, StyleResolver* resolver, const ContainerNode* scope)
{  
    ASSERT(sheet);                                                                                          
   
    const Vector<RefPtr<StyleRuleImport> >& importRules = sheet->importRules();                             
    for (unsigned i = 0; i < importRules.size(); ++i) {
        StyleRuleImport* importRule = importRules[i].get();
        if (importRule->styleSheet() && (!importRule->mediaQueries() || medium.eval(importRule->mediaQueries(), resolver)))
            addRulesFromSheet(importRule->styleSheet(), medium, resolver, scope);                           
    }                                                                                                       
                                                                                                            
    bool hasDocumentSecurityOrigin = resolver && resolver->document()->securityOrigin()->canRequest(sheet->baseURL());
    AddRuleFlags addRuleFlags = static_cast<AddRuleFlags>((hasDocumentSecurityOrigin ? RuleHasDocumentSecurityOrigin : 0) | (!scope ? RuleCanUseFastCheckSelector : 0));
   
    addChildRules(sheet->childRules(), medium, resolver, scope, hasDocumentSecurityOrigin, addRuleFlags);   
                                                                                                            
    if (m_autoShrinkToFitEnabled)
        shrinkToFit();                                                                                      
}

sheet의 import rule들을 모두 순회하며, import rule의 media query를 확인, 있으면, 해당 import rule의 styleSheet를 위해 addRulesFromSheet를 호출합니다.

여기서는  import rule도 없으므로 지나가면 addChildRules라는 함수에서 실제 childRules들을 반영합니다. 이 함수의 인자에도 medium이 있는 것을 볼 수 있습니다.


### c++ ; highlight : [11, 13]

void RuleSet::addChildRules(const Vector<RefPtr<StyleRuleBase> >& rules, const MediaQueryEvaluator& medium, StyleResolver* resolver, const ContainerNode* scope, bool hasDocumentSecurityOrigin, AddRuleFlags addRuleFlags)
{
    for (unsigned i = 0; i < rules.size(); ++i) {
        StyleRuleBase* rule = rules[i].get();

        if (rule->isStyleRule()) {
            StyleRule* styleRule = static_cast<StyleRule*>(rule);
            addStyleRule(styleRule, addRuleFlags);
        } else if (rule->isPageRule())
            addPageRule(static_cast<StyleRulePage*>(rule));
        else if (rule->isMediaRule()) {
            StyleRuleMedia* mediaRule = static_cast<StyleRuleMedia*>(rule);
            if ((!mediaRule->mediaQueries() || medium.eval(mediaRule->mediaQueries(), resolver)))
                addChildRules(mediaRule->childRules(), medium, resolver, scope, hasDocumentSecurityOrigin, addRuleFlags);
        } else if (rule->isFontFaceRule() && resolver) {
            // Add this font face to our set.
            // FIXME(BUG 72461): We don't add @font-face rules of scoped style sheets for the moment.
            if (scope)
                continue;
            const StyleRuleFontFace* fontFaceRule = static_cast<StyleRuleFontFace*>(rule);
            resolver->fontSelector()->addFontFaceRule(fontFaceRule);
            resolver->invalidateMatchedPropertiesCache();
        } else if (rule->isKeyframesRule() && resolver) {
            // FIXME (BUG 72462): We don't add @keyframe rules of scoped style sheets for the moment.
            if (scope)
                continue;
            resolver->addKeyframeStyle(static_cast<StyleRuleKeyframes*>(rule));
        }
#if ENABLE(CSS_REGIONS)
        else if (rule->isRegionRule() && resolver) {
            // FIXME (BUG 72472): We don't add @-webkit-region rules of scoped style sheets for the moment.
            if (scope)
                continue;
            addRegionRule(static_cast<StyleRuleRegion*>(rule), hasDocumentSecurityOrigin);
        }
#endif
#if ENABLE(SHADOW_DOM)
        else if (rule->isHostRule())
            resolver->addHostRule(static_cast<StyleRuleHost*>(rule), hasDocumentSecurityOrigin, scope);
#endif
#if ENABLE(CSS_DEVICE_ADAPTATION)
        else if (rule->isViewportRule() && resolver) {
            // @viewport should not be scoped.
            if (scope)
                continue;
            resolver->viewportStyleResolver()->addViewportRule(static_cast<StyleRuleViewport*>(rule));
        }
#endif
#if ENABLE(CSS3_CONDITIONAL_RULES)
        else if (rule->isSupportsRule() && static_cast<StyleRuleSupports*>(rule)->conditionIsSupported())
            addChildRules(static_cast<StyleRuleSupports*>(rule)->childRules(), medium, resolver, scope, hasDocumentSecurityOrigin, addRuleFlags);

#endif

    }

}

다양한 CSS rule들을 처리하는 코드 가운데 media rule에 관한 코드를 발견하실 수 있습니다. [11라인]



media query를 발생시키는 코드들은 다 살펴보았지만, 2번글 마지막에서 잠깐 언급했던 것과 같이, viewport와 관련된 media query는 화면의 크기등이 바뀌었을 때 다시 계산할 필요가 있습니다.


예를 들어 webview를 resize하는 경우, FrameView의 size가 변경되어 FrameView::setFrameRect가 호출될 것입니다.


### c++ ; highlight : [33, 34, 35, 36, 37]

void FrameView::setFrameRect(const IntRect& newRect)
{
    IntRect oldRect = frameRect();
    if (newRect == oldRect)              
        return;
       
#if ENABLE(TEXT_AUTOSIZING)
    // Autosized font sizes depend on the width of the viewing area.
    if (newRect.width() != oldRect.width()) {
        Page* page = m_frame ? m_frame->page() : 0;
        if (page && page->mainFrame() == m_frame && page->settings()->textAutosizingEnabled()) {
            for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext())        
                m_frame->document()->textAutosizer()->recalculateMultipliers();
        }                
    }
#endif

    ScrollView::setFrameRect(newRect);

    updateScrollableAreaSet();

    RenderView* renderView = this->renderView();

#if USE(ACCELERATED_COMPOSITING)
    if (renderView) {
        if (renderView->usesCompositing())
            renderView->compositor()->frameViewDidChangeSize();
    }
#endif

    Document* document = m_frame ? m_frame->document() : 0;

    // Viewport-dependent media queries may cause us to need completely different style information.
    if (document && document->styleResolverIfExists() && document->styleResolverIfExists()->affectedByViewportChange()) {
        document->styleResolverChanged(DeferRecalcStyle);
        InspectorInstrumentation::mediaQueryResultChanged(document);
    }

    sendResizeEventIfNeeded();
}

document객체에 있는 styleResolver의 affectedByViewportChange를 통해 media query의 결과가 바뀌었는지 보고[34 라인],

바뀌었다면, styleResolverChanged를 다시 불러줍니다.[35라인]


affectedByViewportChange는 아래와 같습니다.


### c++

bool StyleResolver::affectedByViewportChange() const
{
    unsigned s = m_viewportDependentMediaQueryResults.size();
    for (unsigned i = 0; i < s; i++) {
        if (m_medium->eval(&m_viewportDependentMediaQueryResults[i]->m_expression) != m_viewportDependentMediaQueryResults[i]->m_result)
            return true;
    }
    return false;
}


저작자 표시 비영리 변경 금지
신고
Posted by 소혼

WebKit/Efl (ewebkit)을 빌드하는 방법은 다음 글을 참고해주세요.

(http://bunhere.tistory.com/387)


webkit은 빌드에 너무 시간이 많이 걸려서 패키지로 만들어서 공유해두어야겠다는 생각이 들었습니다.


webkit1/efl (이하 ewebkit) 패키지와 webkit2/efl(이하 ewebkit2)를 만들기 위해 debian폴더를 만들었습니다.

git clone https://github.com/bunhere/ewebkit-debian.git


ubuntu 12.10 (64비트)를 사용하시는 경우, output 폴더 아래 패키지를 다운받아 설치해주시면 됩니다. 또는 아래 첨부 deb를 클릭하셔도 됩니다.(gdrive)


설치하는 법은 dpkg -i 파일명 입니다.

기존에 설치한 패키지를 지우려면 dpkg -r 패키지명 치시면 됩니다.

1. 아직 불완전합니다. efl, edbus, harfbuzz를 포함한 다수의 dep를 해결해주지 않습니다.

     efl 관련해서는 efl.or.kr을,   edbus, harfbuzz는 위 글을 참고하세요

2. ewebkit2 도 조만간 준비하겠습니다.

3.이 글을 계속 업데이트하도록 하겠습니다.


* 현재 ewebkit패키지와 ewebkit2 패키지는 공통의 파일(theme, resource)를 포함하고 있어, 같이 설치가 되지 않을 것입니다.

* 불편하더라도 번갈아가면서 설치하거나 강제로 설치해야 합니다.


------------- ewebkit -------------------------

r146585 (09/04/22)

libewebkit_0.1_amd64.deb

libewebkit-dev_0.1_amd64.deb

------------- ewebkit2 -------------------------

r146860 (13/03/26)

libewebkit2_0.1_amd64.deb

libewebkit2-dev_0.1_amd64.deb

저작자 표시
신고
Posted by 소혼
TAG ewebkit

이전에 작성한 linkElement에 이어 style element로 media query를 주었을 때 웹킷이 처리하는 과정을 정리해보고자 합니다.

style element에 대한 처리를 알려면, webkit이 style element을 처리하는 전반적인 플로우를 이해해야 합니다.

하지만, 여기서는 되도록 media query에 집중해서 설명하려고 노력할 생각입니다.


이전글 : Media query in webkit(link Element)

다음글 : Media query in webkit(import/media rule)


이번에 다룰 예제는 아래와 같습니다.


### html

<!doctype html>
<head>
<style media="screen and (min-width:300px)">
body { background-color:red; }
</style>
<body>
hello
</body>

HTML specification에서 style element를 보면 attribute로 media를 지정할 수 있습니다.


먼저 이 코드를 크롬으로 로드하여 inspector를 통해 document.styleSheets를 보도록 하겠습니다.


StyleSheetList에 한 개의 stylesheet가 있고, 0번째 CSSStyleSheet에는 cssRules, disabled, href, media, 등등이 있습니다.

MediaList타입의 media 프로퍼티에는 style element의 attribute로 넘긴 media query 정보가 들어 있음을 알 수 있습니다.

CSSRuleList타입의 cssRules에는 1개의 CSSStyleRule이 있고 이 안에 지정한 스타일 정보가 들어있음을 알 수 있습니다.


여기서 표현되는 CSSStyleSheet, CSSRuleList, CSSStyleRul은 웹킷 내부에 동일한 이름의 클래스와 매칭됩니다.


이번 글에서 다루진 않겠지만 참고 삼아, 예제를 조금 고쳐보겠습니다. 이번에는 @media rule을 사용한 경우입니다.


### html

<!doctype html>
<head>
<style>
@media screen and (min-width:300px) {
body { background-color:red; }
}
</style>
<body>
hello
</body>




이렇게 변경하면 CSSStyleSheet가 가진 media 프로퍼티에는 아무런 값이 존재하지 않습니다.

대신 cssRules 가 직접 CSSStyleRule을 갖는 것이 아니라, CSSMediaRule을 갖는 것을 알 수 있습니다. CSSMediaRule이  CSSStyleRule을 갖습니다.


[WebKit Internal]

WebKit에서 Style tag를 담당하는 클래스는 HTMLStyleElement와 StyleElement입니다.

HTMLStyleElement는 StyleElement를 상속받습니다. (class HTMLStyleElement : public HTMLElement, private StyleElement)

SVGStyleElement와 공용으로 쓸 수 있는 기능들이 StyleElement안에 있는듯 합니다.


먼저 </style>태그를  만나 읽게 되면  HTMLElement들은 finishParsingChildren을 호출합니다.

HTMLStyleElement 도 해당 함수의 구현을 갖고 있습니다.


### c++

void HTMLStyleElement::finishParsingChildren()
{
    StyleElement::finishParsingChildren(this);
    HTMLElement::finishParsingChildren();
}

여기서 관심을 갖는 부분은 StyleElement입니다.


### c++ ; highlight : [29, 34]

void StyleElement::finishParsingChildren(Element* element)
{  
    ASSERT(element);
    process(element);
    m_createdByParser = false;
}

void StyleElement::process(Element* e)
{  
    if (!e || !e->inDocument())
        return;
   
    unsigned resultLength = 0;
    for (Node* c = e->firstChild(); c; c = c->nextSibling()) {
        if (isValidStyleChild(c)) {
            unsigned length = c->nodeValue().length();
            if (length > std::numeric_limits<unsigned>::max() - resultLength) {
                createSheet(e, m_startLineNumber, "");
                return;
            }
            resultLength += length;
        }
    }
    StringBuilder sheetText;
    sheetText.reserveCapacity(resultLength);
   
    for (Node* c = e->firstChild(); c; c = c->nextSibling()) {
        if (isValidStyleChild(c)) {
            sheetText.append(c->nodeValue());
        }
    }
    ASSERT(sheetText.length() == resultLength);
   
    createSheet(e, m_startLineNumber, sheetText.toString());
}

StyleElement::finishParsingChildren가 하는 일도 간단히 process()를 부르는 일이 전부입니다.

process()는

1. parsing이 끝났을때(finishParsingChildren),

2. StyleElement가 document에 insert 되었을 때(insertIntoDocument)

3. 자식 노드들이 바뀌었을 때(childrendChanged)

호출됩니다.


process()안을 보시면, child node 가운데 validStyleChild만 찾아서 해당하는 sheetText에 추가하는 것을 알 수 있습니다.(29 line)

위 예제에서는 하나의 노드(TextNode)만을 가지고

값(nodeValue)은 "

body { background-color:red; }

" 입니다. (<style>부터 </style>까지 이기 때문에 위 예제에서는 앞뒤로 newline이 있습니다.)


### c++

static bool isValidStyleChild(Node* node)
{  
    ASSERT(node);
    Node::NodeType nodeType = node->nodeType();
    return nodeType == Node::TEXT_NODE || nodeType == Node::CDATA_SECTION_NODE;
}

validStyleChild는 단순히 TEXT_NODE와 CDATA_SECTION_NODE 인지 여부만 체크합니다.


사실상 핵심은 sheet를 만드는 것입니다.(StyleElement::process의 34 line)

StyleElement::process는 엘리먼트(e)와 시작라인, sheetText 문자열(valid한 child node들의 문자열)을 createSheet에게 넘겨줍니다.


### c++ ; highlight: [6,7,8,9,10, 17]

void StyleElement::createSheet(Element* e, WTF::OrdinalNumber startLineNumber, const String& text)
{            
    ASSERT(e);             
    ASSERT(e->inDocument());          
    Document* document = e->document();
    if (m_sheet) {              
        if (m_sheet->isLoading())                                 
            document->styleSheetCollection()->removePendingSheet();
        clearSheet();
    }
                                                          
    // If type is empty or CSS, this is a CSS style sheet.
    const AtomicString& type = this->type();                                       
    if (document->contentSecurityPolicy()->allowInlineStyle(e->document()->url(), startLineNumber) && isCSS(e, type)) {
        RefPtr<MediaQuerySet> mediaQueries;
        if (e->isHTMLElement())
            mediaQueries = MediaQuerySet::createAllowingDescriptionSyntax(media());
        else
            mediaQueries = MediaQuerySet::create(media());
           
        MediaQueryEvaluator screenEval("screen", true);
        MediaQueryEvaluator printEval("print", true);
        if (screenEval.eval(mediaQueries.get()) || printEval.eval(mediaQueries.get())) {

            // ... 생략, 아래에서 계속
        }  
    }
               
    if (m_sheet)
        m_sheet->contents()->checkLoaded();
}

먼저 기존에 만든 CSSStyleSheet이 있는지 확인하고, 있다면 제거합니다. (6-10 line). 이 때 CSSStyleSheet이 로딩중이면 제거합니다.(8line)

StyleElement가 가진 CSSStyleSheet이 로딩중인 케이스는 import rule을 생각하시면 됩니다.


현재 StyleElement는 HTMLStyleElement 에서 this를 받아왔기 때문에 MediaQuerySet::createAllowingDescriptionSyntax(media())를 호출합니다.(17 line)


Media query in webkit(linkElement)를 읽으신 분들은 MediaQueryEvaluator을 만들때 추가로 요구하는 값들이 있었다는 것을 기억해주시기 바랍니다.

FrameView의 mediaType, frame, documentStyle입니다. 여기서는 FrameView의 media type대신 "screen"과 "print" 두개의 MediaQueryEvaluator를 만들고 있고 다른 값들은 넘겨주지 않습니다. 

다른 값들이 없으면 media feature를 확인하는 것이 불가능합니다.

이전 글에서 colorMediaFeatureEval의 구현을 보시면, frame을 이용하여 screenDepth를 구하고 있는 것을 알 수 있습니다.


여기서는 대신 두 번째 인자로 true를 넘겨주고 있습니다. 이 값은 MediaQueryEvaluator의 멤버인 m_expResult의 값이 됩니다.

그리고 MediaQueryEvaluator::eval(MediaQueryExp*) const을 다시 보시면,

### c++ ; hilight : [3, 4]

bool MediaQueryEvaluator::eval(const MediaQueryExp* expr) const
{
    if (!m_frame || !m_style)
        return m_expResult;

    if (!expr->isValid())
        return false;

    if (!gFunctionMap)
        createFunctionMap();

    // call the media feature evaluation function. Assume no prefix
    // and let trampoline functions override the prefix if prefix is
    // used
    EvalFunc func = gFunctionMap->get(expr->mediaFeature().impl());
    if (func)
        return func(expr->value(), m_style.get(), m_frame, NoPrefix);

    return false;
}

frame과 style의 값이 없을 때 m_expResult의 값을 반환합니다.(4 line)

즉, StyleElement::createSheet에서는 media type만 확인하고 true를 반환합니다.


### c++ ; highlight : [ 7, 10, 11, 13 ]

void StyleElement::createSheet(Element* e, WTF::OrdinalNumber startLineNumber, const String& text)
{
        // ... 생략, 위에서 계속
        MediaQueryEvaluator screenEval("screen", true);
        MediaQueryEvaluator printEval("print", true);
        if (screenEval.eval(mediaQueries.get()) || printEval.eval(mediaQueries.get())) {
            document->styleSheetCollection()->addPendingSheet();
            m_loading = true;

            m_sheet = CSSStyleSheet::createInline(e, KURL(), document->inputEncoding());
            m_sheet->setMediaQueries(mediaQueries.release());
            m_sheet->setTitle(e->title());
            m_sheet->contents()->parseStringAtLine(text, startLineNumber.zeroBasedInt());

            m_loading = false;
        }
    }

    if (m_sheet)
        m_sheet->contents()->checkLoaded();
}

media type이 screen이나 print를 포함한다면, StyleElement::createSheet의 7-15 line에서 CSSStyleSheet를 만듭니다.
먼저 document에 pending된 스타일 시트가 있음을 알립니다.(7 line). document에 pending된 스타일 시트가 있으면 웹코어는 layout을 주기적으로 스케줄링합니다.


그리고, CSSStyleSheet::createInline을 통해 stylesheet를 만듭니다.(9 line) 이 때, CSSStyleSheet::createInline은 StyleSheetContents를 만드는데 여기가 parsing된 결과물(CSSRule)이 저장되는 곳입니다.,


이 후, media query를 설정후(10 line), 넘겨받은 text data의 파싱을 수행합니다. (11 line)


parsing이 끝나면, checkLoaded를 통해 style을 적용할지를 결정합니다.

### c++ ; highlight : 23

void StyleSheetContents::checkLoaded()
{                                                                                  
    if (isLoading())                                                               
        return;                                                                    
                                                                                   
    RefPtr<StyleSheetContents> protect(this);                                      
                                                                                   
    // Avoid |this| being deleted by scripts that run via                          
    // ScriptableDocumentParser::executeScriptsWaitingForStylesheets().            
    // See <rdar://problem/6622300>.                                               
    RefPtr<StyleSheetContents> protector(this);                                    
    StyleSheetContents* parentSheet = parentStyleSheet();                          
    if (parentSheet) {                                                             
        parentSheet->checkLoaded();                                                
        m_loadCompleted = true;                                                    
        return;                                                                    
    }                                                                              
    RefPtr<Node> ownerNode = singleOwnerNode();                                    
    if (!ownerNode) {                                                              
        m_loadCompleted = true;                                                    
        return;                                                                    
    }                                                                              
    m_loadCompleted = ownerNode->sheetLoaded();                                    
    if (m_loadCompleted)                                                           
        ownerNode->notifyLoadedSheetAndAllCriticalSubresources(m_didLoadErrorOccur);
}

먼저 자신이 로딩중이면, return합니다 (3 line). 예제에서는 로딩할 것이 없으므로 파싱이 끝나면 로딩도 끝납니다. 다음엔 parentSheet가 있으면 parentSheet를 check하는데 여기서는 parentSheet가 없으므로 ownerNode(StyleElement)의 sheetLoaded를 호출합니다. (23 line)


### c++

bool StyleElement::sheetLoaded(Document* document)
{                                                                                  
    ASSERT(document);                                                              
    if (isLoading())
        return false;                                                              
   
    document->styleSheetCollection()->removePendingSheet();                        
    return true;                                                                   
}

pendingSheet를 제거합니다.


### c++ ; highlight : [14, 22]

// This method is called whenever a top-level stylesheet has finished loading.
void DocumentStyleSheetCollection::removePendingSheet(RemovePendingSheetNotificationType notification)
{  
    // Make sure we knew this sheet was pending, and that our count isn't out of sync.
    ASSERT(m_pendingStylesheets > 0);

    m_pendingStylesheets--;
    
#ifdef INSTRUMENT_LAYOUT_SCHEDULING                                                
    if (!ownerElement())                                                           
        printf("Stylesheet loaded at time %d. %d stylesheets still remain.\n", elapsedTime(), m_pendingStylesheets);
#endif 
   
    if (m_pendingStylesheets)
        return;

    if (notification == RemovePendingSheetNotifyLater) {
        m_document->setNeedsNotifyRemoveAllPendingStylesheet();                    
        return;
    }
   
    m_document->didRemoveAllPendingStylesheet();                                   
}

pendingStyleSheets가 더이상 없다면(14 line), didRemoveAllPendingStylesheet를 호출합니다.


### c++ ; highlight : 5

void Document::didRemoveAllPendingStylesheet()                                     
{  
    m_needsNotifyRemoveAllPendingStylesheet = false;

    styleResolverChanged(RecalcStyleIfNeeded);
   
    if (ScriptableDocumentParser* parser = scriptableDocumentParser())
        parser->executeScriptsWaitingForStylesheets();
   
    if (m_gotoAnchorNeededAfterStylesheetsLoad && view())
        view()->scrollToFragment(m_url);
}

StyleResolve가 변경되었음을 알려줍니다.(5 line)


### c++ ; highlight : 19

void Document::styleResolverChanged(StyleResolverUpdateFlag updateFlag)
{
    // Don't bother updating, since we haven't loaded all our style info yet
    // and haven't calculated the style selector for the first time.
    if (!attached() || (!m_didCalculateStyleResolver && !haveStylesheetsLoaded())) {
        m_styleResolver.clear();
        return;
    }
    m_didCalculateStyleResolver = true;

#ifdef INSTRUMENT_LAYOUT_SCHEDULING
    if (!ownerElement())
        printf("Beginning update of style selector at time %d.\n", elapsedTime());
#endif

    DocumentStyleSheetCollection::UpdateFlag styleSheetUpdate = (updateFlag == RecalcStyleIfNeeded)
        ? DocumentStyleSheetCollection::OptimizedUpdate
        : DocumentStyleSheetCollection::FullUpdate;
    bool stylesheetChangeRequiresStyleRecalc = m_styleSheetCollection->updateActiveStyleSheets(styleSheetUpdate);

    if (updateFlag == DeferRecalcStyle) {
        scheduleForcedStyleRecalc();
        return;
    }

    // ...

}

styleResolverChanged는 webkit이 layout을 다시 수행하게 되는 관문격에 해당하는 메소드입니다.

이 메소드에서 updateActiveStyleSheets가 호출되어 스타일 시트들을 업데이트 하게 됩니다. (19 line)


### c++ ; highlight : [16, 22, 35, 38]

bool DocumentStyleSheetCollection::updateActiveStyleSheets(UpdateFlag updateFlag)
{
    if (m_document->inStyleRecalc()) {
        // SVG <use> element may manage to invalidate style selector in the middle of a style recalc.
        // https://bugs.webkit.org/show_bug.cgi?id=54344
        // FIXME: This should be fixed in SVG and the call site replaced by ASSERT(!m_inStyleRecalc).
        m_needsUpdateActiveStylesheetsOnStyleRecalc = true;
        m_document->scheduleForcedStyleRecalc();
        return false;
       
    }
    if (!m_document->renderer() || !m_document->attached())
        return false;
       
    Vector<RefPtr<StyleSheet> > activeStyleSheets;
    collectActiveStyleSheets(activeStyleSheets);
   
    Vector<RefPtr<CSSStyleSheet> > activeCSSStyleSheets;
    activeCSSStyleSheets.append(injectedAuthorStyleSheets());
    activeCSSStyleSheets.append(documentAuthorStyleSheets());
    collectActiveCSSStyleSheetsFromSeamlessParents(activeCSSStyleSheets, m_document);
    filterEnabledCSSStyleSheets(activeCSSStyleSheets, activeStyleSheets);
   
    StyleResolverUpdateType styleResolverUpdateType;
    bool requiresFullStyleRecalc;
    analyzeStyleSheetChange(updateFlag, activeCSSStyleSheets, styleResolverUpdateType, requiresFullStyleRecalc);


    if (styleResolverUpdateType == Reconstruct)
        m_document->clearStyleResolver();
    else {                                                                             
        StyleResolver* styleResolver = m_document->styleResolver();
        if (styleResolverUpdateType == Reset) {
            styleResolver->ruleSets().resetAuthorStyle();
            styleResolver->appendAuthorStyleSheets(0, activeCSSStyleSheets);
        } else {
            ASSERT(styleResolverUpdateType == Additive);                               
            styleResolver->appendAuthorStyleSheets(m_activeAuthorStyleSheets.size(), activeCSSStyleSheets);                                                                    
        }
        resetCSSFeatureFlags();
    }

    m_activeAuthorStyleSheets.swap(activeCSSStyleSheets);
    m_styleSheetsForStyleSheetList.swap(activeStyleSheets);

// ...

updateActiveStyleSheets도 많은 일을 수행하지만 일단, collectActiveStyleSheets를 호출합니다. (16 line)

아래서 코드를 보겠지만, activeStyleSheets를 통해 현재 page의 style sheet를 가져오게 됩니다.

여기에 filterEnabledCSSStyleSheets 함수를 통해 activeStyleSheets중에 사용할 수 있는 것들만 activeCSSStyleSheets로 옮깁니다. ( 22 line)
그리고 styleResolver->appendAuthorStyleSheets를 호출합니다. (35 or 38 line)



### c++ ; highlight : [8, 25, 64, 87]

void DocumentStyleSheetCollection::collectActiveStyleSheets(Vector<RefPtr<StyleSheet> >& sheets)
{
    if (m_document->settings() && !m_document->settings()->authorAndUserStylesEnabled())
        return;

    StyleSheetCandidateListHashSet::iterator begin = m_styleSheetCandidateNodes.begin();
    StyleSheetCandidateListHashSet::iterator end = m_styleSheetCandidateNodes.end();
    for (StyleSheetCandidateListHashSet::iterator it = begin; it != end; ++it) {
        Node* n = *it;
        StyleSheet* sheet = 0;
        if (n->nodeType() == Node::PROCESSING_INSTRUCTION_NODE) {
            // Processing instruction (XML documents only).
            // We don't support linking to embedded CSS stylesheets, see <https://bugs.webkit.org/show_bug.cgi?id=49281> for discussion.
            ProcessingInstruction* pi = static_cast<ProcessingInstruction*>(n);
            sheet = pi->sheet();
#if ENABLE(XSLT)
            // Don't apply XSL transforms to already transformed documents -- <rdar://problem/4132806>
            if (pi->isXSL() && !m_document->transformSourceDocument()) {
                // Don't apply XSL transforms until loading is finished.
                if (!m_document->parsing())
                    m_document->applyXSLTransform(pi);
                return;
            }
#endif
        } else if ((n->isHTMLElement() && (n->hasTagName(linkTag) || n->hasTagName(styleTag)))
#if ENABLE(SVG)
                   ||  (n->isSVGElement() && n->hasTagName(SVGNames::styleTag))
#endif
                   ) {
            Element* e = static_cast<Element*>(n);
            AtomicString title = e->getAttribute(titleAttr);
            bool enabledViaScript = false;
            if (e->hasLocalName(linkTag)) {
                // <LINK> element
                HTMLLinkElement* linkElement = static_cast<HTMLLinkElement*>(n);
                if (linkElement->isDisabled())
                    continue;
                enabledViaScript = linkElement->isEnabledViaScript();
                if (linkElement->styleSheetIsLoading()) {
                    // it is loading but we should still decide which style sheet set to use
                    if (!enabledViaScript && !title.isEmpty() && m_preferredStylesheetSetName.isEmpty()) {
                        const AtomicString& rel = e->getAttribute(relAttr);
                        if (!rel.contains("alternate")) {
                            m_preferredStylesheetSetName = title;
                            m_selectedStylesheetSetName = title;
                        }
                    }
                    continue;
                }
                if (!linkElement->sheet())
                    title = nullAtom;
            }
            // Get the current preferred styleset. This is the
            // set of sheets that will be enabled.
#if ENABLE(SVG)
            if (n->isSVGElement() && n->hasTagName(SVGNames::styleTag))
                sheet = static_cast<SVGStyleElement*>(n)->sheet();
            else
#endif
            if (e->hasLocalName(linkTag))
                sheet = static_cast<HTMLLinkElement*>(n)->sheet();
            else
                // <STYLE> element
                sheet = static_cast<HTMLStyleElement*>(n)->sheet();
            // Check to see if this sheet belongs to a styleset
            // (thus making it PREFERRED or ALTERNATE rather than
            // PERSISTENT).
            AtomicString rel = e->getAttribute(relAttr);
            if (!enabledViaScript && !title.isEmpty()) {
                // Yes, we have a title.
                if (m_preferredStylesheetSetName.isEmpty()) {
                    // No preferred set has been established. If
                    // we are NOT an alternate sheet, then establish
                    // us as the preferred set. Otherwise, just ignore
                    // this sheet.
                    if (e->hasLocalName(styleTag) || !rel.contains("alternate"))
                        m_preferredStylesheetSetName = m_selectedStylesheetSetName = title;
                }
                if (title != m_preferredStylesheetSetName)
                    sheet = 0;
            }

            if (rel.contains("alternate") && title.isEmpty())
                sheet = 0;
        }
        if (sheet)
            sheets.append(sheet);
    }
}

CandidateNode들을 돌면서 style element의 sheet를 append합니다.


styleResolver->appendAuthorStyleSheets는 결국 DocumentRuleSets::appendAuthorStyleSheets를 호출합니다.

### c++ ; highlight : [9, 21]

void DocumentRuleSets::appendAuthorStyleSheets(unsigned firstNew, const Vector<RefPtr<CSSStyleSheet> >& styleSheets, MediaQueryEvaluator* medium, InspectorCSSOMWrappers& inspectorCSSOMWrappers, bool isViewSource, StyleResolver* resolver)
{
    // This handles sheets added to the end of the stylesheet list only. In other cases the style resolver
    // needs to be reconstructed. To handle insertions too the rule order numbers would need to be updated.
    unsigned size = styleSheets.size();
    for (unsigned i = firstNew; i < size; ++i) {
        CSSStyleSheet* cssSheet = styleSheets[i].get();
        ASSERT(!cssSheet->disabled());
        if (cssSheet->mediaQueries() && !medium->eval(cssSheet->mediaQueries(), resolver))
            continue;
        StyleSheetContents* sheet = cssSheet->contents();
#if ENABLE(STYLE_SCOPED) || ENABLE(SHADOW_DOM)
        if (const ContainerNode* scope = StyleScopeResolver::scopeFor(cssSheet)) {
            // FIXME: Remove a dependency to calling a StyleResolver's member function.
            // If we can avoid calling resolver->ensureScopeResolver() here, we don't have to include "StyleResolver.h".
            // https://bugs.webkit.org/show_bug.cgi?id=108890
            resolver->ensureScopeResolver()->ensureRuleSetFor(scope)->addRulesFromSheet(sheet, *medium, resolver, scope);
            continue;
        }
#endif
        m_authorStyle->addRulesFromSheet(sheet, *medium, resolver);
        inspectorCSSOMWrappers.collectFromStyleSheetIfNeeded(cssSheet);
    }
    m_authorStyle->shrinkToFit();
    collectFeatures(isViewSource, resolver->scopeResolver());
}

드디어 찾아헤매던 media query가 나왔습니다.( 9 line)

StyleResolver가 갖고 있던 m_medium을 받아 이 값을 각각의 CSSStyleSheet의 media query와 비교하여 매치 되는 스타일 시트만 rule에 추가됩니다. (21 line)

이 때 resolver의 값도 같이 넘어가는 것을 보실 수 있습니다.


resolver의 값이 있기 때문에 이제 viewport dependent여부를 확인할 수 있습니다.

### c++ ; highlight : [25, 26]

bool MediaQueryEvaluator::eval(const MediaQuerySet* querySet, StyleResolver* styleResolver) const
{
    if (!querySet)
        return true;

    const Vector<OwnPtr<MediaQuery> >& queries = querySet->queryVector();
    if (!queries.size())
        return true; // empty query list evaluates to true

    // iterate over queries, stop if any of them eval to true (OR semantics)
    bool result = false;
    for (size_t i = 0; i < queries.size() && !result; ++i) {
        MediaQuery* query = queries[i].get();

        if (query->ignored())
            continue;

        if (mediaTypeMatch(query->mediaType())) {
            const Vector<OwnPtr<MediaQueryExp> >* exps = query->expressions();
            // iterate through expressions, stop if any of them eval to false
            // (AND semantics)
            size_t j = 0;
            for (; j < exps->size(); ++j) {
                bool exprResult = eval(exps->at(j).get());
                if (styleResolver && exps->at(j)->isViewportDependent())
                    styleResolver->addViewportDependentMediaQueryResult(exps->at(j).get(), exprResult);
                if (!exprResult)
                    break;
            }

            // assume true if we are at the end of the list,
            // otherwise assume false
            result = applyRestrictor(query->restrictor(), exps->size() == j);
        } else
            result = applyRestrictor(query->restrictor(), false);
    }

    return result;
}

Media query expression이 viewport dependent한지 체크합니다. 예제에서 width를 지정했으므로 viewport dependent합니다.

따라서 styleResolver에 해당 mediaQuery를 넘겨주게 따로 저장하고 있게 됩니다. ( 26 line )

이렇게 저장된 정보는 layout과정에서 다시 evaluation의 대상이 될 것입니다.


위에서 스타일 시트를 추가할 때 link element도 고려해서 추가하고 있었던 것을 기억하신다면,

이전글에서 설명한 것 외에 linke element에 대해서도 이 부분에서 한번 더 evaluation과정을 거치게 되고 이 때 viewportDependent도 체크하게 될 것입니다.

저작자 표시 비영리 변경 금지
신고
Posted by 소혼

[media query 간략 소개]

Media query는 media의 종류에 따라 특정 CSS 스타일을 적용하고자 할 때  사용하는 CSS 스펙 가운데 하나입니다.

(http://www.w3.org/TR/css3-mediaqueries/)



media query에 대한 article : http://html.nhncorp.com/blog/42284


다음글 : Media query in webkit (style element)

그 다음글 : Media query in webkit(import/media rule)







예를 들어 아래는 대표적인 media query의 예입니다. (이 글에서 코드리딩할 방법입니다.)

### html
<link rel="stylesheet" type="text/css" media="screen" href="sans-serif.css">
<link rel="stylesheet" type="text/css" media="print" href="serif.css">

screenprint는 가장 많이 알려진 미디어의 종류(type)입니다.


또는 아래처럼 쓸 수도 있습니다.

### css
@media screen {
 * { font-family: sans-serif }
}


또 @import rule을 사용하여 아래와 같은 방법도 있습니다.

### css

@import url(example.css) screen


style element 자체에도 media query를 사용할 수 있습니다.

### html

<style media="screen and (min-width:300px)">
body { background-color:red; }
</style>


media query라는 단어가 말하듯 단순히 media의 종류를 지정하는 것 뿐 아니라 간단한 형태의 조건을 줄 수도 있습니다.

자세한 내용은 위에 링크한 스펙을 참고하시기 바랍니다.


간단히 정리하면 다음과 같습니다.

  • 여러 media type을 지정하고 싶다면 , 를 사용합니다. (screen, print)
  • media에 추가로 특정 media feature만 적용되도록 제한하고 싶다면 media feature와 media value로 이루어지는 수식들을 and로 추가할 수 있습니다.
  • only, not과 같은 제한자를 가질 수 있습니다.


예를 들면, 아래와 같습니다.

### css

<link rel="stylesheet" media="speech and (min-device-width: 800px)" href="example.css" />



[WebKit internal]

일단 위 예제 1의 <link>의 경우부터 시작하겠습니다. (1번라인을 기준으로 설명하겠습니다.)

네트워크로부터 데이터를 가져와서 link 태그를 파싱하면 HTMLLinkElement를 만들게 됩니다.

그 다음 Attribute들을 파싱하기 위해 parseAttribute를 부릅니다.


### c++; highlight: [9, 10]

void HTMLLinkElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
{
    if (name == relAttr) {
        m_relAttribute = LinkRelAttribute(value);
        process();
    } else if (name == hrefAttr) {
         // ...
    } else if (name == mediaAttr) {
        m_media = value.string().lower();
        process();
    } else if (name == disabledAttr)
         // ...
    else {
        if (name == titleAttr && m_sheet)
            m_sheet->setTitle(value);
        HTMLElement::parseAttribute(name, value);
    }
}

만약 현재 처리할 attribute가 media라면(9 line) value(screen)를 소문자로 변경하여 m_media에 넣고 process()를 호출합니다.


### c++; highlight:[10, 11, 12]

void HTMLLinkElement::process()
{
    // ...

    if (m_disabledState != Disabled && (m_relAttribute.m_isStyleSheet || (acceptIfTypeContainsTextCSS && type.contains("text/css")))
        && document()->frame() && m_url.isValid()) {

        // ...

        bool mediaQueryMatches = true;
        if (!m_media.isEmpty()) {
            RefPtr<RenderStyle> documentStyle = StyleResolver::styleForDocument(document());
            RefPtr<MediaQuerySet> media = MediaQuerySet::createAllowingDescriptionSyntax(m_media);
            MediaQueryEvaluator evaluator(document()->frame()->view()->mediaType(), document()->frame(), documentStyle.get());
            mediaQueryMatches = evaluator.eval(media.get());
        }

        // Don't hold up render tree construction and script execution on stylesheets
        // that are not needed for the rendering at the moment.
        bool blocking = mediaQueryMatches && !isAlternate();
        addPendingSheet(blocking ? Blocking : NonBlocking);

        // Load stylesheets that are not needed for the rendering immediately with low priority.
        ResourceLoadPriority priority = blocking ? ResourceLoadPriorityUnresolved : ResourceLoadPriorityVeryLow;
        CachedResourceRequest request(ResourceRequest(document()->completeURL(m_url)), charset, priority);
        request.setInitiator(this);
        m_cachedSheet = document()->cachedResourceLoader()->requestCSSStyleSheet(request);

        if (m_cachedSheet)
            m_cachedSheet->addClient(this);
        else {
            // The request may have been denied if (for example) the stylesheet is local and the document is remote.
            m_loading = false;
            removePendingSheet();
        }

       // ...

}

기본적으로 mediaQueryMatches는 true 입니다.

그러나, m_media가 있다면, FrameView의 mediaType, frame, documentStyle과 비교하여 mediaQuery가 match되는지 확인합니다.(9-12 line)

MediaQueryEvaluator가 이 값들을 가지고 있다가 eval을 통해 비교할 것입니다. (12 line)


만약 match된다면, loader에게 정상적으로 로드요청을 하겠지만, 아니면, blocking되었다가 제거될 것입니다.


m_media는 간단하게는 screen과 같이 media type만 있을 수도 있지만, "screen and (color:1), projection" 과 같이 여러 media type들과 media feature로 이루어진 수식을 포함할지도 모릅니다.


따라서 MediaQueryEvaluator가 쉽게 계산할 수 있도록 MediaQuerySet::createAllowingDescriptionSyntax을 이용하여 media query set으로 변환합니다.(10 line)


### c++ : highlight: [7, 9, 15]

bool MediaQuerySet::parse(const String& mediaString)
{
    CSSParser parser(CSSStrictMode);

    Vector<OwnPtr<MediaQuery> > result;
    Vector<String> list;
    mediaString.split(',', list);
    for (unsigned i = 0; i < list.size(); ++i) {
        String medium = list[i].stripWhiteSpace();
        if (medium.isEmpty()) {
            if (!m_fallbackToDescriptor)
                return false;
            continue;
        }
        OwnPtr<MediaQuery> mediaQuery = parser.parseMediaQuery(medium);
        if (!mediaQuery) {
            if (!m_fallbackToDescriptor)
                return false;
            String mediaDescriptor = parseMediaDescriptor(medium);
            if (mediaDescriptor.isNull())
                continue;
            mediaQuery = adoptPtr(new MediaQuery(MediaQuery::None, mediaDescriptor, nullptr));
        }
        result.append(mediaQuery.release());
    }
    // ",,,," falls straight through, but is not valid unless fallback
    if (!m_fallbackToDescriptor && list.isEmpty()) {
        String strippedMediaString = mediaString.stripWhiteSpace();
        if (!strippedMediaString.isEmpty())
            return false;
    }
    m_queries.swap(result);
    return true;
}

createAllowingDescriptionSyntax는 m_fallbackToDescriptor를 true로 하는 MediaQuerySet을 만들어 parse를 부르는게 전부입니다.

parse는 넘겨받은 mediaString을 ,로 구분해서(7 line) strip하고 (9 line) CSSParser에게 parsing을 요청하는게 전부입니다.(15 line)

MediaQuery는 세가지 주요 인자를 갖는데 Restrictor( Only, Not, None)와 mediaType(String), ExpressionVector입니다.


ExpressionVector 는 MediaQueryExp를 갖는 자료형으로 Exp가 만들어지면서 유효한 expression들이 vector에 들어가게 됩니다.


이제 MediaQuery는 만들어졌으니 이전 소스코드에서 MediaQueryEvaluator::eval을 보도록 하겠습니다.

### c++; highlight: [6, 18, 19, 24]

bool MediaQueryEvaluator::eval(const MediaQuerySet* querySet, StyleResolver* styleResolver) const
{
    if (!querySet)
        return true;

    const Vector<OwnPtr<MediaQuery> >& queries = querySet->queryVector();
    if (!queries.size())
        return true; // empty query list evaluates to true

    // iterate over queries, stop if any of them eval to true (OR semantics)
    bool result = false;
    for (size_t i = 0; i < queries.size() && !result; ++i) {
        MediaQuery* query = queries[i].get();

        if (query->ignored())
            continue;

        if (mediaTypeMatch(query->mediaType())) {
            const Vector<OwnPtr<MediaQueryExp> >* exps = query->expressions();
            // iterate through expressions, stop if any of them eval to false
            // (AND semantics)
            size_t j = 0;
            for (; j < exps->size(); ++j) {
                bool exprResult = eval(exps->at(j).get());
                if (styleResolver && exps->at(j)->isViewportDependent())
                    styleResolver->addViewportDependentMediaQueryResult(exps->at(j).get(), exprResult);
                if (!exprResult)
                    break;
            }

            // assume true if we are at the end of the list,
            // otherwise assume false
            result = applyRestrictor(query->restrictor(), exps->size() == j);
        } else
            result = applyRestrictor(query->restrictor(), false);
    }

    return result;
}

6 line에서 qureySet을 vector로 변환하여 loop를 돌리면서

먼저 type이 같은지 확인합니다.(18 line)


같다면 expression들을 꺼내 (19 line), 수식을 eval()합니다.

전 예제에서 styleResolver를 넘기지 않았기 때문에 addViewportDependentMediaQueryResult는 수행하지 않습니다.

* 현재 사용중인 예제는 media type만 갖고 있습니다. 만약에 max-width:300처럼 media expression이 있다면 어떻게 될까요?

   현재 width가 1024라고 가정하면, 해당 엘리먼트는 로드하지 않을 것입니다.

   그러나, 브라우저 크기를 줄여서 width가 300이하가 되면? 해당 스타일 시트를 로드해야 합니다.

   이러한 처리를 하기 위한 것이 바로 addViewportDependentMediaQueryResult입니다.

   이 부분의 동작은 다음 글과 다다음 글을 통해 따라가 보도록 하겠습니다.


### c++; highlight: [6, 20]

static void createFunctionMap()
{
    // Create the table.
    gFunctionMap = new FunctionMap;
#define ADD_TO_FUNCTIONMAP(name, str)  \
    gFunctionMap->set(name##MediaFeature.impl(), name##MediaFeatureEval);
    CSS_MEDIAQUERY_NAMES_FOR_EACH_MEDIAFEATURE(ADD_TO_FUNCTIONMAP);
#undef ADD_TO_FUNCTIONMAP
}

bool MediaQueryEvaluator::eval(const MediaQueryExp* expr) const
{
    if (!m_frame || !m_style)
        return m_expResult;

    if (!expr->isValid())
        return false;

    if (!gFunctionMap)
        createFunctionMap();

    // call the media feature evaluation function. Assume no prefix
    // and let trampoline functions override the prefix if prefix is
    // used
    EvalFunc func = gFunctionMap->get(expr->mediaFeature().impl());
    if (func)
        return func(expr->value(), m_style.get(), m_frame, NoPrefix);

    return false;
}

수식의 eval은 mediaFeature마다 정의된 함수를 수행하는 것입니다.

함수의 등록은 createFunctionMap안의 매크로로 이루어집니다.(20 line)


현재 등록된 mediaFeature는이 글 제일 아래를 참고하시기 바랍니다. 웹킷은 현재 CSS 스펙에 없는 media feature도 몇 가지 지원하고 있습니다.(예: device-pixel-ratio)


media feature마다 함수와 구현이 다 다르기 때문에 각각의 구현을 확인하시려면 Source/WebCore/css/MediaQueryEvaluator.cpp 를 참고하시기 바랍니다.


예제로 color를 보도록 하겠습니다. 6 line에서 보듯 'media feature명' + MediaFeatureEval()이라는 함수를 봐야 찾아야 합니다.


### c++; highlight: [3, 6]

static bool colorMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, MediaFeaturePrefix op)
{                                                                                      
    int bitsPerComponent = screenDepthPerComponent(frame->page()->mainFrame()->view());
    float number;                                                                      
    if (value)                                                                         
        return numberValue(value, number) && compareValue(bitsPerComponent, static_cast<int>(number), op);

    return bitsPerComponent != 0;                                                      

color 의 경우 screenDepthPerComponent라는 platform specific function으로부터 값을 꺼내오고 있습니다.해당 함수는 Source/WebCore/platform/xxx/PlatformScreenXXX.cpp에 각 포트별로 구현되어 있습니다.(XXX는 포트명)


value가 있다는 것은 현재 확인하고 있는 expression이 >, < 와 같은 비교문이 있다는 뜻(ex - color:256)입니다.

MediaFeaturePrefix는 비교하는 media feature앞에 min- 또느 max-가 붙어있는지를 전달합니다. 이 값에 따라 compareValue가 ==을 비교할지 <= 나 >=를 비교할지가 결정됩니다.





현재 등록된 media feature의 종류

### c++

#define CSS_MEDIAQUERY_NAMES_FOR_EACH_MEDIAFEATURE(macro) \
    macro(color, "color") \
    macro(grid, "grid") \
    macro(monochrome, "monochrome") \
    macro(height, "height") \
    macro(hover, "hover") \
    macro(width, "width") \
    macro(orientation, "orientation") \
    macro(aspect_ratio, "aspect-ratio") \
    macro(device_aspect_ratio, "device-aspect-ratio") \
    macro(device_pixel_ratio, "-webkit-device-pixel-ratio") \
    macro(device_height, "device-height") \
    macro(device_width, "device-width") \
    macro(max_color, "max-color") \
    macro(max_aspect_ratio, "max-aspect-ratio") \
    macro(max_device_aspect_ratio, "max-device-aspect-ratio") \
    macro(max_device_pixel_ratio, "-webkit-max-device-pixel-ratio") \
    macro(max_device_height, "max-device-height") \
    macro(max_device_width, "max-device-width") \
    macro(max_height, "max-height") \
    macro(max_monochrome, "max-monochrome") \
    macro(max_width, "max-width") \
    macro(max_resolution, "max-resolution") \
    macro(min_color, "min-color") \
    macro(min_aspect_ratio, "min-aspect-ratio") \
    macro(min_device_aspect_ratio, "min-device-aspect-ratio") \
    macro(min_device_pixel_ratio, "-webkit-min-device-pixel-ratio") \
    macro(min_device_height, "min-device-height") \
    macro(min_device_width, "min-device-width") \
    macro(min_height, "min-height") \
    macro(min_monochrome, "min-monochrome") \
    macro(min_width, "min-width") \
    macro(min_resolution, "min-resolution") \
    macro(pointer, "pointer") \
    macro(resolution, "resolution") \
    macro(transform_2d, "-webkit-transform-2d") \
    macro(transform_3d, "-webkit-transform-3d") \
    macro(transition, "-webkit-transition") \
    macro(animation, "-webkit-animation") \
    macro(view_mode, "-webkit-view-mode")



저작자 표시 비영리 변경 금지
신고
Posted by 소혼
http://www.webkit.org
http://trac.webkit.org
https://bugs.webkit.org
http://build.webkit.org/
http://webkit.org/pending-commit
http://webkit.org/pending-review
http://www.chromium.org/developers/how-tos/webkit-merge-1

http://trac.webkit.org/wiki/UsingGitWithWebKit



https://wiki.mozilla.org/images/c/c0/Larres-thesis.pdf
wkb.ug/82701

webkit-perf.appspot.com

신고
Posted by 소혼
TAG Webkit
참고: http://bunhere.tistory.com/279
 

되는 것만 확인. 스크립트가 허접해서 그런가, 너무 오래 걸려서 더 보는 것은 포기.
나중에 한번 돌려놔야겠다 ㅠㅠ

[0x216e879]  > ??
??:0
[0x216e7f8]    > ??
??:0
[0x217245c]      > ??
??:0
[0x2172526]        > ??
??:0
[0x7328f8]          > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x2150cc1]  > ??
??:0
[0x2150c40]    > ??
??:0
[0x2100a2e]      > ??
??:0
[0x1c61102]        > ??
??:0
[0x7327fd]          > WTF::PassRefPtr<WebCore::CSSFontFaceRule>::leakRef() const at PassRefPtr.h:185
[0x731798]            > WTF::RefPtr<WebCore::WebKitCSSKeyframeRule>::release() at RefPtr.h:63
[0x731a24]              > void WTF::placeByteAsHexCompressIfPossible<WTF::StringBuffer>(unsigned char, WTF::StringBuffer&, unsigned int&, WTF::HexConversionMode) at HexNumber.h:57
[0x7319aa]                > void WTF::placeByteAsHexCompressIfPossible<WTF::StringBuffer>(unsigned char, WTF::StringBuffer&, unsigned int&, WTF::HexConversionMode) at HexNumber.h:55
[0x732264]            > void WTF::derefIfNotNull<WebCore::CSSRuleSourceData>(WebCore::CSSRuleSourceData*) at PassRefPtr.h:56
[0x732155]              > PassRefPtr at PassRefPtr.h:107
[0x731e98]                > WTF::Vector<WebCore::CSSParserValue, 4u>::at(unsigned int) at Vector.h:538
[0x5a1ce9]                  > WebCore::WorkerContext::script() at WorkerContext.h:80
[0x716026]                    > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                      > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x715bac]                        > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3352
[0x4cb9c0]                    > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:369
[0x7328f8]                  > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x4d4570]                > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                  > PassRefPtr at PassRefPtr.h:107
[0x732099]                > WTF::Vector<WebCore::CSSPropertySourceData, 0u>::shrink(unsigned int) at Vector.h:859
[0x7336d7]                  > void WTF::deleteOwnedPtr<WebCore::MediaQuery>(WebCore::MediaQuery*) at OwnPtrCommon.h:59
[0x716026]                    > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                      > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x4cb9c0]                    > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:369
[0x73354c]                  > PassRefPtr at PassRefPtr.h:107
[0x733742]                    > VectorBuffer at Vector.h:353
[0x7328f8]                      > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x7337ce]                > ~VectorBuffer at Vector.h:367
[0x733d8a]                  > VectorBuffer at Vector.h:353
[0x734746]                    > WTF::Vector<int, 0u>::begin() at Vector.h:553
[0x735172]                      > void WTF::removeIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >(WTF::HashTableConstIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >*) at HashTable.h:1105
[0x735cc2]                        > HashTableConstIterator at HashTable.h:140
[0x7340ff]                          > void WTF::deleteAllValues<WebCore::CSSParserValueList*, WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const>(WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const&) at HashSet.h:219
[0x4d4570]                            > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                              > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                            > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                              > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x7353f6]                          > PassOwnPtr at PassOwnPtr.h:87
[0x733df8]                  > ~VectorBuffer at Vector.h:367
[0x733636]                    > WTF::PassRefPtr<WebCore::WebKitCSSKeyframesRule>::leakRef() const at PassRefPtr.h:185
[0x7338a0]                      > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:861
[0x7340ff]                        > void WTF::deleteAllValues<WebCore::CSSParserValueList*, WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const>(WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const&) at HashSet.h:219
[0x4d4570]                          > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                            > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                          > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                            > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x73359a]                  > WTF::PassRefPtr<WebCore::WebKitCSSKeyframeRule>::leakRef() const at PassRefPtr.h:185
[0x733852]                    > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:859
[0x733e4c]                      > WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>::shrink(unsigned int) at Vector.h:859
[0x4d4570]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                          > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                          > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x732099]                > WTF::Vector<WebCore::CSSPropertySourceData, 0u>::shrink(unsigned int) at Vector.h:859
[0x73390e]                > WTF::HashTable<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >::invalidateIterators() at HashTable.h:1058
[0x73424e]                  > WTF::PassRefPtr<WebCore::CSSRule> WTF::adoptRef<WebCore::CSSRule>(WebCore::CSSRule*) at PassRefPtr.h:277
[0x7347c0]                    > WTF::Vector<int, 0u>::end() at Vector.h:554
[0x7351d4]                      > void WTF::removeIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >(WTF::HashTableConstIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >*) at HashTable.h:1108
[0x735d32]                        > void WTF::removeIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >(WTF::HashTableConstIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >*) at HashTable.h:1088
[0x7340ff]                          > void WTF::deleteAllValues<WebCore::CSSParserValueList*, WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const>(WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const&) at HashSet.h:219
[0x4d4570]                            > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                              > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                            > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                              > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x733df8]                  > ~VectorBuffer at Vector.h:367
[0x733636]                    > WTF::PassRefPtr<WebCore::WebKitCSSKeyframesRule>::leakRef() const at PassRefPtr.h:185
[0x7338a0]                      > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:861
[0x7340ff]                        > void WTF::deleteAllValues<WebCore::CSSParserValueList*, WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const>(WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const&) at HashSet.h:219
[0x4d4570]                          > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                            > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                          > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                            > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x73359a]                  > WTF::PassRefPtr<WebCore::WebKitCSSKeyframeRule>::leakRef() const at PassRefPtr.h:185
[0x733852]                    > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:859
[0x733e4c]                      > WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>::shrink(unsigned int) at Vector.h:859
[0x4d4570]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                          > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                          > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x733991]                > WTF::HashTable<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >::deallocateTable(WebCore::CSSParserSelector**, int) at HashTable.h:888
[0x7342c8]                  > WTF::PassRefPtr<WebCore::CSSRule> WTF::adoptRef<WebCore::CSSRule>(WebCore::CSSRule*) at PassRefPtr.h:281
[0x734842]                    > WTF::Vector<int, 0u>::at(unsigned int) at Vector.h:537
[0x73523e]                      > WTF::HashTable<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >::contains(WebCore::CSSParserSelector* const&) const at HashTable.h:329
[0x7335e8]                > PassRefPtr at PassRefPtr.h:107
[0x73359a]                  > WTF::PassRefPtr<WebCore::WebKitCSSKeyframeRule>::leakRef() const at PassRefPtr.h:185
[0x733852]                    > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:859
[0x733e4c]                      > WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>::shrink(unsigned int) at Vector.h:859
[0x4d4570]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                          > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                          > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x7335e8]                > PassRefPtr at PassRefPtr.h:107
[0x73359a]                  > WTF::PassRefPtr<WebCore::WebKitCSSKeyframeRule>::leakRef() const at PassRefPtr.h:185
[0x733852]                    > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:859
[0x733e4c]                      > WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>::shrink(unsigned int) at Vector.h:859
[0x4d4570]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                          > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                          > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x4d45c8]                > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                  > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x731e98]              > WTF::Vector<WebCore::CSSParserValue, 4u>::at(unsigned int) at Vector.h:538
[0x4d4570]              > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                > PassRefPtr at PassRefPtr.h:107
[0x732099]              > WTF::Vector<WebCore::CSSPropertySourceData, 0u>::shrink(unsigned int) at Vector.h:859
[0x733a94]              > WTF::HashTable<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >::deallocateTable(WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>**, int) at HashTable.h:896
[0x734418]                > void WTF::deleteOwnedPtr<WebCore::CSSProperty>(WebCore::CSSProperty*) at OwnPtrCommon.h:59
[0x734a1e]                  > WTF::PassRefPtr<WebCore::CSSPrimitiveValue> WebCore::CSSPrimitiveValue::create<WTF::PassRefPtr<WebCore::Pair> >(WTF::PassRefPtr<WebCore::Pair>) at CSSPrimitiveValue.h:121
[0x7354ce]                    > pair at stl_pair.h:68
[0x5335f8]                      > void WTF::removeIterator<WTF::String, std::pair<WTF::String, WebCore::AccessibilityRole>, WTF::PairFirstExtractor<std::pair<WTF::String, WebCore::AccessibilityRole> >, WTF::CaseFoldingHash, WTF::PairHashTraits<WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AccessibilityRole> >, WTF::HashTraits<WTF::String> >(WTF::HashTableConstIterator<WTF::String, std::pair<WTF::String, WebCore::AccessibilityRole>, WTF::PairFirstExtractor<std::pair<WTF::String, WebCore::AccessibilityRole> >, WTF::CaseFoldingHash, WTF::PairHashTraits<WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AccessibilityRole> >, WTF::HashTraits<WTF::String> >*) at HashTable.h:1088
[0x735756]                      > void WTF::removeIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >(WTF::HashTableConstIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >*) at HashTable.h:1100
[0x54fd95]                        > WebCore::FloatRect::location() const at FloatRect.h:85
[0x735e09]                      > void WTF::removeIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >(WTF::HashTableConstIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >*) at HashTable.h:1098
[0x734504]                        > ~VectorBuffer at Vector.h:367
[0x5335f8]                        > void WTF::removeIterator<WTF::String, std::pair<WTF::String, WebCore::AccessibilityRole>, WTF::PairFirstExtractor<std::pair<WTF::String, WebCore::AccessibilityRole> >, WTF::CaseFoldingHash, WTF::PairHashTraits<WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AccessibilityRole> >, WTF::HashTraits<WTF::String> >(WTF::HashTableConstIterator<WTF::String, std::pair<WTF::String, WebCore::AccessibilityRole>, WTF::PairFirstExtractor<std::pair<WTF::String, WebCore::AccessibilityRole> >, WTF::CaseFoldingHash, WTF::PairHashTraits<WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AccessibilityRole> >, WTF::HashTraits<WTF::String> >*) at HashTable.h:1088
[0x7360fe]                        > WTF::HashSet<WebCore::CSSParserValueList*, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >::remove(WTF::HashTableConstIteratorAdapter<WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >, WebCore::CSSParserValueList*>) at HashSet.h:195
[0x7364ce]                          > void WTF::removeIterator<WebCore::CSSParserFunction*, WebCore::CSSParserFunction*, WTF::IdentityExtractor<WebCore::CSSParserFunction*>, WTF::PtrHash<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*> >(WTF::HashTableConstIterator<WebCore::CSSParserFunction*, WebCore::CSSParserFunction*, WTF::IdentityExtractor<WebCore::CSSParserFunction*>, WTF::PtrHash<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*> >*) at HashTable.h:1096
[0x733cfa]                      > void WTF::deleteOwnedPtr<WebCore::MediaQueryExp>(WebCore::MediaQueryExp*) at OwnPtrCommon.h:59
[0x735e78]                      > void WTF::removeIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >(WTF::HashTableConstIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >*) at HashTable.h:1101
[0x691d00]                        > void WTF::derefIfNotNull<WebCore::Rect>(WebCore::Rect*) at PassRefPtr.h:59
[0x735129]                      > void WTF::removeIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >(WTF::HashTableConstIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >*) at HashTable.h:1104
[0x735756]                      > void WTF::removeIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >(WTF::HashTableConstIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >*) at HashTable.h:1100
[0x54fd95]                        > WebCore::FloatRect::location() const at FloatRect.h:85
[0x4cb977]                      > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:364
[0x735e09]                      > void WTF::removeIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >(WTF::HashTableConstIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >*) at HashTable.h:1098
[0x734504]                        > ~VectorBuffer at Vector.h:367
[0x5335f8]                        > void WTF::removeIterator<WTF::String, std::pair<WTF::String, WebCore::AccessibilityRole>, WTF::PairFirstExtractor<std::pair<WTF::String, WebCore::AccessibilityRole> >, WTF::CaseFoldingHash, WTF::PairHashTraits<WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AccessibilityRole> >, WTF::HashTraits<WTF::String> >(WTF::HashTableConstIterator<WTF::String, std::pair<WTF::String, WebCore::AccessibilityRole>, WTF::PairFirstExtractor<std::pair<WTF::String, WebCore::AccessibilityRole> >, WTF::CaseFoldingHash, WTF::PairHashTraits<WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AccessibilityRole> >, WTF::HashTraits<WTF::String> >*) at HashTable.h:1088
[0x7360fe]                        > WTF::HashSet<WebCore::CSSParserValueList*, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >::remove(WTF::HashTableConstIteratorAdapter<WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >, WebCore::CSSParserValueList*>) at HashSet.h:195
[0x7364ce]                          > void WTF::removeIterator<WebCore::CSSParserFunction*, WebCore::CSSParserFunction*, WTF::IdentityExtractor<WebCore::CSSParserFunction*>, WTF::PtrHash<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*> >(WTF::HashTableConstIterator<WebCore::CSSParserFunction*, WebCore::CSSParserFunction*, WTF::IdentityExtractor<WebCore::CSSParserFunction*>, WTF::PtrHash<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*> >*) at HashTable.h:1096
[0x733c4a]                    > WTF::HashTable<WebCore::CSSParserFunction*, WebCore::CSSParserFunction*, WTF::IdentityExtractor<WebCore::CSSParserFunction*>, WTF::PtrHash<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*>, WTF::HashTraits<WebCore::CSSParserFunction*> >::invalidateIterators() at HashTable.h:1062
[0x4d4570]                      > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                        > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                      > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                        > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x735616]                    > HashTableConstIterator at HashTable.h:141
[0x735f2c]                      > void WTF::removeIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >(WTF::HashTableConstIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >*) at HashTable.h:1106
[0x73615f]                        > WTF::HashSet<WebCore::CSSParserValueList*, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >::remove(WTF::HashTableConstIteratorAdapter<WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >, WebCore::CSSParserValueList*>) at HashSet.h:198
[0x7361a2]                        > void WTF::deleteOwnedPtr<WebCore::CSSParserValueList>(WebCore::CSSParserValueList*) at OwnPtrCommon.h:55
[0x715db2]                          > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3526
[0x716026]                            > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                              > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x733d3c]                        > void WTF::deleteOwnedPtr<WTF::Vector<WTF::OwnPtr<WebCore::MediaQueryExp>, 0u> >(WTF::Vector<WTF::OwnPtr<WebCore::MediaQueryExp>, 0u>*) at OwnPtrCommon.h:59
[0x716262]                          > WebCore::CSSParser::parseShape(int, bool) at CSSParser.cpp:3574
[0x715c04]                            > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x735052]                        > void WTF::removeIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >(WTF::HashTableConstIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >*) at HashTable.h:1098
[0x735052]                    > void WTF::removeIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >(WTF::HashTableConstIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >*) at HashTable.h:1098
[0x7356a2]                    > void WTF::removeIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >(WTF::HashTableConstIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >*) at HashTable.h:1095
[0x4da8c3]                      > webkit_dom_html_options_collection_init at WebKitDOMHTMLOptionsCollection.cpp:175
[0x4d69ca]                        > webkit_dom_html_object_element_class_init at WebKitDOMHTMLObjectElement.cpp:817
[0x7356f7]                    > void WTF::removeIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >(WTF::HashTableConstIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >*) at HashTable.h:1096
[0x735129]                      > void WTF::removeIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >(WTF::HashTableConstIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >*) at HashTable.h:1104
[0x5335f8]                      > void WTF::removeIterator<WTF::String, std::pair<WTF::String, WebCore::AccessibilityRole>, WTF::PairFirstExtractor<std::pair<WTF::String, WebCore::AccessibilityRole> >, WTF::CaseFoldingHash, WTF::PairHashTraits<WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AccessibilityRole> >, WTF::HashTraits<WTF::String> >(WTF::HashTableConstIterator<WTF::String, std::pair<WTF::String, WebCore::AccessibilityRole>, WTF::PairFirstExtractor<std::pair<WTF::String, WebCore::AccessibilityRole> >, WTF::CaseFoldingHash, WTF::PairHashTraits<WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AccessibilityRole> >, WTF::HashTraits<WTF::String> >*) at HashTable.h:1088
[0x735884]                    > void WTF::removeIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >(WTF::HashTableConstIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >*) at HashTable.h:1108
[0x7358dc]                    > void WTF::removeIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >(WTF::HashTableConstIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >*) at HashTable.h:1114
[0x735052]                    > void WTF::removeIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >(WTF::HashTableConstIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >*) at HashTable.h:1098
[0x7347c0]                    > WTF::Vector<int, 0u>::end() at Vector.h:554
[0x7351d4]                      > void WTF::removeIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >(WTF::HashTableConstIterator<WebCore::CSSParserSelector*, WebCore::CSSParserSelector*, WTF::IdentityExtractor<WebCore::CSSParserSelector*>, WTF::PtrHash<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*>, WTF::HashTraits<WebCore::CSSParserSelector*> >*) at HashTable.h:1108
[0x735d32]                        > void WTF::removeIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >(WTF::HashTableConstIterator<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >*) at HashTable.h:1088
[0x7340ff]                          > void WTF::deleteAllValues<WebCore::CSSParserValueList*, WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const>(WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const&) at HashSet.h:219
[0x4d4570]                            > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                              > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                            > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                              > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x7357b4]                    > void WTF::removeIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >(WTF::HashTableConstIterator<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*, WTF::IdentityExtractor<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::PtrHash<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*>, WTF::HashTraits<WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>*> >*) at HashTable.h:1103
[0x736014]                      > WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> >::contains(WebCore::CSSParserValueList* const&) const at HashTable.h:329
[0x733636]                        > WTF::PassRefPtr<WebCore::WebKitCSSKeyframesRule>::leakRef() const at PassRefPtr.h:185
[0x7338a0]                          > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:861
[0x7340ff]                            > void WTF::deleteAllValues<WebCore::CSSParserValueList*, WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const>(WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const&) at HashSet.h:219
[0x4d4570]                              > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                                > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                              > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                                > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x73359a]                    > WTF::PassRefPtr<WebCore::WebKitCSSKeyframeRule>::leakRef() const at PassRefPtr.h:185
[0x733852]                      > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:859
[0x733e4c]                        > WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>::shrink(unsigned int) at Vector.h:859
[0x4d4570]                          > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                            > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                          > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                            > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x734db8]                  > pair at stl_pair.h:68
[0x733df8]                    > ~VectorBuffer at Vector.h:367
[0x733636]                      > WTF::PassRefPtr<WebCore::WebKitCSSKeyframesRule>::leakRef() const at PassRefPtr.h:185
[0x7338a0]                        > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:861
[0x7340ff]                          > void WTF::deleteAllValues<WebCore::CSSParserValueList*, WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const>(WTF::HashTable<WebCore::CSSParserValueList*, WebCore::CSSParserValueList*, WTF::IdentityExtractor<WebCore::CSSParserValueList*>, WTF::PtrHash<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*>, WTF::HashTraits<WebCore::CSSParserValueList*> > const&) at HashSet.h:219
[0x4d4570]                            > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                              > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                            > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                              > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x7343ca]                  > void WTF::deleteOwnedPtr<WebCore::CSSProperty>(WebCore::CSSProperty*) at OwnPtrCommon.h:55
[0x73359a]                    > WTF::PassRefPtr<WebCore::WebKitCSSKeyframeRule>::leakRef() const at PassRefPtr.h:185
[0x733852]                      > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:859
[0x733e4c]                        > WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>::shrink(unsigned int) at Vector.h:859
[0x4d4570]                          > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                            > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                          > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                            > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x73368a]              > WTF::PassRefPtr<WebCore::WebKitCSSKeyframesRule>::leakRef() const at PassRefPtr.h:190
[0x7335e8]                > PassRefPtr at PassRefPtr.h:107
[0x73359a]                  > WTF::PassRefPtr<WebCore::WebKitCSSKeyframeRule>::leakRef() const at PassRefPtr.h:185
[0x733852]                    > WTF::Vector<WTF::RefPtr<WebCore::CSSRuleList>, 0u>::shrink(unsigned int) at Vector.h:859
[0x733e4c]                      > WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>::shrink(unsigned int) at Vector.h:859
[0x4d4570]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:244
[0x732a12]                          > PassRefPtr at PassRefPtr.h:107
[0x4d45c8]                        > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                          > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x4d45c8]              > webkit_dom_html_object_element_get_declare at WebKitDOMHTMLObjectElement.cpp:248
[0x732b5c]                > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x73180a]            > void WTF::Vector<WTF::RefPtr<WebCore::StyleBase>, 0u>::append<WTF::PassRefPtr<WebCore::WebKitCSSKeyframeRule> >(WTF::PassRefPtr<WebCore::WebKitCSSKeyframeRule> const&) at Vector.h:978
[0x731798]              > WTF::RefPtr<WebCore::WebKitCSSKeyframeRule>::release() at RefPtr.h:63
[0x731a24]                > void WTF::placeByteAsHexCompressIfPossible<WTF::StringBuffer>(unsigned char, WTF::StringBuffer&, unsigned int&, WTF::HexConversionMode) at HexNumber.h:57
[0x731a24]              > void WTF::placeByteAsHexCompressIfPossible<WTF::StringBuffer>(unsigned char, WTF::StringBuffer&, unsigned int&, WTF::HexConversionMode) at HexNumber.h:57
[0x731a9e]              > WTF::Vector<WebCore::CSSGradientColorStop, 0u>::expandCapacity(unsigned int, WebCore::CSSGradientColorStop const*) at Vector.h:803
[0x213bf6e]  > ??
??:0
[0x213beed]    > ??
??:0
[0x10f8358]      > WTF::HashTable<WebCore::Widget const*, std::pair<WebCore::Widget const*, WebCore::RenderWidget*>, WTF::PairFirstExtractor<std::pair<WebCore::Widget const*, WebCore::RenderWidget*> >, WTF::PtrHash<WebCore::Widget const*>, WTF::PairHashTraits<WTF::HashTraits<WebCore::Widget const*>, WTF::HashTraits<WebCore::RenderWidget*> >, WTF::HashTraits<WebCore::Widget const*> >::reinsert(std::pair<WebCore::Widget const*, WebCore::RenderWidget*>&) at HashTable.h:762
[0x10f8f88]        > RootInlineBox at RootInlineBox.cpp:45
[0x210ecb8]  > ??
??:0
[0x210ec5c]    > ??
??:0
[0x210eafc]      > ??
??:0
[0x21007fd]  > ??
??:0
[0x210074c]    > ??
??:0
[0x1114400]      > .L1207 at RenderStyle.cpp:883
[0x2100a2e]      > ??
??:0
[0x1c61102]        > ??
??:0
[0x7327fd]          > WTF::PassRefPtr<WebCore::CSSFontFaceRule>::leakRef() const at PassRefPtr.h:185
[0x731798]            > WTF::RefPtr<WebCore::WebKitCSSKeyframeRule>::release() at RefPtr.h:63
[0x731a24]              > void WTF::placeByteAsHexCompressIfPossible<WTF::StringBuffer>(unsigned char, WTF::StringBuffer&, unsigned int&, WTF::HexConversionMode) at HexNumber.h:57
[0x20b8d9a]  > ??
??:0
[0x20b8d0f]    > ??
??:0
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x1fbd5bb]  > ??
??:0
[0x1fbd530]    > ??
??:0
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x1dbfb81]  > ??
??:0
[0x1dbfaf6]    > ??
??:0
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x1c9fa7d]  > ??
??:0
[0x1c9f9f2]    > ??
??:0
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x1b1bb33]  > ??
??:0
[0x1b1baa8]    > ??
??:0
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x1adbc05]  > ??
??:0
[0x1adbb7a]    > ??
??:0
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x1a5cd03]  > ??
??:0
[0x1a5cc78]    > ??
??:0
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x19ba38f]  > ??
??:0
[0x19ba304]    > ??
??:0
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x176e237]  > WebCore::JSXPathExpression::createPrototype(JSC::ExecState*, JSC::JSGlobalObject*) at JSXPathExpression.cpp:147
[0x176e1ac]    > JSXPathExpression at JSXPathExpression.cpp:143
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x1649df8]  > ~JSHTMLTableSectionElementPrototype at JSHTMLTableSectionElement.h:58
[0x1649d6d]    > ~JSHTMLTableSectionElement at JSHTMLTableSectionElement.h:32
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x16165ee]  > bool JSC::getStaticValueSlot<WebCore::JSHTMLMetaElementConstructor, WebCore::JSDOMWrapper>(JSC::ExecState*, JSC::HashTable const*, WebCore::JSHTMLMetaElementConstructor*, JSC::Identifier const&, JSC::PropertySlot&) at Lookup.h:273
[0x1616533]    > WebCore::JSHTMLMetaElementConstructor::createStructure(JSC::JSGlobalData&, JSC::JSValue) at JSHTMLMetaElement.cpp:78
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x1288b80]      > ~pair at stl_pair.h:68
[0x1289a24]        > void WTF::removeIterator<WebCore::SVGElement const*, std::pair<WebCore::SVGElement const*, WebCore::SVGElementRareData*>, WTF::PairFirstExtractor<std::pair<WebCore::SVGElement const*, WebCore::SVGElementRareData*> >, WTF::PtrHash<WebCore::SVGElement const*>, WTF::PairHashTraits<WTF::HashTraits<WebCore::SVGElement const*>, WTF::HashTraits<WebCore::SVGElementRareData*> >, WTF::HashTraits<WebCore::SVGElement const*> >(WTF::HashTableConstIterator<WebCore::SVGElement const*, std::pair<WebCore::SVGElement const*, WebCore::SVGElementRareData*>, WTF::PairFirstExtractor<std::pair<WebCore::SVGElement const*, WebCore::SVGElementRareData*> >, WTF::PtrHash<WebCore::SVGElement const*>, WTF::PairHashTraits<WTF::HashTraits<WebCore::SVGElement const*>, WTF::HashTraits<WebCore::SVGElementRareData*> >, WTF::HashTraits<WebCore::SVGElement const*> >*) at HashTable.h:1095
[0x7328f8]          > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x13180bb]  > WebCore::SVGRadialGradientElement::synchronizeCy() at SVGRadialGradientElement.cpp:45
[0x1318030]    > WebCore::SVGRadialGradientElement::cxAnimated() at SVGRadialGradientElement.cpp:44
[0x71c796]      > WebCore::CSSParser::parseDeprecatedGradient(WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:5202
[0x804a4a3]  > ??
??:0
[0x114b844]    > WTF::HashTable<WebCore::RenderObject*, std::pair<WebCore::RenderObject*, WebCore::FilterEffect*>, WTF::PairFirstExtractor<std::pair<WebCore::RenderObject*, WebCore::FilterEffect*> >, WTF::PtrHash<WebCore::RenderObject*>, WTF::PairHashTraits<WTF::HashTraits<WebCore::RenderObject*>, WTF::HashTraits<WebCore::FilterEffect*> >, WTF::HashTraits<WebCore::RenderObject*> >::deallocateTable(std::pair<WebCore::RenderObject*, WebCore::FilterEffect*>*, int) at HashTable.h:896
[0x114bce5]      > WTF::HashTable<WebCore::RenderObject*, std::pair<WebCore::RenderObject*, WebCore::FilterData*>, WTF::PairFirstExtractor<std::pair<WebCore::RenderObject*, WebCore::FilterData*> >, WTF::PtrHash<WebCore::RenderObject*>, WTF::PairHashTraits<WTF::HashTraits<WebCore::RenderObject*>, WTF::HashTraits<WebCore::FilterData*> >, WTF::HashTraits<WebCore::RenderObject*> >::rehash(int) at HashTable.h:938
[0x684664]        > JSC::callRuntimeMethod(JSC::ExecState*) at runtime_method.cpp:94
[0x6845e0]          > JSC::RuntimeMethod::getOwnPropertyDescriptor(JSC::ExecState*, JSC::Identifier const&, JSC::PropertyDescriptor&) at runtime_method.cpp:86
[0x72aa5c]            > WTF::PassRefPtr<WebCore::CSSCursorImageValue> WTF::adoptRef<WebCore::CSSCursorImageValue>(WebCore::CSSCursorImageValue*) at PassRefPtr.h:280
[0x5ed3b2]              > WebCore::JSNode::appendChild(JSC::ExecState*) at JSNodeCustom.cpp:187
[0x716026]                > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                  > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x4cb9c0]                > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:369
[0x72ad9c]              > ~PassRefPtr at PassRefPtr.h:74
[0x72acf4]                > WTF::PassRefPtr<WebCore::CSSInheritedValue> WTF::adoptRef<WebCore::CSSInheritedValue>(WebCore::CSSInheritedValue*) at PassRefPtr.h:277
[0x50b426]                  > webkit_dom_style_media_set_property at WebKitDOMStyleMedia.cpp:107
[0x4d785e]                > webkit_dom_htmlo_list_element_get_property at WebKitDOMHTMLOListElement.cpp:181
[0x4da5a4]                  > webkit_dom_html_options_collection_set_property at WebKitDOMHTMLOptionsCollection.cpp:122
[0x4dc628]                    > WebKit::kit(WebCore::HTMLPreElement*) at WebKitDOMHTMLPreElement.cpp:43
[0x4d74bc]                      > webkit_dom_htmlo_list_element_finalize at WebKitDOMHTMLOListElement.cpp:117
[0x4d7660]                      > webkit_dom_htmlo_list_element_set_property at WebKitDOMHTMLOListElement.cpp:153
[0x731f36]            > void WTF::deleteOwnedPtr<WebCore::CSSParserSelector>(WebCore::CSSParserSelector*) at OwnPtrCommon.h:55
[0x5a1ce9]              > WebCore::WorkerContext::script() at WorkerContext.h:80
[0x716026]                > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                  > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x4cb9c0]                > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:369
[0x7328f8]              > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x731e98]              > WTF::Vector<WebCore::CSSParserValue, 4u>::at(unsigned int) at Vector.h:538
[0x7334e1]              > WTF::PassRefPtr<WebCore::Pair>::leakRef() const at PassRefPtr.h:185
[0x4cc985]            > webkit_dom_html_media_element_pause at WebKitDOMHTMLMediaElement.cpp:99
[0x4ceb6e]              > webkit_dom_html_media_element_set_property at WebKitDOMHTMLMediaElement.cpp:615
[0x4cebe6]              > webkit_dom_html_media_element_get_property at WebKitDOMHTMLMediaElement.cpp:624
[0x4cf870]                > webkit_dom_html_media_element_class_init at WebKitDOMHTMLMediaElement.cpp:931
[0x4cfd24]                  > WebCore::MediaError* WTF::getPtr<WebCore::MediaError>(WTF::PassRefPtr<WebCore::MediaError> const&) at PassRefPtr.h:293
[0x715db2]                  > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3526
[0x716026]                    > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                      > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x4cfd8e]                  > PassRefPtr at PassRefPtr.h:67
[0x4cfd24]                    > WebCore::MediaError* WTF::getPtr<WebCore::MediaError>(WTF::PassRefPtr<WebCore::MediaError> const&) at PassRefPtr.h:293
[0x4cfed2]                    > WTF::PassRefPtr<WebCore::TimeRanges>::get() const at PassRefPtr.h:78
[0x4cb977]                  > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:364
[0x73781e]                  > WTF::Vector<WTF::OwnPtr<WebCore::CSSParserSelector>, 0u>::size() const at Vector.h:531
[0x67e0ca]                    > WTF::HashTable<JSC::Bindings::RootObject*, std::pair<JSC::Bindings::RootObject*, WTF::HashMap<JSC::JSObject*, NPObject*, WTF::PtrHash<JSC::JSObject*>, WTF::HashTraits<JSC::JSObject*>, WTF::HashTraits<NPObject*> > >, WTF::PairFirstExtractor<std::pair<JSC::Bindings::RootObject*, WTF::HashMap<JSC::JSObject*, NPObject*, WTF::PtrHash<JSC::JSObject*>, WTF::HashTraits<JSC::JSObject*>, WTF::HashTraits<NPObject*> > > >, WTF::PtrHash<JSC::Bindings::RootObject*>, WTF::PairHashTraits<WTF::HashTraits<JSC::Bindings::RootObject*>, WTF::HashTraits<WTF::HashMap<JSC::JSObject*, NPObject*, WTF::PtrHash<JSC::JSObject*>, WTF::HashTraits<JSC::JSObject*>, WTF::HashTraits<NPObject*> > > >, WTF::HashTraits<JSC::Bindings::RootObject*> >::isDeletedBucket(std::pair<JSC::Bindings::RootObject*, WTF::HashMap<JSC::JSObject*, NPObject*, WTF::PtrHash<JSC::JSObject*>, WTF::HashTraits<JSC::JSObject*>, WTF::HashTraits<NPObject*> > > const&) at HashTable.h:342
[0x716026]                      > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                        > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x4cb9c0]                      > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:369
[0x67e3b4]                    > WTF::HashTable<JSC::Bindings::RootObject::InvalidationCallback*, JSC::Bindings::RootObject::InvalidationCallback*, WTF::IdentityExtractor<JSC::Bindings::RootObject::InvalidationCallback*>, WTF::PtrHash<JSC::Bindings::RootObject::InvalidationCallback*>, WTF::HashTraits<JSC::Bindings::RootObject::InvalidationCallback*>, WTF::HashTraits<JSC::Bindings::RootObject::InvalidationCallback*> >::internalCheckTableConsistency() at HashTable.h:358
[0x67e318]                      > WTF::HashTable<JSC::Bindings::RootObject::InvalidationCallback*, JSC::Bindings::RootObject::InvalidationCallback*, WTF::IdentityExtractor<JSC::Bindings::RootObject::InvalidationCallback*>, WTF::PtrHash<JSC::Bindings::RootObject::InvalidationCallback*>, WTF::HashTraits<JSC::Bindings::RootObject::InvalidationCallback*>, WTF::HashTraits<JSC::Bindings::RootObject::InvalidationCallback*> >::expand() at HashTable.h:900
[0x67ed8a]                        > WTF::HashTableConstIterator<JSC::JSObject*, std::pair<JSC::JSObject*, NPObject*>, WTF::PairFirstExtractor<std::pair<JSC::JSObject*, NPObject*> >, WTF::PtrHash<JSC::JSObject*>, WTF::PairHashTraits<WTF::HashTraits<JSC::JSObject*>, WTF::HashTraits<NPObject*> >, WTF::HashTraits<JSC::JSObject*> >::checkValidity() const at HashTable.h:190
[0x7328f8]                          > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x67e366]                      > WTF::HashTable<JSC::Bindings::RootObject::InvalidationCallback*, JSC::Bindings::RootObject::InvalidationCallback*, WTF::IdentityExtractor<JSC::Bindings::RootObject::InvalidationCallback*>, WTF::PtrHash<JSC::Bindings::RootObject::InvalidationCallback*>, WTF::HashTraits<JSC::Bindings::RootObject::InvalidationCallback*>, WTF::HashTraits<JSC::Bindings::RootObject::InvalidationCallback*> >::expand() at HashTable.h:908
[0x67ee16]                        > WTF::HashTableConstIterator<JSC::JSObject*, std::pair<JSC::JSObject*, NPObject*>, WTF::PairFirstExtractor<std::pair<JSC::JSObject*, NPObject*> >, WTF::PtrHash<JSC::JSObject*>, WTF::PairHashTraits<WTF::HashTraits<JSC::JSObject*>, WTF::HashTraits<NPObject*> >, WTF::HashTraits<JSC::JSObject*> >::skipEmptyBuckets() at HashTable.h:107
[0x7328f8]                          > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x7379c4]                    > WTF::PassRefPtr<WebCore::CSSPageRule> const* WTF::Vector<WTF::RefPtr<WebCore::StyleBase>, 0u>::expandCapacity<WTF::PassRefPtr<WebCore::CSSPageRule> const>(unsigned int, WTF::PassRefPtr<WebCore::CSSPageRule> const*) at Vector.h:839
[0x69a538]                      > .L2020 at CSSComputedStyleDeclaration.cpp:875
[0x71f1c4]                      > WebCore::CSSParser::parseLineBoxContain(bool) at CSSParser.cpp:5893
[0x52d900]                      > WebCore::renderListItemContainerForNode(WebCore::Node*) at AccessibilityObject.cpp:410
[0x52d860]                        > WebCore::replacedNodeNeedsCharacter(WebCore::Node*) at AccessibilityObject.cpp:398
[0x696de0]            > WebCore::computedTransform(WebCore::RenderObject*, WebCore::RenderStyle const*, WebCore::CSSPrimitiveValueCache*) at CSSComputedStyleDeclaration.cpp:494
[0x587878]              > PassRefPtr at PassRefPtr.h:67
[0x687340]              > RootObject at runtime_root.cpp:87
[0x684e70]                > VectorBuffer at Vector.h:358
[0x684df6]                  > WTF::RefPtr<JSC::Bindings::Instance>::operator->() const at RefPtr.h:66
[0x684d98]                    > WTF::RefPtr<JSC::Bindings::Instance>::operator=(JSC::Bindings::Instance*) at RefPtr.h:136
[0x4ecf3c]                      > webkit_dom_html_table_row_element_get_v_align at WebKitDOMHTMLTableRowElement.cpp:213
[0x4cec3a]                        > webkit_dom_html_media_element_get_property at WebKitDOMHTMLMediaElement.cpp:629
[0x4ee18a]                        > webkit_dom_html_table_section_element_get_align at WebKitDOMHTMLTableSectionElement.cpp:98
[0x4ecf3c]                    > webkit_dom_html_table_row_element_get_v_align at WebKitDOMHTMLTableRowElement.cpp:213
[0x4cec3a]                      > webkit_dom_html_media_element_get_property at WebKitDOMHTMLMediaElement.cpp:629
[0x4ee18a]                      > webkit_dom_html_table_section_element_get_align at WebKitDOMHTMLTableSectionElement.cpp:98
[0x4cd088]                  > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                    > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                    > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                      > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x4cd088]                  > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                    > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                    > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                      > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x4cd088]                  > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                    > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                    > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                      > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x4cd088]                  > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                    > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                    > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                      > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x5851aa]              > WTF::HashTable<WebCore::CSSValue*, std::pair<WebCore::CSSValue*, void*>, WTF::PairFirstExtractor<std::pair<WebCore::CSSValue*, void*> >, WTF::PtrHash<WebCore::CSSValue*>, WTF::PairHashTraits<WTF::HashTraits<WebCore::CSSValue*>, WTF::HashTraits<void*> >, WTF::HashTraits<WebCore::CSSValue*> >::internalCheckTableConsistencyExceptSize() at HashTable.h:357
[0x587878]              > PassRefPtr at PassRefPtr.h:67
[0x69b4b0]              > .L2035 at CSSComputedStyleDeclaration.cpp:972
[0x684e70]                > VectorBuffer at Vector.h:358
[0x684df6]                  > WTF::RefPtr<JSC::Bindings::Instance>::operator->() const at RefPtr.h:66
[0x684d98]                    > WTF::RefPtr<JSC::Bindings::Instance>::operator=(JSC::Bindings::Instance*) at RefPtr.h:136
[0x4ecf3c]                      > webkit_dom_html_table_row_element_get_v_align at WebKitDOMHTMLTableRowElement.cpp:213
[0x4cec3a]                        > webkit_dom_html_media_element_get_property at WebKitDOMHTMLMediaElement.cpp:629
[0x4ee18a]                        > webkit_dom_html_table_section_element_get_align at WebKitDOMHTMLTableSectionElement.cpp:98
[0x4ecf3c]                    > webkit_dom_html_table_row_element_get_v_align at WebKitDOMHTMLTableRowElement.cpp:213
[0x4cec3a]                      > webkit_dom_html_media_element_get_property at WebKitDOMHTMLMediaElement.cpp:629
[0x4ee18a]                      > webkit_dom_html_table_section_element_get_align at WebKitDOMHTMLTableSectionElement.cpp:98
[0x4cd088]                  > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                    > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                    > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                      > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x4cd088]                  > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                    > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                    > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                      > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x4cd088]                  > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                    > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                    > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                      > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x4cd088]                  > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                    > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                    > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                      > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x69c39c]                > .L2140 at CSSComputedStyleDeclaration.cpp:1042
[0x5851aa]              > WTF::HashTable<WebCore::CSSValue*, std::pair<WebCore::CSSValue*, void*>, WTF::PairFirstExtractor<std::pair<WebCore::CSSValue*, void*> >, WTF::PtrHash<WebCore::CSSValue*>, WTF::PairHashTraits<WTF::HashTraits<WebCore::CSSValue*>, WTF::HashTraits<void*> >, WTF::HashTraits<WebCore::CSSValue*> >::internalCheckTableConsistencyExceptSize() at HashTable.h:357
[0x587878]              > PassRefPtr at PassRefPtr.h:67
[0x69aa3c]              > .L2014 at CSSComputedStyleDeclaration.cpp:917
[0x684d98]                > WTF::RefPtr<JSC::Bindings::Instance>::operator=(JSC::Bindings::Instance*) at RefPtr.h:136
[0x4ecf3c]                  > webkit_dom_html_table_row_element_get_v_align at WebKitDOMHTMLTableRowElement.cpp:213
[0x4cec3a]                    > webkit_dom_html_media_element_get_property at WebKitDOMHTMLMediaElement.cpp:629
[0x4ee18a]                    > webkit_dom_html_table_section_element_get_align at WebKitDOMHTMLTableSectionElement.cpp:98
[0x4d78d2]                > webkit_dom_htmlo_list_element_constructed at WebKitDOMHTMLOListElement.cpp:190
[0x4da6fe]                  > webkit_dom_html_options_collection_get_property at WebKitDOMHTMLOptionsCollection.cpp:142
[0x5851aa]              > WTF::HashTable<WebCore::CSSValue*, std::pair<WebCore::CSSValue*, void*>, WTF::PairFirstExtractor<std::pair<WebCore::CSSValue*, void*> >, WTF::PtrHash<WebCore::CSSValue*>, WTF::PairHashTraits<WTF::HashTraits<WebCore::CSSValue*>, WTF::HashTraits<void*> >, WTF::HashTraits<WebCore::CSSValue*> >::internalCheckTableConsistencyExceptSize() at HashTable.h:357
[0x587878]              > PassRefPtr at PassRefPtr.h:67
[0x694040]              > WTF::IdentityHashTranslator<WebCore::RenderObject*, std::pair<WebCore::RenderObject*, std::pair<WebCore::IntSize, int> >, WTF::PtrHash<WebCore::RenderObject*> >::hash(WebCore::RenderObject* const&) at HashTable.h:281
[0x684f08]                > WTF::Vector<JSC::Bindings::Method*, 0u>::begin() const at Vector.h:555
[0x684e70]                  > VectorBuffer at Vector.h:358
[0x684df6]                    > WTF::RefPtr<JSC::Bindings::Instance>::operator->() const at RefPtr.h:66
[0x684d98]                      > WTF::RefPtr<JSC::Bindings::Instance>::operator=(JSC::Bindings::Instance*) at RefPtr.h:136
[0x4ecf3c]                        > webkit_dom_html_table_row_element_get_v_align at WebKitDOMHTMLTableRowElement.cpp:213
[0x4cec3a]                          > webkit_dom_html_media_element_get_property at WebKitDOMHTMLMediaElement.cpp:629
[0x4ee18a]                          > webkit_dom_html_table_section_element_get_align at WebKitDOMHTMLTableSectionElement.cpp:98
[0x4ecf3c]                      > webkit_dom_html_table_row_element_get_v_align at WebKitDOMHTMLTableRowElement.cpp:213
[0x4cec3a]                        > webkit_dom_html_media_element_get_property at WebKitDOMHTMLMediaElement.cpp:629
[0x4ee18a]                        > webkit_dom_html_table_section_element_get_align at WebKitDOMHTMLTableSectionElement.cpp:98
[0x4cd088]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                      > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                      > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                      > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                        > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x4cd088]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                      > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                      > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                      > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                        > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x4cd088]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                      > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                      > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                      > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                        > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x4cd088]                    > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:183
[0x4cd046]                      > webkit_dom_html_media_element_get_buffered at WebKitDOMHTMLMediaElement.cpp:181
[0x4ccc1c]                      > webkit_dom_html_media_element_set_src at WebKitDOMHTMLMediaElement.cpp:130
[0x4ccfea]                      > webkit_dom_html_media_element_set_preload at WebKitDOMHTMLMediaElement.cpp:176
[0x4ccb62]                        > webkit_dom_html_media_element_get_src at WebKitDOMHTMLMediaElement.cpp:121
[0x696868]                > WebCore::computedTransform(WebCore::RenderObject*, WebCore::RenderStyle const*, WebCore::CSSPrimitiveValueCache*) at CSSComputedStyleDeclaration.cpp:478
[0x696826]                  > WebCore::computedTransform(WebCore::RenderObject*, WebCore::RenderStyle const*, WebCore::CSSPrimitiveValueCache*) at CSSComputedStyleDeclaration.cpp:478
[0x696b72]                  > WebCore::computedTransform(WebCore::RenderObject*, WebCore::RenderStyle const*, WebCore::CSSPrimitiveValueCache*) at CSSComputedStyleDeclaration.cpp:488
[0x4ed2d6]                > webkit_dom_html_table_row_element_finalize at WebKitDOMHTMLTableRowElement.cpp:269
[0x4ed060]                  > webkit_dom_html_table_row_element_set_v_align at WebKitDOMHTMLTableRowElement.cpp:224
[0x4ee3cc]                  > webkit_dom_html_table_section_element_set_ch at WebKitDOMHTMLTableSectionElement.cpp:125
[0x5851aa]              > WTF::HashTable<WebCore::CSSValue*, std::pair<WebCore::CSSValue*, void*>, WTF::PairFirstExtractor<std::pair<WebCore::CSSValue*, void*> >, WTF::PtrHash<WebCore::CSSValue*>, WTF::PairHashTraits<WTF::HashTraits<WebCore::CSSValue*>, WTF::HashTraits<void*> >, WTF::HashTraits<WebCore::CSSValue*> >::internalCheckTableConsistencyExceptSize() at HashTable.h:357
[0x5a1ce9]            > WebCore::WorkerContext::script() at WorkerContext.h:80
[0x716026]              > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x4cb9c0]              > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:369
[0x7328f8]            > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x70c004]            > .L1031 at CSSParser.cpp:1025
[0x70bb0c]              > .L968 at CSSParser.cpp:890
[0x70ba97]                > .L973 at CSSParser.cpp:870
[0x70ba4c]                  > .L997 at CSSParser.cpp:855
[0x6659c4]                  > WTF::PairFirstExtractor<std::pair<NPClass*, JSC::Bindings::CClass*> >::extract(std::pair<NPClass*, JSC::Bindings::CClass*> const&) at HashMap.h:113
[0x64ac49]                    > CachedString at SerializedScriptValue.cpp:799
[0x70aaf4]                      > WebCore::CSSParser::parseDeclaration(WebCore::CSSMutableStyleDeclaration*, WTF::String const&, WTF::RefPtr<WebCore::CSSStyleSourceData>*) at CSSParser.cpp:573
[0x70aea9]                  > WebCore::CSSParser::rollbackLastProperties(int) at CSSParser.cpp:623
[0x70ac79]                    > WebCore::CSSParser::parseMediaQuery(WebCore::MediaList*, WTF::String const&) at CSSParser.cpp:596
[0x70ac1f]                    > WebCore::CSSParser::parseMediaQuery(WebCore::MediaList*, WTF::String const&) at CSSParser.cpp:592
[0x70ab64]                      > WebCore::CSSParser::parseDeclaration(WebCore::CSSMutableStyleDeclaration*, WTF::String const&, WTF::RefPtr<WebCore::CSSStyleSourceData>*) at CSSParser.cpp:580
[0x5f6835]                  > WTF::PassRefPtr<WebCore::JSSQLStatementCallback> WTF::adoptRef<WebCore::JSSQLStatementCallback>(WebCore::JSSQLStatementCallback*) at PassRefPtr.h:280
[0x70ba4c]                > .L997 at CSSParser.cpp:855
[0x5a1b74]            > JSC::JSGlobalObject::hasOwnPropertyForWrite(JSC::ExecState*, JSC::Identifier const&) at JSGlobalObject.h:313
[0x5a171c]              > JSGlobalObject at JSGlobalObject.h:147
[0x5a1ce9]                > WebCore::WorkerContext::script() at WorkerContext.h:80
[0x716026]                  > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                    > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x4cb9c0]                  > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:369
[0x7328f8]                > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x716bec]        > WebCore::CSSParser::parseFont(bool) at CSSParser.cpp:3694
[0x7327fd]          > WTF::PassRefPtr<WebCore::CSSFontFaceRule>::leakRef() const at PassRefPtr.h:185
[0x731798]            > WTF::RefPtr<WebCore::WebKitCSSKeyframeRule>::release() at RefPtr.h:63
[0x731a24]              > void WTF::placeByteAsHexCompressIfPossible<WTF::StringBuffer>(unsigned char, WTF::StringBuffer&, unsigned int&, WTF::HexConversionMode) at HexNumber.h:57
[0x716ab0]          > WebCore::CSSParser::parseFont(bool) at CSSParser.cpp:3685
[0x5a1ce9]            > WebCore::WorkerContext::script() at WorkerContext.h:80
[0x716026]              > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x4cb9c0]              > webkit_dom_html_marquee_element_set_property at WebKitDOMHTMLMarqueeElement.cpp:369
[0x7328f8]            > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x7169bc]          > WebCore::CSSParser::parseFont(bool) at CSSParser.cpp:3669
[0x213951c]        > ??
??:0
[0x1c520fb]        > ??
??:0
[0x1c5190d]          > ??
??:0
[0x71728d]            > WebCore::CSSParser::parseFontFamily() at CSSParser.cpp:3757
[0x7327fd]              > WTF::PassRefPtr<WebCore::CSSFontFaceRule>::leakRef() const at PassRefPtr.h:185
[0x731798]                > WTF::RefPtr<WebCore::WebKitCSSKeyframeRule>::release() at RefPtr.h:63
[0x731a24]                  > void WTF::placeByteAsHexCompressIfPossible<WTF::StringBuffer>(unsigned char, WTF::StringBuffer&, unsigned int&, WTF::HexConversionMode) at HexNumber.h:57
[0x1c53318]            > ??
??:0
[0x716026]              > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x110b6f4]              > ~ContentData at ContentData.h:44
[0x1c528c4]            > ??
??:0
[0x1c53382]              > ??
??:0
[0x7328f8]                > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x1c5340d]            > ??
??:0
[0x716026]              > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x110b6f4]              > ~ContentData at ContentData.h:44
[0x1c52912]            > ??
??:0
[0x1c53478]              > ??
??:0
[0x7328f8]                > WTF::PassRefPtr<WebCore::CSSFontFaceSrcValue>::leakRef() const at PassRefPtr.h:185
[0x1c4ca2c]            > ??
??:0
[0x1c514cb]              > ??
??:0
[0x1c51434]                > ??
??:0
[0x1c52a4a]                > ??
??:0
[0x1c538a0]                  > ??
??:0
[0x1c55614]                    > ??
??:0
[0x1c57448]                      > ??
??:0
[0x1c5748a]                      > ??
??:0
[0x1c525a9]                        > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1c538fa]                  > ??
??:0
[0x1c5133a]                > ??
??:0
[0x1c52a4a]                  > ??
??:0
[0x1c538a0]                    > ??
??:0
[0x1c55614]                      > ??
??:0
[0x1c57448]                        > ??
??:0
[0x1c5748a]                        > ??
??:0
[0x1c525a9]                          > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1a0ffd6]                            > ??
??:0
[0x1c538fa]                    > ??
??:0
[0x1c52b0e]                > ??
??:0
[0x1c53994]                  > ??
??:0
[0x1c557a0]                    > ??
??:0
[0x1c575e6]                      > ??
??:0
[0x1c54da0]                      > ??
??:0
[0x10fda88]                        > HashTableIteratorAdapter at HashTable.h:1136
[0x732a12]                          > PassRefPtr at PassRefPtr.h:107
[0x10fdae0]                        > WTF::HashMap<WebCore::RootInlineBox const*, WebCore::EllipsisBox*, WTF::PtrHash<WebCore::RootInlineBox const*>, WTF::HashTraits<WebCore::RootInlineBox const*>, WTF::HashTraits<WebCore::EllipsisBox*> >::take(WebCore::RootInlineBox const* const&) at HashMap.h:310
[0x732b5c]                          > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x1c57628]                      > ??
??:0
[0x1c58f20]                        > ??
??:0
[0x1c59c92]                          > ??
??:0
[0x1c59cd4]                          > ??
??:0
[0x715db2]                            > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3526
[0x716026]                              > WebCore::CSSParser::parseCounterContent(WebCore::CSSParserValueList*, bool) at CSSParser.cpp:3551
[0x715c04]                                > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x1c54e92]                          > ??
??:0
[0x716262]                            > WebCore::CSSParser::parseShape(int, bool) at CSSParser.cpp:3574
[0x715c04]                              > WebCore::CSSParser::parseAnimationProperty(int, WTF::RefPtr<WebCore::CSSValue>&) at CSSParser.cpp:3281
[0x1c56888]                          > ??
??:0
[0x1c56888]                      > ??
??:0
[0x1c576b4]                      > ??
??:0
[0x1c525a9]                        > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1a0ffd6]                          > ??
??:0
[0x1c57586]                      > ??
??:0
[0x1c5753d]                        > ??
??:0
[0x1c538fa]                        > ??
??:0
[0x1c57837]                      > ??
??:0
[0x1c5788e]                      > ??
??:0
[0x1c56888]                      > ??
??:0
[0x1c5636c]                      > ??
??:0
[0x1c57f9c]                        > ??
??:0
[0x1c594d8]                          > ??
??:0
[0x1c543c6]                            > ??
??:0
[0x10fda88]                              > HashTableIteratorAdapter at HashTable.h:1136
[0x732a12]                                > PassRefPtr at PassRefPtr.h:107
[0x10fdae0]                              > WTF::HashMap<WebCore::RootInlineBox const*, WebCore::EllipsisBox*, WTF::PtrHash<WebCore::RootInlineBox const*>, WTF::HashTraits<WebCore::RootInlineBox const*>, WTF::HashTraits<WebCore::EllipsisBox*> >::take(WebCore::RootInlineBox const* const&) at HashMap.h:310
[0x732b5c]                                > WTF::PassRefPtr<WebCore::CSSInitialValue>::leakRef() const at PassRefPtr.h:185
[0x1c57767]                      > ??
??:0
[0x1c59008]                        > ??
??:0
[0x1c52aba]                          > ??
??:0
[0x1c52eae]                            > ??
??:0
[0x1c543c6]                              > ??
??:0
[0x10fda88]                                > HashTableIteratorAdapter at HashTable.h:1136
[0x732a12]                                  > PassRefPtr at PassRefPtr.h:107
[0x10fdae0]                                > WTF::HashMap<WebCore::RootInlineBox const*, WebCore::EllipsisBox*, WTF::PtrHash<WebCore::RootInlineBox const*>, WTF::HashTraits<WebCore::RootInlineBox const*>, WTF::HashTraits<WebCore::EllipsisBox*> >::take(WebCore::RootInlineBox const* const&) at HashMap. 
신고
Posted by 소혼
jsgamebench에서 webkit/gtk의 callstak

Breakpoint 1, 0x003277b6 in WebKit::ChromeClient::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
(gdb) bt
#0  0x003277b6 in WebKit::ChromeClient::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#1  0x008724d6 in WebCore::Chrome::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#2  0x00938985 in WebCore::ScrollView::repaintContentRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#3  0x008a99b8 in WebCore::FrameView::repaintContentRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#4  0x00a4fdad in WebCore::RenderView::repaintViewRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#5  0x00a0fef1 in WebCore::RenderObject::repaintUsingContainer(WebCore::RenderBoxModelObject*, WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#6  0x00a11964 in WebCore::RenderObject::repaint(bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#7  0x00a0e3e0 in WebCore::RenderObjectChildList::removeChildNode(WebCore::RenderObject*, WebCore::RenderObject*, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#8  0x00a113af in WebCore::RenderObject::removeChild(WebCore::RenderObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#9  0x0099b09c in WebCore::RenderBlock::removeChild(WebCore::RenderObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#10 0x00a11082 in WebCore::RenderObject::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#11 0x009c08d1 in WebCore::RenderBoxModelObject::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#12 0x009b7e20 in WebCore::RenderBox::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#13 0x009957eb in WebCore::RenderBlock::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#14 0x005be836 in WebCore::Node::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#15 0x0056dfc1 in WebCore::ContainerNode::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#16 0x005a6f18 in WebCore::Element::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#17 0x0056d459 in WebCore::ContainerNode::removeBetween(WebCore::Node*, WebCore::Node*, WebCore::Node*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#18 0x0056fbff in WebCore::ContainerNode::removeChild(WebCore::Node*, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#19 0x005bedc3 in WebCore::Node::removeChild(WebCore::Node*, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#20 0x004790fd in WebCore::JSNode::removeChild(JSC::ExecState*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#21 0x00e4208e in WebCore::jsNodePrototypeFunctionRemoveChild(JSC::ExecState*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#22 0x02b9d341 in ?? ()
#23 0x010a1d84 in JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::ScopeChainNode*, JSC::JSObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#24 0x01134d9e in JSC::evaluate(JSC::ExecState*, JSC::ScopeChainNode*, JSC::SourceCode const&, JSC::JSValue) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#25 0x0049c7ab in WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&, WebCore::DOMWrapperWorld*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#26 0x0049cc7b in WebCore::ScriptController::executeScriptInWorld(WebCore::DOMWrapperWorld*, WTF::String const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#27 0x004981db in WebCore::ScheduledAction::execute(WebCore::Document*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#28 0x0049866b in WebCore::ScheduledAction::execute(WebCore::ScriptExecutionContext*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#29 0x008801ba in WebCore::DOMTimer::fired() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#30 0x0094b72d in WebCore::ThreadTimers::sharedTimerFiredInternal() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#31 0x0094b7a5 in WebCore::ThreadTimers::sharedTimerFired() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#32 0x003015de in WebCore::timeout_cb(void*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#33 0x01c0683c in g_timeout_dispatch (source=0xb63f7110, callback=0xb63fefc0, user_data=0x0) at gmain.c:3877
#34 0x01c05e75 in g_main_dispatch (context=0x807a4b0) at gmain.c:2440
#35 g_main_context_dispatch (context=0x807a4b0) at gmain.c:3013
#36 0x01c0a428 in g_main_context_iterate (context=0x807a4b0, block=<value optimized out>, dispatch=1, self=0x8050520) at gmain.c:3091
#37 0x01c0a967 in g_main_loop_run (loop=0x83a1e38) at gmain.c:3299
#38 0x014e81d9 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#39 0x0804a082 in main ()
(gdb) c
Continuing.
 * (457, 265, 32, 32)

Breakpoint 1, 0x003277b6 in WebKit::ChromeClient::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
(gdb) bt
#0  0x003277b6 in WebKit::ChromeClient::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#1  0x008724d6 in WebCore::Chrome::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#2  0x00938985 in WebCore::ScrollView::repaintContentRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#3  0x008a99b8 in WebCore::FrameView::repaintContentRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#4  0x00a4fdad in WebCore::RenderView::repaintViewRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#5  0x00a0fef1 in WebCore::RenderObject::repaintUsingContainer(WebCore::RenderBoxModelObject*, WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#6  0x00a11964 in WebCore::RenderObject::repaint(bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#7  0x00a0e3e0 in WebCore::RenderObjectChildList::removeChildNode(WebCore::RenderObject*, WebCore::RenderObject*, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#8  0x00a113af in WebCore::RenderObject::removeChild(WebCore::RenderObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#9  0x0099b09c in WebCore::RenderBlock::removeChild(WebCore::RenderObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#10 0x00a11082 in WebCore::RenderObject::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#11 0x00a4120f in WebCore::RenderText::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#12 0x005be836 in WebCore::Node::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#13 0x0056dfab in WebCore::ContainerNode::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#14 0x005a6f18 in WebCore::Element::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#15 0x0056d459 in WebCore::ContainerNode::removeBetween(WebCore::Node*, WebCore::Node*, WebCore::Node*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#16 0x0056fbff in WebCore::ContainerNode::removeChild(WebCore::Node*, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#17 0x0057177c in WebCore::ContainerNode::replaceChild(WTF::PassRefPtr<WebCore::Node>, WebCore::Node*, int&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#18 0x006ec22c in WebCore::replaceChildrenWithFragment(WebCore::HTMLElement*, WTF::PassRefPtr<WebCore::DocumentFragment>, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#19 0x006ec33e in WebCore::HTMLElement::setInnerHTML(WTF::String const&, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#20 0x00d71823 in WebCore::setJSHTMLElementInnerHTML(JSC::ExecState*, JSC::JSObject*, JSC::JSValue) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#21 0x00d73efd in WebCore::JSHTMLElement::put(JSC::ExecState*, JSC::Identifier const&, JSC::JSValue, JSC::PutPropertySlot&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#22 0x00d6ab28 in WebCore::JSHTMLDivElement::put(JSC::ExecState*, JSC::Identifier const&, JSC::JSValue, JSC::PutPropertySlot&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#23 0x010e0096 in cti_op_put_by_id_generic () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#24 0x02bd5719 in ?? ()
#25 0x010a1d84 in JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::ScopeChainNode*, JSC::JSObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#26 0x01134d9e in JSC::evaluate(JSC::ExecState*, JSC::ScopeChainNode*, JSC::SourceCode const&, JSC::JSValue) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#27 0x0049c7ab in WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&, WebCore::DOMWrapperWorld*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#28 0x0049cc7b in WebCore::ScriptController::executeScriptInWorld(WebCore::DOMWrapperWorld*, WTF::String const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#29 0x004981db in WebCore::ScheduledAction::execute(WebCore::Document*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#30 0x0049866b in WebCore::ScheduledAction::execute(WebCore::ScriptExecutionContext*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#31 0x008801ba in WebCore::DOMTimer::fired() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#32 0x0094b72d in WebCore::ThreadTimers::sharedTimerFiredInternal() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#33 0x0094b7a5 in WebCore::ThreadTimers::sharedTimerFired() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#34 0x003015de in WebCore::timeout_cb(void*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#35 0x01c0683c in g_timeout_dispatch (source=0xb63f7110, callback=0xb63fefc0, user_data=0x0) at gmain.c:3877
#36 0x01c05e75 in g_main_dispatch (context=0x807a4b0) at gmain.c:2440
#37 g_main_context_dispatch (context=0x807a4b0) at gmain.c:3013
#38 0x01c0a428 in g_main_context_iterate (context=0x807a4b0, block=<value optimized out>, dispatch=1, self=0x8050520) at gmain.c:3091
#39 0x01c0a967 in g_main_loop_run (loop=0x83a1e38) at gmain.c:3299
#40 0x014e81d9 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#41 0x0804a082 in main ()
(gdb) c
Continuing.
 * (5, 55, 752, 72)

Breakpoint 1, 0x003277b6 in WebKit::ChromeClient::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
(gdb) bt
#0  0x003277b6 in WebKit::ChromeClient::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#1  0x008724d6 in WebCore::Chrome::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#2  0x00938985 in WebCore::ScrollView::repaintContentRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#3  0x008a99b8 in WebCore::FrameView::repaintContentRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#4  0x00a4fdad in WebCore::RenderView::repaintViewRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#5  0x00a0fef1 in WebCore::RenderObject::repaintUsingContainer(WebCore::RenderBoxModelObject*, WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#6  0x00a11964 in WebCore::RenderObject::repaint(bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#7  0x00a0e3e0 in WebCore::RenderObjectChildList::removeChildNode(WebCore::RenderObject*, WebCore::RenderObject*, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#8  0x00a113af in WebCore::RenderObject::removeChild(WebCore::RenderObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#9  0x0099b09c in WebCore::RenderBlock::removeChild(WebCore::RenderObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#10 0x00a11082 in WebCore::RenderObject::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#11 0x00a4120f in WebCore::RenderText::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#12 0x005be836 in WebCore::Node::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#13 0x0056dfc1 in WebCore::ContainerNode::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#14 0x005a6f18 in WebCore::Element::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#15 0x0056dfab in WebCore::ContainerNode::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#16 0x005a6f18 in WebCore::Element::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#17 0x0056d459 in WebCore::ContainerNode::removeBetween(WebCore::Node*, WebCore::Node*, WebCore::Node*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#18 0x0056fbff in WebCore::ContainerNode::removeChild(WebCore::Node*, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#19 0x0057177c in WebCore::ContainerNode::replaceChild(WTF::PassRefPtr<WebCore::Node>, WebCore::Node*, int&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#20 0x006ec22c in WebCore::replaceChildrenWithFragment(WebCore::HTMLElement*, WTF::PassRefPtr<WebCore::DocumentFragment>, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#21 0x006ec33e in WebCore::HTMLElement::setInnerHTML(WTF::String const&, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#22 0x00d71823 in WebCore::setJSHTMLElementInnerHTML(JSC::ExecState*, JSC::JSObject*, JSC::JSValue) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#23 0x00d73efd in WebCore::JSHTMLElement::put(JSC::ExecState*, JSC::Identifier const&, JSC::JSValue, JSC::PutPropertySlot&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#24 0x00d6ab28 in WebCore::JSHTMLDivElement::put(JSC::ExecState*, JSC::Identifier const&, JSC::JSValue, JSC::PutPropertySlot&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#25 0x010e0096 in cti_op_put_by_id_generic () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#26 0x02bd5719 in ?? ()
#27 0x010a1d84 in JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::ScopeChainNode*, JSC::JSObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#28 0x01134d9e in JSC::evaluate(JSC::ExecState*, JSC::ScopeChainNode*, JSC::SourceCode const&, JSC::JSValue) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#29 0x0049c7ab in WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&, WebCore::DOMWrapperWorld*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#30 0x0049cc7b in WebCore::ScriptController::executeScriptInWorld(WebCore::DOMWrapperWorld*, WTF::String const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#31 0x004981db in WebCore::ScheduledAction::execute(WebCore::Document*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#32 0x0049866b in WebCore::ScheduledAction::execute(WebCore::ScriptExecutionContext*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#33 0x008801ba in WebCore::DOMTimer::fired() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#34 0x0094b72d in WebCore::ThreadTimers::sharedTimerFiredInternal() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#35 0x0094b7a5 in WebCore::ThreadTimers::sharedTimerFired() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#36 0x003015de in WebCore::timeout_cb(void*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#37 0x01c0683c in g_timeout_dispatch (source=0xb63f7110, callback=0xb63fefc0, user_data=0x0) at gmain.c:3877
#38 0x01c05e75 in g_main_dispatch (context=0x807a4b0) at gmain.c:2440
#39 g_main_context_dispatch (context=0x807a4b0) at gmain.c:3013
#40 0x01c0a428 in g_main_context_iterate (context=0x807a4b0, block=<value optimized out>, dispatch=1, self=0x8050520) at gmain.c:3091
#41 0x01c0a967 in g_main_loop_run (loop=0x83a1e38) at gmain.c:3299
#42 0x014e81d9 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#43 0x0804a082 in main ()
(gdb) c
Continuing.
 * (5, 55, 752, 72)

Breakpoint 1, 0x003277b6 in WebKit::ChromeClient::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
(gdb) bt
#0  0x003277b6 in WebKit::ChromeClient::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#1  0x008724d6 in WebCore::Chrome::invalidateContentsAndWindow(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#2  0x00938985 in WebCore::ScrollView::repaintContentRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#3  0x008a99b8 in WebCore::FrameView::repaintContentRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#4  0x00a4fdad in WebCore::RenderView::repaintViewRectangle(WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#5  0x00a0fef1 in WebCore::RenderObject::repaintUsingContainer(WebCore::RenderBoxModelObject*, WebCore::IntRect const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#6  0x00a11964 in WebCore::RenderObject::repaint(bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#7  0x00a0e3e0 in WebCore::RenderObjectChildList::removeChildNode(WebCore::RenderObject*, WebCore::RenderObject*, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#8  0x00a113af in WebCore::RenderObject::removeChild(WebCore::RenderObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#9  0x0099b09c in WebCore::RenderBlock::removeChild(WebCore::RenderObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#10 0x00a11082 in WebCore::RenderObject::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#11 0x00a4120f in WebCore::RenderText::destroy() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#12 0x005be836 in WebCore::Node::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#13 0x0056dfab in WebCore::ContainerNode::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#14 0x005a6f18 in WebCore::Element::detach() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#15 0x0056d459 in WebCore::ContainerNode::removeBetween(WebCore::Node*, WebCore::Node*, WebCore::Node*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#16 0x0056fbff in WebCore::ContainerNode::removeChild(WebCore::Node*, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#17 0x0057177c in WebCore::ContainerNode::replaceChild(WTF::PassRefPtr<WebCore::Node>, WebCore::Node*, int&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#18 0x006ec22c in WebCore::replaceChildrenWithFragment(WebCore::HTMLElement*, WTF::PassRefPtr<WebCore::DocumentFragment>, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#19 0x006ec33e in WebCore::HTMLElement::setInnerHTML(WTF::String const&, int&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#20 0x00d71823 in WebCore::setJSHTMLElementInnerHTML(JSC::ExecState*, JSC::JSObject*, JSC::JSValue) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#21 0x00d73efd in WebCore::JSHTMLElement::put(JSC::ExecState*, JSC::Identifier const&, JSC::JSValue, JSC::PutPropertySlot&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#22 0x00d6ab28 in WebCore::JSHTMLDivElement::put(JSC::ExecState*, JSC::Identifier const&, JSC::JSValue, JSC::PutPropertySlot&) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#23 0x010e0096 in cti_op_put_by_id_generic () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#24 0x02bd5719 in ?? ()
#25 0x010a1d84 in JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::ScopeChainNode*, JSC::JSObject*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#26 0x01134d9e in JSC::evaluate(JSC::ExecState*, JSC::ScopeChainNode*, JSC::SourceCode const&, JSC::JSValue) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#27 0x0049c7ab in WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&, WebCore::DOMWrapperWorld*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#28 0x0049cc7b in WebCore::ScriptController::executeScriptInWorld(WebCore::DOMWrapperWorld*, WTF::String const&, bool) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#29 0x004981db in WebCore::ScheduledAction::execute(WebCore::Document*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#30 0x0049866b in WebCore::ScheduledAction::execute(WebCore::ScriptExecutionContext*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#31 0x008801ba in WebCore::DOMTimer::fired() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#32 0x0094b72d in WebCore::ThreadTimers::sharedTimerFiredInternal() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#33 0x0094b7a5 in WebCore::ThreadTimers::sharedTimerFired() () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#34 0x003015de in WebCore::timeout_cb(void*) () from /workspace/webkit/WebKit/WebKitBuild/Release/.libs/libwebkitgtk-1.0.so.0
#35 0x01c0683c in g_timeout_dispatch (source=0xb63f7110, callback=0xb63fefc0, user_data=0x0) at gmain.c:3877
#36 0x01c05e75 in g_main_dispatch (context=0x807a4b0) at gmain.c:2440
#37 g_main_context_dispatch (context=0x807a4b0) at gmain.c:3013
#38 0x01c0a428 in g_main_context_iterate (context=0x807a4b0, block=<value optimized out>, dispatch=1, self=0x8050520) at gmain.c:3091
#39 0x01c0a967 in g_main_loop_run (loop=0x83a1e38) at gmain.c:3299
#40 0x014e81d9 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#41 0x0804a082 in main ()
 
신고
Posted by 소혼
TAG Webkit
http://code.google.com/p/chromium/wiki/LinuxBuildInstructions 를 참조
Ubuntu 10.10에서 설치

1. 준비
위 사이트에서 제시한 패키지중 일부가 맞지 않아 아래와 같이 수정하여 먼저 처리
apt-get install bison fakeroot flex g++ g++-multilib gperf \
  libapache2-mod-php5 libasound2-dev libbz2-dev libcairo2-dev \
  libdbus-glib-1-dev libgconf2-dev libgl1-mesa-dev libglu1-mesa-dev \
  libglib2.0-dev libgtk2.0-dev libjpeg62-dev libnspr4-dev libnss3-dev \
  libpam0g-dev libsqlite3-dev libxslt1-dev libxss-dev \
  mesa-common-dev patch perl pkg-config python \
  rpm subversion libgnome-keyring-dev \
  libcurl4-gnutls-dev libcups2-dev

2. chrome 프로젝트에서 chrome을 빌드하는 방법
1. 코드 및 툴 다운로드 (http://code.google.com/p/chromium/wiki/UsingGit)
- 적절한 폴더 생성 (저의 경우 /workspace/chromium용)
- 툴 다운로드 svn co http://src.chromium.org/svn/trunk/tools/depot_tools
- PATH에 depot_tools 폴더 추가
- 위에서 생성한 폴더에서
 
gclient config http://src.chromium.org/svn/trunk/src 
  - 
gclient sync  실행
* 이 때, 몇가지 옵션이 존재
a) 
WebKit/LayoutTests 를 받지 않기 위해 .gclient를 열고, custom_deps의 괄호 안에 아래 내용 추가.
        
"src/third_party/WebKit/LayoutTests": None, 
  
2.configure
gclient sync를 수행하면 configure되어 있으나, ./build/gyp_chromium 를 이용해 configure 가능
 

3. 빌드
   cd src
   make -j3  <- j3은 3개씩 병렬로 빌드하라는 뜻 

4. 실행 

 

3. webkit source code에서 chrome빌드

http://trac.webkit.org/wiki/Chromium 참고

update-webkit --chromium
build-webkit --chromium
new-run-webkit-tests --chromium

신고
Posted by 소혼
TAG Chrome, 빌드
이전버튼 1 2 이전버튼

티스토리 툴바