| Index: third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
|
| diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
|
| index d02caab647e4d0828ea334aeefb030334eee7e14..73d29f6a1ae820776412366a50188bc00b0e5d26 100644
|
| --- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
|
| +++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
|
| @@ -149,24 +149,38 @@ AXObject* AXObjectCacheImpl::focusedImageMapUIElement(HTMLAreaElement* areaEleme
|
| return 0;
|
| }
|
|
|
| -AXObject* AXObjectCacheImpl::focusedUIElementForPage(const Page* page)
|
| +AXObject* AXObjectCacheImpl::focusedObject()
|
| {
|
| - if (!page->settings().accessibilityEnabled())
|
| + if (!accessibilityEnabled())
|
| return 0;
|
|
|
| - // Cross-process accessibility is not yet implemented.
|
| - if (!page->focusController().focusedOrMainFrame()->isLocalFrame())
|
| + // We don't have to return anything if the focused frame is not local;
|
| + // the remote frame will have its own AXObjectCacheImpl and the focused
|
| + // object will be sorted out by the browser process.
|
| + Page* page = m_document->page();
|
| + if (!page->focusController().focusedFrame())
|
| return 0;
|
|
|
| - // get the focused node in the page
|
| - Document* focusedDocument = toLocalFrame(page->focusController().focusedOrMainFrame())->document();
|
| + // Get the focused node in the page.
|
| + Document* focusedDocument = page->focusController().focusedFrame()->document();
|
| Node* focusedNode = focusedDocument->focusedElement();
|
| if (!focusedNode)
|
| focusedNode = focusedDocument;
|
|
|
| - if (isHTMLAreaElement(*focusedNode))
|
| + // If it's an image map, get the focused link within the image map.
|
| + if (isHTMLAreaElement(focusedNode))
|
| return focusedImageMapUIElement(toHTMLAreaElement(focusedNode));
|
|
|
| + // See if there's a page popup, for example a calendar picker.
|
| + Element* adjustedFocusedElement = focusedDocument->adjustedFocusedElement();
|
| + if (isHTMLInputElement(adjustedFocusedElement)) {
|
| + if (AXObject* axPopup = toHTMLInputElement(adjustedFocusedElement)->popupRootAXObject()) {
|
| + if (Element* focusedElementInPopup = axPopup->document()->focusedElement())
|
| + focusedNode = focusedElementInPopup;
|
| + }
|
| +
|
| + }
|
| +
|
| AXObject* obj = getOrCreate(focusedNode);
|
| if (!obj)
|
| return 0;
|
| @@ -1120,7 +1134,7 @@ void AXObjectCacheImpl::handleFocusedUIElementChanged(Node* oldFocusedNode, Node
|
| if (!page)
|
| return;
|
|
|
| - AXObject* focusedObject = focusedUIElementForPage(page);
|
| + AXObject* focusedObject = this->focusedObject();
|
| if (!focusedObject)
|
| return;
|
|
|
|
|