| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
| 3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
| 4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
| 5 * 2000 Simon Hausmann <hausmann@kde.org> | 5 * 2000 Simon Hausmann <hausmann@kde.org> |
| 6 * 2000 Stefan Schimanski <1Stein@gmx.de> | 6 * 2000 Stefan Schimanski <1Stein@gmx.de> |
| 7 * 2001 George Staikos <staikos@kde.org> | 7 * 2001 George Staikos <staikos@kde.org> |
| 8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
| 9 * Copyright (C) 2005 Alexey Proskuryakov <ap@nypop.com> | 9 * Copyright (C) 2005 Alexey Proskuryakov <ap@nypop.com> |
| 10 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 10 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 #include "wtf/StdLibExtras.h" | 67 #include "wtf/StdLibExtras.h" |
| 68 | 68 |
| 69 using namespace std; | 69 using namespace std; |
| 70 | 70 |
| 71 namespace WebCore { | 71 namespace WebCore { |
| 72 | 72 |
| 73 using namespace HTMLNames; | 73 using namespace HTMLNames; |
| 74 | 74 |
| 75 static inline float parentPageZoomFactor(LocalFrame* frame) | 75 static inline float parentPageZoomFactor(LocalFrame* frame) |
| 76 { | 76 { |
| 77 LocalFrame* parent = frame->tree().parent(); | 77 Frame* parent = frame->tree().parent(); |
| 78 if (!parent) | 78 if (!parent || !parent->isLocalFrame()) |
| 79 return 1; | 79 return 1; |
| 80 return parent->pageZoomFactor(); | 80 return toLocalFrame(parent)->pageZoomFactor(); |
| 81 } | 81 } |
| 82 | 82 |
| 83 static inline float parentTextZoomFactor(LocalFrame* frame) | 83 static inline float parentTextZoomFactor(LocalFrame* frame) |
| 84 { | 84 { |
| 85 LocalFrame* parent = frame->tree().parent(); | 85 Frame* parent = frame->tree().parent(); |
| 86 if (!parent) | 86 if (!parent || !parent->isLocalFrame()) |
| 87 return 1; | 87 return 1; |
| 88 return parent->textZoomFactor(); | 88 return toLocalFrame(parent)->textZoomFactor(); |
| 89 } | 89 } |
| 90 | 90 |
| 91 inline LocalFrame::LocalFrame(FrameLoaderClient* client, FrameHost* host, FrameO
wner* owner) | 91 inline LocalFrame::LocalFrame(FrameLoaderClient* client, FrameHost* host, FrameO
wner* owner) |
| 92 : Frame(client, host, owner) | 92 : Frame(client, host, owner) |
| 93 , m_loader(this) | 93 , m_loader(this) |
| 94 , m_navigationScheduler(this) | 94 , m_navigationScheduler(this) |
| 95 , m_script(adoptPtr(new ScriptController(this))) | 95 , m_script(adoptPtr(new ScriptController(this))) |
| 96 , m_editor(Editor::create(*this)) | 96 , m_editor(Editor::create(*this)) |
| 97 , m_spellChecker(SpellChecker::create(*this)) | 97 , m_spellChecker(SpellChecker::create(*this)) |
| 98 , m_selection(FrameSelection::create(this)) | 98 , m_selection(FrameSelection::create(this)) |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 if (page()->visibilityState() != PageVisibilityStateVisible) | 171 if (page()->visibilityState() != PageVisibilityStateVisible) |
| 172 return; | 172 return; |
| 173 | 173 |
| 174 DOMWindow* window = domWindow(); | 174 DOMWindow* window = domWindow(); |
| 175 if (!window) | 175 if (!window) |
| 176 return; | 176 return; |
| 177 window->dispatchEvent(Event::create(EventTypeNames::orientationchange)); | 177 window->dispatchEvent(Event::create(EventTypeNames::orientationchange)); |
| 178 | 178 |
| 179 // Notify subframes. | 179 // Notify subframes. |
| 180 Vector<RefPtr<LocalFrame> > childFrames; | 180 Vector<RefPtr<LocalFrame> > childFrames; |
| 181 for (LocalFrame* child = tree().firstChild(); child; child = child->tree().n
extSibling()) | 181 for (Frame* child = tree().firstChild(); child; child = child->tree().nextSi
bling()) { |
| 182 childFrames.append(child); | 182 if (child->isLocalFrame()) |
| 183 childFrames.append(toLocalFrame(child)); |
| 184 } |
| 183 | 185 |
| 184 for (size_t i = 0; i < childFrames.size(); ++i) | 186 for (size_t i = 0; i < childFrames.size(); ++i) |
| 185 childFrames[i]->sendOrientationChangeEvent(); | 187 childFrames[i]->sendOrientationChangeEvent(); |
| 186 } | 188 } |
| 187 | 189 |
| 188 void LocalFrame::setPrinting(bool printing, const FloatSize& pageSize, const Flo
atSize& originalPageSize, float maximumShrinkRatio) | 190 void LocalFrame::setPrinting(bool printing, const FloatSize& pageSize, const Flo
atSize& originalPageSize, float maximumShrinkRatio) |
| 189 { | 191 { |
| 190 // In setting printing, we should not validate resources already cached for
the document. | 192 // In setting printing, we should not validate resources already cached for
the document. |
| 191 // See https://bugs.webkit.org/show_bug.cgi?id=43704 | 193 // See https://bugs.webkit.org/show_bug.cgi?id=43704 |
| 192 ResourceCacheValidationSuppressor validationSuppressor(document()->fetcher()
); | 194 ResourceCacheValidationSuppressor validationSuppressor(document()->fetcher()
); |
| 193 | 195 |
| 194 document()->setPrinting(printing); | 196 document()->setPrinting(printing); |
| 195 view()->adjustMediaTypeForPrinting(printing); | 197 view()->adjustMediaTypeForPrinting(printing); |
| 196 | 198 |
| 197 document()->styleResolverChanged(); | 199 document()->styleResolverChanged(); |
| 198 if (shouldUsePrintingLayout()) { | 200 if (shouldUsePrintingLayout()) { |
| 199 view()->forceLayoutForPagination(pageSize, originalPageSize, maximumShri
nkRatio); | 201 view()->forceLayoutForPagination(pageSize, originalPageSize, maximumShri
nkRatio); |
| 200 } else { | 202 } else { |
| 201 view()->forceLayout(); | 203 view()->forceLayout(); |
| 202 view()->adjustViewSize(); | 204 view()->adjustViewSize(); |
| 203 } | 205 } |
| 204 | 206 |
| 205 // Subframes of the one we're printing don't lay out to the page size. | 207 // Subframes of the one we're printing don't lay out to the page size. |
| 206 for (RefPtr<LocalFrame> child = tree().firstChild(); child; child = child->t
ree().nextSibling()) | 208 for (RefPtr<Frame> child = tree().firstChild(); child; child = child->tree()
.nextSibling()) { |
| 207 child->setPrinting(printing, FloatSize(), FloatSize(), 0); | 209 if (child->isLocalFrame()) |
| 210 toLocalFrame(child.get())->setPrinting(printing, FloatSize(), FloatS
ize(), 0); |
| 211 } |
| 208 } | 212 } |
| 209 | 213 |
| 210 bool LocalFrame::shouldUsePrintingLayout() const | 214 bool LocalFrame::shouldUsePrintingLayout() const |
| 211 { | 215 { |
| 212 // Only top frame being printed should be fit to page size. | 216 // Only top frame being printed should be fit to page size. |
| 213 // Subframes should be constrained by parents only. | 217 // Subframes should be constrained by parents only. |
| 214 return document()->printing() && (!tree().parent() || !tree().parent()->docu
ment()->printing()); | 218 return document()->printing() && (!tree().parent() || !tree().parent()->isLo
calFrame() || !toLocalFrame(tree().parent())->document()->printing()); |
| 215 } | 219 } |
| 216 | 220 |
| 217 FloatSize LocalFrame::resizePageRectsKeepingRatio(const FloatSize& originalSize,
const FloatSize& expectedSize) | 221 FloatSize LocalFrame::resizePageRectsKeepingRatio(const FloatSize& originalSize,
const FloatSize& expectedSize) |
| 218 { | 222 { |
| 219 FloatSize resultSize; | 223 FloatSize resultSize; |
| 220 if (!contentRenderer()) | 224 if (!contentRenderer()) |
| 221 return FloatSize(); | 225 return FloatSize(); |
| 222 | 226 |
| 223 if (contentRenderer()->style()->isHorizontalWritingMode()) { | 227 if (contentRenderer()->style()->isHorizontalWritingMode()) { |
| 224 ASSERT(fabs(originalSize.width()) > numeric_limits<float>::epsilon()); | 228 ASSERT(fabs(originalSize.width()) > numeric_limits<float>::epsilon()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 241 script().clearWindowShell(); | 245 script().clearWindowShell(); |
| 242 Frame::setDOMWindow(domWindow); | 246 Frame::setDOMWindow(domWindow); |
| 243 } | 247 } |
| 244 | 248 |
| 245 void LocalFrame::didChangeVisibilityState() | 249 void LocalFrame::didChangeVisibilityState() |
| 246 { | 250 { |
| 247 if (document()) | 251 if (document()) |
| 248 document()->didChangeVisibilityState(); | 252 document()->didChangeVisibilityState(); |
| 249 | 253 |
| 250 Vector<RefPtr<LocalFrame> > childFrames; | 254 Vector<RefPtr<LocalFrame> > childFrames; |
| 251 for (LocalFrame* child = tree().firstChild(); child; child = child->tree().n
extSibling()) | 255 for (Frame* child = tree().firstChild(); child; child = child->tree().nextSi
bling()) { |
| 252 childFrames.append(child); | 256 if (child->isLocalFrame()) |
| 257 childFrames.append(toLocalFrame(child)); |
| 258 } |
| 253 | 259 |
| 254 for (size_t i = 0; i < childFrames.size(); ++i) | 260 for (size_t i = 0; i < childFrames.size(); ++i) |
| 255 childFrames[i]->didChangeVisibilityState(); | 261 childFrames[i]->didChangeVisibilityState(); |
| 256 } | 262 } |
| 257 | 263 |
| 258 void LocalFrame::willDetachFrameHost() | 264 void LocalFrame::willDetachFrameHost() |
| 259 { | 265 { |
| 260 // We should never be detatching the page during a Layout. | 266 // We should never be detatching the page during a Layout. |
| 261 RELEASE_ASSERT(!m_view || !m_view->isInPerformLayout()); | 267 RELEASE_ASSERT(!m_view || !m_view->isInPerformLayout()); |
| 262 | 268 |
| 263 if (LocalFrame* parent = tree().parent()) | 269 Frame* parent = tree().parent(); |
| 264 parent->loader().checkLoadComplete(); | 270 if (parent && parent->isLocalFrame()) |
| 271 toLocalFrame(parent)->loader().checkLoadComplete(); |
| 265 | 272 |
| 266 Frame::willDetachFrameHost(); | 273 Frame::willDetachFrameHost(); |
| 267 script().clearScriptObjects(); | 274 script().clearScriptObjects(); |
| 268 | 275 |
| 269 if (page() && page()->scrollingCoordinator() && m_view) | 276 if (page() && page()->scrollingCoordinator() && m_view) |
| 270 page()->scrollingCoordinator()->willDestroyScrollableArea(m_view.get()); | 277 page()->scrollingCoordinator()->willDestroyScrollableArea(m_view.get()); |
| 271 } | 278 } |
| 272 | 279 |
| 273 void LocalFrame::detachFromFrameHost() | 280 void LocalFrame::detachFromFrameHost() |
| 274 { | 281 { |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 if (o->needsLayout()) | 425 if (o->needsLayout()) |
| 419 ++needsLayoutObjects; | 426 ++needsLayoutObjects; |
| 420 } | 427 } |
| 421 } | 428 } |
| 422 | 429 |
| 423 String LocalFrame::layerTreeAsText(LayerTreeFlags flags) const | 430 String LocalFrame::layerTreeAsText(LayerTreeFlags flags) const |
| 424 { | 431 { |
| 425 TextStream textStream; | 432 TextStream textStream; |
| 426 textStream << localLayerTreeAsText(flags); | 433 textStream << localLayerTreeAsText(flags); |
| 427 | 434 |
| 428 for (LocalFrame* child = tree().firstChild(); child; child = child->tree().t
raverseNext(this)) { | 435 for (Frame* child = tree().firstChild(); child; child = child->tree().traver
seNext(this)) { |
| 429 String childLayerTree = child->localLayerTreeAsText(flags); | 436 if (!child->isLocalFrame()) |
| 437 continue; |
| 438 String childLayerTree = toLocalFrame(child)->localLayerTreeAsText(flags)
; |
| 430 if (!childLayerTree.length()) | 439 if (!childLayerTree.length()) |
| 431 continue; | 440 continue; |
| 432 | 441 |
| 433 textStream << "\n\n--------\nFrame: '"; | 442 textStream << "\n\n--------\nFrame: '"; |
| 434 textStream << child->tree().uniqueName(); | 443 textStream << child->tree().uniqueName(); |
| 435 textStream << "'\n--------\n"; | 444 textStream << "'\n--------\n"; |
| 436 textStream << childLayerTree; | 445 textStream << childLayerTree; |
| 437 } | 446 } |
| 438 | 447 |
| 439 return textStream.release(); | 448 return textStream.release(); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 // Update the scroll position when doing a full page zoom, so the co
ntent stays in relatively the same position. | 498 // Update the scroll position when doing a full page zoom, so the co
ntent stays in relatively the same position. |
| 490 LayoutPoint scrollPosition = view->scrollPosition(); | 499 LayoutPoint scrollPosition = view->scrollPosition(); |
| 491 float percentDifference = (pageZoomFactor / m_pageZoomFactor); | 500 float percentDifference = (pageZoomFactor / m_pageZoomFactor); |
| 492 view->setScrollPosition(IntPoint(scrollPosition.x() * percentDiffere
nce, scrollPosition.y() * percentDifference)); | 501 view->setScrollPosition(IntPoint(scrollPosition.x() * percentDiffere
nce, scrollPosition.y() * percentDifference)); |
| 493 } | 502 } |
| 494 } | 503 } |
| 495 | 504 |
| 496 m_pageZoomFactor = pageZoomFactor; | 505 m_pageZoomFactor = pageZoomFactor; |
| 497 m_textZoomFactor = textZoomFactor; | 506 m_textZoomFactor = textZoomFactor; |
| 498 | 507 |
| 499 for (RefPtr<LocalFrame> child = tree().firstChild(); child; child = child->t
ree().nextSibling()) | 508 for (RefPtr<Frame> child = tree().firstChild(); child; child = child->tree()
.nextSibling()) { |
| 500 child->setPageAndTextZoomFactors(m_pageZoomFactor, m_textZoomFactor); | 509 if (child->isLocalFrame()) |
| 510 toLocalFrame(child.get())->setPageAndTextZoomFactors(m_pageZoomFacto
r, m_textZoomFactor); |
| 511 } |
| 501 | 512 |
| 502 document->setNeedsStyleRecalc(SubtreeStyleChange); | 513 document->setNeedsStyleRecalc(SubtreeStyleChange); |
| 503 document->updateLayoutIgnorePendingStylesheets(); | 514 document->updateLayoutIgnorePendingStylesheets(); |
| 504 } | 515 } |
| 505 | 516 |
| 506 void LocalFrame::deviceOrPageScaleFactorChanged() | 517 void LocalFrame::deviceOrPageScaleFactorChanged() |
| 507 { | 518 { |
| 508 document()->mediaQueryAffectingValueChanged(); | 519 document()->mediaQueryAffectingValueChanged(); |
| 509 for (RefPtr<LocalFrame> child = tree().firstChild(); child; child = child->t
ree().nextSibling()) | 520 for (RefPtr<Frame> child = tree().firstChild(); child; child = child->tree()
.nextSibling()) { |
| 510 child->deviceOrPageScaleFactorChanged(); | 521 if (child->isLocalFrame()) |
| 522 toLocalFrame(child.get())->deviceOrPageScaleFactorChanged(); |
| 523 } |
| 511 } | 524 } |
| 512 | 525 |
| 513 bool LocalFrame::isURLAllowed(const KURL& url) const | 526 bool LocalFrame::isURLAllowed(const KURL& url) const |
| 514 { | 527 { |
| 515 // We allow one level of self-reference because some sites depend on that, | 528 // We allow one level of self-reference because some sites depend on that, |
| 516 // but we don't allow more than one. | 529 // but we don't allow more than one. |
| 517 if (page()->subframeCount() >= Page::maxNumberOfFrames) | 530 if (page()->subframeCount() >= Page::maxNumberOfFrames) |
| 518 return false; | 531 return false; |
| 519 bool foundSelfReference = false; | 532 bool foundSelfReference = false; |
| 520 for (const LocalFrame* frame = this; frame; frame = frame->tree().parent())
{ | 533 for (const Frame* frame = this; frame; frame = frame->tree().parent()) { |
| 521 if (equalIgnoringFragmentIdentifier(frame->document()->url(), url)) { | 534 if (!frame->isLocalFrame()) |
| 535 continue; |
| 536 if (equalIgnoringFragmentIdentifier(toLocalFrame(frame)->document()->url
(), url)) { |
| 522 if (foundSelfReference) | 537 if (foundSelfReference) |
| 523 return false; | 538 return false; |
| 524 foundSelfReference = true; | 539 foundSelfReference = true; |
| 525 } | 540 } |
| 526 } | 541 } |
| 527 return true; | 542 return true; |
| 528 } | 543 } |
| 529 | 544 |
| 530 struct ScopedFramePaintingState { | 545 struct ScopedFramePaintingState { |
| 531 ScopedFramePaintingState(LocalFrame* frame, Node* node) | 546 ScopedFramePaintingState(LocalFrame* frame, Node* node) |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 if (Document* doc = document()) | 650 if (Document* doc = document()) |
| 636 doc->topDocument().clearAXObjectCache(); | 651 doc->topDocument().clearAXObjectCache(); |
| 637 } | 652 } |
| 638 Frame::disconnectOwnerElement(); | 653 Frame::disconnectOwnerElement(); |
| 639 } | 654 } |
| 640 | 655 |
| 641 LocalFrame* LocalFrame::localFrameRoot() | 656 LocalFrame* LocalFrame::localFrameRoot() |
| 642 { | 657 { |
| 643 LocalFrame* curFrame = this; | 658 LocalFrame* curFrame = this; |
| 644 while (curFrame && curFrame->tree().parent() && curFrame->tree().parent()->i
sLocalFrame()) | 659 while (curFrame && curFrame->tree().parent() && curFrame->tree().parent()->i
sLocalFrame()) |
| 645 curFrame = curFrame->tree().parent(); | 660 curFrame = toLocalFrame(curFrame->tree().parent()); |
| 646 | 661 |
| 647 return curFrame; | 662 return curFrame; |
| 648 } | 663 } |
| 649 | 664 |
| 650 } // namespace WebCore | 665 } // namespace WebCore |
| OLD | NEW |