| 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 30 matching lines...) Expand all Loading... |
| 41 #include "core/events/Event.h" | 41 #include "core/events/Event.h" |
| 42 #include "core/fetch/ResourceFetcher.h" | 42 #include "core/fetch/ResourceFetcher.h" |
| 43 #include "core/frame/EventHandlerRegistry.h" | 43 #include "core/frame/EventHandlerRegistry.h" |
| 44 #include "core/frame/FrameConsole.h" | 44 #include "core/frame/FrameConsole.h" |
| 45 #include "core/frame/FrameDestructionObserver.h" | 45 #include "core/frame/FrameDestructionObserver.h" |
| 46 #include "core/frame/FrameHost.h" | 46 #include "core/frame/FrameHost.h" |
| 47 #include "core/frame/FrameView.h" | 47 #include "core/frame/FrameView.h" |
| 48 #include "core/frame/LocalDOMWindow.h" | 48 #include "core/frame/LocalDOMWindow.h" |
| 49 #include "core/frame/Settings.h" | 49 #include "core/frame/Settings.h" |
| 50 #include "core/html/HTMLFrameElementBase.h" | 50 #include "core/html/HTMLFrameElementBase.h" |
| 51 #include "core/html/HTMLPlugInElement.h" |
| 51 #include "core/inspector/ConsoleMessageStorage.h" | 52 #include "core/inspector/ConsoleMessageStorage.h" |
| 52 #include "core/inspector/InspectorInstrumentation.h" | 53 #include "core/inspector/InspectorInstrumentation.h" |
| 53 #include "core/loader/FrameLoaderClient.h" | 54 #include "core/loader/FrameLoaderClient.h" |
| 54 #include "core/page/Chrome.h" | 55 #include "core/page/Chrome.h" |
| 55 #include "core/page/EventHandler.h" | 56 #include "core/page/EventHandler.h" |
| 56 #include "core/page/FocusController.h" | 57 #include "core/page/FocusController.h" |
| 57 #include "core/page/Page.h" | 58 #include "core/page/Page.h" |
| 58 #include "core/page/scrolling/ScrollingCoordinator.h" | 59 #include "core/page/scrolling/ScrollingCoordinator.h" |
| 59 #include "core/rendering/HitTestResult.h" | 60 #include "core/rendering/HitTestResult.h" |
| 60 #include "core/rendering/RenderLayer.h" | 61 #include "core/rendering/RenderLayer.h" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 (*it)->frameDestroyed(); | 139 (*it)->frameDestroyed(); |
| 139 #endif | 140 #endif |
| 140 } | 141 } |
| 141 | 142 |
| 142 void LocalFrame::trace(Visitor* visitor) | 143 void LocalFrame::trace(Visitor* visitor) |
| 143 { | 144 { |
| 144 #if ENABLE(OILPAN) | 145 #if ENABLE(OILPAN) |
| 145 visitor->trace(m_destructionObservers); | 146 visitor->trace(m_destructionObservers); |
| 146 visitor->trace(m_loader); | 147 visitor->trace(m_loader); |
| 147 visitor->trace(m_navigationScheduler); | 148 visitor->trace(m_navigationScheduler); |
| 149 visitor->trace(m_view); |
| 148 visitor->trace(m_pagePopupOwner); | 150 visitor->trace(m_pagePopupOwner); |
| 149 visitor->trace(m_script); | 151 visitor->trace(m_script); |
| 150 visitor->trace(m_editor); | 152 visitor->trace(m_editor); |
| 151 visitor->trace(m_spellChecker); | 153 visitor->trace(m_spellChecker); |
| 152 visitor->trace(m_selection); | 154 visitor->trace(m_selection); |
| 153 visitor->trace(m_eventHandler); | 155 visitor->trace(m_eventHandler); |
| 154 visitor->trace(m_console); | 156 visitor->trace(m_console); |
| 155 visitor->trace(m_inputMethodController); | 157 visitor->trace(m_inputMethodController); |
| 158 visitor->registerWeakMembers<LocalFrame, &LocalFrame::clearWeakMembers>(this
); |
| 156 HeapSupplementable<LocalFrame>::trace(visitor); | 159 HeapSupplementable<LocalFrame>::trace(visitor); |
| 157 #endif | 160 #endif |
| 158 Frame::trace(visitor); | 161 Frame::trace(visitor); |
| 159 } | 162 } |
| 160 | 163 |
| 164 #if ENABLE(OILPAN) |
| 165 void LocalFrame::clearWeakMembers(Visitor* visitor) |
| 166 { |
| 167 Vector<HTMLPlugInElement*> deadPlugins; |
| 168 for (HashSet<HTMLPlugInElement*>::const_iterator it = m_pluginElements.begin
(); it != m_pluginElements.end(); ++it) { |
| 169 if (!visitor->isAlive(*it)) { |
| 170 (*it)->shouldDisposePlugin(); |
| 171 deadPlugins.append(*it); |
| 172 } |
| 173 } |
| 174 for (unsigned i = 0; i < deadPlugins.size(); ++i) |
| 175 m_pluginElements.remove(deadPlugins[i]); |
| 176 } |
| 177 #endif |
| 178 |
| 161 void LocalFrame::navigate(Document& originDocument, const KURL& url, bool lockBa
ckForwardList) | 179 void LocalFrame::navigate(Document& originDocument, const KURL& url, bool lockBa
ckForwardList) |
| 162 { | 180 { |
| 163 m_navigationScheduler.scheduleLocationChange(&originDocument, url.string(),
lockBackForwardList); | 181 m_navigationScheduler.scheduleLocationChange(&originDocument, url.string(),
lockBackForwardList); |
| 164 } | 182 } |
| 165 | 183 |
| 166 void LocalFrame::detach() | 184 void LocalFrame::detach() |
| 167 { | 185 { |
| 168 // A lot of the following steps can result in the current frame being | 186 // A lot of the following steps can result in the current frame being |
| 169 // detached, so protect a reference to it. | 187 // detached, so protect a reference to it. |
| 170 RefPtrWillBeRawPtr<LocalFrame> protect(this); | 188 RefPtrWillBeRawPtr<LocalFrame> protect(this); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 195 { | 213 { |
| 196 // We detach the FrameView's custom scroll bars as early as | 214 // We detach the FrameView's custom scroll bars as early as |
| 197 // possible to prevent m_doc->detach() from messing with the view | 215 // possible to prevent m_doc->detach() from messing with the view |
| 198 // such that its scroll bars won't be torn down. | 216 // such that its scroll bars won't be torn down. |
| 199 // | 217 // |
| 200 // FIXME: We should revisit this. | 218 // FIXME: We should revisit this. |
| 201 if (m_view) | 219 if (m_view) |
| 202 m_view->prepareForDetach(); | 220 m_view->prepareForDetach(); |
| 203 } | 221 } |
| 204 | 222 |
| 205 void LocalFrame::setView(PassRefPtr<FrameView> view) | 223 void LocalFrame::setView(PassRefPtrWillBeRawPtr<FrameView> view) |
| 206 { | 224 { |
| 225 ASSERT(!m_view || m_view != view); |
| 207 detachView(); | 226 detachView(); |
| 208 | 227 |
| 209 // Prepare for destruction now, so any unload event handlers get run and the
LocalDOMWindow is | 228 // Prepare for destruction now, so any unload event handlers get run and the
LocalDOMWindow is |
| 210 // notified. If we wait until the view is destroyed, then things won't be ho
oked up enough for | 229 // notified. If we wait until the view is destroyed, then things won't be ho
oked up enough for |
| 211 // these calls to work. | 230 // these calls to work. |
| 212 if (!view && document() && document()->isActive()) { | 231 if (!view && document() && document()->isActive()) { |
| 213 // FIXME: We don't call willRemove here. Why is that OK? | 232 // FIXME: We don't call willRemove here. Why is that OK? |
| 214 document()->prepareForDestruction(); | 233 document()->prepareForDestruction(); |
| 215 } | 234 } |
| 216 | 235 |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 ASSERT(this); | 460 ASSERT(this); |
| 442 ASSERT(page()); | 461 ASSERT(page()); |
| 443 | 462 |
| 444 bool isLocalRoot = this->isLocalRoot(); | 463 bool isLocalRoot = this->isLocalRoot(); |
| 445 | 464 |
| 446 if (isLocalRoot && view()) | 465 if (isLocalRoot && view()) |
| 447 view()->setParentVisible(false); | 466 view()->setParentVisible(false); |
| 448 | 467 |
| 449 setView(nullptr); | 468 setView(nullptr); |
| 450 | 469 |
| 451 RefPtr<FrameView> frameView; | 470 RefPtrWillBeRawPtr<FrameView> frameView = nullptr; |
| 452 if (isLocalRoot) { | 471 if (isLocalRoot) { |
| 453 frameView = FrameView::create(this, viewportSize); | 472 frameView = FrameView::create(this, viewportSize); |
| 454 | 473 |
| 455 // The layout size is set by WebViewImpl to support @viewport | 474 // The layout size is set by WebViewImpl to support @viewport |
| 456 frameView->setLayoutSizeFixedToFrameSize(false); | 475 frameView->setLayoutSizeFixedToFrameSize(false); |
| 457 } else | 476 } else |
| 458 frameView = FrameView::create(this); | 477 frameView = FrameView::create(this); |
| 459 | 478 |
| 460 frameView->setScrollbarModes(horizontalScrollbarMode, verticalScrollbarMode,
horizontalLock, verticalLock); | 479 frameView->setScrollbarModes(horizontalScrollbarMode, verticalScrollbarMode,
horizontalLock, verticalLock); |
| 461 | 480 |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 ratio *= pageZoomFactor(); | 735 ratio *= pageZoomFactor(); |
| 717 return ratio; | 736 return ratio; |
| 718 } | 737 } |
| 719 | 738 |
| 720 void LocalFrame::disconnectOwnerElement() | 739 void LocalFrame::disconnectOwnerElement() |
| 721 { | 740 { |
| 722 if (owner()) { | 741 if (owner()) { |
| 723 if (Document* document = this->document()) | 742 if (Document* document = this->document()) |
| 724 document->topDocument().clearAXObjectCache(); | 743 document->topDocument().clearAXObjectCache(); |
| 725 #if ENABLE(OILPAN) | 744 #if ENABLE(OILPAN) |
| 745 // First give the plugin elements holding persisted, |
| 746 // renderer-less plugins the opportunity to dispose of them. |
| 747 for (HashSet<HTMLPlugInElement*>::const_iterator it = m_pluginElements.b
egin(); it != m_pluginElements.end(); ++it) |
| 748 (*it)->disconnectContentFrame(); |
| 749 m_pluginElements.clear(); |
| 750 |
| 726 // Clear the FrameView and FrameLoader right here rather than | 751 // Clear the FrameView and FrameLoader right here rather than |
| 727 // during finalization. Too late to access various heap objects | 752 // during finalization. Too late to access various heap objects |
| 728 // at that stage. | 753 // at that stage. |
| 729 setView(nullptr); | 754 setView(nullptr); |
| 730 loader().clear(); | 755 loader().clear(); |
| 731 #endif | 756 #endif |
| 732 } | 757 } |
| 733 Frame::disconnectOwnerElement(); | 758 Frame::disconnectOwnerElement(); |
| 734 } | 759 } |
| 735 | 760 |
| 736 LocalFrame* LocalFrame::localFrameRoot() | 761 LocalFrame* LocalFrame::localFrameRoot() |
| 737 { | 762 { |
| 738 LocalFrame* curFrame = this; | 763 LocalFrame* curFrame = this; |
| 739 while (curFrame && curFrame->tree().parent() && curFrame->tree().parent()->i
sLocalFrame()) | 764 while (curFrame && curFrame->tree().parent() && curFrame->tree().parent()->i
sLocalFrame()) |
| 740 curFrame = toLocalFrame(curFrame->tree().parent()); | 765 curFrame = toLocalFrame(curFrame->tree().parent()); |
| 741 | 766 |
| 742 return curFrame; | 767 return curFrame; |
| 743 } | 768 } |
| 744 | 769 |
| 745 void LocalFrame::setPagePopupOwner(Element& owner) | 770 void LocalFrame::setPagePopupOwner(Element& owner) |
| 746 { | 771 { |
| 747 m_pagePopupOwner = &owner; | 772 m_pagePopupOwner = &owner; |
| 748 } | 773 } |
| 749 | 774 |
| 775 #if ENABLE(OILPAN) |
| 776 void LocalFrame::registerPluginElement(HTMLPlugInElement* plugin) |
| 777 { |
| 778 m_pluginElements.add(plugin); |
| 779 } |
| 780 |
| 781 void LocalFrame::unregisterPluginElement(HTMLPlugInElement* plugin) |
| 782 { |
| 783 ASSERT(m_pluginElements.contains(plugin)); |
| 784 m_pluginElements.remove(plugin); |
| 785 } |
| 786 #endif |
| 787 |
| 750 } // namespace blink | 788 } // namespace blink |
| OLD | NEW |