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 \
nsIAccessibleProvider.idl \
nsIAccessibleSelectable.idl \
nsIAccessNode.idl \
nsIAccessibleCursorable.idl \
nsIAccessibleEvent.idl \
nsIAccessibleEditableText.idl \

View File

@ -117,7 +117,7 @@ cpp_quote("//")
cpp_quote("//")
cpp_quote("// get_localInterface(/* [out] */ void **localInterface);")
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("// 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"
interface nsIPersistentProperties;
interface nsIDOMCSSPrimitiveValue;
interface nsIDOMDOMStringList;
interface nsIDOMNode;
interface nsIAccessibleDocument;
interface nsIAccessibleRelation;
/**
@ -100,6 +103,53 @@ interface nsIAccessible : nsISupports
*/
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
* specified by ARIA or by native markup. Example of ARIA markup is
@ -285,6 +335,26 @@ interface nsIAccessible : nsISupports
*/
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
* to the OS/accessibility toolkit we're running on.

View File

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

View File

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

View File

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

View File

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

View File

@ -36,37 +36,27 @@
*
* ***** 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 "nsAccUtils.h"
#include "nsApplicationAccessibleWrap.h"
#include "nsCoreUtils.h"
#include "nsRootAccessible.h"
#include "nsIDocShell.h"
#include "nsIDocShellTreeItem.h"
#include "nsIDocument.h"
#include "nsIDOMCSSPrimitiveValue.h"
#include "nsIDOMDocument.h"
#include "nsIDOMElement.h"
#include "nsIDOMHTMLElement.h"
#include "nsIDOMWindow.h"
#include "nsPIDOMWindow.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsIFrame.h"
#include "nsIPrefService.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsIObserverService.h"
#include "nsIPrefBranch.h"
#include "nsPresContext.h"
#include "nsIPrefService.h"
#include "nsIPresShell.h"
#include "nsIServiceManager.h"
#include "nsIStringBundle.h"
#include "nsRootAccessible.h"
#include "nsFocusManager.h"
#include "nsIObserverService.h"
#include "nsPresContext.h"
#include "mozilla/Services.h"
/* For documentation of the accessibility architecture,
@ -89,9 +79,7 @@ nsApplicationAccessible *nsAccessNode::gApplicationAccessible = nsnull;
NS_IMPL_CYCLE_COLLECTION_1(nsAccessNode, mContent)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsAccessNode)
NS_INTERFACE_MAP_ENTRY(nsIAccessNode)
NS_INTERFACE_MAP_ENTRY(nsAccessNode)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIAccessNode)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsAccessNode)
@ -287,126 +275,28 @@ nsAccessNode::IsPrimaryForNode() const
}
////////////////////////////////////////////////////////////////////////////////
// nsIAccessNode
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
void
nsAccessNode::ScrollTo(PRUint32 aScrollType)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
return;
nsCOMPtr<nsIPresShell> shell(GetPresShell());
NS_ENSURE_TRUE(shell, NS_ERROR_FAILURE);
if (!shell)
return;
nsIFrame *frame = GetFrame();
NS_ENSURE_TRUE(frame, NS_ERROR_FAILURE);
if (!frame)
return;
nsCOMPtr<nsIContent> content = frame->GetContent();
NS_ENSURE_TRUE(content, NS_ERROR_FAILURE);
nsIContent* content = frame->GetContent();
if (!content)
return;
PRInt16 vPercent, hPercent;
nsCoreUtils::ConvertScrollTypeToPercents(aScrollType, &vPercent, &hPercent);
return shell->ScrollContentIntoView(content, vPercent, hPercent,
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);
shell->ScrollContentIntoView(content, vPercent, hPercent,
nsIPresShell::SCROLL_OVERFLOW_HIDDEN);
}
// nsAccessNode public
@ -443,20 +333,18 @@ nsAccessNode::GetCurrentFocus()
return focusedNode;
}
NS_IMETHODIMP
nsAccessNode::GetLanguage(nsAString& aLanguage)
void
nsAccessNode::Language(nsAString& aLanguage)
{
aLanguage.Truncate();
if (IsDefunct())
return NS_ERROR_FAILURE;
return;
nsCoreUtils::GetLanguageFor(mContent, nsnull, aLanguage);
if (aLanguage.IsEmpty()) { // Nothing found, so use document's language
mContent->OwnerDoc()->GetHeaderData(nsGkAtoms::headerContentLanguage,
aLanguage);
}
return NS_OK;
}

View File

@ -43,7 +43,6 @@
#ifndef _nsAccessNode_H_
#define _nsAccessNode_H_
#include "nsIAccessNode.h"
#include "nsIAccessibleTypes.h"
#include "a11yGeneric.h"
@ -68,15 +67,7 @@ class nsIDocShellTreeItem;
#define ACCESSIBLE_BUNDLE_URL "chrome://global-platform/locale/accessible.properties"
#define PLATFORM_KEYS_BUNDLE_URL "chrome://global-platform/locale/platformKeys.properties"
#define NS_ACCESSNODE_IMPL_CID \
{ /* 2b07e3d7-00b3-4379-aa0b-ea22e2c8ffda */ \
0x2b07e3d7, \
0x00b3, \
0x4379, \
{ 0xaa, 0x0b, 0xea, 0x22, 0xe2, 0xc8, 0xff, 0xda } \
}
class nsAccessNode: public nsIAccessNode
class nsAccessNode: public nsISupports
{
public:
@ -84,10 +75,7 @@ public:
virtual ~nsAccessNode();
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsAccessNode, nsIAccessNode)
NS_DECL_NSIACCESSNODE
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ACCESSNODE_IMPL_CID)
NS_DECL_CYCLE_COLLECTION_CLASS(nsAccessNode)
static void InitXPAccessibility();
static void ShutdownXPAccessibility();
@ -134,18 +122,6 @@ public:
* Return frame for the given access node object.
*/
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.
*/
@ -195,6 +171,18 @@ public:
*/
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:
nsPresContext* GetPresContext();
@ -221,8 +209,5 @@ private:
static nsApplicationAccessible *gApplicationAccessible;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsAccessNode,
NS_ACCESSNODE_IMPL_CID)
#endif

View File

@ -52,11 +52,14 @@
#include "nsAccessibilityService.h"
#include "nsAccTreeWalker.h"
#include "nsIAccessibleRelation.h"
#include "nsRootAccessible.h"
#include "nsTextEquivUtils.h"
#include "Relation.h"
#include "Role.h"
#include "States.h"
#include "nsIDOMCSSValue.h"
#include "nsIDOMCSSPrimitiveValue.h"
#include "nsIDOMElement.h"
#include "nsIDOMDocument.h"
#include "nsIDOMDocumentXBL.h"
@ -229,6 +232,92 @@ nsAccessible::SetRoleMapEntry(nsRoleMapEntry* 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
nsAccessible::GetName(nsAString& aName)
{
@ -2200,6 +2289,32 @@ nsAccessible::DispatchClickEvent(nsIContent *aContent, PRUint32 aActionIndex)
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
NS_IMETHODIMP nsAccessible::GetSelectedChildren(nsIArray **aSelectedAccessibles)
{

View File

@ -129,6 +129,17 @@ public:
*/
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.
*/

View File

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

View File

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

View File

@ -191,7 +191,7 @@ public:
/**
* 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 aFrame the frame to scroll

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -413,6 +413,10 @@ pref("dom.sms.whitelist", "file://,http://localhost:6666");
// Ignore X-Frame-Options headers.
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
// of talos regression. This is a needed change for higher-framerate
// CSS animations, and incidentally works around an apparent bug in

View File

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

View File

@ -1,2 +1,7 @@
# Scrollbars
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
XPIDL_MODULE = B2GComponents
XPIDLSRCS = \
b2g.idl \
$(NULL)
EXTRA_PP_COMPONENTS = \
B2GComponents.manifest \
CameraContent.js \
$(NULL)
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@/components/B2GComponents.manifest
@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 {
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%;
}

View File

@ -293,7 +293,7 @@
.jsterm-input-node {
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,

View File

@ -87,6 +87,7 @@ browser.jar:
skin/classic/browser/tabview/tabview.css (tabview/tabview.css)
skin/classic/browser/devtools/common.css (devtools/common.css)
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/csshtmltree.css (devtools/csshtmltree.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 {
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%;
}

View File

@ -361,7 +361,7 @@
}
.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,

View File

@ -126,6 +126,7 @@ browser.jar:
skin/classic/browser/tabview/tabview.css (tabview/tabview.css)
* skin/classic/browser/devtools/common.css (devtools/common.css)
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/csshtmltree.css (devtools/csshtmltree.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 {
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%;
}

View File

@ -309,7 +309,7 @@
}
.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,

View File

@ -110,6 +110,7 @@ browser.jar:
skin/classic/browser/tabview/tabview.css (tabview/tabview.css)
skin/classic/browser/devtools/common.css (devtools/common.css)
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/csshtmltree.css (devtools/csshtmltree.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/devtools/common.css (devtools/common.css)
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/csshtmltree.css (devtools/csshtmltree.css)
skin/classic/aero/browser/devtools/gcli.css (devtools/gcli.css)

View File

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

View File

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

View File

@ -38,6 +38,7 @@
#include "nsIHTMLDocument.h"
#include "nsIDOMEventTarget.h"
#include "nsEventStateManager.h"
#include "nsEventStates.h"
#include "nsGkAtoms.h"
#include "nsStyleConsts.h"
#include "nsPresContext.h"
@ -1810,6 +1811,8 @@ nsHTMLFormElement::UpdateValidity(bool aElementValidity)
mControls->mNotInElements[i]->UpdateState(true);
}
}
UpdateState(true);
}
// nsIWebProgressListener
@ -2133,6 +2136,19 @@ nsHTMLFormElement::SetValueMissingState(const nsAString& aName, bool 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

View File

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

View File

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

View File

@ -296,6 +296,7 @@ _TEST_FILES = \
test_ol_attributes_reflection.html \
test_bug651956.html \
test_bug694503.html \
test_object_plugin_nav.html \
$(NULL)
_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(),
"Can only draw in drawing phase");
if (!mSurface) {
NS_WARNING("No valid surface to draw!");
return;
}
nsRefPtr<gfxPattern> pat = new gfxPattern(mSurface);
pat->SetFilter(mFilter);

View File

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

View File

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

View File

@ -317,6 +317,32 @@ var XPCOMUtils = {
let i = uri.lastIndexOf("/");
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;
};
}

View File

@ -50,7 +50,7 @@ const Ci = Components.interfaces;
////////////////////////////////////////////////////////////////////////////////
//// Tests
function test_generateQI_string_names()
add_test(function test_generateQI_string_names()
{
var x = {
QueryInterface: XPCOMUtils.generateQI([
@ -73,10 +73,11 @@ function test_generateQI_string_names()
x.QueryInterface(Components.interfaces.nsIDOMDocument);
do_throw("QI should not have succeeded!");
} catch(e) {}
}
run_next_test();
});
function test_generateCI()
add_test(function test_generateCI()
{
const classID = Components.ID("562dae2e-7cff-432b-995b-3d4c03fa2b89");
const classDescription = "generateCI test component";
@ -99,9 +100,10 @@ function test_generateCI()
} catch(e) {
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 obj = {
@ -124,10 +126,11 @@ function test_defineLazyGetter()
// increased.
do_check_eq(obj.foo, TEST_VALUE);
do_check_eq(accessCount, 1);
}
run_next_test();
});
function test_defineLazyServiceGetter()
add_test(function test_defineLazyServiceGetter()
{
let obj = { };
XPCOMUtils.defineLazyServiceGetter(obj, "service",
@ -142,10 +145,11 @@ function test_defineLazyServiceGetter()
do_check_true(prop in service);
for (let prop in 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 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.");
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
let tests = [
test_generateQI_string_names,
test_generateCI,
test_defineLazyGetter,
test_defineLazyServiceGetter,
test_categoryRegistration,
];
function run_test()
{
tests.forEach(function(test) {
print("Running next test: " + test.name);
test();
});
run_next_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>
<html class="reftest-wait">
<style>
:invalid {
input:invalid {
display: none;
}
</style>

View File

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

View File

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

View File

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

View File

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

View File

@ -66,6 +66,7 @@ endif
ifeq (gonk,$(MOZ_WIDGET_TOOLKIT))
CPPSRCS += GonkCaptureProvider.cpp \
nsB2GProtocolHandler.cpp \
$(NULL)
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