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 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 return 0; | 291 return 0; |
292 return toRenderWidget(renderer)->widget(); | 292 return toRenderWidget(renderer)->widget(); |
293 } | 293 } |
294 | 294 |
295 static bool acceptsEditingFocus(Element* element) | 295 static bool acceptsEditingFocus(Element* element) |
296 { | 296 { |
297 ASSERT(element); | 297 ASSERT(element); |
298 ASSERT(element->rendererIsEditable()); | 298 ASSERT(element->rendererIsEditable()); |
299 | 299 |
300 Element* root = element->rootEditableElement(); | 300 Element* root = element->rootEditableElement(); |
301 Frame* frame = element->document()->frame(); | 301 Frame* frame = element->document().frame(); |
302 if (!frame || !root) | 302 if (!frame || !root) |
303 return false; | 303 return false; |
304 | 304 |
305 return frame->editor().shouldBeginEditing(rangeOfContents(root).get()); | 305 return frame->editor().shouldBeginEditing(rangeOfContents(root).get()); |
306 } | 306 } |
307 | 307 |
308 static bool canAccessAncestor(const SecurityOrigin* activeSecurityOrigin, Frame*
targetFrame) | 308 static bool canAccessAncestor(const SecurityOrigin* activeSecurityOrigin, Frame*
targetFrame) |
309 { | 309 { |
310 // targetFrame can be 0 when we're trying to navigate a top-level frame | 310 // targetFrame can be 0 when we're trying to navigate a top-level frame |
311 // that has a 0 opener. | 311 // that has a 0 opener. |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 HistogramSupport::histogramEnumeration("DOMAPI.PerDocumentMutationEventUsage
.DOMCharacterDataModified", static_cast<bool>(listenerTypes & Document::DOMCHARA
CTERDATAMODIFIED_LISTENER), 2); | 496 HistogramSupport::histogramEnumeration("DOMAPI.PerDocumentMutationEventUsage
.DOMCharacterDataModified", static_cast<bool>(listenerTypes & Document::DOMCHARA
CTERDATAMODIFIED_LISTENER), 2); |
497 } | 497 } |
498 | 498 |
499 static bool isAttributeOnAllOwners(const WebCore::QualifiedName& attribute, cons
t WebCore::QualifiedName& prefixedAttribute, const HTMLFrameOwnerElement* owner) | 499 static bool isAttributeOnAllOwners(const WebCore::QualifiedName& attribute, cons
t WebCore::QualifiedName& prefixedAttribute, const HTMLFrameOwnerElement* owner) |
500 { | 500 { |
501 if (!owner) | 501 if (!owner) |
502 return true; | 502 return true; |
503 do { | 503 do { |
504 if (!(owner->hasAttribute(attribute) || owner->hasAttribute(prefixedAttr
ibute))) | 504 if (!(owner->hasAttribute(attribute) || owner->hasAttribute(prefixedAttr
ibute))) |
505 return false; | 505 return false; |
506 } while ((owner = owner->document()->ownerElement())); | 506 } while ((owner = owner->document().ownerElement())); |
507 return true; | 507 return true; |
508 } | 508 } |
509 | 509 |
510 Document::~Document() | 510 Document::~Document() |
511 { | 511 { |
512 ASSERT(!renderer()); | 512 ASSERT(!renderer()); |
513 ASSERT(m_ranges.isEmpty()); | 513 ASSERT(m_ranges.isEmpty()); |
514 ASSERT(!m_parentTreeScope); | 514 ASSERT(!m_parentTreeScope); |
515 ASSERT(!hasGuardRefCount()); | 515 ASSERT(!hasGuardRefCount()); |
516 | 516 |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 executeScriptsWaitingForResourcesIfNeeded(); | 783 executeScriptsWaitingForResourcesIfNeeded(); |
784 } | 784 } |
785 | 785 |
786 bool Document::haveImportsLoaded() const | 786 bool Document::haveImportsLoaded() const |
787 { | 787 { |
788 return !m_import || !m_import->isBlocked(); | 788 return !m_import || !m_import->isBlocked(); |
789 } | 789 } |
790 | 790 |
791 PassRefPtr<DocumentFragment> Document::createDocumentFragment() | 791 PassRefPtr<DocumentFragment> Document::createDocumentFragment() |
792 { | 792 { |
793 return DocumentFragment::create(document()); | 793 return DocumentFragment::create(&document()); |
794 } | 794 } |
795 | 795 |
796 PassRefPtr<Text> Document::createTextNode(const String& data) | 796 PassRefPtr<Text> Document::createTextNode(const String& data) |
797 { | 797 { |
798 return Text::create(this, data); | 798 return Text::create(this, data); |
799 } | 799 } |
800 | 800 |
801 PassRefPtr<Comment> Document::createComment(const String& data) | 801 PassRefPtr<Comment> Document::createComment(const String& data) |
802 { | 802 { |
803 return Comment::create(this, data); | 803 return Comment::create(this, data); |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1002 | 1002 |
1003 // FIXME: Use registered namespaces and look up in a hash to find the right
factory. | 1003 // FIXME: Use registered namespaces and look up in a hash to find the right
factory. |
1004 if (qName.namespaceURI() == xhtmlNamespaceURI) | 1004 if (qName.namespaceURI() == xhtmlNamespaceURI) |
1005 e = HTMLElementFactory::createHTMLElement(qName, this, 0, createdByParse
r); | 1005 e = HTMLElementFactory::createHTMLElement(qName, this, 0, createdByParse
r); |
1006 else if (qName.namespaceURI() == SVGNames::svgNamespaceURI) | 1006 else if (qName.namespaceURI() == SVGNames::svgNamespaceURI) |
1007 e = SVGElementFactory::createSVGElement(qName, this, createdByParser); | 1007 e = SVGElementFactory::createSVGElement(qName, this, createdByParser); |
1008 | 1008 |
1009 if (e) | 1009 if (e) |
1010 m_sawElementsInKnownNamespaces = true; | 1010 m_sawElementsInKnownNamespaces = true; |
1011 else | 1011 else |
1012 e = Element::create(qName, document()); | 1012 e = Element::create(qName, &document()); |
1013 | 1013 |
1014 // <image> uses imgTag so we need a special rule. | 1014 // <image> uses imgTag so we need a special rule. |
1015 ASSERT((qName.matches(imageTag) && e->tagQName().matches(imgTag) && e->tagQN
ame().prefix() == qName.prefix()) || qName == e->tagQName()); | 1015 ASSERT((qName.matches(imageTag) && e->tagQName().matches(imgTag) && e->tagQN
ame().prefix() == qName.prefix()) || qName == e->tagQName()); |
1016 | 1016 |
1017 return e.release(); | 1017 return e.release(); |
1018 } | 1018 } |
1019 | 1019 |
1020 bool Document::regionBasedColumnsEnabled() const | 1020 bool Document::regionBasedColumnsEnabled() const |
1021 { | 1021 { |
1022 return settings() && settings()->regionBasedColumnsEnabled(); | 1022 return settings() && settings()->regionBasedColumnsEnabled(); |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1536 return 0; | 1536 return 0; |
1537 } | 1537 } |
1538 return TreeWalker::create(root, whatToShow, filter); | 1538 return TreeWalker::create(root, whatToShow, filter); |
1539 } | 1539 } |
1540 | 1540 |
1541 void Document::scheduleStyleRecalc() | 1541 void Document::scheduleStyleRecalc() |
1542 { | 1542 { |
1543 if (shouldDisplaySeamlesslyWithParent()) { | 1543 if (shouldDisplaySeamlesslyWithParent()) { |
1544 // When we're seamless, our parent document manages our style recalcs. | 1544 // When we're seamless, our parent document manages our style recalcs. |
1545 ownerElement()->setNeedsStyleRecalc(); | 1545 ownerElement()->setNeedsStyleRecalc(); |
1546 ownerElement()->document()->scheduleStyleRecalc(); | 1546 ownerElement()->document().scheduleStyleRecalc(); |
1547 return; | 1547 return; |
1548 } | 1548 } |
1549 | 1549 |
1550 if (m_styleRecalcTimer.isActive()) | 1550 if (m_styleRecalcTimer.isActive()) |
1551 return; | 1551 return; |
1552 | 1552 |
1553 ASSERT(needsStyleRecalc() || childNeedsStyleRecalc() || childNeedsDistributi
onRecalc()); | 1553 ASSERT(needsStyleRecalc() || childNeedsStyleRecalc() || childNeedsDistributi
onRecalc()); |
1554 | 1554 |
1555 m_styleRecalcTimer.startOneShot(0); | 1555 m_styleRecalcTimer.startOneShot(0); |
1556 | 1556 |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1733 ASSERT(isMainThread()); | 1733 ASSERT(isMainThread()); |
1734 | 1734 |
1735 FrameView* frameView = view(); | 1735 FrameView* frameView = view(); |
1736 if (frameView && frameView->isInLayout()) { | 1736 if (frameView && frameView->isInLayout()) { |
1737 // View layout should not be re-entrant. | 1737 // View layout should not be re-entrant. |
1738 ASSERT_NOT_REACHED(); | 1738 ASSERT_NOT_REACHED(); |
1739 return; | 1739 return; |
1740 } | 1740 } |
1741 | 1741 |
1742 if (Element* oe = ownerElement()) | 1742 if (Element* oe = ownerElement()) |
1743 oe->document()->updateLayout(); | 1743 oe->document().updateLayout(); |
1744 | 1744 |
1745 updateStyleIfNeeded(); | 1745 updateStyleIfNeeded(); |
1746 | 1746 |
1747 // Only do a layout if changes have occurred that make it necessary. | 1747 // Only do a layout if changes have occurred that make it necessary. |
1748 if (frameView && renderer() && (frameView->layoutPending() || renderer()->ne
edsLayout())) | 1748 if (frameView && renderer() && (frameView->layoutPending() || renderer()->ne
edsLayout())) |
1749 frameView->layout(); | 1749 frameView->layout(); |
1750 | 1750 |
1751 setNeedsFocusedElementCheck(); | 1751 setNeedsFocusedElementCheck(); |
1752 } | 1752 } |
1753 | 1753 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1789 recalcStyle(Force); | 1789 recalcStyle(Force); |
1790 } | 1790 } |
1791 | 1791 |
1792 updateLayout(); | 1792 updateLayout(); |
1793 | 1793 |
1794 m_ignorePendingStylesheets = oldIgnore; | 1794 m_ignorePendingStylesheets = oldIgnore; |
1795 } | 1795 } |
1796 | 1796 |
1797 PassRefPtr<RenderStyle> Document::styleForElementIgnoringPendingStylesheets(Elem
ent* element) | 1797 PassRefPtr<RenderStyle> Document::styleForElementIgnoringPendingStylesheets(Elem
ent* element) |
1798 { | 1798 { |
1799 ASSERT_ARG(element, element->document() == this); | 1799 ASSERT_ARG(element, &element->document() == this); |
1800 TemporaryChange<bool> ignoreStyleSheets(m_ignorePendingStylesheets, true); | 1800 TemporaryChange<bool> ignoreStyleSheets(m_ignorePendingStylesheets, true); |
1801 return styleResolver()->styleForElement(element, element->parentNode() ? ele
ment->parentNode()->computedStyle() : 0); | 1801 return styleResolver()->styleForElement(element, element->parentNode() ? ele
ment->parentNode()->computedStyle() : 0); |
1802 } | 1802 } |
1803 | 1803 |
1804 PassRefPtr<RenderStyle> Document::styleForPage(int pageIndex) | 1804 PassRefPtr<RenderStyle> Document::styleForPage(int pageIndex) |
1805 { | 1805 { |
1806 return styleResolver()->styleForPage(pageIndex); | 1806 return styleResolver()->styleForPage(pageIndex); |
1807 } | 1807 } |
1808 | 1808 |
1809 bool Document::isPageBoxVisible(int pageIndex) | 1809 bool Document::isPageBoxVisible(int pageIndex) |
(...skipping 1360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3170 void Document::notifySeamlessChildDocumentsOfStylesheetUpdate() const | 3170 void Document::notifySeamlessChildDocumentsOfStylesheetUpdate() const |
3171 { | 3171 { |
3172 // If we're not in a frame yet any potential child documents won't have a St
yleResolver to update. | 3172 // If we're not in a frame yet any potential child documents won't have a St
yleResolver to update. |
3173 if (!frame()) | 3173 if (!frame()) |
3174 return; | 3174 return; |
3175 | 3175 |
3176 // Seamless child frames are expected to notify their seamless children recu
rsively, so we only do direct children. | 3176 // Seamless child frames are expected to notify their seamless children recu
rsively, so we only do direct children. |
3177 for (Frame* child = frame()->tree()->firstChild(); child; child = child->tre
e()->nextSibling()) { | 3177 for (Frame* child = frame()->tree()->firstChild(); child; child = child->tre
e()->nextSibling()) { |
3178 Document* childDocument = child->document(); | 3178 Document* childDocument = child->document(); |
3179 if (childDocument->shouldDisplaySeamlesslyWithParent()) { | 3179 if (childDocument->shouldDisplaySeamlesslyWithParent()) { |
3180 ASSERT(childDocument->seamlessParentIFrame()->document() == this); | 3180 ASSERT(&childDocument->seamlessParentIFrame()->document() == this); |
3181 childDocument->seamlessParentUpdatedStylesheets(); | 3181 childDocument->seamlessParentUpdatedStylesheets(); |
3182 } | 3182 } |
3183 } | 3183 } |
3184 } | 3184 } |
3185 | 3185 |
3186 void Document::setHoverNode(PassRefPtr<Node> newHoverNode) | 3186 void Document::setHoverNode(PassRefPtr<Node> newHoverNode) |
3187 { | 3187 { |
3188 m_hoverNode = newHoverNode; | 3188 m_hoverNode = newHoverNode; |
3189 } | 3189 } |
3190 | 3190 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3263 { | 3263 { |
3264 m_annotatedRegions = regions; | 3264 m_annotatedRegions = regions; |
3265 setAnnotatedRegionsDirty(false); | 3265 setAnnotatedRegionsDirty(false); |
3266 } | 3266 } |
3267 | 3267 |
3268 bool Document::setFocusedElement(PassRefPtr<Element> prpNewFocusedElement, Focus
Direction direction) | 3268 bool Document::setFocusedElement(PassRefPtr<Element> prpNewFocusedElement, Focus
Direction direction) |
3269 { | 3269 { |
3270 RefPtr<Element> newFocusedElement = prpNewFocusedElement; | 3270 RefPtr<Element> newFocusedElement = prpNewFocusedElement; |
3271 | 3271 |
3272 // Make sure newFocusedNode is actually in this document | 3272 // Make sure newFocusedNode is actually in this document |
3273 if (newFocusedElement && (newFocusedElement->document() != this)) | 3273 if (newFocusedElement && (&newFocusedElement->document() != this)) |
3274 return true; | 3274 return true; |
3275 | 3275 |
3276 if (m_focusedElement == newFocusedElement) | 3276 if (m_focusedElement == newFocusedElement) |
3277 return true; | 3277 return true; |
3278 | 3278 |
3279 bool focusChangeBlocked = false; | 3279 bool focusChangeBlocked = false; |
3280 RefPtr<Element> oldFocusedElement = m_focusedElement; | 3280 RefPtr<Element> oldFocusedElement = m_focusedElement; |
3281 m_focusedElement = 0; | 3281 m_focusedElement = 0; |
3282 | 3282 |
3283 // Remove focus from the existing focus node (if any) | 3283 // Remove focus from the existing focus node (if any) |
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4125 if (!m_frame) | 4125 if (!m_frame) |
4126 return 0; | 4126 return 0; |
4127 Frame* parent = m_frame->tree()->parent(); | 4127 Frame* parent = m_frame->tree()->parent(); |
4128 if (!parent) | 4128 if (!parent) |
4129 return 0; | 4129 return 0; |
4130 return parent->document(); | 4130 return parent->document(); |
4131 } | 4131 } |
4132 | 4132 |
4133 Document* Document::topDocument() const | 4133 Document* Document::topDocument() const |
4134 { | 4134 { |
4135 Document* doc = const_cast<Document *>(this); | 4135 Document* doc = const_cast<Document*>(this); |
4136 Element* element; | 4136 Element* element; |
4137 while ((element = doc->ownerElement())) | 4137 while ((element = doc->ownerElement())) |
4138 doc = element->document(); | 4138 doc = &element->document(); |
4139 | 4139 |
4140 return doc; | 4140 return doc; |
4141 } | 4141 } |
4142 | 4142 |
4143 PassRefPtr<Attr> Document::createAttribute(const String& name, ExceptionState& e
s) | 4143 PassRefPtr<Attr> Document::createAttribute(const String& name, ExceptionState& e
s) |
4144 { | 4144 { |
4145 return createAttributeNS(String(), name, es, true); | 4145 return createAttributeNS(String(), name, es, true); |
4146 } | 4146 } |
4147 | 4147 |
4148 PassRefPtr<Attr> Document::createAttributeNS(const String& namespaceURI, const S
tring& qualifiedName, ExceptionState& es, bool shouldIgnoreNamespaceChecks) | 4148 PassRefPtr<Attr> Document::createAttributeNS(const String& namespaceURI, const S
tring& qualifiedName, ExceptionState& es, bool shouldIgnoreNamespaceChecks) |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4414 securityOrigin()->grantUniversalAccess(); | 4414 securityOrigin()->grantUniversalAccess(); |
4415 } else if (!settings->allowFileAccessFromFileURLs()) { | 4415 } else if (!settings->allowFileAccessFromFileURLs()) { |
4416 // Some clients want local URLs to have even tighter restriction
s by default, and not be able to access other local files. | 4416 // Some clients want local URLs to have even tighter restriction
s by default, and not be able to access other local files. |
4417 // FIXME 81578: The naming of this is confusing. Files with rest
ricted access to other local files | 4417 // FIXME 81578: The naming of this is confusing. Files with rest
ricted access to other local files |
4418 // still can have other privileges that can be remembered, there
by not making them unique origins. | 4418 // still can have other privileges that can be remembered, there
by not making them unique origins. |
4419 securityOrigin()->enforceFilePathSeparation(); | 4419 securityOrigin()->enforceFilePathSeparation(); |
4420 } | 4420 } |
4421 } | 4421 } |
4422 } | 4422 } |
4423 | 4423 |
4424 Document* parentDocument = ownerElement() ? ownerElement()->document() : 0; | 4424 Document* parentDocument = ownerElement() ? &ownerElement()->document() : 0; |
4425 if (parentDocument && initializer.shouldTreatURLAsSrcdocDocument()) { | 4425 if (parentDocument && initializer.shouldTreatURLAsSrcdocDocument()) { |
4426 m_isSrcdocDocument = true; | 4426 m_isSrcdocDocument = true; |
4427 setBaseURLOverride(parentDocument->baseURL()); | 4427 setBaseURLOverride(parentDocument->baseURL()); |
4428 } | 4428 } |
4429 | 4429 |
4430 // FIXME: What happens if we inherit the security origin? This check may nee
d to be later. | 4430 // FIXME: What happens if we inherit the security origin? This check may nee
d to be later. |
4431 // <iframe seamless src="about:blank"> likely won't work as-is. | 4431 // <iframe seamless src="about:blank"> likely won't work as-is. |
4432 m_mayDisplaySeamlesslyWithParent = isEligibleForSeamless(parentDocument, thi
s); | 4432 m_mayDisplaySeamlesslyWithParent = isEligibleForSeamless(parentDocument, thi
s); |
4433 | 4433 |
4434 if (!shouldInheritSecurityOriginFromOwner(m_url)) | 4434 if (!shouldInheritSecurityOriginFromOwner(m_url)) |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4472 return false; | 4472 return false; |
4473 | 4473 |
4474 // HTML says that inline script needs browsing context to create its executi
on environment. | 4474 // HTML says that inline script needs browsing context to create its executi
on environment. |
4475 // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.ht
ml#event-handler-attributes | 4475 // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.ht
ml#event-handler-attributes |
4476 // Also, if the listening node came from other document, which happens on co
ntext-less event dispatching, | 4476 // Also, if the listening node came from other document, which happens on co
ntext-less event dispatching, |
4477 // we also need to ask the owner document of the node. | 4477 // we also need to ask the owner document of the node. |
4478 if (!m_frame) | 4478 if (!m_frame) |
4479 return false; | 4479 return false; |
4480 if (!m_frame->script()->canExecuteScripts(NotAboutToExecuteScript)) | 4480 if (!m_frame->script()->canExecuteScripts(NotAboutToExecuteScript)) |
4481 return false; | 4481 return false; |
4482 if (node && node->document() != this && !node->document()->allowInlineEventH
andlers(node, listener, contextURL, contextLine)) | 4482 if (node && &node->document() != this && !node->document().allowInlineEventH
andlers(node, listener, contextURL, contextLine)) |
4483 return false; | 4483 return false; |
4484 | 4484 |
4485 return true; | 4485 return true; |
4486 } | 4486 } |
4487 | 4487 |
4488 void Document::didUpdateSecurityOrigin() | 4488 void Document::didUpdateSecurityOrigin() |
4489 { | 4489 { |
4490 if (!m_frame) | 4490 if (!m_frame) |
4491 return; | 4491 return; |
4492 m_frame->script()->updateSecurityOrigin(); | 4492 m_frame->script()->updateSecurityOrigin(); |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4791 if (m_topLayerElements.isEmpty()) | 4791 if (m_topLayerElements.isEmpty()) |
4792 return 0; | 4792 return 0; |
4793 return static_cast<HTMLDialogElement*>(m_topLayerElements.last().get()); | 4793 return static_cast<HTMLDialogElement*>(m_topLayerElements.last().get()); |
4794 } | 4794 } |
4795 | 4795 |
4796 void Document::webkitExitPointerLock() | 4796 void Document::webkitExitPointerLock() |
4797 { | 4797 { |
4798 if (!page()) | 4798 if (!page()) |
4799 return; | 4799 return; |
4800 if (Element* target = page()->pointerLockController().element()) { | 4800 if (Element* target = page()->pointerLockController().element()) { |
4801 if (target->document() != this) | 4801 if (&target->document() != this) |
4802 return; | 4802 return; |
4803 } | 4803 } |
4804 page()->pointerLockController().requestPointerUnlock(); | 4804 page()->pointerLockController().requestPointerUnlock(); |
4805 } | 4805 } |
4806 | 4806 |
4807 Element* Document::webkitPointerLockElement() const | 4807 Element* Document::webkitPointerLockElement() const |
4808 { | 4808 { |
4809 if (!page() || page()->pointerLockController().lockPending()) | 4809 if (!page() || page()->pointerLockController().lockPending()) |
4810 return 0; | 4810 return 0; |
4811 if (Element* element = page()->pointerLockController().element()) { | 4811 if (Element* element = page()->pointerLockController().element()) { |
4812 if (element->document() == this) | 4812 if (&element->document() == this) |
4813 return element; | 4813 return element; |
4814 } | 4814 } |
4815 return 0; | 4815 return 0; |
4816 } | 4816 } |
4817 | 4817 |
4818 void Document::decrementLoadEventDelayCount() | 4818 void Document::decrementLoadEventDelayCount() |
4819 { | 4819 { |
4820 ASSERT(m_loadEventDelayCount); | 4820 ASSERT(m_loadEventDelayCount); |
4821 --m_loadEventDelayCount; | 4821 --m_loadEventDelayCount; |
4822 | 4822 |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5083 } | 5083 } |
5084 | 5084 |
5085 return 0; | 5085 return 0; |
5086 } | 5086 } |
5087 | 5087 |
5088 void Document::updateHoverActiveState(const HitTestRequest& request, Element* in
nerElement, const PlatformMouseEvent* event) | 5088 void Document::updateHoverActiveState(const HitTestRequest& request, Element* in
nerElement, const PlatformMouseEvent* event) |
5089 { | 5089 { |
5090 ASSERT(!request.readOnly()); | 5090 ASSERT(!request.readOnly()); |
5091 | 5091 |
5092 Element* innerElementInDocument = innerElement; | 5092 Element* innerElementInDocument = innerElement; |
5093 while (innerElementInDocument && innerElementInDocument->document() != this)
{ | 5093 while (innerElementInDocument && &innerElementInDocument->document() != this
) { |
5094 innerElementInDocument->document()->updateHoverActiveState(request, inne
rElementInDocument, event); | 5094 innerElementInDocument->document().updateHoverActiveState(request, inner
ElementInDocument, event); |
5095 innerElementInDocument = innerElementInDocument->document()->ownerElemen
t(); | 5095 innerElementInDocument = innerElementInDocument->document().ownerElement
(); |
5096 } | 5096 } |
5097 | 5097 |
5098 Element* oldActiveElement = activeElement(); | 5098 Element* oldActiveElement = activeElement(); |
5099 if (oldActiveElement && !request.active()) { | 5099 if (oldActiveElement && !request.active()) { |
5100 // We are clearing the :active chain because the mouse has been released
. | 5100 // We are clearing the :active chain because the mouse has been released
. |
5101 for (RenderObject* curr = oldActiveElement->renderer(); curr; curr = cur
r->parent()) { | 5101 for (RenderObject* curr = oldActiveElement->renderer(); curr; curr = cur
r->parent()) { |
5102 if (curr->node()) { | 5102 if (curr->node()) { |
5103 ASSERT(!curr->node()->isTextNode()); | 5103 ASSERT(!curr->node()->isTextNode()); |
5104 curr->node()->setActive(false); | 5104 curr->node()->setActive(false); |
5105 m_userActionElements.setInActiveChain(curr->node(), false); | 5105 m_userActionElements.setInActiveChain(curr->node(), false); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5294 { | 5294 { |
5295 return DocumentLifecycleNotifier::create(this); | 5295 return DocumentLifecycleNotifier::create(this); |
5296 } | 5296 } |
5297 | 5297 |
5298 DocumentLifecycleNotifier* Document::lifecycleNotifier() | 5298 DocumentLifecycleNotifier* Document::lifecycleNotifier() |
5299 { | 5299 { |
5300 return static_cast<DocumentLifecycleNotifier*>(ScriptExecutionContext::lifec
ycleNotifier()); | 5300 return static_cast<DocumentLifecycleNotifier*>(ScriptExecutionContext::lifec
ycleNotifier()); |
5301 } | 5301 } |
5302 | 5302 |
5303 } // namespace WebCore | 5303 } // namespace WebCore |
OLD | NEW |