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