| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2009, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2009, 2011 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * Copyright (C) 2012, Samsung Electronics. All rights reserved. | 4 * Copyright (C) 2012, Samsung Electronics. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include "core/page/FrameTree.h" | 31 #include "core/page/FrameTree.h" |
| 32 #include "core/page/ScopedPageSuspender.h" | 32 #include "core/page/ScopedPageSuspender.h" |
| 33 #include "core/page/WindowFeatures.h" | 33 #include "core/page/WindowFeatures.h" |
| 34 #include "platform/geometry/IntRect.h" | 34 #include "platform/geometry/IntRect.h" |
| 35 #include "platform/network/NetworkHints.h" | 35 #include "platform/network/NetworkHints.h" |
| 36 #include "public/platform/WebScreenInfo.h" | 36 #include "public/platform/WebScreenInfo.h" |
| 37 #include <algorithm> | 37 #include <algorithm> |
| 38 | 38 |
| 39 namespace blink { | 39 namespace blink { |
| 40 | 40 |
| 41 DEFINE_TRACE(ChromeClient) { |
| 42 visitor->trace(m_lastMouseOverNode); |
| 43 HostWindow::trace(visitor); |
| 44 } |
| 45 |
| 41 void ChromeClient::setWindowRectWithAdjustment(const IntRect& pendingRect, | 46 void ChromeClient::setWindowRectWithAdjustment(const IntRect& pendingRect, |
| 42 LocalFrame& frame) { | 47 LocalFrame& frame) { |
| 43 IntRect screen = screenInfo().availableRect; | 48 IntRect screen = screenInfo().availableRect; |
| 44 IntRect window = pendingRect; | 49 IntRect window = pendingRect; |
| 45 | 50 |
| 46 IntSize minimumSize = minimumWindowSize(); | 51 IntSize minimumSize = minimumWindowSize(); |
| 47 // Let size 0 pass through, since that indicates default size, not minimum | 52 // Let size 0 pass through, since that indicates default size, not minimum |
| 48 // size. | 53 // size. |
| 49 if (window.width()) | 54 if (window.width()) |
| 50 window.setWidth(std::min(std::max(minimumSize.width(), window.width()), | 55 window.setWidth(std::min(std::max(minimumSize.width(), window.width()), |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 // ChromeClient::setToolTip. We'll work on tooltip text | 188 // ChromeClient::setToolTip. We'll work on tooltip text |
| 184 // direction during bidi cleanup in form inputs. | 189 // direction during bidi cleanup in form inputs. |
| 185 toolTipDirection = TextDirection::Ltr; | 190 toolTipDirection = TextDirection::Ltr; |
| 186 } | 191 } |
| 187 } | 192 } |
| 188 } | 193 } |
| 189 | 194 |
| 190 if (m_lastToolTipPoint == result.hitTestLocation().point() && | 195 if (m_lastToolTipPoint == result.hitTestLocation().point() && |
| 191 m_lastToolTipText == toolTip) | 196 m_lastToolTipText == toolTip) |
| 192 return; | 197 return; |
| 198 |
| 199 // If a tooltip was displayed earlier, and mouse cursor moves over |
| 200 // a different node with the same tooltip text, make sure the previous |
| 201 // tooltip is unset, so that it does not get stuck positioned relative |
| 202 // to the previous node). |
| 203 // The ::setToolTip overload, which is be called down the road, |
| 204 // ensures a new tooltip to be displayed with the new context. |
| 205 if (result.innerNodeOrImageMapImage() != m_lastMouseOverNode && |
| 206 !m_lastToolTipText.isEmpty() && toolTip == m_lastToolTipText) |
| 207 clearToolTip(frame); |
| 208 |
| 193 m_lastToolTipPoint = result.hitTestLocation().point(); | 209 m_lastToolTipPoint = result.hitTestLocation().point(); |
| 194 m_lastToolTipText = toolTip; | 210 m_lastToolTipText = toolTip; |
| 211 m_lastMouseOverNode = result.innerNodeOrImageMapImage(); |
| 195 setToolTip(frame, toolTip, toolTipDirection); | 212 setToolTip(frame, toolTip, toolTipDirection); |
| 196 } | 213 } |
| 197 | 214 |
| 198 void ChromeClient::clearToolTip(LocalFrame& frame) { | 215 void ChromeClient::clearToolTip(LocalFrame& frame) { |
| 199 // Do not check m_lastToolTip* and do not update them intentionally. | 216 // Do not check m_lastToolTip* and do not update them intentionally. |
| 200 // We don't want to show tooltips with same content after clearToolTip(). | 217 // We don't want to show tooltips with same content after clearToolTip(). |
| 201 setToolTip(frame, String(), TextDirection::Ltr); | 218 setToolTip(frame, String(), TextDirection::Ltr); |
| 202 } | 219 } |
| 203 | 220 |
| 204 bool ChromeClient::print(LocalFrame* frame) { | 221 bool ChromeClient::print(LocalFrame* frame) { |
| 205 if (frame->document()->isSandboxed(SandboxModals)) { | 222 if (frame->document()->isSandboxed(SandboxModals)) { |
| 206 UseCounter::count(frame, UseCounter::DialogInSandboxedContext); | 223 UseCounter::count(frame, UseCounter::DialogInSandboxedContext); |
| 207 frame->console().addMessage(ConsoleMessage::create( | 224 frame->console().addMessage(ConsoleMessage::create( |
| 208 SecurityMessageSource, ErrorMessageLevel, | 225 SecurityMessageSource, ErrorMessageLevel, |
| 209 "Ignored call to 'print()'. The document is sandboxed, and the " | 226 "Ignored call to 'print()'. The document is sandboxed, and the " |
| 210 "'allow-modals' keyword is not set.")); | 227 "'allow-modals' keyword is not set.")); |
| 211 return false; | 228 return false; |
| 212 } | 229 } |
| 213 | 230 |
| 214 // Suspend pages in case the client method runs a new event loop that would | 231 // Suspend pages in case the client method runs a new event loop that would |
| 215 // otherwise cause the load to continue while we're in the middle of | 232 // otherwise cause the load to continue while we're in the middle of |
| 216 // executing JavaScript. | 233 // executing JavaScript. |
| 217 ScopedPageSuspender suspender; | 234 ScopedPageSuspender suspender; |
| 218 | 235 |
| 219 printDelegate(frame); | 236 printDelegate(frame); |
| 220 return true; | 237 return true; |
| 221 } | 238 } |
| 222 | 239 |
| 223 } // namespace blink | 240 } // namespace blink |
| OLD | NEW |