18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007, 2008 Alp Toker <alp@atoker.com> 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2007, 2008, 2009 Holger Hans Peter Freyther 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Christian Dywan <christian@twotoasts.de> 5231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2008, 2009 Collabora Ltd. All rights reserved. 68a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Copyright (C) 2009, 2010 Gustavo Noronha Silva <gns@gnome.org> 7cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block * Copyright (C) Research In Motion Limited 2009. All rights reserved. 8db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Copyright (C) 2010 Igalia S.L. 92bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2011 Apple Inc. All rights reserved. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Lesser General Public 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Lesser General Public License for more details. 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Lesser General Public 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License along with this library; if not, write to the Free Software 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoaderClientGtk.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "AXObjectCache.h" 3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "AccessibilityObject.h" 31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "ArchiveResource.h" 328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#include "CachedFrame.h" 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Color.h" 344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "DOMObjectCache.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DocumentLoader.h" 36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "DocumentLoaderGtk.h" 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "FormState.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoader.h" 395abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "FrameNetworkingContextGtk.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameTree.h" 41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "FrameView.h" 420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "GOwnPtr.h" 43d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "GRefPtr.h" 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "GtkPluginWidget.h" 45563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "HTMLAppletElement.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLFormElement.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLFrameElement.h" 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLFrameOwnerElement.h" 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLNames.h" 50563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "HTMLPlugInElement.h" 51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "JSDOMBinding.h" 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSDOMWindow.h" 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Language.h" 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MIMETypeRegistry.h" 55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "MouseEvent.h" 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NotImplemented.h" 5768513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "Page.h" 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginDatabase.h" 59f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "ProgressTracker.h" 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderPart.h" 6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "RenderView.h" 62563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "ResourceHandle.h" 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceRequest.h" 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ScriptController.h" 65cad810f21b803229eb11403f9209855525a25d57Steve Block#include "Settings.h" 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "webkiterror.h" 67cad810f21b803229eb11403f9209855525a25d57Steve Block#include "webkitglobals.h" 68cad810f21b803229eb11403f9209855525a25d57Steve Block#include "webkitglobalsprivate.h" 692bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "webkiticondatabase.h" 70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "webkitnetworkrequest.h" 71f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitnetworkrequestprivate.h" 72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "webkitnetworkresponse.h" 73f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitnetworkresponseprivate.h" 74f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitviewportattributes.h" 75f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitviewportattributesprivate.h" 76cad810f21b803229eb11403f9209855525a25d57Steve Block#include "webkitwebdatasourceprivate.h" 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "webkitwebframe.h" 78f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitwebframeprivate.h" 79635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "webkitwebnavigationaction.h" 80f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitwebnavigationactionprivate.h" 81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "webkitwebpolicydecision.h" 82f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitwebpolicydecisionprivate.h" 83f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitwebresource.h" 84f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitwebresourceprivate.h" 85cad810f21b803229eb11403f9209855525a25d57Steve Block#include "webkitwebsettingsprivate.h" 860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "webkitwebview.h" 87f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "webkitwebviewprivate.h" 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <JavaScriptCore/APICast.h> 890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <gio/gio.h> 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <glib.h> 910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <glib/gi18n-lib.h> 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdio.h> 93f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include <wtf/text/CString.h> 94f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include <wtf/text/StringConcatenate.h> 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore; 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebKit { 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFrameLoaderClient::FrameLoaderClient(WebKitWebFrame* frame) 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_frame(frame) 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_policyDecision(0) 103d0825bca7fe65beaee391d30da42e937db621564Steve Block , m_loadingErrorPage(false) 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_pluginView(0) 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_hasSentResponseToPlugin(false) 1062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block , m_hasRepresentation(false) 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(m_frame); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectFrameLoaderClient::~FrameLoaderClient() 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_policyDecision) 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project g_object_unref(m_policyDecision); 115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 11768513a70bcd92384395513322f1b801e7bf9c729Steve Blockstatic void initializeDomainsList(HashSet<String>& googleDomains) 11868513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 11968513a70bcd92384395513322f1b801e7bf9c729Steve Block // Google search domains. 12068513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("biz"); 12168513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("com"); 12268513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("net"); 12368513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("org"); 12468513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("ae"); 12568513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("ag"); 12668513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("am"); 12768513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("at"); 12868513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("az"); 12968513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("be"); 13068513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("bi"); 13168513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("ca"); 13268513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("cc"); 13368513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("cd"); 13468513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("cg"); 13568513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("ch"); 13668513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("cl"); 13768513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("com.br"); 13868513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("co.uk"); 139a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch googleDomains.add("co.kr"); 14068513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("co.jp"); 14168513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("de"); 14268513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("dj"); 14368513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("dk"); 14468513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("es"); 14568513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("fi"); 14668513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("fm"); 14768513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("fr"); 14868513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("gg"); 14968513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("gl"); 15068513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("gm"); 15168513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("gs"); 15268513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("hn"); 15368513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("hu"); 15468513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("ie"); 15568513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("it"); 15668513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("je"); 15768513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("kz"); 15868513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("li"); 15968513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("lt"); 16068513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("lu"); 16168513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("lv"); 16268513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("ma"); 16368513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("ms"); 16468513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("mu"); 16568513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("mw"); 16668513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("nl"); 16768513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("no"); 16868513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("nu"); 16968513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("pl"); 17068513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("pn"); 17168513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("pt"); 17268513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("ru"); 17368513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("rw"); 17468513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("sh"); 17568513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("sk"); 17668513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("sm"); 17768513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("st"); 17868513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("td"); 17968513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("tk"); 18068513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("tp"); 18168513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("tv"); 18268513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("us"); 18368513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("uz"); 18468513a70bcd92384395513322f1b801e7bf9c729Steve Block googleDomains.add("ws"); 18568513a70bcd92384395513322f1b801e7bf9c729Steve Block} 18668513a70bcd92384395513322f1b801e7bf9c729Steve Block 18768513a70bcd92384395513322f1b801e7bf9c729Steve Blockstatic bool isGoogleDomain(String host) 18868513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 18968513a70bcd92384395513322f1b801e7bf9c729Steve Block DEFINE_STATIC_LOCAL(HashSet<String>, googleDomains, ()); 19068513a70bcd92384395513322f1b801e7bf9c729Steve Block DEFINE_STATIC_LOCAL(Vector<String>, otherGoogleDomains, ()); 19168513a70bcd92384395513322f1b801e7bf9c729Steve Block 19268513a70bcd92384395513322f1b801e7bf9c729Steve Block if (googleDomains.isEmpty()) { 19368513a70bcd92384395513322f1b801e7bf9c729Steve Block otherGoogleDomains.append("gmail.com"); 19468513a70bcd92384395513322f1b801e7bf9c729Steve Block otherGoogleDomains.append("youtube.com"); 19568513a70bcd92384395513322f1b801e7bf9c729Steve Block otherGoogleDomains.append("gstatic.com"); 19668513a70bcd92384395513322f1b801e7bf9c729Steve Block otherGoogleDomains.append("ytimg.com"); 19768513a70bcd92384395513322f1b801e7bf9c729Steve Block 19868513a70bcd92384395513322f1b801e7bf9c729Steve Block initializeDomainsList(googleDomains); 19968513a70bcd92384395513322f1b801e7bf9c729Steve Block } 20068513a70bcd92384395513322f1b801e7bf9c729Steve Block 20168513a70bcd92384395513322f1b801e7bf9c729Steve Block // First check if this is one of the various google.com international domains. 20268513a70bcd92384395513322f1b801e7bf9c729Steve Block int position = host.find(".google."); 20368513a70bcd92384395513322f1b801e7bf9c729Steve Block if (position > 0 && googleDomains.contains(host.substring(position + sizeof(".google.")))) 20468513a70bcd92384395513322f1b801e7bf9c729Steve Block return true; 20568513a70bcd92384395513322f1b801e7bf9c729Steve Block 20668513a70bcd92384395513322f1b801e7bf9c729Steve Block // Then we check the possibility of it being one of the other, .com-only google domains. 20768513a70bcd92384395513322f1b801e7bf9c729Steve Block for (unsigned int i = 0; i < otherGoogleDomains.size(); i++) { 20868513a70bcd92384395513322f1b801e7bf9c729Steve Block if (host.endsWith(otherGoogleDomains.at(i))) 20968513a70bcd92384395513322f1b801e7bf9c729Steve Block return true; 21068513a70bcd92384395513322f1b801e7bf9c729Steve Block } 21168513a70bcd92384395513322f1b801e7bf9c729Steve Block 21268513a70bcd92384395513322f1b801e7bf9c729Steve Block return false; 21368513a70bcd92384395513322f1b801e7bf9c729Steve Block} 21468513a70bcd92384395513322f1b801e7bf9c729Steve Block 21568513a70bcd92384395513322f1b801e7bf9c729Steve BlockString FrameLoaderClient::userAgent(const KURL& url) 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebKitWebSettings* settings = webkit_web_view_get_settings(getViewFromFrame(m_frame)); 21868513a70bcd92384395513322f1b801e7bf9c729Steve Block 21968513a70bcd92384395513322f1b801e7bf9c729Steve Block gboolean useQuirks; 22068513a70bcd92384395513322f1b801e7bf9c729Steve Block g_object_get(settings, "enable-site-specific-quirks", &useQuirks, NULL); 22168513a70bcd92384395513322f1b801e7bf9c729Steve Block 22268513a70bcd92384395513322f1b801e7bf9c729Steve Block // For Google domains, drop the browser's custom User Agent string, and use the standard 22368513a70bcd92384395513322f1b801e7bf9c729Steve Block // WebKit/Safari one, so they don't give us a broken experience. 22468513a70bcd92384395513322f1b801e7bf9c729Steve Block if (useQuirks && isGoogleDomain(url.host())) 22568513a70bcd92384395513322f1b801e7bf9c729Steve Block return webkitUserAgent(); 22668513a70bcd92384395513322f1b801e7bf9c729Steve Block 2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return String::fromUTF8(webkit_web_settings_get_user_agent(settings)); 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochstatic void notifyAccessibilityStatus(WebKitWebFrame* frame, WebKitLoadStatus loadStatus) 23181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 23281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (loadStatus != WEBKIT_LOAD_PROVISIONAL 23381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch && loadStatus != WEBKIT_LOAD_FAILED 23481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch && loadStatus != WEBKIT_LOAD_FINISHED) 23581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 23681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 23781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WebKitWebFramePrivate* priv = frame->priv; 23881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!priv->coreFrame || !priv->coreFrame->document()) 23981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 24081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 24181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RenderView* contentRenderer = priv->coreFrame->contentRenderer(); 24281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!contentRenderer) 24381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 24481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 24581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch AXObjectCache* axObjectCache = priv->coreFrame->document()->axObjectCache(); 24681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!axObjectCache) 24781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 24881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 24981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch AccessibilityObject* coreAxObject = axObjectCache->getOrCreate(contentRenderer); 25081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!coreAxObject) 25181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 25281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 25381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch AtkObject* axObject = coreAxObject->wrapper(); 25481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!axObject || !ATK_IS_DOCUMENT(axObject)) 25581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 25681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 25781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch switch (loadStatus) { 25881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case WEBKIT_LOAD_PROVISIONAL: 25981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch g_signal_emit_by_name(axObject, "state-change", "busy", true); 26081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (core(frame)->loader()->loadType() == FrameLoadTypeReload) 26181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch g_signal_emit_by_name(axObject, "reload"); 26281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch break; 26381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case WEBKIT_LOAD_FAILED: 26481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch g_signal_emit_by_name(axObject, "load-stopped"); 26581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch g_signal_emit_by_name(axObject, "state-change", "busy", false); 26681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch break; 26781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch case WEBKIT_LOAD_FINISHED: 26881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch g_signal_emit_by_name(axObject, "load-complete"); 26981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch g_signal_emit_by_name(axObject, "state-change", "busy", false); 27081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch default: 27181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch break; 27281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 27381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 27481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic void notifyStatus(WebKitWebFrame* frame, WebKitLoadStatus loadStatus) 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch frame->priv->loadStatus = loadStatus; 2780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_object_notify(G_OBJECT(frame), "load-status"); 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebKitWebView* webView = getViewFromFrame(frame); 2810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (frame == webkit_web_view_get_main_frame(webView)) { 2820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch webView->priv->loadStatus = loadStatus; 2830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_object_notify(G_OBJECT(webView), "load-status"); 28481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 28581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (AXObjectCache::accessibilityEnabled()) 28681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch notifyAccessibilityStatus(frame, loadStatus); 2870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic void loadDone(WebKitWebFrame* frame, bool didSucceed) 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME: load-done is deprecated. Please remove when signal's been removed. 2930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_signal_emit_by_name(frame, "load-done", didSucceed); 2940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch notifyStatus(frame, WEBKIT_LOAD_FINISHED); 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWTF::PassRefPtr<WebCore::DocumentLoader> FrameLoaderClient::createDocumentLoader(const WebCore::ResourceRequest& request, const SubstituteData& substituteData) 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 299231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RefPtr<WebKit::DocumentLoader> loader = WebKit::DocumentLoader::create(request, substituteData); 300231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 301cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitWebDataSource> webDataSource(adoptGRef(kitNew(loader.get()))); 302cad810f21b803229eb11403f9209855525a25d57Steve Block loader->setDataSource(webDataSource.get()); 303231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 304231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return loader.release(); 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchWillSubmitForm(FramePolicyFunction policyFunction, PassRefPtr<FormState>) 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: This is surely too simple 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(policyFunction); 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!policyFunction) 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 313231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block (core(m_frame)->loader()->policyChecker()->*policyFunction)(PolicyUse); 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 316231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::committedLoad(WebCore::DocumentLoader* loader, const char* data, int length) 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_pluginView) { 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(loader->frame()); 32068513a70bcd92384395513322f1b801e7bf9c729Steve Block loader->commitData(data, length); 321643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 322643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Frame* coreFrame = loader->frame(); 32368513a70bcd92384395513322f1b801e7bf9c729Steve Block if (coreFrame && coreFrame->document()->isMediaDocument()) 32468513a70bcd92384395513322f1b801e7bf9c729Steve Block loader->cancelMainResourceLoad(coreFrame->loader()->client()->pluginWillHandleLoadError(loader->response())); 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_pluginView) { 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_hasSentResponseToPlugin) { 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_pluginView->didReceiveResponse(loader->response()); 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_hasSentResponseToPlugin = true; 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME: We may want to investigate refactoring our plugin loading 3340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // code to be similar to mac's. 3350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Also, see http://trac.webkit.org/changeset/24118. 3360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_pluginView) 3370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 3380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_pluginView->didReceiveData(data, length); 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 343635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool 344231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockFrameLoaderClient::shouldUseCredentialStorage(WebCore::DocumentLoader*, unsigned long identifier) 345635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 346635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project notImplemented(); 347635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 348635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 349635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 350231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 355231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 360231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// We convert this to string because it's easier to use strings as 361231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// keys in a GHashTable. 362231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic char* toString(unsigned long identifier) 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 364231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return g_strdup_printf("%ld", identifier); 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 367231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::dispatchWillSendRequest(WebCore::DocumentLoader* loader, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse) 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 369cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitNetworkResponse> networkResponse(0); 370231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 371231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // We are adding one more resource to the load, or maybe we are 372231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // just redirecting a load. 373231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (redirectResponse.isNull()) 374231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block static_cast<WebKit::DocumentLoader*>(loader)->increaseLoadCount(identifier); 375231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else 376cad810f21b803229eb11403f9209855525a25d57Steve Block networkResponse = adoptGRef(kitNew(redirectResponse)); 377231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 378231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block WebKitWebView* webView = getViewFromFrame(m_frame); 379231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block GOwnPtr<gchar> identifierString(toString(identifier)); 380231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block WebKitWebResource* webResource = webkit_web_view_get_resource(webView, identifierString.get()); 381cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitNetworkRequest> networkRequest(adoptGRef(kitNew(request))); 382231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 383231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!redirectResponse.isNull()) { 384231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // This is a redirect, so we need to update the WebResource's knowledge 385231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // of the URI. 386231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block g_free(webResource->priv->uri); 387231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block webResource->priv->uri = g_strdup(request.url().string().utf8().data()); 388231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 389231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 390231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block g_signal_emit_by_name(webView, "resource-request-starting", m_frame, webResource, networkRequest.get(), networkResponse.get()); 391231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 392231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Feed any changes back into the ResourceRequest object. 393231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block SoupMessage* message = webkit_network_request_get_message(networkRequest.get()); 394231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!message) { 395231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block request.setURL(KURL(KURL(), String::fromUTF8(webkit_network_request_get_uri(networkRequest.get())))); 396231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 397231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 398231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 399231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block request.updateFromSoupMessage(message); 400231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 401231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 402f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid FrameLoaderClient::assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader* loader, const ResourceRequest& request) 403231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 404545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch GOwnPtr<gchar> identifierString(toString(identifier)); 405f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 406f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebKitWebResource* webResource = WEBKIT_WEB_RESOURCE(g_object_new(WEBKIT_TYPE_WEB_RESOURCE, "uri", request.url().string().utf8().data(), 0)); 407f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 408f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (loader == loader->frameLoader()->provisionalDocumentLoader() 409f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch && loader->frameLoader()->isLoadingMainFrame()) { 410f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch webkit_web_view_add_main_resource(getViewFromFrame(m_frame), identifierString.get(), webResource); 411f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 412f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 413f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 414f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch webkit_web_view_add_resource(getViewFromFrame(m_frame), identifierString.get(), webResource); 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::postProgressStartedNotification() 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project g_signal_emit_by_name(webView, "load-started", m_frame); 4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_object_notify(G_OBJECT(webView), "progress"); 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::postProgressEstimateChangedNotification() 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Page* corePage = core(webView); 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project g_signal_emit_by_name(webView, "load-progress-changed", lround(corePage->progress()->estimatedProgress()*100)); 4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_object_notify(G_OBJECT(webView), "progress"); 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::postProgressFinishedNotification() 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 438f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebKitWebViewPrivate* privateData = webView->priv; 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 440563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // We can get a stopLoad() from dispose when the object is being 441563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // destroyed, don't emit the signal in that case. 442563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!privateData->disposing) 443563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_signal_emit_by_name(webView, "load-finished", m_frame); 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::frameLoaderDestroyed() 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 448635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project webkit_web_frame_core_frame_gone(m_frame); 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project g_object_unref(m_frame); 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_frame = 0; 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete this; 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 454dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid FrameLoaderClient::dispatchDidReceiveResponse(WebCore::DocumentLoader* loader, unsigned long, const ResourceResponse& response) 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 456dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Update our knowledge of request soup flags - some are only set 457dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // after the request is done. 458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block loader->request().setSoupMessageFlags(response.soupMessageFlags()); 459dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_response = response; 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid FrameLoaderClient::dispatchDecidePolicyForResponse(FramePolicyFunction policyFunction, const ResourceResponse& response, const ResourceRequest& resourceRequest) 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(policyFunction); 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!policyFunction) 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 468635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 469563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (resourceRequest.isNull()) { 470231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block (core(m_frame)->loader()->policyChecker()->*policyFunction)(PolicyIgnore); 471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 472563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 473563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 474635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitWebView* page = getViewFromFrame(m_frame); 475cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitNetworkRequest> request(adoptGRef(kitNew(resourceRequest))); 476635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 477635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitWebPolicyDecision* policyDecision = webkit_web_policy_decision_new(m_frame, policyFunction); 478635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_policyDecision) 479635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project g_object_unref(m_policyDecision); 480635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_policyDecision = policyDecision; 481635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 48281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch String mimeType = response.mimeType(); 48381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 484635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project gboolean isHandled = false; 485f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch g_signal_emit_by_name(page, "mime-type-policy-decision-requested", m_frame, request.get(), mimeType.utf8().data(), policyDecision, &isHandled); 486635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 487635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (isHandled) 488635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 489635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 490cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitNetworkResponse> networkResponse(adoptGRef(webkit_web_frame_get_network_response(m_frame))); 491643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (networkResponse) { 492643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ResourceResponse response = core(networkResponse.get()); 493643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (response.isAttachment()) { 494643ca7872b450ea4efacab6188849e5aac2ba161Steve Block webkit_web_policy_decision_download(policyDecision); 495643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 496643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 497643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 498643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 499635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (canShowMIMEType(mimeType)) 500643ca7872b450ea4efacab6188849e5aac2ba161Steve Block webkit_web_policy_decision_use(policyDecision); 501635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else 502643ca7872b450ea4efacab6188849e5aac2ba161Steve Block webkit_web_policy_decision_ignore(policyDecision); 503563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 504563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 5050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic WebKitWebNavigationAction* getNavigationAction(const NavigationAction& action, const char* targetFrame) 506563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 507563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark gint button = -1; 508563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 509563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark const Event* event = action.event(); 510563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (event && event->isMouseEvent()) { 511563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark const MouseEvent* mouseEvent = static_cast<const MouseEvent*>(event); 512563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // DOM button values are 0, 1 and 2 for left, middle and right buttons. 513563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // GTK+ uses 1, 2 and 3, so let's add 1 to remain consistent. 514563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark button = mouseEvent->button() + 1; 515563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 516563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 517563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark gint modifierFlags = 0; 518563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark UIEventWithKeyState* keyStateEvent = findEventWithKeyState(const_cast<Event*>(event)); 519563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (keyStateEvent) { 520563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (keyStateEvent->shiftKey()) 521563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark modifierFlags |= GDK_SHIFT_MASK; 522563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (keyStateEvent->ctrlKey()) 523563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark modifierFlags |= GDK_CONTROL_MASK; 524563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (keyStateEvent->altKey()) 525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark modifierFlags |= GDK_MOD1_MASK; 526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (keyStateEvent->metaKey()) 527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark modifierFlags |= GDK_MOD2_MASK; 528563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 529563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 530563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return WEBKIT_WEB_NAVIGATION_ACTION(g_object_new(WEBKIT_TYPE_WEB_NAVIGATION_ACTION, 531563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "reason", kit(action.type()), 532563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "original-uri", action.url().string().utf8().data(), 533563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "button", button, 534563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark "modifier-state", modifierFlags, 5350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch "target-frame", targetFrame, 536563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NULL)); 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid FrameLoaderClient::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction policyFunction, const NavigationAction& action, const ResourceRequest& resourceRequest, PassRefPtr<FormState>, const String& frameName) 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(policyFunction); 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!policyFunction) 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 544563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 545563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (resourceRequest.isNull()) { 546231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block (core(m_frame)->loader()->policyChecker()->*policyFunction)(PolicyIgnore); 547563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 548563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 549563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 550563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebKitWebPolicyDecision* policyDecision = webkit_web_policy_decision_new(m_frame, policyFunction); 551563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 552563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (m_policyDecision) 553563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_unref(m_policyDecision); 554563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark m_policyDecision = policyDecision; 555563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 556563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebKitWebView* webView = getViewFromFrame(m_frame); 557cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitNetworkRequest> request(adoptGRef(webkit_network_request_new(resourceRequest.url().string().utf8().data()))); 558cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitWebNavigationAction> navigationAction(adoptGRef(getNavigationAction(action, frameName.utf8().data()))); 559563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark gboolean isHandled = false; 560563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 561f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch g_signal_emit_by_name(webView, "new-window-policy-decision-requested", m_frame, request.get(), navigationAction.get(), policyDecision, &isHandled); 562563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: I think Qt version marshals this to another thread so when we 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // have multi-threaded download, we might need to do the same 565563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!isHandled) 566231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block (core(m_frame)->loader()->policyChecker()->*policyFunction)(PolicyUse); 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDecidePolicyForNavigationAction(FramePolicyFunction policyFunction, const NavigationAction& action, const ResourceRequest& resourceRequest, PassRefPtr<FormState>) 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(policyFunction); 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!policyFunction) 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 575563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (resourceRequest.isNull()) { 576231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block (core(m_frame)->loader()->policyChecker()->*policyFunction)(PolicyIgnore); 577563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 578563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 579563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 581cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitNetworkRequest> request(adoptGRef(kitNew(resourceRequest))); 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebKitNavigationResponse response; 583635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project /* 584635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * We still support the deprecated navigation-requested signal, if the 585635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * application doesn't ignore the navigation then the new signal is 586635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * emitted. 587635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * navigation-policy-decision-requested must be emitted after 588635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * navigation-requested as the policy decision can be async. 589635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 590f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch g_signal_emit_by_name(webView, "navigation-requested", m_frame, request.get(), &response); 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (response == WEBKIT_NAVIGATION_RESPONSE_IGNORE) { 593231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block (core(m_frame)->loader()->policyChecker()->*policyFunction)(PolicyIgnore); 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 597635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitWebPolicyDecision* policyDecision = webkit_web_policy_decision_new(m_frame, policyFunction); 598635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_policyDecision) 599635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project g_object_unref(m_policyDecision); 600635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_policyDecision = policyDecision; 601635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 602cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitWebNavigationAction> navigationAction(adoptGRef(getNavigationAction(action, 0))); 603635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project gboolean isHandled = false; 604f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch g_signal_emit_by_name(webView, "navigation-policy-decision-requested", m_frame, request.get(), navigationAction.get(), policyDecision, &isHandled); 605635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 606635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // FIXME Implement default behavior when we can query the backend what protocols it supports 607635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!isHandled) 608635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project webkit_web_policy_decision_use(m_policyDecision); 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<Widget> FrameLoaderClient::createPlugin(const IntSize& pluginSize, HTMLPlugInElement* element, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually) 6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch /* Check if we want to embed a GtkWidget, fallback to plugins later */ 6140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CString urlString = url.string().utf8(); 6150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CString mimeTypeString = mimeType.utf8(); 6160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(paramNames.size() == paramValues.size()); 618cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<GHashTable> hash = adoptGRef(g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free)); 6190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (unsigned i = 0; i < paramNames.size(); ++i) { 6200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_hash_table_insert(hash.get(), 6210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_strdup(paramNames[i].utf8().data()), 6220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_strdup(paramValues[i].utf8().data())); 6230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 6240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch GtkWidget* gtkWidget = 0; 6260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_signal_emit_by_name(getViewFromFrame(m_frame), "create-plugin-widget", 6270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch mimeTypeString.data(), urlString.data(), hash.get(), >kWidget); 6280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (gtkWidget) 6290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return adoptRef(new GtkPluginWidget(gtkWidget)); 6300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<PluginView> pluginView = PluginView::create(core(m_frame), pluginSize, element, url, paramNames, paramValues, mimeType, loadManually); 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (pluginView->status() == PluginStatusLoadedSuccessfully) 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return pluginView; 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPassRefPtr<Frame> FrameLoaderClient::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement, 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 642db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block ASSERT(m_frame); 643db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block Frame* parentFrame = core(m_frame); 644db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block WebKitWebView* webView = getViewFromFrame(m_frame); 645db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block WebCore::Page* page = core(webView); 646db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block ASSERT(page == parentFrame->page()); 647635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 648db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block WebKitWebFrame* kitFrame = WEBKIT_WEB_FRAME(g_object_new(WEBKIT_TYPE_WEB_FRAME, NULL)); 649db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block WebKitWebFramePrivate* framePrivate = kitFrame->priv; 650db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block framePrivate->webView = webView; 6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 652db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block RefPtr<Frame> childFrame = Frame::create(page, ownerElement, new FrameLoaderClient(kitFrame)); 653db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block framePrivate->coreFrame = childFrame.get(); 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project childFrame->tree()->setName(name); 65628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu parentFrame->tree()->appendChild(childFrame); 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project childFrame->init(); 6580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // The creation of the frame may have run arbitrary JavaScript that removed it from the page already. 6600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!childFrame->page()) 6610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return 0; 6620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 663e14391e94c850b8bd03680c23b38978db68687a8John Reck g_signal_emit_by_name(webView, "frame-created", kitFrame); 664e14391e94c850b8bd03680c23b38978db68687a8John Reck 6652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block parentFrame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get()); 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The frame's onload handler may have removed it from the document. 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!childFrame->tree()->parent()) 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return childFrame.release(); 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 674bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid FrameLoaderClient::didTransferChildFrameToNewDocument(WebCore::Page*) 675692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 676bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ASSERT(m_frame); 677bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 678bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Update the frame's webview to the new parent's webview. 679bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen Frame* coreFrame = core(m_frame); 680bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebKitWebView* webView = getViewFromFrame(m_frame); 681bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 682bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen Frame* parentCoreFrame = coreFrame->tree()->parent(); 683bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebKitWebFrame* parentKitFrame = kit(parentCoreFrame); 684bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen WebKitWebView* parentWebView = getViewFromFrame(parentKitFrame); 685bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (webView != parentWebView) 686bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_frame->priv->webView = parentWebView; 687bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 688bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ASSERT(core(getViewFromFrame(m_frame)) == coreFrame->page()); 689692e5dbf12901edacf14812a6fae25462920af42Steve Block} 690692e5dbf12901edacf14812a6fae25462920af42Steve Block 69128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuvoid FrameLoaderClient::transferLoadingResourceFromPage(unsigned long identifier, WebCore::DocumentLoader* docLoader, const WebCore::ResourceRequest& request, WebCore::Page* oldPage) 692e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 69328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu ASSERT(oldPage != core(m_frame)->page()); 69428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 69528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu GOwnPtr<gchar> identifierString(toString(identifier)); 69628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu ASSERT(!webkit_web_view_get_resource(getViewFromFrame(m_frame), identifierString.get())); 69728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 69828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu assignIdentifierToInitialRequest(identifier, docLoader, request); 69928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 70028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu webkit_web_view_remove_resource(kit(oldPage), identifierString.get()); 701e14391e94c850b8bd03680c23b38978db68687a8John Reck} 702e14391e94c850b8bd03680c23b38978db68687a8John Reck 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::redirectDataToPlugin(Widget* pluginWidget) 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!m_pluginView); 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_pluginView = static_cast<PluginView*>(pluginWidget); 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_hasSentResponseToPlugin = false; 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 710692e5dbf12901edacf14812a6fae25462920af42Steve BlockPassRefPtr<Widget> FrameLoaderClient::createJavaAppletWidget(const IntSize& pluginSize, HTMLAppletElement* element, const KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues) 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 712692e5dbf12901edacf14812a6fae25462920af42Steve Block return FrameLoaderClient::createPlugin(pluginSize, element, baseURL, paramNames, paramValues, "application/x-java-applet", false); 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7152bde8e466a4451c7319e3a072d118917957d6554Steve BlockObjectContentType FrameLoaderClient::objectContentType(const KURL& url, const String& mimeType, bool shouldPreferPlugInsForImages) 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7172bde8e466a4451c7319e3a072d118917957d6554Steve Block return FrameLoader::defaultObjectContentType(url, mimeType, shouldPreferPlugInsForImages); 7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString FrameLoaderClient::overrideMediaType() const 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 726643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid FrameLoaderClient::dispatchDidClearWindowObjectInWorld(DOMWrapperWorld* world) 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 728643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (world != mainThreadNormalWorld()) 729643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 730643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Is this obsolete now? 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project g_signal_emit_by_name(m_frame, "cleared"); 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 734231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Frame* coreFrame = core(m_frame); 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(coreFrame); 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Settings* settings = coreFrame->settings(); 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!settings || !settings->isJavaScriptEnabled()) 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // TODO: Consider using g_signal_has_handler_pending() to avoid the overhead 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // when there are no handlers. 743cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block JSGlobalContextRef context = toGlobalRef(coreFrame->script()->globalObject(mainThreadNormalWorld())->globalExec()); 744cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block JSObjectRef windowObject = toRef(coreFrame->script()->globalObject(mainThreadNormalWorld())); 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(windowObject); 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project g_signal_emit_by_name(webView, "window-object-cleared", m_frame, context, windowObject); 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // TODO: Re-attach debug clients if present. 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The Win port has an example of how we might do this. 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 754563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid FrameLoaderClient::documentElementAvailable() 755563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 756563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 757563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::didPerformFirstNavigation() const 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 760f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebKitCacheModel cacheModel = webkit_get_cache_model(); 761f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // If user agents do not determine the cache model, we use WEBKIT_CACHE_MODEL_WEB_BROWSER by default. 762f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (cacheModel == WEBKIT_CACHE_MODEL_DEFAULT) 763f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch webkit_set_cache_model(WEBKIT_CACHE_MODEL_WEB_BROWSER); 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 766643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid FrameLoaderClient::registerForIconNotification(bool shouldRegister) 7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7714576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid FrameLoaderClient::setMainFrameDocumentReady(bool ready) 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (!ready) 7744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang DOMObjectCache::clearByFrame(core(m_frame)); 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClient::hasWebView() const 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return getViewFromFrame(m_frame); 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidFinishLoad() 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 784d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_loadingErrorPage) { 785d0825bca7fe65beaee391d30da42e937db621564Steve Block m_loadingErrorPage = false; 786d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 787d0825bca7fe65beaee391d30da42e937db621564Steve Block } 788d0825bca7fe65beaee391d30da42e937db621564Steve Block 7890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch loadDone(m_frame, true); 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::frameLoadCompleted() 7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::saveViewStateToItem(HistoryItem*) 7988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 8008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::restoreViewState() 8038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 8058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClient::shouldGoToHistoryItem(HistoryItem* item) const 8088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: This is a very simple implementation. More sophisticated 8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // implementation would delegate the decision to a PolicyDelegate. 8118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // See mac implementation for example. 8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return item != 0; 8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 81581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool FrameLoaderClient::shouldStopLoadingForHistoryItem(HistoryItem* item) const 81681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 81781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return true; 81881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 81981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 820ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdochvoid FrameLoaderClient::dispatchDidAddBackForwardItem(HistoryItem*) const 821ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch{ 822ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch} 823ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch 824ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdochvoid FrameLoaderClient::dispatchDidRemoveBackForwardItem(HistoryItem*) const 825ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch{ 826ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch} 827ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch 828ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdochvoid FrameLoaderClient::dispatchDidChangeBackForwardIndex() const 829ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch{ 830ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch} 831ed3dcbaa89ede50bb054f63aa1847ae6240fa70dBen Murdoch 832231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::didDisplayInsecureContent() 833231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 834231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 835231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 836231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 8372fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid FrameLoaderClient::didRunInsecureContent(SecurityOrigin*, const KURL&) 838231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 839231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 840231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 841231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 842231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::makeRepresentation(WebCore::DocumentLoader*) 8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_hasRepresentation = true; 8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::forceLayout() 8488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 849563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark FrameView* view = core(m_frame)->view(); 850563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (view) 851563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark view->forceLayout(true); 8528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::forceLayoutForNonHTML() 8558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 8578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::setCopiesOnScroll() 8608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 8628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::detachedFromParent2() 8658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block notImplemented(); 8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::detachedFromParent3() 8708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidHandleOnloadEvents() 8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 876dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block g_signal_emit_by_name(getViewFromFrame(m_frame), "onload-event", m_frame); 8778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad() 8808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 8828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidCancelClientRedirect() 8858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 8878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchWillPerformClientRedirect(const KURL&, double, double) 8908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 8928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidChangeLocationWithinPage() 8958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 896563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebKitWebFramePrivate* priv = m_frame->priv; 897563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_free(priv->uri); 8986ed1fdfa7999878a811b09cdd647fbeace4353b8Steve Block priv->uri = g_strdup(core(m_frame)->document()->url().string().utf8().data()); 899563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_notify(G_OBJECT(m_frame), "uri"); 9000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebKitWebView* webView = getViewFromFrame(m_frame); 9010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_frame == webkit_web_view_get_main_frame(webView)) 9020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_object_notify(G_OBJECT(webView), "uri"); 9038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 905643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid FrameLoaderClient::dispatchDidPushStateWithinPage() 906643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 907643ca7872b450ea4efacab6188849e5aac2ba161Steve Block notImplemented(); 908643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 909643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 910643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid FrameLoaderClient::dispatchDidReplaceStateWithinPage() 911643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 912643ca7872b450ea4efacab6188849e5aac2ba161Steve Block notImplemented(); 913643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 914643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 915643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid FrameLoaderClient::dispatchDidPopStateWithinPage() 916643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 917643ca7872b450ea4efacab6188849e5aac2ba161Steve Block notImplemented(); 918643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 919643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 9208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchWillClose() 9218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 9238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidReceiveIcon() 9268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 927d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_loadingErrorPage) 928d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 929d0825bca7fe65beaee391d30da42e937db621564Steve Block 9302bde8e466a4451c7319e3a072d118917957d6554Steve Block const gchar* frameURI = webkit_web_frame_get_uri(m_frame); 9312bde8e466a4451c7319e3a072d118917957d6554Steve Block WebKitIconDatabase* database = webkit_get_icon_database(); 9322bde8e466a4451c7319e3a072d118917957d6554Steve Block g_signal_emit_by_name(database, "icon-loaded", m_frame, frameURI); 9332bde8e466a4451c7319e3a072d118917957d6554Steve Block 9348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 9358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 936643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Avoid reporting favicons for non-main frames. 937643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_frame != webkit_web_view_get_main_frame(webView)) 938643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 939643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 940643ca7872b450ea4efacab6188849e5aac2ba161Steve Block g_object_notify(G_OBJECT(webView), "icon-uri"); 941643ca7872b450ea4efacab6188849e5aac2ba161Steve Block g_signal_emit_by_name(webView, "icon-loaded", webkit_web_view_get_icon_uri(webView)); 9428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidStartProvisionalLoad() 9458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 946d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_loadingErrorPage) 947d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 948d0825bca7fe65beaee391d30da42e937db621564Steve Block 9490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch notifyStatus(m_frame, WEBKIT_LOAD_PROVISIONAL); 9508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid FrameLoaderClient::dispatchDidReceiveTitle(const StringWithDirection& title) 9538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 954d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_loadingErrorPage) 955d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 956d0825bca7fe65beaee391d30da42e937db621564Steve Block 957563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebKitWebFramePrivate* priv = m_frame->priv; 958563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_free(priv->title); 9592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: use direction of title. 9602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch priv->title = g_strdup(title.string().utf8().data()); 961563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 962563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_signal_emit_by_name(m_frame, "title-changed", priv->title); 963563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_notify(G_OBJECT(m_frame), "title"); 9648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 966563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (m_frame == webkit_web_view_get_main_frame(webView)) { 9672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch g_signal_emit_by_name(webView, "title-changed", m_frame, title.string().utf8().data()); 968563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_notify(G_OBJECT(webView), "title"); 969563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 97221939df44de1705786c545cd1bf519d47250322dBen Murdochvoid FrameLoaderClient::dispatchDidChangeIcons() 97321939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 97421939df44de1705786c545cd1bf519d47250322dBen Murdoch notImplemented(); 97521939df44de1705786c545cd1bf519d47250322dBen Murdoch} 97621939df44de1705786c545cd1bf519d47250322dBen Murdoch 9778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidCommitLoad() 9788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 979d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_loadingErrorPage) 980d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 981d0825bca7fe65beaee391d30da42e937db621564Steve Block 9828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* Update the URI once first data has been received. 9838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This means the URI is valid and successfully identify the page that's going to be loaded. 9848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 985563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_freeze_notify(G_OBJECT(m_frame)); 986563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 987563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebKitWebFramePrivate* priv = m_frame->priv; 988563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_free(priv->uri); 9896ed1fdfa7999878a811b09cdd647fbeace4353b8Steve Block priv->uri = g_strdup(core(m_frame)->loader()->activeDocumentLoader()->url().string().utf8().data()); 990563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_free(priv->title); 991563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark priv->title = NULL; 992563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_notify(G_OBJECT(m_frame), "uri"); 993563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_notify(G_OBJECT(m_frame), "title"); 9948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project g_signal_emit_by_name(m_frame, "load-committed"); 9960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch notifyStatus(m_frame, WEBKIT_LOAD_COMMITTED); 9978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 999563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (m_frame == webkit_web_view_get_main_frame(webView)) { 1000563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_freeze_notify(G_OBJECT(webView)); 1001563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_notify(G_OBJECT(webView), "uri"); 1002563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_notify(G_OBJECT(webView), "title"); 1003563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_thaw_notify(G_OBJECT(webView)); 10048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project g_signal_emit_by_name(webView, "load-committed", m_frame); 1005563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1006563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1007563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark g_object_thaw_notify(G_OBJECT(m_frame)); 10088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidFinishDocumentLoad() 10118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1012dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebKitWebView* webView = getViewFromFrame(m_frame); 1013dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block g_signal_emit_by_name(webView, "document-load-finished", m_frame); 10148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchDidFirstLayout() 10178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1021635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout() 10228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1023d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_loadingErrorPage) 1024d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 1025d0825bca7fe65beaee391d30da42e937db621564Steve Block 10260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch notifyStatus(m_frame, WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT); 10278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1029635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid FrameLoaderClient::dispatchShow() 1030635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 1031635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 1032635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project webkit_web_view_notify_ready(webView); 1033635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 1034635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 10358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::cancelPolicyCheck() 10368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1037635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project //FIXME Add support for more than one policy decision at once 1038635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_policyDecision) 1039635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project webkit_web_policy_decision_cancel(m_policyDecision); 10408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1042231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::dispatchDidLoadMainResource(WebCore::DocumentLoader*) 10438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1047231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::revertToProvisionalState(WebCore::DocumentLoader*) 10488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_hasRepresentation = true; 10508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1052231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::willChangeTitle(WebCore::DocumentLoader*) 10538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1057231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::didChangeTitle(WebCore::DocumentLoader *l) 10588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setTitle(l->title(), l->url()); 10608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClient::canHandleRequest(const ResourceRequest&) const 10638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 10668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 106868513a70bcd92384395513322f1b801e7bf9c729Steve Blockbool FrameLoaderClient::canShowMIMETypeAsHTML(const String& MIMEType) const 106968513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 107068513a70bcd92384395513322f1b801e7bf9c729Steve Block notImplemented(); 107168513a70bcd92384395513322f1b801e7bf9c729Steve Block return false; 107268513a70bcd92384395513322f1b801e7bf9c729Steve Block} 107368513a70bcd92384395513322f1b801e7bf9c729Steve Block 1074635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool FrameLoaderClient::canShowMIMEType(const String& type) const 10758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1076643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return (MIMETypeRegistry::isSupportedImageMIMEType(type) 1077643ca7872b450ea4efacab6188849e5aac2ba161Steve Block || MIMETypeRegistry::isSupportedNonImageMIMEType(type) 1078643ca7872b450ea4efacab6188849e5aac2ba161Steve Block || MIMETypeRegistry::isSupportedMediaMIMEType(type) 1079643ca7872b450ea4efacab6188849e5aac2ba161Steve Block || PluginDatabase::installedPlugins()->isMIMETypeRegistered(type)); 10808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClient::representationExistsForURLScheme(const String&) const 10838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 10868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString FrameLoaderClient::generatedMIMETypeForURLScheme(const String&) const 10898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 10918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 10928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1094231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::finishedLoading(WebCore::DocumentLoader* documentLoader) 10958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1096d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!m_pluginView) { 10972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // This is necessary to create an empty document, 10982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // but it has to be skipped in the provisional phase. 10992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (m_hasRepresentation) 11002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block documentLoader->writer()->setEncoding("", false); 1101d0825bca7fe65beaee391d30da42e937db621564Steve Block } else { 11028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_pluginView->didFinishLoading(); 11038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_pluginView = 0; 11048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_hasSentResponseToPlugin = false; 11058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::provisionalLoadStarted() 11108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1111f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch notImplemented(); 11128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::didFinishLoad() { 11158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 11168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid FrameLoaderClient::prepareForDataSourceReplacement() 1119f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 1120f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch notImplemented(); 1121f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 11228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid FrameLoaderClient::setTitle(const StringWithDirection& title, const KURL& url) 11248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1125f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebKitWebFramePrivate* frameData = m_frame->priv; 11268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project g_free(frameData->title); 11272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: use direction of title. 11282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch frameData->title = g_strdup(title.string().utf8().data()); 11298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid FrameLoaderClient::dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int dataLength) 11328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 11338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 11348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1136231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::dispatchDidFinishLoading(WebCore::DocumentLoader* loader, unsigned long identifier) 11378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1138231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block static_cast<WebKit::DocumentLoader*>(loader)->decreaseLoadCount(identifier); 1139231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1140231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block WebKitWebView* webView = getViewFromFrame(m_frame); 1141231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block GOwnPtr<gchar> identifierString(toString(identifier)); 1142231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block WebKitWebResource* webResource = webkit_web_view_get_resource(webView, identifierString.get()); 1143231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1144cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // A NULL WebResource means the load has been interrupted, and 1145cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // replaced by another one while this resource was being loaded. 1146cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!webResource) 1147cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 1148cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block const char* uri = webkit_web_resource_get_uri(webResource); 1150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RefPtr<ArchiveResource> coreResource(loader->subresource(KURL(KURL(), uri))); 1151231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1152231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // If coreResource is NULL here, the resource failed to load, 1153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // unless it's the main resource. 1154231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!coreResource && webResource != webkit_web_view_get_main_resource(webView)) 1155231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1156231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1157231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!coreResource) 1158545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch coreResource = loader->mainResource(); 1159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1160231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block webkit_web_resource_init_with_core_resource(webResource, coreResource.get()); 1161231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1162231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // FIXME: This function should notify the application that the resource 1163231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // finished loading, maybe using a load-status property in the 1164231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // WebKitWebResource object, similar to what we do for WebKitWebFrame' 1165231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // signal. 11668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 11678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1169231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::dispatchDidFailLoading(WebCore::DocumentLoader* loader, unsigned long identifier, const ResourceError& error) 11700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1171231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block static_cast<WebKit::DocumentLoader*>(loader)->decreaseLoadCount(identifier); 1172231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1173231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // FIXME: This function should notify the application that the resource failed 1174231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // loading, maybe a 'load-error' signal in the WebKitWebResource object. 11750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch notImplemented(); 11760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1178231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockbool FrameLoaderClient::dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length) 11798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 11808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 11818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 11828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid FrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& error) 11858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 11860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch dispatchDidFailLoad(error); 11878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid FrameLoaderClient::dispatchDidFailLoad(const ResourceError& error) 11908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1191d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_loadingErrorPage) 1192d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 1193d0825bca7fe65beaee391d30da42e937db621564Steve Block 1194231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notifyStatus(m_frame, WEBKIT_LOAD_FAILED); 1195231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 11960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebKitWebView* webView = getViewFromFrame(m_frame); 11970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch GError* webError = g_error_new_literal(g_quark_from_string(error.domain().utf8().data()), 11980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch error.errorCode(), 11990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch error.localizedDescription().utf8().data()); 12000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch gboolean isHandled = false; 12010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_signal_emit_by_name(webView, "load-error", m_frame, error.failingURL().utf8().data(), webError, &isHandled); 12020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (isHandled) { 12040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_error_free(webError); 12050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 12060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 12070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!shouldFallBack(error)) { 12090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_error_free(webError); 12100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 12110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 12120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1213d0825bca7fe65beaee391d30da42e937db621564Steve Block m_loadingErrorPage = true; 1214d0825bca7fe65beaee391d30da42e937db621564Steve Block 12150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch String content; 12160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch gchar* fileContent = 0; 12170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch gchar* errorURI = g_filename_to_uri(DATA_DIR"/webkit-1.0/resources/error.html", NULL, NULL); 12180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch GFile* errorFile = g_file_new_for_uri(errorURI); 12190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_free(errorURI); 12200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!errorFile) 1222a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch content = makeString("<html><body>", webError->message, "</body></html>"); 12230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else { 12240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch gboolean loaded = g_file_load_contents(errorFile, 0, &fileContent, 0, 0, 0); 12250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!loaded) 1226a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch content = makeString("<html><body>", webError->message, "</body></html>"); 12270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch else 122828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu content = String::format(fileContent, error.failingURL().utf8().data(), webError->message); 12290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 12300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch webkit_web_frame_load_alternate_string(m_frame, content.utf8().data(), 0, error.failingURL().utf8().data()); 12320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_free(fileContent); 12340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (errorFile) 12360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_object_unref(errorFile); 12370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch g_error_free(webError); 12398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid FrameLoaderClient::download(ResourceHandle* handle, const ResourceRequest& request, const ResourceRequest&, const ResourceResponse& response) 12428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1243cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitNetworkRequest> networkRequest(adoptGRef(kitNew(request))); 12440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebKitWebView* view = getViewFromFrame(m_frame); 12450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1246f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch webkit_web_view_request_download(view, networkRequest.get(), response, handle); 12478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochResourceError FrameLoaderClient::cancelledError(const ResourceRequest& request) 12508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return ResourceError(g_quark_to_string(WEBKIT_NETWORK_ERROR), WEBKIT_NETWORK_ERROR_CANCELLED, 12520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch request.url().string(), _("Load request cancelled")); 12538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochResourceError FrameLoaderClient::blockedError(const ResourceRequest& request) 12568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return ResourceError(g_quark_to_string(WEBKIT_POLICY_ERROR), WEBKIT_POLICY_ERROR_CANNOT_USE_RESTRICTED_PORT, 12580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch request.url().string(), _("Not allowed to use restricted network port")); 12598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochResourceError FrameLoaderClient::cannotShowURLError(const ResourceRequest& request) 12628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return ResourceError(g_quark_to_string(WEBKIT_POLICY_ERROR), WEBKIT_POLICY_ERROR_CANNOT_SHOW_URL, 12640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch request.url().string(), _("URL cannot be shown")); 12658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochResourceError FrameLoaderClient::interruptForPolicyChangeError(const ResourceRequest& request) 12688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return ResourceError(g_quark_to_string(WEBKIT_POLICY_ERROR), WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE, 12700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch request.url().string(), _("Frame load was interrupted")); 12718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochResourceError FrameLoaderClient::cannotShowMIMETypeError(const ResourceResponse& response) 12748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return ResourceError(g_quark_to_string(WEBKIT_POLICY_ERROR), WEBKIT_POLICY_ERROR_CANNOT_SHOW_MIME_TYPE, 12760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch response.url().string(), _("Content with the specified MIME type cannot be shown")); 12778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochResourceError FrameLoaderClient::fileDoesNotExistError(const ResourceResponse& response) 12808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return ResourceError(g_quark_to_string(WEBKIT_NETWORK_ERROR), WEBKIT_NETWORK_ERROR_FILE_DOES_NOT_EXIST, 12820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch response.url().string(), _("File does not exist")); 12838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochResourceError FrameLoaderClient::pluginWillHandleLoadError(const ResourceResponse& response) 12868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return ResourceError(g_quark_to_string(WEBKIT_PLUGIN_ERROR), WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD, 12880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch response.url().string(), _("Plugin will handle load")); 12898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool FrameLoaderClient::shouldFallBack(const ResourceError& error) 12928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return !(error.isCancellation() || error.errorCode() == WEBKIT_POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE || error.errorCode() == WEBKIT_PLUGIN_ERROR_WILL_HANDLE_LOAD); 12948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FrameLoaderClient::canCachePage() const 12978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 12998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1301e14391e94c850b8bd03680c23b38978db68687a8John ReckFrame* FrameLoaderClient::dispatchCreatePage(const NavigationAction&) 13028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1303635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitWebView* webView = getViewFromFrame(m_frame); 1304635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitWebView* newWebView = 0; 1305635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1306635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project g_signal_emit_by_name(webView, "create-web-view", m_frame, &newWebView); 1307635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1308635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!newWebView) 1309635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return 0; 1310635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1311f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebKitWebViewPrivate* privateData = newWebView->priv; 1312635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return core(privateData->mainFrame); 13138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::dispatchUnableToImplementPolicy(const ResourceError&) 13168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 13188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1320231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid FrameLoaderClient::setMainDocumentError(WebCore::DocumentLoader*, const ResourceError& error) 13218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_pluginView) { 13238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_pluginView->didFail(error); 13248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_pluginView = 0; 13258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_hasSentResponseToPlugin = false; 13268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 13278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid FrameLoaderClient::startDownload(const ResourceRequest& request) 13308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1331cad810f21b803229eb11403f9209855525a25d57Steve Block GRefPtr<WebKitNetworkRequest> networkRequest(adoptGRef(kitNew(request))); 1332563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebKitWebView* view = getViewFromFrame(m_frame); 1333563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1334f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch webkit_web_view_request_download(view, networkRequest.get()); 13358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1337635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid FrameLoaderClient::updateGlobalHistory() 13388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 13408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1342563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid FrameLoaderClient::updateGlobalHistoryRedirectLinks() 13438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1344635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project notImplemented(); 13458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvoid FrameLoaderClient::savePlatformDataToCachedFrame(CachedFrame* cachedFrame) 13488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 13498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // We need to do this here in order to disconnect the scrollbars 13508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // that are being used by the frame that is being cached from the 13518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // adjustments, otherwise they will react to changes in the 13528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // adjustments, and bad things will happen. 13538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (cachedFrame->view()) 13548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block cachedFrame->view()->setGtkAdjustments(0, 0); 13558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 13568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 13578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockstatic void postCommitFrameViewSetup(WebKitWebFrame *frame, FrameView *view, bool resetValues) 1358635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 13598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block WebKitWebView* containingWindow = getViewFromFrame(frame); 1360f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch webkit_web_view_clear_resources(containingWindow); 1361f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1362f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebKitWebViewPrivate* priv = containingWindow->priv; 136368513a70bcd92384395513322f1b801e7bf9c729Steve Block view->setGtkAdjustments(priv->horizontalAdjustment.get(), priv->verticalAdjustment.get(), resetValues); 13648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1365f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Invalidate the viewport attributes - they will only be valid 1366f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // again if the page we're beginning to load now has an 1367f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // appropriate viewport meta tag. 1368f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch containingWindow->priv->viewportAttributes->priv->isValid = FALSE; 1369f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch g_object_notify(G_OBJECT(containingWindow->priv->viewportAttributes.get()), "valid"); 1370f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 13718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (priv->currentMenu) { 137265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch gtk_widget_destroy(GTK_WIDGET(priv->currentMenu)); 137365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch priv->currentMenu = 0; 13748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 137506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 137606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Do not allow click counting between main frame loads. 137706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen priv->previousClickTime = 0; 1378635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 1379635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 13808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvoid FrameLoaderClient::transitionToCommittedFromCachedFrame(CachedFrame* cachedFrame) 13818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block ASSERT(cachedFrame->view()); 13838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 13848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block Frame* frame = core(m_frame); 13858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (frame != frame->page()->mainFrame()) 13868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return; 13878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 13888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block postCommitFrameViewSetup(m_frame, cachedFrame->view(), false); 13898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FrameLoaderClient::transitionToCommittedForNewPage() 13928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1393635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitWebView* containingWindow = getViewFromFrame(m_frame); 1394ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block GtkAllocation allocation; 1395ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#if GTK_CHECK_VERSION(2, 18, 0) 1396ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block gtk_widget_get_allocation(GTK_WIDGET(containingWindow), &allocation); 1397ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#else 1398ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block allocation = GTK_WIDGET(containingWindow)->allocation; 1399ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 1400ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block IntSize size = IntSize(allocation.width, allocation.height); 1401635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool transparent = webkit_web_view_get_transparent(containingWindow); 1402635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Color backgroundColor = transparent ? WebCore::Color::transparent : WebCore::Color::white; 14038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* frame = core(m_frame); 14048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(frame); 14058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1406563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark frame->createView(size, backgroundColor, transparent, IntSize(), false); 14078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1408635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // We need to do further manipulation on the FrameView if it was the mainFrame 1409635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (frame != frame->page()->mainFrame()) 1410635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 14118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block postCommitFrameViewSetup(m_frame, frame->view(), true); 14138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1415cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid FrameLoaderClient::didSaveToPageCache() 1416cad810f21b803229eb11403f9209855525a25d57Steve Block{ 1417cad810f21b803229eb11403f9209855525a25d57Steve Block} 1418cad810f21b803229eb11403f9209855525a25d57Steve Block 1419cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid FrameLoaderClient::didRestoreFromPageCache() 1420cad810f21b803229eb11403f9209855525a25d57Steve Block{ 1421cad810f21b803229eb11403f9209855525a25d57Steve Block} 1422cad810f21b803229eb11403f9209855525a25d57Steve Block 1423e14391e94c850b8bd03680c23b38978db68687a8John Reckvoid FrameLoaderClient::dispatchDidBecomeFrameset(bool) 1424e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 1425e14391e94c850b8bd03680c23b38978db68687a8John Reck} 1426e14391e94c850b8bd03680c23b38978db68687a8John Reck 14275abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickPassRefPtr<FrameNetworkingContext> FrameLoaderClient::createNetworkingContext() 14285abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 14295abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return FrameNetworkingContextGtk::create(core(m_frame)); 14305abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 14315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 14328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1433