| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 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 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 HTMLInputElement& inputElement = toHTMLInputElement(element); | 235 HTMLInputElement& inputElement = toHTMLInputElement(element); |
| 236 if (inputElement.isImageButton() && inputElement.hasImageLoader()) { | 236 if (inputElement.isImageButton() && inputElement.hasImageLoader()) { |
| 237 KURL url = inputElement.src(); | 237 KURL url = inputElement.src(); |
| 238 ImageResource* cachedImage = inputElement.imageLoader()->image()
; | 238 ImageResource* cachedImage = inputElement.imageLoader()->image()
; |
| 239 addImageToResources(cachedImage, inputElement.renderer(), url); | 239 addImageToResources(cachedImage, inputElement.renderer(), url); |
| 240 } | 240 } |
| 241 } else if (isHTMLLinkElement(element)) { | 241 } else if (isHTMLLinkElement(element)) { |
| 242 HTMLLinkElement& linkElement = toHTMLLinkElement(element); | 242 HTMLLinkElement& linkElement = toHTMLLinkElement(element); |
| 243 if (CSSStyleSheet* sheet = linkElement.sheet()) { | 243 if (CSSStyleSheet* sheet = linkElement.sheet()) { |
| 244 KURL url = document.completeURL(linkElement.getAttribute(HTMLNam
es::hrefAttr)); | 244 KURL url = document.completeURL(linkElement.getAttribute(HTMLNam
es::hrefAttr)); |
| 245 serializeCSSStyleSheet(sheet, url); | 245 serializeCSSStyleSheet(*sheet, url); |
| 246 ASSERT(m_resourceURLs.contains(url)); | 246 ASSERT(m_resourceURLs.contains(url)); |
| 247 } | 247 } |
| 248 } else if (isHTMLStyleElement(element)) { | 248 } else if (isHTMLStyleElement(element)) { |
| 249 HTMLStyleElement& styleElement = toHTMLStyleElement(element); | 249 HTMLStyleElement& styleElement = toHTMLStyleElement(element); |
| 250 if (CSSStyleSheet* sheet = styleElement.sheet()) | 250 if (CSSStyleSheet* sheet = styleElement.sheet()) |
| 251 serializeCSSStyleSheet(sheet, KURL()); | 251 serializeCSSStyleSheet(*sheet, KURL()); |
| 252 } | 252 } |
| 253 } | 253 } |
| 254 | 254 |
| 255 for (Frame* childFrame = frame->tree().firstChild(); childFrame; childFrame
= childFrame->tree().nextSibling()) { | 255 for (Frame* childFrame = frame->tree().firstChild(); childFrame; childFrame
= childFrame->tree().nextSibling()) { |
| 256 if (childFrame->isLocalFrame()) | 256 if (childFrame->isLocalFrame()) |
| 257 serializeFrame(toLocalFrame(childFrame)); | 257 serializeFrame(toLocalFrame(childFrame)); |
| 258 } | 258 } |
| 259 } | 259 } |
| 260 | 260 |
| 261 void PageSerializer::serializeCSSStyleSheet(CSSStyleSheet* styleSheet, const KUR
L& url) | 261 void PageSerializer::serializeCSSStyleSheet(CSSStyleSheet& styleSheet, const KUR
L& url) |
| 262 { | 262 { |
| 263 StringBuilder cssText; | 263 StringBuilder cssText; |
| 264 for (unsigned i = 0; i < styleSheet->length(); ++i) { | 264 for (unsigned i = 0; i < styleSheet.length(); ++i) { |
| 265 CSSRule* rule = styleSheet->item(i); | 265 CSSRule* rule = styleSheet.item(i); |
| 266 String itemText = rule->cssText(); | 266 String itemText = rule->cssText(); |
| 267 if (!itemText.isEmpty()) { | 267 if (!itemText.isEmpty()) { |
| 268 cssText.append(itemText); | 268 cssText.append(itemText); |
| 269 if (i < styleSheet->length() - 1) | 269 if (i < styleSheet.length() - 1) |
| 270 cssText.append("\n\n"); | 270 cssText.append("\n\n"); |
| 271 } | 271 } |
| 272 ASSERT(styleSheet->ownerDocument()); | 272 ASSERT(styleSheet.ownerDocument()); |
| 273 Document& document = *styleSheet->ownerDocument(); | 273 Document& document = *styleSheet.ownerDocument(); |
| 274 // Some rules have resources associated with them that we need to retrie
ve. | 274 // Some rules have resources associated with them that we need to retrie
ve. |
| 275 if (rule->type() == CSSRule::IMPORT_RULE) { | 275 if (rule->type() == CSSRule::IMPORT_RULE) { |
| 276 CSSImportRule* importRule = toCSSImportRule(rule); | 276 CSSImportRule* importRule = toCSSImportRule(rule); |
| 277 KURL importURL = document.completeURL(importRule->href()); | 277 KURL importURL = document.completeURL(importRule->href()); |
| 278 if (m_resourceURLs.contains(importURL)) | 278 if (m_resourceURLs.contains(importURL)) |
| 279 continue; | 279 continue; |
| 280 serializeCSSStyleSheet(importRule->styleSheet(), importURL); | 280 if (importRule->styleSheet()) |
| 281 serializeCSSStyleSheet(*importRule->styleSheet(), importURL); |
| 281 } else if (rule->type() == CSSRule::FONT_FACE_RULE) { | 282 } else if (rule->type() == CSSRule::FONT_FACE_RULE) { |
| 282 retrieveResourcesForProperties(&toCSSFontFaceRule(rule)->styleRule()
->properties(), document); | 283 retrieveResourcesForProperties(&toCSSFontFaceRule(rule)->styleRule()
->properties(), document); |
| 283 } else if (rule->type() == CSSRule::STYLE_RULE) { | 284 } else if (rule->type() == CSSRule::STYLE_RULE) { |
| 284 retrieveResourcesForProperties(&toCSSStyleRule(rule)->styleRule()->p
roperties(), document); | 285 retrieveResourcesForProperties(&toCSSStyleRule(rule)->styleRule()->p
roperties(), document); |
| 285 } | 286 } |
| 286 } | 287 } |
| 287 | 288 |
| 288 if (url.isValid() && !m_resourceURLs.contains(url)) { | 289 if (url.isValid() && !m_resourceURLs.contains(url)) { |
| 289 // FIXME: We should check whether a charset has been specified and if no
ne was found add one. | 290 // FIXME: We should check whether a charset has been specified and if no
ne was found add one. |
| 290 WTF::TextEncoding textEncoding(styleSheet->contents()->charset()); | 291 WTF::TextEncoding textEncoding(styleSheet.contents()->charset()); |
| 291 ASSERT(textEncoding.isValid()); | 292 ASSERT(textEncoding.isValid()); |
| 292 String textString = cssText.toString(); | 293 String textString = cssText.toString(); |
| 293 CString text = textEncoding.normalizeAndEncode(textString, WTF::Entities
ForUnencodables); | 294 CString text = textEncoding.normalizeAndEncode(textString, WTF::Entities
ForUnencodables); |
| 294 m_resources->append(SerializedResource(url, String("text/css"), SharedBu
ffer::create(text.data(), text.length()))); | 295 m_resources->append(SerializedResource(url, String("text/css"), SharedBu
ffer::create(text.data(), text.length()))); |
| 295 m_resourceURLs.add(url); | 296 m_resourceURLs.add(url); |
| 296 } | 297 } |
| 297 } | 298 } |
| 298 | 299 |
| 299 bool PageSerializer::shouldAddURL(const KURL& url) | 300 bool PageSerializer::shouldAddURL(const KURL& url) |
| 300 { | 301 { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 if (iter != m_blankFrameURLs.end()) | 384 if (iter != m_blankFrameURLs.end()) |
| 384 return iter->value; | 385 return iter->value; |
| 385 String url = "wyciwyg://frame/" + String::number(m_blankFrameCounter++); | 386 String url = "wyciwyg://frame/" + String::number(m_blankFrameCounter++); |
| 386 KURL fakeURL(ParsedURLString, url); | 387 KURL fakeURL(ParsedURLString, url); |
| 387 m_blankFrameURLs.add(frame, fakeURL); | 388 m_blankFrameURLs.add(frame, fakeURL); |
| 388 | 389 |
| 389 return fakeURL; | 390 return fakeURL; |
| 390 } | 391 } |
| 391 | 392 |
| 392 } | 393 } |
| OLD | NEW |