153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)/* 253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All Rights Reserved. 353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * 553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * This library is free software; you can redistribute it and/or 653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * modify it under the terms of the GNU Library General Public 753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * License as published by the Free Software Foundation; either 853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * version 2 of the License, or (at your option) any later version. 953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * This library is distributed in the hope that it will be useful, 1053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 1153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * Library General Public License for more details. 1353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * 1453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * You should have received a copy of the GNU Library General Public License 1553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 1653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 1753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * Boston, MA 02110-1301, USA. 1853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 1953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "config.h" 2153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 2253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ClientRectList.h" 2453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DocumentMarkerController.h" 259bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)#include "core/dom/StyleEngine.h" 2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/VisitedLinkState.h" 2723e46e0f045bc1935a09565578b448d36cfc5b8cBen Murdoch#include "core/editing/Caret.h" 2851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/editing/UndoStack.h" 291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/events/Event.h" 3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/fetch/ResourceFetcher.h" 31f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "core/frame/DOMTimer.h" 327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/frame/FrameConsole.h" 3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/FrameHost.h" 3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/FrameView.h" 357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/frame/LocalDOMWindow.h" 36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 375d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/frame/RemoteFrame.h" 385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/frame/RemoteFrameView.h" 3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/Settings.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorController.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorInstrumentation.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoader.h" 4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/loader/HistoryItem.h" 445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "core/page/AutoscrollController.h" 4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Chrome.h" 461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/page/ChromeClient.h" 4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/ContextMenuController.h" 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/DragController.h" 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FocusController.h" 5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FrameTree.h" 510019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#include "core/page/PageLifecycleNotifier.h" 5253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/PointerLockController.h" 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/page/StorageClient.h" 54e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/page/ValidationMessageClient.h" 5553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/scrolling/ScrollingCoordinator.h" 5653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderView.h" 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/rendering/TextAutosizer.h" 5853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/storage/StorageNamespace.h" 5951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/plugins/PluginData.h" 6081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "wtf/HashMap.h" 6181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "wtf/RefCountedLeakCounter.h" 6281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "wtf/StdLibExtras.h" 6381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)#include "wtf/text/Base64.h" 6453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 65c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 6653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 6753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, pageCounter, ("Page")); 6853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// static 7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)HashSet<Page*>& Page::allPages() 7153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) DEFINE_STATIC_LOCAL(HashSet<Page*>, allPages, ()); 7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return allPages; 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 75bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// static 77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)HashSet<Page*>& Page::ordinaryPages() 78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) DEFINE_STATIC_LOCAL(HashSet<Page*>, ordinaryPages, ()); 80d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return ordinaryPages; 81d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 82d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 83d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void Page::networkStateChanged(bool online) 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WillBeHeapVector<RefPtrWillBeMember<LocalFrame> > frames; 8753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 8853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // Get all the frames of all the pages in all the page groups 8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) HashSet<Page*>::iterator end = allPages().end(); 9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (HashSet<Page*>::iterator it = allPages().begin(); it != end; ++it) { 91f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree().traverseNext()) { 92f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // FIXME: There is currently no way to dispatch events to out-of-process frames. 93f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) 94f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) frames.append(toLocalFrame(frame)); 95f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 961e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) InspectorInstrumentation::networkStateChanged(*it, online); 9753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 9853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 991e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) AtomicString eventName = online ? EventTypeNames::online : EventTypeNames::offline; 10053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) for (unsigned i = 0; i < frames.size(); i++) 101f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frames[i]->domWindow()->dispatchEvent(Event::create(eventName)); 10253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 10353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 104d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)float deviceScaleFactor(LocalFrame* frame) 10553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 10653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!frame) 10753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return 1; 10853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Page* page = frame->page(); 10953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!page) 11053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return 1; 11153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return page->deviceScaleFactor(); 11253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 11353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 11453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)Page::Page(PageClients& pageClients) 11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) : SettingsDelegate(Settings::create()) 116697ef0c10ac944be8499480c025020e4c282c980Ben Murdoch , m_animator(PageAnimator::create(*this)) 11709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_autoscrollController(AutoscrollController::create(*this)) 1185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_chrome(Chrome::create(this, pageClients.chromeClient)) 11953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_dragCaretController(DragCaretController::create()) 12053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_dragController(DragController::create(this, pageClients.dragClient)) 12153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_focusController(FocusController::create(this)) 12253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_contextMenuController(ContextMenuController::create(this, pageClients.contextMenuClient)) 12353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_inspectorController(InspectorController::create(this, pageClients.inspectorClient)) 12453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_pointerLockController(PointerLockController::create(this)) 12551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) , m_undoStack(UndoStack::create()) 1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci , m_mainFrame(nullptr) 127bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) , m_backForwardClient(pageClients.backForwardClient) 12853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_editorClient(pageClients.editorClient) 12951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) , m_spellCheckerClient(pageClients.spellCheckerClient) 13009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_storageClient(pageClients.storageClient) 13153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_subframeCount(0) 13253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_openedByDOM(false) 13353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_tabKeyCyclesThroughElements(true) 13453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_defersLoading(false) 13553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_deviceScaleFactor(1) 13653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_timerAlignmentInterval(DOMTimer::visiblePageAlignmentInterval()) 13753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_visibilityState(PageVisibilityStateVisible) 13853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_isCursorVisible(true) 139197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT) 14053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_isPainting(false) 14153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#endif 14209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_frameHost(FrameHost::create(*this)) 14353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 14453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) ASSERT(m_editorClient); 14553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 14609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(!allPages().contains(this)); 14709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) allPages().add(this); 14853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 14953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#ifndef NDEBUG 15053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) pageCounter.increment(); 15153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#endif 15253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 15353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 15453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)Page::~Page() 15553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 15676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) // willBeDestroyed() must be called before Page destruction. 15776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) ASSERT(!m_mainFrame); 15853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 15953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 160d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void Page::makeOrdinary() 161d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 162d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ASSERT(!ordinaryPages().contains(this)); 163d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ordinaryPages().add(this); 164d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 165d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 1661e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)ViewportDescription Page::viewportDescription() const 16753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 1685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return mainFrame() && mainFrame()->isLocalFrame() && deprecatedLocalMainFrame()->document() ? deprecatedLocalMainFrame()->document()->viewportDescription() : ViewportDescription(); 16953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 17053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 17153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)ScrollingCoordinator* Page::scrollingCoordinator() 17253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 1735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!m_scrollingCoordinator && m_settings->acceleratedCompositingEnabled()) 17453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_scrollingCoordinator = ScrollingCoordinator::create(this); 17553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 17653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_scrollingCoordinator.get(); 17753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 17853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 17953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)String Page::mainThreadScrollingReasonsAsText() 18053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 18153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator()) 18253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return scrollingCoordinator->mainThreadScrollingReasonsAsText(); 18353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 18453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return String(); 18553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 18653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 187a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben MurdochPassRefPtrWillBeRawPtr<ClientRectList> Page::nonFastScrollableRects(const LocalFrame* frame) 18853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 1895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (m_mainFrame->isLocalFrame() && deprecatedLocalMainFrame()->document()) 1905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) deprecatedLocalMainFrame()->document()->updateLayout(); 19153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 19253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Vector<IntRect> rects; 19353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator()) 19481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) rects = scrollingCoordinator->computeShouldHandleScrollGestureOnMainThreadRegion(frame, IntPoint()).rects(); 19553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 19653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Vector<FloatQuad> quads(rects.size()); 19753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) for (size_t i = 0; i < rects.size(); ++i) 19853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) quads[i] = FloatRect(rects[i]); 19953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return ClientRectList::create(quads); 20053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 20153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 20276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)void Page::setMainFrame(Frame* mainFrame) 20353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 204197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // Should only be called during initialization or swaps between local and 205197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // remote frames. 206197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // FIXME: Unfortunately we can't assert on this at the moment, because this 207197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // is called in the base constructor for both LocalFrame and RemoteFrame, 208197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // when the vtables for the derived classes have not yet been setup. 20953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_mainFrame = mainFrame; 21053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 21153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 212e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)void Page::documentDetached(Document* document) 213e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){ 21407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_multisamplingChangedObservers.clear(); 215e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_pointerLockController->documentDetached(document); 216e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_contextMenuController->documentDetached(document); 217e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (m_validationMessageClient) 218e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_validationMessageClient->documentDetached(*document); 219e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 220e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 22153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)bool Page::openedByDOM() const 22253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 22353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_openedByDOM; 22453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 22553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 22653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::setOpenedByDOM() 22753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 22853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_openedByDOM = true; 22953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 23053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 23153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::scheduleForcedStyleRecalcForAllPages() 23253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 23309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) HashSet<Page*>::iterator end = allPages().end(); 23409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (HashSet<Page*>::iterator it = allPages().begin(); it != end; ++it) 235f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree().traverseNext()) { 236f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) 237f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->setNeedsStyleRecalc(SubtreeStyleChange); 238f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 23953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 24053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 24153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::setNeedsRecalcStyleInAllFrames() 24253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 243f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { 244f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) 245f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->styleResolverChanged(); 246f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 24753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 24853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 24909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void Page::setNeedsLayoutInAllFrames() 25009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 251f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { 252f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!frame->isLocalFrame()) 253f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) continue; 254f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (FrameView* view = toLocalFrame(frame)->view()) { 25509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) view->setNeedsLayout(); 25609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) view->scheduleRelayout(); 25709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 25809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 25909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 26009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 26153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::refreshPlugins(bool reload) 26253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 26309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (allPages().isEmpty()) 26453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 26553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 26653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) PluginData::refresh(); 26753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WillBeHeapVector<RefPtrWillBeMember<LocalFrame> > framesNeedingReload; 26953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 27009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) HashSet<Page*>::iterator end = allPages().end(); 27109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (HashSet<Page*>::iterator it = allPages().begin(); it != end; ++it) { 27253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Page* page = *it; 27353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 27453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // Clear out the page's plug-in data. 27553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (page->m_pluginData) 276d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) page->m_pluginData = nullptr; 27753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 27853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!reload) 27953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) continue; 28053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 281f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree().traverseNext()) { 282f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame() && toLocalFrame(frame)->document()->containsPlugins()) 283f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) framesNeedingReload.append(toLocalFrame(frame)); 28453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 28553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 28653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 28753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) for (size_t i = 0; i < framesNeedingReload.size(); ++i) 288f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) framesNeedingReload[i]->loader().reload(); 28953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 29053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 29153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)PluginData* Page::pluginData() const 29253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 2935d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!deprecatedLocalMainFrame()->loader().allowPlugins(NotAboutToInstantiatePlugin)) 29453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return 0; 29553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!m_pluginData) 29653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_pluginData = PluginData::create(this); 29753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_pluginData.get(); 29853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 29953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 300f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)static Frame* incrementFrame(Frame* curr, bool forward, bool wrapFlag) 30153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 30253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return forward 303f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) ? curr->tree().traverseNextWithWrap(wrapFlag) 304f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) : curr->tree().traversePreviousWithWrap(wrapFlag); 30553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 30653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 30753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::unmarkAllTextMatches() 30853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 30953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!mainFrame()) 31053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 31153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 312f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) Frame* frame = mainFrame(); 31353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) do { 314f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) 315f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->markers().removeMarkers(DocumentMarker::TextMatch); 31653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) frame = incrementFrame(frame, true, false); 31753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } while (frame); 31853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 31953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 3205d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void Page::setValidationMessageClient(PassOwnPtrWillBeRawPtr<ValidationMessageClient> client) 321a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 322a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_validationMessageClient = client; 323a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 324a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 32553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::setDefersLoading(bool defers) 32653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 32753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (defers == m_defersLoading) 32853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 32953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 33053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_defersLoading = defers; 331f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { 332f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) 333f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->loader().setDefersLoading(defers); 334f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 33553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 33653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 33753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::setPageScaleFactor(float scale, const IntPoint& origin) 33853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 3395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!mainFrame()->isLocalFrame()) 3405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return; 3415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 3425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) FrameView* view = deprecatedLocalMainFrame()->view(); 34310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch PinchViewport& viewport = frameHost().pinchViewport(); 34453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 34510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch if (scale != viewport.scale()) { 34610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch viewport.setScale(scale); 34753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 348d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (view && !settings().pinchVirtualViewportEnabled()) 34993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) view->setVisibleContentScaleFactor(scale); 35053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 3515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) deprecatedLocalMainFrame()->deviceOrPageScaleFactorChanged(); 3521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_chrome->client().deviceOrPageScaleFactorChanged(); 35353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 354d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // FIXME: In virtual-viewport pinch mode, scale doesn't change the fixed-pos viewport; 355d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // remove once it's the only pinch mode in town. 35693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (view) 357d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) view->viewportConstrainedVisibleContentSizeChanged(true, true); 358d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 3595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) deprecatedLocalMainFrame()->loader().saveScrollState(); 36093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 36153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 36253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (view && view->scrollPosition() != origin) 36393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) view->notifyScrollPositionChanged(origin); 36453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 36553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 36610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochfloat Page::pageScaleFactor() const 36710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 36810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return frameHost().pinchViewport().scale(); 36910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 37010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 37153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::setDeviceScaleFactor(float scaleFactor) 37253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 37353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (m_deviceScaleFactor == scaleFactor) 37453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 37553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 37653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_deviceScaleFactor = scaleFactor; 37753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) setNeedsRecalcStyleInAllFrames(); 37853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 3795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (mainFrame() && mainFrame()->isLocalFrame()) { 3805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) deprecatedLocalMainFrame()->deviceOrPageScaleFactorChanged(); 3811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_chrome->client().deviceOrPageScaleFactorChanged(); 3821e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) } 38353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 38453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 3857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid Page::setDeviceColorProfile(const Vector<char>& profile) 3867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 3877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: implement. 3887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 3897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 3907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid Page::resetDeviceColorProfile() 3917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 3927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: implement. 3937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 3947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 39509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void Page::allVisitedStateChanged() 39653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 397d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) HashSet<Page*>::iterator pagesEnd = ordinaryPages().end(); 398d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) for (HashSet<Page*>::iterator it = ordinaryPages().begin(); it != pagesEnd; ++it) { 39953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Page* page = *it; 40076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) for (Frame* frame = page->m_mainFrame; frame; frame = frame->tree().traverseNext()) { 401f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) 402f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->visitedLinkState().invalidateStyleForAllLinks(); 403f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 40453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 40553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 40653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 40709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void Page::visitedStateChanged(LinkHash linkHash) 40853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 409d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) HashSet<Page*>::iterator pagesEnd = ordinaryPages().end(); 410d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) for (HashSet<Page*>::iterator it = ordinaryPages().begin(); it != pagesEnd; ++it) { 41153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Page* page = *it; 41276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) for (Frame* frame = page->m_mainFrame; frame; frame = frame->tree().traverseNext()) { 413f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) 414f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->visitedLinkState().invalidateStyleForLink(linkHash); 415f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 41653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 41753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 41853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 41953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)StorageNamespace* Page::sessionStorage(bool optionalCreate) 42053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 421591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!m_sessionStorage && optionalCreate) 42209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_sessionStorage = m_storageClient->createSessionStorageNamespace(); 42353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_sessionStorage.get(); 42453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 42553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 42653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::setTimerAlignmentInterval(double interval) 42753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 42853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (interval == m_timerAlignmentInterval) 42953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 43053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 43153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_timerAlignmentInterval = interval; 432f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNextWithWrap(false)) { 433f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame() && toLocalFrame(frame)->document()) 434f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->didChangeTimerAlignmentInterval(); 43553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 43653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 43753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 43853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)double Page::timerAlignmentInterval() const 43953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 44053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_timerAlignmentInterval; 44153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 44253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 443197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(ASSERT) 44453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::checkSubframeCountConsistency() const 44553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 44653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) ASSERT(m_subframeCount >= 0); 44753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 44853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) int subframeCount = 0; 449f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) 45053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) ++subframeCount; 45153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 45253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) ASSERT(m_subframeCount + 1 == subframeCount); 45353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 45453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#endif 45553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 45653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void Page::setVisibilityState(PageVisibilityState visibilityState, bool isInitialState) 45753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 45853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (m_visibilityState == visibilityState) 45953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 46053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_visibilityState = visibilityState; 46153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 462c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (visibilityState == blink::PageVisibilityStateVisible) 46353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) setTimerAlignmentInterval(DOMTimer::visiblePageAlignmentInterval()); 464c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) else 465c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) setTimerAlignmentInterval(DOMTimer::hiddenPageAlignmentInterval()); 466e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 4670019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch if (!isInitialState) 468f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) lifecycleNotifier().notifyPageVisibilityChanged(); 4690019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 4705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!isInitialState && m_mainFrame && m_mainFrame->isLocalFrame()) 4715d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) deprecatedLocalMainFrame()->didChangeVisibilityState(); 47253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 47353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 47453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)PageVisibilityState Page::visibilityState() const 47553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 47653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_visibilityState; 47753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 47853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 47910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool Page::isCursorVisible() const 48010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 48110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return m_isCursorVisible && settings().deviceSupportsMouse(); 48210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 48310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 484e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)void Page::addMultisamplingChangedObserver(MultisamplingChangedObserver* observer) 485e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 486e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) m_multisamplingChangedObservers.add(observer); 487e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 488e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 489e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)void Page::removeMultisamplingChangedObserver(MultisamplingChangedObserver* observer) 490e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 491e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) m_multisamplingChangedObservers.remove(observer); 492e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 493e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 49409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void Page::settingsChanged(SettingsDelegate::ChangeType changeType) 495e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles){ 49609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) switch (changeType) { 49709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case SettingsDelegate::StyleChange: 49809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsRecalcStyleInAllFrames(); 49909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 50009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case SettingsDelegate::ViewportDescriptionChange: 5015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (mainFrame() && mainFrame()->isLocalFrame()) 5025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) deprecatedLocalMainFrame()->document()->updateViewportDescription(); 50309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 50409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case SettingsDelegate::MediaTypeChange: 5055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (m_mainFrame->isLocalFrame()) { 5065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) deprecatedLocalMainFrame()->view()->setMediaType(AtomicString(settings().mediaTypeOverride())); 5075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) setNeedsRecalcStyleInAllFrames(); 5085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 50909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 51009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case SettingsDelegate::DNSPrefetchingChange: 511f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { 512f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) 513f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->initDNSPrefetch(); 514f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 51509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 51609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case SettingsDelegate::MultisamplingChange: { 517f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu WillBeHeapHashSet<RawPtrWillBeWeakMember<MultisamplingChangedObserver> >::iterator stop = m_multisamplingChangedObservers.end(); 518f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu for (WillBeHeapHashSet<RawPtrWillBeWeakMember<MultisamplingChangedObserver> >::iterator it = m_multisamplingChangedObservers.begin(); it != stop; ++it) 51909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) (*it)->multisamplingChanged(m_settings->openGLMultisamplingEnabled()); 52009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 52109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 52209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case SettingsDelegate::ImageLoadingChange: 523f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { 524f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) { 525f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->fetcher()->setImagesEnabled(settings().imagesEnabled()); 526f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->fetcher()->setAutoLoadImages(settings().loadsImagesAutomatically()); 527f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 52809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 52909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 53009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case SettingsDelegate::TextAutosizingChange: 5315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!mainFrame() || !mainFrame()->isLocalFrame()) 532aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 533c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (TextAutosizer* textAutosizer = deprecatedLocalMainFrame()->document()->textAutosizer()) 534aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch textAutosizer->updatePageInfoInAllFrames(); 53509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 53609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case SettingsDelegate::ScriptEnableChange: 53709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_inspectorController->scriptsEnabled(settings().scriptEnabled()); 53809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 53909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case SettingsDelegate::FontFamilyChange: 540f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { 541f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (frame->isLocalFrame()) 542f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toLocalFrame(frame)->document()->styleEngine()->updateGenericFontFamilySettings(); 543f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 54409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) setNeedsRecalcStyleInAllFrames(); 54509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 5466f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch case SettingsDelegate::AcceleratedCompositingChange: 5476f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch updateAcceleratedCompositingSettings(); 5486f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch break; 5497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci case SettingsDelegate::MediaQueryChange: 5507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { 5517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (frame->isLocalFrame()) 5527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci toLocalFrame(frame)->document()->mediaQueryAffectingValueChanged(); 5537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 5547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci setNeedsRecalcStyleInAllFrames(); 5557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci break; 5566f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch } 5576f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} 5586f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 5596f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochvoid Page::updateAcceleratedCompositingSettings() 5606f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch{ 561f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { 562f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!frame->isLocalFrame()) 563f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) continue; 564f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (FrameView* view = toLocalFrame(frame)->view()) 5656f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch view->updateAcceleratedCompositingSettings(); 56609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 567e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)} 568e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 569d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void Page::didCommitLoad(LocalFrame* frame) 57083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch{ 571f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) lifecycleNotifier().notifyDidCommitLoad(frame); 57209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_mainFrame == frame) { 5737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci frame->console().clearMessages(); 574e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) useCounter().didCommitLoad(); 57509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_inspectorController->didCommitLoadForMainFrame(); 5767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci UserGestureIndicator::clearProcessedUserGestureSinceLoad(); 57709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 57883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch} 57983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 580f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)void Page::acceptLanguagesChanged() 581f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 5827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WillBeHeapVector<RefPtrWillBeMember<LocalFrame> > frames; 583f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 58476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) // Even though we don't fire an event from here, the LocalDOMWindow's will fire 585f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // an event so we keep the frames alive until we are done. 5865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { 5875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (frame->isLocalFrame()) 5885d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frames.append(toLocalFrame(frame)); 5895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 590f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 591f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (unsigned i = 0; i < frames.size(); ++i) 592f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) frames[i]->domWindow()->acceptLanguagesChanged(); 593f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 594f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 595f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)PageLifecycleNotifier& Page::lifecycleNotifier() 5960019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch{ 59751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return static_cast<PageLifecycleNotifier&>(LifecycleContext<Page>::lifecycleNotifier()); 5980019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch} 5990019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 600f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)PassOwnPtr<LifecycleNotifier<Page> > Page::createLifecycleNotifier() 6010019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch{ 6020019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch return PageLifecycleNotifier::create(this); 6030019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch} 6040019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 6056f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochvoid Page::trace(Visitor* visitor) 6066f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch{ 607197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#if ENABLE(OILPAN) 608697ef0c10ac944be8499480c025020e4c282c980Ben Murdoch visitor->trace(m_animator); 609f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) visitor->trace(m_dragCaretController); 610d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) visitor->trace(m_dragController); 6117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci visitor->trace(m_focusController); 6125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_contextMenuController); 613c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) visitor->trace(m_inspectorController); 6145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_pointerLockController); 6155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_undoStack); 6167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci visitor->trace(m_mainFrame); 6175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) visitor->trace(m_validationMessageClient); 618f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu visitor->trace(m_multisamplingChangedObservers); 619323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) visitor->trace(m_frameHost); 6207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HeapSupplementable<Page>::trace(visitor); 621197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif 622e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) LifecycleContext<Page>::trace(visitor); 6236f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} 6246f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 6256f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochvoid Page::willBeDestroyed() 6266f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch{ 6277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Destroy inspector first, since it uses frame and view during destruction. 6287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_inspectorController->willBeDestroyed(); 62976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 6307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<Frame> mainFrame = m_mainFrame; 6315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 6327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mainFrame->detach(); 6336f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 63476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) if (mainFrame->isLocalFrame()) { 63576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) toLocalFrame(mainFrame.get())->setView(nullptr); 6365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } else { 6375d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ASSERT(m_mainFrame->isRemoteFrame()); 63876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) toRemoteFrame(mainFrame.get())->setView(nullptr); 6395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 6406f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 6416f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch allPages().remove(this); 6426f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (ordinaryPages().contains(this)) 6436f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch ordinaryPages().remove(this); 6446f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 6456f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (m_scrollingCoordinator) 6466f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch m_scrollingCoordinator->willBeDestroyed(); 6476f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 6486f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch#ifndef NDEBUG 6496f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch pageCounter.decrement(); 6506f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch#endif 6516f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 6526f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch m_chrome->willBeDestroyed(); 6536f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (m_validationMessageClient) 6546f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch m_validationMessageClient->willBeDestroyed(); 6557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_mainFrame = nullptr; 6566f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} 6576f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 65853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)Page::PageClients::PageClients() 65981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) : chromeClient(0) 66053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , contextMenuClient(0) 66153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , editorClient(0) 66253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , dragClient(0) 66353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , inspectorClient(0) 6641e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) , backForwardClient(0) 66551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) , spellCheckerClient(0) 66609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , storageClient(0) 66753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 66853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 66953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 67053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)Page::PageClients::~PageClients() 67153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 67253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 67353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 674c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 675