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

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

Issue 436603003: Make Element::attributes() less error-prone and simplify call sites (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Take feedback into consideration 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 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 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 } 181 }
182 182
183 if (!oldNode->isElementNode()) 183 if (!oldNode->isElementNode())
184 return true; 184 return true;
185 185
186 // Patch attributes 186 // Patch attributes
187 Element* oldElement = toElement(oldNode); 187 Element* oldElement = toElement(oldNode);
188 Element* newElement = toElement(newNode); 188 Element* newElement = toElement(newNode);
189 if (oldDigest->m_attrsSHA1 != newDigest->m_attrsSHA1) { 189 if (oldDigest->m_attrsSHA1 != newDigest->m_attrsSHA1) {
190 // FIXME: Create a function in Element for removing all properties. Take in account whether did/willModifyAttribute are important. 190 // FIXME: Create a function in Element for removing all properties. Take in account whether did/willModifyAttribute are important.
191 if (oldElement->hasAttributesWithoutUpdate()) { 191 while (oldElement->attributesWithoutUpdate().size()) {
192 while (oldElement->attributes().size()) { 192 const Attribute& attribute = oldElement->attributesWithoutUpdate().a t(0);
193 const Attribute& attribute = oldElement->attributes().at(0); 193 if (!m_domEditor->removeAttribute(oldElement, attribute.localName(), exceptionState))
194 if (!m_domEditor->removeAttribute(oldElement, attribute.localNam e(), exceptionState)) 194 return false;
195 return false;
196 }
197 } 195 }
198 196
199 // FIXME: Create a function in Element for copying properties. cloneData FromElement() is close but not enough for this case. 197 // FIXME: Create a function in Element for copying properties. cloneData FromElement() is close but not enough for this case.
200 if (newElement->hasAttributesWithoutUpdate()) { 198 AttributeCollection attributes = newElement->attributesWithoutUpdate();
201 AttributeCollection attributes = newElement->attributes(); 199 AttributeCollection::const_iterator end = attributes.end();
202 AttributeCollection::const_iterator end = attributes.end(); 200 for (AttributeCollection::const_iterator it = attributes.begin(); it != end; ++it) {
203 for (AttributeCollection::const_iterator it = attributes.begin(); it != end; ++it) { 201 if (!m_domEditor->setAttribute(oldElement, it->name().localName(), i t->value(), exceptionState))
204 if (!m_domEditor->setAttribute(oldElement, it->name().localName( ), it->value(), exceptionState)) 202 return false;
205 return false;
206 }
207 } 203 }
208 } 204 }
209 205
210 bool result = innerPatchChildren(oldElement, oldDigest->m_children, newDiges t->m_children, exceptionState); 206 bool result = innerPatchChildren(oldElement, oldDigest->m_children, newDiges t->m_children, exceptionState);
211 m_unusedNodesMap.remove(newDigest->m_sha1); 207 m_unusedNodesMap.remove(newDigest->m_sha1);
212 return result; 208 return result;
213 } 209 }
214 210
215 pair<DOMPatchSupport::ResultMap, DOMPatchSupport::ResultMap> 211 pair<DOMPatchSupport::ResultMap, DOMPatchSupport::ResultMap>
216 DOMPatchSupport::diff(const Vector<OwnPtr<Digest> >& oldList, const Vector<OwnPt r<Digest> >& newList) 212 DOMPatchSupport::diff(const Vector<OwnPtr<Digest> >& oldList, const Vector<OwnPt r<Digest> >& newList)
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 if (node->isElementNode()) { 418 if (node->isElementNode()) {
423 Element& element = toElement(*node); 419 Element& element = toElement(*node);
424 Node* child = element.firstChild(); 420 Node* child = element.firstChild();
425 while (child) { 421 while (child) {
426 OwnPtr<Digest> childInfo = createDigest(child, unusedNodesMap); 422 OwnPtr<Digest> childInfo = createDigest(child, unusedNodesMap);
427 addStringToDigestor(digestor.get(), childInfo->m_sha1); 423 addStringToDigestor(digestor.get(), childInfo->m_sha1);
428 child = child->nextSibling(); 424 child = child->nextSibling();
429 digest->m_children.append(childInfo.release()); 425 digest->m_children.append(childInfo.release());
430 } 426 }
431 427
432 if (element.hasAttributesWithoutUpdate()) { 428 AttributeCollection attributes = element.attributesWithoutUpdate();
429 if (!attributes.isEmpty()) {
433 OwnPtr<blink::WebCryptoDigestor> attrsDigestor = createDigestor(Hash AlgorithmSha1); 430 OwnPtr<blink::WebCryptoDigestor> attrsDigestor = createDigestor(Hash AlgorithmSha1);
434 AttributeCollection attributes = element.attributes();
435 AttributeCollection::const_iterator end = attributes.end(); 431 AttributeCollection::const_iterator end = attributes.end();
436 for (AttributeCollection::const_iterator it = attributes.begin(); it != end; ++it) { 432 for (AttributeCollection::const_iterator it = attributes.begin(); it != end; ++it) {
437 addStringToDigestor(attrsDigestor.get(), it->name().toString()); 433 addStringToDigestor(attrsDigestor.get(), it->name().toString());
438 addStringToDigestor(attrsDigestor.get(), it->value().string()); 434 addStringToDigestor(attrsDigestor.get(), it->value().string());
439 } 435 }
440 finishDigestor(attrsDigestor.get(), digestResult); 436 finishDigestor(attrsDigestor.get(), digestResult);
441 digest->m_attrsSHA1 = base64Encode(reinterpret_cast<const char*>(dig estResult.data()), 10); 437 digest->m_attrsSHA1 = base64Encode(reinterpret_cast<const char*>(dig estResult.data()), 10);
442 addStringToDigestor(digestor.get(), digest->m_attrsSHA1); 438 addStringToDigestor(digestor.get(), digest->m_attrsSHA1);
443 digestResult.clear(); 439 digestResult.clear();
444 } 440 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 void DOMPatchSupport::dumpMap(const ResultMap& map, const String& name) 506 void DOMPatchSupport::dumpMap(const ResultMap& map, const String& name)
511 { 507 {
512 fprintf(stderr, "\n\n"); 508 fprintf(stderr, "\n\n");
513 for (size_t i = 0; i < map.size(); ++i) 509 for (size_t i = 0; i < map.size(); ++i)
514 fprintf(stderr, "%s[%lu]: %s (%p) - [%lu]\n", name.utf8().data(), i, map [i].first ? nodeName(map[i].first->m_node).utf8().data() : "", map[i].first, map [i].second); 510 fprintf(stderr, "%s[%lu]: %s (%p) - [%lu]\n", name.utf8().data(), i, map [i].first ? nodeName(map[i].first->m_node).utf8().data() : "", map[i].first, map [i].second);
515 } 511 }
516 #endif 512 #endif
517 513
518 } // namespace blink 514 } // namespace blink
519 515
OLDNEW
« no previous file with comments | « Source/core/html/parser/HTMLConstructionSite.cpp ('k') | Source/core/inspector/InspectorDOMAgent.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698