| Index: third_party/WebKit/Source/core/dom/Document.cpp
|
| diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
|
| index c44b227186644837c5a4a628e8e496940d1075d4..c745a0990a6316e9588ce577966767d36d5b4509 100644
|
| --- a/third_party/WebKit/Source/core/dom/Document.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/Document.cpp
|
| @@ -234,6 +234,7 @@
|
| #include "platform/ScriptForbiddenScope.h"
|
| #include "platform/network/ContentSecurityPolicyParsers.h"
|
| #include "platform/network/HTTPParsers.h"
|
| +#include "platform/scroll/Scrollbar.h"
|
| #include "platform/scroll/ScrollbarTheme.h"
|
| #include "platform/text/PlatformLocale.h"
|
| #include "platform/text/SegmentedString.h"
|
| @@ -6019,13 +6020,17 @@ static LayoutObject* nearestCommonHoverAncestor(LayoutObject* obj1,
|
|
|
| void Document::updateHoverActiveState(const HitTestRequest& request,
|
| Element* innerElement,
|
| - bool hitScrollbar) {
|
| + Scrollbar* hitScrollbar) {
|
| DCHECK(!request.readOnly());
|
|
|
| - if (request.active() && m_frame && !hitScrollbar)
|
| + // Only cancel hover state when hitting native scrollbar because custom
|
| + // scrollbar's style depends on the owner element's hover state.
|
| + bool hitNativeScrollbar = hitScrollbar && !hitScrollbar->isCustomScrollbar();
|
| +
|
| + if (request.active() && m_frame && !hitNativeScrollbar)
|
| m_frame->eventHandler().notifyElementActivated();
|
|
|
| - Element* innerElementInDocument = hitScrollbar ? nullptr : innerElement;
|
| + Element* innerElementInDocument = hitNativeScrollbar ? nullptr : innerElement;
|
| while (innerElementInDocument && innerElementInDocument->document() != this) {
|
| innerElementInDocument->document().updateHoverActiveState(
|
| request, innerElementInDocument, hitScrollbar);
|
| @@ -6034,7 +6039,7 @@ void Document::updateHoverActiveState(const HitTestRequest& request,
|
|
|
| updateDistribution();
|
| Element* oldActiveElement = activeHoverElement();
|
| - if (oldActiveElement && (!request.active() || hitScrollbar)) {
|
| + if (oldActiveElement && (!request.active() || hitNativeScrollbar)) {
|
| // The oldActiveElement layoutObject is null, dropped on :active by setting
|
| // display: none, for instance. We still need to clear the ActiveChain as
|
| // the mouse is released.
|
|
|