Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: Source/web/WebAXObject.cpp

Issue 465143003: Assert if we try to access another AX attribute while a layout is pending. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « LayoutTests/accessibility/calling-accessibility-methods-with-pending-layout-causes-crash-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 #include "core/rendering/style/RenderStyle.h" 47 #include "core/rendering/style/RenderStyle.h"
48 #include "platform/PlatformKeyboardEvent.h" 48 #include "platform/PlatformKeyboardEvent.h"
49 #include "public/platform/WebPoint.h" 49 #include "public/platform/WebPoint.h"
50 #include "public/platform/WebRect.h" 50 #include "public/platform/WebRect.h"
51 #include "public/platform/WebString.h" 51 #include "public/platform/WebString.h"
52 #include "public/platform/WebURL.h" 52 #include "public/platform/WebURL.h"
53 #include "public/web/WebDocument.h" 53 #include "public/web/WebDocument.h"
54 #include "public/web/WebNode.h" 54 #include "public/web/WebNode.h"
55 #include "wtf/text/StringBuilder.h" 55 #include "wtf/text/StringBuilder.h"
56 56
57 using namespace blink;
58
57 namespace blink { 59 namespace blink {
58 60
61 #if ENABLE(ASSERT)
62 // It's not safe to call some WebAXObject APIs if a layout is pending.
63 // Clients should call updateLayoutAndCheckValidity first.
64 static bool isLayoutClean(Document* document)
65 {
66 if (!document || !document->view())
67 return false;
68 return document->lifecycle().state() >= DocumentLifecycle::LayoutClean
69 || (document->lifecycle().state() == DocumentLifecycle::StyleClean && !d ocument->view()->needsLayout());
70 }
71 #endif
72
59 void WebAXObject::reset() 73 void WebAXObject::reset()
60 { 74 {
61 m_private.reset(); 75 m_private.reset();
62 } 76 }
63 77
64 void WebAXObject::assign(const WebAXObject& other) 78 void WebAXObject::assign(const WebAXObject& other)
65 { 79 {
66 m_private = other.m_private; 80 m_private = other.m_private;
67 } 81 }
68 82
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 bool WebAXObject::updateBackingStoreAndCheckValidity() 135 bool WebAXObject::updateBackingStoreAndCheckValidity()
122 { 136 {
123 return updateLayoutAndCheckValidity(); 137 return updateLayoutAndCheckValidity();
124 } 138 }
125 139
126 WebString WebAXObject::accessibilityDescription() const 140 WebString WebAXObject::accessibilityDescription() const
127 { 141 {
128 if (isDetached()) 142 if (isDetached())
129 return WebString(); 143 return WebString();
130 144
145 ASSERT(isLayoutClean(m_private->document()));
146
131 return m_private->accessibilityDescription(); 147 return m_private->accessibilityDescription();
132 } 148 }
133 149
134 WebString WebAXObject::actionVerb() const 150 WebString WebAXObject::actionVerb() const
135 { 151 {
136 if (isDetached()) 152 if (isDetached())
137 return WebString(); 153 return WebString();
138 154
139 return m_private->actionVerb(); 155 return m_private->actionVerb();
140 } 156 }
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 m_private->ariaOwnsElements(owns); 551 m_private->ariaOwnsElements(owns);
536 552
537 WebVector<WebAXObject> result(owns.size()); 553 WebVector<WebAXObject> result(owns.size());
538 for (size_t i = 0; i < owns.size(); i++) 554 for (size_t i = 0; i < owns.size(); i++)
539 result[i] = WebAXObject(owns[i]); 555 result[i] = WebAXObject(owns[i]);
540 ownsElements.swap(result); 556 ownsElements.swap(result);
541 557
542 return true; 558 return true;
543 } 559 }
544 560
545 #if ENABLE(ASSERT)
546 static bool isLayoutClean(Document* document)
547 {
548 if (!document || !document->view())
549 return false;
550 return document->lifecycle().state() >= DocumentLifecycle::LayoutClean
551 || (document->lifecycle().state() == DocumentLifecycle::StyleClean && !d ocument->view()->needsLayout());
552 }
553 #endif
554
555 WebRect WebAXObject::boundingBoxRect() const 561 WebRect WebAXObject::boundingBoxRect() const
556 { 562 {
557 if (isDetached()) 563 if (isDetached())
558 return WebRect(); 564 return WebRect();
559 565
560 // It's not safe to call boundingBoxRect if a layout is pending.
561 // Clients should call updateLayoutAndCheckValidity first.
562 ASSERT(isLayoutClean(m_private->document())); 566 ASSERT(isLayoutClean(m_private->document()));
563 567
564 return pixelSnappedIntRect(m_private->elementRect()); 568 return pixelSnappedIntRect(m_private->elementRect());
565 } 569 }
566 570
567 bool WebAXObject::canvasHasFallbackContent() const 571 bool WebAXObject::canvasHasFallbackContent() const
568 { 572 {
569 if (isDetached()) 573 if (isDetached())
570 return false; 574 return false;
571 575
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 return WebString(); 779 return WebString();
776 780
777 return m_private->stringValue(); 781 return m_private->stringValue();
778 } 782 }
779 783
780 WebString WebAXObject::title() const 784 WebString WebAXObject::title() const
781 { 785 {
782 if (isDetached()) 786 if (isDetached())
783 return WebString(); 787 return WebString();
784 788
789 ASSERT(isLayoutClean(m_private->document()));
790
785 return m_private->title(); 791 return m_private->title();
786 } 792 }
787 793
788 WebAXObject WebAXObject::titleUIElement() const 794 WebAXObject WebAXObject::titleUIElement() const
789 { 795 {
790 if (isDetached()) 796 if (isDetached())
791 return WebAXObject(); 797 return WebAXObject();
792 798
793 if (!m_private->exposesTitleUIElement()) 799 if (!m_private->exposesTitleUIElement())
794 return WebAXObject(); 800 return WebAXObject();
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1169 m_private = object; 1175 m_private = object;
1170 return *this; 1176 return *this;
1171 } 1177 }
1172 1178
1173 WebAXObject::operator WTF::PassRefPtr<AXObject>() const 1179 WebAXObject::operator WTF::PassRefPtr<AXObject>() const
1174 { 1180 {
1175 return m_private.get(); 1181 return m_private.get();
1176 } 1182 }
1177 1183
1178 } // namespace blink 1184 } // namespace blink
OLDNEW
« no previous file with comments | « LayoutTests/accessibility/calling-accessibility-methods-with-pending-layout-causes-crash-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698