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

Side by Side Diff: Source/core/inspector/InspectorCSSAgent.cpp

Issue 347543002: DevTools: Extract CSS resources preloading from css agent to page agent controlled loader. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010, Google Inc. All rights reserved. 2 * Copyright (C) 2010, 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 10 matching lines...) Expand all
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */ 23 */
24 24
25 #include "config.h" 25 #include "config.h"
26 #include "core/inspector/InspectorCSSAgent.h" 26 #include "core/inspector/InspectorCSSAgent.h"
27 27
28 #include "bindings/v8/ExceptionState.h" 28 #include "bindings/v8/ExceptionState.h"
29 #include "bindings/v8/ExceptionStatePlaceholder.h" 29 #include "bindings/v8/ExceptionStatePlaceholder.h"
30 #include "core/CSSPropertyNames.h" 30 #include "core/CSSPropertyNames.h"
31 #include "core/FetchInitiatorTypeNames.h"
32 #include "core/InspectorTypeBuilder.h" 31 #include "core/InspectorTypeBuilder.h"
33 #include "core/StylePropertyShorthand.h" 32 #include "core/StylePropertyShorthand.h"
34 #include "core/css/CSSComputedStyleDeclaration.h" 33 #include "core/css/CSSComputedStyleDeclaration.h"
35 #include "core/css/CSSDefaultStyleSheets.h" 34 #include "core/css/CSSDefaultStyleSheets.h"
36 #include "core/css/CSSImportRule.h" 35 #include "core/css/CSSImportRule.h"
37 #include "core/css/CSSMediaRule.h" 36 #include "core/css/CSSMediaRule.h"
38 #include "core/css/CSSRule.h" 37 #include "core/css/CSSRule.h"
39 #include "core/css/CSSRuleList.h" 38 #include "core/css/CSSRuleList.h"
40 #include "core/css/CSSStyleRule.h" 39 #include "core/css/CSSStyleRule.h"
41 #include "core/css/CSSStyleSheet.h" 40 #include "core/css/CSSStyleSheet.h"
42 #include "core/css/MediaList.h" 41 #include "core/css/MediaList.h"
43 #include "core/css/MediaQuery.h" 42 #include "core/css/MediaQuery.h"
44 #include "core/css/StylePropertySet.h" 43 #include "core/css/StylePropertySet.h"
45 #include "core/css/StyleRule.h" 44 #include "core/css/StyleRule.h"
46 #include "core/css/StyleSheet.h" 45 #include "core/css/StyleSheet.h"
47 #include "core/css/StyleSheetContents.h" 46 #include "core/css/StyleSheetContents.h"
48 #include "core/css/StyleSheetList.h" 47 #include "core/css/StyleSheetList.h"
49 #include "core/css/resolver/StyleResolver.h" 48 #include "core/css/resolver/StyleResolver.h"
50 #include "core/dom/Node.h" 49 #include "core/dom/Node.h"
51 #include "core/dom/NodeList.h" 50 #include "core/dom/NodeList.h"
52 #include "core/fetch/CSSStyleSheetResource.h"
53 #include "core/fetch/ResourceClient.h"
54 #include "core/fetch/ResourceFetcher.h"
55 #include "core/fetch/StyleSheetResourceClient.h"
56 #include "core/frame/LocalFrame.h" 51 #include "core/frame/LocalFrame.h"
57 #include "core/html/HTMLHeadElement.h" 52 #include "core/html/HTMLHeadElement.h"
53 #include "core/html/VoidCallback.h"
58 #include "core/inspector/InspectorHistory.h" 54 #include "core/inspector/InspectorHistory.h"
59 #include "core/inspector/InspectorPageAgent.h" 55 #include "core/inspector/InspectorPageAgent.h"
60 #include "core/inspector/InspectorResourceAgent.h" 56 #include "core/inspector/InspectorResourceAgent.h"
57 #include "core/inspector/InspectorResourceContentLoader.h"
61 #include "core/inspector/InspectorState.h" 58 #include "core/inspector/InspectorState.h"
62 #include "core/inspector/InstrumentingAgents.h" 59 #include "core/inspector/InstrumentingAgents.h"
63 #include "core/loader/DocumentLoader.h" 60 #include "core/loader/DocumentLoader.h"
64 #include "core/page/Page.h" 61 #include "core/page/Page.h"
65 #include "core/rendering/InlineTextBox.h" 62 #include "core/rendering/InlineTextBox.h"
66 #include "core/rendering/RenderObject.h" 63 #include "core/rendering/RenderObject.h"
67 #include "core/rendering/RenderText.h" 64 #include "core/rendering/RenderText.h"
68 #include "core/rendering/RenderTextFragment.h" 65 #include "core/rendering/RenderTextFragment.h"
69 #include "platform/fonts/Font.h" 66 #include "platform/fonts/Font.h"
70 #include "platform/fonts/GlyphBuffer.h" 67 #include "platform/fonts/GlyphBuffer.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 118
122 class InspectorCSSAgent::StyleSheetAction : public InspectorHistory::Action { 119 class InspectorCSSAgent::StyleSheetAction : public InspectorHistory::Action {
123 WTF_MAKE_NONCOPYABLE(StyleSheetAction); 120 WTF_MAKE_NONCOPYABLE(StyleSheetAction);
124 public: 121 public:
125 StyleSheetAction(const String& name) 122 StyleSheetAction(const String& name)
126 : InspectorHistory::Action(name) 123 : InspectorHistory::Action(name)
127 { 124 {
128 } 125 }
129 }; 126 };
130 127
131 class InspectorCSSAgent::EnableResourceClient FINAL : public StyleSheetResourceC lient { 128 class InspectorCSSAgent::InspectorResourceContentLoaderCallback FINAL : public V oidCallback {
132 public: 129 public:
133 EnableResourceClient(InspectorCSSAgent*, const Vector<InspectorStyleSheet*>& , PassRefPtr<EnableCallback>); 130 InspectorResourceContentLoaderCallback(InspectorCSSAgent*, PassRefPtr<Enable Callback>);
134 131 virtual void handleEvent() OVERRIDE;
135 virtual void setCSSStyleSheet(const String&, const KURL&, const String&, con st CSSStyleSheetResource*) OVERRIDE;
136 132
137 private: 133 private:
134 InspectorCSSAgent* m_cssAgent;
138 RefPtr<EnableCallback> m_callback; 135 RefPtr<EnableCallback> m_callback;
139 InspectorCSSAgent* m_cssAgent;
140 int m_pendingResources;
141 Vector<InspectorStyleSheet*> m_styleSheets;
142 }; 136 };
143 137
144 InspectorCSSAgent::EnableResourceClient::EnableResourceClient(InspectorCSSAgent* cssAgent, const Vector<InspectorStyleSheet*>& styleSheets, PassRefPtr<EnableCal lback> callback) 138 InspectorCSSAgent::InspectorResourceContentLoaderCallback::InspectorResourceCont entLoaderCallback(InspectorCSSAgent* cssAgent, PassRefPtr<EnableCallback> callba ck)
145 : m_callback(callback) 139 : m_cssAgent(cssAgent)
146 , m_cssAgent(cssAgent) 140 , m_callback(callback)
147 , m_pendingResources(styleSheets.size())
148 , m_styleSheets(styleSheets)
149 { 141 {
150 for (size_t i = 0; i < styleSheets.size(); ++i) {
151 InspectorStyleSheet* styleSheet = styleSheets.at(i);
152 Document* document = styleSheet->ownerDocument();
153 FetchRequest request(ResourceRequest(styleSheet->finalURL()), FetchIniti atorTypeNames::internal);
154 ResourcePtr<Resource> resource = document->fetcher()->fetchCSSStyleSheet (request);
155 resource->addClient(this);
156 }
157 } 142 }
158 143
159 void InspectorCSSAgent::EnableResourceClient::setCSSStyleSheet(const String&, co nst KURL& url, const String&, const CSSStyleSheetResource* resource) 144 void InspectorCSSAgent::InspectorResourceContentLoaderCallback::handleEvent()
160 { 145 {
161 const_cast<CSSStyleSheetResource*>(resource)->removeClient(this); 146 // enable always succeeds.
162 --m_pendingResources; 147 if (!m_callback->isActive())
163 if (m_pendingResources)
164 return; 148 return;
165 149
166 // enable always succeeds. 150 m_cssAgent->wasEnabled();
167 if (m_callback->isActive()) 151 m_callback->sendSuccess();
168 m_cssAgent->wasEnabled(m_callback.release());
169 delete this;
170 } 152 }
171 153
172 class InspectorCSSAgent::SetStyleSheetTextAction FINAL : public InspectorCSSAgen t::StyleSheetAction { 154 class InspectorCSSAgent::SetStyleSheetTextAction FINAL : public InspectorCSSAgen t::StyleSheetAction {
173 WTF_MAKE_NONCOPYABLE(SetStyleSheetTextAction); 155 WTF_MAKE_NONCOPYABLE(SetStyleSheetTextAction);
174 public: 156 public:
175 SetStyleSheetTextAction(InspectorStyleSheetBase* styleSheet, const String& t ext) 157 SetStyleSheetTextAction(InspectorStyleSheetBase* styleSheet, const String& t ext)
176 : InspectorCSSAgent::StyleSheetAction("SetStyleSheetText") 158 : InspectorCSSAgent::StyleSheetAction("SetStyleSheetText")
177 , m_styleSheet(styleSheet) 159 , m_styleSheet(styleSheet)
178 , m_text(text) 160 , m_text(text)
179 { 161 {
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 376
395 void InspectorCSSAgent::discardAgent() 377 void InspectorCSSAgent::discardAgent()
396 { 378 {
397 m_domAgent->setDOMListener(0); 379 m_domAgent->setDOMListener(0);
398 m_domAgent = 0; 380 m_domAgent = 0;
399 } 381 }
400 382
401 void InspectorCSSAgent::restore() 383 void InspectorCSSAgent::restore()
402 { 384 {
403 if (m_state->getBoolean(CSSAgentState::cssAgentEnabled)) 385 if (m_state->getBoolean(CSSAgentState::cssAgentEnabled))
404 wasEnabled(nullptr); 386 wasEnabled();
405 } 387 }
406 388
407 void InspectorCSSAgent::flushPendingFrontendMessages() 389 void InspectorCSSAgent::flushPendingFrontendMessages()
408 { 390 {
409 if (!m_invalidatedDocuments.size()) 391 if (!m_invalidatedDocuments.size())
410 return; 392 return;
411 HashSet<Document*> invalidatedDocuments; 393 HashSet<Document*> invalidatedDocuments;
412 m_invalidatedDocuments.swap(&invalidatedDocuments); 394 m_invalidatedDocuments.swap(&invalidatedDocuments);
413 for (HashSet<Document*>::iterator it = invalidatedDocuments.begin(); it != i nvalidatedDocuments.end(); ++it) 395 for (HashSet<Document*>::iterator it = invalidatedDocuments.begin(); it != i nvalidatedDocuments.end(); ++it)
414 updateActiveStyleSheets(*it, ExistingFrontendRefresh); 396 updateActiveStyleSheets(*it, ExistingFrontendRefresh);
(...skipping 12 matching lines...) Expand all
427 } 409 }
428 410
429 void InspectorCSSAgent::resetNonPersistentData() 411 void InspectorCSSAgent::resetNonPersistentData()
430 { 412 {
431 resetPseudoStates(); 413 resetPseudoStates();
432 } 414 }
433 415
434 void InspectorCSSAgent::enable(ErrorString*, PassRefPtr<EnableCallback> prpCallb ack) 416 void InspectorCSSAgent::enable(ErrorString*, PassRefPtr<EnableCallback> prpCallb ack)
435 { 417 {
436 m_state->setBoolean(CSSAgentState::cssAgentEnabled, true); 418 m_state->setBoolean(CSSAgentState::cssAgentEnabled, true);
437 419 if (!m_pageAgent->resourceContentLoader()) {
438 Vector<InspectorStyleSheet*> styleSheets; 420 wasEnabled();
439 collectAllStyleSheets(styleSheets); 421 prpCallback->sendSuccess();
440
441 // Re-issue stylesheet requets for resources that are no longer in memory ca che.
442 Vector<InspectorStyleSheet*> styleSheetsToFetch;
443 HashSet<String> urlsToFetch;
444 for (size_t i = 0; i < styleSheets.size(); ++i) {
445 InspectorStyleSheet* styleSheet = styleSheets.at(i);
446 String url = styleSheet->finalURL();
447 if (urlsToFetch.contains(url))
448 continue;
449 CSSStyleSheet* pageStyleSheet = styleSheet->pageStyleSheet();
450 if (pageStyleSheet->isInline() || !pageStyleSheet->contents()->loadCompl eted())
451 continue;
452 Document* document = styleSheet->ownerDocument();
453 if (!document)
454 continue;
455 Resource* cachedResource = document->fetcher()->cachedResource(document- >completeURL(url));
456 if (cachedResource)
457 continue;
458 urlsToFetch.add(styleSheet->finalURL());
459 styleSheetsToFetch.append(styleSheet);
460 }
461
462 if (styleSheetsToFetch.isEmpty()) {
463 wasEnabled(prpCallback);
464 return; 422 return;
465 } 423 }
466 new EnableResourceClient(this, styleSheetsToFetch, prpCallback); 424 m_pageAgent->resourceContentLoader()->addListener(adoptPtr(new InspectorCSSA gent::InspectorResourceContentLoaderCallback(this, prpCallback)));
467 } 425 }
468 426
469 void InspectorCSSAgent::wasEnabled(PassRefPtr<EnableCallback> callback) 427 void InspectorCSSAgent::wasEnabled()
470 { 428 {
471 if (!m_state->getBoolean(CSSAgentState::cssAgentEnabled)) { 429 if (!m_state->getBoolean(CSSAgentState::cssAgentEnabled)) {
472 // We were disabled while fetching resources. 430 // We were disabled while fetching resources.
473 return; 431 return;
474 } 432 }
475 433
476 m_instrumentingAgents->setInspectorCSSAgent(this); 434 m_instrumentingAgents->setInspectorCSSAgent(this);
477 Vector<Document*> documents = m_domAgent->documents(); 435 Vector<Document*> documents = m_domAgent->documents();
478 for (Vector<Document*>::iterator it = documents.begin(); it != documents.end (); ++it) 436 for (Vector<Document*>::iterator it = documents.begin(); it != documents.end (); ++it)
479 updateActiveStyleSheets(*it, InitialFrontendLoad); 437 updateActiveStyleSheets(*it, InitialFrontendLoad);
480
481 if (callback)
482 callback->sendSuccess();
483 } 438 }
484 439
485 void InspectorCSSAgent::disable(ErrorString*) 440 void InspectorCSSAgent::disable(ErrorString*)
486 { 441 {
487 reset(); 442 reset();
488 m_instrumentingAgents->setInspectorCSSAgent(0); 443 m_instrumentingAgents->setInspectorCSSAgent(0);
489 m_state->setBoolean(CSSAgentState::cssAgentEnabled, false); 444 m_state->setBoolean(CSSAgentState::cssAgentEnabled, false);
490 } 445 }
491 446
492 void InspectorCSSAgent::didCommitLoadForMainFrame() 447 void InspectorCSSAgent::didCommitLoadForMainFrame()
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 if (styleSheetEditInProgress()) 494 if (styleSheetEditInProgress())
540 return; 495 return;
541 m_invalidatedDocuments.add(document); 496 m_invalidatedDocuments.add(document);
542 if (m_creatingViaInspectorStyleSheet) 497 if (m_creatingViaInspectorStyleSheet)
543 flushPendingFrontendMessages(); 498 flushPendingFrontendMessages();
544 } 499 }
545 500
546 void InspectorCSSAgent::updateActiveStyleSheets(Document* document, StyleSheetsU pdateType styleSheetsUpdateType) 501 void InspectorCSSAgent::updateActiveStyleSheets(Document* document, StyleSheetsU pdateType styleSheetsUpdateType)
547 { 502 {
548 Vector<CSSStyleSheet*> newSheetsVector; 503 Vector<CSSStyleSheet*> newSheetsVector;
549 collectAllDocumentStyleSheets(document, newSheetsVector); 504 InspectorCSSAgent::collectAllDocumentStyleSheets(document, newSheetsVector);
550 setActiveStyleSheets(document, newSheetsVector, styleSheetsUpdateType); 505 setActiveStyleSheets(document, newSheetsVector, styleSheetsUpdateType);
551 } 506 }
552 507
553 void InspectorCSSAgent::setActiveStyleSheets(Document* document, const Vector<CS SStyleSheet*>& allSheetsVector, StyleSheetsUpdateType styleSheetsUpdateType) 508 void InspectorCSSAgent::setActiveStyleSheets(Document* document, const Vector<CS SStyleSheet*>& allSheetsVector, StyleSheetsUpdateType styleSheetsUpdateType)
554 { 509 {
555 bool isInitialFrontendLoad = styleSheetsUpdateType == InitialFrontendLoad; 510 bool isInitialFrontendLoad = styleSheetsUpdateType == InitialFrontendLoad;
556 511
557 HashSet<CSSStyleSheet*>* documentCSSStyleSheets = m_documentToCSSStyleSheets .get(document); 512 HashSet<CSSStyleSheet*>* documentCSSStyleSheets = m_documentToCSSStyleSheets .get(document);
558 if (!documentCSSStyleSheets) { 513 if (!documentCSSStyleSheets) {
559 documentCSSStyleSheets = new HashSet<CSSStyleSheet*>(); 514 documentCSSStyleSheets = new HashSet<CSSStyleSheet*>();
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 *errorString = "No node with given id found"; 1116 *errorString = "No node with given id found";
1162 return 0; 1117 return 0;
1163 } 1118 }
1164 if (!node->isElementNode()) { 1119 if (!node->isElementNode()) {
1165 *errorString = "Not an element node"; 1120 *errorString = "Not an element node";
1166 return 0; 1121 return 0;
1167 } 1122 }
1168 return toElement(node); 1123 return toElement(node);
1169 } 1124 }
1170 1125
1171 void InspectorCSSAgent::collectAllStyleSheets(Vector<InspectorStyleSheet*>& resu lt) 1126 // static
1172 {
1173 Vector<CSSStyleSheet*> cssStyleSheets;
1174 Vector<Document*> documents = m_domAgent->documents();
1175 for (Vector<Document*>::iterator it = documents.begin(); it != documents.end (); ++it)
1176 collectAllDocumentStyleSheets(*it, cssStyleSheets);
1177 for (Vector<CSSStyleSheet*>::iterator it = cssStyleSheets.begin(); it != css StyleSheets.end(); ++it)
1178 result.append(bindStyleSheet(*it));
1179 }
1180
1181 void InspectorCSSAgent::collectAllDocumentStyleSheets(Document* document, Vector <CSSStyleSheet*>& result) 1127 void InspectorCSSAgent::collectAllDocumentStyleSheets(Document* document, Vector <CSSStyleSheet*>& result)
1182 { 1128 {
1183 const WillBeHeapVector<RefPtrWillBeMember<CSSStyleSheet> > activeStyleSheets = document->styleEngine()->activeStyleSheetsForInspector(); 1129 const WillBeHeapVector<RefPtrWillBeMember<CSSStyleSheet> > activeStyleSheets = document->styleEngine()->activeStyleSheetsForInspector();
1184 for (WillBeHeapVector<RefPtrWillBeMember<CSSStyleSheet> >::const_iterator it = activeStyleSheets.begin(); it != activeStyleSheets.end(); ++it) { 1130 for (WillBeHeapVector<RefPtrWillBeMember<CSSStyleSheet> >::const_iterator it = activeStyleSheets.begin(); it != activeStyleSheets.end(); ++it) {
1185 CSSStyleSheet* styleSheet = it->get(); 1131 CSSStyleSheet* styleSheet = it->get();
1186 collectStyleSheets(styleSheet, result); 1132 InspectorCSSAgent::collectStyleSheets(styleSheet, result);
1187 } 1133 }
1188 } 1134 }
1189 1135
1136 // static
1190 void InspectorCSSAgent::collectStyleSheets(CSSStyleSheet* styleSheet, Vector<CSS StyleSheet*>& result) 1137 void InspectorCSSAgent::collectStyleSheets(CSSStyleSheet* styleSheet, Vector<CSS StyleSheet*>& result)
1191 { 1138 {
1192 result.append(styleSheet); 1139 result.append(styleSheet);
1193 for (unsigned i = 0, size = styleSheet->length(); i < size; ++i) { 1140 for (unsigned i = 0, size = styleSheet->length(); i < size; ++i) {
1194 CSSRule* rule = styleSheet->item(i); 1141 CSSRule* rule = styleSheet->item(i);
1195 if (rule->type() == CSSRule::IMPORT_RULE) { 1142 if (rule->type() == CSSRule::IMPORT_RULE) {
1196 CSSStyleSheet* importedStyleSheet = toCSSImportRule(rule)->styleShee t(); 1143 CSSStyleSheet* importedStyleSheet = toCSSImportRule(rule)->styleShee t();
1197 if (importedStyleSheet) 1144 if (importedStyleSheet)
1198 collectStyleSheets(importedStyleSheet, result); 1145 InspectorCSSAgent::collectStyleSheets(importedStyleSheet, result );
1199 } 1146 }
1200 } 1147 }
1201 } 1148 }
1202 1149
1203 InspectorStyleSheet* InspectorCSSAgent::bindStyleSheet(CSSStyleSheet* styleSheet ) 1150 InspectorStyleSheet* InspectorCSSAgent::bindStyleSheet(CSSStyleSheet* styleSheet )
1204 { 1151 {
1205 RefPtr<InspectorStyleSheet> inspectorStyleSheet = m_cssStyleSheetToInspector StyleSheet.get(styleSheet); 1152 RefPtr<InspectorStyleSheet> inspectorStyleSheet = m_cssStyleSheetToInspector StyleSheet.get(styleSheet);
1206 if (!inspectorStyleSheet) { 1153 if (!inspectorStyleSheet) {
1207 String id = String::number(m_lastStyleSheetId++); 1154 String id = String::number(m_lastStyleSheetId++);
1208 Document* document = styleSheet->ownerDocument(); 1155 Document* document = styleSheet->ownerDocument();
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
1446 documentsToChange.add(element->ownerDocument()); 1393 documentsToChange.add(element->ownerDocument());
1447 } 1394 }
1448 1395
1449 m_nodeIdToForcedPseudoState.clear(); 1396 m_nodeIdToForcedPseudoState.clear();
1450 for (HashSet<Document*>::iterator it = documentsToChange.begin(), end = docu mentsToChange.end(); it != end; ++it) 1397 for (HashSet<Document*>::iterator it = documentsToChange.begin(), end = docu mentsToChange.end(); it != end; ++it)
1451 (*it)->setNeedsStyleRecalc(SubtreeStyleChange); 1398 (*it)->setNeedsStyleRecalc(SubtreeStyleChange);
1452 } 1399 }
1453 1400
1454 } // namespace WebCore 1401 } // namespace WebCore
1455 1402
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698