Changeset 139141 in webkit
- Timestamp:
- Jan 8, 2013, 5:43:54 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r139138 r139141 1 2013-01-08 Tony Gentilcore <tonyg@chromium.org> 2 3 Remove dependency on Document from HTMLConstructionSite::inQuirksMode() 4 https://bugs.webkit.org/show_bug.cgi?id=106375 5 6 Reviewed by Adam Barth. 7 8 This is another step towards removing main thread object dependencies 9 from the parser. 10 11 No new tests because no new functionality. 12 13 * dom/Document.h: 14 * html/HTMLDocument.cpp: 15 * html/HTMLDocument.h: 16 (HTMLDocument): 17 * html/parser/HTMLConstructionSite.cpp: 18 (WebCore::HTMLConstructionSite::HTMLConstructionSite): 19 (WebCore::HTMLConstructionSite::setDefaultCompatibilityMode): 20 (WebCore): 21 (WebCore::HTMLConstructionSite::setCompatibilityMode): 22 (WebCore::HTMLConstructionSite::setCompatibilityModeFromDoctype): 23 (WebCore::HTMLConstructionSite::insertDoctype): 24 (WebCore::HTMLConstructionSite::inQuirksMode): 25 * html/parser/HTMLConstructionSite.h: 26 (HTMLConstructionSite): 27 1 28 2013-01-08 Florin Malita <fmalita@chromium.org> 2 29 -
trunk/Source/WebCore/dom/Document.h
r139132 r139141 637 637 enum CompatibilityMode { QuirksMode, LimitedQuirksMode, NoQuirksMode }; 638 638 639 virtual void setCompatibilityModeFromDoctype() { }640 639 void setCompatibilityMode(CompatibilityMode m); 641 640 void lockCompatibilityMode() { m_compatibilityModeLocked = true; } -
trunk/Source/WebCore/html/HTMLDocument.cpp
r115215 r139141 333 333 } 334 334 335 void HTMLDocument::setCompatibilityModeFromDoctype()336 {337 // There are three possible compatibility modes:338 // Quirks - quirks mode emulates WinIE and NS4. CSS parsing is also relaxed in this mode, e.g., unit types can339 // be omitted from numbers.340 // Limited Quirks - This mode is identical to no-quirks mode except for its treatment of line-height in the inline box model.341 // No Quirks - no quirks apply. Web pages will obey the specifications to the letter.342 DocumentType* docType = doctype();343 if (!docType)344 return;345 346 // Check for Quirks Mode.347 const String& publicId = docType->publicId();348 if (docType->name() != "html"349 || publicId.startsWith("+//Silmaril//dtd html Pro v0r11 19970101//", false)350 || publicId.startsWith("-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//", false)351 || publicId.startsWith("-//AS//DTD HTML 3.0 asWedit + extensions//", false)352 || publicId.startsWith("-//IETF//DTD HTML 2.0 Level 1//", false)353 || publicId.startsWith("-//IETF//DTD HTML 2.0 Level 2//", false)354 || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict Level 1//", false)355 || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict Level 2//", false)356 || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict//", false)357 || publicId.startsWith("-//IETF//DTD HTML 2.0//", false)358 || publicId.startsWith("-//IETF//DTD HTML 2.1E//", false)359 || publicId.startsWith("-//IETF//DTD HTML 3.0//", false)360 || publicId.startsWith("-//IETF//DTD HTML 3.2 Final//", false)361 || publicId.startsWith("-//IETF//DTD HTML 3.2//", false)362 || publicId.startsWith("-//IETF//DTD HTML 3//", false)363 || publicId.startsWith("-//IETF//DTD HTML Level 0//", false)364 || publicId.startsWith("-//IETF//DTD HTML Level 1//", false)365 || publicId.startsWith("-//IETF//DTD HTML Level 2//", false)366 || publicId.startsWith("-//IETF//DTD HTML Level 3//", false)367 || publicId.startsWith("-//IETF//DTD HTML Strict Level 0//", false)368 || publicId.startsWith("-//IETF//DTD HTML Strict Level 1//", false)369 || publicId.startsWith("-//IETF//DTD HTML Strict Level 2//", false)370 || publicId.startsWith("-//IETF//DTD HTML Strict Level 3//", false)371 || publicId.startsWith("-//IETF//DTD HTML Strict//", false)372 || publicId.startsWith("-//IETF//DTD HTML//", false)373 || publicId.startsWith("-//Metrius//DTD Metrius Presentational//", false)374 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//", false)375 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 HTML//", false)376 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 Tables//", false)377 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//", false)378 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 HTML//", false)379 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 Tables//", false)380 || publicId.startsWith("-//Netscape Comm. Corp.//DTD HTML//", false)381 || publicId.startsWith("-//Netscape Comm. Corp.//DTD Strict HTML//", false)382 || publicId.startsWith("-//O'Reilly and Associates//DTD HTML 2.0//", false)383 || publicId.startsWith("-//O'Reilly and Associates//DTD HTML Extended 1.0//", false)384 || publicId.startsWith("-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//", false)385 || publicId.startsWith("-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//", false)386 || publicId.startsWith("-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//", false)387 || publicId.startsWith("-//Spyglass//DTD HTML 2.0 Extended//", false)388 || publicId.startsWith("-//SQ//DTD HTML 2.0 HoTMetaL + extensions//", false)389 || publicId.startsWith("-//Sun Microsystems Corp.//DTD HotJava HTML//", false)390 || publicId.startsWith("-//Sun Microsystems Corp.//DTD HotJava Strict HTML//", false)391 || publicId.startsWith("-//W3C//DTD HTML 3 1995-03-24//", false)392 || publicId.startsWith("-//W3C//DTD HTML 3.2 Draft//", false)393 || publicId.startsWith("-//W3C//DTD HTML 3.2 Final//", false)394 || publicId.startsWith("-//W3C//DTD HTML 3.2//", false)395 || publicId.startsWith("-//W3C//DTD HTML 3.2S Draft//", false)396 || publicId.startsWith("-//W3C//DTD HTML 4.0 Frameset//", false)397 || publicId.startsWith("-//W3C//DTD HTML 4.0 Transitional//", false)398 || publicId.startsWith("-//W3C//DTD HTML Experimental 19960712//", false)399 || publicId.startsWith("-//W3C//DTD HTML Experimental 970421//", false)400 || publicId.startsWith("-//W3C//DTD W3 HTML//", false)401 || publicId.startsWith("-//W3O//DTD W3 HTML 3.0//", false)402 || equalIgnoringCase(publicId, "-//W3O//DTD W3 HTML Strict 3.0//EN//")403 || publicId.startsWith("-//WebTechs//DTD Mozilla HTML 2.0//", false)404 || publicId.startsWith("-//WebTechs//DTD Mozilla HTML//", false)405 || equalIgnoringCase(publicId, "-/W3C/DTD HTML 4.0 Transitional/EN")406 || equalIgnoringCase(publicId, "HTML")407 || equalIgnoringCase(docType->systemId(), "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd")408 || (docType->systemId().isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Frameset//", false))409 || (docType->systemId().isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Transitional//", false))) {410 setCompatibilityMode(QuirksMode);411 return;412 }413 414 // Check for Limited Quirks Mode.415 if (publicId.startsWith("-//W3C//DTD XHTML 1.0 Frameset//", false)416 || publicId.startsWith("-//W3C//DTD XHTML 1.0 Transitional//", false)417 || (!docType->systemId().isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Frameset//", false))418 || (!docType->systemId().isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Transitional//", false))) {419 setCompatibilityMode(LimitedQuirksMode);420 return;421 }422 423 // Otherwise we are No Quirks Mode.424 setCompatibilityMode(NoQuirksMode);425 return;426 }427 428 335 void HTMLDocument::clear() 429 336 { -
trunk/Source/WebCore/html/HTMLDocument.h
r78314 r139141 50 50 String designMode() const; 51 51 void setDesignMode(const String&); 52 53 virtual void setCompatibilityModeFromDoctype();54 52 55 53 Element* activeElement(); -
trunk/Source/WebCore/html/parser/HTMLConstructionSite.cpp
r139111 r139141 145 145 , m_redirectAttachToFosterParent(false) 146 146 , m_maximumDOMTreeDepth(maximumDOMTreeDepth) 147 { 147 , m_inQuirksMode(document->inQuirksMode()) 148 { 149 ASSERT(m_document->isHTMLDocument()); 148 150 } 149 151 … … 155 157 , m_redirectAttachToFosterParent(false) 156 158 , m_maximumDOMTreeDepth(maximumDOMTreeDepth) 157 { 159 , m_inQuirksMode(fragment->document()->inQuirksMode()) 160 { 161 ASSERT(m_document->isHTMLDocument()); 158 162 } 159 163 … … 232 236 if (m_document->isSrcdocDocument()) 233 237 return; 234 m_document->setCompatibilityMode(Document::QuirksMode); 238 setCompatibilityMode(Document::QuirksMode); 239 } 240 241 void HTMLConstructionSite::setCompatibilityMode(Document::CompatibilityMode mode) 242 { 243 m_inQuirksMode = (mode == Document::QuirksMode); 244 m_document->setCompatibilityMode(mode); 245 } 246 247 void HTMLConstructionSite::setCompatibilityModeFromDoctype(const String& name, const String& publicId, const String& systemId) 248 { 249 // There are three possible compatibility modes: 250 // Quirks - quirks mode emulates WinIE and NS4. CSS parsing is also relaxed in this mode, e.g., unit types can 251 // be omitted from numbers. 252 // Limited Quirks - This mode is identical to no-quirks mode except for its treatment of line-height in the inline box model. 253 // No Quirks - no quirks apply. Web pages will obey the specifications to the letter. 254 255 // Check for Quirks Mode. 256 if (name != "html" 257 || publicId.startsWith("+//Silmaril//dtd html Pro v0r11 19970101//", false) 258 || publicId.startsWith("-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//", false) 259 || publicId.startsWith("-//AS//DTD HTML 3.0 asWedit + extensions//", false) 260 || publicId.startsWith("-//IETF//DTD HTML 2.0 Level 1//", false) 261 || publicId.startsWith("-//IETF//DTD HTML 2.0 Level 2//", false) 262 || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict Level 1//", false) 263 || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict Level 2//", false) 264 || publicId.startsWith("-//IETF//DTD HTML 2.0 Strict//", false) 265 || publicId.startsWith("-//IETF//DTD HTML 2.0//", false) 266 || publicId.startsWith("-//IETF//DTD HTML 2.1E//", false) 267 || publicId.startsWith("-//IETF//DTD HTML 3.0//", false) 268 || publicId.startsWith("-//IETF//DTD HTML 3.2 Final//", false) 269 || publicId.startsWith("-//IETF//DTD HTML 3.2//", false) 270 || publicId.startsWith("-//IETF//DTD HTML 3//", false) 271 || publicId.startsWith("-//IETF//DTD HTML Level 0//", false) 272 || publicId.startsWith("-//IETF//DTD HTML Level 1//", false) 273 || publicId.startsWith("-//IETF//DTD HTML Level 2//", false) 274 || publicId.startsWith("-//IETF//DTD HTML Level 3//", false) 275 || publicId.startsWith("-//IETF//DTD HTML Strict Level 0//", false) 276 || publicId.startsWith("-//IETF//DTD HTML Strict Level 1//", false) 277 || publicId.startsWith("-//IETF//DTD HTML Strict Level 2//", false) 278 || publicId.startsWith("-//IETF//DTD HTML Strict Level 3//", false) 279 || publicId.startsWith("-//IETF//DTD HTML Strict//", false) 280 || publicId.startsWith("-//IETF//DTD HTML//", false) 281 || publicId.startsWith("-//Metrius//DTD Metrius Presentational//", false) 282 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//", false) 283 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 HTML//", false) 284 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 2.0 Tables//", false) 285 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//", false) 286 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 HTML//", false) 287 || publicId.startsWith("-//Microsoft//DTD Internet Explorer 3.0 Tables//", false) 288 || publicId.startsWith("-//Netscape Comm. Corp.//DTD HTML//", false) 289 || publicId.startsWith("-//Netscape Comm. Corp.//DTD Strict HTML//", false) 290 || publicId.startsWith("-//O'Reilly and Associates//DTD HTML 2.0//", false) 291 || publicId.startsWith("-//O'Reilly and Associates//DTD HTML Extended 1.0//", false) 292 || publicId.startsWith("-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//", false) 293 || publicId.startsWith("-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//", false) 294 || publicId.startsWith("-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//", false) 295 || publicId.startsWith("-//Spyglass//DTD HTML 2.0 Extended//", false) 296 || publicId.startsWith("-//SQ//DTD HTML 2.0 HoTMetaL + extensions//", false) 297 || publicId.startsWith("-//Sun Microsystems Corp.//DTD HotJava HTML//", false) 298 || publicId.startsWith("-//Sun Microsystems Corp.//DTD HotJava Strict HTML//", false) 299 || publicId.startsWith("-//W3C//DTD HTML 3 1995-03-24//", false) 300 || publicId.startsWith("-//W3C//DTD HTML 3.2 Draft//", false) 301 || publicId.startsWith("-//W3C//DTD HTML 3.2 Final//", false) 302 || publicId.startsWith("-//W3C//DTD HTML 3.2//", false) 303 || publicId.startsWith("-//W3C//DTD HTML 3.2S Draft//", false) 304 || publicId.startsWith("-//W3C//DTD HTML 4.0 Frameset//", false) 305 || publicId.startsWith("-//W3C//DTD HTML 4.0 Transitional//", false) 306 || publicId.startsWith("-//W3C//DTD HTML Experimental 19960712//", false) 307 || publicId.startsWith("-//W3C//DTD HTML Experimental 970421//", false) 308 || publicId.startsWith("-//W3C//DTD W3 HTML//", false) 309 || publicId.startsWith("-//W3O//DTD W3 HTML 3.0//", false) 310 || equalIgnoringCase(publicId, "-//W3O//DTD W3 HTML Strict 3.0//EN//") 311 || publicId.startsWith("-//WebTechs//DTD Mozilla HTML 2.0//", false) 312 || publicId.startsWith("-//WebTechs//DTD Mozilla HTML//", false) 313 || equalIgnoringCase(publicId, "-/W3C/DTD HTML 4.0 Transitional/EN") 314 || equalIgnoringCase(publicId, "HTML") 315 || equalIgnoringCase(systemId, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") 316 || (systemId.isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Frameset//", false)) 317 || (systemId.isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Transitional//", false))) { 318 setCompatibilityMode(Document::QuirksMode); 319 return; 320 } 321 322 // Check for Limited Quirks Mode. 323 if (publicId.startsWith("-//W3C//DTD XHTML 1.0 Frameset//", false) 324 || publicId.startsWith("-//W3C//DTD XHTML 1.0 Transitional//", false) 325 || (!systemId.isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Frameset//", false)) 326 || (!systemId.isEmpty() && publicId.startsWith("-//W3C//DTD HTML 4.01 Transitional//", false))) { 327 setCompatibilityMode(Document::LimitedQuirksMode); 328 return; 329 } 330 331 // Otherwise we are No Quirks Mode. 332 setCompatibilityMode(Document::NoQuirksMode); 235 333 } 236 334 … … 244 342 ASSERT(token->type() == HTMLTokenTypes::DOCTYPE); 245 343 246 RefPtr<DocumentType> doctype = DocumentType::create(m_document, token->name(), String::adopt(token->publicIdentifier()), String::adopt(token->systemIdentifier())); 344 const String& publicId = String::adopt(token->publicIdentifier()); 345 const String& systemId = String::adopt(token->systemIdentifier()); 346 RefPtr<DocumentType> doctype = DocumentType::create(m_document, token->name(), publicId, systemId); 247 347 attachLater(m_attachmentRoot, doctype.release()); 248 348 … … 257 357 258 358 if (token->forceQuirks()) 259 m_document->setCompatibilityMode(Document::QuirksMode);359 setCompatibilityMode(Document::QuirksMode); 260 360 else { 261 // We need to actually add the Doctype node to the DOM. 262 executeQueuedTasks(); 263 m_document->setCompatibilityModeFromDoctype(); 361 setCompatibilityModeFromDoctype(token->name(), publicId, systemId); 264 362 } 265 363 } … … 497 595 bool HTMLConstructionSite::inQuirksMode() 498 596 { 499 // When we move the parser onto a background thread, we'll need to keep track of this bit on the parser thread. 500 return m_document->inQuirksMode(); 597 return m_inQuirksMode; 501 598 } 502 599 -
trunk/Source/WebCore/html/parser/HTMLConstructionSite.h
r139042 r139141 157 157 typedef Vector<HTMLConstructionSiteTask, 1> AttachmentQueue; 158 158 159 void setCompatibilityMode(Document::CompatibilityMode); 160 void setCompatibilityModeFromDoctype(const String& name, const String& publicId, const String& systemId); 161 159 162 void attachLater(ContainerNode* parent, PassRefPtr<Node> child, bool selfClosing = false); 160 163 … … 191 194 192 195 unsigned m_maximumDOMTreeDepth; 196 197 bool m_inQuirksMode; 193 198 }; 194 199
Note:
See TracChangeset
for help on using the changeset viewer.