| Index: third_party/WebKit/Source/web/FrameLoaderClientImpl.cpp
|
| diff --git a/third_party/WebKit/Source/web/FrameLoaderClientImpl.cpp b/third_party/WebKit/Source/web/FrameLoaderClientImpl.cpp
|
| deleted file mode 100644
|
| index a950551159cc89c4b138f908b5094ad7a3913589..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/web/FrameLoaderClientImpl.cpp
|
| +++ /dev/null
|
| @@ -1,1013 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2009, 2012 Google Inc. All rights reserved.
|
| - * Copyright (C) 2011 Apple Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions are
|
| - * met:
|
| - *
|
| - * * Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * * Redistributions in binary form must reproduce the above
|
| - * copyright notice, this list of conditions and the following disclaimer
|
| - * in the documentation and/or other materials provided with the
|
| - * distribution.
|
| - * * Neither the name of Google Inc. nor the names of its
|
| - * contributors may be used to endorse or promote products derived from
|
| - * this software without specific prior written permission.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "web/FrameLoaderClientImpl.h"
|
| -
|
| -#include "bindings/core/v8/ScriptController.h"
|
| -#include "core/HTMLNames.h"
|
| -#include "core/dom/Document.h"
|
| -#include "core/dom/Fullscreen.h"
|
| -#include "core/events/MessageEvent.h"
|
| -#include "core/events/MouseEvent.h"
|
| -#include "core/events/UIEventWithKeyState.h"
|
| -#include "core/frame/FrameView.h"
|
| -#include "core/frame/Settings.h"
|
| -#include "core/html/HTMLFrameElementBase.h"
|
| -#include "core/html/HTMLMediaElement.h"
|
| -#include "core/html/HTMLPlugInElement.h"
|
| -#include "core/input/EventHandler.h"
|
| -#include "core/layout/HitTestResult.h"
|
| -#include "core/loader/DocumentLoader.h"
|
| -#include "core/loader/FrameLoadRequest.h"
|
| -#include "core/loader/FrameLoader.h"
|
| -#include "core/loader/HistoryItem.h"
|
| -#include "core/origin_trials/OriginTrials.h"
|
| -#include "core/page/Page.h"
|
| -#include "core/page/WindowFeatures.h"
|
| -#include "modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.h"
|
| -#include "modules/device_light/DeviceLightController.h"
|
| -#include "modules/device_orientation/DeviceMotionController.h"
|
| -#include "modules/device_orientation/DeviceOrientationAbsoluteController.h"
|
| -#include "modules/device_orientation/DeviceOrientationController.h"
|
| -#include "modules/encryptedmedia/HTMLMediaElementEncryptedMedia.h"
|
| -#include "modules/gamepad/NavigatorGamepad.h"
|
| -#include "modules/remoteplayback/HTMLMediaElementRemotePlayback.h"
|
| -#include "modules/remoteplayback/RemotePlayback.h"
|
| -#include "modules/serviceworkers/NavigatorServiceWorker.h"
|
| -#include "modules/serviceworkers/ServiceWorkerLinkResource.h"
|
| -#include "modules/storage/DOMWindowStorageController.h"
|
| -#include "modules/vr/NavigatorVR.h"
|
| -#include "platform/Histogram.h"
|
| -#include "platform/RuntimeEnabledFeatures.h"
|
| -#include "platform/UserGestureIndicator.h"
|
| -#include "platform/exported/WrappedResourceRequest.h"
|
| -#include "platform/exported/WrappedResourceResponse.h"
|
| -#include "platform/network/HTTPParsers.h"
|
| -#include "platform/network/mime/MIMETypeRegistry.h"
|
| -#include "platform/plugins/PluginData.h"
|
| -#include "public/platform/Platform.h"
|
| -#include "public/platform/WebApplicationCacheHost.h"
|
| -#include "public/platform/WebMediaPlayerSource.h"
|
| -#include "public/platform/WebRTCPeerConnectionHandler.h"
|
| -#include "public/platform/WebSecurityOrigin.h"
|
| -#include "public/platform/WebURL.h"
|
| -#include "public/platform/WebURLError.h"
|
| -#include "public/platform/WebVector.h"
|
| -#include "public/platform/modules/serviceworker/WebServiceWorkerProvider.h"
|
| -#include "public/platform/modules/serviceworker/WebServiceWorkerProviderClient.h"
|
| -#include "public/web/WebAutofillClient.h"
|
| -#include "public/web/WebContentSettingsClient.h"
|
| -#include "public/web/WebDOMEvent.h"
|
| -#include "public/web/WebDocument.h"
|
| -#include "public/web/WebFormElement.h"
|
| -#include "public/web/WebFrameClient.h"
|
| -#include "public/web/WebNode.h"
|
| -#include "public/web/WebPlugin.h"
|
| -#include "public/web/WebPluginParams.h"
|
| -#include "public/web/WebViewClient.h"
|
| -#include "web/DevToolsEmulator.h"
|
| -#include "web/SharedWorkerRepositoryClientImpl.h"
|
| -#include "web/WebDataSourceImpl.h"
|
| -#include "web/WebDevToolsAgentImpl.h"
|
| -#include "web/WebDevToolsFrontendImpl.h"
|
| -#include "web/WebLocalFrameImpl.h"
|
| -#include "web/WebPluginContainerImpl.h"
|
| -#include "web/WebViewImpl.h"
|
| -#include "wtf/PtrUtil.h"
|
| -#include "wtf/StringExtras.h"
|
| -#include "wtf/text/CString.h"
|
| -#include "wtf/text/WTFString.h"
|
| -#include <memory>
|
| -#include <v8.h>
|
| -
|
| -namespace blink {
|
| -
|
| -namespace {
|
| -
|
| -// Convenience helper for frame tree helpers in FrameClient to reduce the amount
|
| -// of null-checking boilerplate code. Since the frame tree is maintained in the
|
| -// web/ layer, the frame tree helpers often have to deal with null WebFrames:
|
| -// for example, a frame with no parent will return null for WebFrame::parent().
|
| -// TODO(dcheng): Remove duplication between FrameLoaderClientImpl and
|
| -// RemoteFrameClientImpl somehow...
|
| -Frame* toCoreFrame(WebFrame* frame) {
|
| - return frame ? frame->toImplBase()->frame() : nullptr;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -FrameLoaderClientImpl::FrameLoaderClientImpl(WebLocalFrameImpl* frame)
|
| - : m_webFrame(frame) {}
|
| -
|
| -FrameLoaderClientImpl* FrameLoaderClientImpl::create(WebLocalFrameImpl* frame) {
|
| - return new FrameLoaderClientImpl(frame);
|
| -}
|
| -
|
| -FrameLoaderClientImpl::~FrameLoaderClientImpl() {}
|
| -
|
| -DEFINE_TRACE(FrameLoaderClientImpl) {
|
| - visitor->trace(m_webFrame);
|
| - FrameLoaderClient::trace(visitor);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didCreateNewDocument() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didCreateNewDocument(m_webFrame);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidClearWindowObjectInMainWorld() {
|
| - if (m_webFrame->client()) {
|
| - m_webFrame->client()->didClearWindowObject(m_webFrame);
|
| - Document* document = m_webFrame->frame()->document();
|
| - if (document) {
|
| - DeviceMotionController::from(*document);
|
| - DeviceOrientationController::from(*document);
|
| - DeviceOrientationAbsoluteController::from(*document);
|
| - if (RuntimeEnabledFeatures::deviceLightEnabled())
|
| - DeviceLightController::from(*document);
|
| - NavigatorGamepad::from(*document);
|
| - NavigatorServiceWorker::from(*document);
|
| - DOMWindowStorageController::from(*document);
|
| - if (RuntimeEnabledFeatures::webVREnabled() ||
|
| - OriginTrials::webVREnabled(document->getExecutionContext()))
|
| - NavigatorVR::from(*document);
|
| - }
|
| - }
|
| - // FIXME: when extensions go out of process, this whole concept stops working.
|
| - WebDevToolsFrontendImpl* devToolsFrontend =
|
| - m_webFrame->top()->isWebLocalFrame()
|
| - ? toWebLocalFrameImpl(m_webFrame->top())->devToolsFrontend()
|
| - : nullptr;
|
| - if (devToolsFrontend)
|
| - devToolsFrontend->didClearWindowObject(m_webFrame);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::documentElementAvailable() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didCreateDocumentElement(m_webFrame);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::runScriptsAtDocumentElementAvailable() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->runScriptsAtDocumentElementAvailable(m_webFrame);
|
| - // The callback might have deleted the frame, do not use |this|!
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::runScriptsAtDocumentReady(bool documentIsEmpty) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->runScriptsAtDocumentReady(m_webFrame,
|
| - documentIsEmpty);
|
| - // The callback might have deleted the frame, do not use |this|!
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didCreateScriptContext(
|
| - v8::Local<v8::Context> context,
|
| - int worldId) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didCreateScriptContext(m_webFrame, context, worldId);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::willReleaseScriptContext(
|
| - v8::Local<v8::Context> context,
|
| - int worldId) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->willReleaseScriptContext(m_webFrame, context,
|
| - worldId);
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::allowScriptExtensions() {
|
| - return true;
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didChangeScrollOffset() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didChangeScrollOffset(m_webFrame);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didUpdateCurrentHistoryItem() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didUpdateCurrentHistoryItem();
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::allowScript(bool enabledPerSettings) {
|
| - if (m_webFrame->contentSettingsClient())
|
| - return m_webFrame->contentSettingsClient()->allowScript(enabledPerSettings);
|
| -
|
| - return enabledPerSettings;
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::allowScriptFromSource(bool enabledPerSettings,
|
| - const KURL& scriptURL) {
|
| - if (m_webFrame->contentSettingsClient())
|
| - return m_webFrame->contentSettingsClient()->allowScriptFromSource(
|
| - enabledPerSettings, scriptURL);
|
| -
|
| - return enabledPerSettings;
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::allowPlugins(bool enabledPerSettings) {
|
| - if (m_webFrame->contentSettingsClient())
|
| - return m_webFrame->contentSettingsClient()->allowPlugins(
|
| - enabledPerSettings);
|
| -
|
| - return enabledPerSettings;
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::allowImage(bool enabledPerSettings,
|
| - const KURL& imageURL) {
|
| - if (m_webFrame->contentSettingsClient())
|
| - return m_webFrame->contentSettingsClient()->allowImage(enabledPerSettings,
|
| - imageURL);
|
| -
|
| - return enabledPerSettings;
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::allowRunningInsecureContent(bool enabledPerSettings,
|
| - SecurityOrigin* context,
|
| - const KURL& url) {
|
| - if (m_webFrame->contentSettingsClient())
|
| - return m_webFrame->contentSettingsClient()->allowRunningInsecureContent(
|
| - enabledPerSettings, WebSecurityOrigin(context), WebURL(url));
|
| -
|
| - return enabledPerSettings;
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::allowAutoplay(bool defaultValue) {
|
| - if (m_webFrame->contentSettingsClient())
|
| - return m_webFrame->contentSettingsClient()->allowAutoplay(defaultValue);
|
| -
|
| - return defaultValue;
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::passiveInsecureContentFound(const KURL& url) {
|
| - if (m_webFrame->contentSettingsClient())
|
| - return m_webFrame->contentSettingsClient()->passiveInsecureContentFound(
|
| - WebURL(url));
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didNotAllowScript() {
|
| - if (m_webFrame->contentSettingsClient())
|
| - m_webFrame->contentSettingsClient()->didNotAllowScript();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didNotAllowPlugins() {
|
| - if (m_webFrame->contentSettingsClient())
|
| - m_webFrame->contentSettingsClient()->didNotAllowPlugins();
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::hasWebView() const {
|
| - return m_webFrame->viewImpl();
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::inShadowTree() const {
|
| - return m_webFrame->inShadowTree();
|
| -}
|
| -
|
| -Frame* FrameLoaderClientImpl::opener() const {
|
| - return toCoreFrame(m_webFrame->opener());
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::setOpener(Frame* opener) {
|
| - WebFrame* openerFrame = WebFrame::fromFrame(opener);
|
| - if (m_webFrame->client() && m_webFrame->opener() != openerFrame)
|
| - m_webFrame->client()->didChangeOpener(openerFrame);
|
| - m_webFrame->setOpener(openerFrame);
|
| -}
|
| -
|
| -Frame* FrameLoaderClientImpl::parent() const {
|
| - return toCoreFrame(m_webFrame->parent());
|
| -}
|
| -
|
| -Frame* FrameLoaderClientImpl::top() const {
|
| - return toCoreFrame(m_webFrame->top());
|
| -}
|
| -
|
| -Frame* FrameLoaderClientImpl::nextSibling() const {
|
| - return toCoreFrame(m_webFrame->nextSibling());
|
| -}
|
| -
|
| -Frame* FrameLoaderClientImpl::firstChild() const {
|
| - return toCoreFrame(m_webFrame->firstChild());
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::willBeDetached() {
|
| - m_webFrame->willBeDetached();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::detached(FrameDetachType type) {
|
| - // Alert the client that the frame is being detached. This is the last
|
| - // chance we have to communicate with the client.
|
| - WebFrameClient* client = m_webFrame->client();
|
| - if (!client)
|
| - return;
|
| -
|
| - m_webFrame->willDetachParent();
|
| -
|
| - // Signal that no further communication with WebFrameClient should take
|
| - // place at this point since we are no longer associated with the Page.
|
| - m_webFrame->setClient(0);
|
| -
|
| - client->frameDetached(m_webFrame,
|
| - static_cast<WebFrameClient::DetachType>(type));
|
| - // Clear our reference to LocalFrame at the very end, in case the client
|
| - // refers to it.
|
| - m_webFrame->setCoreFrame(nullptr);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchWillSendRequest(ResourceRequest& request) {
|
| - // Give the WebFrameClient a crack at the request.
|
| - if (m_webFrame->client()) {
|
| - WrappedResourceRequest webreq(request);
|
| - m_webFrame->client()->willSendRequest(m_webFrame, webreq);
|
| - }
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidReceiveResponse(
|
| - const ResourceResponse& response) {
|
| - if (m_webFrame->client()) {
|
| - WrappedResourceResponse webresp(response);
|
| - m_webFrame->client()->didReceiveResponse(webresp);
|
| - }
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidFinishDocumentLoad() {
|
| - // TODO(dglazkov): Sadly, workers are WebFrameClients, and they can totally
|
| - // destroy themselves when didFinishDocumentLoad is invoked, and in turn
|
| - // destroy the fake WebLocalFrame that they create, which means that you
|
| - // should not put any code touching `this` after the two lines below.
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didFinishDocumentLoad(m_webFrame);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidLoadResourceFromMemoryCache(
|
| - const ResourceRequest& request,
|
| - const ResourceResponse& response) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didLoadResourceFromMemoryCache(
|
| - WrappedResourceRequest(request), WrappedResourceResponse(response));
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidHandleOnloadEvents() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didHandleOnloadEvents(m_webFrame);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::
|
| - dispatchDidReceiveServerRedirectForProvisionalLoad() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didReceiveServerRedirectForProvisionalLoad(
|
| - m_webFrame);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidNavigateWithinPage(
|
| - HistoryItem* item,
|
| - HistoryCommitType commitType,
|
| - bool contentInitiated) {
|
| - bool shouldCreateHistoryEntry = commitType == StandardCommit;
|
| - // TODO(dglazkov): Does this need to be called for subframes?
|
| - m_webFrame->viewImpl()->didCommitLoad(shouldCreateHistoryEntry, true);
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didNavigateWithinPage(
|
| - m_webFrame, WebHistoryItem(item),
|
| - static_cast<WebHistoryCommitType>(commitType), contentInitiated);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchWillCommitProvisionalLoad() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->willCommitProvisionalLoad(m_webFrame);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidStartProvisionalLoad(
|
| - DocumentLoader* loader) {
|
| - if (m_webFrame->client()) {
|
| - m_webFrame->client()->didStartProvisionalLoad(
|
| - WebDataSourceImpl::fromDocumentLoader(loader));
|
| - }
|
| - if (WebDevToolsAgentImpl* devTools = devToolsAgent())
|
| - devTools->didStartProvisionalLoad(m_webFrame->frame());
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidReceiveTitle(const String& title) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didReceiveTitle(m_webFrame, title,
|
| - WebTextDirectionLeftToRight);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidChangeIcons(IconType type) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didChangeIcon(m_webFrame,
|
| - static_cast<WebIconURL::Type>(type));
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidCommitLoad(
|
| - HistoryItem* item,
|
| - HistoryCommitType commitType) {
|
| - if (!m_webFrame->parent()) {
|
| - m_webFrame->viewImpl()->didCommitLoad(commitType == StandardCommit, false);
|
| - }
|
| -
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didCommitProvisionalLoad(
|
| - m_webFrame, WebHistoryItem(item),
|
| - static_cast<WebHistoryCommitType>(commitType));
|
| - if (WebDevToolsAgentImpl* devTools = devToolsAgent())
|
| - devTools->didCommitLoadForLocalFrame(m_webFrame->frame());
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidFailProvisionalLoad(
|
| - const ResourceError& error,
|
| - HistoryCommitType commitType) {
|
| - m_webFrame->didFail(error, true, commitType);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidFailLoad(const ResourceError& error,
|
| - HistoryCommitType commitType) {
|
| - m_webFrame->didFail(error, false, commitType);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidFinishLoad() {
|
| - m_webFrame->didFinish();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidChangeThemeColor() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didChangeThemeColor();
|
| -}
|
| -
|
| -static bool allowCreatingBackgroundTabs() {
|
| - const WebInputEvent* inputEvent = WebViewImpl::currentInputEvent();
|
| - if (!inputEvent || (inputEvent->type() != WebInputEvent::MouseUp &&
|
| - (inputEvent->type() != WebInputEvent::RawKeyDown &&
|
| - inputEvent->type() != WebInputEvent::KeyDown) &&
|
| - inputEvent->type() != WebInputEvent::GestureTap))
|
| - return false;
|
| -
|
| - unsigned short buttonNumber;
|
| - if (WebInputEvent::isMouseEventType(inputEvent->type())) {
|
| - const WebMouseEvent* mouseEvent =
|
| - static_cast<const WebMouseEvent*>(inputEvent);
|
| -
|
| - switch (mouseEvent->button) {
|
| - case WebMouseEvent::Button::Left:
|
| - buttonNumber = 0;
|
| - break;
|
| - case WebMouseEvent::Button::Middle:
|
| - buttonNumber = 1;
|
| - break;
|
| - case WebMouseEvent::Button::Right:
|
| - buttonNumber = 2;
|
| - break;
|
| - default:
|
| - return false;
|
| - }
|
| - } else {
|
| - // The click is simulated when triggering the keypress event.
|
| - buttonNumber = 0;
|
| - }
|
| - bool ctrl = inputEvent->modifiers() & WebMouseEvent::ControlKey;
|
| - bool shift = inputEvent->modifiers() & WebMouseEvent::ShiftKey;
|
| - bool alt = inputEvent->modifiers() & WebMouseEvent::AltKey;
|
| - bool meta = inputEvent->modifiers() & WebMouseEvent::MetaKey;
|
| -
|
| - NavigationPolicy userPolicy;
|
| - if (!navigationPolicyFromMouseEvent(buttonNumber, ctrl, shift, alt, meta,
|
| - &userPolicy))
|
| - return false;
|
| - return userPolicy == NavigationPolicyNewBackgroundTab;
|
| -}
|
| -
|
| -NavigationPolicy FrameLoaderClientImpl::decidePolicyForNavigation(
|
| - const ResourceRequest& request,
|
| - DocumentLoader* loader,
|
| - NavigationType type,
|
| - NavigationPolicy policy,
|
| - bool replacesCurrentHistoryItem,
|
| - bool isClientRedirect,
|
| - HTMLFormElement* form) {
|
| - if (!m_webFrame->client())
|
| - return NavigationPolicyIgnore;
|
| -
|
| - if (policy == NavigationPolicyNewBackgroundTab &&
|
| - !allowCreatingBackgroundTabs() &&
|
| - !UIEventWithKeyState::newTabModifierSetFromIsolatedWorld())
|
| - policy = NavigationPolicyNewForegroundTab;
|
| -
|
| - WebDataSourceImpl* ds = WebDataSourceImpl::fromDocumentLoader(loader);
|
| -
|
| - // Newly created child frames may need to be navigated to a history item
|
| - // during a back/forward navigation. This will only happen when the parent
|
| - // is a LocalFrame doing a back/forward navigation that has not completed.
|
| - // (If the load has completed and the parent later adds a frame with script,
|
| - // we do not want to use a history item for it.)
|
| - bool isHistoryNavigationInNewChildFrame =
|
| - m_webFrame->parent() && m_webFrame->parent()->isWebLocalFrame() &&
|
| - isBackForwardLoadType(toWebLocalFrameImpl(m_webFrame->parent())
|
| - ->frame()
|
| - ->loader()
|
| - .documentLoader()
|
| - ->loadType()) &&
|
| - !toWebLocalFrameImpl(m_webFrame->parent())
|
| - ->frame()
|
| - ->document()
|
| - ->loadEventFinished();
|
| -
|
| - WrappedResourceRequest wrappedResourceRequest(request);
|
| - WebFrameClient::NavigationPolicyInfo navigationInfo(wrappedResourceRequest);
|
| - navigationInfo.navigationType = static_cast<WebNavigationType>(type);
|
| - navigationInfo.defaultPolicy = static_cast<WebNavigationPolicy>(policy);
|
| - navigationInfo.extraData = ds ? ds->getExtraData() : nullptr;
|
| - navigationInfo.replacesCurrentHistoryItem = replacesCurrentHistoryItem;
|
| - navigationInfo.isHistoryNavigationInNewChildFrame =
|
| - isHistoryNavigationInNewChildFrame;
|
| - navigationInfo.isClientRedirect = isClientRedirect;
|
| - // Caching could be disabled for requests initiated by DevTools.
|
| - // TODO(ananta)
|
| - // We should extract the network cache state into a global component which
|
| - // can be queried here and wherever necessary.
|
| - navigationInfo.isCacheDisabled =
|
| - devToolsAgent() ? devToolsAgent()->cacheDisabled() : false;
|
| - if (form)
|
| - navigationInfo.form = WebFormElement(form);
|
| -
|
| - WebNavigationPolicy webPolicy =
|
| - m_webFrame->client()->decidePolicyForNavigation(navigationInfo);
|
| - return static_cast<NavigationPolicy>(webPolicy);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchWillSendSubmitEvent(HTMLFormElement* form) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->willSendSubmitEvent(WebFormElement(form));
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchWillSubmitForm(HTMLFormElement* form) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->willSubmitForm(WebFormElement(form));
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didStartLoading(LoadStartType loadStartType) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didStartLoading(loadStartType ==
|
| - NavigationToDifferentDocument);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::progressEstimateChanged(double progressEstimate) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didChangeLoadProgress(progressEstimate);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didStopLoading() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didStopLoading();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::loadURLExternally(const ResourceRequest& request,
|
| - NavigationPolicy policy,
|
| - const String& suggestedName,
|
| - bool shouldReplaceCurrentEntry) {
|
| - if (!m_webFrame->client())
|
| - return;
|
| - DCHECK(m_webFrame->frame()->document());
|
| - Fullscreen::fullyExitFullscreen(*m_webFrame->frame()->document());
|
| - m_webFrame->client()->loadURLExternally(
|
| - WrappedResourceRequest(request), static_cast<WebNavigationPolicy>(policy),
|
| - suggestedName, shouldReplaceCurrentEntry);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::loadErrorPage(int reason) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->loadErrorPage(reason);
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::navigateBackForward(int offset) const {
|
| - WebViewImpl* webview = m_webFrame->viewImpl();
|
| - if (!webview->client())
|
| - return false;
|
| -
|
| - DCHECK(offset);
|
| - if (offset > webview->client()->historyForwardListCount())
|
| - return false;
|
| - if (offset < -webview->client()->historyBackListCount())
|
| - return false;
|
| - webview->client()->navigateBackForwardSoon(offset);
|
| - return true;
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didAccessInitialDocument() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didAccessInitialDocument();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didDisplayInsecureContent() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didDisplayInsecureContent();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didRunInsecureContent(SecurityOrigin* origin,
|
| - const KURL& insecureURL) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didRunInsecureContent(WebSecurityOrigin(origin),
|
| - insecureURL);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didDetectXSS(const KURL& insecureURL,
|
| - bool didBlockEntirePage) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didDetectXSS(insecureURL, didBlockEntirePage);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didDispatchPingLoader(const KURL& url) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didDispatchPingLoader(url);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didDisplayContentWithCertificateErrors(
|
| - const KURL& url) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didDisplayContentWithCertificateErrors(url);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didRunContentWithCertificateErrors(
|
| - const KURL& url) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didRunContentWithCertificateErrors(url);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didChangePerformanceTiming() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didChangePerformanceTiming();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didObserveLoadingBehavior(
|
| - WebLoadingBehaviorFlag behavior) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didObserveLoadingBehavior(behavior);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::selectorMatchChanged(
|
| - const Vector<String>& addedSelectors,
|
| - const Vector<String>& removedSelectors) {
|
| - if (WebFrameClient* client = m_webFrame->client())
|
| - client->didMatchCSS(m_webFrame, WebVector<WebString>(addedSelectors),
|
| - WebVector<WebString>(removedSelectors));
|
| -}
|
| -
|
| -DocumentLoader* FrameLoaderClientImpl::createDocumentLoader(
|
| - LocalFrame* frame,
|
| - const ResourceRequest& request,
|
| - const SubstituteData& data,
|
| - ClientRedirectPolicy clientRedirectPolicy) {
|
| - DCHECK(frame);
|
| -
|
| - WebDataSourceImpl* ds =
|
| - WebDataSourceImpl::create(frame, request, data, clientRedirectPolicy);
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didCreateDataSource(m_webFrame, ds);
|
| - return ds;
|
| -}
|
| -
|
| -String FrameLoaderClientImpl::userAgent() {
|
| - WebString override =
|
| - m_webFrame->client() ? m_webFrame->client()->userAgentOverride() : "";
|
| - if (!override.isEmpty())
|
| - return override;
|
| -
|
| - if (m_userAgent.isEmpty())
|
| - m_userAgent = Platform::current()->userAgent();
|
| - return m_userAgent;
|
| -}
|
| -
|
| -String FrameLoaderClientImpl::doNotTrackValue() {
|
| - WebString doNotTrack = m_webFrame->client()->doNotTrackValue();
|
| - if (!doNotTrack.isEmpty())
|
| - return doNotTrack;
|
| - return String();
|
| -}
|
| -
|
| -// Called when the FrameLoader goes into a state in which a new page load
|
| -// will occur.
|
| -void FrameLoaderClientImpl::transitionToCommittedForNewPage() {
|
| - m_webFrame->createFrameView();
|
| -}
|
| -
|
| -LocalFrame* FrameLoaderClientImpl::createFrame(
|
| - const FrameLoadRequest& request,
|
| - const AtomicString& name,
|
| - HTMLFrameOwnerElement* ownerElement) {
|
| - return m_webFrame->createChildFrame(request, name, ownerElement);
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::canCreatePluginWithoutRenderer(
|
| - const String& mimeType) const {
|
| - if (!m_webFrame->client())
|
| - return false;
|
| -
|
| - return m_webFrame->client()->canCreatePluginWithoutRenderer(mimeType);
|
| -}
|
| -
|
| -Widget* FrameLoaderClientImpl::createPlugin(HTMLPlugInElement* element,
|
| - const KURL& url,
|
| - const Vector<String>& paramNames,
|
| - const Vector<String>& paramValues,
|
| - const String& mimeType,
|
| - bool loadManually,
|
| - DetachedPluginPolicy policy) {
|
| - if (!m_webFrame->client())
|
| - return nullptr;
|
| -
|
| - WebPluginParams params;
|
| - params.url = url;
|
| - params.mimeType = mimeType;
|
| - params.attributeNames = paramNames;
|
| - params.attributeValues = paramValues;
|
| - params.loadManually = loadManually;
|
| -
|
| - WebPlugin* webPlugin = m_webFrame->client()->createPlugin(m_webFrame, params);
|
| - if (!webPlugin)
|
| - return nullptr;
|
| -
|
| - // The container takes ownership of the WebPlugin.
|
| - WebPluginContainerImpl* container =
|
| - WebPluginContainerImpl::create(element, webPlugin);
|
| -
|
| - if (!webPlugin->initialize(container))
|
| - return nullptr;
|
| -
|
| - if (policy != AllowDetachedPlugin && !element->layoutObject())
|
| - return nullptr;
|
| -
|
| - return container;
|
| -}
|
| -
|
| -std::unique_ptr<WebMediaPlayer> FrameLoaderClientImpl::createWebMediaPlayer(
|
| - HTMLMediaElement& htmlMediaElement,
|
| - const WebMediaPlayerSource& source,
|
| - WebMediaPlayerClient* client) {
|
| - WebLocalFrameImpl* webFrame =
|
| - WebLocalFrameImpl::fromFrame(htmlMediaElement.document().frame());
|
| -
|
| - if (!webFrame || !webFrame->client())
|
| - return nullptr;
|
| -
|
| - HTMLMediaElementEncryptedMedia& encryptedMedia =
|
| - HTMLMediaElementEncryptedMedia::from(htmlMediaElement);
|
| - WebString sinkId(HTMLMediaElementAudioOutputDevice::sinkId(htmlMediaElement));
|
| - return WTF::wrapUnique(webFrame->client()->createMediaPlayer(
|
| - source, client, &encryptedMedia, encryptedMedia.contentDecryptionModule(),
|
| - sinkId));
|
| -}
|
| -
|
| -WebRemotePlaybackClient* FrameLoaderClientImpl::createWebRemotePlaybackClient(
|
| - HTMLMediaElement& htmlMediaElement) {
|
| - return HTMLMediaElementRemotePlayback::remote(htmlMediaElement);
|
| -}
|
| -
|
| -ObjectContentType FrameLoaderClientImpl::getObjectContentType(
|
| - const KURL& url,
|
| - const String& explicitMimeType,
|
| - bool shouldPreferPlugInsForImages) {
|
| - // This code is based on Apple's implementation from
|
| - // WebCoreSupport/WebFrameBridge.mm.
|
| -
|
| - String mimeType = explicitMimeType;
|
| - if (mimeType.isEmpty()) {
|
| - // Try to guess the MIME type based off the extension.
|
| - String filename = url.lastPathComponent();
|
| - int extensionPos = filename.reverseFind('.');
|
| - if (extensionPos >= 0) {
|
| - String extension = filename.substring(extensionPos + 1);
|
| - mimeType = MIMETypeRegistry::getWellKnownMIMETypeForExtension(extension);
|
| - }
|
| -
|
| - if (mimeType.isEmpty())
|
| - return ObjectContentFrame;
|
| - }
|
| -
|
| - // If Chrome is started with the --disable-plugins switch, pluginData is 0.
|
| - PluginData* pluginData = m_webFrame->frame()->pluginData();
|
| - bool plugInSupportsMIMEType =
|
| - pluginData && pluginData->supportsMimeType(mimeType);
|
| -
|
| - if (MIMETypeRegistry::isSupportedImageMIMEType(mimeType))
|
| - return shouldPreferPlugInsForImages && plugInSupportsMIMEType
|
| - ? ObjectContentNetscapePlugin
|
| - : ObjectContentImage;
|
| -
|
| - if (plugInSupportsMIMEType)
|
| - return ObjectContentNetscapePlugin;
|
| -
|
| - if (MIMETypeRegistry::isSupportedNonImageMIMEType(mimeType))
|
| - return ObjectContentFrame;
|
| -
|
| - return ObjectContentNone;
|
| -}
|
| -
|
| -WebCookieJar* FrameLoaderClientImpl::cookieJar() const {
|
| - if (!m_webFrame->client())
|
| - return 0;
|
| - return m_webFrame->client()->cookieJar();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::frameFocused() const {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->frameFocused();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didChangeName(const String& name,
|
| - const String& uniqueName) {
|
| - if (!m_webFrame->client())
|
| - return;
|
| - m_webFrame->client()->didChangeName(name, uniqueName);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didEnforceInsecureRequestPolicy(
|
| - WebInsecureRequestPolicy policy) {
|
| - if (!m_webFrame->client())
|
| - return;
|
| - m_webFrame->client()->didEnforceInsecureRequestPolicy(policy);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didUpdateToUniqueOrigin() {
|
| - if (!m_webFrame->client())
|
| - return;
|
| - DCHECK(m_webFrame->getSecurityOrigin().isUnique());
|
| - m_webFrame->client()->didUpdateToUniqueOrigin(
|
| - m_webFrame->getSecurityOrigin().isPotentiallyTrustworthy());
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didChangeSandboxFlags(Frame* childFrame,
|
| - SandboxFlags flags) {
|
| - if (!m_webFrame->client())
|
| - return;
|
| - m_webFrame->client()->didChangeSandboxFlags(
|
| - WebFrame::fromFrame(childFrame), static_cast<WebSandboxFlags>(flags));
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didSetFeaturePolicyHeader(
|
| - const WebParsedFeaturePolicyHeader& parsedHeader) {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didSetFeaturePolicyHeader(parsedHeader);
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didAddContentSecurityPolicy(
|
| - const String& headerValue,
|
| - ContentSecurityPolicyHeaderType type,
|
| - ContentSecurityPolicyHeaderSource source,
|
| - const std::vector<WebContentSecurityPolicyPolicy>& policies) {
|
| - if (m_webFrame->client()) {
|
| - m_webFrame->client()->didAddContentSecurityPolicy(
|
| - headerValue, static_cast<WebContentSecurityPolicyType>(type),
|
| - static_cast<WebContentSecurityPolicySource>(source), policies);
|
| - }
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::didChangeFrameOwnerProperties(
|
| - HTMLFrameElementBase* frameElement) {
|
| - if (!m_webFrame->client())
|
| - return;
|
| -
|
| - m_webFrame->client()->didChangeFrameOwnerProperties(
|
| - WebFrame::fromFrame(frameElement->contentFrame()),
|
| - WebFrameOwnerProperties(
|
| - frameElement->browsingContextContainerName(),
|
| - frameElement->scrollingMode(), frameElement->marginWidth(),
|
| - frameElement->marginHeight(), frameElement->allowFullscreen(),
|
| - frameElement->allowPaymentRequest(), frameElement->csp(),
|
| - frameElement->delegatedPermissions(),
|
| - frameElement->allowedFeatures()));
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchWillStartUsingPeerConnectionHandler(
|
| - WebRTCPeerConnectionHandler* handler) {
|
| - m_webFrame->client()->willStartUsingPeerConnectionHandler(handler);
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::allowWebGL(bool enabledPerSettings) {
|
| - if (m_webFrame->client())
|
| - return m_webFrame->client()->allowWebGL(enabledPerSettings);
|
| -
|
| - return enabledPerSettings;
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchWillInsertBody() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->willInsertBody(m_webFrame);
|
| -}
|
| -
|
| -std::unique_ptr<WebServiceWorkerProvider>
|
| -FrameLoaderClientImpl::createServiceWorkerProvider() {
|
| - if (!m_webFrame->client())
|
| - return nullptr;
|
| - return WTF::wrapUnique(m_webFrame->client()->createServiceWorkerProvider());
|
| -}
|
| -
|
| -bool FrameLoaderClientImpl::isControlledByServiceWorker(
|
| - DocumentLoader& loader) {
|
| - return m_webFrame->client() &&
|
| - m_webFrame->client()->isControlledByServiceWorker(
|
| - *WebDataSourceImpl::fromDocumentLoader(&loader));
|
| -}
|
| -
|
| -int64_t FrameLoaderClientImpl::serviceWorkerID(DocumentLoader& loader) {
|
| - if (!m_webFrame->client())
|
| - return -1;
|
| - return m_webFrame->client()->serviceWorkerID(
|
| - *WebDataSourceImpl::fromDocumentLoader(&loader));
|
| -}
|
| -
|
| -SharedWorkerRepositoryClient*
|
| -FrameLoaderClientImpl::sharedWorkerRepositoryClient() {
|
| - return m_webFrame->sharedWorkerRepositoryClient();
|
| -}
|
| -
|
| -std::unique_ptr<WebApplicationCacheHost>
|
| -FrameLoaderClientImpl::createApplicationCacheHost(
|
| - WebApplicationCacheHostClient* client) {
|
| - if (!m_webFrame->client())
|
| - return nullptr;
|
| - return WTF::wrapUnique(
|
| - m_webFrame->client()->createApplicationCacheHost(client));
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::dispatchDidChangeManifest() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->didChangeManifest();
|
| -}
|
| -
|
| -unsigned FrameLoaderClientImpl::backForwardLength() {
|
| - WebViewImpl* webview = m_webFrame->viewImpl();
|
| - if (!webview || !webview->client())
|
| - return 0;
|
| - return webview->client()->historyBackListCount() + 1 +
|
| - webview->client()->historyForwardListCount();
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::suddenTerminationDisablerChanged(
|
| - bool present,
|
| - SuddenTerminationDisablerType type) {
|
| - if (m_webFrame->client()) {
|
| - m_webFrame->client()->suddenTerminationDisablerChanged(
|
| - present,
|
| - static_cast<WebFrameClient::SuddenTerminationDisablerType>(type));
|
| - }
|
| -}
|
| -
|
| -BlameContext* FrameLoaderClientImpl::frameBlameContext() {
|
| - if (!m_webFrame->client())
|
| - return nullptr;
|
| - return m_webFrame->client()->frameBlameContext();
|
| -}
|
| -
|
| -LinkResource* FrameLoaderClientImpl::createServiceWorkerLinkResource(
|
| - HTMLLinkElement* owner) {
|
| - return ServiceWorkerLinkResource::create(owner);
|
| -}
|
| -
|
| -WebEffectiveConnectionType FrameLoaderClientImpl::getEffectiveConnectionType() {
|
| - if (m_webFrame->client())
|
| - return m_webFrame->client()->getEffectiveConnectionType();
|
| - return WebEffectiveConnectionType::TypeUnknown;
|
| -}
|
| -
|
| -WebDevToolsAgentImpl* FrameLoaderClientImpl::devToolsAgent() {
|
| - return WebLocalFrameImpl::fromFrame(m_webFrame->frame()->localFrameRoot())
|
| - ->devToolsAgentImpl();
|
| -}
|
| -
|
| -KURL FrameLoaderClientImpl::overrideFlashEmbedWithHTML(const KURL& url) {
|
| - return m_webFrame->client()->overrideFlashEmbedWithHTML(WebURL(url));
|
| -}
|
| -
|
| -void FrameLoaderClientImpl::setHasReceivedUserGesture() {
|
| - if (m_webFrame->client())
|
| - m_webFrame->client()->setHasReceivedUserGesture();
|
| -}
|
| -
|
| -} // namespace blink
|
|
|