| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> | 2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> |
| 3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. | 3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. |
| 4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 SVGImage::SVGImage(ImageObserver* observer) | 59 SVGImage::SVGImage(ImageObserver* observer) |
| 60 : Image(observer) | 60 : Image(observer) |
| 61 { | 61 { |
| 62 } | 62 } |
| 63 | 63 |
| 64 SVGImage::~SVGImage() | 64 SVGImage::~SVGImage() |
| 65 { | 65 { |
| 66 if (m_page) { | 66 if (m_page) { |
| 67 // Store m_page in a local variable, clearing m_page, so that SVGImageCh
romeClient knows we're destructed. | 67 // Store m_page in a local variable, clearing m_page, so that SVGImageCh
romeClient knows we're destructed. |
| 68 OwnPtrWillBeRawPtr<Page> currentPage = m_page.release(); | 68 OwnPtrWillBeRawPtr<Page> currentPage = m_page.release(); |
| 69 currentPage->mainFrame()->loader().frameDetached(); // Break both the lo
ader and view references to the frame | 69 toLocalFrame(currentPage->mainFrame())->loader().frameDetached(); // Bre
ak both the loader and view references to the frame |
| 70 currentPage->willBeDestroyed(); | 70 currentPage->willBeDestroyed(); |
| 71 } | 71 } |
| 72 | 72 |
| 73 // Verify that page teardown destroyed the Chrome | 73 // Verify that page teardown destroyed the Chrome |
| 74 ASSERT(!m_chromeClient || !m_chromeClient->image()); | 74 ASSERT(!m_chromeClient || !m_chromeClient->image()); |
| 75 } | 75 } |
| 76 | 76 |
| 77 bool SVGImage::isInSVGImage(const Node* node) | 77 bool SVGImage::isInSVGImage(const Node* node) |
| 78 { | 78 { |
| 79 ASSERT(node); | 79 ASSERT(node); |
| 80 | 80 |
| 81 Page* page = node->document().page(); | 81 Page* page = node->document().page(); |
| 82 if (!page) | 82 if (!page) |
| 83 return false; | 83 return false; |
| 84 | 84 |
| 85 return page->chrome().client().isSVGImageChromeClient(); | 85 return page->chrome().client().isSVGImageChromeClient(); |
| 86 } | 86 } |
| 87 | 87 |
| 88 bool SVGImage::currentFrameHasSingleSecurityOrigin() const | 88 bool SVGImage::currentFrameHasSingleSecurityOrigin() const |
| 89 { | 89 { |
| 90 if (!m_page) | 90 if (!m_page) |
| 91 return true; | 91 return true; |
| 92 | 92 |
| 93 LocalFrame* frame = m_page->mainFrame(); | 93 LocalFrame* frame = toLocalFrame(m_page->mainFrame()); |
| 94 | 94 |
| 95 RELEASE_ASSERT(frame->document()->loadEventFinished()); | 95 RELEASE_ASSERT(frame->document()->loadEventFinished()); |
| 96 | 96 |
| 97 SVGSVGElement* rootElement = frame->document()->accessSVGExtensions().rootEl
ement(); | 97 SVGSVGElement* rootElement = frame->document()->accessSVGExtensions().rootEl
ement(); |
| 98 if (!rootElement) | 98 if (!rootElement) |
| 99 return true; | 99 return true; |
| 100 | 100 |
| 101 // Don't allow foreignObject elements or images that are not known to be | 101 // Don't allow foreignObject elements or images that are not known to be |
| 102 // single-origin since these can leak cross-origin information. | 102 // single-origin since these can leak cross-origin information. |
| 103 ComposedTreeWalker walker(rootElement); | 103 ComposedTreeWalker walker(rootElement); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 116 | 116 |
| 117 // Because SVG image rendering disallows external resources and links, these | 117 // Because SVG image rendering disallows external resources and links, these |
| 118 // images effectively are restricted to a single security origin. | 118 // images effectively are restricted to a single security origin. |
| 119 return true; | 119 return true; |
| 120 } | 120 } |
| 121 | 121 |
| 122 static SVGSVGElement* svgRootElement(Page* page) | 122 static SVGSVGElement* svgRootElement(Page* page) |
| 123 { | 123 { |
| 124 if (!page) | 124 if (!page) |
| 125 return 0; | 125 return 0; |
| 126 LocalFrame* frame = page->mainFrame(); | 126 LocalFrame* frame = toLocalFrame(page->mainFrame()); |
| 127 return frame->document()->accessSVGExtensions().rootElement(); | 127 return frame->document()->accessSVGExtensions().rootElement(); |
| 128 } | 128 } |
| 129 | 129 |
| 130 void SVGImage::setContainerSize(const IntSize& size) | 130 void SVGImage::setContainerSize(const IntSize& size) |
| 131 { | 131 { |
| 132 if (!usesContainerSize()) | 132 if (!usesContainerSize()) |
| 133 return; | 133 return; |
| 134 | 134 |
| 135 SVGSVGElement* rootElement = svgRootElement(m_page.get()); | 135 SVGSVGElement* rootElement = svgRootElement(m_page.get()); |
| 136 if (!rootElement) | 136 if (!rootElement) |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 if (!rootElement) | 313 if (!rootElement) |
| 314 return 0; | 314 return 0; |
| 315 return toRenderBox(rootElement->renderer()); | 315 return toRenderBox(rootElement->renderer()); |
| 316 } | 316 } |
| 317 | 317 |
| 318 FrameView* SVGImage::frameView() const | 318 FrameView* SVGImage::frameView() const |
| 319 { | 319 { |
| 320 if (!m_page) | 320 if (!m_page) |
| 321 return 0; | 321 return 0; |
| 322 | 322 |
| 323 return m_page->mainFrame()->view(); | 323 return toLocalFrame(m_page->mainFrame())->view(); |
| 324 } | 324 } |
| 325 | 325 |
| 326 void SVGImage::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrin
sicHeight, FloatSize& intrinsicRatio) | 326 void SVGImage::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrin
sicHeight, FloatSize& intrinsicRatio) |
| 327 { | 327 { |
| 328 SVGSVGElement* rootElement = svgRootElement(m_page.get()); | 328 SVGSVGElement* rootElement = svgRootElement(m_page.get()); |
| 329 if (!rootElement) | 329 if (!rootElement) |
| 330 return; | 330 return; |
| 331 | 331 |
| 332 intrinsicWidth = rootElement->intrinsicWidth(); | 332 intrinsicWidth = rootElement->intrinsicWidth(); |
| 333 intrinsicHeight = rootElement->intrinsicHeight(); | 333 intrinsicHeight = rootElement->intrinsicHeight(); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 363 return; | 363 return; |
| 364 rootElement->pauseAnimations(); | 364 rootElement->pauseAnimations(); |
| 365 rootElement->setCurrentTime(0); | 365 rootElement->setCurrentTime(0); |
| 366 } | 366 } |
| 367 | 367 |
| 368 bool SVGImage::hasAnimations() const | 368 bool SVGImage::hasAnimations() const |
| 369 { | 369 { |
| 370 SVGSVGElement* rootElement = svgRootElement(m_page.get()); | 370 SVGSVGElement* rootElement = svgRootElement(m_page.get()); |
| 371 if (!rootElement) | 371 if (!rootElement) |
| 372 return false; | 372 return false; |
| 373 return rootElement->timeContainer()->hasAnimations() || m_page->mainFrame()-
>document()->timeline().hasPendingUpdates(); | 373 return rootElement->timeContainer()->hasAnimations() || toLocalFrame(m_page-
>mainFrame())->document()->timeline().hasPendingUpdates(); |
| 374 } | 374 } |
| 375 | 375 |
| 376 bool SVGImage::dataChanged(bool allDataReceived) | 376 bool SVGImage::dataChanged(bool allDataReceived) |
| 377 { | 377 { |
| 378 TRACE_EVENT0("webkit", "SVGImage::dataChanged"); | 378 TRACE_EVENT0("webkit", "SVGImage::dataChanged"); |
| 379 | 379 |
| 380 // Don't do anything if is an empty image. | 380 // Don't do anything if is an empty image. |
| 381 if (!data()->size()) | 381 if (!data()->size()) |
| 382 return true; | 382 return true; |
| 383 | 383 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 | 425 |
| 426 return m_page; | 426 return m_page; |
| 427 } | 427 } |
| 428 | 428 |
| 429 String SVGImage::filenameExtension() const | 429 String SVGImage::filenameExtension() const |
| 430 { | 430 { |
| 431 return "svg"; | 431 return "svg"; |
| 432 } | 432 } |
| 433 | 433 |
| 434 } | 434 } |
| OLD | NEW |