| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. |
| 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
| 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
| 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 } | 311 } |
| 312 | 312 |
| 313 static bool canAccessAncestor(const SecurityOrigin* activeSecurityOrigin, Frame*
targetFrame) | 313 static bool canAccessAncestor(const SecurityOrigin* activeSecurityOrigin, Frame*
targetFrame) |
| 314 { | 314 { |
| 315 // targetFrame can be 0 when we're trying to navigate a top-level frame | 315 // targetFrame can be 0 when we're trying to navigate a top-level frame |
| 316 // that has a 0 opener. | 316 // that has a 0 opener. |
| 317 if (!targetFrame) | 317 if (!targetFrame) |
| 318 return false; | 318 return false; |
| 319 | 319 |
| 320 const bool isLocalActiveOrigin = activeSecurityOrigin->isLocal(); | 320 const bool isLocalActiveOrigin = activeSecurityOrigin->isLocal(); |
| 321 for (Frame* ancestorFrame = targetFrame; ancestorFrame; ancestorFrame = ance
storFrame->tree()->parent()) { | 321 for (Frame* ancestorFrame = targetFrame; ancestorFrame; ancestorFrame = ance
storFrame->tree().parent()) { |
| 322 Document* ancestorDocument = ancestorFrame->document(); | 322 Document* ancestorDocument = ancestorFrame->document(); |
| 323 // FIXME: Should be an ASSERT? Frames should alway have documents. | 323 // FIXME: Should be an ASSERT? Frames should alway have documents. |
| 324 if (!ancestorDocument) | 324 if (!ancestorDocument) |
| 325 return true; | 325 return true; |
| 326 | 326 |
| 327 const SecurityOrigin* ancestorSecurityOrigin = ancestorDocument->securit
yOrigin(); | 327 const SecurityOrigin* ancestorSecurityOrigin = ancestorDocument->securit
yOrigin(); |
| 328 if (activeSecurityOrigin->canAccess(ancestorSecurityOrigin)) | 328 if (activeSecurityOrigin->canAccess(ancestorSecurityOrigin)) |
| 329 return true; | 329 return true; |
| 330 | 330 |
| 331 // Allow file URL descendant navigation even when allowFileAccessFromFil
eURLs is false. | 331 // Allow file URL descendant navigation even when allowFileAccessFromFil
eURLs is false. |
| (...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 945 } | 945 } |
| 946 default: | 946 default: |
| 947 if (source->isShadowRoot()) { | 947 if (source->isShadowRoot()) { |
| 948 // ShadowRoot cannot disconnect itself from the host node. | 948 // ShadowRoot cannot disconnect itself from the host node. |
| 949 es.throwUninformativeAndGenericDOMException(HierarchyRequestError); | 949 es.throwUninformativeAndGenericDOMException(HierarchyRequestError); |
| 950 return 0; | 950 return 0; |
| 951 } | 951 } |
| 952 | 952 |
| 953 if (source->isFrameOwnerElement()) { | 953 if (source->isFrameOwnerElement()) { |
| 954 HTMLFrameOwnerElement* frameOwnerElement = toHTMLFrameOwnerElement(s
ource.get()); | 954 HTMLFrameOwnerElement* frameOwnerElement = toHTMLFrameOwnerElement(s
ource.get()); |
| 955 if (frame() && frame()->tree()->isDescendantOf(frameOwnerElement->co
ntentFrame())) { | 955 if (frame() && frame()->tree().isDescendantOf(frameOwnerElement->con
tentFrame())) { |
| 956 es.throwUninformativeAndGenericDOMException(HierarchyRequestErro
r); | 956 es.throwUninformativeAndGenericDOMException(HierarchyRequestErro
r); |
| 957 return 0; | 957 return 0; |
| 958 } | 958 } |
| 959 } | 959 } |
| 960 if (source->parentNode()) { | 960 if (source->parentNode()) { |
| 961 source->parentNode()->removeChild(source.get(), es); | 961 source->parentNode()->removeChild(source.get(), es); |
| 962 if (es.hadException()) | 962 if (es.hadException()) |
| 963 return 0; | 963 return 0; |
| 964 } | 964 } |
| 965 } | 965 } |
| (...skipping 1755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2721 if (!m_frame) | 2721 if (!m_frame) |
| 2722 return false; | 2722 return false; |
| 2723 | 2723 |
| 2724 // FIXME: We shouldn't call this function without a target frame, but | 2724 // FIXME: We shouldn't call this function without a target frame, but |
| 2725 // fast/forms/submit-to-blank-multiple-times.html depends on this function | 2725 // fast/forms/submit-to-blank-multiple-times.html depends on this function |
| 2726 // returning true when supplied with a 0 targetFrame. | 2726 // returning true when supplied with a 0 targetFrame. |
| 2727 if (!targetFrame) | 2727 if (!targetFrame) |
| 2728 return true; | 2728 return true; |
| 2729 | 2729 |
| 2730 // Frame-busting is generally allowed, but blocked for sandboxed frames lack
ing the 'allow-top-navigation' flag. | 2730 // Frame-busting is generally allowed, but blocked for sandboxed frames lack
ing the 'allow-top-navigation' flag. |
| 2731 if (!isSandboxed(SandboxTopNavigation) && targetFrame == m_frame->tree()->to
p()) | 2731 if (!isSandboxed(SandboxTopNavigation) && targetFrame == m_frame->tree().top
()) |
| 2732 return true; | 2732 return true; |
| 2733 | 2733 |
| 2734 if (isSandboxed(SandboxNavigation)) { | 2734 if (isSandboxed(SandboxNavigation)) { |
| 2735 if (targetFrame->tree()->isDescendantOf(m_frame)) | 2735 if (targetFrame->tree().isDescendantOf(m_frame)) |
| 2736 return true; | 2736 return true; |
| 2737 | 2737 |
| 2738 const char* reason = "The frame attempting navigation is sandboxed, and
is therefore disallowed from navigating its ancestors."; | 2738 const char* reason = "The frame attempting navigation is sandboxed, and
is therefore disallowed from navigating its ancestors."; |
| 2739 if (isSandboxed(SandboxTopNavigation) && targetFrame == m_frame->tree()-
>top()) | 2739 if (isSandboxed(SandboxTopNavigation) && targetFrame == m_frame->tree().
top()) |
| 2740 reason = "The frame attempting navigation of the top-level window is
sandboxed, but the 'allow-top-navigation' flag is not set."; | 2740 reason = "The frame attempting navigation of the top-level window is
sandboxed, but the 'allow-top-navigation' flag is not set."; |
| 2741 | 2741 |
| 2742 printNavigationErrorMessage(targetFrame, url(), reason); | 2742 printNavigationErrorMessage(targetFrame, url(), reason); |
| 2743 return false; | 2743 return false; |
| 2744 } | 2744 } |
| 2745 | 2745 |
| 2746 // This is the normal case. A document can navigate its decendant frames, | 2746 // This is the normal case. A document can navigate its decendant frames, |
| 2747 // or, more generally, a document can navigate a frame if the document is | 2747 // or, more generally, a document can navigate a frame if the document is |
| 2748 // in the same origin as any of that frame's ancestors (in the frame | 2748 // in the same origin as any of that frame's ancestors (in the frame |
| 2749 // hierarchy). | 2749 // hierarchy). |
| 2750 // | 2750 // |
| 2751 // See http://www.adambarth.com/papers/2008/barth-jackson-mitchell.pdf for | 2751 // See http://www.adambarth.com/papers/2008/barth-jackson-mitchell.pdf for |
| 2752 // historical information about this security check. | 2752 // historical information about this security check. |
| 2753 if (canAccessAncestor(securityOrigin(), targetFrame)) | 2753 if (canAccessAncestor(securityOrigin(), targetFrame)) |
| 2754 return true; | 2754 return true; |
| 2755 | 2755 |
| 2756 // Top-level frames are easier to navigate than other frames because they | 2756 // Top-level frames are easier to navigate than other frames because they |
| 2757 // display their URLs in the address bar (in most browsers). However, there | 2757 // display their URLs in the address bar (in most browsers). However, there |
| 2758 // are still some restrictions on navigation to avoid nuisance attacks. | 2758 // are still some restrictions on navigation to avoid nuisance attacks. |
| 2759 // Specifically, a document can navigate a top-level frame if that frame | 2759 // Specifically, a document can navigate a top-level frame if that frame |
| 2760 // opened the document or if the document is the same-origin with any of | 2760 // opened the document or if the document is the same-origin with any of |
| 2761 // the top-level frame's opener's ancestors (in the frame hierarchy). | 2761 // the top-level frame's opener's ancestors (in the frame hierarchy). |
| 2762 // | 2762 // |
| 2763 // In both of these cases, the document performing the navigation is in | 2763 // In both of these cases, the document performing the navigation is in |
| 2764 // some way related to the frame being navigate (e.g., by the "opener" | 2764 // some way related to the frame being navigate (e.g., by the "opener" |
| 2765 // and/or "parent" relation). Requiring some sort of relation prevents a | 2765 // and/or "parent" relation). Requiring some sort of relation prevents a |
| 2766 // document from navigating arbitrary, unrelated top-level frames. | 2766 // document from navigating arbitrary, unrelated top-level frames. |
| 2767 if (!targetFrame->tree()->parent()) { | 2767 if (!targetFrame->tree().parent()) { |
| 2768 if (targetFrame == m_frame->loader()->opener()) | 2768 if (targetFrame == m_frame->loader()->opener()) |
| 2769 return true; | 2769 return true; |
| 2770 | 2770 |
| 2771 if (canAccessAncestor(securityOrigin(), targetFrame->loader()->opener())
) | 2771 if (canAccessAncestor(securityOrigin(), targetFrame->loader()->opener())
) |
| 2772 return true; | 2772 return true; |
| 2773 } | 2773 } |
| 2774 | 2774 |
| 2775 printNavigationErrorMessage(targetFrame, url(), "The frame attempting naviga
tion is neither same-origin with the target, nor is it the target's parent or op
ener."); | 2775 printNavigationErrorMessage(targetFrame, url(), "The frame attempting naviga
tion is neither same-origin with the target, nor is it the target's parent or op
ener."); |
| 2776 return false; | 2776 return false; |
| 2777 } | 2777 } |
| 2778 | 2778 |
| 2779 Frame* Document::findUnsafeParentScrollPropagationBoundary() | 2779 Frame* Document::findUnsafeParentScrollPropagationBoundary() |
| 2780 { | 2780 { |
| 2781 Frame* currentFrame = m_frame; | 2781 Frame* currentFrame = m_frame; |
| 2782 Frame* ancestorFrame = currentFrame->tree()->parent(); | 2782 Frame* ancestorFrame = currentFrame->tree().parent(); |
| 2783 | 2783 |
| 2784 while (ancestorFrame) { | 2784 while (ancestorFrame) { |
| 2785 if (!ancestorFrame->document()->securityOrigin()->canAccess(securityOrig
in())) | 2785 if (!ancestorFrame->document()->securityOrigin()->canAccess(securityOrig
in())) |
| 2786 return currentFrame; | 2786 return currentFrame; |
| 2787 currentFrame = ancestorFrame; | 2787 currentFrame = ancestorFrame; |
| 2788 ancestorFrame = ancestorFrame->tree()->parent(); | 2788 ancestorFrame = ancestorFrame->tree().parent(); |
| 2789 } | 2789 } |
| 2790 return 0; | 2790 return 0; |
| 2791 } | 2791 } |
| 2792 | 2792 |
| 2793 | 2793 |
| 2794 void Document::seamlessParentUpdatedStylesheets() | 2794 void Document::seamlessParentUpdatedStylesheets() |
| 2795 { | 2795 { |
| 2796 m_styleEngine->didModifySeamlessParentStyleSheet(); | 2796 m_styleEngine->didModifySeamlessParentStyleSheet(); |
| 2797 styleResolverChanged(RecalcStyleImmediately); | 2797 styleResolverChanged(RecalcStyleImmediately); |
| 2798 } | 2798 } |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3204 updateStyleIfNeeded(); | 3204 updateStyleIfNeeded(); |
| 3205 } | 3205 } |
| 3206 | 3206 |
| 3207 void Document::notifySeamlessChildDocumentsOfStylesheetUpdate() const | 3207 void Document::notifySeamlessChildDocumentsOfStylesheetUpdate() const |
| 3208 { | 3208 { |
| 3209 // If we're not in a frame yet any potential child documents won't have a St
yleResolver to update. | 3209 // If we're not in a frame yet any potential child documents won't have a St
yleResolver to update. |
| 3210 if (!frame()) | 3210 if (!frame()) |
| 3211 return; | 3211 return; |
| 3212 | 3212 |
| 3213 // Seamless child frames are expected to notify their seamless children recu
rsively, so we only do direct children. | 3213 // Seamless child frames are expected to notify their seamless children recu
rsively, so we only do direct children. |
| 3214 for (Frame* child = frame()->tree()->firstChild(); child; child = child->tre
e()->nextSibling()) { | 3214 for (Frame* child = frame()->tree().firstChild(); child; child = child->tree
().nextSibling()) { |
| 3215 Document* childDocument = child->document(); | 3215 Document* childDocument = child->document(); |
| 3216 if (childDocument->shouldDisplaySeamlesslyWithParent()) { | 3216 if (childDocument->shouldDisplaySeamlesslyWithParent()) { |
| 3217 ASSERT(childDocument->seamlessParentIFrame()->document() == this); | 3217 ASSERT(childDocument->seamlessParentIFrame()->document() == this); |
| 3218 childDocument->seamlessParentUpdatedStylesheets(); | 3218 childDocument->seamlessParentUpdatedStylesheets(); |
| 3219 } | 3219 } |
| 3220 } | 3220 } |
| 3221 } | 3221 } |
| 3222 | 3222 |
| 3223 void Document::setHoverNode(PassRefPtr<Node> newHoverNode) | 3223 void Document::setHoverNode(PassRefPtr<Node> newHoverNode) |
| 3224 { | 3224 { |
| (...skipping 886 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4111 { | 4111 { |
| 4112 return command(this, commandName).value(); | 4112 return command(this, commandName).value(); |
| 4113 } | 4113 } |
| 4114 | 4114 |
| 4115 KURL Document::openSearchDescriptionURL() | 4115 KURL Document::openSearchDescriptionURL() |
| 4116 { | 4116 { |
| 4117 static const char* const openSearchMIMEType = "application/opensearchdescrip
tion+xml"; | 4117 static const char* const openSearchMIMEType = "application/opensearchdescrip
tion+xml"; |
| 4118 static const char* const openSearchRelation = "search"; | 4118 static const char* const openSearchRelation = "search"; |
| 4119 | 4119 |
| 4120 // FIXME: Why do only top-level frames have openSearchDescriptionURLs? | 4120 // FIXME: Why do only top-level frames have openSearchDescriptionURLs? |
| 4121 if (!frame() || frame()->tree()->parent()) | 4121 if (!frame() || frame()->tree().parent()) |
| 4122 return KURL(); | 4122 return KURL(); |
| 4123 | 4123 |
| 4124 // FIXME: Why do we need to wait for FrameStateComplete? | 4124 // FIXME: Why do we need to wait for FrameStateComplete? |
| 4125 if (frame()->loader()->state() != FrameStateComplete) | 4125 if (frame()->loader()->state() != FrameStateComplete) |
| 4126 return KURL(); | 4126 return KURL(); |
| 4127 | 4127 |
| 4128 if (!head()) | 4128 if (!head()) |
| 4129 return KURL(); | 4129 return KURL(); |
| 4130 | 4130 |
| 4131 RefPtr<HTMLCollection> children = head()->children(); | 4131 RefPtr<HTMLCollection> children = head()->children(); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4173 } | 4173 } |
| 4174 | 4174 |
| 4175 void Document::setTransformSource(PassOwnPtr<TransformSource> source) | 4175 void Document::setTransformSource(PassOwnPtr<TransformSource> source) |
| 4176 { | 4176 { |
| 4177 m_transformSource = source; | 4177 m_transformSource = source; |
| 4178 } | 4178 } |
| 4179 | 4179 |
| 4180 void Document::setDesignMode(InheritedBool value) | 4180 void Document::setDesignMode(InheritedBool value) |
| 4181 { | 4181 { |
| 4182 m_designMode = value; | 4182 m_designMode = value; |
| 4183 for (Frame* frame = m_frame; frame && frame->document(); frame = frame->tree
()->traverseNext(m_frame)) | 4183 for (Frame* frame = m_frame; frame && frame->document(); frame = frame->tree
().traverseNext(m_frame)) |
| 4184 frame->document()->setNeedsStyleRecalc(); | 4184 frame->document()->setNeedsStyleRecalc(); |
| 4185 } | 4185 } |
| 4186 | 4186 |
| 4187 Document::InheritedBool Document::getDesignMode() const | 4187 Document::InheritedBool Document::getDesignMode() const |
| 4188 { | 4188 { |
| 4189 return m_designMode; | 4189 return m_designMode; |
| 4190 } | 4190 } |
| 4191 | 4191 |
| 4192 bool Document::inDesignMode() const | 4192 bool Document::inDesignMode() const |
| 4193 { | 4193 { |
| 4194 for (const Document* d = this; d; d = d->parentDocument()) { | 4194 for (const Document* d = this; d; d = d->parentDocument()) { |
| 4195 if (d->m_designMode != inherit) | 4195 if (d->m_designMode != inherit) |
| 4196 return d->m_designMode; | 4196 return d->m_designMode; |
| 4197 } | 4197 } |
| 4198 return false; | 4198 return false; |
| 4199 } | 4199 } |
| 4200 | 4200 |
| 4201 Document* Document::parentDocument() const | 4201 Document* Document::parentDocument() const |
| 4202 { | 4202 { |
| 4203 if (!m_frame) | 4203 if (!m_frame) |
| 4204 return 0; | 4204 return 0; |
| 4205 Frame* parent = m_frame->tree()->parent(); | 4205 Frame* parent = m_frame->tree().parent(); |
| 4206 if (!parent) | 4206 if (!parent) |
| 4207 return 0; | 4207 return 0; |
| 4208 return parent->document(); | 4208 return parent->document(); |
| 4209 } | 4209 } |
| 4210 | 4210 |
| 4211 Document* Document::topDocument() const | 4211 Document* Document::topDocument() const |
| 4212 { | 4212 { |
| 4213 Document* doc = const_cast<Document*>(this); | 4213 Document* doc = const_cast<Document*>(this); |
| 4214 Element* element; | 4214 Element* element; |
| 4215 while ((element = doc->ownerElement())) | 4215 while ((element = doc->ownerElement())) |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4529 } | 4529 } |
| 4530 | 4530 |
| 4531 m_cookieURL = ownerFrame->document()->cookieURL(); | 4531 m_cookieURL = ownerFrame->document()->cookieURL(); |
| 4532 // We alias the SecurityOrigins to match Firefox, see Bug 15313 | 4532 // We alias the SecurityOrigins to match Firefox, see Bug 15313 |
| 4533 // https://bugs.webkit.org/show_bug.cgi?id=15313 | 4533 // https://bugs.webkit.org/show_bug.cgi?id=15313 |
| 4534 setSecurityOrigin(ownerFrame->document()->securityOrigin()); | 4534 setSecurityOrigin(ownerFrame->document()->securityOrigin()); |
| 4535 } | 4535 } |
| 4536 | 4536 |
| 4537 void Document::initContentSecurityPolicy(const ContentSecurityPolicyResponseHead
ers& headers) | 4537 void Document::initContentSecurityPolicy(const ContentSecurityPolicyResponseHead
ers& headers) |
| 4538 { | 4538 { |
| 4539 if (m_frame && m_frame->tree()->parent() && (shouldInheritSecurityOriginFrom
Owner(m_url) || isPluginDocument())) | 4539 if (m_frame && m_frame->tree().parent() && (shouldInheritSecurityOriginFromO
wner(m_url) || isPluginDocument())) |
| 4540 contentSecurityPolicy()->copyStateFrom(m_frame->tree()->parent()->docume
nt()->contentSecurityPolicy()); | 4540 contentSecurityPolicy()->copyStateFrom(m_frame->tree().parent()->documen
t()->contentSecurityPolicy()); |
| 4541 contentSecurityPolicy()->didReceiveHeaders(headers); | 4541 contentSecurityPolicy()->didReceiveHeaders(headers); |
| 4542 } | 4542 } |
| 4543 | 4543 |
| 4544 bool Document::allowInlineEventHandlers(Node* node, EventListener* listener, con
st String& contextURL, const WTF::OrdinalNumber& contextLine) | 4544 bool Document::allowInlineEventHandlers(Node* node, EventListener* listener, con
st String& contextURL, const WTF::OrdinalNumber& contextLine) |
| 4545 { | 4545 { |
| 4546 if (!contentSecurityPolicy()->allowInlineEventHandlers(contextURL, contextLi
ne)) | 4546 if (!contentSecurityPolicy()->allowInlineEventHandlers(contextURL, contextLi
ne)) |
| 4547 return false; | 4547 return false; |
| 4548 | 4548 |
| 4549 // HTML says that inline script needs browsing context to create its executi
on environment. | 4549 // HTML says that inline script needs browsing context to create its executi
on environment. |
| 4550 // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.ht
ml#event-handler-attributes | 4550 // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.ht
ml#event-handler-attributes |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4967 return; | 4967 return; |
| 4968 } | 4968 } |
| 4969 | 4969 |
| 4970 Page* page = this->page(); | 4970 Page* page = this->page(); |
| 4971 if (!page) | 4971 if (!page) |
| 4972 return; | 4972 return; |
| 4973 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator(
)) | 4973 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator(
)) |
| 4974 scrollingCoordinator->touchEventTargetRectsDidChange(this); | 4974 scrollingCoordinator->touchEventTargetRectsDidChange(this); |
| 4975 if (m_touchEventTargets->size()) | 4975 if (m_touchEventTargets->size()) |
| 4976 return; | 4976 return; |
| 4977 for (const Frame* frame = page->mainFrame(); frame; frame = frame->tree()->t
raverseNext()) { | 4977 for (const Frame* frame = page->mainFrame(); frame; frame = frame->tree().tr
averseNext()) { |
| 4978 if (frame->document() && frame->document()->hasTouchEventHandlers()) | 4978 if (frame->document() && frame->document()->hasTouchEventHandlers()) |
| 4979 return; | 4979 return; |
| 4980 } | 4980 } |
| 4981 page->chrome().client().needTouchEvents(false); | 4981 page->chrome().client().needTouchEvents(false); |
| 4982 } | 4982 } |
| 4983 | 4983 |
| 4984 void Document::didRemoveEventTargetNode(Node* handler) | 4984 void Document::didRemoveEventTargetNode(Node* handler) |
| 4985 { | 4985 { |
| 4986 if (m_touchEventTargets && !m_touchEventTargets->isEmpty()) { | 4986 if (m_touchEventTargets && !m_touchEventTargets->isEmpty()) { |
| 4987 if (handler == this) | 4987 if (handler == this) |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5348 void Document::modifiedStyleSheet(StyleSheet* sheet, RecalcStyleTime when, Style
ResolverUpdateMode updateMode) | 5348 void Document::modifiedStyleSheet(StyleSheet* sheet, RecalcStyleTime when, Style
ResolverUpdateMode updateMode) |
| 5349 { | 5349 { |
| 5350 if (!isActive()) | 5350 if (!isActive()) |
| 5351 return; | 5351 return; |
| 5352 | 5352 |
| 5353 styleEngine()->modifiedStyleSheet(sheet); | 5353 styleEngine()->modifiedStyleSheet(sheet); |
| 5354 styleResolverChanged(when, updateMode); | 5354 styleResolverChanged(when, updateMode); |
| 5355 } | 5355 } |
| 5356 | 5356 |
| 5357 } // namespace WebCore | 5357 } // namespace WebCore |
| OLD | NEW |