Merge last PGO-green changeset of mozilla-inbound to mozilla-central

This commit is contained in:
Ed Morley 2012-02-07 20:55:09 +00:00
commit 7880fbd256
118 changed files with 1584 additions and 475 deletions

View File

@ -61,7 +61,6 @@ XPIDLSRCS = \
nsIAccessibleDocument.idl \ nsIAccessibleDocument.idl \
nsIAccessibleProvider.idl \ nsIAccessibleProvider.idl \
nsIAccessibleSelectable.idl \ nsIAccessibleSelectable.idl \
nsIAccessNode.idl \
nsIAccessibleCursorable.idl \ nsIAccessibleCursorable.idl \
nsIAccessibleEvent.idl \ nsIAccessibleEvent.idl \
nsIAccessibleEditableText.idl \ nsIAccessibleEditableText.idl \

View File

@ -117,7 +117,7 @@ cpp_quote("//")
cpp_quote("//") cpp_quote("//")
cpp_quote("// get_localInterface(/* [out] */ void **localInterface);") cpp_quote("// get_localInterface(/* [out] */ void **localInterface);")
cpp_quote("// ---------------------------------------------------------------------------------------------------=") cpp_quote("// ---------------------------------------------------------------------------------------------------=")
cpp_quote("// Only available in Gecko's process - casts to an XPCOM nsIAccessNode interface pointer") cpp_quote("// Only available in Gecko's process - casts to an XPCOM nsAccessNode object pointer")
cpp_quote("//") cpp_quote("//")
cpp_quote("//") cpp_quote("//")
cpp_quote("// get_language(/* [out] */ BSTR *htmlText);") cpp_quote("// get_language(/* [out] */ BSTR *htmlText);")

View File

@ -1,126 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* 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 mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2003
* the Initial Developer. All Rights Reserved.
*
* Original Author: Aaron Leventhal (aaronl@netscape.com)
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsISupports.idl"
interface nsIDOMNode;
interface nsIAccessibleDocument;
interface nsIDOMCSSPrimitiveValue;
/**
* An interface used by in-process accessibility clients
* to get style, window, markup and other information about
* a DOM node. When accessibility is active in Gecko,
* every DOM node can have one nsIAccessNode for each
* pres shell the DOM node is rendered in.
* The nsIAccessNode implementations are instantiated lazily.
* The nsIAccessNode tree for a given dom window
* has a one to one relationship to the DOM tree.
* If the DOM node for this access node is "accessible",
* then a QueryInterface to nsIAccessible will succeed.
*/
[scriptable, uuid(08bb2c50-1b30-11e1-bddb-0800200c9a66)]
interface nsIAccessNode : nsISupports
{
/**
* The DOM node this nsIAccessNode is associated with.
*/
readonly attribute nsIDOMNode DOMNode;
/**
* The document accessible that this access node resides in.
*/
readonly attribute nsIAccessibleDocument document;
/**
* The root document accessible that this access node resides in.
*/
readonly attribute nsIAccessibleDocument rootDocument;
/**
* The innerHTML for the DOM node
* This is a text string of all the markup inside the DOM
* node, not including the start and end tag for the node.
*/
readonly attribute DOMString innerHTML;
/**
* Makes an object visible on screen.
*
* @param scrollType - defines where the object should be placed on
* the screen (see nsIAccessibleScrollType for
* available constants).
*/
void scrollTo(in unsigned long aScrollType);
/**
* Moves the top left of an object to a specified location.
*
* @param coordinateType - specifies whether the coordinates are relative to
* the screen or the parent object (for available
* constants refer to nsIAccessibleCoordinateType)
* @param aX - defines the x coordinate
* @param aY - defines the y coordinate
*/
void scrollToPoint(in unsigned long aCoordinateType, in long aX, in long aY);
/**
* Retrieve the computed style value for this DOM node, if it is a DOM element.
* Note: the meanings of width, height and other size measurements depend
* on the version of CSS being used. Therefore, for bounds information,
* it is better to use nsIAccessible::accGetBounds.
* @param pseudoElt The pseudo element to retrieve style for, or NULL
* for general computed style information for this node.
* @param propertyName Retrieve the computed style value for this property name,
* for example "border-bottom".
*/
DOMString getComputedStyleValue(in DOMString pseudoElt, in DOMString propertyName);
/**
* The method is similar to getComputedStyleValue() excepting that this one
* returns nsIDOMCSSPrimitiveValue.
*/
nsIDOMCSSPrimitiveValue getComputedStyleCSSValue(in DOMString pseudoElt,
in DOMString propertyName);
/**
* The language for the current DOM node, e.g. en, de, etc.
*/
readonly attribute DOMString language;
};

View File

@ -43,7 +43,10 @@
#include "nsIArray.idl" #include "nsIArray.idl"
interface nsIPersistentProperties; interface nsIPersistentProperties;
interface nsIDOMCSSPrimitiveValue;
interface nsIDOMDOMStringList; interface nsIDOMDOMStringList;
interface nsIDOMNode;
interface nsIAccessibleDocument;
interface nsIAccessibleRelation; interface nsIAccessibleRelation;
/** /**
@ -100,6 +103,53 @@ interface nsIAccessible : nsISupports
*/ */
readonly attribute long indexInParent; readonly attribute long indexInParent;
/**
* The innerHTML for the HTML element associated with this accessible if applicable.
* This is a text string of all the markup inside the DOM
* node, not including the start and end tag for the node.
*/
readonly attribute DOMString innerHTML;
/**
* Retrieve the computed style value for this DOM node, if it is a DOM element.
* Note: the meanings of width, height and other size measurements depend
* on the version of CSS being used. Therefore, for bounds information,
* it is better to use nsIAccessible::accGetBounds.
*
* @param pseudoElt [in] The pseudo element to retrieve style for, or NULL
* for general computed style information for this node.
* @param propertyName [in] Retrieve the computed style value for this property name,
* for example "border-bottom".
*/
DOMString getComputedStyleValue(in DOMString pseudoElt, in DOMString propertyName);
/**
* The method is similar to getComputedStyleValue() excepting that this one
* returns nsIDOMCSSPrimitiveValue.
*/
nsIDOMCSSPrimitiveValue getComputedStyleCSSValue(in DOMString pseudoElt,
in DOMString propertyName);
/**
* The DOM node this nsIAccessible is associated with.
*/
readonly attribute nsIDOMNode DOMNode;
/**
* The document accessible that this access node resides in.
*/
readonly attribute nsIAccessibleDocument document;
/**
* The root document accessible that this access node resides in.
*/
readonly attribute nsIAccessibleDocument rootDocument;
/**
* The language for the current DOM node, e.g. en, de, etc.
*/
readonly attribute DOMString language;
/** /**
* Accessible name -- the main text equivalent for this node. The name is * Accessible name -- the main text equivalent for this node. The name is
* specified by ARIA or by native markup. Example of ARIA markup is * specified by ARIA or by native markup. Example of ARIA markup is
@ -285,6 +335,26 @@ interface nsIAccessible : nsISupports
*/ */
void doAction(in PRUint8 index); void doAction(in PRUint8 index);
/**
* Makes an object visible on screen.
*
* @param scrollType - defines where the object should be placed on
* the screen (see nsIAccessibleScrollType for
* available constants).
*/
void scrollTo(in unsigned long aScrollType);
/**
* Moves the top left of an object to a specified location.
*
* @param coordinateType [in] - specifies whether the coordinates are relative to
* the screen or the parent object (for available
* constants refer to nsIAccessibleCoordinateType)
* @param x [in] - defines the x coordinate
* @param y [in] - defines the y coordinate
*/
void scrollToPoint(in unsigned long coordinateType, in long x, in long y);
/** /**
* Get a pointer to accessibility interface for this node, which is specific * Get a pointer to accessibility interface for this node, which is specific
* to the OS/accessibility toolkit we're running on. * to the OS/accessibility toolkit we're running on.

View File

@ -39,7 +39,6 @@
#include "nsISupports.idl" #include "nsISupports.idl"
interface nsIAccessible; interface nsIAccessible;
interface nsIAccessNode;
interface nsIDOMDocument; interface nsIDOMDocument;
interface nsIDOMNode; interface nsIDOMNode;
interface nsIDOMWindow; interface nsIDOMWindow;
@ -50,10 +49,9 @@ interface nsIDOMWindow;
* When accessibility is turned on in Gecko, * When accessibility is turned on in Gecko,
* there is an nsIAccessibleDocument for each document * there is an nsIAccessibleDocument for each document
* whether it is XUL, HTML or whatever. * whether it is XUL, HTML or whatever.
* You can QueryInterface to nsIAccessibleDocument from * You can QueryInterface to nsIAccessibleDocument from the nsIAccessible for
* the nsIAccessible or nsIAccessNode for the root node * the root node of a document. You can also get one from
* of a document. You can also get one from * nsIAccessible::GetAccessibleDocument() or
* nsIAccessNode::GetAccessibleDocument() or
* nsIAccessibleEvent::GetAccessibleDocument() * nsIAccessibleEvent::GetAccessibleDocument()
*/ */
[scriptable, uuid(451242bd-8a0c-4198-ae88-c053609a4e5d)] [scriptable, uuid(451242bd-8a0c-4198-ae88-c053609a4e5d)]

View File

@ -43,15 +43,12 @@ interface nsIAccessible;
interface nsIWeakReference; interface nsIWeakReference;
interface nsIPresShell; interface nsIPresShell;
interface nsIDOMWindow; interface nsIDOMWindow;
interface nsIAccessNode;
interface nsIDOMDOMStringList; interface nsIDOMDOMStringList;
interface nsIAccessiblePivot; interface nsIAccessiblePivot;
/** /**
* An interface for in-process accessibility clients * An interface for in-process accessibility clients wishing to get an
* wishing to get an nsIAccessible or nsIAccessNode for * nsIAccessible for a given DOM node. More documentation at:
* a given DOM node.
* More documentation at:
* http://www.mozilla.org/projects/ui/accessibility * http://www.mozilla.org/projects/ui/accessibility
*/ */
[scriptable, uuid(310ce77d-c92b-4761-82e8-77e1a728e8d4)] [scriptable, uuid(310ce77d-c92b-4761-82e8-77e1a728e8d4)]

View File

@ -79,7 +79,7 @@ getDocumentLocaleCB(AtkDocument *aDocument)
return nsnull; return nsnull;
nsAutoString locale; nsAutoString locale;
accWrap->GetLanguage(locale); accWrap->Language(locale);
return locale.IsEmpty() ? nsnull : nsAccessibleWrap::ReturnString(locale); return locale.IsEmpty() ? nsnull : nsAccessibleWrap::ReturnString(locale);
} }

View File

@ -40,7 +40,6 @@
#define nsAccUtils_h_ #define nsAccUtils_h_
#include "nsIAccessible.h" #include "nsIAccessible.h"
#include "nsIAccessNode.h"
#include "nsIAccessibleRole.h" #include "nsIAccessibleRole.h"
#include "nsIAccessibleText.h" #include "nsIAccessibleText.h"
#include "nsIAccessibleTable.h" #include "nsIAccessibleTable.h"

View File

@ -36,37 +36,27 @@
* *
* ***** END LICENSE BLOCK ***** */ * ***** END LICENSE BLOCK ***** */
#include "nsDocAccessible.h" #include "nsAccessNode.h"
#include "nsIAccessible.h"
#include "nsAccCache.h"
#include "nsAccUtils.h"
#include "nsCoreUtils.h"
#include "nsHashtable.h"
#include "nsAccessibilityService.h" #include "nsAccessibilityService.h"
#include "nsAccUtils.h"
#include "nsApplicationAccessibleWrap.h" #include "nsApplicationAccessibleWrap.h"
#include "nsCoreUtils.h"
#include "nsRootAccessible.h"
#include "nsIDocShell.h" #include "nsIDocShell.h"
#include "nsIDocShellTreeItem.h" #include "nsIDocShellTreeItem.h"
#include "nsIDocument.h"
#include "nsIDOMCSSPrimitiveValue.h"
#include "nsIDOMDocument.h"
#include "nsIDOMElement.h"
#include "nsIDOMHTMLElement.h"
#include "nsIDOMWindow.h" #include "nsIDOMWindow.h"
#include "nsPIDOMWindow.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsIFrame.h" #include "nsIFrame.h"
#include "nsIPrefService.h" #include "nsIInterfaceRequestorUtils.h"
#include "nsIObserverService.h"
#include "nsIPrefBranch.h" #include "nsIPrefBranch.h"
#include "nsPresContext.h" #include "nsIPrefService.h"
#include "nsIPresShell.h" #include "nsIPresShell.h"
#include "nsIServiceManager.h" #include "nsIServiceManager.h"
#include "nsIStringBundle.h" #include "nsIStringBundle.h"
#include "nsRootAccessible.h"
#include "nsFocusManager.h" #include "nsFocusManager.h"
#include "nsIObserverService.h" #include "nsPresContext.h"
#include "mozilla/Services.h" #include "mozilla/Services.h"
/* For documentation of the accessibility architecture, /* For documentation of the accessibility architecture,
@ -89,9 +79,7 @@ nsApplicationAccessible *nsAccessNode::gApplicationAccessible = nsnull;
NS_IMPL_CYCLE_COLLECTION_1(nsAccessNode, mContent) NS_IMPL_CYCLE_COLLECTION_1(nsAccessNode, mContent)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsAccessNode) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsAccessNode)
NS_INTERFACE_MAP_ENTRY(nsIAccessNode)
NS_INTERFACE_MAP_ENTRY(nsAccessNode) NS_INTERFACE_MAP_ENTRY(nsAccessNode)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIAccessNode)
NS_INTERFACE_MAP_END NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsAccessNode) NS_IMPL_CYCLE_COLLECTING_ADDREF(nsAccessNode)
@ -287,126 +275,28 @@ nsAccessNode::IsPrimaryForNode() const
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// nsIAccessNode void
NS_IMETHODIMP
nsAccessNode::GetDOMNode(nsIDOMNode **aDOMNode)
{
NS_ENSURE_ARG_POINTER(aDOMNode);
*aDOMNode = nsnull;
nsINode *node = GetNode();
if (node)
CallQueryInterface(node, aDOMNode);
return NS_OK;
}
NS_IMETHODIMP
nsAccessNode::GetDocument(nsIAccessibleDocument **aDocument)
{
NS_ENSURE_ARG_POINTER(aDocument);
NS_IF_ADDREF(*aDocument = GetDocAccessible());
return NS_OK;
}
NS_IMETHODIMP
nsAccessNode::GetRootDocument(nsIAccessibleDocument **aRootDocument)
{
NS_ENSURE_ARG_POINTER(aRootDocument);
nsRootAccessible* rootDocument = RootAccessible();
NS_IF_ADDREF(*aRootDocument = rootDocument);
return NS_OK;
}
NS_IMETHODIMP
nsAccessNode::GetInnerHTML(nsAString& aInnerHTML)
{
aInnerHTML.Truncate();
nsCOMPtr<nsIDOMHTMLElement> htmlElement = do_QueryInterface(mContent);
NS_ENSURE_TRUE(htmlElement, NS_ERROR_NULL_POINTER);
return htmlElement->GetInnerHTML(aInnerHTML);
}
NS_IMETHODIMP
nsAccessNode::ScrollTo(PRUint32 aScrollType) nsAccessNode::ScrollTo(PRUint32 aScrollType)
{ {
if (IsDefunct()) if (IsDefunct())
return NS_ERROR_FAILURE; return;
nsCOMPtr<nsIPresShell> shell(GetPresShell()); nsCOMPtr<nsIPresShell> shell(GetPresShell());
NS_ENSURE_TRUE(shell, NS_ERROR_FAILURE); if (!shell)
return;
nsIFrame *frame = GetFrame(); nsIFrame *frame = GetFrame();
NS_ENSURE_TRUE(frame, NS_ERROR_FAILURE); if (!frame)
return;
nsCOMPtr<nsIContent> content = frame->GetContent(); nsIContent* content = frame->GetContent();
NS_ENSURE_TRUE(content, NS_ERROR_FAILURE); if (!content)
return;
PRInt16 vPercent, hPercent; PRInt16 vPercent, hPercent;
nsCoreUtils::ConvertScrollTypeToPercents(aScrollType, &vPercent, &hPercent); nsCoreUtils::ConvertScrollTypeToPercents(aScrollType, &vPercent, &hPercent);
return shell->ScrollContentIntoView(content, vPercent, hPercent, shell->ScrollContentIntoView(content, vPercent, hPercent,
nsIPresShell::SCROLL_OVERFLOW_HIDDEN); nsIPresShell::SCROLL_OVERFLOW_HIDDEN);
}
NS_IMETHODIMP
nsAccessNode::ScrollToPoint(PRUint32 aCoordinateType, PRInt32 aX, PRInt32 aY)
{
nsIFrame *frame = GetFrame();
if (!frame)
return NS_ERROR_FAILURE;
nsIntPoint coords;
nsresult rv = nsAccUtils::ConvertToScreenCoords(aX, aY, aCoordinateType,
this, &coords);
NS_ENSURE_SUCCESS(rv, rv);
nsIFrame *parentFrame = frame;
while ((parentFrame = parentFrame->GetParent()))
nsCoreUtils::ScrollFrameToPoint(parentFrame, frame, coords);
return NS_OK;
}
NS_IMETHODIMP
nsAccessNode::GetComputedStyleValue(const nsAString& aPseudoElt,
const nsAString& aPropertyName,
nsAString& aValue)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsIDOMCSSStyleDeclaration> styleDecl =
nsCoreUtils::GetComputedStyleDeclaration(aPseudoElt, mContent);
NS_ENSURE_TRUE(styleDecl, NS_ERROR_FAILURE);
return styleDecl->GetPropertyValue(aPropertyName, aValue);
}
NS_IMETHODIMP
nsAccessNode::GetComputedStyleCSSValue(const nsAString& aPseudoElt,
const nsAString& aPropertyName,
nsIDOMCSSPrimitiveValue **aCSSValue)
{
NS_ENSURE_ARG_POINTER(aCSSValue);
*aCSSValue = nsnull;
if (IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsIDOMCSSStyleDeclaration> styleDecl =
nsCoreUtils::GetComputedStyleDeclaration(aPseudoElt, mContent);
NS_ENSURE_STATE(styleDecl);
nsCOMPtr<nsIDOMCSSValue> cssValue;
styleDecl->GetPropertyCSSValue(aPropertyName, getter_AddRefs(cssValue));
NS_ENSURE_TRUE(cssValue, NS_ERROR_FAILURE);
return CallQueryInterface(cssValue, aCSSValue);
} }
// nsAccessNode public // nsAccessNode public
@ -443,20 +333,18 @@ nsAccessNode::GetCurrentFocus()
return focusedNode; return focusedNode;
} }
NS_IMETHODIMP void
nsAccessNode::GetLanguage(nsAString& aLanguage) nsAccessNode::Language(nsAString& aLanguage)
{ {
aLanguage.Truncate(); aLanguage.Truncate();
if (IsDefunct()) if (IsDefunct())
return NS_ERROR_FAILURE; return;
nsCoreUtils::GetLanguageFor(mContent, nsnull, aLanguage); nsCoreUtils::GetLanguageFor(mContent, nsnull, aLanguage);
if (aLanguage.IsEmpty()) { // Nothing found, so use document's language if (aLanguage.IsEmpty()) { // Nothing found, so use document's language
mContent->OwnerDoc()->GetHeaderData(nsGkAtoms::headerContentLanguage, mContent->OwnerDoc()->GetHeaderData(nsGkAtoms::headerContentLanguage,
aLanguage); aLanguage);
} }
return NS_OK;
} }

View File

@ -43,7 +43,6 @@
#ifndef _nsAccessNode_H_ #ifndef _nsAccessNode_H_
#define _nsAccessNode_H_ #define _nsAccessNode_H_
#include "nsIAccessNode.h"
#include "nsIAccessibleTypes.h" #include "nsIAccessibleTypes.h"
#include "a11yGeneric.h" #include "a11yGeneric.h"
@ -68,15 +67,7 @@ class nsIDocShellTreeItem;
#define ACCESSIBLE_BUNDLE_URL "chrome://global-platform/locale/accessible.properties" #define ACCESSIBLE_BUNDLE_URL "chrome://global-platform/locale/accessible.properties"
#define PLATFORM_KEYS_BUNDLE_URL "chrome://global-platform/locale/platformKeys.properties" #define PLATFORM_KEYS_BUNDLE_URL "chrome://global-platform/locale/platformKeys.properties"
#define NS_ACCESSNODE_IMPL_CID \ class nsAccessNode: public nsISupports
{ /* 2b07e3d7-00b3-4379-aa0b-ea22e2c8ffda */ \
0x2b07e3d7, \
0x00b3, \
0x4379, \
{ 0xaa, 0x0b, 0xea, 0x22, 0xe2, 0xc8, 0xff, 0xda } \
}
class nsAccessNode: public nsIAccessNode
{ {
public: public:
@ -84,10 +75,7 @@ public:
virtual ~nsAccessNode(); virtual ~nsAccessNode();
NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsAccessNode, nsIAccessNode) NS_DECL_CYCLE_COLLECTION_CLASS(nsAccessNode)
NS_DECL_NSIACCESSNODE
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ACCESSNODE_IMPL_CID)
static void InitXPAccessibility(); static void InitXPAccessibility();
static void ShutdownXPAccessibility(); static void ShutdownXPAccessibility();
@ -134,18 +122,6 @@ public:
* Return frame for the given access node object. * Return frame for the given access node object.
*/ */
virtual nsIFrame* GetFrame() const; virtual nsIFrame* GetFrame() const;
/**
* Return DOM node associated with this accessible.
*/
already_AddRefed<nsIDOMNode> GetDOMNode() const
{
nsIDOMNode *DOMNode = nsnull;
if (GetNode())
CallQueryInterface(GetNode(), &DOMNode);
return DOMNode;
}
/** /**
* Return DOM node associated with the accessible. * Return DOM node associated with the accessible.
*/ */
@ -195,6 +171,18 @@ public:
*/ */
virtual bool IsPrimaryForNode() const; virtual bool IsPrimaryForNode() const;
/**
* Return the string bundle
*/
static nsIStringBundle* GetStringBundle()
{ return gStringBundle; }
/**
* Interface methods on nsIAccessible shared with ISimpleDOM.
*/
void Language(nsAString& aLocale);
void ScrollTo(PRUint32 aType);
protected: protected:
nsPresContext* GetPresContext(); nsPresContext* GetPresContext();
@ -221,8 +209,5 @@ private:
static nsApplicationAccessible *gApplicationAccessible; static nsApplicationAccessible *gApplicationAccessible;
}; };
NS_DEFINE_STATIC_IID_ACCESSOR(nsAccessNode,
NS_ACCESSNODE_IMPL_CID)
#endif #endif

View File

@ -52,11 +52,14 @@
#include "nsAccessibilityService.h" #include "nsAccessibilityService.h"
#include "nsAccTreeWalker.h" #include "nsAccTreeWalker.h"
#include "nsIAccessibleRelation.h" #include "nsIAccessibleRelation.h"
#include "nsRootAccessible.h"
#include "nsTextEquivUtils.h" #include "nsTextEquivUtils.h"
#include "Relation.h" #include "Relation.h"
#include "Role.h" #include "Role.h"
#include "States.h" #include "States.h"
#include "nsIDOMCSSValue.h"
#include "nsIDOMCSSPrimitiveValue.h"
#include "nsIDOMElement.h" #include "nsIDOMElement.h"
#include "nsIDOMDocument.h" #include "nsIDOMDocument.h"
#include "nsIDOMDocumentXBL.h" #include "nsIDOMDocumentXBL.h"
@ -229,6 +232,92 @@ nsAccessible::SetRoleMapEntry(nsRoleMapEntry* aRoleMapEntry)
mRoleMapEntry = aRoleMapEntry; mRoleMapEntry = aRoleMapEntry;
} }
NS_IMETHODIMP
nsAccessible::GetComputedStyleValue(const nsAString& aPseudoElt,
const nsAString& aPropertyName,
nsAString& aValue)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsIDOMCSSStyleDeclaration> styleDecl =
nsCoreUtils::GetComputedStyleDeclaration(aPseudoElt, mContent);
NS_ENSURE_TRUE(styleDecl, NS_ERROR_FAILURE);
return styleDecl->GetPropertyValue(aPropertyName, aValue);
}
NS_IMETHODIMP
nsAccessible::GetComputedStyleCSSValue(const nsAString& aPseudoElt,
const nsAString& aPropertyName,
nsIDOMCSSPrimitiveValue **aCSSValue) {
NS_ENSURE_ARG_POINTER(aCSSValue);
*aCSSValue = nsnull;
if (IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsIDOMCSSStyleDeclaration> styleDecl =
nsCoreUtils::GetComputedStyleDeclaration(aPseudoElt, mContent);
NS_ENSURE_STATE(styleDecl);
nsCOMPtr<nsIDOMCSSValue> cssValue;
styleDecl->GetPropertyCSSValue(aPropertyName, getter_AddRefs(cssValue));
NS_ENSURE_TRUE(cssValue, NS_ERROR_FAILURE);
return CallQueryInterface(cssValue, aCSSValue);
}
NS_IMETHODIMP
nsAccessible::GetDocument(nsIAccessibleDocument **aDocument)
{
NS_ENSURE_ARG_POINTER(aDocument);
NS_IF_ADDREF(*aDocument = GetDocAccessible());
return NS_OK;
}
NS_IMETHODIMP
nsAccessible::GetDOMNode(nsIDOMNode **aDOMNode)
{
NS_ENSURE_ARG_POINTER(aDOMNode);
*aDOMNode = nsnull;
nsINode *node = GetNode();
if (node)
CallQueryInterface(node, aDOMNode);
return NS_OK;
}
NS_IMETHODIMP
nsAccessible::GetRootDocument(nsIAccessibleDocument **aRootDocument)
{
NS_ENSURE_ARG_POINTER(aRootDocument);
nsRootAccessible* rootDocument = RootAccessible();
NS_IF_ADDREF(*aRootDocument = rootDocument);
return NS_OK;
}
NS_IMETHODIMP
nsAccessible::GetInnerHTML(nsAString& aInnerHTML)
{
aInnerHTML.Truncate();
nsCOMPtr<nsIDOMHTMLElement> htmlElement = do_QueryInterface(mContent);
NS_ENSURE_TRUE(htmlElement, NS_ERROR_NULL_POINTER);
return htmlElement->GetInnerHTML(aInnerHTML);
}
NS_IMETHODIMP
nsAccessible::GetLanguage(nsAString& aLanguage)
{
Language(aLanguage);
return NS_OK;
}
NS_IMETHODIMP NS_IMETHODIMP
nsAccessible::GetName(nsAString& aName) nsAccessible::GetName(nsAString& aName)
{ {
@ -2200,6 +2289,32 @@ nsAccessible::DispatchClickEvent(nsIContent *aContent, PRUint32 aActionIndex)
nsCoreUtils::DispatchMouseEvent(NS_MOUSE_BUTTON_UP, presShell, aContent); nsCoreUtils::DispatchMouseEvent(NS_MOUSE_BUTTON_UP, presShell, aContent);
} }
NS_IMETHODIMP
nsAccessible::ScrollTo(PRUint32 aHow)
{
nsAccessNode::ScrollTo(aHow);
return NS_OK;
}
NS_IMETHODIMP
nsAccessible::ScrollToPoint(PRUint32 aCoordinateType, PRInt32 aX, PRInt32 aY)
{
nsIFrame *frame = GetFrame();
if (!frame)
return NS_ERROR_FAILURE;
nsIntPoint coords;
nsresult rv = nsAccUtils::ConvertToScreenCoords(aX, aY, aCoordinateType,
this, &coords);
NS_ENSURE_SUCCESS(rv, rv);
nsIFrame *parentFrame = frame;
while ((parentFrame = parentFrame->GetParent()))
nsCoreUtils::ScrollFrameToPoint(parentFrame, frame, coords);
return NS_OK;
}
// nsIAccessibleSelectable // nsIAccessibleSelectable
NS_IMETHODIMP nsAccessible::GetSelectedChildren(nsIArray **aSelectedAccessibles) NS_IMETHODIMP nsAccessible::GetSelectedChildren(nsIArray **aSelectedAccessibles)
{ {

View File

@ -129,6 +129,17 @@ public:
*/ */
virtual void Description(nsString& aDescription); virtual void Description(nsString& aDescription);
/**
* Return DOM node associated with this accessible.
*/
inline already_AddRefed<nsIDOMNode> DOMNode() const
{
nsIDOMNode *DOMNode = nsnull;
if (GetNode())
CallQueryInterface(GetNode(), &DOMNode);
return DOMNode;
}
/** /**
* Returns the accessible name specified by ARIA. * Returns the accessible name specified by ARIA.
*/ */

View File

@ -421,7 +421,7 @@ nsApplicationAccessible::GetSiblingAtOffset(PRInt32 aOffset,
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// nsIAccessNode and nsAccessNode // nsIAccessible
NS_IMETHODIMP NS_IMETHODIMP
nsApplicationAccessible::GetDOMNode(nsIDOMNode **aDOMNode) nsApplicationAccessible::GetDOMNode(nsIDOMNode **aDOMNode)

View File

@ -69,7 +69,7 @@ public:
// nsISupports // nsISupports
NS_DECL_ISUPPORTS_INHERITED NS_DECL_ISUPPORTS_INHERITED
// nsIAccessNode // nsIAccessible
NS_SCRIPTABLE NS_IMETHOD GetDOMNode(nsIDOMNode** aDOMNode); NS_SCRIPTABLE NS_IMETHOD GetDOMNode(nsIDOMNode** aDOMNode);
NS_SCRIPTABLE NS_IMETHOD GetDocument(nsIAccessibleDocument** aDocument); NS_SCRIPTABLE NS_IMETHOD GetDocument(nsIAccessibleDocument** aDocument);
NS_SCRIPTABLE NS_IMETHOD GetRootDocument(nsIAccessibleDocument** aRootDocument); NS_SCRIPTABLE NS_IMETHOD GetRootDocument(nsIAccessibleDocument** aRootDocument);
@ -83,8 +83,6 @@ public:
const nsAString& aPropertyName, const nsAString& aPropertyName,
nsIDOMCSSPrimitiveValue** aValue NS_OUTPARAM); nsIDOMCSSPrimitiveValue** aValue NS_OUTPARAM);
NS_SCRIPTABLE NS_IMETHOD GetLanguage(nsAString& aLanguage); NS_SCRIPTABLE NS_IMETHOD GetLanguage(nsAString& aLanguage);
// nsIAccessible
NS_IMETHOD GetParent(nsIAccessible **aParent); NS_IMETHOD GetParent(nsIAccessible **aParent);
NS_IMETHOD GetNextSibling(nsIAccessible **aNextSibling); NS_IMETHOD GetNextSibling(nsIAccessible **aNextSibling);
NS_IMETHOD GetPreviousSibling(nsIAccessible **aPreviousSibling); NS_IMETHOD GetPreviousSibling(nsIAccessible **aPreviousSibling);

View File

@ -191,7 +191,7 @@ public:
/** /**
* Scrolls the given frame to the point, used for implememntation of * Scrolls the given frame to the point, used for implememntation of
* nsIAccessNode::scrollToPoint and nsIAccessibleText::scrollSubstringToPoint. * nsIAccessible::scrollToPoint and nsIAccessibleText::scrollSubstringToPoint.
* *
* @param aScrollableFrame the scrollable frame * @param aScrollableFrame the scrollable frame
* @param aFrame the frame to scroll * @param aFrame the frame to scroll

View File

@ -283,8 +283,8 @@ nsLangTextAttr::nsLangTextAttr(nsHyperTextAccessible *aRootAcc,
nsIContent *aRootContent, nsIContent *aContent) : nsIContent *aRootContent, nsIContent *aContent) :
nsTextAttr<nsAutoString>(aContent == nsnull), mRootContent(aRootContent) nsTextAttr<nsAutoString>(aContent == nsnull), mRootContent(aRootContent)
{ {
nsresult rv = aRootAcc->GetLanguage(mRootNativeValue); aRootAcc->Language(mRootNativeValue);
mIsRootDefined = NS_SUCCEEDED(rv) && !mRootNativeValue.IsEmpty(); mIsRootDefined = !mRootNativeValue.IsEmpty();
if (aContent) if (aContent)
mIsDefined = GetLang(aContent, mNativeValue); mIsDefined = GetLang(aContent, mNativeValue);

View File

@ -1148,7 +1148,7 @@ nsHyperTextAccessible::GetTextAttributes(bool aIncludeDefAttrs,
// Compute spelling attributes on text accessible only. // Compute spelling attributes on text accessible only.
nsIFrame *offsetFrame = accAtOffset->GetFrame(); nsIFrame *offsetFrame = accAtOffset->GetFrame();
if (offsetFrame && offsetFrame->GetType() == nsGkAtoms::textFrame) { if (offsetFrame && offsetFrame->GetType() == nsGkAtoms::textFrame) {
nsCOMPtr<nsIDOMNode> node = accAtOffset->GetDOMNode(); nsCOMPtr<nsIDOMNode> node = accAtOffset->DOMNode();
PRInt32 nodeOffset = 0; PRInt32 nodeOffset = 0;
nsresult rv = RenderedToContentOffset(offsetFrame, offsetInAcc, nsresult rv = RenderedToContentOffset(offsetFrame, offsetInAcc,
@ -2255,10 +2255,8 @@ nsHyperTextAccessible::GetDOMPointByFrameOffset(nsIFrame *aFrame,
if (!aFrame) { if (!aFrame) {
// If the given frame is null then set offset after the DOM node of the // If the given frame is null then set offset after the DOM node of the
// given accessible. // given accessible.
nsCOMPtr<nsIAccessNode> accessNode(do_QueryInterface(aAccessible));
nsCOMPtr<nsIDOMNode> DOMNode; nsCOMPtr<nsIDOMNode> DOMNode;
accessNode->GetDOMNode(getter_AddRefs(DOMNode)); aAccessible->GetDOMNode(getter_AddRefs(DOMNode));
nsCOMPtr<nsIContent> content(do_QueryInterface(DOMNode)); nsCOMPtr<nsIContent> content(do_QueryInterface(DOMNode));
NS_ENSURE_STATE(content); NS_ENSURE_STATE(content);

View File

@ -155,7 +155,7 @@ CAccessibleComponent::GetARGBValueFromCSSProperty(const nsAString& aPropName,
__try { __try {
*aColorValue = 0; *aColorValue = 0;
nsCOMPtr<nsIAccessNode> acc(do_QueryObject(this)); nsRefPtr<nsAccessible> acc(do_QueryObject(this));
if (!acc) if (!acc)
return E_FAIL; return E_FAIL;

View File

@ -396,9 +396,8 @@ __try {
aScrollTopLeft ? nsIAccessibleScrollType::SCROLL_TYPE_TOP_LEFT : aScrollTopLeft ? nsIAccessibleScrollType::SCROLL_TYPE_TOP_LEFT :
nsIAccessibleScrollType::SCROLL_TYPE_BOTTOM_RIGHT; nsIAccessibleScrollType::SCROLL_TYPE_BOTTOM_RIGHT;
nsresult rv = ScrollTo(scrollType); ScrollTo(scrollType);
if (NS_SUCCEEDED(rv)) return S_OK;
return S_OK;
} __except(FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { } } __except(FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { }
return E_FAIL; return E_FAIL;
@ -554,10 +553,7 @@ __try {
*aLanguage = NULL; *aLanguage = NULL;
nsAutoString language; nsAutoString language;
if (NS_FAILED(GetLanguage(language))) { Language(language);
return E_FAIL;
}
if (language.IsEmpty()) if (language.IsEmpty())
return S_FALSE; return S_FALSE;
@ -575,7 +571,7 @@ nsAccessNodeWrap::get_localInterface(
/* [out] */ void __RPC_FAR *__RPC_FAR *localInterface) /* [out] */ void __RPC_FAR *__RPC_FAR *localInterface)
{ {
__try { __try {
*localInterface = static_cast<nsIAccessNode*>(this); *localInterface = static_cast<nsAccessNode*>(this);
NS_ADDREF_THIS(); NS_ADDREF_THIS();
} __except(FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { } } __except(FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { }
return S_OK; return S_OK;

View File

@ -1145,8 +1145,8 @@ STDMETHODIMP
nsAccessibleWrap::scrollTo(enum IA2ScrollType aScrollType) nsAccessibleWrap::scrollTo(enum IA2ScrollType aScrollType)
{ {
__try { __try {
nsresult rv = ScrollTo(aScrollType); nsAccessNode::ScrollTo(aScrollType);
return GetHRESULT(rv); return S_OK;
} __except(nsAccessNodeWrap::FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { } } __except(nsAccessNodeWrap::FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { }
return E_FAIL; return E_FAIL;
@ -1366,9 +1366,7 @@ __try {
// Any two-letter subcode is understood to be a [ISO3166] country code. // Any two-letter subcode is understood to be a [ISO3166] country code.
nsAutoString lang; nsAutoString lang;
nsresult rv = GetLanguage(lang); Language(lang);
if (NS_FAILED(rv))
return GetHRESULT(rv);
// If primary code consists from two letters then expose it as language. // If primary code consists from two letters then expose it as language.
PRInt32 offset = lang.FindChar('-', 0); PRInt32 offset = lang.FindChar('-', 0);

View File

@ -662,17 +662,10 @@ nsXULToolbarButtonAccessible::GetPositionAndSizeInternal(PRInt32 *aPosInSet,
bool bool
nsXULToolbarButtonAccessible::IsSeparator(nsAccessible *aAccessible) nsXULToolbarButtonAccessible::IsSeparator(nsAccessible *aAccessible)
{ {
nsCOMPtr<nsIDOMNode> domNode; nsIContent* content = aAccessible->GetContent();
aAccessible->GetDOMNode(getter_AddRefs(domNode)); return content && ((content->Tag() == nsGkAtoms::toolbarseparator) ||
nsCOMPtr<nsIContent> contentDomNode(do_QueryInterface(domNode)); (content->Tag() == nsGkAtoms::toolbarspacer) ||
(content->Tag() == nsGkAtoms::toolbarspring)); }
if (!contentDomNode)
return false;
return (contentDomNode->Tag() == nsGkAtoms::toolbarseparator) ||
(contentDomNode->Tag() == nsGkAtoms::toolbarspacer) ||
(contentDomNode->Tag() == nsGkAtoms::toolbarspring);
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View File

@ -153,9 +153,9 @@ nsXULTabAccessible::RelationByType(PRUint32 aType)
if (!tabsElm) if (!tabsElm)
return rel; return rel;
nsCOMPtr<nsIDOMNode> DOMNode(GetDOMNode()); nsCOMPtr<nsIDOMNode> domNode(DOMNode());
nsCOMPtr<nsIDOMNode> tabpanelNode; nsCOMPtr<nsIDOMNode> tabpanelNode;
tabsElm->GetRelatedElement(DOMNode, getter_AddRefs(tabpanelNode)); tabsElm->GetRelatedElement(domNode, getter_AddRefs(tabpanelNode));
if (!tabpanelNode) if (!tabpanelNode)
return rel; return rel;
@ -255,9 +255,9 @@ nsXULTabpanelAccessible::RelationByType(PRUint32 aType)
if (!tabpanelsElm) if (!tabpanelsElm)
return rel; return rel;
nsCOMPtr<nsIDOMNode> DOMNode(GetDOMNode()); nsCOMPtr<nsIDOMNode> domNode(DOMNode());
nsCOMPtr<nsIDOMNode> tabNode; nsCOMPtr<nsIDOMNode> tabNode;
tabpanelsElm->GetRelatedElement(DOMNode, getter_AddRefs(tabNode)); tabpanelsElm->GetRelatedElement(domNode, getter_AddRefs(tabNode));
if (!tabNode) if (!tabNode)
return rel; return rel;

View File

@ -18,7 +18,6 @@ const nsIAccessibleCoordinateType = Components.interfaces.nsIAccessibleCoordinat
const nsIAccessibleRelation = Components.interfaces.nsIAccessibleRelation; const nsIAccessibleRelation = Components.interfaces.nsIAccessibleRelation;
const nsIAccessNode = Components.interfaces.nsIAccessNode;
const nsIAccessible = Components.interfaces.nsIAccessible; const nsIAccessible = Components.interfaces.nsIAccessible;
const nsIAccessibleDocument = Components.interfaces.nsIAccessibleDocument; const nsIAccessibleDocument = Components.interfaces.nsIAccessibleDocument;
@ -121,10 +120,8 @@ function getNode(aAccOrNodeOrID)
if (aAccOrNodeOrID instanceof nsIDOMNode) if (aAccOrNodeOrID instanceof nsIDOMNode)
return aAccOrNodeOrID; return aAccOrNodeOrID;
if (aAccOrNodeOrID instanceof nsIAccessible) { if (aAccOrNodeOrID instanceof nsIAccessible)
aAccOrNodeOrID.QueryInterface(nsIAccessNode);
return aAccOrNodeOrID.DOMNode; return aAccOrNodeOrID.DOMNode;
}
node = document.getElementById(aAccOrNodeOrID); node = document.getElementById(aAccOrNodeOrID);
if (!node) { if (!node) {
@ -167,7 +164,6 @@ function getAccessible(aAccOrElmOrID, aInterfaces, aElmObj, aDoNotFailIf)
var elm = null; var elm = null;
if (aAccOrElmOrID instanceof nsIAccessible) { if (aAccOrElmOrID instanceof nsIAccessible) {
aAccOrElmOrID.QueryInterface(nsIAccessNode);
elm = aAccOrElmOrID.DOMNode; elm = aAccOrElmOrID.DOMNode;
} else if (aAccOrElmOrID instanceof nsIDOMNode) { } else if (aAccOrElmOrID instanceof nsIDOMNode) {
@ -199,8 +195,6 @@ function getAccessible(aAccOrElmOrID, aInterfaces, aElmObj, aDoNotFailIf)
} }
} }
acc.QueryInterface(nsIAccessNode);
if (!aInterfaces) if (!aInterfaces)
return acc; return acc;
@ -257,8 +251,7 @@ function getContainerAccessible(aAccOrElmOrID)
*/ */
function getRootAccessible(aAccOrElmOrID) function getRootAccessible(aAccOrElmOrID)
{ {
var acc = getAccessible(aAccOrElmOrID ? aAccOrElmOrID : document, var acc = getAccessible(aAccOrElmOrID ? aAccOrElmOrID : document);
[nsIAccessNode]);
return acc ? acc.rootDocument.QueryInterface(nsIAccessible) : null; return acc ? acc.rootDocument.QueryInterface(nsIAccessible) : null;
} }
@ -267,11 +260,10 @@ function getRootAccessible(aAccOrElmOrID)
*/ */
function getTabDocAccessible(aAccOrElmOrID) function getTabDocAccessible(aAccOrElmOrID)
{ {
var acc = getAccessible(aAccOrElmOrID ? aAccOrElmOrID : document, var acc = getAccessible(aAccOrElmOrID ? aAccOrElmOrID : document);
[nsIAccessNode]);
var docAcc = acc.document.QueryInterface(nsIAccessible); var docAcc = acc.document.QueryInterface(nsIAccessible);
var containerDocAcc = docAcc.parent.QueryInterface(nsIAccessNode).document; var containerDocAcc = docAcc.parent.document;
// Test is running is stand-alone mode. // Test is running is stand-alone mode.
if (acc.rootDocument == containerDocAcc) if (acc.rootDocument == containerDocAcc)
@ -584,7 +576,7 @@ function getTextFromClipboard()
function prettyName(aIdentifier) function prettyName(aIdentifier)
{ {
if (aIdentifier instanceof nsIAccessible) { if (aIdentifier instanceof nsIAccessible) {
var acc = getAccessible(aIdentifier, [nsIAccessNode]); var acc = getAccessible(aIdentifier);
var msg = "[" + getNodePrettyName(acc.DOMNode); var msg = "[" + getNodePrettyName(acc.DOMNode);
try { try {
msg += ", role: " + roleToString(acc.role); msg += ", role: " + roleToString(acc.role);

View File

@ -91,7 +91,7 @@
var item = menu.getChildAt(idx); var item = menu.getChildAt(idx);
if (hasState(item, STATE_FOCUSED)) if (hasState(item, STATE_FOCUSED))
return getAccessible(item, [nsIAccessNode]); return getAccessible(item);
} }
return null; return null;
} }

View File

@ -60,7 +60,7 @@
{ {
this.containerNode = getNode(aContainerID); this.containerNode = getNode(aContainerID);
this.container = getAccessible(this.containerNode, nsIAccessibleHyperText); this.container = getAccessible(this.containerNode, nsIAccessibleHyperText);
this.text = this.container.firstChild.QueryInterface(nsIAccessNode); this.text = this.container.firstChild;
this.textNode = this.text.DOMNode; this.textNode = this.text.DOMNode;
this.textLen = this.textNode.data.length; this.textLen = this.textNode.data.length;

View File

@ -75,7 +75,6 @@ function virtualCursorChangedChecker(aDocAcc, aIdOrNameOrAcc, aTextOffsets)
this.check = function virtualCursorChangedChecker_check(aEvent) this.check = function virtualCursorChangedChecker_check(aEvent)
{ {
var position = aDocAcc.virtualCursor.position; var position = aDocAcc.virtualCursor.position;
position.QueryInterface(nsIAccessNode);
var idMatches = position.DOMNode.id == aIdOrNameOrAcc; var idMatches = position.DOMNode.id == aIdOrNameOrAcc;
var nameMatches = position.name == aIdOrNameOrAcc; var nameMatches = position.name == aIdOrNameOrAcc;
@ -214,4 +213,4 @@ function dumpTraversalSequence(aPivot, aRule)
} while (aPivot.moveNext(aRule)) } while (aPivot.moveNext(aRule))
} }
SimpleTest.info("\n[" + sequence.join(", ") + "]\n"); SimpleTest.info("\n[" + sequence.join(", ") + "]\n");
} }

View File

@ -15,7 +15,7 @@
function doTest() function doTest()
{ {
var elmObj = {}; var elmObj = {};
var acc = getAccessible("span", [nsIAccessNode], elmObj); var acc = getAccessible("span", null, elmObj);
computedStyle = document.defaultView.getComputedStyle(elmObj.value, ""); computedStyle = document.defaultView.getComputedStyle(elmObj.value, "");
// html:span element // html:span element
@ -23,7 +23,7 @@
"Wrong color for element with ID 'span'"); "Wrong color for element with ID 'span'");
// text child of html:span element // text child of html:span element
acc = getAccessible(acc.firstChild, [nsIAccessNode]); acc = getAccessible(acc.firstChild);
is(acc.getComputedStyleValue("", "color"), computedStyle.color, is(acc.getComputedStyleValue("", "color"), computedStyle.color,
"Wrong color for text child of element with ID 'span'"); "Wrong color for text child of element with ID 'span'");

View File

@ -64,8 +64,8 @@
this.preinvoke = function rootContentRemoved_preinvoke() this.preinvoke = function rootContentRemoved_preinvoke()
{ {
// Set up target for hide event before we invoke. // Set up target for hide event before we invoke.
var text = getAccessible(getAccessible(getDocNode(aID)).firstChild, var text =
[nsIAccessNode]).DOMNode; getAccessible(getAccessible(getDocNode(aID)).firstChild).DOMNode;
this.eventSeq[0].target = text; this.eventSeq[0].target = text;
} }

View File

@ -413,6 +413,10 @@ pref("dom.sms.whitelist", "file://,http://localhost:6666");
// Ignore X-Frame-Options headers. // Ignore X-Frame-Options headers.
pref("b2g.ignoreXFrameOptions", true); pref("b2g.ignoreXFrameOptions", true);
// controls if we want camera support
pref("device.camera.enabled", true);
pref("media.realtime_decoder.enabled", true);
// "Preview" landing of bug 710563, which is bogged down in analysis // "Preview" landing of bug 710563, which is bogged down in analysis
// of talos regression. This is a needed change for higher-framerate // of talos regression. This is a needed change for higher-framerate
// CSS animations, and incidentally works around an apparent bug in // CSS animations, and incidentally works around an apparent bug in

View File

@ -79,9 +79,10 @@ function startupHttpd(baseDir, port) {
// FIXME Bug 707625 // FIXME Bug 707625
// until we have a proper security model, add some rights to // until we have a proper security model, add some rights to
// the pre-installed web applications // the pre-installed web applications
// XXX never grant 'content-camera' to non-gaia apps
function addPermissions(urls) { function addPermissions(urls) {
let permissions = [ let permissions = [
'indexedDB', 'indexedDB-unlimited', 'webapps-manage', 'offline-app' 'indexedDB', 'indexedDB-unlimited', 'webapps-manage', 'offline-app', 'content-camera'
]; ];
urls.forEach(function(url) { urls.forEach(function(url) {
let uri = Services.io.newURI(url, null, null); let uri = Services.io.newURI(url, null, null);

View File

@ -1,2 +1,7 @@
# Scrollbars # Scrollbars
category agent-style-sheets browser-content-stylesheet chrome://browser/content/content.css category agent-style-sheets browser-content-stylesheet chrome://browser/content/content.css
# CameraContent.js
component {eff4231b-abce-4f7f-a40a-d646e8fde3ce} CameraContent.js
contract @mozilla.org/b2g-camera-content;1 {eff4231b-abce-4f7f-a40a-d646e8fde3ce}
category JavaScript-navigator-property mozCamera @mozilla.org/b2g-camera-content;1

View File

@ -0,0 +1,83 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
const kProtocolName = "b2g-camera:";
let CameraContent = function() {
this.hasPrivileges = false;
this.mapping = [];
}
CameraContent.prototype = {
getCameraURI: function(aOptions) {
if (!this.hasPrivileges)
return null;
let options = aOptions || { };
if (!options.camera)
options.camera = 0;
if (!options.width)
options.width = 320;
if (!options.height)
options.height = 240;
let uuid = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator).generateUUID().toString();
uuid = uuid.substring(1, uuid.length - 2); // remove the brackets
this.mapping.push(uuid);
let uri = kProtocolName + "?camera=" + options.camera +
"&width=" + options.width +
"&height=" + options.height +
"&type=video/x-raw-yuv";
// XXX that's no e10s ready, but the camera inputstream itself is not...
Services.prefs.setCharPref("b2g.camera." + kProtocolName + "?" + uuid, uri);
return kProtocolName + "?" + uuid;
},
observe: function(aSubject, aTopic, aData) {
if (aTopic == "inner-window-destroyed") {
let wId = aSubject.QueryInterface(Ci.nsISupportsPRUint64).data;
if (wId == this.innerWindowID) {
Services.obs.removeObserver(this, "inner-window-destroyed");
for (let aId in this.mapping)
Services.prefs.clearUserPref("b2g.camera." + kProtocolName + "?" + aId);
this.mapping = null;
}
}
},
init: function(aWindow) {
let principal = aWindow.document.nodePrincipal;
let secMan = Cc["@mozilla.org/scriptsecuritymanager;1"].getService(Ci.nsIScriptSecurityManager);
let perm = principal == secMan.getSystemPrincipal() ? Ci.nsIPermissionManager.ALLOW_ACTION : Services.perms.testExactPermission(principal.URI, "content-camera");
//only pages with perm set and chrome pages can use the camera in content
this.hasPrivileges = perm == Ci.nsIPermissionManager.ALLOW_ACTION || from.schemeIs("chrome");
Services.obs.addObserver(this, "inner-window-destroyed", false);
let util = aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
this.innerWindowID = util.currentInnerWindowID;
},
classID: Components.ID("{eff4231b-abce-4f7f-a40a-d646e8fde3ce}"),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIB2GCameraContent, Ci.nsIDOMGlobalPropertyInitializer, Ci.nsIObserver]),
classInfo: XPCOMUtils.generateCI({classID: Components.ID("{eff4231b-abce-4f7f-a40a-d646e8fde3ce}"),
contractID: "@mozilla.org/b2g-camera-content;1",
interfaces: [Ci.nsIB2GCameraContent],
flags: Ci.nsIClassInfo.DOM_OBJECT,
classDescription: "B2G Camera Content Helper"})
}
const NSGetFactory = XPCOMUtils.generateNSGetFactory([CameraContent]);

View File

@ -44,8 +44,13 @@ include $(DEPTH)/config/autoconf.mk
MODULE = B2GComponents MODULE = B2GComponents
XPIDL_MODULE = B2GComponents XPIDL_MODULE = B2GComponents
XPIDLSRCS = \
b2g.idl \
$(NULL)
EXTRA_PP_COMPONENTS = \ EXTRA_PP_COMPONENTS = \
B2GComponents.manifest \ B2GComponents.manifest \
CameraContent.js \
$(NULL) $(NULL)
include $(topsrcdir)/config/rules.mk include $(topsrcdir)/config/rules.mk

12
b2g/components/b2g.idl Normal file
View File

@ -0,0 +1,12 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "domstubs.idl"
[scriptable, uuid(3615a616-571d-4194-bf54-ccf546067b14)]
interface nsIB2GCameraContent : nsISupports
{
/* temporary solution, waiting for getUserMedia */
DOMString getCameraURI([optional] in jsval options);
};

View File

@ -603,3 +603,4 @@ bin/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@
@BINPATH@/chrome/chrome.manifest @BINPATH@/chrome/chrome.manifest
@BINPATH@/components/B2GComponents.manifest @BINPATH@/components/B2GComponents.manifest
@BINPATH@/components/B2GComponents.xpt @BINPATH@/components/B2GComponents.xpt
@BINPATH@/components/CameraContent.js

View File

Before

Width:  |  Height:  |  Size: 184 B

After

Width:  |  Height:  |  Size: 184 B

View File

@ -64,7 +64,7 @@
} }
.gcliterm-stack-node { .gcliterm-stack-node {
background: url("chrome://global/skin/icons/commandline.png") 4px center no-repeat; background: url("chrome://browser/skin/devtools/commandline.png") 4px center no-repeat;
width: 100%; width: 100%;
} }

View File

@ -293,7 +293,7 @@
.jsterm-input-node { .jsterm-input-node {
width: 98%; width: 98%;
background: url("chrome://global/skin/icons/commandline.png") 4px 3px no-repeat; background: url("chrome://browser/skin/devtools/commandline.png") 4px 3px no-repeat;
} }
:-moz-any(.jsterm-input-node, :-moz-any(.jsterm-input-node,

View File

@ -87,6 +87,7 @@ browser.jar:
skin/classic/browser/tabview/tabview.css (tabview/tabview.css) skin/classic/browser/tabview/tabview.css (tabview/tabview.css)
skin/classic/browser/devtools/common.css (devtools/common.css) skin/classic/browser/devtools/common.css (devtools/common.css)
skin/classic/browser/devtools/arrows.png (devtools/arrows.png) skin/classic/browser/devtools/arrows.png (devtools/arrows.png)
skin/classic/browser/devtools/commandline.png (devtools/commandline.png)
skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png) skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png)
skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css) skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css)
skin/classic/browser/devtools/webconsole.css (devtools/webconsole.css) skin/classic/browser/devtools/webconsole.css (devtools/webconsole.css)

View File

Before

Width:  |  Height:  |  Size: 184 B

After

Width:  |  Height:  |  Size: 184 B

View File

@ -64,7 +64,7 @@
} }
.gcliterm-stack-node { .gcliterm-stack-node {
background: url("chrome://global/skin/icons/commandline.png") 4px center no-repeat; background: url("chrome://browser/skin/devtools/commandline.png") 4px center no-repeat;
width: 100%; width: 100%;
} }

View File

@ -361,7 +361,7 @@
} }
.jsterm-input-node { .jsterm-input-node {
background: url("chrome://global/skin/icons/commandline.png") 4px 2px no-repeat; background: url("chrome://browser/skin/devtools/commandline.png") 4px 2px no-repeat;
} }
:-moz-any(.jsterm-input-node, :-moz-any(.jsterm-input-node,

View File

@ -126,6 +126,7 @@ browser.jar:
skin/classic/browser/tabview/tabview.css (tabview/tabview.css) skin/classic/browser/tabview/tabview.css (tabview/tabview.css)
* skin/classic/browser/devtools/common.css (devtools/common.css) * skin/classic/browser/devtools/common.css (devtools/common.css)
skin/classic/browser/devtools/arrows.png (devtools/arrows.png) skin/classic/browser/devtools/arrows.png (devtools/arrows.png)
skin/classic/browser/devtools/commandline.png (devtools/commandline.png)
skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png) skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png)
skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css) skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css)
skin/classic/browser/devtools/gcli.css (devtools/gcli.css) skin/classic/browser/devtools/gcli.css (devtools/gcli.css)

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

View File

@ -64,7 +64,7 @@
} }
.gcliterm-stack-node { .gcliterm-stack-node {
background: url("chrome://global/skin/icons/commandline.png") 4px center no-repeat; background: url("chrome://browser/skin/devtools/commandline.png") 4px center no-repeat;
width: 100%; width: 100%;
} }

View File

@ -309,7 +309,7 @@
} }
.jsterm-input-node { .jsterm-input-node {
background: url("chrome://global/skin/icons/commandline.png") 4px 3px no-repeat; background: url("chrome://browser/skin/devtools/commandline.png") 4px 3px no-repeat;
} }
:-moz-any(.jsterm-input-node, :-moz-any(.jsterm-input-node,

View File

@ -110,6 +110,7 @@ browser.jar:
skin/classic/browser/tabview/tabview.css (tabview/tabview.css) skin/classic/browser/tabview/tabview.css (tabview/tabview.css)
skin/classic/browser/devtools/common.css (devtools/common.css) skin/classic/browser/devtools/common.css (devtools/common.css)
skin/classic/browser/devtools/arrows.png (devtools/arrows.png) skin/classic/browser/devtools/arrows.png (devtools/arrows.png)
skin/classic/browser/devtools/commandline.png (devtools/commandline.png)
skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png) skin/classic/browser/devtools/goto-mdn.png (devtools/goto-mdn.png)
skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css) skin/classic/browser/devtools/csshtmltree.css (devtools/csshtmltree.css)
skin/classic/browser/devtools/gcli.css (devtools/gcli.css) skin/classic/browser/devtools/gcli.css (devtools/gcli.css)
@ -274,6 +275,7 @@ browser.jar:
skin/classic/aero/browser/tabview/tabview.css (tabview/tabview.css) skin/classic/aero/browser/tabview/tabview.css (tabview/tabview.css)
skin/classic/aero/browser/devtools/common.css (devtools/common.css) skin/classic/aero/browser/devtools/common.css (devtools/common.css)
skin/classic/aero/browser/devtools/arrows.png (devtools/arrows.png) skin/classic/aero/browser/devtools/arrows.png (devtools/arrows.png)
skin/classic/aero/browser/devtools/commandline.png (devtools/commandline.png)
skin/classic/aero/browser/devtools/goto-mdn.png (devtools/goto-mdn.png) skin/classic/aero/browser/devtools/goto-mdn.png (devtools/goto-mdn.png)
skin/classic/aero/browser/devtools/csshtmltree.css (devtools/csshtmltree.css) skin/classic/aero/browser/devtools/csshtmltree.css (devtools/csshtmltree.css)
skin/classic/aero/browser/devtools/gcli.css (devtools/gcli.css) skin/classic/aero/browser/devtools/gcli.css (devtools/gcli.css)

View File

@ -163,24 +163,37 @@ PYTHON_PATH = %pythonpath main
endif endif
# determine debug-related options # determine debug-related options
_DEBUG_ASFLAGS :=
_DEBUG_CFLAGS := _DEBUG_CFLAGS :=
_DEBUG_LDFLAGS := _DEBUG_LDFLAGS :=
ifdef MOZ_DEBUG ifdef MOZ_DEBUG
_DEBUG_CFLAGS += $(MOZ_DEBUG_ENABLE_DEFS) $(MOZ_DEBUG_FLAGS) _DEBUG_CFLAGS += $(MOZ_DEBUG_ENABLE_DEFS)
_DEBUG_LDFLAGS += $(MOZ_DEBUG_LDFLAGS)
XULPPFLAGS += $(MOZ_DEBUG_ENABLE_DEFS) XULPPFLAGS += $(MOZ_DEBUG_ENABLE_DEFS)
else else
_DEBUG_CFLAGS += $(MOZ_DEBUG_DISABLE_DEFS) _DEBUG_CFLAGS += $(MOZ_DEBUG_DISABLE_DEFS)
XULPPFLAGS += $(MOZ_DEBUG_DISABLE_DEFS) XULPPFLAGS += $(MOZ_DEBUG_DISABLE_DEFS)
ifdef MOZ_DEBUG_SYMBOLS endif
_DEBUG_CFLAGS += $(MOZ_DEBUG_FLAGS)
_DEBUG_LDFLAGS += $(MOZ_DEBUG_LDFLAGS) ifneq (,$(MOZ_DEBUG)$(MOZ_DEBUG_SYMBOLS))
ifeq ($(AS),yasm)
ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_)
_DEBUG_ASFLAGS += -g cv8
else
ifneq ($(OS_ARCH),Darwin)
_DEBUG_ASFLAGS += -g dwarf2
endif
endif
else
_DEBUG_ASFLAGS += $(MOZ_DEBUG_FLAGS)
endif endif
_DEBUG_CFLAGS += $(MOZ_DEBUG_FLAGS)
_DEBUG_LDFLAGS += $(MOZ_DEBUG_LDFLAGS)
endif endif
MOZALLOC_LIB = $(call EXPAND_LIBNAME_PATH,mozalloc,$(DIST)/lib) MOZALLOC_LIB = $(call EXPAND_LIBNAME_PATH,mozalloc,$(DIST)/lib)
ASFLAGS += $(_DEBUG_ASFLAGS)
OS_CFLAGS += $(_DEBUG_CFLAGS) OS_CFLAGS += $(_DEBUG_CFLAGS)
OS_CXXFLAGS += $(_DEBUG_CFLAGS) OS_CXXFLAGS += $(_DEBUG_CFLAGS)
OS_LDFLAGS += $(_DEBUG_LDFLAGS) OS_LDFLAGS += $(_DEBUG_LDFLAGS)
@ -198,13 +211,8 @@ else # ! MOZ_DEBUG
# Used for generating an optimized build with debugging symbols. # Used for generating an optimized build with debugging symbols.
# Used in the Windows nightlies to generate symbols for crash reporting. # Used in the Windows nightlies to generate symbols for crash reporting.
ifdef MOZ_DEBUG_SYMBOLS ifdef MOZ_DEBUG_SYMBOLS
ifeq ($(AS),yasm) OS_CXXFLAGS += -UDEBUG -DNDEBUG
ASFLAGS += -g cv8 OS_CFLAGS += -UDEBUG -DNDEBUG
else
ASFLAGS += -Zi
endif
OS_CXXFLAGS += -Zi -UDEBUG -DNDEBUG
OS_CFLAGS += -Zi -UDEBUG -DNDEBUG
ifdef HAVE_64BIT_OS ifdef HAVE_64BIT_OS
OS_LDFLAGS += -DEBUG -OPT:REF,ICF OS_LDFLAGS += -DEBUG -OPT:REF,ICF
else else

View File

@ -3026,6 +3026,11 @@ struct NS_STACK_CLASS nsCanvasBidiProcessorAzure : public nsBidiPresUtils::BidiP
RefPtr<ScaledFont> scaledFont = RefPtr<ScaledFont> scaledFont =
gfxPlatform::GetPlatform()->GetScaledFontForFont(font); gfxPlatform::GetPlatform()->GetScaledFontForFont(font);
if (!scaledFont) {
// This can occur when something switched DirectWrite off.
return;
}
GlyphBuffer buffer; GlyphBuffer buffer;
std::vector<Glyph> glyphBuf; std::vector<Glyph> glyphBuf;

View File

@ -38,6 +38,7 @@
#include "nsIHTMLDocument.h" #include "nsIHTMLDocument.h"
#include "nsIDOMEventTarget.h" #include "nsIDOMEventTarget.h"
#include "nsEventStateManager.h" #include "nsEventStateManager.h"
#include "nsEventStates.h"
#include "nsGkAtoms.h" #include "nsGkAtoms.h"
#include "nsStyleConsts.h" #include "nsStyleConsts.h"
#include "nsPresContext.h" #include "nsPresContext.h"
@ -1810,6 +1811,8 @@ nsHTMLFormElement::UpdateValidity(bool aElementValidity)
mControls->mNotInElements[i]->UpdateState(true); mControls->mNotInElements[i]->UpdateState(true);
} }
} }
UpdateState(true);
} }
// nsIWebProgressListener // nsIWebProgressListener
@ -2133,6 +2136,19 @@ nsHTMLFormElement::SetValueMissingState(const nsAString& aName, bool aValue)
mValueMissingRadioGroups.Put(aName, aValue); mValueMissingRadioGroups.Put(aName, aValue);
} }
nsEventStates
nsHTMLFormElement::IntrinsicState() const
{
nsEventStates state = nsGenericHTMLElement::IntrinsicState();
if (mInvalidElementsCount) {
state |= NS_EVENT_STATE_INVALID;
} else {
state |= NS_EVENT_STATE_VALID;
}
return state;
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// nsFormControlList implementation, this could go away if there were // nsFormControlList implementation, this could go away if there were

View File

@ -151,6 +151,8 @@ public:
virtual bool GetValueMissingState(const nsAString& aName) const; virtual bool GetValueMissingState(const nsAString& aName) const;
virtual void SetValueMissingState(const nsAString& aName, bool aValue); virtual void SetValueMissingState(const nsAString& aName, bool aValue);
virtual nsEventStates IntrinsicState() const;
// nsIContent // nsIContent
virtual bool ParseAttribute(PRInt32 aNamespaceID, virtual bool ParseAttribute(PRInt32 aNamespaceID,
nsIAtom* aAttribute, nsIAtom* aAttribute,

View File

@ -328,8 +328,8 @@ nsHTMLObjectElement::IsFocusableForTabIndex()
return false; return false;
} }
return Type() == eType_Plugin || IsEditableRoot() || return IsEditableRoot() || (Type() == eType_Document &&
(Type() == eType_Document && nsContentUtils::IsSubDocumentTabbable(this)); nsContentUtils::IsSubDocumentTabbable(this));
} }
bool bool
@ -341,7 +341,7 @@ nsHTMLObjectElement::IsHTMLFocusable(bool aWithMouse,
nsIDocument *doc = GetCurrentDoc(); nsIDocument *doc = GetCurrentDoc();
if (!doc || doc->HasFlag(NODE_IS_EDITABLE)) { if (!doc || doc->HasFlag(NODE_IS_EDITABLE)) {
if (aTabIndex) { if (aTabIndex) {
GetIntAttr(nsGkAtoms::tabindex, -1, aTabIndex); GetTabIndex(aTabIndex);
} }
*aIsFocusable = false; *aIsFocusable = false;
@ -356,7 +356,7 @@ nsHTMLObjectElement::IsHTMLFocusable(bool aWithMouse,
// Has plugin content: let the plugin decide what to do in terms of // Has plugin content: let the plugin decide what to do in terms of
// internal focus from mouse clicks // internal focus from mouse clicks
if (aTabIndex) { if (aTabIndex) {
GetIntAttr(nsGkAtoms::tabindex, 0, aTabIndex); GetTabIndex(aTabIndex);
} }
*aIsFocusable = true; *aIsFocusable = true;

View File

@ -296,6 +296,7 @@ _TEST_FILES = \
test_ol_attributes_reflection.html \ test_ol_attributes_reflection.html \
test_bug651956.html \ test_bug651956.html \
test_bug694503.html \ test_bug694503.html \
test_object_plugin_nav.html \
$(NULL) $(NULL)
_BROWSER_TEST_FILES = \ _BROWSER_TEST_FILES = \

View File

@ -0,0 +1,90 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=720130
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 720130</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=720130">Mozilla Bug 720130</a>
<p id="display"></p>
<div id="content">
<input>
<object type="application/x-test"></object>
<button>foo</button>
<object tabindex='0' type="application/x-test"></object>
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 720130 **/
var gFocusCount = 0;
var gFocusNb = 4;
/**
* Check the focus navigation.
*/
function checkFocus() {
switch (gFocusCount) {
case 0:
is(document.activeElement, document.getElementsByTagName('a')[0],
"first focused element should be the link");
break;
case 1:
is(document.activeElement, document.getElementsByTagName('input')[0],
"second focused element should be the text field");
break;
case 2:
is(document.activeElement, document.getElementsByTagName('button')[0],
"third focused element should be the button");
break;
case 3:
is(document.activeElement, document.getElementsByTagName('object')[1],
"fourth focused element should be the object");
break;
}
gFocusCount++;
}
SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(function() {
is(document.activeElement, document.body);
// Preliminary check: tabindex should be -1 on the object.
is(document.getElementsByTagName('object')[0].tabIndex, -1,
"the plugin shouldn't get focus while navigating in the document");
document.addEventListener("focus", function() {
checkFocus();
if (gFocusCount != gFocusNb) {
synthesizeKey("VK_TAB", {});
return;
}
document.removeEventListener("focus", arguments.callee, true);
// Just make sure that .focus() still works.
var o = document.getElementsByTagName('object')[0];
o.onfocus = function() {
SimpleTest.finish();
o.onfocus = null;
};
o.focus();
}, true);
synthesizeKey("VK_TAB", {});
});
</script>
</pre>
</body>
</html>

View File

@ -1202,6 +1202,11 @@ BasicCanvasLayer::PaintWithOpacity(gfxContext* aContext,
NS_ASSERTION(BasicManager()->InDrawing(), NS_ASSERTION(BasicManager()->InDrawing(),
"Can only draw in drawing phase"); "Can only draw in drawing phase");
if (!mSurface) {
NS_WARNING("No valid surface to draw!");
return;
}
nsRefPtr<gfxPattern> pat = new gfxPattern(mSurface); nsRefPtr<gfxPattern> pat = new gfxPattern(mSurface);
pat->SetFilter(mFilter); pat->SetFilter(mFilter);

View File

@ -518,6 +518,11 @@ gfxWindowsPlatform::GetThebesSurfaceForDrawTarget(DrawTarget *aTarget)
nsRefPtr<gfxASurface> surf = static_cast<gfxASurface*>(surface); nsRefPtr<gfxASurface> surf = static_cast<gfxASurface*>(surface);
return surf.forget(); return surf.forget();
} else { } else {
if (!GetD2DDevice()) {
// We no longer have a D2D device, can't do this.
return NULL;
}
RefPtr<ID3D10Texture2D> texture = RefPtr<ID3D10Texture2D> texture =
static_cast<ID3D10Texture2D*>(aTarget->GetNativeSurface(NATIVE_SURFACE_D3D10_TEXTURE)); static_cast<ID3D10Texture2D*>(aTarget->GetNativeSurface(NATIVE_SURFACE_D3D10_TEXTURE));

View File

@ -163,24 +163,37 @@ PYTHON_PATH = %pythonpath main
endif endif
# determine debug-related options # determine debug-related options
_DEBUG_ASFLAGS :=
_DEBUG_CFLAGS := _DEBUG_CFLAGS :=
_DEBUG_LDFLAGS := _DEBUG_LDFLAGS :=
ifdef MOZ_DEBUG ifdef MOZ_DEBUG
_DEBUG_CFLAGS += $(MOZ_DEBUG_ENABLE_DEFS) $(MOZ_DEBUG_FLAGS) _DEBUG_CFLAGS += $(MOZ_DEBUG_ENABLE_DEFS)
_DEBUG_LDFLAGS += $(MOZ_DEBUG_LDFLAGS)
XULPPFLAGS += $(MOZ_DEBUG_ENABLE_DEFS) XULPPFLAGS += $(MOZ_DEBUG_ENABLE_DEFS)
else else
_DEBUG_CFLAGS += $(MOZ_DEBUG_DISABLE_DEFS) _DEBUG_CFLAGS += $(MOZ_DEBUG_DISABLE_DEFS)
XULPPFLAGS += $(MOZ_DEBUG_DISABLE_DEFS) XULPPFLAGS += $(MOZ_DEBUG_DISABLE_DEFS)
ifdef MOZ_DEBUG_SYMBOLS endif
_DEBUG_CFLAGS += $(MOZ_DEBUG_FLAGS)
_DEBUG_LDFLAGS += $(MOZ_DEBUG_LDFLAGS) ifneq (,$(MOZ_DEBUG)$(MOZ_DEBUG_SYMBOLS))
ifeq ($(AS),yasm)
ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_)
_DEBUG_ASFLAGS += -g cv8
else
ifneq ($(OS_ARCH),Darwin)
_DEBUG_ASFLAGS += -g dwarf2
endif
endif
else
_DEBUG_ASFLAGS += $(MOZ_DEBUG_FLAGS)
endif endif
_DEBUG_CFLAGS += $(MOZ_DEBUG_FLAGS)
_DEBUG_LDFLAGS += $(MOZ_DEBUG_LDFLAGS)
endif endif
MOZALLOC_LIB = $(call EXPAND_LIBNAME_PATH,mozalloc,$(DIST)/lib) MOZALLOC_LIB = $(call EXPAND_LIBNAME_PATH,mozalloc,$(DIST)/lib)
ASFLAGS += $(_DEBUG_ASFLAGS)
OS_CFLAGS += $(_DEBUG_CFLAGS) OS_CFLAGS += $(_DEBUG_CFLAGS)
OS_CXXFLAGS += $(_DEBUG_CFLAGS) OS_CXXFLAGS += $(_DEBUG_CFLAGS)
OS_LDFLAGS += $(_DEBUG_LDFLAGS) OS_LDFLAGS += $(_DEBUG_LDFLAGS)
@ -198,13 +211,8 @@ else # ! MOZ_DEBUG
# Used for generating an optimized build with debugging symbols. # Used for generating an optimized build with debugging symbols.
# Used in the Windows nightlies to generate symbols for crash reporting. # Used in the Windows nightlies to generate symbols for crash reporting.
ifdef MOZ_DEBUG_SYMBOLS ifdef MOZ_DEBUG_SYMBOLS
ifeq ($(AS),yasm) OS_CXXFLAGS += -UDEBUG -DNDEBUG
ASFLAGS += -g cv8 OS_CFLAGS += -UDEBUG -DNDEBUG
else
ASFLAGS += -Zi
endif
OS_CXXFLAGS += -Zi -UDEBUG -DNDEBUG
OS_CFLAGS += -Zi -UDEBUG -DNDEBUG
ifdef HAVE_64BIT_OS ifdef HAVE_64BIT_OS
OS_LDFLAGS += -DEBUG -OPT:REF,ICF OS_LDFLAGS += -DEBUG -OPT:REF,ICF
else else

View File

@ -317,6 +317,32 @@ var XPCOMUtils = {
let i = uri.lastIndexOf("/"); let i = uri.lastIndexOf("/");
Components.utils.import(uri.substring(0, i+1) + path, that); Components.utils.import(uri.substring(0, i+1) + path, that);
}, },
/**
* generates a singleton nsIFactory implementation that can be used as
* the _xpcom_factory of the component.
* @param aServiceConstructor
* Constructor function of the component.
*/
generateSingletonFactory:
function XPCOMUtils_generateSingletonFactory(aServiceConstructor) {
return {
_instance: null,
createInstance: function XPCU_SF_createInstance(aOuter, aIID) {
if (aOuter !== null) {
throw Cr.NS_ERROR_NO_AGGREGATION;
}
if (this._instance === null) {
this._instance = new aServiceConstructor();
}
return this._instance.QueryInterface(aIID);
},
lockFactory: function XPCU_SF_lockFactory(aDoLock) {
throw Cr.NS_ERROR_NOT_IMPLEMENTED;
},
QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory])
};
},
}; };
/** /**
@ -336,4 +362,3 @@ function makeQI(interfaceNames) {
throw Cr.NS_ERROR_NO_INTERFACE; throw Cr.NS_ERROR_NO_INTERFACE;
}; };
} }

View File

@ -50,7 +50,7 @@ const Ci = Components.interfaces;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
//// Tests //// Tests
function test_generateQI_string_names() add_test(function test_generateQI_string_names()
{ {
var x = { var x = {
QueryInterface: XPCOMUtils.generateQI([ QueryInterface: XPCOMUtils.generateQI([
@ -73,10 +73,11 @@ function test_generateQI_string_names()
x.QueryInterface(Components.interfaces.nsIDOMDocument); x.QueryInterface(Components.interfaces.nsIDOMDocument);
do_throw("QI should not have succeeded!"); do_throw("QI should not have succeeded!");
} catch(e) {} } catch(e) {}
} run_next_test();
});
function test_generateCI() add_test(function test_generateCI()
{ {
const classID = Components.ID("562dae2e-7cff-432b-995b-3d4c03fa2b89"); const classID = Components.ID("562dae2e-7cff-432b-995b-3d4c03fa2b89");
const classDescription = "generateCI test component"; const classDescription = "generateCI test component";
@ -99,9 +100,10 @@ function test_generateCI()
} catch(e) { } catch(e) {
do_throw("Classinfo for x should not be missing or broken"); do_throw("Classinfo for x should not be missing or broken");
} }
} run_next_test();
});
function test_defineLazyGetter() add_test(function test_defineLazyGetter()
{ {
let accessCount = 0; let accessCount = 0;
let obj = { let obj = {
@ -124,10 +126,11 @@ function test_defineLazyGetter()
// increased. // increased.
do_check_eq(obj.foo, TEST_VALUE); do_check_eq(obj.foo, TEST_VALUE);
do_check_eq(accessCount, 1); do_check_eq(accessCount, 1);
} run_next_test();
});
function test_defineLazyServiceGetter() add_test(function test_defineLazyServiceGetter()
{ {
let obj = { }; let obj = { };
XPCOMUtils.defineLazyServiceGetter(obj, "service", XPCOMUtils.defineLazyServiceGetter(obj, "service",
@ -142,10 +145,11 @@ function test_defineLazyServiceGetter()
do_check_true(prop in service); do_check_true(prop in service);
for (let prop in service) for (let prop in service)
do_check_true(prop in obj.service); do_check_true(prop in obj.service);
} run_next_test();
});
function test_categoryRegistration() add_test(function test_categoryRegistration()
{ {
const CATEGORY_NAME = "test-cat"; const CATEGORY_NAME = "test-cat";
const XULAPPINFO_CONTRACTID = "@mozilla.org/xre/app-info;1"; const XULAPPINFO_CONTRACTID = "@mozilla.org/xre/app-info;1";
@ -203,24 +207,45 @@ function test_categoryRegistration()
} }
print("Check there are no more or less than expected entries."); print("Check there are no more or less than expected entries.");
do_check_eq(foundEntriesCount, EXPECTED_ENTRIES.length); do_check_eq(foundEntriesCount, EXPECTED_ENTRIES.length);
} run_next_test();
});
add_test(function test_generateSingletonFactory()
{
const XPCCOMPONENT_CONTRACTID = "@mozilla.org/singletonComponentTest;1";
const XPCCOMPONENT_CID = Components.ID("{31031c36-5e29-4dd9-9045-333a5d719a3e}");
function XPCComponent() {}
XPCComponent.prototype = {
classID: XPCCOMPONENT_CID,
_xpcom_factory: XPCOMUtils.generateSingletonFactory(XPCComponent),
QueryInterface: XPCOMUtils.generateQI([])
};
let NSGetFactory = XPCOMUtils.generateNSGetFactory([XPCComponent]);
let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
registrar.registerFactory(
XPCCOMPONENT_CID,
"XPCComponent",
XPCCOMPONENT_CONTRACTID,
NSGetFactory(XPCCOMPONENT_CID)
);
// First, try to instance the component.
let instance = Cc[XPCCOMPONENT_CONTRACTID].createInstance(Ci.nsISupports);
// Try again, check that it returns the same instance as before.
do_check_eq(instance,
Cc[XPCCOMPONENT_CONTRACTID].createInstance(Ci.nsISupports));
// Now, for sanity, check that getService is also returning the same instance.
do_check_eq(instance,
Cc[XPCCOMPONENT_CONTRACTID].getService(Ci.nsISupports));
run_next_test();
});
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
//// Test Runner //// Test Runner
let tests = [
test_generateQI_string_names,
test_generateCI,
test_defineLazyGetter,
test_defineLazyServiceGetter,
test_categoryRegistration,
];
function run_test() function run_test()
{ {
tests.forEach(function(test) { run_next_test();
print("Running next test: " + test.name);
test();
});
} }

View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<!--form with one invalid element and another valid one is added dynamically -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.forms[0].appendChild(document.getElementById('i'));
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<input id='i'>
<form>
<input required>
</form>
</body>
</html>

View File

@ -0,0 +1,21 @@
<!DOCTYPE html>
<!-- form with no elements and invalid element is added dynamically -->
<html>
<head>
<style>
form:invalid { display:none }
</style>
<script>
function onLoadHandler()
{
document.forms[0].appendChild(document.getElementById('i'));
document.documentElement.className='';
}
</script>
</head>
<body onload='onLoadHandler();'>
<input id='i' required>
<form>
</form>
</body>
</html>

View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<!--form with one invalid element and another invalid one is added dynamically -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.forms[0].appendChild(document.getElementById('i'));
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<input id='i' type='email' value='foo'>
<form>
<input id='j' type='email' value='foo'>
</form>
</body>
</html>

View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<!--form with one valid element and invalid one is added dynamically -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.forms[0].appendChild(document.getElementById('i'));
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<input id='i' type='email' value='bar'>
<form>
<input id='j' type='text' value='foo'>
</form>
</body>
</html>

View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<!--form with one valid element and another valid one is added dynamically -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.forms[0].appendChild(document.getElementById('i'));
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<input id='i' type='text' value='bar'>
<form>
<input id='j' type='text' value='foo'>
</form>
</body>
</html>

View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<!--form with one invalid element and another valid one is added dynamically -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.forms[0].appendChild(document.getElementById('i'));
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<input id='i' type='text' value='foo'>
<form>
<input id='j' type='email' value='emailfoo'>
</form>
</body>
</html>

View File

@ -0,0 +1,21 @@
<!DOCTYPE html>
<!--form with no valid element and another valid one is added dynamically -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.forms[0].appendChild(document.getElementById('i'));
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<input id='i' type='text' value='foo'>
<form>
</form>
</body>
</html>

View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<!-- form with one invalid element and dynamically made it element with
barred constraints -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.getElementById('i').readOnly = 'ro';
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<form>
<input id='i' required>
</form>
</body>
</html>

View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.getElementById('i').removeAttribute('readonly');
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<form>
<input id='i' required readonly>
</form>
</body>
</html>

View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<!-- form with one invalid element which is made invalid dynamically -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
:-moz-ui-invalid { box-shadow: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.getElementById('i').value = '';
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<form>
<input id='i' value='foo' required>
</form>
</body>
</html>

View File

@ -0,0 +1,21 @@
<!DOCTYPE html>
<!-- form with one valid element which is made valid dynamically -->
<html>
<head>
<style>
form:invalid {display: none;}
</style>
</head>
<script>
function onloadHandler()
{
document.getElementById('i').value = 'foo';
document.documentElement.className = '';
}
</script>
<body onload="onloadHandler();">
<form>
<input id='i' required>
</form>
</body>
</html>

View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<!-- form with one invalid element and a barred for constraint
validation element then you remove the second element -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.forms[0].removeChild(document.getElementById('j'));
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<form>
<input required>
<input id='j' value='foo' readonly>
</form>
</body>
</html>

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<!-- Form with one invalid element and a barred for constraint validation element -->
<html>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<body>
<form>
<input required>
<input id='i' value='foo' readonly required>
</form>
</body>
</html>

View File

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html>
<body>
<form>
<input required readonly>
</form>
</body>
</html>

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<!-- form with invalid barred for constraint validation element -->
<html>
<head>
<style>
form:invalid { display: none ;}
</style>
</head>
<body>
<form>
<input required readonly>
</form>
</body>
</html>

View File

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html>
<body>
<form>
<input type='email' value='foo'>
</form>
</body>
</html>

View File

@ -0,0 +1,5 @@
<!DOCTYPE html>
<html>
<body>
</body>
</html>

View File

@ -0,0 +1,21 @@
<!DOCTYPE html>
<!-- form with one invalid element and the element is dynamically removed -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.forms[0].removeChild(document.getElementById('i'));
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<form>
<input id='i' type='email' value='foo'>
</form>
</body>
</html>

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<body>
<form>
<input required readonly>
</form>
</body>
</html>

View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<!--form with only invalid elements -->
<html>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<body>
<form>
<input required>
</form>
</body>
</html>

View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<!-- form with only valid elements -->
<html>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<body>
<form>
<input value='foo' required>
</form>
</body>
</html>

View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html>
<body>
<form>
<input value='bar' required>
<input value='foo' readonly required>
</form>
</body>
</html>

View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<!-- form with one valid element and a barred for constraint
validation element then you remove the second element -->
<html class='reftest-wait'>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<script>
function onloadHandler()
{
document.forms[0].removeChild(document.getElementById('j'));
document.documentElement.className = '';
}
</script>
<body onload='onloadHandler();'>
<form>
<input id='i' value='foo'required>
<input id='j' value='bar' readonly>
</form>
</body>
</html>

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<!-- Form with one invalid element and a barred for constraint validation element -->
<html>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<body>
<form>
<input id='i' value='bar'required>
<input id='i' value='foo' readonly required>
</form>
</body>
</html>

View File

@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<body>
<form>
</form>
</body>
</html>

View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html>
<body>
<form>
<input type='text' value='foo'>
<input type='text' value='bar'>
</form>
</body>
</html>

View File

@ -0,0 +1,8 @@
<!DOCTYPE html>
<html>
<body>
<form>
<input type='text' value='foo' required>
</form>
</body>
</html>

View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<!-- form with one valid element and you dynamically add a barred constraint
validation element -->
<html>
<head>
<style>
form:invalid { display:none }
</style>
<script>
function onLoadHandler()
{
document.forms[0].appendChild(document.getElementById('i'));
document.documentElement.className='';
}
</script>
</head>
<body onload='onLoadHandler();'>
<input id='i' value='foo' readonly>
<form>
<input required>
</form>
</body>
</html>

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<!-- form with invalid and valid elements -->
<html>
<head>
<style>
form:invalid { display: none; }
</style>
</head>
<body>
<form>
<input id='i' value='foo'>
<input required>
<form>
<body>
<html>

View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<!-- form with one valid element and you dynamically add a barred constraint
validation element -->
<html>
<head>
<style>
form:invalid { display:none }
</style>
<script>
function onLoadHandler()
{
document.forms[0].appendChild(document.getElementById('i'));
document.documentElement.className='';
}
</script>
</head>
<body onload='onLoadHandler();'>
<input id='i' value='foo' readonly>
<form>
<input id='j' value='bar' required>
</form>
</body>
</html>

View File

@ -0,0 +1,25 @@
== form-static-valid.html form-valid-ref.html
== form-dynamic-valid.html form-valid-ref.html
== form-remove-invalid-element.html form-valid-ref-2.html
== form-static-invalid.html form-invalid-ref.html
== form-dynamic-invalid.html form-invalid-ref.html
== form-add-control.html form-invalid-ref.html
== form-dynamic-invalid-not-barred.html form-invalid-ref.html
== form-remove-invalid-element.html form-invalid-ref.html
== form-dynamic-invalid-barred.html form-invalid-barred-ref.html
== form-dynamic-not-invalid-barred.html form-invalid-ref.html
== form-static-invalid-barred.html form-invalid-barred-ref.html
== form-add-invalid-element.html form-invalid-ref.html
== form-add-valid-with-invalid-element.html form-invalid-ref.html
== form-invalid-barred.html form-invalid-barred-ref.html
== form-add-valid-element.html form-valid-ref-4.html
== form-add-valid-with-no-element.html form-valid-ref.html
== form-add-invalid-with-valid-element.html form-invalid-ref.html
== form-with-valid-and-invalid.html form-invalid-ref.html
== form-add-invalid-element-dynamic.html form-invalid-ref.html
== form-invalid-and-barred.html form-invalid-ref.html
== form-invalid-and-barred-remove-barred.html form-invalid-ref.html
== form-valid-and-barred.html form-valid-and-barred-ref.html
== form-valid-and-barred-remove-barred.html form-valid-ref.html
== form-with-invalid-element-add-barred-dynamic.html form-invalid-ref.html
== form-with-valid-element-add-barred-dynamic.html form-valid-and-barred-ref.html

View File

@ -1,7 +1,7 @@
<!DOCTYPE> <!DOCTYPE>
<html class="reftest-wait"> <html class="reftest-wait">
<style> <style>
:invalid { input:invalid {
display: none; display: none;
} }
</style> </style>

View File

@ -1,7 +1,7 @@
<!DOCTYPE> <!DOCTYPE>
<html class="reftest-wait"> <html class="reftest-wait">
<style> <style>
:invalid { input:invalid {
display: none; display: none;
} }
</style> </style>

View File

@ -1,7 +1,7 @@
<!DOCTYPE> <!DOCTYPE>
<html class="reftest-wait"> <html class="reftest-wait">
<style> <style>
:invalid { input:invalid {
display: none; display: none;
} }
</style> </style>

View File

@ -444,7 +444,7 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
if (mContextMenuSubject == null) if (mContextMenuSubject == null)
return false; return false;
String url = ""; final String url;
byte[] b = null; byte[] b = null;
String title = ""; String title = "";
if (mContextMenuSubject instanceof Cursor) { if (mContextMenuSubject instanceof Cursor) {
@ -470,9 +470,20 @@ public class AwesomeBar extends Activity implements GeckoEventListener {
break; break;
} }
case R.id.remove_bookmark: { case R.id.remove_bookmark: {
ContentResolver resolver = Tabs.getInstance().getContentResolver(); GeckoAppShell.getHandler().post(new Runnable() {
BrowserDB.removeBookmark(resolver, url); public void run() {
Toast.makeText(this, R.string.bookmark_removed, Toast.LENGTH_SHORT).show(); ContentResolver resolver = Tabs.getInstance().getContentResolver();
BrowserDB.removeBookmark(resolver, url);
GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
public void run() {
mAwesomeTabs.refreshBookmarks();
Toast.makeText(AwesomeBar.this, R.string.bookmark_removed,
Toast.LENGTH_SHORT).show();
}
});
}
});
break; break;
} }
case R.id.add_to_launcher: { case R.id.add_to_launcher: {

View File

@ -747,4 +747,17 @@ public class AwesomeBarTabs extends TabHost {
} }
}); });
} }
public void refreshBookmarks() {
new AsyncTask<Void, Void, Cursor>() {
protected Cursor doInBackground(Void... arg0) {
ContentResolver resolver = mContext.getContentResolver();
return BrowserDB.getAllBookmarks(resolver);
}
protected void onPostExecute(Cursor cursor) {
mBookmarksAdapter.changeCursor(cursor);
}
}.execute();
}
} }

View File

@ -709,6 +709,17 @@
{0xae, 0xb7, 0xda, 0x62, 0xe7, 0x27, 0x3e, 0xd5} \ {0xae, 0xb7, 0xda, 0x62, 0xe7, 0x27, 0x3e, 0xd5} \
} }
#ifdef MOZ_WIDGET_GONK
#define NS_B2GPROTOCOLHANDLER_CLASSNAME \
"nsB2GProtocolHandler"
#define NS_B2GPROTOCOLHANDLER_CID \
{ \
/* {e50d101a-9db2-466f-977c-ae6af19e3b2f} */ \
0x50d101a, 0x9db2, 0x466f, \
{0x97, 0x7c, 0xae, 0x6a, 0xf1, 0x9e, 0x3b, 0x2f} \
}
#endif
/****************************************************************************** /******************************************************************************
* netwerk/protocol/viewsource/ classes * netwerk/protocol/viewsource/ classes
*/ */

View File

@ -264,6 +264,10 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsResURL)
#ifdef NECKO_PROTOCOL_device #ifdef NECKO_PROTOCOL_device
#include "nsDeviceProtocolHandler.h" #include "nsDeviceProtocolHandler.h"
NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceProtocolHandler) NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceProtocolHandler)
#ifdef MOZ_WIDGET_GONK
#include "nsB2GProtocolHandler.h"
NS_GENERIC_FACTORY_CONSTRUCTOR(nsB2GProtocolHandler)
#endif
#endif #endif
#ifdef NECKO_PROTOCOL_viewsource #ifdef NECKO_PROTOCOL_viewsource
@ -779,6 +783,9 @@ NS_DEFINE_NAMED_CID(NS_DATAPROTOCOLHANDLER_CID);
#endif #endif
#ifdef NECKO_PROTOCOL_device #ifdef NECKO_PROTOCOL_device
NS_DEFINE_NAMED_CID(NS_DEVICEPROTOCOLHANDLER_CID); NS_DEFINE_NAMED_CID(NS_DEVICEPROTOCOLHANDLER_CID);
#ifdef MOZ_WIDGET_GONK
NS_DEFINE_NAMED_CID(NS_B2GPROTOCOLHANDLER_CID);
#endif
#endif #endif
#ifdef NECKO_PROTOCOL_viewsource #ifdef NECKO_PROTOCOL_viewsource
NS_DEFINE_NAMED_CID(NS_VIEWSOURCEHANDLER_CID); NS_DEFINE_NAMED_CID(NS_VIEWSOURCEHANDLER_CID);
@ -910,6 +917,9 @@ static const mozilla::Module::CIDEntry kNeckoCIDs[] = {
#endif #endif
#ifdef NECKO_PROTOCOL_device #ifdef NECKO_PROTOCOL_device
{ &kNS_DEVICEPROTOCOLHANDLER_CID, false, NULL, nsDeviceProtocolHandlerConstructor}, { &kNS_DEVICEPROTOCOLHANDLER_CID, false, NULL, nsDeviceProtocolHandlerConstructor},
#ifdef MOZ_WIDGET_GONK
{ &kNS_B2GPROTOCOLHANDLER_CID, false, NULL, nsB2GProtocolHandlerConstructor},
#endif
#endif #endif
#ifdef NECKO_PROTOCOL_viewsource #ifdef NECKO_PROTOCOL_viewsource
{ &kNS_VIEWSOURCEHANDLER_CID, false, NULL, nsViewSourceHandlerConstructor }, { &kNS_VIEWSOURCEHANDLER_CID, false, NULL, nsViewSourceHandlerConstructor },
@ -1050,6 +1060,9 @@ static const mozilla::Module::ContractIDEntry kNeckoContracts[] = {
#endif #endif
#ifdef NECKO_PROTOCOL_device #ifdef NECKO_PROTOCOL_device
{ NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "moz-device", &kNS_DEVICEPROTOCOLHANDLER_CID }, { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "moz-device", &kNS_DEVICEPROTOCOLHANDLER_CID },
#ifdef MOZ_WIDGET_GONK
{ NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "b2g-camera", &kNS_B2GPROTOCOLHANDLER_CID },
#endif
#endif #endif
#ifdef NECKO_PROTOCOL_viewsource #ifdef NECKO_PROTOCOL_viewsource
{ NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "view-source", &kNS_VIEWSOURCEHANDLER_CID }, { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "view-source", &kNS_VIEWSOURCEHANDLER_CID },

View File

@ -66,6 +66,7 @@ endif
ifeq (gonk,$(MOZ_WIDGET_TOOLKIT)) ifeq (gonk,$(MOZ_WIDGET_TOOLKIT))
CPPSRCS += GonkCaptureProvider.cpp \ CPPSRCS += GonkCaptureProvider.cpp \
nsB2GProtocolHandler.cpp \
$(NULL) $(NULL)
endif endif

View File

@ -0,0 +1,117 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* 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 Camera.
*
* The Initial Developer of the Original Code is Mozilla Corporation
* Portions created by the Initial Developer are Copyright (C) 2009
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Nino D'Aversa <ninodaversa@gmail.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsB2GProtocolHandler.h"
#include "nsDeviceChannel.h"
#include "nsNetCID.h"
#include "nsAutoPtr.h"
#include "nsCOMPtr.h"
#include "nsSimpleURI.h"
#include "mozilla/Preferences.h"
//-----------------------------------------------------------------------------
NS_IMPL_THREADSAFE_ISUPPORTS1(nsB2GProtocolHandler,
nsIProtocolHandler)
nsresult
nsB2GProtocolHandler::Init(){
return NS_OK;
}
NS_IMETHODIMP
nsB2GProtocolHandler::GetScheme(nsACString &aResult)
{
aResult.AssignLiteral("b2g-camera");
return NS_OK;
}
NS_IMETHODIMP
nsB2GProtocolHandler::GetDefaultPort(PRInt32 *aResult)
{
*aResult = -1; // no port for b2g-camera: URLs
return NS_OK;
}
NS_IMETHODIMP
nsB2GProtocolHandler::GetProtocolFlags(PRUint32 *aResult)
{
*aResult = URI_NORELATIVE | URI_NOAUTH | URI_LOADABLE_BY_ANYONE | URI_IS_LOCAL_RESOURCE;
return NS_OK;
}
NS_IMETHODIMP
nsB2GProtocolHandler::NewURI(const nsACString &spec,
const char *originCharset,
nsIURI *baseURI,
nsIURI **result)
{
nsRefPtr<nsSimpleURI> uri = new nsSimpleURI();
nsresult rv;
// XXX get the "real" uri from the pref
// should use ipdl when we'll use e10s
nsCString key("b2g.camera.");
key.Append(spec);
nsCString pref;
rv = mozilla::Preferences::GetCString(key.get(), &pref);
NS_ENSURE_SUCCESS(rv, rv);
rv = uri->SetSpec(pref);
mozilla::Preferences::ClearUser(key.BeginReading());
NS_ENSURE_SUCCESS(rv, rv);
return CallQueryInterface(uri, result);
}
NS_IMETHODIMP
nsB2GProtocolHandler::NewChannel(nsIURI* aURI, nsIChannel **aResult)
{
nsRefPtr<nsDeviceChannel> channel = new nsDeviceChannel();
nsresult rv = channel->Init(aURI);
NS_ENSURE_SUCCESS(rv, rv);
return CallQueryInterface(channel, aResult);
}
NS_IMETHODIMP
nsB2GProtocolHandler::AllowPort(PRInt32 port,
const char *scheme,
bool *aResult)
{
// don't override anything.
*aResult = false;
return NS_OK;
}

View File

@ -0,0 +1,60 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* 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 Camera.
*
* The Initial Developer of the Original Code is Mozilla Corporation
* Portions created by the Initial Developer are Copyright (C) 2009
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Nino D'Aversa <ninodaversa@gmail.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef nsB2GProtocolHandler_h_
#define nsB2GProtocolHandler_h_
#include "nsIProtocolHandler.h"
#include "nsString.h"
// {e50d101a-9db2-466f-977c-ae6af19e3b2f}
#define NS_B2GPROTOCOLHANDLER_CID \
{ 0x50d101a, 0x9db2, 0x466f, \
{0x97, 0x7c, 0xae, 0x6a, 0xf1, 0x9e, 0x3b, 0x2f} }
class nsB2GProtocolHandler : public nsIProtocolHandler {
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIPROTOCOLHANDLER
nsB2GProtocolHandler() {}
~nsB2GProtocolHandler() {}
nsresult Init();
};
#endif

Some files were not shown because too many files have changed in this diff Show More