15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009, 2012 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Apple Inc. All rights reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/FrameLoaderClientImpl.h"
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptController.h"
3676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/HTMLNames.h"
37c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/dom/Document.h"
389e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "core/dom/Fullscreen.h"
3906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/MessageEvent.h"
4006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/MouseEvent.h"
41f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/FrameView.h"
42f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/Settings.h"
43c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/html/HTMLAppletElement.h"
44c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/loader/DocumentLoader.h"
45c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/loader/FrameLoadRequest.h"
46c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/loader/FrameLoader.h"
4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/loader/HistoryItem.h"
48c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/page/Chrome.h"
49c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/page/EventHandler.h"
50c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/page/Page.h"
5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/WindowFeatures.h"
52c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/rendering/HitTestResult.h"
53d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "modules/device_light/DeviceLightController.h"
54c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "modules/device_orientation/DeviceMotionController.h"
5551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "modules/device_orientation/DeviceOrientationController.h"
5607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "modules/gamepad/NavigatorGamepad.h"
57323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "modules/serviceworkers/NavigatorServiceWorker.h"
5851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/MIMETypeRegistry.h"
5976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "platform/RuntimeEnabledFeatures.h"
601e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/UserGestureIndicator.h"
6119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/exported/WrappedResourceRequest.h"
6219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/exported/WrappedResourceResponse.h"
631e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/network/HTTPParsers.h"
641e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/network/SocketStreamHandleInternal.h"
6551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/plugins/PluginData.h"
665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/Platform.h"
67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "public/platform/WebApplicationCacheHost.h"
685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebMimeRegistry.h"
6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebRTCPeerConnectionHandler.h"
701e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "public/platform/WebServiceWorkerProvider.h"
711e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "public/platform/WebServiceWorkerProviderClient.h"
725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebSocketStreamHandle.h"
735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebURL.h"
745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebURLError.h"
755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebVector.h"
76f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebAutofillClient.h"
77f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebCachedURLRequest.h"
78f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDOMEvent.h"
79f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDocument.h"
80f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFormElement.h"
81f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFrameClient.h"
82f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebNode.h"
83f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPermissionClient.h"
84f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPlugin.h"
85f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPluginParams.h"
86f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebSecurityOrigin.h"
87f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebViewClient.h"
88f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/SharedWorkerRepositoryClientImpl.h"
89f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebDataSourceImpl.h"
90f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebDevToolsAgentPrivate.h"
91f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebLocalFrameImpl.h"
92f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginContainerImpl.h"
93f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginLoadObserver.h"
94f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebViewImpl.h"
95591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/StringExtras.h"
96591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/CString.h"
97591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/WTFString.h"
98c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include <v8.h>
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink {
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochFrameLoaderClientImpl::FrameLoaderClientImpl(WebLocalFrameImpl* frame)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : m_webFrame(frame)
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FrameLoaderClientImpl::~FrameLoaderClientImpl()
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
111323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void FrameLoaderClientImpl::dispatchDidClearWindowObjectInMainWorld()
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
113c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    if (m_webFrame->client()) {
114323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        m_webFrame->client()->didClearWindowObject(m_webFrame);
1158abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        Document* document = m_webFrame->frame()->document();
1168abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        if (document) {
117d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            DeviceMotionController::from(*document);
118d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            DeviceOrientationController::from(*document);
119d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)            if (RuntimeEnabledFeatures::deviceLightEnabled())
120d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)                DeviceLightController::from(*document);
12107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            if (RuntimeEnabledFeatures::gamepadEnabled())
12207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch                NavigatorGamepad::from(*document);
123323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            if (RuntimeEnabledFeatures::serviceWorkerEnabled())
124323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)                NavigatorServiceWorker::from(*document);
1258abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        }
126c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    }
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::documentElementAvailable()
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didCreateDocumentElement(m_webFrame);
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::didCreateScriptContext(v8::Handle<v8::Context> context, int extensionGroup, int worldId)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebViewImpl* webview = m_webFrame->viewImpl();
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (webview->devToolsAgentPrivate())
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        webview->devToolsAgentPrivate()->didCreateScriptContext(m_webFrame, worldId);
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didCreateScriptContext(m_webFrame, context, extensionGroup, worldId);
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::willReleaseScriptContext(v8::Handle<v8::Context> context, int worldId)
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->willReleaseScriptContext(m_webFrame, context, worldId);
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool FrameLoaderClientImpl::allowScriptExtension(const String& extensionName,
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                                 int extensionGroup,
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                                 int worldId)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
15409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_webFrame->permissionClient())
155a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return m_webFrame->permissionClient()->allowScriptExtension(extensionName, extensionGroup, worldId);
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::didChangeScrollOffset()
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didChangeScrollOffset(m_webFrame);
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
166d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void FrameLoaderClientImpl::didUpdateCurrentHistoryItem()
167d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
168d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    if (m_webFrame->client())
169d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        m_webFrame->client()->didUpdateCurrentHistoryItem(m_webFrame);
170d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
171d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
172e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void FrameLoaderClientImpl::didRemoveAllPendingStylesheet()
173e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){
174e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    WebViewImpl* webview = m_webFrame->viewImpl();
175e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    if (webview)
176e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        webview->didRemoveAllPendingStylesheet(m_webFrame);
177e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)}
178e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool FrameLoaderClientImpl::allowScript(bool enabledPerSettings)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_webFrame->permissionClient())
182a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return m_webFrame->permissionClient()->allowScript(enabledPerSettings);
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return enabledPerSettings;
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool FrameLoaderClientImpl::allowScriptFromSource(bool enabledPerSettings, const KURL& scriptURL)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
18909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_webFrame->permissionClient())
190a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return m_webFrame->permissionClient()->allowScriptFromSource(enabledPerSettings, scriptURL);
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return enabledPerSettings;
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool FrameLoaderClientImpl::allowPlugins(bool enabledPerSettings)
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_webFrame->permissionClient())
198a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return m_webFrame->permissionClient()->allowPlugins(enabledPerSettings);
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return enabledPerSettings;
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool FrameLoaderClientImpl::allowImage(bool enabledPerSettings, const KURL& imageURL)
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_webFrame->permissionClient())
206a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return m_webFrame->permissionClient()->allowImage(enabledPerSettings, imageURL);
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return enabledPerSettings;
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
211197021e6b966cfb06891637935ef33fff06433d1Ben Murdochbool FrameLoaderClientImpl::allowMedia(const KURL& mediaURL)
212197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{
213197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    if (m_webFrame->permissionClient())
214197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return m_webFrame->permissionClient()->allowMedia(mediaURL);
215197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
216197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    return true;
217197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
218197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool FrameLoaderClientImpl::allowDisplayingInsecureContent(bool enabledPerSettings, SecurityOrigin* context, const KURL& url)
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
22109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_webFrame->permissionClient())
222a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return m_webFrame->permissionClient()->allowDisplayingInsecureContent(enabledPerSettings, WebSecurityOrigin(context), WebURL(url));
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return enabledPerSettings;
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool FrameLoaderClientImpl::allowRunningInsecureContent(bool enabledPerSettings, SecurityOrigin* context, const KURL& url)
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
22909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_webFrame->permissionClient())
230a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return m_webFrame->permissionClient()->allowRunningInsecureContent(enabledPerSettings, WebSecurityOrigin(context), WebURL(url));
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return enabledPerSettings;
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::didNotAllowScript()
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
23709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_webFrame->permissionClient())
238a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        m_webFrame->permissionClient()->didNotAllowScript();
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::didNotAllowPlugins()
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
24309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_webFrame->permissionClient())
244a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        m_webFrame->permissionClient()->didNotAllowPlugins();
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool FrameLoaderClientImpl::hasWebView() const
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_webFrame->viewImpl();
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
253d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)Frame* FrameLoaderClientImpl::opener() const
254d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
255e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return toCoreFrame(m_webFrame->opener());
256d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
257d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
258d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void FrameLoaderClientImpl::setOpener(Frame* opener)
259d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
2607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_webFrame->setOpener(WebFrame::fromFrame(opener));
261d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
262d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
26309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)Frame* FrameLoaderClientImpl::parent() const
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
265e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return toCoreFrame(m_webFrame->parent());
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
26809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)Frame* FrameLoaderClientImpl::top() const
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
270e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return toCoreFrame(m_webFrame->top());
27109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
27309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)Frame* FrameLoaderClientImpl::previousSibling() const
27409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
275e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return toCoreFrame(m_webFrame->previousSibling());
27609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
27709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
27809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)Frame* FrameLoaderClientImpl::nextSibling() const
27909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
280e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return toCoreFrame(m_webFrame->nextSibling());
28109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
28209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
28309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)Frame* FrameLoaderClientImpl::firstChild() const
28409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
285e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return toCoreFrame(m_webFrame->firstChild());
28609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
28709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
28809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)Frame* FrameLoaderClientImpl::lastChild() const
28909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
290e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return toCoreFrame(m_webFrame->lastChild());
29109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
29209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
29309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void FrameLoaderClientImpl::detachedFromParent()
29409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Alert the client that the frame is being detached. This is the last
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // chance we have to communicate with the client.
2977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RefPtrWillBeRawPtr<WebLocalFrameImpl> protector(m_webFrame);
29809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
29909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    WebFrameClient* client = m_webFrame->client();
30009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (!client)
30109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return;
30209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
30309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_webFrame->willDetachParent();
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
30509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // Signal that no further communication with WebFrameClient should take
30609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // place at this point since we are no longer associated with the Page.
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_webFrame->setClient(0);
30809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
30909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    client->frameDetached(m_webFrame);
310e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    // Clear our reference to LocalFrame at the very end, in case the client
31109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // refers to it.
312e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    m_webFrame->setCoreFrame(nullptr);
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchWillSendRequest(
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentLoader* loader, unsigned long identifier, ResourceRequest& request,
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const ResourceResponse& redirectResponse)
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Give the WebFrameClient a crack at the request.
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client()) {
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WrappedResourceRequest webreq(request);
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WrappedResourceResponse webresp(redirectResponse);
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->willSendRequest(
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            m_webFrame, identifier, webreq, webresp);
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidReceiveResponse(DocumentLoader* loader,
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                                       unsigned long identifier,
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                                       const ResourceResponse& response)
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client()) {
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WrappedResourceResponse webresp(response);
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didReceiveResponse(m_webFrame, identifier, webresp);
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
33707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
33807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid FrameLoaderClientImpl::dispatchDidChangeResourcePriority(unsigned long identifier, ResourceLoadPriority priority, int intraPriorityValue)
339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
340926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_webFrame->client())
341e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        m_webFrame->client()->didChangeResourcePriority(m_webFrame, identifier, static_cast<WebURLRequest::Priority>(priority), intraPriorityValue);
342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Called when a particular resource load completes
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidFinishLoading(DocumentLoader* loader,
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                                    unsigned long identifier)
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didFinishResourceLoad(m_webFrame, identifier);
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidFinishDocumentLoad()
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didFinishDocumentLoad(m_webFrame);
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3588abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidLoadResourceFromMemoryCache(const ResourceRequest& request, const ResourceResponse& response)
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3608abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    if (m_webFrame->client())
3618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        m_webFrame->client()->didLoadResourceFromMemoryCache(m_webFrame, WrappedResourceRequest(request), WrappedResourceResponse(response));
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidHandleOnloadEvents()
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didHandleOnloadEvents(m_webFrame);
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidReceiveServerRedirectForProvisionalLoad()
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didReceiveServerRedirectForProvisionalLoad(m_webFrame);
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
37609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidNavigateWithinPage(HistoryItem* item, HistoryCommitType commitType)
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
37809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool shouldCreateHistoryEntry = commitType == StandardCommit;
379a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    m_webFrame->viewImpl()->didCommitLoad(shouldCreateHistoryEntry, true);
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
381a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        m_webFrame->client()->didNavigateWithinPage(m_webFrame, WebHistoryItem(item), static_cast<WebHistoryCommitType>(commitType));
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchWillClose()
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->willClose(m_webFrame);
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
390197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid FrameLoaderClientImpl::dispatchDidStartProvisionalLoad(bool isTransitionNavigation)
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
392e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    if (m_webFrame->client())
393197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        m_webFrame->client()->didStartProvisionalLoad(m_webFrame, isTransitionNavigation);
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
396c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)void FrameLoaderClientImpl::dispatchDidReceiveTitle(const String& title)
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
399c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        m_webFrame->client()->didReceiveTitle(m_webFrame, title, WebTextDirectionLeftToRight);
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
402e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void FrameLoaderClientImpl::dispatchDidChangeIcons(IconType type)
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didChangeIcon(m_webFrame, static_cast<WebIconURL::Type>(type));
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
408d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidCommitLoad(LocalFrame* frame, HistoryItem* item, HistoryCommitType commitType)
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
41009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_webFrame->viewImpl()->didCommitLoad(commitType == StandardCommit, false);
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
412a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        m_webFrame->client()->didCommitProvisionalLoad(m_webFrame, WebHistoryItem(item), static_cast<WebHistoryCommitType>(commitType));
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidFailProvisionalLoad(
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const ResourceError& error)
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
41809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    OwnPtr<WebPluginLoadObserver> observer = pluginLoadObserver(m_webFrame->frame()->loader().provisionalDocumentLoader());
4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_webFrame->didFail(error, true);
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (observer)
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        observer->didFailLoading(error);
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidFailLoad(const ResourceError& error)
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
42609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    OwnPtr<WebPluginLoadObserver> observer = pluginLoadObserver(m_webFrame->frame()->loader().documentLoader());
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_webFrame->didFail(error, false);
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (observer)
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        observer->didFailLoading(error);
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Don't clear the redirect chain, this will happen in the middle of client
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // redirects, and we need the context. The chain will be cleared when the
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // provisional load succeeds or fails, not the "real" one.
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchDidFinishLoad()
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
43809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    OwnPtr<WebPluginLoadObserver> observer = pluginLoadObserver(m_webFrame->frame()->loader().documentLoader());
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didFinishLoad(m_webFrame);
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (observer)
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        observer->didFinishLoading();
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Don't clear the redirect chain, this will happen in the middle of client
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // redirects, and we need the context. The chain will be cleared when the
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // provisional load succeeds or fails, not the "real" one.
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void FrameLoaderClientImpl::dispatchDidFirstVisuallyNonEmptyLayout()
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    if (m_webFrame->client())
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didFirstVisuallyNonEmptyLayout(m_webFrame);
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
457197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid FrameLoaderClientImpl::dispatchDidChangeThemeColor()
4585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){
4595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    if (m_webFrame->client())
460197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        m_webFrame->client()->didChangeThemeColor();
4615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)}
4625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
463197021e6b966cfb06891637935ef33fff06433d1Ben MurdochNavigationPolicy FrameLoaderClientImpl::decidePolicyForNavigation(const ResourceRequest& request, DocumentLoader* loader, NavigationPolicy policy, bool isTransitionNavigation)
464e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{
465e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    if (!m_webFrame->client())
466e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        return NavigationPolicyIgnore;
467e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    WebDataSourceImpl* ds = WebDataSourceImpl::fromDocumentLoader(loader);
468197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
469197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WrappedResourceRequest wrappedResourceRequest(request);
470197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebFrameClient::NavigationPolicyInfo navigationInfo(wrappedResourceRequest);
471197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    navigationInfo.frame = m_webFrame;
472197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    navigationInfo.extraData = ds->extraData();
473197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    navigationInfo.navigationType = ds->navigationType();
474197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    navigationInfo.defaultPolicy = static_cast<WebNavigationPolicy>(policy);
475197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    navigationInfo.isRedirect = ds->isRedirect();
476197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    navigationInfo.isTransitionNavigation = isTransitionNavigation;
477197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
478197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebNavigationPolicy webPolicy = m_webFrame->client()->decidePolicyForNavigation(navigationInfo);
479e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    return static_cast<NavigationPolicy>(webPolicy);
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
482197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid FrameLoaderClientImpl::dispatchAddNavigationTransitionData(const String& allowedDestinationOrigin, const String& selector, const String& markup)
483197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{
484197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    if (m_webFrame->client())
485197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        m_webFrame->client()->addNavigationTransitionData(allowedDestinationOrigin, selector, markup);
486197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
487197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
4883464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdochvoid FrameLoaderClientImpl::dispatchWillRequestResource(FetchRequest* request)
489926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
490926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_webFrame->client()) {
491926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        WebCachedURLRequest urlRequest(request);
492926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_webFrame->client()->willRequestResource(m_webFrame, urlRequest);
493926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
494926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
495926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
496d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void FrameLoaderClientImpl::dispatchWillSendSubmitEvent(HTMLFormElement* form)
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
499d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        m_webFrame->client()->willSendSubmitEvent(m_webFrame, WebFormElement(form));
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
502d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void FrameLoaderClientImpl::dispatchWillSubmitForm(HTMLFormElement* form)
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
505d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        m_webFrame->client()->willSubmitForm(m_webFrame, WebFormElement(form));
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
50807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid FrameLoaderClientImpl::didStartLoading(LoadStartType loadStartType)
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
51007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    if (m_webFrame->client())
51107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        m_webFrame->client()->didStartLoading(loadStartType == NavigationToDifferentDocument);
5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
51407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid FrameLoaderClientImpl::progressEstimateChanged(double progressEstimate)
5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
51607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    if (m_webFrame->client())
51707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        m_webFrame->client()->didChangeLoadProgress(progressEstimate);
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
52007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid FrameLoaderClientImpl::didStopLoading()
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
52207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    if (m_webFrame->client())
52307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        m_webFrame->client()->didStopLoading();
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
526e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid FrameLoaderClientImpl::loadURLExternally(const ResourceRequest& request, NavigationPolicy policy, const String& suggestedName)
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client()) {
529d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        ASSERT(m_webFrame->frame()->document());
5309e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        Fullscreen::fullyExitFullscreen(*m_webFrame->frame()->document());
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WrappedResourceRequest webreq(request);
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->loadURLExternally(
533e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            m_webFrame, webreq, static_cast<WebNavigationPolicy>(policy), suggestedName);
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
537bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)bool FrameLoaderClientImpl::navigateBackForward(int offset) const
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebViewImpl* webview = m_webFrame->viewImpl();
540bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    if (!webview->client())
541bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        return false;
542bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)
543bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    ASSERT(offset);
544bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    offset = std::min(offset, webview->client()->historyForwardListCount());
545bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    offset = std::max(offset, -webview->client()->historyBackListCount());
546bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    if (!offset)
547bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        return false;
548bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    webview->client()->navigateBackForwardSoon(offset);
549bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    return true;
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
552926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void FrameLoaderClientImpl::didAccessInitialDocument()
553926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
554926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_webFrame->client())
555926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_webFrame->client()->didAccessInitialDocument(m_webFrame);
556926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
557926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::didDisplayInsecureContent()
5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didDisplayInsecureContent(m_webFrame);
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::didRunInsecureContent(SecurityOrigin* origin, const KURL& insecureURL)
5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didRunInsecureContent(m_webFrame, WebSecurityOrigin(origin), insecureURL);
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::didDetectXSS(const KURL& insecureURL, bool didBlockEntirePage)
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didDetectXSS(m_webFrame, insecureURL, didBlockEntirePage);
5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5761fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdochvoid FrameLoaderClientImpl::didDispatchPingLoader(const KURL& url)
5771fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch{
5781fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    if (m_webFrame->client())
5791fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch        m_webFrame->client()->didDispatchPingLoader(m_webFrame, url);
5801fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch}
5811fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch
5821e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void FrameLoaderClientImpl::selectorMatchChanged(const Vector<String>& addedSelectors, const Vector<String>& removedSelectors)
5831e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){
5841e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    if (WebFrameClient* client = m_webFrame->client())
5851e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        client->didMatchCSS(m_webFrame, WebVector<WebString>(addedSelectors), WebVector<WebString>(removedSelectors));
5861e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)}
5871e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
588d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtr<DocumentLoader> FrameLoaderClientImpl::createDocumentLoader(LocalFrame* frame, const ResourceRequest& request, const SubstituteData& data)
5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
59009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    RefPtr<WebDataSourceImpl> ds = WebDataSourceImpl::create(frame, request, data);
5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->client())
5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_webFrame->client()->didCreateDataSource(m_webFrame, ds.get());
5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return ds.release();
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String FrameLoaderClientImpl::userAgent(const KURL& url)
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebString override = m_webFrame->client()->userAgentOverride(m_webFrame, WebURL(url));
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!override.isEmpty())
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return override;
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
602e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return Platform::current()->userAgent();
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
60553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)String FrameLoaderClientImpl::doNotTrackValue()
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
60753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    WebString doNotTrack = m_webFrame->client()->doNotTrackValue(m_webFrame);
60853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    if (!doNotTrack.isEmpty())
60953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return doNotTrack;
61053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return String();
6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Called when the FrameLoader goes into a state in which a new page load
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// will occur.
615a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void FrameLoaderClientImpl::transitionToCommittedForNewPage()
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
61753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    m_webFrame->createFrameView();
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtrWillBeRawPtr<LocalFrame> FrameLoaderClientImpl::createFrame(
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const KURL& url,
62209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    const AtomicString& name,
62309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    const Referrer& referrer,
624c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    HTMLFrameOwnerElement* ownerElement)
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
62609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    FrameLoadRequest frameRequest(m_webFrame->frame()->document(),
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ResourceRequest(url, referrer), name);
6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_webFrame->createChildFrame(frameRequest, ownerElement);
6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
631a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochbool FrameLoaderClientImpl::canCreatePluginWithoutRenderer(const String& mimeType) const
632a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{
633a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    if (!m_webFrame->client())
634a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return false;
635a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
636a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    return m_webFrame->client()->canCreatePluginWithoutRenderer(mimeType);
637a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch}
638a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<Widget> FrameLoaderClientImpl::createPlugin(
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    HTMLPlugInElement* element,
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const KURL& url,
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<String>& paramNames,
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<String>& paramValues,
6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const String& mimeType,
645d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool loadManually,
646d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    DetachedPluginPolicy policy)
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_webFrame->client())
649d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return nullptr;
6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebPluginParams params;
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    params.url = url;
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    params.mimeType = mimeType;
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    params.attributeNames = paramNames;
6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    params.attributeValues = paramValues;
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    params.loadManually = loadManually;
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebPlugin* webPlugin = m_webFrame->client()->createPlugin(m_webFrame, params);
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!webPlugin)
660d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return nullptr;
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // The container takes ownership of the WebPlugin.
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<WebPluginContainerImpl> container =
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebPluginContainerImpl::create(element, webPlugin);
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!webPlugin->initialize(container.get()))
667d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return nullptr;
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
669d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    if (policy != AllowDetachedPlugin && !element->renderer())
670d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return nullptr;
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return container;
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<Widget> FrameLoaderClientImpl::createJavaAppletWidget(
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    HTMLAppletElement* element,
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const KURL& /* baseURL */,
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<String>& paramNames,
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<String>& paramValues)
6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
681d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    return createPlugin(element, KURL(), paramNames, paramValues,
682d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        "application/x-java-applet", false, FailOnDetachedPlugin);
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ObjectContentType FrameLoaderClientImpl::objectContentType(
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const KURL& url,
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const String& explicitMimeType,
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool shouldPreferPlugInsForImages)
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // This code is based on Apple's implementation from
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // WebCoreSupport/WebFrameBridge.mm.
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String mimeType = explicitMimeType;
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (mimeType.isEmpty()) {
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Try to guess the MIME type based off the extension.
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        String filename = url.lastPathComponent();
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        int extensionPos = filename.reverseFind('.');
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (extensionPos >= 0) {
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            String extension = filename.substring(extensionPos + 1);
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            mimeType = MIMETypeRegistry::getMIMETypeForExtension(extension);
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (mimeType.isEmpty()) {
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                // If there's no mimetype registered for the extension, check to see
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                // if a plugin can handle the extension.
7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                mimeType = getPluginMimeTypeFromExtension(extension);
7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (mimeType.isEmpty())
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return ObjectContentFrame;
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // If Chrome is started with the --disable-plugins switch, pluginData is 0.
7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PluginData* pluginData = m_webFrame->frame()->page()->pluginData();
7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool plugInSupportsMIMEType = pluginData && pluginData->supportsMimeType(mimeType);
7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (MIMETypeRegistry::isSupportedImageMIMEType(mimeType))
7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return shouldPreferPlugInsForImages && plugInSupportsMIMEType ? ObjectContentNetscapePlugin : ObjectContentImage;
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (plugInSupportsMIMEType)
7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return ObjectContentNetscapePlugin;
7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (MIMETypeRegistry::isSupportedNonImageMIMEType(mimeType))
7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return ObjectContentFrame;
7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return ObjectContentNone;
7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
72809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)PassOwnPtr<WebPluginLoadObserver> FrameLoaderClientImpl::pluginLoadObserver(DocumentLoader* loader)
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
73009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return WebDataSourceImpl::fromDocumentLoader(loader)->releasePluginLoadObserver();
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)WebCookieJar* FrameLoaderClientImpl::cookieJar() const
7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (!m_webFrame->client())
7365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return 0;
7375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    return m_webFrame->client()->cookieJar(m_webFrame);
7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool FrameLoaderClientImpl::willCheckAndDispatchMessageEvent(
7417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    SecurityOrigin* target, MessageEvent* event, LocalFrame* sourceFrame) const
7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_webFrame->client())
7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_webFrame->client()->willCheckAndDispatchMessageEvent(
7467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        WebLocalFrameImpl::fromFrame(sourceFrame), m_webFrame, WebSecurityOrigin(target), WebDOMMessageEvent(event));
7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
749926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void FrameLoaderClientImpl::didChangeName(const String& name)
750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_webFrame->client())
7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
753926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    m_webFrame->client()->didChangeName(m_webFrame, name);
7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void FrameLoaderClientImpl::dispatchWillOpenSocketStream(SocketStreamHandle* handle)
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_webFrame->client()->willOpenSocketStream(SocketStreamHandleInternal::toWebSocketStreamHandle(handle));
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
761e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void FrameLoaderClientImpl::dispatchWillOpenWebSocket(WebSocketHandle* handle)
762f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){
763f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    m_webFrame->client()->willOpenWebSocket(handle);
764f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)}
765f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
766e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void FrameLoaderClientImpl::dispatchWillStartUsingPeerConnectionHandler(WebRTCPeerConnectionHandler* handler)
7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
76809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_webFrame->client()->willStartUsingPeerConnectionHandler(webFrame(), handler);
7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
771f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)void FrameLoaderClientImpl::didRequestAutocomplete(HTMLFormElement* form)
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_webFrame->viewImpl() && m_webFrame->viewImpl()->autofillClient())
774f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        m_webFrame->viewImpl()->autofillClient()->didRequestAutocomplete(WebFormElement(form));
7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
777926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool FrameLoaderClientImpl::allowWebGL(bool enabledPerSettings)
778926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
779926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_webFrame->client())
780926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        return m_webFrame->client()->allowWebGL(m_webFrame, enabledPerSettings);
781926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
782926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return enabledPerSettings;
783926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
784926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
785926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void FrameLoaderClientImpl::didLoseWebGLContext(int arbRobustnessContextLostReason)
786926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
787926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_webFrame->client())
788926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_webFrame->client()->didLoseWebGLContext(m_webFrame, arbRobustnessContextLostReason);
789926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
790926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
791926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void FrameLoaderClientImpl::dispatchWillInsertBody()
792926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
793926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_webFrame->client())
794926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_webFrame->client()->willInsertBody(m_webFrame);
795d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
796d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    if (m_webFrame->viewImpl())
797d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        m_webFrame->viewImpl()->willInsertBody(m_webFrame);
798926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
799926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
800d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassOwnPtr<WebServiceWorkerProvider> FrameLoaderClientImpl::createServiceWorkerProvider()
8019bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles){
8029bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    if (!m_webFrame->client())
8031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        return nullptr;
804d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    return adoptPtr(m_webFrame->client()->createServiceWorkerProvider(m_webFrame));
80506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)}
80606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
8077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccibool FrameLoaderClientImpl::isControlledByServiceWorker()
8087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
8097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return m_webFrame->client() && m_webFrame->client()->isControlledByServiceWorker();
8107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
8117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
81209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)SharedWorkerRepositoryClient* FrameLoaderClientImpl::sharedWorkerRepositoryClient()
81309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
81409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return m_webFrame->sharedWorkerRepositoryClient();
81509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
81609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
817d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassOwnPtr<WebApplicationCacheHost> FrameLoaderClientImpl::createApplicationCacheHost(WebApplicationCacheHostClient* client)
818d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
819d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    if (!m_webFrame->client())
820d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return nullptr;
821d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    return adoptPtr(m_webFrame->client()->createApplicationCacheHost(m_webFrame, client));
822d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
823d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
82406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)void FrameLoaderClientImpl::didStopAllLoaders()
82506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles){
82606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    if (m_webFrame->client())
82706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        m_webFrame->client()->didAbortLoading(m_webFrame);
8289bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)}
8299bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)
830323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void FrameLoaderClientImpl::dispatchDidChangeManifest()
831323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){
832323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    if (m_webFrame->client())
833323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        m_webFrame->client()->didChangeManifest(m_webFrame);
834323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)}
835323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
83651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink
837