| OLD | NEW |
| 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) 2000 Simon Hausmann (hausmann@kde.org) | 4 * (C) 2000 Simon Hausmann (hausmann@kde.org) |
| 5 * (C) 2001 Dirk Mueller (mueller@kde.org) | 5 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 6 * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. |
| 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 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 } else if (attr->name() == bgcolorAttr) { | 109 } else if (attr->name() == bgcolorAttr) { |
| 110 addCSSColor(attr, CSSPropertyBackgroundColor, attr->value()); | 110 addCSSColor(attr, CSSPropertyBackgroundColor, attr->value()); |
| 111 } else if (attr->name() == textAttr) { | 111 } else if (attr->name() == textAttr) { |
| 112 addCSSColor(attr, CSSPropertyColor, attr->value()); | 112 addCSSColor(attr, CSSPropertyColor, attr->value()); |
| 113 } else if (attr->name() == bgpropertiesAttr) { | 113 } else if (attr->name() == bgpropertiesAttr) { |
| 114 if (equalIgnoringCase(attr->value(), "fixed")) | 114 if (equalIgnoringCase(attr->value(), "fixed")) |
| 115 addCSSProperty(attr, CSSPropertyBackgroundAttachment, CSSValueFixed)
; | 115 addCSSProperty(attr, CSSPropertyBackgroundAttachment, CSSValueFixed)
; |
| 116 } else if (attr->name() == vlinkAttr || | 116 } else if (attr->name() == vlinkAttr || |
| 117 attr->name() == alinkAttr || | 117 attr->name() == alinkAttr || |
| 118 attr->name() == linkAttr) { | 118 attr->name() == linkAttr) { |
| 119 // This tells us that we are removed from document. If our document is l
ater destroyed |
| 120 // (not deleted since we hold a guardRef), our stylesheet list will be n
ull causing a crash |
| 121 // later in document()->styleSelector(). So, we bail out early because w
e shouldn't be |
| 122 // modifying anything in that document. See webkit bug 62230. |
| 123 if (m_linkDecl && !m_linkDecl->parent()) |
| 124 return; |
| 125 |
| 119 if (attr->isNull()) { | 126 if (attr->isNull()) { |
| 120 if (attr->name() == linkAttr) | 127 if (attr->name() == linkAttr) |
| 121 document()->resetLinkColor(); | 128 document()->resetLinkColor(); |
| 122 else if (attr->name() == vlinkAttr) | 129 else if (attr->name() == vlinkAttr) |
| 123 document()->resetVisitedLinkColor(); | 130 document()->resetVisitedLinkColor(); |
| 124 else | 131 else |
| 125 document()->resetActiveLinkColor(); | 132 document()->resetActiveLinkColor(); |
| 126 } else { | 133 } else { |
| 127 if (!m_linkDecl) | 134 if (!m_linkDecl) |
| 128 createLinkDecl(); | 135 createLinkDecl(); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 setAttribute(marginheightAttr, String::number(marginHeight)); | 202 setAttribute(marginheightAttr, String::number(marginHeight)); |
| 196 } | 203 } |
| 197 | 204 |
| 198 // FIXME: This call to scheduleRelayout should not be needed here. | 205 // FIXME: This call to scheduleRelayout should not be needed here. |
| 199 // But without it we hang during WebKit tests; need to fix that and remove t
his. | 206 // But without it we hang during WebKit tests; need to fix that and remove t
his. |
| 200 if (FrameView* view = document()->view()) | 207 if (FrameView* view = document()->view()) |
| 201 view->scheduleRelayout(); | 208 view->scheduleRelayout(); |
| 202 | 209 |
| 203 if (document() && document()->page()) | 210 if (document() && document()->page()) |
| 204 document()->page()->updateViewportArguments(); | 211 document()->page()->updateViewportArguments(); |
| 212 |
| 213 if (m_linkDecl) |
| 214 m_linkDecl->setParent(document()->elementSheet()); |
| 215 } |
| 216 |
| 217 void HTMLBodyElement::removedFromDocument() |
| 218 { |
| 219 if (m_linkDecl) |
| 220 m_linkDecl->setParent(0); |
| 221 |
| 222 HTMLElement::removedFromDocument(); |
| 223 } |
| 224 |
| 225 void HTMLBodyElement::didMoveToNewOwnerDocument() |
| 226 { |
| 227 if (m_linkDecl) |
| 228 m_linkDecl->setParent(document()->elementSheet()); |
| 229 |
| 230 HTMLElement::didMoveToNewOwnerDocument(); |
| 205 } | 231 } |
| 206 | 232 |
| 207 bool HTMLBodyElement::isURLAttribute(Attribute *attr) const | 233 bool HTMLBodyElement::isURLAttribute(Attribute *attr) const |
| 208 { | 234 { |
| 209 return attr->name() == backgroundAttr; | 235 return attr->name() == backgroundAttr; |
| 210 } | 236 } |
| 211 | 237 |
| 212 bool HTMLBodyElement::supportsFocus() const | 238 bool HTMLBodyElement::supportsFocus() const |
| 213 { | 239 { |
| 214 return rendererIsEditable() || HTMLElement::supportsFocus(); | 240 return rendererIsEditable() || HTMLElement::supportsFocus(); |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 return view ? adjustForZoom(view->contentsWidth(), document) : 0; | 364 return view ? adjustForZoom(view->contentsWidth(), document) : 0; |
| 339 } | 365 } |
| 340 | 366 |
| 341 void HTMLBodyElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const | 367 void HTMLBodyElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const |
| 342 { | 368 { |
| 343 HTMLElement::addSubresourceAttributeURLs(urls); | 369 HTMLElement::addSubresourceAttributeURLs(urls); |
| 344 | 370 |
| 345 addSubresourceURL(urls, document()->completeURL(getAttribute(backgroundAttr)
)); | 371 addSubresourceURL(urls, document()->completeURL(getAttribute(backgroundAttr)
)); |
| 346 } | 372 } |
| 347 | 373 |
| 348 void HTMLBodyElement::didMoveToNewOwnerDocument() | |
| 349 { | |
| 350 // When moving body elements between documents, we should have to reset the
parent sheet for any | |
| 351 // link style declarations. If we don't we might crash later. | |
| 352 // In practice I can't reproduce this theoretical problem. | |
| 353 // webarchive/adopt-attribute-styled-body-webarchive.html tries to make sure
this crash won't surface. | |
| 354 if (m_linkDecl) | |
| 355 m_linkDecl->setParent(document()->elementSheet()); | |
| 356 | |
| 357 HTMLElement::didMoveToNewOwnerDocument(); | |
| 358 } | |
| 359 | |
| 360 } // namespace WebCore | 374 } // namespace WebCore |
| OLD | NEW |