From 775b50b9cea36496f2e2d79c2cdaa6f844fb0bb2 Mon Sep 17 00:00:00 2001 From: "jgaunt%netscape.com" Date: Fri, 10 May 2002 22:34:53 +0000 Subject: [PATCH] bug 124448 Accessibility Support for Object/Embed tags r=aaronl sr=jst git-svn-id: svn://10.0.0.236/trunk@121300 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/accessible/build/makefile.win | 2 + mozilla/accessible/macbuild/accessible.xml | 50 ++++++++ mozilla/accessible/public/Makefile.in | 6 +- mozilla/accessible/public/makefile.win | 7 +- .../public/nsIAccessibilityService.idl | 5 +- .../public/nsIAccessibleWin32Object.idl | 34 ++++++ mozilla/accessible/src/base/Makefile.in | 2 + mozilla/accessible/src/base/makefile.win | 3 +- .../src/base/nsAccessibilityService.cpp | 111 +++++++++++++++--- .../src/base/nsAccessibilityService.h | 2 + mozilla/accessible/src/base/nsAccessible.cpp | 15 ++- .../src/base/nsSelectAccessible.cpp | 11 ++ .../accessible/src/base/nsSelectAccessible.h | 8 +- mozilla/accessible/src/html/Makefile.in | 4 + mozilla/accessible/src/html/makefile.win | 6 + .../src/html/nsHTMLIFrameRootAccessible.cpp | 49 +++++--- .../src/html/nsHTMLIFrameRootAccessible.h | 3 + .../src/html/nsHTMLPluginAccessible.cpp | 96 +++++++++++++++ .../src/html/nsHTMLPluginAccessible.h | 55 +++++++++ .../src/html/nsHTMLSelectAccessible.cpp | 12 +- .../src/html/nsHTMLSelectAccessible.h | 15 +-- .../src/html/nsHTMLWin32ObjectAccessible.cpp | 61 ++++++++++ .../src/html/nsHTMLWin32ObjectAccessible.h | 79 +++++++++++++ mozilla/accessible/src/xul/Makefile.in | 1 + mozilla/accessible/src/xul/makefile.win | 6 +- .../src/xul/nsXULFormControlAccessible.cpp | 2 +- .../src/xul/nsXULFormControlAccessible.h | 4 - .../src/xul/nsXULSelectAccessible.cpp | 3 - .../src/xul/nsXULSelectAccessible.h | 6 +- mozilla/layout/generic/nsObjectFrame.cpp | 28 +++++ mozilla/layout/generic/nsObjectFrame.h | 12 ++ .../layout/html/base/src/nsObjectFrame.cpp | 28 +++++ mozilla/layout/html/base/src/nsObjectFrame.h | 12 ++ mozilla/widget/src/windows/Accessible.cpp | 28 +++-- 34 files changed, 675 insertions(+), 91 deletions(-) create mode 100644 mozilla/accessible/public/nsIAccessibleWin32Object.idl create mode 100644 mozilla/accessible/src/html/nsHTMLPluginAccessible.cpp create mode 100644 mozilla/accessible/src/html/nsHTMLPluginAccessible.h create mode 100644 mozilla/accessible/src/html/nsHTMLWin32ObjectAccessible.cpp create mode 100644 mozilla/accessible/src/html/nsHTMLWin32ObjectAccessible.h diff --git a/mozilla/accessible/build/makefile.win b/mozilla/accessible/build/makefile.win index 9adba160847..53957aab330 100644 --- a/mozilla/accessible/build/makefile.win +++ b/mozilla/accessible/build/makefile.win @@ -49,7 +49,9 @@ LLIBS=\ $(DIST)\lib\xpcom.lib \ $(DIST)\lib\gkgfx.lib \ $(DIST)\lib\contentshared_s.lib \ + $(DIST)\lib\raptorwidget_s.lib \ $(LIBNSPR) \ $(NULL) + include <$(DEPTH)\config\rules.mak> diff --git a/mozilla/accessible/macbuild/accessible.xml b/mozilla/accessible/macbuild/accessible.xml index e16ded57eaf..9e32cb7ba5f 100644 --- a/mozilla/accessible/macbuild/accessible.xml +++ b/mozilla/accessible/macbuild/accessible.xml @@ -95,6 +95,16 @@ FrameworkPathfalse HostFlagsAll + + SearchPath + Path:::layout:html:base:src: + PathFormatMacOS + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + SearchPath Path::build: @@ -1165,6 +1175,13 @@ Library Debug + + Name + nsHTMLPluginAccessible.cpp + MacOS + Text + Debug + @@ -1292,6 +1309,11 @@ accessible_xul.o MacOS + + Name + nsHTMLPluginAccessible.cpp + MacOS + @@ -1336,6 +1358,16 @@ FrameworkPathfalse HostFlagsAll + + SearchPath + Path:::layout:html:base:src: + PathFormatMacOS + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + SearchPath Path::build: @@ -2406,6 +2438,13 @@ Library Debug + + Name + nsHTMLPluginAccessible.cpp + MacOS + Text + Debug + @@ -2533,6 +2572,11 @@ accessible_xulDebug.o MacOS + + Name + nsHTMLPluginAccessible.cpp + MacOS + @@ -2603,6 +2647,12 @@ nsHTMLLinkAccessible.cpp MacOS + + accessible.shlb + Name + nsHTMLPluginAccessible.cpp + MacOS + accessible.shlb Name diff --git a/mozilla/accessible/public/Makefile.in b/mozilla/accessible/public/Makefile.in index 2c9e287b068..b92aefe67ac 100644 --- a/mozilla/accessible/public/Makefile.in +++ b/mozilla/accessible/public/Makefile.in @@ -37,14 +37,14 @@ XPIDLSRCS = \ nsIAccessibleEditableText.idl \ nsIAccessibleEventReceiver.idl \ nsIAccessibleEventListener.idl \ - nsIAccessibleSelectable.idl \ - nsIAccessibleSelection.idl \ nsIAccessibleHyperLink.idl \ nsIAccessibleHyperText.idl \ + nsIAccessibleProvider.idl \ + nsIAccessibleSelectable.idl \ + nsIAccessibleSelection.idl \ nsIAccessibleTable.idl \ nsIAccessibleText.idl \ nsIAccessibleValue.idl \ - nsIAccessibleProvider.idl \ $(NULL) include $(topsrcdir)/config/rules.mk diff --git a/mozilla/accessible/public/makefile.win b/mozilla/accessible/public/makefile.win index 9db405bdedc..713ed534bb0 100644 --- a/mozilla/accessible/public/makefile.win +++ b/mozilla/accessible/public/makefile.win @@ -31,14 +31,15 @@ XPIDLSRCS = \ .\nsIAccessibleEditableText.idl \ .\nsIAccessibleEventReceiver.idl \ .\nsIAccessibleEventListener.idl \ - .\nsIAccessibleSelectable.idl \ - .\nsIAccessibleSelection.idl \ .\nsIAccessibleHyperLink.idl \ .\nsIAccessibleHyperText.idl \ + .\nsIAccessibleProvider.idl \ + .\nsIAccessibleSelectable.idl \ + .\nsIAccessibleSelection.idl \ .\nsIAccessibleTable.idl \ .\nsIAccessibleText.idl \ .\nsIAccessibleValue.idl \ - .\nsIAccessibleProvider.idl \ + .\nsIAccessibleWin32Object.idl \ $(NULL) EXPORTS = \ diff --git a/mozilla/accessible/public/nsIAccessibilityService.idl b/mozilla/accessible/public/nsIAccessibilityService.idl index a6abc2d2920..1d5cd6cacfd 100644 --- a/mozilla/accessible/public/nsIAccessibilityService.idl +++ b/mozilla/accessible/public/nsIAccessibilityService.idl @@ -46,9 +46,8 @@ interface nsIAccessibilityService : nsISupports nsIAccessible createHTMLGroupboxAccessible(in nsISupports aFrame); nsIAccessible createHTMLImageAccessible(in nsISupports aFrame); nsIAccessible createHTMLListboxAccessible(in nsIDOMNode aNode, in nsISupports aPresShell); -// new -// nsIAccessible CreateHTMLObjectAccessible(in nsISupports aFrame); -// end new + nsIAccessible createHTMLNativeWindowAccessible(in nsIDOMNode aDOMNode, in nsIWeakReference aShell, in PRInt32 aHWnd); + nsIAccessible createHTMLPluginAccessible(in nsIDOMNode aDOMNode, in nsIWeakReference aShell); nsIAccessible createHTMLRadioButtonAccessible(in nsISupports aFrame); nsIAccessible createHTMLSelectOptionAccessible(in nsIDOMNode aNode, in nsIAccessible aAccParent, in nsISupports aPresShell); nsIAccessible createHTMLTableAccessible(in nsISupports aFrame); diff --git a/mozilla/accessible/public/nsIAccessibleWin32Object.idl b/mozilla/accessible/public/nsIAccessibleWin32Object.idl new file mode 100644 index 00000000000..e99f0a0c6f7 --- /dev/null +++ b/mozilla/accessible/public/nsIAccessibleWin32Object.idl @@ -0,0 +1,34 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Mozilla Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is the Mozilla browser. + + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1999 Netscape Communications Corporation. All + * Rights Reserved. + * + * Original Author: John Gaunt (jgaunt@netscape.com) + * + * Contributor(s): + * + */ + +#include "nsISupports.idl" + +[scriptable, uuid(ca7a3a93-822f-4cdf-8cb4-c52d16b9afc7)] +interface nsIAccessibleWin32Object : nsISupports +{ + /** handle to the external window implementing IAccessible */ + readonly attribute long hwnd; +}; diff --git a/mozilla/accessible/src/base/Makefile.in b/mozilla/accessible/src/base/Makefile.in index c2337921e29..900d9cf9b00 100644 --- a/mozilla/accessible/src/base/Makefile.in +++ b/mozilla/accessible/src/base/Makefile.in @@ -41,6 +41,7 @@ REQUIRES = \ layout \ locale \ necko \ + plugin \ pref \ string \ uriloader \ @@ -75,4 +76,5 @@ LOCAL_INCLUDES += \ -I$(srcdir) \ -I$(srcdir)/../html \ -I$(srcdir)/../xul \ + -I$(srcdir)/../../../layout/html/base/src \ $(NULL) diff --git a/mozilla/accessible/src/base/makefile.win b/mozilla/accessible/src/base/makefile.win index 0addfc43443..6a047cdc9cf 100755 --- a/mozilla/accessible/src/base/makefile.win +++ b/mozilla/accessible/src/base/makefile.win @@ -32,6 +32,7 @@ REQUIRES = \ layout \ locale \ necko \ + plugin \ pref \ string \ uriloader \ @@ -41,7 +42,6 @@ REQUIRES = \ xpcom \ $(NULL) - CPP_OBJS = \ .\$(OBJDIR)\nsAccessibilityService.obj \ .\$(OBJDIR)\nsAccessible.obj \ @@ -62,6 +62,7 @@ LINCS = \ -I..\..\..\layout\html\forms\public \ -I..\..\..\layout\html\forms\src \ -I..\..\..\layout\html\base\src \ + -I..\..\..\widget\src\windows \ $(NULL) diff --git a/mozilla/accessible/src/base/nsAccessibilityService.cpp b/mozilla/accessible/src/base/nsAccessibilityService.cpp index 1dcb8a77f62..ab38f35840a 100644 --- a/mozilla/accessible/src/base/nsAccessibilityService.cpp +++ b/mozilla/accessible/src/base/nsAccessibilityService.cpp @@ -46,7 +46,7 @@ #include "nsHTMLFormControlAccessible.h" #include "nsHTMLImageAccessible.h" #include "nsHTMLLinkAccessible.h" -//#include "nsHTMLObjectAccessible.h" -- this comes with a later checkin DOH! - jgaunt +#include "nsHTMLPluginAccessible.h" #include "nsHTMLSelectAccessible.h" #include "nsHTMLTableAccessible.h" #include "nsHTMLTextAccessible.h" @@ -57,6 +57,7 @@ #include "nsIDocument.h" #include "nsIDOMDocument.h" #include "nsIDOMHTMLAreaElement.h" +#include "nsIDOMHTMLObjectElement.h" #include "nsIDOMHTMLOptionElement.h" #include "nsIDOMHTMLOptGroupElement.h" #include "nsIDOMHTMLLegendElement.h" @@ -65,10 +66,13 @@ #include "nsIFrame.h" #include "nsILink.h" #include "nsINameSpaceManager.h" +#include "nsIObjectFrame.h" +#include "nsIPluginInstance.h" #include "nsIPresContext.h" #include "nsIPresShell.h" #include "nsITextContent.h" #include "nsLayoutAtoms.h" +#include "nsObjectFrame.h" #include "nsRootAccessible.h" #include "nsString.h" #include "nsTextFragment.h" @@ -80,6 +84,11 @@ #include "nsXULTextAccessible.h" #include "nsIAccessible.h" +// For native window support for object/embed/applet tags +#ifdef XP_WIN +#include "nsHTMLWin32ObjectAccessible.h" +#endif + // IFrame #include "nsIDocShell.h" #include "nsHTMLIFrameRootAccessible.h" @@ -278,20 +287,24 @@ nsAccessibilityService::CreateIFrameAccessible(nsIDOMNode* aDOMNode, nsIAccessib nsCOMPtr innerWeakShell = do_GetWeakReference(innerPresShell); - nsCOMPtr innerRootAccessible = + nsHTMLIFrameRootAccessible *innerRootAccessible = new nsHTMLIFrameRootAccessible(aDOMNode, innerWeakShell); if (innerRootAccessible) { - nsHTMLIFrameAccessible* outerRootAccessible = + nsHTMLIFrameAccessible *outerRootAccessible = new nsHTMLIFrameAccessible(aDOMNode, innerRootAccessible, outerWeakShell, sub_doc); if (outerRootAccessible) { + innerRootAccessible->Init(outerRootAccessible); *_retval = outerRootAccessible; - NS_ADDREF(*_retval); - - return NS_OK; + if (*_retval) { + NS_ADDREF(*_retval); + return NS_OK; + } } + else // don't leak the innerRoot + delete innerRootAccessible; } } } @@ -520,25 +533,35 @@ nsAccessibilityService::CreateHTMLListboxAccessible(nsIDOMNode* aDOMNode, nsISup return NS_OK; } -/* -- coming in a later patch NS_IMETHODIMP -nsAccessibilityService::CreateHTMLObjectAccessible(nsISupports *aFrame, nsIAccessible **_retval) +nsAccessibilityService::CreateHTMLPluginAccessible(nsIDOMNode *aDOMNode, nsIWeakReference *aShell, + nsIAccessible **_retval) { - nsIFrame* frame; - nsCOMPtr node; - nsCOMPtr weakShell; - nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node)); - if (NS_FAILED(rv)) - return rv; + *_retval = new nsHTMLPluginAccessible(aDOMNode, aShell); - *_retval = new nsHTMLObjectAccessible(node, weakShell); if (! *_retval) return NS_ERROR_OUT_OF_MEMORY; NS_ADDREF(*_retval); return NS_OK; } -*/ + +NS_IMETHODIMP +nsAccessibilityService::CreateHTMLNativeWindowAccessible(nsIDOMNode *aDOMNode, nsIWeakReference *aShell, + PRInt32 aHwnd, nsIAccessible **_retval) +{ +#ifdef XP_WIN + *_retval = new nsHTMLWin32ObjectAccessible(aDOMNode, aShell, aHwnd); + + if (! *_retval) + return NS_ERROR_OUT_OF_MEMORY; + + NS_ADDREF(*_retval); +#else + *_retval = nsnull; +#endif + return NS_OK; +} NS_IMETHODIMP nsAccessibilityService::CreateHTMLRadioButtonAccessible(nsISupports *aFrame, nsIAccessible **_retval) @@ -1145,6 +1168,54 @@ NS_IMETHODIMP nsAccessibilityService::CreateXULTabsAccessible(nsIDOMNode *aNode, return NS_OK; } +/** + * We can have several cases here. + * 1) a text or html embedded document where the contentDocument + * variable in the object element holds the content + * 2) web content that uses a plugin, which means we will + * have to go to the plugin to get the accessible content + * 3) An image or imagemap, where the image frame points back to + * the object element DOMNode + */ +nsresult +nsAccessibilityService::GetHTMLObjectAccessibleFor(nsIDOMNode *aNode, + nsIPresShell *aShell, + nsObjectFrame *aFrame, + nsIAccessible **_retval) +{ + // 1) for object elements containing either HTML or TXT documents + nsCOMPtr domDoc; + nsCOMPtr obj(do_QueryInterface(aNode)); + if (obj) + obj->GetContentDocument(getter_AddRefs(domDoc)); + else + domDoc = do_QueryInterface(aNode); + if (domDoc) + return CreateIFrameAccessible(aNode, _retval); + + // 2) for plugins + nsCOMPtr pluginInstance ; + aFrame->GetPluginInstance(*getter_AddRefs(pluginInstance)); + if (pluginInstance) { + nsCOMPtr weakShell (do_GetWeakReference(aShell)); + CreateHTMLPluginAccessible(aNode, weakShell, _retval); + return NS_OK; + } + + // 3) for images and imagemaps + nsCOMPtr context; + aShell->GetPresContext(getter_AddRefs(context)); + if (!context) + return NS_ERROR_FAILURE; + // we have the object frame, get the image frame + nsIFrame *frame; + aFrame->FirstChild(context, nsnull, &frame); + CreateHTMLImageAccessible(frame, _retval); + if (*_retval) + return NS_OK; + return NS_ERROR_FAILURE; +} + /** * GetAccessibleFor - get an nsIAccessible from a DOM node @@ -1243,6 +1314,14 @@ NS_IMETHODIMP nsAccessibilityService::GetAccessibleFor(nsIDOMNode *aNode, if (!frame) return NS_ERROR_FAILURE; + // ---- object/embed/applet tags all use nsObjectFrames ---- + nsCOMPtr frameType; + frame->GetFrameType(getter_AddRefs(frameType)); + if (frameType.get() == nsLayoutAtoms::objectFrame) { + nsObjectFrame* objectFrame = NS_STATIC_CAST(nsObjectFrame*, frame); + return GetHTMLObjectAccessibleFor(aNode, shell, objectFrame, _retval); + } + frame->GetAccessible(getter_AddRefs(newAcc)); // ---- If link, create link accessible ---- diff --git a/mozilla/accessible/src/base/nsAccessibilityService.h b/mozilla/accessible/src/base/nsAccessibilityService.h index 1d45b705646..99c7dee3f89 100644 --- a/mozilla/accessible/src/base/nsAccessibilityService.h +++ b/mozilla/accessible/src/base/nsAccessibilityService.h @@ -43,6 +43,7 @@ #include "nsIContent.h" #include "nsIPresShell.h" #include "nsIDocShell.h" +#include "nsObjectFrame.h" class nsIFrame; class nsIWeakReference; @@ -60,6 +61,7 @@ public: NS_DECL_NSIACCESSIBILITYSERVICE private: + nsresult GetHTMLObjectAccessibleFor(nsIDOMNode *aNode, nsIPresShell *aShell, nsObjectFrame *aFrame, nsIAccessible **_retval); nsresult GetInfo(nsISupports* aFrame, nsIFrame** aRealFrame, nsIWeakReference** aShell, nsIDOMNode** aContent); nsresult GetShellFromNode(nsIDOMNode *aNode, nsIWeakReference **weakShell); void GetOwnerFor(nsIPresShell *aPresShell, nsIPresShell **aOwnerShell, nsIContent **aOwnerContent); diff --git a/mozilla/accessible/src/base/nsAccessible.cpp b/mozilla/accessible/src/base/nsAccessible.cpp index 9ad0fe3e755..4d77a17e894 100644 --- a/mozilla/accessible/src/base/nsAccessible.cpp +++ b/mozilla/accessible/src/base/nsAccessible.cpp @@ -87,6 +87,7 @@ #include "nsIDOMHTMLFormElement.h" #include "nsIDOMHTMLInputElement.h" #include "nsIDOMHTMLLabelElement.h" +#include "nsIDOMHTMLObjectElement.h" #include "nsIDOMNodeList.h" #include "nsIDOMXULButtonElement.h" #include "nsIDOMXULCheckboxElement.h" @@ -770,7 +771,7 @@ NS_IMETHODIMP nsAccessible::GetAccState(PRUint32 *aAccState) } /* readonly attribute boolean accFocused; */ -NS_IMETHODIMP nsAccessible::GetAccFocused(nsIAccessible * *aAccFocused) +NS_IMETHODIMP nsAccessible::GetAccFocused(nsIAccessible **aAccFocused) { *aAccFocused = nsnull; @@ -1274,11 +1275,15 @@ NS_IMETHODIMP nsAccessible::AppendFlatStringFromContentNode(nsIContent *aContent return NS_OK; } - nsCOMPtr imageContent(do_QueryInterface(aContent)); nsCOMPtr inputContent; - if (!imageContent) + nsCOMPtr objectContent; + nsCOMPtr imageContent(do_QueryInterface(aContent)); + if (!imageContent) { inputContent = do_QueryInterface(aContent); - if (imageContent || inputContent) { + if (!inputContent) + objectContent = do_QueryInterface(aContent); + } + if (imageContent || inputContent || objectContent) { nsCOMPtr elt(do_QueryInterface(aContent)); NS_ASSERTION(elt, "No DOM element for content node!"); elt->GetAttribute(NS_LITERAL_STRING("alt"), textEquivalent); @@ -1288,6 +1293,8 @@ NS_IMETHODIMP nsAccessible::AppendFlatStringFromContentNode(nsIContent *aContent elt->GetAttribute(NS_LITERAL_STRING("name"), textEquivalent); if (textEquivalent.IsEmpty()) elt->GetAttribute(NS_LITERAL_STRING("src"), textEquivalent); + if (textEquivalent.IsEmpty()) + elt->GetAttribute(NS_LITERAL_STRING("data"), textEquivalent); // for s with images return AppendStringWithSpaces(aFlatString, textEquivalent); } diff --git a/mozilla/accessible/src/base/nsSelectAccessible.cpp b/mozilla/accessible/src/base/nsSelectAccessible.cpp index 70a4171140a..beef5559ad4 100644 --- a/mozilla/accessible/src/base/nsSelectAccessible.cpp +++ b/mozilla/accessible/src/base/nsSelectAccessible.cpp @@ -209,6 +209,8 @@ nsAccessible(aDOMNode, aShell) { } +NS_IMPL_ISUPPORTS_INHERITED1(nsListboxAccessible, nsAccessible, nsIAccessibleSelectable) + /** We are a window, as far as MSAA is concerned */ NS_IMETHODIMP nsListboxAccessible::GetAccRole(PRUint32 *_retval) { @@ -241,6 +243,15 @@ NS_IMETHODIMP nsListboxAccessible::GetAccState(PRUint32 *_retval) return NS_OK; } +/** + * No-op method body. subclasses MUST override this method + */ +NS_IMETHODIMP nsListboxAccessible::GetSelectedChildren(nsISupportsArray **_retval) +{ + *_retval = nsnull; + return NS_OK; +} + /** ------------------------------------------------------ */ /** Finally, the Combobox widgets */ /** ------------------------------------------------------ */ diff --git a/mozilla/accessible/src/base/nsSelectAccessible.h b/mozilla/accessible/src/base/nsSelectAccessible.h index e3e196cc25a..d1494b10d00 100644 --- a/mozilla/accessible/src/base/nsSelectAccessible.h +++ b/mozilla/accessible/src/base/nsSelectAccessible.h @@ -98,10 +98,14 @@ protected: /** * A class that represents the Listbox widget. */ -class nsListboxAccessible : public nsAccessible +class nsListboxAccessible : public nsAccessible, + public nsIAccessibleSelectable { public: - + + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIACCESSIBLESELECTABLE + nsListboxAccessible (nsIDOMNode* aDOMNode, nsIWeakReference* aShell); virtual ~nsListboxAccessible () {} diff --git a/mozilla/accessible/src/html/Makefile.in b/mozilla/accessible/src/html/Makefile.in index c23e80e2957..fd8965f2753 100644 --- a/mozilla/accessible/src/html/Makefile.in +++ b/mozilla/accessible/src/html/Makefile.in @@ -31,6 +31,7 @@ LIBRARY_NAME = accessibility_html_s REQUIRES = \ content \ content_xul \ + docshell \ dom \ gfx \ gfx2 \ @@ -40,6 +41,7 @@ REQUIRES = \ layout \ locale \ necko \ + plugin \ string \ uriloader \ view \ @@ -55,6 +57,7 @@ CPPSRCS = \ nsHTMLIFrameRootAccessible.cpp \ nsHTMLImageAccessible.cpp \ nsHTMLLinkAccessible.cpp \ + nsHTMLPluginAccessible.cpp \ nsHTMLSelectAccessible.cpp \ nsHTMLTableAccessible.cpp \ nsHTMLTextAccessible.cpp \ @@ -67,4 +70,5 @@ include $(topsrcdir)/config/rules.mk LOCAL_INCLUDES = \ -I$(srcdir)/../base \ + -I$(srcdir)/../../../layout/html/base/src \ $(NULL) diff --git a/mozilla/accessible/src/html/makefile.win b/mozilla/accessible/src/html/makefile.win index 04ea9ff51e4..50808e8982a 100755 --- a/mozilla/accessible/src/html/makefile.win +++ b/mozilla/accessible/src/html/makefile.win @@ -24,6 +24,7 @@ MODULE = accessibility LIBRARY_NAME = accessibility_html_s REQUIRES = \ content \ + docshell \ dom \ gfx \ gfx2 \ @@ -33,6 +34,7 @@ REQUIRES = \ layout \ locale \ necko \ + plugin \ string \ uriloader \ view \ @@ -47,12 +49,15 @@ CPP_OBJS = \ .\$(OBJDIR)\nsHTMLIFrameRootAccessible.obj \ .\$(OBJDIR)\nsHTMLImageAccessible.obj \ .\$(OBJDIR)\nsHTMLLinkAccessible.obj \ + .\$(OBJDIR)\nsHTMLPluginAccessible.obj \ .\$(OBJDIR)\nsHTMLSelectAccessible.obj \ .\$(OBJDIR)\nsHTMLTableAccessible.obj \ .\$(OBJDIR)\nsHTMLTextAccessible.obj \ + .\$(OBJDIR)\nsHTMLWin32ObjectAccessible.obj \ $(NULL) EXPORTS = \ + .\nsHTMLWin32ObjectAccessible.h \ $(NULL) LINCS = \ @@ -60,6 +65,7 @@ LINCS = \ -I..\..\..\layout\html\forms\public \ -I..\..\..\layout\html\forms\src \ -I..\..\..\layout\html\base\src \ + -I..\..\..\widget\src\windows \ $(NULL) diff --git a/mozilla/accessible/src/html/nsHTMLIFrameRootAccessible.cpp b/mozilla/accessible/src/html/nsHTMLIFrameRootAccessible.cpp index 623cd1a470f..f0a588da07b 100644 --- a/mozilla/accessible/src/html/nsHTMLIFrameRootAccessible.cpp +++ b/mozilla/accessible/src/html/nsHTMLIFrameRootAccessible.cpp @@ -166,40 +166,51 @@ nsHTMLIFrameRootAccessible::~nsHTMLIFrameRootAccessible() void nsHTMLIFrameRootAccessible::Init() { - if (!mOuterAccessible) { - nsCOMPtr domDoc; - mOuterNode->GetOwnerDocument(getter_AddRefs(domDoc)); - nsCOMPtr doc(do_QueryInterface(domDoc)); - if (doc) { - nsCOMPtr parentShell; - doc->GetShellAt(0, getter_AddRefs(parentShell)); - if (parentShell) { - nsCOMPtr content(do_QueryInterface(mOuterNode)); - nsIFrame* frame = nsnull; - parentShell->GetPrimaryFrameFor(content, &frame); - NS_ASSERTION(frame, "No outer frame."); - frame->GetAccessible(getter_AddRefs(mOuterAccessible)); - NS_ASSERTION(mOuterAccessible, "Something's wrong - there's no accessible for the outer parent of this frame."); - } + nsCOMPtr domDoc; + mOuterNode->GetOwnerDocument(getter_AddRefs(domDoc)); + nsCOMPtr doc(do_QueryInterface(domDoc)); + if (doc) { + nsCOMPtr parentShell; + doc->GetShellAt(0, getter_AddRefs(parentShell)); + if (parentShell) { + nsCOMPtr content(do_QueryInterface(mOuterNode)); + nsIFrame* frame = nsnull; + parentShell->GetPrimaryFrameFor(content, &frame); + NS_ASSERTION(frame, "No outer frame."); + if (!frame) + return; + frame->GetAccessible(getter_AddRefs(mOuterAccessible)); + NS_ASSERTION(mOuterAccessible, "Something's wrong - there's no accessible for the outer parent of this frame."); } } } + +void nsHTMLIFrameRootAccessible::Init(nsIAccessible *aOuterAccessible) +{ + if (aOuterAccessible) { + mOuterAccessible = aOuterAccessible; + } +} + /* readonly attribute nsIAccessible accParent; */ -NS_IMETHODIMP nsHTMLIFrameRootAccessible::GetAccParent(nsIAccessible * *_retval) +NS_IMETHODIMP nsHTMLIFrameRootAccessible::GetAccParent(nsIAccessible **_retval) { - Init(); + if (!mOuterAccessible) + Init(); return mOuterAccessible->GetAccParent(_retval); } /* nsIAccessible getAccNextSibling (); */ NS_IMETHODIMP nsHTMLIFrameRootAccessible::GetAccNextSibling(nsIAccessible **_retval) { - Init(); + if (!mOuterAccessible) + Init(); return mOuterAccessible->GetAccNextSibling(_retval); } NS_IMETHODIMP nsHTMLIFrameRootAccessible::GetAccPreviousSibling(nsIAccessible **_retval) { - Init(); + if (!mOuterAccessible) + Init(); return mOuterAccessible->GetAccPreviousSibling(_retval); } diff --git a/mozilla/accessible/src/html/nsHTMLIFrameRootAccessible.h b/mozilla/accessible/src/html/nsHTMLIFrameRootAccessible.h index 2ed331f88b8..83b1c0c9c3d 100644 --- a/mozilla/accessible/src/html/nsHTMLIFrameRootAccessible.h +++ b/mozilla/accessible/src/html/nsHTMLIFrameRootAccessible.h @@ -89,6 +89,9 @@ class nsHTMLIFrameRootAccessible : public nsRootAccessible protected: void Init(); + public: + void Init(nsIAccessible *aOuterAccessible); + // In these variable names, "outer" relates to the nsHTMLIFrameAccessible, as opposed to the // nsHTMLIFrameRootAccessible which is "inner". // The outer node is a or