ChromeClientAndroid.cpp revision d867a0e9b483e848580a3a98f73a8352884eac2b
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2007, The Android Open Source Project 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define LOG_TAG "WebCore" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu#include "ApplicationCacheStorage.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ChromeClientAndroid.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CString.h" 336172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch#include "DatabaseTracker.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FloatRect.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoader.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h" 40fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block#include "Geolocation.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h" 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Screen.h" 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ScriptController.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebCoreFrameBridge.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebCoreViewBridge.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebViewCore.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WindowFeatures.h" 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Settings.h" 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace android { 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::setWebFrame(android::WebFrame* webframe) 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Release(m_webFrame); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_webFrame = webframe; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Retain(m_webFrame); 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::chromeDestroyed() 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Release(m_webFrame); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete this; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::setWindowRect(const FloatRect&) { notImplemented(); } 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFloatRect ChromeClientAndroid::windowRect() { 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(m_webFrame); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_webFrame) 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return FloatRect(); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FrameView* frameView = m_webFrame->page()->mainFrame()->view(); 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!frameView) 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return FloatRect(); 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const WebCoreViewBridge* bridge = frameView->platformWidget(); 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const IntRect& rect = bridge->getWindowBounds(); 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FloatRect fRect(rect.x(), rect.y(), rect.width(), rect.height()); 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return fRect; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFloatRect ChromeClientAndroid::pageRect() { notImplemented(); return FloatRect(); } 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfloat ChromeClientAndroid::scaleFactor() 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8452958546b410557c1b7abb46560fb7f2cd219d6fMike Reed /* Conceptually, we should return the density of the device's screen, 8552958546b410557c1b7abb46560fb7f2cd219d6fMike Reed except that we don't really model webkit's notion of drawing. Webkit 8652958546b410557c1b7abb46560fb7f2cd219d6fMike Reed expects the drawing context's matrix (plus scale-factor) to reflect the 8752958546b410557c1b7abb46560fb7f2cd219d6fMike Reed actually transformation to the pixels, and thus it uses scaleFactor to 8852958546b410557c1b7abb46560fb7f2cd219d6fMike Reed perform some pre-rounding in a few places (e.g. HTMLCanvasElement). 8952958546b410557c1b7abb46560fb7f2cd219d6fMike Reed 9052958546b410557c1b7abb46560fb7f2cd219d6fMike Reed ASSERT(m_webFrame); 9152958546b410557c1b7abb46560fb7f2cd219d6fMike Reed return m_webFrame->density(); 9252958546b410557c1b7abb46560fb7f2cd219d6fMike Reed 9352958546b410557c1b7abb46560fb7f2cd219d6fMike Reed However, in Android we capture the drawing into a displayList, and then 9452958546b410557c1b7abb46560fb7f2cd219d6fMike Reed replay that list at various scale factors (sometimes zoomed out, other 9552958546b410557c1b7abb46560fb7f2cd219d6fMike Reed times zoomed in for "normal" reading, yet other times at arbitrary 9652958546b410557c1b7abb46560fb7f2cd219d6fMike Reed zoom values based on the user's choice). In all of these cases, we do 9752958546b410557c1b7abb46560fb7f2cd219d6fMike Reed not re-record the displayList, hence it is usually harmful to perform 9852958546b410557c1b7abb46560fb7f2cd219d6fMike Reed any pre-rounding, since we just don't know the actual drawing resolution 9952958546b410557c1b7abb46560fb7f2cd219d6fMike Reed at record time. 10052958546b410557c1b7abb46560fb7f2cd219d6fMike Reed 10152958546b410557c1b7abb46560fb7f2cd219d6fMike Reed Given Android's device-independent drawing model, we always return 1.0 10252958546b410557c1b7abb46560fb7f2cd219d6fMike Reed for this function, and we implement roundToDevicePixels() to be a no-op 10352958546b410557c1b7abb46560fb7f2cd219d6fMike Reed so that we don't introduce pre-rounding artifacts during record. 10452958546b410557c1b7abb46560fb7f2cd219d6fMike Reed */ 10552958546b410557c1b7abb46560fb7f2cd219d6fMike Reed return 1.0f; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::focus() { 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(m_webFrame); 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Ask the application to focus this WebView. 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_webFrame->requestFocus(); 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::unfocus() { notImplemented(); } 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::canTakeFocus(FocusDirection) { notImplemented(); return false; } 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::takeFocus(FocusDirection) { notImplemented(); } 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPage* ChromeClientAndroid::createWindow(Frame* frame, const FrameLoadRequest&, 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const WindowFeatures& features) 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(frame); 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef ANDROID_MULTIPLE_WINDOWS 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame->settings() && !(frame->settings()->supportMultipleWindows())) 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the client doesn't support multiple windows, just return the current page 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return frame->page(); 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WTF::PassRefPtr<WebCore::Screen> screen = WebCore::Screen::create(frame); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool dialog = features.dialog || !features.resizable 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || (features.heightSet && features.height < screen.get()->height() 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && features.widthSet && features.width < screen.get()->width()) 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || (!features.menuBarVisible && !features.statusBarVisible 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && !features.toolBarVisible && !features.locationBarVisible 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && !features.scrollbarsVisible); 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // fullscreen definitely means no dialog 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (features.fullscreen) 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project dialog = false; 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCore::Frame* newFrame = m_webFrame->createWindow(dialog, 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame->script()->processingUserGesture()); 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (newFrame) { 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCore::Page* page = newFrame->page(); 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project page->setGroupName(frame->page()->groupName()); 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return page; 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NULL; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::show() { notImplemented(); } 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::canRunModal() { notImplemented(); return false; } 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::runModal() { notImplemented(); } 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::setToolbarsVisible(bool) { notImplemented(); } 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::toolbarsVisible() { notImplemented(); return false; } 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::setStatusbarVisible(bool) { notImplemented(); } 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::statusbarVisible() { notImplemented(); return false; } 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::setScrollbarsVisible(bool) { notImplemented(); } 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::scrollbarsVisible() { notImplemented(); return false; } 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::setMenubarVisible(bool) { notImplemented(); } 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::menubarVisible() { notImplemented(); return false; } 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::setResizable(bool) { notImplemented(); } 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// This function is called by the JavaScript bindings to print usually an error to 168bf22f208d6fb755dd4ddebbde1a1a3b23e597990Ben Murdoch// a message console. Pass the message to the java side so that the client can 169bf22f208d6fb755dd4ddebbde1a1a3b23e597990Ben Murdoch// handle it as it sees fit. 1702eef744339814ace28e6835115e7e389fb8b7962Andrei Popescuvoid ChromeClientAndroid::addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, unsigned int lineNumber, const String& sourceID) { 171bf22f208d6fb755dd4ddebbde1a1a3b23e597990Ben Murdoch android::WebViewCore::getWebViewCore(m_webFrame->page()->mainFrame()->view())->addMessageToConsole(message, lineNumber, sourceID); 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::canRunBeforeUnloadConfirmPanel() { return true; } 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::runBeforeUnloadConfirmPanel(const String& message, Frame* frame) { 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String url = frame->document()->documentURI(); 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return android::WebViewCore::getWebViewCore(frame->view())->jsUnload(url, message); 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::closeWindowSoon() 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(m_webFrame); 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Page* page = m_webFrame->page(); 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* mainFrame = page->mainFrame(); 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This will prevent javascript cross-scripting during unload 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project page->setGroupName(String()); 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Stop loading but do not send the unload event 188d867a0e9b483e848580a3a98f73a8352884eac2bSteve Block mainFrame->loader()->stopLoading(UnloadEventPolicyNone); 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Cancel all pending loaders 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mainFrame->loader()->stopAllLoaders(); 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Remove all event listeners so that no javascript can execute as a result 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // of mouse/keyboard events. 1935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian mainFrame->document()->removeAllEventListeners(); 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Close the window. 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_webFrame->closeWindow(android::WebViewCore::getWebViewCore(mainFrame->view())); 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::runJavaScriptAlert(Frame* frame, const String& message) 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String url = frame->document()->documentURI(); 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project android::WebViewCore::getWebViewCore(frame->view())->jsAlert(url, message); 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::runJavaScriptConfirm(Frame* frame, const String& message) 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String url = frame->document()->documentURI(); 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return android::WebViewCore::getWebViewCore(frame->view())->jsConfirm(url, message); 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* This function is called for the javascript method Window.prompt(). A dialog should be shown on 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the screen with an input put box. First param is the text, the second is the default value for 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the input box, third is return param. If the function returns true, the value set in the third parameter 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * is provided to javascript, else null is returned to the script. 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::runJavaScriptPrompt(Frame* frame, const String& message, const String& defaultValue, String& result) 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String url = frame->document()->documentURI(); 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return android::WebViewCore::getWebViewCore(frame->view())->jsPrompt(url, message, defaultValue, result); 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::setStatusbarText(const String&) { notImplemented(); } 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// This is called by the JavaScript interpreter when a script has been running for a long 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// time. A dialog should be shown to the user asking them if they would like to cancel the 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Javascript. If true is returned, the script is cancelled. 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// To make a device more responsive, we default to return true to disallow long running script. 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// This implies that some of scripts will not be completed. 229d15fb80564c4e30b088ca87fa21a03d67675c662Guang Zhubool ChromeClientAndroid::shouldInterruptJavaScript() { 230d15fb80564c4e30b088ca87fa21a03d67675c662Guang Zhu FrameView* frameView = m_webFrame->page()->mainFrame()->view(); 231d15fb80564c4e30b088ca87fa21a03d67675c662Guang Zhu return android::WebViewCore::getWebViewCore(frameView)->jsInterrupt(); 232d15fb80564c4e30b088ca87fa21a03d67675c662Guang Zhu} 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClientAndroid::tabsToLinks() const { return false; } 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect ChromeClientAndroid::windowResizerRect() const { return IntRect(0, 0, 0, 0); } 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// new to change 38068 (Nov 6, 2008) 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::repaint(const IntRect& rect, bool contentChanged, 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool immediate, bool repaintContentOnly) { 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// was in ScrollViewAndroid::update() : needs to be something like: 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// android::WebViewCore::getWebViewCore(this)->contentInvalidate(rect); 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// new to change 38068 (Nov 6, 2008) 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::scroll(const IntSize& scrollDelta, 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const IntRect& rectToScroll, const IntRect& clipRect) { 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// new to change 38068 (Nov 6, 2008) 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntPoint ChromeClientAndroid::screenToWindow(const IntPoint&) const { 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return IntPoint(); 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// new to change 38068 (Nov 6, 2008) 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect ChromeClientAndroid::windowToScreen(const IntRect&) const { 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return IntRect(); 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// new to change 38068 (Nov 6, 2008) 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// in place of view()->containingWindow(), webkit now uses view()->hostWindow()->platformWindow() 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPlatformWidget ChromeClientAndroid::platformWindow() const { 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Page* page = m_webFrame->page(); 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* mainFrame = page->mainFrame(); 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FrameView* view = mainFrame->view(); 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PlatformWidget viewBridge = view->platformWidget(); 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return viewBridge; 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 274635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid ChromeClientAndroid::contentsSizeChanged(Frame*, const IntSize&) const 275635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 276635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project notImplemented(); 277635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 278635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid ChromeClientAndroid::scrollRectIntoView(const IntRect&, const ScrollView*) const 2805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 2815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian notImplemented(); 2825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 2835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 284635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid ChromeClientAndroid::formStateDidChange(const Node*) 285635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 286635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project notImplemented(); 287635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 288635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::mouseDidMoveOverElement(const HitTestResult&, unsigned int) {} 2902eef744339814ace28e6835115e7e389fb8b7962Andrei Popescuvoid ChromeClientAndroid::setToolTip(const String&, TextDirection) {} 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClientAndroid::print(Frame*) {} 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2936172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch/* 2946172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch * This function is called on the main (webcore) thread by SQLTransaction::deliverQuotaIncreaseCallback. 2956172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch * The way that the callback mechanism is designed inside SQLTransaction means that there must be a new quota 2966172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch * (which may be equal to the old quota if the user did not allow more quota) when this function returns. As 2976172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch * we call into the browser thread to ask what to do with the quota, we block here and get woken up when the 2986172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch * browser calls the native WebViewCore::SetDatabaseQuota method with the new quota value. 2996172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch */ 3008ccf722629b08f2a06b2cadbdc3d0c9dc885e25dBen Murdoch#if ENABLE(DATABASE) 3016172bff036b26f8ea852196733426c6ff608ed8aBen Murdochvoid ChromeClientAndroid::exceededDatabaseQuota(Frame* frame, const String& name) 3026172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch{ 3036172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch SecurityOrigin* origin = frame->document()->securityOrigin(); 3046172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch 305cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu // We want to wait on a new quota from the UI thread. Reset the m_newQuota variable to represent we haven't received a new quota. 306cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu m_newQuota = -1; 3076172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch 308cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu // This origin is being tracked and has exceeded it's quota. Call into 309cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu // the Java side of things to inform the user. 310cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu unsigned long long currentQuota = 0; 3116172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch if (WebCore::DatabaseTracker::tracker().hasEntryForOrigin(origin)) { 312cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu currentQuota = WebCore::DatabaseTracker::tracker().quotaForOrigin(origin); 313cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu } 3144dc5706791f76d14261e27a58f50fcf305fcf1b0Ben Murdoch 3154dc5706791f76d14261e27a58f50fcf305fcf1b0Ben Murdoch unsigned long long estimatedSize = WebCore::DatabaseTracker::tracker().detailsForNameAndOrigin(name, origin).expectedUsage(); 3164dc5706791f76d14261e27a58f50fcf305fcf1b0Ben Murdoch 3174dc5706791f76d14261e27a58f50fcf305fcf1b0Ben Murdoch android::WebViewCore::getWebViewCore(frame->view())->exceededDatabaseQuota(frame->document()->documentURI(), name, currentQuota, estimatedSize); 318cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu 319cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu // We've sent notification to the browser so now wait for it to come back. 320cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu m_quotaThreadLock.lock(); 321cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu while (m_newQuota == -1) { 322cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu m_quotaThreadCondition.wait(m_quotaThreadLock); 3236172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch } 324cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu m_quotaThreadLock.unlock(); 325cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu 326cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu // Update the DatabaseTracker with the new quota value (if the user declined 327cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu // new quota, this may equal the old quota) 328cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu DatabaseTracker::tracker().setQuota(origin, m_newQuota); 3296172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch} 3308ccf722629b08f2a06b2cadbdc3d0c9dc885e25dBen Murdoch#endif 331c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu#if ENABLE(OFFLINE_WEB_APPLICATIONS) 332c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescuvoid ChromeClientAndroid::reachedMaxAppCacheSize(int64_t spaceNeeded) 333c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu{ 3346ec93df1269320cc37facebf7fa3e07a620ee185Andrei Popescu // Set m_newQuota before calling into the Java side. If we do this after, 3356ec93df1269320cc37facebf7fa3e07a620ee185Andrei Popescu // we could overwrite the result passed from the Java side and deadlock in the 3366ec93df1269320cc37facebf7fa3e07a620ee185Andrei Popescu // wait call below. 3376ec93df1269320cc37facebf7fa3e07a620ee185Andrei Popescu m_newQuota = -1; 338cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu Page* page = m_webFrame->page(); 339cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu Frame* mainFrame = page->mainFrame(); 340cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu FrameView* view = mainFrame->view(); 341cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu android::WebViewCore::getWebViewCore(view)->reachedMaxAppCacheSize(spaceNeeded); 342cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu 343cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu // We've sent notification to the browser so now wait for it to come back. 344cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu m_quotaThreadLock.lock(); 345cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu while (m_newQuota == -1) { 346cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu m_quotaThreadCondition.wait(m_quotaThreadLock); 347cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu } 348cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu m_quotaThreadLock.unlock(); 349cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu if (m_newQuota > 0) { 350cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu WebCore::cacheStorage().setMaximumSize(m_newQuota); 351cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu // Now the app cache will retry the saving the previously failed cache. 352cd942b3786cfce15a858784fb072c40e713c54cbAndrei Popescu } 353c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu} 354c60802dd50f86c37e0596d41c3ef6fc2c8804da4Andrei Popescu#endif 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3567e7a0fd96b7d18fa3562af3b2bb4c7516fe9babeLeon Clarkevoid ChromeClientAndroid::populateVisitedLinks() 3577e7a0fd96b7d18fa3562af3b2bb4c7516fe9babeLeon Clarke{ 3587e7a0fd96b7d18fa3562af3b2bb4c7516fe9babeLeon Clarke Page* page = m_webFrame->page(); 3597e7a0fd96b7d18fa3562af3b2bb4c7516fe9babeLeon Clarke Frame* mainFrame = page->mainFrame(); 3607e7a0fd96b7d18fa3562af3b2bb4c7516fe9babeLeon Clarke FrameView* view = mainFrame->view(); 3617e7a0fd96b7d18fa3562af3b2bb4c7516fe9babeLeon Clarke android::WebViewCore::getWebViewCore(view)->populateVisitedLinks(&page->group()); 3627e7a0fd96b7d18fa3562af3b2bb4c7516fe9babeLeon Clarke} 3637e7a0fd96b7d18fa3562af3b2bb4c7516fe9babeLeon Clarke 364fe55045391147883a38ed161b0c80f4e356bd9e0Steve Blockvoid ChromeClientAndroid::requestGeolocationPermissionForFrame(Frame* frame, Geolocation* geolocation) 365fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block{ 366fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block ASSERT(geolocation); 367fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block if (!m_geolocationPermissions) { 368fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block m_geolocationPermissions = new GeolocationPermissions(android::WebViewCore::getWebViewCore(frame->view()), 369fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block m_webFrame->page()->mainFrame()); 370fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block } 371fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block m_geolocationPermissions->queryPermissionState(frame); 372fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block} 373fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block 374fe55045391147883a38ed161b0c80f4e356bd9e0Steve Blockvoid ChromeClientAndroid::provideGeolocationPermissions(const String &origin, bool allow, bool remember) 375fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block{ 376fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block ASSERT(m_geolocationPermissions); 377fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block m_geolocationPermissions->providePermissionState(origin, allow, remember); 378fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block} 379fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block 380e7430864058b3c222b4b0468cf8812a9a733818bSteve Blockvoid ChromeClientAndroid::storeGeolocationPermissions() 381e7430864058b3c222b4b0468cf8812a9a733818bSteve Block{ 382e7430864058b3c222b4b0468cf8812a9a733818bSteve Block GeolocationPermissions::maybeStorePermanentPermissions(); 383e7430864058b3c222b4b0468cf8812a9a733818bSteve Block} 384e7430864058b3c222b4b0468cf8812a9a733818bSteve Block 385fe55045391147883a38ed161b0c80f4e356bd9e0Steve Blockvoid ChromeClientAndroid::onMainFrameLoadStarted() 386fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block{ 387fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block if (m_geolocationPermissions.get()) 388fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block m_geolocationPermissions->resetTemporaryPermissionStates(); 389fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block} 390fe55045391147883a38ed161b0c80f4e356bd9e0Steve Block 391bf280393189a33efa29a33c0d96c84710484f2f7Leon Scrogginsvoid ChromeClientAndroid::runOpenPanel(Frame* frame, 392bf280393189a33efa29a33c0d96c84710484f2f7Leon Scroggins PassRefPtr<FileChooser> chooser) 393bf280393189a33efa29a33c0d96c84710484f2f7Leon Scroggins{ 394bf280393189a33efa29a33c0d96c84710484f2f7Leon Scroggins android::WebViewCore* core = android::WebViewCore::getWebViewCore( 395bf280393189a33efa29a33c0d96c84710484f2f7Leon Scroggins frame->view()); 396bf280393189a33efa29a33c0d96c84710484f2f7Leon Scroggins core->openFileChooser(chooser); 397bf280393189a33efa29a33c0d96c84710484f2f7Leon Scroggins} 398bf280393189a33efa29a33c0d96c84710484f2f7Leon Scroggins 3995f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianbool ChromeClientAndroid::setCursor(PlatformCursorHandle) 4005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 4015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian notImplemented(); 4025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return false; 4035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4056172bff036b26f8ea852196733426c6ff608ed8aBen Murdochvoid ChromeClientAndroid::wakeUpMainThreadWithNewQuota(long newQuota) { 4066172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch MutexLocker locker(m_quotaThreadLock); 4076172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch m_newQuota = newQuota; 4086172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch m_quotaThreadCondition.signal(); 4096172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch} 4106172bff036b26f8ea852196733426c6ff608ed8aBen Murdoch 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 412