diff --git a/engine/core/core.gni b/engine/core/core.gni index a5debf6ab4d..8b0ad62c666 100644 --- a/engine/core/core.gni +++ b/engine/core/core.gni @@ -1047,10 +1047,6 @@ sky_core_files = [ "page/PageVisibilityState.cpp", "page/PageVisibilityState.h", "page/SpellCheckerClient.h", - "page/TouchDisambiguation.cpp", - "page/TouchDisambiguation.h", - "page/WindowFocusAllowedIndicator.cpp", - "page/WindowFocusAllowedIndicator.h", "rendering/BidiRun.h", "rendering/BidiRunForLine.cpp", "rendering/BidiRunForLine.h", diff --git a/engine/core/frame/LocalDOMWindow.cpp b/engine/core/frame/LocalDOMWindow.cpp index 28f7afdd699..d765b0e7541 100644 --- a/engine/core/frame/LocalDOMWindow.cpp +++ b/engine/core/frame/LocalDOMWindow.cpp @@ -73,7 +73,6 @@ #include "sky/engine/core/page/ChromeClient.h" #include "sky/engine/core/page/EventHandler.h" #include "sky/engine/core/page/Page.h" -#include "sky/engine/core/page/WindowFocusAllowedIndicator.h" #include "sky/engine/core/rendering/style/RenderStyle.h" #include "sky/engine/platform/EventDispatchForbiddenScope.h" #include "sky/engine/platform/PlatformScreen.h" @@ -474,11 +473,7 @@ void LocalDOMWindow::focus(ExecutionContext* context) if (!host) return; - bool allowFocus = WindowFocusAllowedIndicator::windowFocusAllowed(); - - // If we're a top level window, bring the window to the front. - if (allowFocus) - host->chrome().focus(); + host->chrome().focus(); if (!m_frame) return; diff --git a/engine/core/page/TouchDisambiguation.cpp b/engine/core/page/TouchDisambiguation.cpp deleted file mode 100644 index 6e8157f3cb7..00000000000 --- a/engine/core/page/TouchDisambiguation.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (C) 2012 Google 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 "sky/engine/config.h" - -#include "sky/engine/core/page/TouchDisambiguation.h" - -#include -#include -#include "sky/engine/core/dom/Document.h" -#include "sky/engine/core/dom/Element.h" -#include "sky/engine/core/dom/NodeTraversal.h" -#include "sky/engine/core/frame/FrameView.h" -#include "sky/engine/core/frame/LocalFrame.h" -#include "sky/engine/core/page/EventHandler.h" -#include "sky/engine/core/rendering/HitTestResult.h" -#include "sky/engine/core/rendering/RenderBlock.h" - -namespace blink { - -static IntRect boundingBoxForEventNodes(Node* eventNode) -{ - if (!eventNode->document().view()) - return IntRect(); - - IntRect result; - Node* node = eventNode; - while (node) { - // Skip the whole sub-tree if the node doesn't propagate events. - if (node != eventNode && node->willRespondToMouseClickEvents()) { - node = NodeTraversal::nextSkippingChildren(*node, eventNode); - continue; - } - result.unite(node->pixelSnappedBoundingBox()); - node = NodeTraversal::next(*node, eventNode); - } - return eventNode->document().view()->contentsToWindow(result); -} - -static float scoreTouchTarget(IntPoint touchPoint, int padding, IntRect boundingBox) -{ - if (boundingBox.isEmpty()) - return 0; - - float reciprocalPadding = 1.f / padding; - float score = 1; - - IntSize distance = boundingBox.differenceToPoint(touchPoint); - score *= std::max((padding - abs(distance.width())) * reciprocalPadding, 0.f); - score *= std::max((padding - abs(distance.height())) * reciprocalPadding, 0.f); - - return score; -} - -struct TouchTargetData { - IntRect windowBoundingBox; - float score; -}; - -void findGoodTouchTargets(const IntRect& touchBox, LocalFrame* mainFrame, Vector& goodTargets, Vector >& highlightNodes) -{ - goodTargets.clear(); - - int touchPointPadding = ceil(std::max(touchBox.width(), touchBox.height()) * 0.5); - - IntPoint touchPoint = touchBox.center(); - IntPoint contentsPoint = mainFrame->view()->windowToContents(touchPoint); - - HitTestResult result = mainFrame->eventHandler().hitTestResultAtPoint(contentsPoint, HitTestRequest::ReadOnly | HitTestRequest::Active, IntSize(touchPointPadding, touchPointPadding)); - const ListHashSet >& hitResults = result.rectBasedTestResult(); - - // Blacklist nodes that are container of disambiguated nodes. - // It is not uncommon to have a clickable
that contains other clickable objects. - // This heuristic avoids excessive disambiguation in that case. - HashSet > blackList; - for (ListHashSet >::const_iterator it = hitResults.begin(); it != hitResults.end(); ++it) { - // Ignore any Nodes that can't be clicked on. - RenderObject* renderer = it->get()->renderer(); - if (!renderer || !it->get()->willRespondToMouseClickEvents()) - continue; - - // Blacklist all of the Node's containers. - for (RenderBlock* container = renderer->containingBlock(); container; container = container->containingBlock()) { - Node* containerNode = container->node(); - if (!containerNode) - continue; - if (!blackList.add(containerNode).isNewEntry) - break; - } - } - - HashMap, TouchTargetData> touchTargets; - float bestScore = 0; - for (ListHashSet >::const_iterator it = hitResults.begin(); it != hitResults.end(); ++it) { - for (Node* node = it->get(); node; node = node->parentNode()) { - if (blackList.contains(node)) - continue; - if (node->isDocumentNode()) - break; - if (node->willRespondToMouseClickEvents()) { - TouchTargetData& targetData = touchTargets.add(node, TouchTargetData()).storedValue->value; - targetData.windowBoundingBox = boundingBoxForEventNodes(node); - targetData.score = scoreTouchTarget(touchPoint, touchPointPadding, targetData.windowBoundingBox); - bestScore = std::max(bestScore, targetData.score); - break; - } - } - } - - for (HashMap, TouchTargetData>::iterator it = touchTargets.begin(); it != touchTargets.end(); ++it) { - // Currently the scoring function uses the overlap area with the fat point as the score. - // We ignore the candidates that has less than 1/2 overlap (we consider not really ambiguous enough) than the best candidate to avoid excessive popups. - if (it->value.score < bestScore * 0.5) - continue; - goodTargets.append(it->value.windowBoundingBox); - highlightNodes.append(it->key); - } -} - -} // namespace blink diff --git a/engine/core/page/TouchDisambiguation.h b/engine/core/page/TouchDisambiguation.h deleted file mode 100644 index 0058913092b..00000000000 --- a/engine/core/page/TouchDisambiguation.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2012 Google 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. - */ - -#ifndef SKY_ENGINE_CORE_PAGE_TOUCHDISAMBIGUATION_H_ -#define SKY_ENGINE_CORE_PAGE_TOUCHDISAMBIGUATION_H_ - -#include "sky/engine/platform/heap/Handle.h" -#include "sky/engine/wtf/Vector.h" - -namespace blink { - -class LocalFrame; -class IntRect; -class Node; - -void findGoodTouchTargets(const IntRect& touchBox, LocalFrame* mainFrame, Vector& goodTargets, Vector >& highlightNodes); - -} // namespace blink - -#endif // SKY_ENGINE_CORE_PAGE_TOUCHDISAMBIGUATION_H_ diff --git a/engine/core/page/WindowFocusAllowedIndicator.cpp b/engine/core/page/WindowFocusAllowedIndicator.cpp deleted file mode 100644 index a8d44d52c75..00000000000 --- a/engine/core/page/WindowFocusAllowedIndicator.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2012 Google, 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: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``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 APPLE COMPUTER, INC. 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 "sky/engine/config.h" -#include "sky/engine/core/page/WindowFocusAllowedIndicator.h" - -namespace blink { - -static bool s_windowFocusAllowed = false; - -bool WindowFocusAllowedIndicator::windowFocusAllowed() -{ - return s_windowFocusAllowed; -} - -WindowFocusAllowedIndicator::WindowFocusAllowedIndicator() - : m_previousWindowFocusAllowed(s_windowFocusAllowed) -{ - s_windowFocusAllowed = true; -} - -WindowFocusAllowedIndicator::~WindowFocusAllowedIndicator() -{ - s_windowFocusAllowed = m_previousWindowFocusAllowed; -} - -} // namespace blink diff --git a/engine/core/page/WindowFocusAllowedIndicator.h b/engine/core/page/WindowFocusAllowedIndicator.h deleted file mode 100644 index 6281ccc81e7..00000000000 --- a/engine/core/page/WindowFocusAllowedIndicator.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2012 Google, 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: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``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 APPLE COMPUTER, INC. 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. - */ - -#ifndef SKY_ENGINE_CORE_PAGE_WINDOWFOCUSALLOWEDINDICATOR_H_ -#define SKY_ENGINE_CORE_PAGE_WINDOWFOCUSALLOWEDINDICATOR_H_ - -#include "sky/engine/wtf/Noncopyable.h" - -namespace blink { - -class WindowFocusAllowedIndicator { - WTF_MAKE_NONCOPYABLE(WindowFocusAllowedIndicator); -public: - WindowFocusAllowedIndicator(); - ~WindowFocusAllowedIndicator(); - - static bool windowFocusAllowed(); - -private: - bool m_previousWindowFocusAllowed; -}; - -} // namespace blink - -#endif // SKY_ENGINE_CORE_PAGE_WINDOWFOCUSALLOWEDINDICATOR_H_ diff --git a/engine/web/WebViewImpl.cpp b/engine/web/WebViewImpl.cpp index 8a94cbb6095..eb559918007 100644 --- a/engine/web/WebViewImpl.cpp +++ b/engine/web/WebViewImpl.cpp @@ -59,7 +59,6 @@ #include "sky/engine/core/page/EventWithHitTestResults.h" #include "sky/engine/core/page/FocusController.h" #include "sky/engine/core/page/Page.h" -#include "sky/engine/core/page/TouchDisambiguation.h" #include "sky/engine/core/rendering/RenderView.h" #include "sky/engine/platform/Cursor.h" #include "sky/engine/platform/KeyboardCodes.h"