18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All Rights Reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h" 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "BackForwardController.h" 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "BackForwardList.h" 25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "Base64.h" 265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "CSSStyleSelector.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Chrome.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ChromeClient.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ContextMenuClient.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ContextMenuController.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DOMWindow.h" 32a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "DeviceMotionController.h" 33e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "DeviceOrientationController.h" 34cad810f21b803229eb11403f9209855525a25d57Steve Block#include "DocumentMarkerController.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DragController.h" 365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "EditorClient.h" 37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "Event.h" 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "EventNames.h" 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "ExceptionCode.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FileSystem.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FocusController.h" 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoader.h" 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "FrameLoaderClient.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameTree.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h" 475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "HTMLElement.h" 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HistoryItem.h" 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "InspectorController.h" 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InspectorInstrumentation.h" 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Logging.h" 52692e5dbf12901edacf14812a6fae25462920af42Steve Block#include "MediaCanStartListener.h" 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Navigator.h" 545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "NetworkStateNotifier.h" 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PageGroup.h" 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginData.h" 57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "PluginHalter.h" 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "PluginView.h" 59a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "PluginViewBase.h" 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ProgressTracker.h" 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderTheme.h" 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "RenderWidget.h" 63967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#include "RuntimeEnabledFeatures.h" 645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "ScriptController.h" 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SelectionController.h" 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Settings.h" 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "SharedBuffer.h" 680617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "SpeechInput.h" 69967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#include "SpeechInputClient.h" 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "TextResourceDecoder.h" 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Widget.h" 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/HashMap.h> 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefCountedLeakCounter.h> 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <wtf/StdLibExtras.h> 75f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/StringHash.h> 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 77a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if ENABLE(ACCELERATED_2D_CANVAS) 78a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "SharedGraphicsContext3D.h" 79a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif 80a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DOM_STORAGE) 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "StorageArea.h" 830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "StorageNamespace.h" 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WML) 87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLPageState.h" 88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 90370b559b082915acb99b185ed8c8e317fc654db6Steve Block#if ENABLE(CLIENT_BASED_GEOLOCATION) 91370b559b082915acb99b185ed8c8e317fc654db6Steve Block#include "GeolocationController.h" 92370b559b082915acb99b185ed8c8e317fc654db6Steve Block#endif 93370b559b082915acb99b185ed8c8e317fc654db6Steve Block 9429a61d852e0ccad2dbbc64aadf491685cae3ca7dLeon Clarke#if PLATFORM(ANDROID) && ENABLE(APPLICATION_INSTALLED) 9529a61d852e0ccad2dbbc64aadf491685cae3ca7dLeon Clarke#include "PackageNotifier.h" 969fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#endif 979fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic HashSet<Page*>* allPages; 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic WTF::RefCountedLeakCounter pageCounter("Page"); 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void networkStateChanged() 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<RefPtr<Frame> > frames; 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Get all the frames of all the pages in all the page groups 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashSet<Page*>::iterator end = allPages->end(); 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashSet<Page*>::iterator it = allPages->begin(); it != end; ++it) { 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree()->traverseNext()) 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frames.append(frame); 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch InspectorInstrumentation::networkStateChanged(*it); 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AtomicString eventName = networkStateNotifier().onLine() ? eventNames().onlineEvent : eventNames().offlineEvent; 1195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian for (unsigned i = 0; i < frames.size(); i++) 120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block frames[i]->document()->dispatchWindowEvent(Event::create(eventName, false, false)); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1239fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#if PLATFORM(ANDROID) && ENABLE(APPLICATION_INSTALLED) 1249fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescustatic void onPackageResultAvailable() 1259fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu{ 1269fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu HashSet<Page*>::iterator end = allPages->end(); 1279fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu for (HashSet<Page*>::iterator it = allPages->begin(); it != end; ++it) { 1289fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree()->traverseNext()) 1299fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu frame->domWindow()->navigator()->onPackageResult(); 1309fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu } 1319fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu} 1329fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#endif 1339fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu 1340617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenPage::Page(const PageClients& pageClients) 13528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu : m_chrome(adoptPtr(new Chrome(this, pageClients.chromeClient))) 13628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , m_dragCaretController(adoptPtr(new SelectionController(0, true))) 137231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT) 13828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , m_dragController(adoptPtr(new DragController(this, pageClients.dragClient))) 139231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 14028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , m_focusController(adoptPtr(new FocusController(this))) 141231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(CONTEXT_MENUS) 14228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , m_contextMenuController(adoptPtr(new ContextMenuController(this, pageClients.contextMenuClient))) 143231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 144231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(INSPECTOR) 14528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , m_inspectorController(adoptPtr(new InspectorController(this, pageClients.inspectorClient))) 146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 147370b559b082915acb99b185ed8c8e317fc654db6Steve Block#if ENABLE(CLIENT_BASED_GEOLOCATION) 1486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , m_geolocationController(adoptPtr(new GeolocationController(this, pageClients.geolocationClient))) 149370b559b082915acb99b185ed8c8e317fc654db6Steve Block#endif 150e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#if ENABLE(DEVICE_ORIENTATION) 151dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , m_deviceMotionController(RuntimeEnabledFeatures::deviceMotionEnabled() ? new DeviceMotionController(pageClients.deviceMotionClient) : 0) 1520617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen , m_deviceOrientationController(RuntimeEnabledFeatures::deviceOrientationEnabled() ? new DeviceOrientationController(this, pageClients.deviceOrientationClient) : 0) 153967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 154967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if ENABLE(INPUT_SPEECH) 1550617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen , m_speechInputClient(pageClients.speechInputClient) 156e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#endif 15728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , m_settings(adoptPtr(new Settings(this))) 15828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , m_progress(adoptPtr(new ProgressTracker)) 15928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , m_backForwardController(adoptPtr(new BackForwardController(this, pageClients.backForwardClient))) 1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_theme(RenderTheme::themeForPage(this)) 1610617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen , m_editorClient(pageClients.editorClient) 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_frameCount(0) 163231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block , m_openedByDOM(false) 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_tabKeyCyclesThroughElements(true) 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_defersLoading(false) 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_inLowQualityInterpolationMode(false) 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_cookieEnabled(true) 168635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_areMemoryCacheClientCallsEnabled(true) 169635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_mediaVolume(1) 1705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , m_javaScriptURLsAreAllowed(true) 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_didLoadUserStyleSheet(false) 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_userStyleSheetModificationTime(0) 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_group(0) 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_debugger(0) 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_customHTMLTokenizerTimeDelay(-1) 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_customHTMLTokenizerChunkSize(-1) 177692e5dbf12901edacf14812a6fae25462920af42Steve Block , m_canStartMedia(true) 178db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block , m_viewMode(ViewModeWindowed) 17981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_minimumTimerInterval(Settings::defaultMinDOMTimerInterval()) 1802bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_isEditable(false) 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!allPages) { 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project allPages = new HashSet<Page*>; 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project networkStateNotifier().setNetworkStateChangedFunction(networkStateChanged); 1869fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#if PLATFORM(ANDROID) && ENABLE(APPLICATION_INSTALLED) 1879fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu packageNotifier().setOnResultAvailable(onPackageResultAvailable); 1889fed475722a5da7e9fac4d78715b17ca5ed29335Andrei Popescu#endif 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!allPages->contains(this)); 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project allPages->add(this); 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1940617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (pageClients.pluginHalterClient) { 1950617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen m_pluginHalter.set(new PluginHalter(pageClients.pluginHalterClient)); 196cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block m_pluginHalter->setPluginAllowedRunTime(m_settings->pluginAllowedRunTime()); 197cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 198231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCounter.increment(); 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPage::~Page() 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_mainFrame->setView(0); 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setGroupName(String()); 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project allPages->remove(this); 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame->pageDestroyed(); 2128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 2132bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_scrollableAreaSet) { 2142bde8e466a4451c7319e3a072d118917957d6554Steve Block ScrollableAreaSet::const_iterator end = m_scrollableAreaSet->end(); 2152bde8e466a4451c7319e3a072d118917957d6554Steve Block for (ScrollableAreaSet::const_iterator it = m_scrollableAreaSet->begin(); it != end; ++it) 2162bde8e466a4451c7319e3a072d118917957d6554Steve Block (*it)->disconnectFromPage(); 2172bde8e466a4451c7319e3a072d118917957d6554Steve Block } 2182bde8e466a4451c7319e3a072d118917957d6554Steve Block 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_editorClient->pageDestroyed(); 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch InspectorInstrumentation::inspectedPageDestroyed(this); 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu backForward()->close(); 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCounter.decrement(); 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Cancel keepAlive timers, to ensure we release all Frames before exiting. 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // It's safe to do this because we prohibit closing a Page while JavaScript 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // is executing. 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame::cancelAllKeepAlive(); 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 235db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockstruct ViewModeInfo { 236db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block const char* name; 237db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block Page::ViewMode type; 238db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}; 239db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockstatic const int viewModeMapSize = 5; 240db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockstatic ViewModeInfo viewModeMap[viewModeMapSize] = { 241db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block {"windowed", Page::ViewModeWindowed}, 242db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block {"floating", Page::ViewModeFloating}, 243db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block {"fullscreen", Page::ViewModeFullscreen}, 244db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block {"maximized", Page::ViewModeMaximized}, 245db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block {"minimized", Page::ViewModeMinimized} 246db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}; 247db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 248db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockPage::ViewMode Page::stringToViewMode(const String& text) 249db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 250db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block for (int i = 0; i < viewModeMapSize; ++i) { 251db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (text == viewModeMap[i].name) 252db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return viewModeMap[i].type; 253db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block } 254db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return Page::ViewModeInvalid; 255db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 256db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 257db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid Page::setViewMode(ViewMode viewMode) 258db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{ 259db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (viewMode == m_viewMode || viewMode == ViewModeInvalid) 260db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return; 261db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 262db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block m_viewMode = viewMode; 263db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 264db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (!m_mainFrame) 265db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block return; 266db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 267db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (m_mainFrame->view()) 268db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block m_mainFrame->view()->forceLayout(); 269db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 270db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block if (m_mainFrame->document()) 2715ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_mainFrame->document()->styleSelectorChanged(RecalcStyleImmediately); 272db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block} 273db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::setMainFrame(PassRefPtr<Frame> mainFrame) 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!m_mainFrame); // Should only be called during initialization 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_mainFrame = mainFrame; 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 280231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockbool Page::openedByDOM() const 281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 282231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return m_openedByDOM; 283231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 284231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 285231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid Page::setOpenedByDOM() 286231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 287231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_openedByDOM = true; 288231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 289231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 290e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeBackForwardList* Page::backForwardList() const 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 29228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return m_backForwardController->client(); 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Page::goBack() 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 29728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu HistoryItem* item = backForward()->backItem(); 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (item) { 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project goToItem(item, FrameLoadTypeBack); 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Page::goForward() 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 30828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu HistoryItem* item = backForward()->forwardItem(); 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (item) { 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project goToItem(item, FrameLoadTypeForward); 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 317231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockbool Page::canGoBackOrForward(int distance) const 318231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 319231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (distance == 0) 320231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return true; 32128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (distance > 0 && distance <= backForward()->forwardCount()) 322231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return true; 32328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (distance < 0 && -distance <= backForward()->backCount()) 324231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return true; 325231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return false; 326231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 327231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 328231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid Page::goBackOrForward(int distance) 329231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 330231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (distance == 0) 331231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 332231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 33328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu HistoryItem* item = backForward()->itemAtIndex(distance); 334231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!item) { 335231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (distance > 0) { 33628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (int forwardCount = backForward()->forwardCount()) 33728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu item = backForward()->itemAtIndex(forwardCount); 338231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } else { 33928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (int backCount = backForward()->backCount()) 34028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu item = backForward()->itemAtIndex(-backCount); 341231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 342231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 343231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 34428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu ASSERT(item); 34528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (!item) 34628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return; 34728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 34828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu goToItem(item, FrameLoadTypeIndexedBackForward); 349231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 350231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::goToItem(HistoryItem* item, FrameLoadType type) 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 353f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (defersLoading()) 354f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return; 35528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 35628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu // stopAllLoaders may end up running onload handlers, which could cause further history traversals that may lead to the passed in HistoryItem 35728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu // being deref()-ed. Make sure we can still use it with HistoryController::goToItem later. 35828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu RefPtr<HistoryItem> protector(item); 359643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 36081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (m_mainFrame->loader()->history()->shouldStopLoadingForHistoryItem(item)) 36181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_mainFrame->loader()->stopAllLoaders(); 36281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 363cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block m_mainFrame->loader()->history()->goToItem(item, type); 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 366231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockint Page::getHistoryLength() 367231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 36828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return backForward()->backCount() + 1 + backForward()->forwardCount(); 369231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 370231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::setGroupName(const String& name) 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_group && !m_group->name().isEmpty()) { 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(m_group != m_singlePageGroup.get()); 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!m_singlePageGroup); 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_group->removePage(this); 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (name.isEmpty()) 3808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_group = m_singlePageGroup.get(); 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else { 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_singlePageGroup.clear(); 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_group = PageGroup::pageGroup(name); 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_group->addPage(this); 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectconst String& Page::groupName() const 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 390635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project DEFINE_STATIC_LOCAL(String, nullString, ()); 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_group ? m_group->name() : nullString; 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::initGroup() 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!m_singlePageGroup); 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!m_group); 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_singlePageGroup.set(new PageGroup(this)); 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_group = m_singlePageGroup.get(); 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4025ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenvoid Page::scheduleForcedStyleRecalcForAllPages() 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!allPages) 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashSet<Page*>::iterator end = allPages->end(); 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashSet<Page*>::iterator it = allPages->begin(); it != end; ++it) 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree()->traverseNext()) 4095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen frame->document()->scheduleForcedStyleRecalc(); 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4122bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid Page::setNeedsRecalcStyleInAllFrames() 4132bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 4142bde8e466a4451c7319e3a072d118917957d6554Steve Block for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) 4152bde8e466a4451c7319e3a072d118917957d6554Steve Block frame->document()->styleSelectorChanged(DeferRecalcStyle); 4162bde8e466a4451c7319e3a072d118917957d6554Steve Block} 4172bde8e466a4451c7319e3a072d118917957d6554Steve Block 418a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid Page::updateViewportArguments() 419a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 420a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!mainFrame() || !mainFrame()->document() || mainFrame()->document()->viewportArguments() == m_viewportArguments) 421a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 422a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 423a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_viewportArguments = mainFrame()->document()->viewportArguments(); 424a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch chrome()->dispatchViewportDataDidChange(m_viewportArguments); 425a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 426a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::refreshPlugins(bool reload) 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!allPages) 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PluginData::refresh(); 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<RefPtr<Frame> > framesNeedingReload; 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashSet<Page*>::iterator end = allPages->end(); 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashSet<Page*>::iterator it = allPages->begin(); it != end; ++it) { 4385af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke Page* page = *it; 4395af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 4405af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke // Clear out the page's plug-in data. 441cad810f21b803229eb11403f9209855525a25d57Steve Block if (page->m_pluginData) 442f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick page->m_pluginData = 0; 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4445af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (!reload) 4455af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke continue; 4465af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 4475af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree()->traverseNext()) { 44806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (frame->loader()->subframeLoader()->containsPlugins()) 4495af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke framesNeedingReload.append(frame); 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (size_t i = 0; i < framesNeedingReload.size(); ++i) 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project framesNeedingReload[i]->loader()->reload(); 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPluginData* Page::pluginData() const 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 45906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (!mainFrame()->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin)) 460635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return 0; 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_pluginData) 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_pluginData = PluginData::create(this); 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_pluginData.get(); 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monseninline MediaCanStartListener* Page::takeAnyMediaCanStartListener() 4670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { 4696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (MediaCanStartListener* listener = frame->document()->takeAnyMediaCanStartListener()) 4706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return listener; 4716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } 4726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return 0; 473692e5dbf12901edacf14812a6fae25462920af42Steve Block} 474692e5dbf12901edacf14812a6fae25462920af42Steve Block 475692e5dbf12901edacf14812a6fae25462920af42Steve Blockvoid Page::setCanStartMedia(bool canStartMedia) 476692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 477692e5dbf12901edacf14812a6fae25462920af42Steve Block if (m_canStartMedia == canStartMedia) 478692e5dbf12901edacf14812a6fae25462920af42Steve Block return; 479692e5dbf12901edacf14812a6fae25462920af42Steve Block 480692e5dbf12901edacf14812a6fae25462920af42Steve Block m_canStartMedia = canStartMedia; 481692e5dbf12901edacf14812a6fae25462920af42Steve Block 48221939df44de1705786c545cd1bf519d47250322dBen Murdoch while (m_canStartMedia) { 4836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen MediaCanStartListener* listener = takeAnyMediaCanStartListener(); 4846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (!listener) 48521939df44de1705786c545cd1bf519d47250322dBen Murdoch break; 48621939df44de1705786c545cd1bf519d47250322dBen Murdoch listener->mediaCanStart(); 48721939df44de1705786c545cd1bf519d47250322dBen Murdoch } 4880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic Frame* incrementFrame(Frame* curr, bool forward, bool wrapFlag) 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return forward 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ? curr->tree()->traverseNextWithWrap(wrapFlag) 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : curr->tree()->traversePreviousWithWrap(wrapFlag); 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Page::findString(const String& target, TextCaseSensitivity caseSensitivity, FindDirection direction, bool shouldWrap) 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 499f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return findString(target, (caseSensitivity == TextCaseInsensitive ? CaseInsensitive : 0) | (direction == FindDirectionBackward ? Backwards : 0) | (shouldWrap ? WrapAround : 0)); 500f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 501f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 502f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool Page::findString(const String& target, FindOptions options) 503f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (target.isEmpty() || !mainFrame()) 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 507f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool shouldWrap = options & WrapAround; 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* frame = focusController()->focusedOrMainFrame(); 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* startFrame = frame; 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project do { 511f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (frame->editor()->findString(target, (options & ~WrapAround) | StartInSelection)) { 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame != startFrame) 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project startFrame->selection()->clear(); 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project focusController()->setFocusedFrame(frame); 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 517f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch frame = incrementFrame(frame, !(options & Backwards), shouldWrap); 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } while (frame && frame != startFrame); 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Search contents of startFrame, on the other side of the selection that we did earlier. 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We cheat a bit and just research with wrap on 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (shouldWrap && !startFrame->selection()->isNone()) { 523f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool found = startFrame->editor()->findString(target, options | WrapAround | StartInSelection); 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project focusController()->setFocusedFrame(frame); 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return found; 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunsigned int Page::markAllMatchesForText(const String& target, TextCaseSensitivity caseSensitivity, bool shouldHighlight, unsigned limit) 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 533f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return markAllMatchesForText(target, caseSensitivity == TextCaseInsensitive ? CaseInsensitive : 0, shouldHighlight, limit); 534f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 535f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 536f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochunsigned int Page::markAllMatchesForText(const String& target, FindOptions options, bool shouldHighlight, unsigned limit) 537f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (target.isEmpty() || !mainFrame()) 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned matches = 0; 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* frame = mainFrame(); 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project do { 5455abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick frame->editor()->setMarkedTextMatchesAreHighlighted(shouldHighlight); 546f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch matches += frame->editor()->countMatchesForText(target, options, limit ? (limit - matches) : 0, true); 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame = incrementFrame(frame, true, false); 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } while (frame); 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return matches; 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::unmarkAllTextMatches() 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!mainFrame()) 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* frame = mainFrame(); 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project do { 560e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block frame->document()->markers()->removeMarkers(DocumentMarker::TextMatch); 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame = incrementFrame(frame, true, false); 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } while (frame); 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianconst VisibleSelection& Page::selection() const 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return focusController()->focusedOrMainFrame()->selection()->selection(); 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::setDefersLoading(bool defers) 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 572d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!m_settings->loadDeferringEnabled()) 573d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 574d0825bca7fe65beaee391d30da42e937db621564Steve Block 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (defers == m_defersLoading) 5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_defersLoading = defers; 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame->loader()->setDefersLoading(defers); 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::clearUndoRedoOperations() 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_editorClient->clearUndoRedoOperations(); 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Page::inLowQualityImageInterpolationMode() const 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_inLowQualityInterpolationMode; 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::setInLowQualityImageInterpolationMode(bool mode) 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_inLowQualityInterpolationMode = mode; 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid Page::setMediaVolume(float volume) 599635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 600635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (volume < 0 || volume > 1) 601635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 602635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 603635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_mediaVolume == volume) 604635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 605635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 606635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_mediaVolume = volume; 607635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { 6088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian frame->document()->mediaVolumeDidChange(); 6098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 6108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 6118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianvoid Page::didMoveOnscreen() 6138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 6148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { 6158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (frame->view()) 6168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian frame->view()->didMoveOnscreen(); 6178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 6188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 6198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianvoid Page::willMoveOffscreen() 6218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 6228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { 6238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (frame->view()) 6248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian frame->view()->willMoveOffscreen(); 625635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 626635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 627635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::userStyleSheetLocationChanged() 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 630231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // FIXME: Eventually we will move to a model of just being handed the sheet 631231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // text instead of loading the URL ourselves. 632231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block KURL url = m_settings->userStyleSheetLocation(); 633231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (url.isLocalFile()) 634231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_userStyleSheetPath = url.fileSystemPath(); 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_userStyleSheetPath = String(); 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_didLoadUserStyleSheet = false; 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_userStyleSheet = String(); 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_userStyleSheetModificationTime = 0; 641a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 642231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Data URLs with base64-encoded UTF-8 style sheets are common. We can process them 643231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // synchronously and avoid using a loader. 644a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (url.protocolIsData() && url.string().startsWith("data:text/css;charset=utf-8;base64,")) { 645231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_didLoadUserStyleSheet = true; 646231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 647231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Vector<char> styleSheetAsUTF8; 648a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (base64Decode(decodeURLEscapeSequences(url.string().substring(35)), styleSheetAsUTF8, IgnoreWhitespace)) 649643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_userStyleSheet = String::fromUTF8(styleSheetAsUTF8.data(), styleSheetAsUTF8.size()); 650231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 651a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 652231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { 653231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (frame->document()) 6545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen frame->document()->updatePageUserSheet(); 655231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectconst String& Page::userStyleSheet() const 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 660231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (m_userStyleSheetPath.isEmpty()) 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_userStyleSheet; 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project time_t modTime; 6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!getFileModificationTime(m_userStyleSheetPath, modTime)) { 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The stylesheet either doesn't exist, was just deleted, or is 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // otherwise unreadable. If we've read the stylesheet before, we should 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // throw away that data now as it no longer represents what's on disk. 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_userStyleSheet = String(); 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_userStyleSheet; 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the stylesheet hasn't changed since the last time we read it, we can 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // just return the old data. 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_didLoadUserStyleSheet && modTime <= m_userStyleSheetModificationTime) 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_userStyleSheet; 6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_didLoadUserStyleSheet = true; 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_userStyleSheet = String(); 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_userStyleSheetModificationTime = modTime; 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: It would be better to load this asynchronously to avoid blocking 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the process, but we will first need to create an asynchronous loading 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // mechanism that is not tied to a particular Frame. We will also have to 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // determine what our behavior should be before the stylesheet is loaded 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // and what should happen when it finishes loading, especially with respect 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // to when the load event fires, when Document::close is called, and when 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // layout/paint are allowed to happen. 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<SharedBuffer> data = SharedBuffer::createWithContentsOfFile(m_userStyleSheetPath); 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!data) 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_userStyleSheet; 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RefPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("text/css"); 6938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_userStyleSheet = decoder->decode(data->data(), data->size()); 6948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_userStyleSheet += decoder->flush(); 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_userStyleSheet; 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::removeAllVisitedLinks() 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!allPages) 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashSet<PageGroup*> groups; 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashSet<Page*>::iterator pagesEnd = allPages->end(); 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashSet<Page*>::iterator it = allPages->begin(); it != pagesEnd; ++it) { 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (PageGroup* group = (*it)->groupPtr()) 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project groups.add(group); 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashSet<PageGroup*>::iterator groupsEnd = groups.end(); 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashSet<PageGroup*>::iterator it = groups.begin(); it != groupsEnd; ++it) 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (*it)->removeVisitedLinks(); 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::allVisitedStateChanged(PageGroup* group) 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(group); 7170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!allPages) 7180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 7190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashSet<Page*>::iterator pagesEnd = allPages->end(); 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashSet<Page*>::iterator it = allPages->begin(); it != pagesEnd; ++it) { 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Page* page = *it; 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (page->m_group != group) 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = page->m_mainFrame.get(); frame; frame = frame->tree()->traverseNext()) { 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (CSSStyleSelector* styleSelector = frame->document()->styleSelector()) 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleSelector->allVisitedStateChanged(); 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 732635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid Page::visitedStateChanged(PageGroup* group, LinkHash visitedLinkHash) 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(group); 7350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!allPages) 7360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 7370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashSet<Page*>::iterator pagesEnd = allPages->end(); 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashSet<Page*>::iterator it = allPages->begin(); it != pagesEnd; ++it) { 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Page* page = *it; 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (page->m_group != group) 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = page->m_mainFrame.get(); frame; frame = frame->tree()->traverseNext()) { 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (CSSStyleSelector* styleSelector = frame->document()->styleSelector()) 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleSelector->visitedStateChanged(visitedLinkHash); 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::setDebuggerForAllPages(JSC::Debugger* debugger) 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(allPages); 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashSet<Page*>::iterator end = allPages->end(); 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashSet<Page*>::iterator it = allPages->begin(); it != end; ++it) 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (*it)->setDebugger(debugger); 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::setDebugger(JSC::Debugger* debugger) 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_debugger == debugger) 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_debugger = debugger; 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = m_mainFrame.get(); frame; frame = frame->tree()->traverseNext()) 7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame->script()->attachDebugger(m_debugger); 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 770a94275402997c11dd2e778633dacf4b7e630a35dBen MurdochSharedGraphicsContext3D* Page::sharedGraphicsContext3D() 771a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 772a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if ENABLE(ACCELERATED_2D_CANVAS) 773a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!m_sharedGraphicsContext3D) 774a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_sharedGraphicsContext3D = SharedGraphicsContext3D::create(chrome()); 775a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 776a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return m_sharedGraphicsContext3D.get(); 777a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#else 778a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return 0; 779a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif 780a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 781a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DOM_STORAGE) 7830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochStorageNamespace* Page::sessionStorage(bool optionalCreate) 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_sessionStorage && optionalCreate) 786dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_sessionStorage = StorageNamespace::sessionStorageNamespace(this, m_settings->sessionStorageQuota()); 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_sessionStorage.get(); 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid Page::setSessionStorage(PassRefPtr<StorageNamespace> newStorage) 7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_sessionStorage = newStorage; 7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 797635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WML) 798635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectWMLPageState* Page::wmlPageState() 799635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 800635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!m_wmlPageState) 801635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_wmlPageState.set(new WMLPageState(this)); 802635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_wmlPageState.get(); 803635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 804635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 805635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 8068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::setCustomHTMLTokenizerTimeDelay(double customHTMLTokenizerTimeDelay) 8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (customHTMLTokenizerTimeDelay < 0) { 8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_customHTMLTokenizerTimeDelay = -1; 8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 8118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_customHTMLTokenizerTimeDelay = customHTMLTokenizerTimeDelay; 8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Page::setCustomHTMLTokenizerChunkSize(int customHTMLTokenizerChunkSize) 8168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (customHTMLTokenizerChunkSize < 0) { 8188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_customHTMLTokenizerChunkSize = -1; 8198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 8208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_customHTMLTokenizerChunkSize = customHTMLTokenizerChunkSize; 8228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 824635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid Page::setMemoryCacheClientCallsEnabled(bool enabled) 825635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 826635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_areMemoryCacheClientCallsEnabled == enabled) 827635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 828635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 829635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_areMemoryCacheClientCallsEnabled = enabled; 830635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!enabled) 831635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 832635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 833635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project for (RefPtr<Frame> frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) 834635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project frame->loader()->tellClientAboutPastMemoryCacheLoads(); 835635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 836635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 8375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid Page::setJavaScriptURLsAreAllowed(bool areAllowed) 8385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 8395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian m_javaScriptURLsAreAllowed = areAllowed; 8405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 8415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 8425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianbool Page::javaScriptURLsAreAllowed() const 8435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 8445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return m_javaScriptURLsAreAllowed; 8455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 8465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 84781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid Page::setMinimumTimerInterval(double minimumTimerInterval) 84881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 84981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch double oldTimerInterval = m_minimumTimerInterval; 85081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_minimumTimerInterval = minimumTimerInterval; 85181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNextWithWrap(false)) { 85281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (frame->document()) 85381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch frame->document()->adjustMinimumTimerInterval(oldTimerInterval); 85481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 85581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 85681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 85781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochdouble Page::minimumTimerInterval() const 85881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 85981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return m_minimumTimerInterval; 86081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 86181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 8620617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#if ENABLE(INPUT_SPEECH) 8630617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenSpeechInput* Page::speechInput() 8640617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 8650617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen ASSERT(m_speechInputClient); 8660617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen if (!m_speechInput.get()) 8670617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen m_speechInput.set(new SpeechInput(m_speechInputClient)); 8680617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return m_speechInput.get(); 8690617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 8700617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#endif 8710617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 872f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid Page::dnsPrefetchingStateChanged() 873f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 874f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) 875f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch frame->document()->initDNSPrefetch(); 876f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 877f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 878dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid Page::privateBrowsingStateChanged() 879dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 880dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool privateBrowsingEnabled = m_settings->privateBrowsingEnabled(); 881dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 88281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) 88381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch frame->document()->privateBrowsingStateDidChange(); 88481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 885dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Collect the PluginViews in to a vector to ensure that action the plug-in takes 886dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // from below privateBrowsingStateChanged does not affect their lifetime. 887a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch Vector<RefPtr<PluginViewBase>, 32> pluginViewBases; 888dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { 889dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block FrameView* view = frame->view(); 890dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!view) 891dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 892dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 893dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const HashSet<RefPtr<Widget> >* children = view->children(); 894dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(children); 895dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 896dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block HashSet<RefPtr<Widget> >::const_iterator end = children->end(); 897dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (HashSet<RefPtr<Widget> >::const_iterator it = children->begin(); it != end; ++it) { 898dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Widget* widget = (*it).get(); 899a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (widget->isPluginViewBase()) 900a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch pluginViewBases.append(static_cast<PluginViewBase*>(widget)); 901dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 902dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 903dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 904a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for (size_t i = 0; i < pluginViewBases.size(); ++i) 905a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch pluginViewBases[i]->privateBrowsingStateChanged(privateBrowsingEnabled); 906dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 907dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 908231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid Page::pluginAllowedRunTimeChanged() 909231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 910231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (m_pluginHalter) 911231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_pluginHalter->setPluginAllowedRunTime(m_settings->pluginAllowedRunTime()); 912231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 913231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 914231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid Page::didStartPlugin(HaltablePlugin* obj) 915231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 916231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (m_pluginHalter) 917231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_pluginHalter->didStartPlugin(obj); 918231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 919231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 920231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid Page::didStopPlugin(HaltablePlugin* obj) 921231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 922231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (m_pluginHalter) 923231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_pluginHalter->didStopPlugin(obj); 924231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 925231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 9262bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid Page::addScrollableArea(ScrollableArea* scrollableArea) 9272bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9282bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_scrollableAreaSet) 9292bde8e466a4451c7319e3a072d118917957d6554Steve Block m_scrollableAreaSet = adoptPtr(new ScrollableAreaSet); 9302bde8e466a4451c7319e3a072d118917957d6554Steve Block m_scrollableAreaSet->add(scrollableArea); 9312bde8e466a4451c7319e3a072d118917957d6554Steve Block} 9322bde8e466a4451c7319e3a072d118917957d6554Steve Block 9332bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid Page::removeScrollableArea(ScrollableArea* scrollableArea) 9342bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9352bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_scrollableAreaSet) 9362bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 9372bde8e466a4451c7319e3a072d118917957d6554Steve Block m_scrollableAreaSet->remove(scrollableArea); 9382bde8e466a4451c7319e3a072d118917957d6554Steve Block} 9392bde8e466a4451c7319e3a072d118917957d6554Steve Block 9402bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool Page::containsScrollableArea(ScrollableArea* scrollableArea) const 9412bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9422bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_scrollableAreaSet) 9432bde8e466a4451c7319e3a072d118917957d6554Steve Block return false; 9442bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_scrollableAreaSet->contains(scrollableArea); 9452bde8e466a4451c7319e3a072d118917957d6554Steve Block} 9462bde8e466a4451c7319e3a072d118917957d6554Steve Block 947d0825bca7fe65beaee391d30da42e937db621564Steve Block#if !ASSERT_DISABLED 948d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Page::checkFrameCountConsistency() const 949d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 950d0825bca7fe65beaee391d30da42e937db621564Steve Block ASSERT(m_frameCount >= 0); 951d0825bca7fe65beaee391d30da42e937db621564Steve Block 952d0825bca7fe65beaee391d30da42e937db621564Steve Block int frameCount = 0; 953d0825bca7fe65beaee391d30da42e937db621564Steve Block for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) 954d0825bca7fe65beaee391d30da42e937db621564Steve Block ++frameCount; 955d0825bca7fe65beaee391d30da42e937db621564Steve Block 956d0825bca7fe65beaee391d30da42e937db621564Steve Block ASSERT(m_frameCount + 1 == frameCount); 957d0825bca7fe65beaee391d30da42e937db621564Steve Block} 958d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 95928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 96028040489d744e0c5d475a88663056c9040ed5320Teng-Hui ZhuPage::PageClients::PageClients() 96128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu : chromeClient(0) 96228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , contextMenuClient(0) 96328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , editorClient(0) 96428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , dragClient(0) 96528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , inspectorClient(0) 96628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , pluginHalterClient(0) 9676b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner , geolocationClient(0) 96828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , deviceMotionClient(0) 96928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , deviceOrientationClient(0) 97028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , speechInputClient(0) 97128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{ 97228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu} 97328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 97428040489d744e0c5d475a88663056c9040ed5320Teng-Hui ZhuPage::PageClients::~PageClients() 97528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{ 97628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu} 97728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 9788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 979