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(), &gtkWidget);
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