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