diff options
Diffstat (limited to 'WebKit')
-rw-r--r-- | WebKit/android/RenderSkinCombo.cpp | 8 | ||||
-rw-r--r-- | WebKit/android/RenderSkinRadio.cpp | 17 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp | 16 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h | 7 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/InspectorClientAndroid.h | 1 | ||||
-rw-r--r-- | WebKit/android/jni/JavaBridge.cpp | 7 | ||||
-rw-r--r-- | WebKit/android/jni/WebHistory.cpp | 1 | ||||
-rw-r--r-- | WebKit/android/jni/WebSettings.cpp | 4 | ||||
-rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 8 | ||||
-rw-r--r-- | WebKit/android/nav/CacheBuilder.cpp | 147 | ||||
-rw-r--r-- | WebKit/android/nav/CacheBuilder.h | 4 |
11 files changed, 131 insertions, 89 deletions
diff --git a/WebKit/android/RenderSkinCombo.cpp b/WebKit/android/RenderSkinCombo.cpp index 902f2c0..a336257 100644 --- a/WebKit/android/RenderSkinCombo.cpp +++ b/WebKit/android/RenderSkinCombo.cpp @@ -27,6 +27,7 @@ #include "RenderSkinCombo.h" #include "Document.h" +#include "FormControlElement.h" #include "Node.h" #include "SkCanvas.h" #include "SkNinePatch.h" @@ -58,7 +59,12 @@ bool RenderSkinCombo::Draw(SkCanvas* canvas, Node* element, int x, int y, int wi { if (!s_decoded) return true; - State state = element && element->isEnabled() ? kNormal : kDisabled; + bool enabled = false; + if (FormControlElement* controlElement = toFormControlElement(static_cast<Element*>(element))) { + enabled = controlElement->isEnabled(); + } + + State state = enabled ? kNormal : kDisabled; if (height < (s_margin<<1) + 1) { height = (s_margin<<1) + 1; } diff --git a/WebKit/android/RenderSkinRadio.cpp b/WebKit/android/RenderSkinRadio.cpp index 2fca175..7b55567 100644 --- a/WebKit/android/RenderSkinRadio.cpp +++ b/WebKit/android/RenderSkinRadio.cpp @@ -28,6 +28,8 @@ #include "android_graphics.h" #include "Document.h" +#include "FormControlElement.h" +#include "InputElement.h" #include "IntRect.h" #include "Node.h" #include "RenderSkinAndroid.h" @@ -64,7 +66,13 @@ void RenderSkinRadio::Draw(SkCanvas* canvas, Node* element, const IntRect& ir, android_setrect(&r, ir); int saveLayerCount = 0; int saveScaleCount = 0; - if (!element->isEnabled()) { + + bool enabled = false; + if (FormControlElement* control = toFormControlElement(static_cast<Element*>(element))) { + enabled = control->isEnabled(); + } + + if (!enabled) { saveLayerCount = canvas->saveLayerAlpha(&r, 0x80); } SkScalar width = r.width(); @@ -72,7 +80,12 @@ void RenderSkinRadio::Draw(SkCanvas* canvas, Node* element, const IntRect& ir, SkScalar scale = SkScalarDiv(width, SIZE); saveScaleCount = canvas->scale(scale, scale); } - canvas->drawBitmap(s_bitmap[element->isChecked() + 2*(!isCheckBox)], + bool checked = false; + if (InputElement* inputElement = toInputElement(static_cast<Element*>(element))) { + checked = inputElement->isChecked(); + } + + canvas->drawBitmap(s_bitmap[checked + 2*(!isCheckBox)], r.fLeft, r.fTop, NULL); if (saveLayerCount != 0) { canvas->restoreToCount(saveLayerCount); diff --git a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp index a99fedd..3e821cc 100644 --- a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp +++ b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.cpp @@ -37,6 +37,7 @@ // HTMLFormElement needed for a bad include #include "HTMLFormElement.h" #include "HTMLFrameOwnerElement.h" +#include "HTMLPlugInElement.h" #include "IconDatabase.h" #include "MIMETypeRegistry.h" #include "NotImplemented.h" @@ -110,7 +111,7 @@ void FrameLoaderClientAndroid::makeRepresentation(DocumentLoader*) { void FrameLoaderClientAndroid::forceLayout() { ASSERT(m_frame); - m_frame->forceLayout(); + m_frame->view()->forceLayout(); // FIXME, should we adjust view size here? m_frame->view()->adjustViewSize(); } @@ -572,7 +573,7 @@ void FrameLoaderClientAndroid::updateGlobalHistory() { m_webFrame->updateVisitedHistory(m_frame->loader()->documentLoader()->urlForHistory(), false); } -void FrameLoaderClientAndroid::updateGlobalHistoryForRedirectWithoutHistoryItem() { +void FrameLoaderClientAndroid::updateGlobalHistoryRedirectLinks() { // Note, do we need to do anything where there is no HistoryItem? If we call // updateGlobalHistory(), we will add bunch of "data:xxx" urls for gmail.com // which is not what we want. Opt to do nothing now. @@ -676,7 +677,6 @@ String FrameLoaderClientAndroid::generatedMIMETypeForURLScheme(const String& URL void FrameLoaderClientAndroid::frameLoadCompleted() { // copied from Apple port, without this back with sub-frame will trigger ASSERT ASSERT(m_frame); - m_frame->loader()->setPreviousHistoryItem(0); } void FrameLoaderClientAndroid::saveViewStateToItem(HistoryItem* item) { @@ -889,7 +889,7 @@ static bool isYouTubeUrl(const KURL& url, const String& mimeType) Widget* FrameLoaderClientAndroid::createPlugin( const IntSize& size, - Element* element, + HTMLPlugInElement* element, const KURL& url, const WTF::Vector<String, 0u>& names, const WTF::Vector<String, 0u>& values, @@ -897,8 +897,7 @@ Widget* FrameLoaderClientAndroid::createPlugin( bool loadManually) { // Create an iframe for youtube urls. if (isYouTubeUrl(url, mimeType)) { - RefPtr<Frame> frame = createFrame(blankURL(), String(), - static_cast<HTMLFrameOwnerElement*>(element), + RefPtr<Frame> frame = createFrame(blankURL(), String(), element, String(), false, 0, 0); if (frame) { // grab everything after /v/ @@ -944,7 +943,7 @@ void FrameLoaderClientAndroid::redirectDataToPlugin(Widget* pluginWidget) { notImplemented(); } -Widget* FrameLoaderClientAndroid::createJavaAppletWidget(const IntSize&, Element*, +Widget* FrameLoaderClientAndroid::createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL& baseURL, const WTF::Vector<String>& paramNames, const WTF::Vector<String>& paramValues) { // don't support widget yet @@ -1004,6 +1003,9 @@ void FrameLoaderClientAndroid::windowObjectCleared() { m_webFrame->windowObjectCleared(m_frame); } +void FrameLoaderClientAndroid::documentElementAvailable() { +} + // functions new to Jun-07 tip of tree merge: ResourceError FrameLoaderClientAndroid::blockedError(ResourceRequest const& request) { return ResourceError(String(), InternalErrorFileDoesNotExist, String(), String()); diff --git a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h index 9d71c9d..143537f 100644 --- a/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h +++ b/WebKit/android/WebCoreSupport/FrameLoaderClientAndroid.h @@ -122,7 +122,7 @@ namespace android { virtual void finishedLoading(DocumentLoader*); virtual void updateGlobalHistory(); - virtual void updateGlobalHistoryForRedirectWithoutHistoryItem(); + virtual void updateGlobalHistoryRedirectLinks(); virtual bool shouldGoToHistoryItem(HistoryItem*) const; #ifdef ANDROID_HISTORY_CLIENT @@ -168,17 +168,18 @@ namespace android { virtual WTF::PassRefPtr<Frame> createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement, const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight); - virtual Widget* createPlugin(const IntSize&, Element*, const KURL&, + virtual Widget* createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const WTF::Vector<WebCore::String, 0u>&, const WTF::Vector<String, 0u>&, const String&, bool); virtual void redirectDataToPlugin(Widget* pluginWidget); - virtual Widget* createJavaAppletWidget(const IntSize&, Element*, const KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues); + virtual Widget* createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues); virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType); virtual String overrideMediaType() const; virtual void windowObjectCleared(); + virtual void documentElementAvailable(); virtual void didPerformFirstNavigation() const; virtual void registerForIconNotification(bool listen = true); diff --git a/WebKit/android/WebCoreSupport/InspectorClientAndroid.h b/WebKit/android/WebCoreSupport/InspectorClientAndroid.h index 9eb85e5..2fb3d2a 100644 --- a/WebKit/android/WebCoreSupport/InspectorClientAndroid.h +++ b/WebKit/android/WebCoreSupport/InspectorClientAndroid.h @@ -57,6 +57,7 @@ public: virtual void populateSetting(const String&, InspectorController::Setting&) {} virtual void storeSetting(const String&, const InspectorController::Setting&) {} virtual void removeSetting(const String&) {} + virtual String hiddenPanels() { return String(); } }; } diff --git a/WebKit/android/jni/JavaBridge.cpp b/WebKit/android/jni/JavaBridge.cpp index 24ca71c..d62fd91 100644 --- a/WebKit/android/jni/JavaBridge.cpp +++ b/WebKit/android/jni/JavaBridge.cpp @@ -262,11 +262,6 @@ void JavaBridge::SetNetworkOnLine(JNIEnv* env, jobject obj, jboolean online) WebCore::networkStateNotifier().networkStateChange(online); } -void JavaBridge::SetDeferringTimers(JNIEnv* env, jobject obj, jboolean defer) -{ - WebCore::setDeferringTimers(defer); -} - void JavaBridge::ServiceFuncPtrQueue(JNIEnv*) { JavaSharedClient::ServiceFunctionPtrQueue(); @@ -289,8 +284,6 @@ static JNINativeMethod gWebCoreJavaBridgeMethods[] = { (void*) JavaBridge::SetCacheSize }, { "setNetworkOnLine", "(Z)V", (void*) JavaBridge::SetNetworkOnLine }, - { "setDeferringTimers", "(Z)V", - (void*) JavaBridge::SetDeferringTimers }, { "nativeServiceFuncPtrQueue", "()V", (void*) JavaBridge::ServiceFuncPtrQueue }, }; diff --git a/WebKit/android/jni/WebHistory.cpp b/WebKit/android/jni/WebHistory.cpp index cd6e0f1..01fd543 100644 --- a/WebKit/android/jni/WebHistory.cpp +++ b/WebKit/android/jni/WebHistory.cpp @@ -153,7 +153,6 @@ static void WebHistoryRestoreIndex(JNIEnv* env, jobject obj, jint frame, jint in // Update the current and previous history item. WebCore::FrameLoader* loader = pFrame->loader(); loader->setCurrentHistoryItem(currentItem); - loader->setPreviousHistoryItem(list->backItem()); // load the current page with FrameLoadTypeIndexedBackForward so that it // will use cache when it is possible diff --git a/WebKit/android/jni/WebSettings.cpp b/WebKit/android/jni/WebSettings.cpp index 407544a..a3701af 100644 --- a/WebKit/android/jni/WebSettings.cpp +++ b/WebKit/android/jni/WebSettings.cpp @@ -328,10 +328,6 @@ public: #endif flag = env->GetBooleanField(obj, gFieldIds->mShrinksStandaloneImagesToFit); s->setShrinksStandaloneImagesToFit(flag); -#if USE(LOW_BANDWIDTH_DISPLAY) - flag = env->GetBooleanField(obj, gFieldIds->mUseDoubleTree); - pFrame->loader()->setUseLowBandwidthDisplay(flag); -#endif } }; diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index 7a60447..529fbdf 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -39,6 +39,7 @@ #include "EventHandler.h" #include "EventNames.h" #include "Font.h" +#include "Frame.h" #include "FrameLoader.h" #include "FrameLoaderClientAndroid.h" #include "FrameTree.h" @@ -793,7 +794,7 @@ void WebViewCore::setScrollOffset(int dx, int dy) // testing work correctly. m_mainFrame->view()->platformWidget()->setLocation(m_scrollOffsetX, m_scrollOffsetY); - m_mainFrame->sendScrollEvent(); + m_mainFrame->eventHandler()->sendScrollEvent(); } } @@ -846,7 +847,7 @@ void WebViewCore::setSizeScreenWidthAndScale(int width, int height, } } r->setNeedsLayoutAndPrefWidthsRecalc(); - m_mainFrame->forceLayout(); + m_mainFrame->view()->forceLayout(); // scroll to restore current screen center if (!node) return; @@ -1797,8 +1798,7 @@ bool WebViewCore::handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* node // so when attempting to get the default, the point chosen would be follow the wrong link. if (nodePtr->hasTagName(WebCore::HTMLNames::areaTag)) { webFrame->setUserInitiatedClick(true); - WebCore::EventTargetNodeCast(nodePtr)->dispatchSimulatedClick(0, - true, true); + nodePtr->dispatchSimulatedClick(0, true, true); webFrame->setUserInitiatedClick(false); return true; } diff --git a/WebKit/android/nav/CacheBuilder.cpp b/WebKit/android/nav/CacheBuilder.cpp index b042ec7..44beffc 100644 --- a/WebKit/android/nav/CacheBuilder.cpp +++ b/WebKit/android/nav/CacheBuilder.cpp @@ -27,8 +27,8 @@ #include "CachedNode.h" #include "CachedRoot.h" #include "Document.h" +#include "EventListener.h" #include "EventNames.h" -#include "EventTargetNode.h" #include "Frame.h" #include "FrameLoader.h" #include "FrameLoaderClientAndroid.h" @@ -45,6 +45,7 @@ #include "InlineTextBox.h" #include "KURL.h" #include "PluginView.h" +#include "RegisteredEventListener.h" #include "RenderImage.h" #include "RenderInline.h" #include "RenderListBox.h" @@ -88,8 +89,20 @@ Frame* CacheBuilder::FrameAnd(const CacheBuilder* cacheBuilder) { return loader->getFrame(); } + #if DUMP_NAV_CACHE +static bool hasEventListener(Node* node, const AtomicString& eventType) { + const RegisteredEventListenerVector& listeners = node->eventListeners(); + size_t size = listeners.size(); + for (size_t i = 0; i < size; ++i) { + const RegisteredEventListener& r = *listeners[i]; + if (r.eventType() == eventType) + return true; + } + return false; +} + #define DEBUG_BUFFER_SIZE 256 #define DEBUG_WRAP_SIZE 150 #define DEBUG_WRAP_MAX 170 @@ -345,24 +358,20 @@ void CacheBuilder::Debug::groups() { DUMP_NAV_LOGD("static DebugTestNode TEST%s_RECTS[] = {\n", name); do { String properties; - EventTargetNode* elementTarget = node->isEventTargetNode() ? - (EventTargetNode*) node : NULL; - if (elementTarget) { - if (elementTarget->getEventListener(eventNames().clickEvent)) - properties.append("ONCLICK | "); - if (elementTarget->getEventListener(eventNames().mousedownEvent)) - properties.append("MOUSEDOWN | "); - if (elementTarget->getEventListener(eventNames().mouseupEvent)) - properties.append("MOUSEUP | "); - if (elementTarget->getEventListener(eventNames().mouseoverEvent)) - properties.append("MOUSEOVER | "); - if (elementTarget->getEventListener(eventNames().mouseoutEvent)) - properties.append("MOUSEOUT | "); - if (elementTarget->getEventListener(eventNames().keydownEvent)) - properties.append("KEYDOWN | "); - if (elementTarget->getEventListener(eventNames().keyupEvent)) - properties.append("KEYUP | "); - } + if (hasEventListener(node, eventNames().clickEvent)) + properties.append("ONCLICK | "); + if (hasEventListener(node, eventNames().mousedownEvent)) + properties.append("MOUSEDOWN | "); + if (hasEventListener(node, eventNames().mouseupEvent)) + properties.append("MOUSEUP | "); + if (hasEventListener(node, eventNames().mouseoverEvent)) + properties.append("MOUSEOVER | "); + if (hasEventListener(node, eventNames().mouseoutEvent)) + properties.append("MOUSEOUT | "); + if (hasEventListener(node, eventNames().keydownEvent)) + properties.append("KEYDOWN | "); + if (hasEventListener(node, eventNames().keyupEvent)) + properties.append("KEYUP | "); if (CacheBuilder::HasFrame(node)) properties.append("FRAME | "); if (focus == node) { @@ -553,8 +562,6 @@ bool CacheBuilder::Debug::isFocusable(Node* node) { return true; if (node->isFocusable()) return true; - if (node->isEventTargetNode()) - return true; if (CacheBuilder::AnyIsClick(node)) return false; if (CacheBuilder::HasTriggerEvent(node)) @@ -807,20 +814,35 @@ void CacheBuilder::adjustForColumns(const ClipColumnTracker& track, } } +// Checks if a node has one of event listener types. +bool CacheBuilder::NodeHasEventListeners(Node* node, AtomicString* eventTypes, int length) { + const RegisteredEventListenerVector& listeners = node->eventListeners(); + size_t size = listeners.size(); + for (size_t i = 0; i < size; ++i) { + const RegisteredEventListener& r = *listeners[i]; + for (int j = 0; j < length; ++j) { + if (r.eventType() == eventTypes[j]) + return true; + } + } + return false; +} + bool CacheBuilder::AnyChildIsClick(Node* node) { + AtomicString eventTypes[5] = { + eventNames().clickEvent, + eventNames().mousedownEvent, + eventNames().mouseupEvent, + eventNames().keydownEvent, + eventNames().keyupEvent + }; + Node* child = node->firstChild(); while (child != NULL) { - if (child->isEventTargetNode()) { - EventTargetNode* target = (EventTargetNode*) child; - if (target->isFocusable() || - target->getEventListener(eventNames().clickEvent) || - target->getEventListener(eventNames().mousedownEvent) || - target->getEventListener(eventNames().mouseupEvent) || - target->getEventListener(eventNames().keydownEvent) || - target->getEventListener(eventNames().keyupEvent)) + if (child->isFocusable() || + NodeHasEventListeners(child, eventTypes, 5)) return true; - } if (AnyChildIsClick(child)) return true; child = child->nextSibling(); @@ -832,18 +854,26 @@ bool CacheBuilder::AnyIsClick(Node* node) { if (node->hasTagName(HTMLNames::bodyTag)) return AnyChildIsClick(node); - EventTargetNode* target = (EventTargetNode*) node; - if (target->getEventListener(eventNames().mouseoverEvent) == NULL && - target->getEventListener(eventNames().mouseoutEvent) == NULL && - target->getEventListener(eventNames().keydownEvent) == NULL && - target->getEventListener(eventNames().keyupEvent) == NULL) - return false; - if (target->getEventListener(eventNames().clickEvent)) - return false; - if (target->getEventListener(eventNames().mousedownEvent)) + + AtomicString eventTypeSetOne[4] = { + eventNames().mouseoverEvent, + eventNames().mouseoutEvent, + eventNames().keydownEvent, + eventNames().keyupEvent + }; + + if (!NodeHasEventListeners(node, eventTypeSetOne, 4)) return false; - if (target->getEventListener(eventNames().mouseupEvent)) + + AtomicString eventTypeSetTwo[3] = { + eventNames().clickEvent, + eventNames().mousedownEvent, + eventNames().mouseupEvent + }; + + if (NodeHasEventListeners(node, eventTypeSetTwo, 3)) return false; + return AnyChildIsClick(node); } @@ -1162,10 +1192,9 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame, (const HTMLAnchorElement*) node; if (!anchorNode->isFocusable() && !HasTriggerEvent(node)) continue; - EventTargetNode* target = (EventTargetNode*) node; - if (target->disabled()) + if (node->disabled()) continue; - hasMouseOver = target->getEventListener(eventNames().mouseoverEvent); + hasMouseOver = NodeHasEventListeners(node, &eventNames().mouseoverEvent, 1); isAnchor = true; KURL href = anchorNode->href(); if (!href.isEmpty() && !href.protocolIs("javascript")) @@ -1198,10 +1227,7 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame, bool isFocusable = node->isKeyboardFocusable(NULL) || node->isMouseFocusable() || node->isFocusable(); if (isFocusable == false) { - if (node->isEventTargetNode() == false) - continue; - EventTargetNode* eventTargetNode = (EventTargetNode*) node; - if (eventTargetNode->disabled()) + if (node->disabled()) continue; bool overOrOut = HasOverOrOut(node); bool hasTrigger = HasTriggerEvent(node); @@ -1345,7 +1371,6 @@ bool CacheBuilder::CleanUpContainedNodes(CachedFrame* cachedFrame, lastNode->isKeyboardFocusable(NULL) == false && lastNode->isMouseFocusable() == false && lastNode->isFocusable() == false && - lastNode->isEventTargetNode() == true && HasOverOrOut(lastNode) == true && HasTriggerEvent(lastNode) == false; if (cachedFrame->focusIndex() == lastChildIndex) @@ -2432,20 +2457,26 @@ Frame* CacheBuilder::HasFrame(Node* node) bool CacheBuilder::HasOverOrOut(Node* node) { - EventTargetNode* target = (EventTargetNode*) node; - return target->getEventListener(eventNames().mouseoverEvent) || - target->getEventListener(eventNames().mouseoutEvent); + // eventNames are thread-local data, I avoid using 'static' variable here. + AtomicString eventTypes[2] = { + eventNames().mouseoverEvent, + eventNames().mouseoutEvent + }; + return NodeHasEventListeners(node, eventTypes, 2); } bool CacheBuilder::HasTriggerEvent(Node* node) { - EventTargetNode* target = (EventTargetNode*) node; - return target->getEventListener(eventNames().clickEvent) || - target->getEventListener(eventNames().mousedownEvent) || - target->getEventListener(eventNames().mouseupEvent) || - target->getEventListener(eventNames().keydownEvent) || - target->getEventListener(eventNames().keyupEvent); + AtomicString eventTypes[5] = { + eventNames().clickEvent, + eventNames().mousedownEvent, + eventNames().mouseupEvent, + eventNames().keydownEvent, + eventNames().keyupEvent + }; + + return NodeHasEventListeners(node, eventTypes, 5); } // #define EMAIL_PATTERN "x@y.d" // where 'x' is letters, numbers, and '-', '.', '_' ; 'y' is 'x' without the underscore, and 'd' is a valid domain @@ -2504,8 +2535,6 @@ Node* CacheBuilder::findByCenter(int x, int y) const return node; if (node->isFocusable()) return node; - if (node->isEventTargetNode() == false) - continue; if (AnyIsClick(node)) continue; if (HasTriggerEvent(node) == false) diff --git a/WebKit/android/nav/CacheBuilder.h b/WebKit/android/nav/CacheBuilder.h index 32ae0af..dbed6e8 100644 --- a/WebKit/android/nav/CacheBuilder.h +++ b/WebKit/android/nav/CacheBuilder.h @@ -39,7 +39,8 @@ using namespace WebCore; namespace WebCore { - + +class AtomicString; class Document; class Frame; class HTMLAreaElement; @@ -194,6 +195,7 @@ private: WTF::Vector<IntRect>* result, IntRect* focusBounds); static bool AnyIsClick(Node* node); static bool AnyChildIsClick(Node* node); + static bool NodeHasEventListeners(Node* node, AtomicString* eventTypes, int length); void BuildFrame(Frame* root, Frame* frame, CachedRoot* cachedRoot, CachedFrame* cachedFrame); bool CleanUpContainedNodes(CachedFrame* cachedFrame, |