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

Side by Side Diff: webkit/pending/Node.cpp

Issue 4097: Implement better JS exception handling by abstracting KJS::ExecState into an ... (Closed) Base URL: svn://chrome-svn/chrome/branches/chrome_webkit_merge_branch/
Patch Set: '' Created 12 years, 2 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
« no previous file with comments | « webkit/pending/Node.h ('k') | webkit/pending/NodeFilter.h » ('j') | 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) 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 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
6 * Copyright (C) 2007 Trolltech ASA 6 * Copyright (C) 2007 Trolltech ASA
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 21 matching lines...) Expand all
32 #include "CSSStyleSelector.h" 32 #include "CSSStyleSelector.h"
33 #include "CSSStyleSheet.h" 33 #include "CSSStyleSheet.h"
34 #include "CString.h" 34 #include "CString.h"
35 #include "ChildNodeList.h" 35 #include "ChildNodeList.h"
36 #include "ClassNodeList.h" 36 #include "ClassNodeList.h"
37 #include "DOMImplementation.h" 37 #include "DOMImplementation.h"
38 #include "Document.h" 38 #include "Document.h"
39 #include "DynamicNodeList.h" 39 #include "DynamicNodeList.h"
40 #include "Element.h" 40 #include "Element.h"
41 #include "ExceptionCode.h" 41 #include "ExceptionCode.h"
42 #include "ExceptionContext.h"
42 #include "Frame.h" 43 #include "Frame.h"
43 #include "HTMLNames.h" 44 #include "HTMLNames.h"
44 #include "Logging.h" 45 #include "Logging.h"
45 #include "NSResolver.h" 46 #include "NSResolver.h"
46 #include "NameNodeList.h" 47 #include "NameNodeList.h"
47 #include "NamedAttrMap.h" 48 #include "NamedAttrMap.h"
48 #include "ProcessingInstruction.h" 49 #include "ProcessingInstruction.h"
49 #include "RenderObject.h" 50 #include "RenderObject.h"
50 #include "ScriptController.h" 51 #include "ScriptController.h"
51 #include "SelectorNodeList.h" 52 #include "SelectorNodeList.h"
52 #include "StringBuilder.h" 53 #include "StringBuilder.h"
53 #include "TagNodeList.h" 54 #include "TagNodeList.h"
54 #include "Text.h" 55 #include "Text.h"
55 #include "XMLNames.h" 56 #include "XMLNames.h"
56 #include "htmlediting.h" 57 #include "htmlediting.h"
57 #include <wtf/RefCountedLeakCounter.h> 58 #include <wtf/RefCountedLeakCounter.h>
58 59
59 #if USE(JSC) 60 #if USE(JSC)
60 #include "JSDOMBinding.h"
61 #include <kjs/ExecState.h>
62 #include <kjs/JSLock.h> 61 #include <kjs/JSLock.h>
63 #endif 62 #endif
64 63
65 namespace WebCore { 64 namespace WebCore {
66 65
67 using namespace HTMLNames; 66 using namespace HTMLNames;
68 67
69 struct NodeListsNodeData { 68 struct NodeListsNodeData {
70 typedef HashSet<DynamicNodeList*> NodeListSet; 69 typedef HashSet<DynamicNodeList*> NodeListSet;
71 NodeListSet m_listsWithCaches; 70 NodeListSet m_listsWithCaches;
(...skipping 1192 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 bool operator()(CSSSelector* selector) 1263 bool operator()(CSSSelector* selector)
1265 { 1264 {
1266 if (selector->hasTag() && selector->m_tag.prefix() != nullAtom && select or->m_tag.prefix() != starAtom) 1265 if (selector->hasTag() && selector->m_tag.prefix() != nullAtom && select or->m_tag.prefix() != starAtom)
1267 return true; 1266 return true;
1268 if (selector->hasAttribute() && selector->m_attr.prefix() != nullAtom && selector->m_attr.prefix() != starAtom) 1267 if (selector->hasAttribute() && selector->m_attr.prefix() != nullAtom && selector->m_attr.prefix() != starAtom)
1269 return true; 1268 return true;
1270 return false; 1269 return false;
1271 } 1270 }
1272 }; 1271 };
1273 1272
1274 #if USE(JSC)
1275 class ResolveNamespaceFunctor { 1273 class ResolveNamespaceFunctor {
1276 public: 1274 public:
1277 ResolveNamespaceFunctor(NSResolver* resolver, ExceptionCode& ec, KJS::ExecSt ate* exec) 1275 ResolveNamespaceFunctor(NSResolver* resolver, ExceptionCode& ec, ExceptionCo ntext* exec)
1278 : m_resolver(resolver) 1276 : m_resolver(resolver)
1279 , m_exceptionCode(ec) 1277 , m_exceptionCode(ec)
1280 , m_exec(exec) 1278 , m_exec(exec)
1281 { 1279 {
1282 } 1280 }
1283 1281
1284 bool operator()(CSSSelector* selector) 1282 bool operator()(CSSSelector* selector)
1285 { 1283 {
1286 if (selector->hasTag() && selector->m_tag.prefix() != nullAtom && select or->m_tag.prefix() != starAtom) { 1284 if (selector->hasTag() && selector->m_tag.prefix() != nullAtom && select or->m_tag.prefix() != starAtom) {
1287 String resolvedNamespaceURI = m_resolver->lookupNamespaceURI(m_exec, selector->m_tag.prefix()); 1285 String resolvedNamespaceURI = m_resolver->lookupNamespaceURI(m_exec, selector->m_tag.prefix());
(...skipping 17 matching lines...) Expand all
1305 QualifiedName newQualifiedName(selector->m_attr.prefix(), selector-> m_attr.localName(), resolvedNamespaceURI); 1303 QualifiedName newQualifiedName(selector->m_attr.prefix(), selector-> m_attr.localName(), resolvedNamespaceURI);
1306 selector->m_attr = newQualifiedName; 1304 selector->m_attr = newQualifiedName;
1307 } 1305 }
1308 1306
1309 return false; 1307 return false;
1310 } 1308 }
1311 1309
1312 private: 1310 private:
1313 NSResolver* m_resolver; 1311 NSResolver* m_resolver;
1314 ExceptionCode& m_exceptionCode; 1312 ExceptionCode& m_exceptionCode;
1315 KJS::ExecState* m_exec; 1313 ExceptionContext* m_exec;
1316 }; 1314 };
1317 1315
1318 static bool selectorNeedsNamespaceResolution(CSSSelector* currentSelector) 1316 static bool selectorNeedsNamespaceResolution(CSSSelector* currentSelector)
1319 { 1317 {
1320 SelectorNeedsNamespaceResolutionFunctor functor; 1318 SelectorNeedsNamespaceResolutionFunctor functor;
1321 return forEachSelector(functor, currentSelector); 1319 return forEachSelector(functor, currentSelector);
1322 } 1320 }
1323 1321
1324 static bool resolveNamespacesForSelector(CSSSelector* currentSelector, NSResolve r* resolver, ExceptionCode& ec, KJS::ExecState* exec) 1322 static bool resolveNamespacesForSelector(CSSSelector* currentSelector, NSResolve r* resolver, ExceptionCode& ec, ExceptionContext* exec)
1325 { 1323 {
1326 ResolveNamespaceFunctor functor(resolver, ec, exec); 1324 ResolveNamespaceFunctor functor(resolver, ec, exec);
1327 return forEachSelector(functor, currentSelector); 1325 return forEachSelector(functor, currentSelector);
1328 } 1326 }
1329 1327
1330 PassRefPtr<Element> Node::querySelector(const String& selectors, ExceptionCode& ec) 1328 PassRefPtr<Element> Node::querySelector(const String& selectors, ExceptionCode& ec)
1331 { 1329 {
1332 return querySelector(selectors, 0, ec, execStateFromNode(this)); 1330 return querySelector(selectors, 0, ec, ExceptionContext::createFromNode(this ));
1333 } 1331 }
1334 1332
1335 PassRefPtr<NodeList> Node::querySelectorAll(const String& selectors, ExceptionCo de& ec) 1333 PassRefPtr<NodeList> Node::querySelectorAll(const String& selectors, ExceptionCo de& ec)
1336 { 1334 {
1337 return querySelectorAll(selectors, 0, ec, execStateFromNode(this)); 1335 return querySelectorAll(selectors, 0, ec, ExceptionContext::createFromNode(t his));
1338 } 1336 }
1339 1337
1340 PassRefPtr<Element> Node::querySelector(const String& selectors, NSResolver* res olver, ExceptionCode& ec, KJS::ExecState* exec) 1338 PassRefPtr<Element> Node::querySelector(const String& selectors, NSResolver* res olver, ExceptionCode& ec, ExceptionContext* exec)
1341 { 1339 {
1342 if (selectors.isEmpty()) { 1340 if (selectors.isEmpty()) {
1343 ec = SYNTAX_ERR; 1341 ec = SYNTAX_ERR;
1344 return 0; 1342 return 0;
1345 } 1343 }
1346 bool strictParsing = !document()->inCompatMode(); 1344 bool strictParsing = !document()->inCompatMode();
1347 CSSParser p(strictParsing); 1345 CSSParser p(strictParsing);
1348 if (resolver) { 1346 if (resolver) {
1349 String defaultNamespace = resolver->lookupNamespaceURI(exec, String()); 1347 String defaultNamespace = resolver->lookupNamespaceURI(exec, String());
1350 if (exec && exec->hadException()) 1348 if (exec && exec->hadException())
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1390 for (CSSSelector* selector = querySelector.get(); selector; selector = selector->next()) { 1388 for (CSSSelector* selector = querySelector.get(); selector; selector = selector->next()) {
1391 if (selectorChecker.checkSelector(selector, element)) 1389 if (selectorChecker.checkSelector(selector, element))
1392 return element; 1390 return element;
1393 } 1391 }
1394 } 1392 }
1395 } 1393 }
1396 1394
1397 return 0; 1395 return 0;
1398 } 1396 }
1399 1397
1400 PassRefPtr<NodeList> Node::querySelectorAll(const String& selectors, NSResolver* resolver, ExceptionCode& ec, KJS::ExecState* exec) 1398 PassRefPtr<NodeList> Node::querySelectorAll(const String& selectors, NSResolver* resolver, ExceptionCode& ec, ExceptionContext* exec)
1401 { 1399 {
1402 if (selectors.isEmpty()) { 1400 if (selectors.isEmpty()) {
1403 ec = SYNTAX_ERR; 1401 ec = SYNTAX_ERR;
1404 return 0; 1402 return 0;
1405 } 1403 }
1406 bool strictParsing = !document()->inCompatMode(); 1404 bool strictParsing = !document()->inCompatMode();
1407 CSSParser p(strictParsing); 1405 CSSParser p(strictParsing);
1408 if (resolver) { 1406 if (resolver) {
1409 String defaultNamespace = resolver->lookupNamespaceURI(exec, String()); 1407 String defaultNamespace = resolver->lookupNamespaceURI(exec, String());
1410 if (exec && exec->hadException()) 1408 if (exec && exec->hadException())
(...skipping 16 matching lines...) Expand all
1427 // No NSResolver was passed, so throw a NAMESPACE_ERR if the selector in cludes any 1425 // No NSResolver was passed, so throw a NAMESPACE_ERR if the selector in cludes any
1428 // namespace prefixes. 1426 // namespace prefixes.
1429 if (selectorNeedsNamespaceResolution(querySelector.get())) { 1427 if (selectorNeedsNamespaceResolution(querySelector.get())) {
1430 ec = NAMESPACE_ERR; 1428 ec = NAMESPACE_ERR;
1431 return 0; 1429 return 0;
1432 } 1430 }
1433 } 1431 }
1434 1432
1435 return createSelectorNodeList(this, querySelector.get()); 1433 return createSelectorNodeList(this, querySelector.get());
1436 } 1434 }
1437 #endif // USE(JSC)
1438 1435
1439 Document *Node::ownerDocument() const 1436 Document *Node::ownerDocument() const
1440 { 1437 {
1441 Document *doc = document(); 1438 Document *doc = document();
1442 return doc == this ? 0 : doc; 1439 return doc == this ? 0 : doc;
1443 } 1440 }
1444 1441
1445 bool Node::hasAttributes() const 1442 bool Node::hasAttributes() const
1446 { 1443 {
1447 return false; 1444 return false;
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
2004 2001
2005 #ifndef NDEBUG 2002 #ifndef NDEBUG
2006 2003
2007 void showTree(const WebCore::Node* node) 2004 void showTree(const WebCore::Node* node)
2008 { 2005 {
2009 if (node) 2006 if (node)
2010 node->showTreeForThis(); 2007 node->showTreeForThis();
2011 } 2008 }
2012 2009
2013 #endif 2010 #endif
OLDNEW
« no previous file with comments | « webkit/pending/Node.h ('k') | webkit/pending/NodeFilter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698