зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to s-c (including fixed conflict in Android Sync manifest).
--HG-- rename : mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml.in => mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_button.xml rename : mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml.in => mobile/android/base/resources/drawable-xlarge-mdpi-v11/tabs_level.xml rename : mobile/android/base/resources/drawable/tabs_button.xml.in => mobile/android/base/resources/drawable/tabs_button.xml rename : mobile/android/base/resources/drawable/tabs_level.xml.in => mobile/android/base/resources/drawable/tabs_level.xml
This commit is contained in:
Коммит
b8f7251de3
|
@ -13,31 +13,31 @@ namespace a11y {
|
|||
* Accessible object types used when creating an accessible based on the frame.
|
||||
*/
|
||||
enum AccType {
|
||||
eNoAccessible,
|
||||
eHTMLBRAccessible,
|
||||
eHTMLButtonAccessible,
|
||||
eHTMLCanvasAccessible,
|
||||
eHTMLCaptionAccessible,
|
||||
eHTMLCheckboxAccessible,
|
||||
eHTMLComboboxAccessible,
|
||||
eHTMLFileInputAccessible,
|
||||
eHTMLGroupboxAccessible,
|
||||
eHTMLHRAccessible,
|
||||
eHTMLImageMapAccessible,
|
||||
eHTMLLabelAccessible,
|
||||
eHTMLLiAccessible,
|
||||
eHTMLSelectListAccessible,
|
||||
eHTMLMediaAccessible,
|
||||
eHTMLObjectFrameAccessible,
|
||||
eHTMLRadioButtonAccessible,
|
||||
eHTMLTableAccessible,
|
||||
eHTMLTableCellAccessible,
|
||||
eHTMLTableRowAccessible,
|
||||
eHTMLTextFieldAccessible,
|
||||
eHyperTextAccessible,
|
||||
eImageAccessible,
|
||||
eOuterDocAccessible,
|
||||
eTextLeafAccessible
|
||||
eNoType,
|
||||
eHTMLBR,
|
||||
eHTMLButton,
|
||||
eHTMLCanvas,
|
||||
eHTMLCaption,
|
||||
eHTMLCheckbox,
|
||||
eHTMLCombobox,
|
||||
eHTMLFileInput,
|
||||
eHTMLGroupbox,
|
||||
eHTMLHR,
|
||||
eHTMLImageMap,
|
||||
eHTMLLabel,
|
||||
eHTMLLi,
|
||||
eHTMLSelectList,
|
||||
eHTMLMedia,
|
||||
eHTMLRadioButton,
|
||||
eHTMLTable,
|
||||
eHTMLTableCell,
|
||||
eHTMLTableRow,
|
||||
eHTMLTextField,
|
||||
eHyperText,
|
||||
eImage,
|
||||
eOuterDoc,
|
||||
ePlugin,
|
||||
eTextLeaf
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -207,9 +207,9 @@ nsAccessibilityService::GetRootDocumentAccessible(nsIPresShell* aPresShell,
|
|||
}
|
||||
|
||||
already_AddRefed<Accessible>
|
||||
nsAccessibilityService::CreateHTMLObjectFrameAccessible(nsObjectFrame* aFrame,
|
||||
nsIContent* aContent,
|
||||
Accessible* aContext)
|
||||
nsAccessibilityService::CreatePluginAccessible(nsObjectFrame* aFrame,
|
||||
nsIContent* aContent,
|
||||
Accessible* aContext)
|
||||
{
|
||||
// nsObjectFrame means a plugin, so we need to use the accessibility support
|
||||
// of the plugin.
|
||||
|
@ -799,13 +799,13 @@ nsAccessibilityService::GetOrCreateAccessible(nsINode* aNode,
|
|||
// on accessible HTML table elements.
|
||||
if ((roleMapEntry->accTypes & Accessible::eTableCellAccessible)) {
|
||||
if (aContext->IsOfType(Accessible::eTableRowAccessible) &&
|
||||
(frame->AccessibleType() != eHTMLTableCellAccessible ||
|
||||
(frame->AccessibleType() != eHTMLTableCell ||
|
||||
aContext->GetContent() != content->GetParent())) {
|
||||
newAcc = new ARIAGridCellAccessibleWrap(content, document);
|
||||
}
|
||||
|
||||
} else if ((roleMapEntry->accTypes & Accessible::eTableAccessible) &&
|
||||
frame->AccessibleType() != eHTMLTableAccessible) {
|
||||
frame->AccessibleType() != eHTMLTable) {
|
||||
newAcc = new ARIAGridAccessibleWrap(content, document);
|
||||
}
|
||||
}
|
||||
|
@ -822,20 +822,20 @@ nsAccessibilityService::GetOrCreateAccessible(nsINode* aNode,
|
|||
// If table has strong ARIA role then all table descendants shouldn't
|
||||
// expose their native roles.
|
||||
if (!roleMapEntry && newAcc) {
|
||||
if (frame->AccessibleType() == eHTMLTableRowAccessible) {
|
||||
if (frame->AccessibleType() == eHTMLTableRow) {
|
||||
nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
|
||||
if (contextRoleMap &&
|
||||
!(contextRoleMap->accTypes & Accessible::eTableAccessible))
|
||||
roleMapEntry = &nsARIAMap::gEmptyRoleMap;
|
||||
|
||||
} else if (frame->AccessibleType() == eHTMLTableCellAccessible &&
|
||||
} else if (frame->AccessibleType() == eHTMLTableCell &&
|
||||
aContext->ARIARoleMap() == &nsARIAMap::gEmptyRoleMap) {
|
||||
roleMapEntry = &nsARIAMap::gEmptyRoleMap;
|
||||
|
||||
} else if (content->Tag() == nsGkAtoms::dt ||
|
||||
content->Tag() == nsGkAtoms::li ||
|
||||
content->Tag() == nsGkAtoms::dd ||
|
||||
frame->AccessibleType() == eHTMLLiAccessible) {
|
||||
frame->AccessibleType() == eHTMLLi) {
|
||||
nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
|
||||
if (contextRoleMap &&
|
||||
!(contextRoleMap->accTypes & Accessible::eListAccessible))
|
||||
|
@ -1306,75 +1306,69 @@ nsAccessibilityService::CreateAccessibleByFrameType(nsIFrame* aFrame,
|
|||
|
||||
nsRefPtr<Accessible> newAcc;
|
||||
switch (aFrame->AccessibleType()) {
|
||||
case eNoAccessible:
|
||||
case eNoType:
|
||||
return nullptr;
|
||||
case eHTMLBRAccessible:
|
||||
case eHTMLBR:
|
||||
newAcc = new HTMLBRAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLButtonAccessible:
|
||||
case eHTMLButton:
|
||||
newAcc = new HTMLButtonAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLCanvasAccessible:
|
||||
case eHTMLCanvas:
|
||||
newAcc = new HTMLCanvasAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLCaptionAccessible:
|
||||
case eHTMLCaption:
|
||||
if (aContext->IsOfType(Accessible::eTableAccessible) &&
|
||||
aContext->GetContent() == aContent->GetParent()) {
|
||||
newAcc = new HTMLCaptionAccessible(aContent, document);
|
||||
}
|
||||
break;
|
||||
case eHTMLCheckboxAccessible:
|
||||
case eHTMLCheckbox:
|
||||
newAcc = new HTMLCheckboxAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLComboboxAccessible:
|
||||
case eHTMLCombobox:
|
||||
newAcc = new HTMLComboboxAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLFileInputAccessible:
|
||||
case eHTMLFileInput:
|
||||
newAcc = new HTMLFileInputAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLGroupboxAccessible:
|
||||
case eHTMLGroupbox:
|
||||
newAcc = new HTMLGroupboxAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLHRAccessible:
|
||||
case eHTMLHR:
|
||||
newAcc = new HTMLHRAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLImageMapAccessible:
|
||||
case eHTMLImageMap:
|
||||
newAcc = new HTMLImageMapAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLLabelAccessible:
|
||||
case eHTMLLabel:
|
||||
newAcc = new HTMLLabelAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLLiAccessible:
|
||||
case eHTMLLi:
|
||||
if (aContext->IsOfType(Accessible::eListAccessible) &&
|
||||
aContext->GetContent() == aContent->GetParent()) {
|
||||
newAcc = new HTMLLIAccessible(aContent, document);
|
||||
}
|
||||
break;
|
||||
case eHTMLSelectListAccessible:
|
||||
case eHTMLSelectList:
|
||||
newAcc = new HTMLSelectListAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLMediaAccessible:
|
||||
case eHTMLMedia:
|
||||
newAcc = new EnumRoleAccessible(aContent, document, roles::GROUPING);
|
||||
break;
|
||||
case eHTMLObjectFrameAccessible: {
|
||||
nsObjectFrame* objectFrame = do_QueryFrame(aFrame);
|
||||
newAcc = CreateHTMLObjectFrameAccessible(objectFrame, aContent, aContext);
|
||||
break;
|
||||
}
|
||||
|
||||
case eHTMLRadioButtonAccessible:
|
||||
case eHTMLRadioButton:
|
||||
newAcc = new HTMLRadioButtonAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLTableAccessible:
|
||||
case eHTMLTable:
|
||||
newAcc = new HTMLTableAccessibleWrap(aContent, document);
|
||||
break;
|
||||
case eHTMLTableCellAccessible:
|
||||
case eHTMLTableCell:
|
||||
// Accessible HTML table cell must be a child of accessible HTML table row.
|
||||
if (aContext->IsOfType(Accessible::eHTMLTableRowAccessible))
|
||||
newAcc = new HTMLTableCellAccessibleWrap(aContent, document);
|
||||
break;
|
||||
|
||||
case eHTMLTableRowAccessible: {
|
||||
case eHTMLTableRow: {
|
||||
// Accessible HTML table row must be a child of tbody/tfoot/thead of
|
||||
// accessible HTML table or must be a child of accessible of HTML table.
|
||||
if (aContext->IsOfType(Accessible::eTableAccessible)) {
|
||||
|
@ -1392,21 +1386,26 @@ nsAccessibilityService::CreateAccessibleByFrameType(nsIFrame* aFrame,
|
|||
}
|
||||
break;
|
||||
}
|
||||
case eHTMLTextFieldAccessible:
|
||||
case eHTMLTextField:
|
||||
newAcc = new HTMLTextFieldAccessible(aContent, document);
|
||||
break;
|
||||
case eHyperTextAccessible:
|
||||
case eHyperText:
|
||||
if (aContent->Tag() != nsGkAtoms::dt && aContent->Tag() != nsGkAtoms::dd)
|
||||
newAcc = new HyperTextAccessibleWrap(aContent, document);
|
||||
break;
|
||||
|
||||
case eImageAccessible:
|
||||
case eImage:
|
||||
newAcc = new ImageAccessibleWrap(aContent, document);
|
||||
break;
|
||||
case eOuterDocAccessible:
|
||||
case eOuterDoc:
|
||||
newAcc = new OuterDocAccessible(aContent, document);
|
||||
break;
|
||||
case eTextLeafAccessible:
|
||||
case ePlugin: {
|
||||
nsObjectFrame* objectFrame = do_QueryFrame(aFrame);
|
||||
newAcc = CreatePluginAccessible(objectFrame, aContent, aContext);
|
||||
break;
|
||||
}
|
||||
case eTextLeaf:
|
||||
newAcc = new TextLeafAccessibleWrap(aContent, document);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -54,8 +54,8 @@ public:
|
|||
virtual Accessible* GetRootDocumentAccessible(nsIPresShell* aPresShell,
|
||||
bool aCanCreate);
|
||||
already_AddRefed<Accessible>
|
||||
CreateHTMLObjectFrameAccessible(nsObjectFrame* aFrame, nsIContent* aContent,
|
||||
Accessible* aContext);
|
||||
CreatePluginAccessible(nsObjectFrame* aFrame, nsIContent* aContent,
|
||||
Accessible* aContext);
|
||||
|
||||
/**
|
||||
* Adds/remove ATK root accessible for gtk+ native window to/from children
|
||||
|
|
|
@ -42,7 +42,7 @@ Accessible::SetRoleMapEntry(nsRoleMapEntry* aRoleMapEntry)
|
|||
inline bool
|
||||
Accessible::HasNumericValue() const
|
||||
{
|
||||
if (mFlags & eHasNumericValue)
|
||||
if (mStateFlags & eHasNumericValue)
|
||||
return true;
|
||||
|
||||
return mRoleMapEntry && mRoleMapEntry->valueRule != eNoValue;
|
||||
|
|
|
@ -145,8 +145,8 @@ Accessible::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
|||
|
||||
Accessible::Accessible(nsIContent* aContent, DocAccessible* aDoc) :
|
||||
nsAccessNodeWrap(aContent, aDoc),
|
||||
mParent(nullptr), mIndexInParent(-1), mFlags(eChildrenUninitialized),
|
||||
mIndexOfEmbeddedChild(-1), mRoleMapEntry(nullptr)
|
||||
mParent(nullptr), mIndexInParent(-1), mChildrenFlags(eChildrenUninitialized),
|
||||
mStateFlags(0), mFlags(0), mIndexOfEmbeddedChild(-1), mRoleMapEntry(nullptr)
|
||||
{
|
||||
#ifdef NS_DEBUG_X
|
||||
{
|
||||
|
@ -2430,7 +2430,7 @@ Accessible::Shutdown()
|
|||
{
|
||||
// Mark the accessible as defunct, invalidate the child count and pointers to
|
||||
// other accessibles, also make sure none of its children point to this parent
|
||||
mFlags |= eIsDefunct;
|
||||
mStateFlags |= eIsDefunct;
|
||||
|
||||
InvalidateChildren();
|
||||
if (mParent)
|
||||
|
|
|
@ -678,23 +678,24 @@ public:
|
|||
/**
|
||||
* Return true if the accessible is defunct.
|
||||
*/
|
||||
bool IsDefunct() const { return mFlags & eIsDefunct; }
|
||||
bool IsDefunct() const { return mStateFlags & eIsDefunct; }
|
||||
|
||||
/**
|
||||
* Return true if the accessible is no longer in the document.
|
||||
*/
|
||||
bool IsInDocument() const { return !(mFlags & eIsNotInDocument); }
|
||||
bool IsInDocument() const { return !(mStateFlags & eIsNotInDocument); }
|
||||
|
||||
/**
|
||||
* Return true if the accessible should be contained by document node map.
|
||||
*/
|
||||
bool IsNodeMapEntry() const
|
||||
{ return HasOwnContent() && !(mFlags & eNotNodeMapEntry); }
|
||||
{ return HasOwnContent() && !(mStateFlags & eNotNodeMapEntry); }
|
||||
|
||||
/**
|
||||
* Return true if the accessible has associated DOM content.
|
||||
*/
|
||||
bool HasOwnContent() const { return mContent && !(mFlags & eSharedNode); }
|
||||
bool HasOwnContent() const
|
||||
{ return mContent && !(mStateFlags & eSharedNode); }
|
||||
|
||||
/**
|
||||
* Return true if accessible is of given type.
|
||||
|
@ -752,25 +753,24 @@ protected:
|
|||
/**
|
||||
* Return true if the children flag is set.
|
||||
*/
|
||||
inline bool IsChildrenFlag(ChildrenFlags aFlag) const
|
||||
{ return static_cast<ChildrenFlags> (mFlags & kChildrenFlagsMask) == aFlag; }
|
||||
bool IsChildrenFlag(ChildrenFlags aFlag) const
|
||||
{ return static_cast<ChildrenFlags>(mChildrenFlags) == aFlag; }
|
||||
|
||||
/**
|
||||
* Set children flag.
|
||||
*/
|
||||
inline void SetChildrenFlag(ChildrenFlags aFlag)
|
||||
{ mFlags = (mFlags & ~kChildrenFlagsMask) | aFlag; }
|
||||
void SetChildrenFlag(ChildrenFlags aFlag) { mChildrenFlags = aFlag; }
|
||||
|
||||
/**
|
||||
* Flags used to describe the state of this accessible.
|
||||
* @note keep these flags in sync with ChildrenFlags
|
||||
*/
|
||||
enum StateFlags {
|
||||
eIsDefunct = 1 << 2, // accessible is defunct
|
||||
eIsNotInDocument = 1 << 3, // accessible is not in document
|
||||
eSharedNode = 1 << 4, // accessible shares DOM node from another accessible
|
||||
eNotNodeMapEntry = 1 << 5, // accessible shouldn't be in document node map
|
||||
eHasNumericValue = 1 << 6 // accessible has a numeric value
|
||||
eIsDefunct = 1 << 0, // accessible is defunct
|
||||
eIsNotInDocument = 1 << 1, // accessible is not in document
|
||||
eSharedNode = 1 << 2, // accessible shares DOM node from another accessible
|
||||
eNotNodeMapEntry = 1 << 3, // accessible shouldn't be in document node map
|
||||
eHasNumericValue = 1 << 4 // accessible has a numeric value
|
||||
};
|
||||
|
||||
public: // XXX: a small hack to make these visible for nsARIAMap
|
||||
|
@ -779,30 +779,30 @@ public: // XXX: a small hack to make these visible for nsARIAMap
|
|||
* @note keep these flags in sync with ChildrenFlags and StateFlags
|
||||
*/
|
||||
enum AccessibleTypes {
|
||||
eApplicationAccessible = 1 << 7,
|
||||
eAutoCompleteAccessible = 1 << 8,
|
||||
eAutoCompletePopupAccessible = 1 << 9,
|
||||
eComboboxAccessible = 1 << 10,
|
||||
eDocAccessible = 1 << 11,
|
||||
eHyperTextAccessible = 1 << 12,
|
||||
eHTMLFileInputAccessible = 1 << 13,
|
||||
eHTMLListItemAccessible = 1 << 14,
|
||||
eHTMLTableRowAccessible = 1 << 15,
|
||||
eImageAccessible = 1 << 16,
|
||||
eImageMapAccessible = 1 << 17,
|
||||
eListAccessible = 1 << 18,
|
||||
eListControlAccessible = 1 << 19,
|
||||
eMenuButtonAccessible = 1 << 20,
|
||||
eMenuPopupAccessible = 1 << 21,
|
||||
eProgressAccessible = 1 << 22,
|
||||
eRootAccessible = 1 << 23,
|
||||
eSelectAccessible = 1 << 24,
|
||||
eTableAccessible = 1 << 25,
|
||||
eTableCellAccessible = 1 << 26,
|
||||
eTableRowAccessible = 1 << 27,
|
||||
eTextLeafAccessible = 1 << 28,
|
||||
eXULDeckAccessible = 1 << 29,
|
||||
eXULTreeAccessible = 1 << 30
|
||||
eApplicationAccessible = 1 << 0,
|
||||
eAutoCompleteAccessible = 1 << 1,
|
||||
eAutoCompletePopupAccessible = 1 << 2,
|
||||
eComboboxAccessible = 1 << 3,
|
||||
eDocAccessible = 1 << 4,
|
||||
eHyperTextAccessible = 1 << 5,
|
||||
eHTMLFileInputAccessible = 1 << 6,
|
||||
eHTMLListItemAccessible = 1 << 7,
|
||||
eHTMLTableRowAccessible = 1 << 8,
|
||||
eImageAccessible = 1 << 9,
|
||||
eImageMapAccessible = 1 << 10,
|
||||
eListAccessible = 1 << 11,
|
||||
eListControlAccessible = 1 << 12,
|
||||
eMenuButtonAccessible = 1 << 13,
|
||||
eMenuPopupAccessible = 1 << 14,
|
||||
eProgressAccessible = 1 << 15,
|
||||
eRootAccessible = 1 << 16,
|
||||
eSelectAccessible = 1 << 17,
|
||||
eTableAccessible = 1 << 18,
|
||||
eTableCellAccessible = 1 << 19,
|
||||
eTableRowAccessible = 1 << 20,
|
||||
eTextLeafAccessible = 1 << 21,
|
||||
eXULDeckAccessible = 1 << 22,
|
||||
eXULTreeAccessible = 1 << 23
|
||||
};
|
||||
|
||||
protected:
|
||||
|
@ -909,10 +909,13 @@ protected:
|
|||
nsTArray<nsRefPtr<Accessible> > mChildren;
|
||||
int32_t mIndexInParent;
|
||||
|
||||
static const uint32_t kChildrenFlagsMask =
|
||||
eChildrenUninitialized | eMixedChildren | eEmbeddedChildren;
|
||||
/**
|
||||
* Keep in sync with ChildrenFlags, StateFlags and AccessibleTypes.
|
||||
*/
|
||||
uint32_t mChildrenFlags : 2;
|
||||
uint32_t mStateFlags : 5;
|
||||
uint32_t mFlags : 25;
|
||||
|
||||
uint32_t mFlags;
|
||||
friend class DocAccessible;
|
||||
|
||||
nsAutoPtr<mozilla::a11y::EmbeddedObjCollector> mEmbeddedObjCollector;
|
||||
|
|
|
@ -79,7 +79,9 @@ DocAccessible::
|
|||
mVirtualCursor(nullptr),
|
||||
mPresShell(aPresShell)
|
||||
{
|
||||
mFlags |= eDocAccessible | eNotNodeMapEntry;
|
||||
mFlags |= eDocAccessible;
|
||||
mStateFlags |= eNotNodeMapEntry;
|
||||
|
||||
MOZ_ASSERT(mPresShell, "should have been given a pres shell");
|
||||
mPresShell->SetDocAccessible(this);
|
||||
|
||||
|
@ -613,7 +615,7 @@ DocAccessible::Shutdown()
|
|||
// Mark the document as shutdown before AT is notified about the document
|
||||
// removal from its container (valid for root documents on ATK and due to
|
||||
// some reason for MSAA, refer to bug 757392 for details).
|
||||
mFlags |= eIsDefunct;
|
||||
mStateFlags |= eIsDefunct;
|
||||
nsCOMPtr<nsIDocument> kungFuDeathGripDoc = mDocumentNode;
|
||||
mDocumentNode = nullptr;
|
||||
|
||||
|
@ -1941,7 +1943,7 @@ DocAccessible::CacheChildrenInSubtree(Accessible* aRoot)
|
|||
void
|
||||
DocAccessible::UncacheChildrenInSubtree(Accessible* aRoot)
|
||||
{
|
||||
aRoot->mFlags |= eIsNotInDocument;
|
||||
aRoot->mStateFlags |= eIsNotInDocument;
|
||||
|
||||
if (aRoot->IsElement())
|
||||
RemoveDependentIDsFor(aRoot);
|
||||
|
|
|
@ -21,7 +21,8 @@ public:
|
|||
ProgressMeterAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
||||
LeafAccessible(aContent, aDoc)
|
||||
{
|
||||
mFlags |= eHasNumericValue | eProgressAccessible;
|
||||
mStateFlags |= eHasNumericValue;
|
||||
mFlags |= eProgressAccessible;
|
||||
}
|
||||
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
|
|
|
@ -153,7 +153,7 @@ HTMLAreaAccessible::
|
|||
{
|
||||
// Make HTML area DOM element not accessible. HTML image map accessible
|
||||
// manages its tree itself.
|
||||
mFlags |= eNotNodeMapEntry;
|
||||
mStateFlags |= eNotNodeMapEntry;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -145,7 +145,7 @@ HTMLListBulletAccessible::
|
|||
HTMLListBulletAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
||||
LeafAccessible(aContent, aDoc)
|
||||
{
|
||||
mFlags |= eSharedNode;
|
||||
mStateFlags |= eSharedNode;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -620,7 +620,7 @@ HTMLComboboxListAccessible::
|
|||
DocAccessible* aDoc) :
|
||||
HTMLSelectListAccessible(aContent, aDoc)
|
||||
{
|
||||
mFlags |= eSharedNode;
|
||||
mStateFlags |= eSharedNode;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -30,12 +30,13 @@
|
|||
#include "nsIDocument.h"
|
||||
#include "nsIMutableArray.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsITableLayout.h"
|
||||
#include "nsITableCellLayout.h"
|
||||
#include "nsFrameSelection.h"
|
||||
#include "nsError.h"
|
||||
#include "nsArrayUtils.h"
|
||||
#include "nsComponentManagerUtils.h"
|
||||
#include "nsTableCellFrame.h"
|
||||
#include "nsTableOuterFrame.h"
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::a11y;
|
||||
|
@ -121,9 +122,11 @@ HTMLTableCellAccessible::NativeAttributes()
|
|||
if (ChildCount() == 1) {
|
||||
Accessible* abbr = FirstChild();
|
||||
if (abbr->IsAbbreviation()) {
|
||||
nsTextEquivUtils::
|
||||
AppendTextEquivFromTextContent(abbr->GetContent()->GetFirstChild(),
|
||||
&abbrText);
|
||||
nsIContent* firstChildNode = abbr->GetContent()->GetFirstChild();
|
||||
if (firstChildNode) {
|
||||
nsTextEquivUtils::
|
||||
AppendTextEquivFromTextContent(firstChildNode, &abbrText);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (abbrText.IsEmpty())
|
||||
|
@ -469,52 +472,35 @@ HTMLTableAccessible::Summary(nsString& aSummary)
|
|||
uint32_t
|
||||
HTMLTableAccessible::ColCount()
|
||||
{
|
||||
nsITableLayout* tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
return 0;
|
||||
|
||||
int32_t rowCount = 0, colCount = 0;
|
||||
tableLayout->GetTableSize(rowCount, colCount);
|
||||
return colCount;
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
return tableFrame ? tableFrame->GetColCount() : 0;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
HTMLTableAccessible::RowCount()
|
||||
{
|
||||
nsITableLayout* tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
return 0;
|
||||
|
||||
int32_t rowCount = 0, colCount = 0;
|
||||
tableLayout->GetTableSize(rowCount, colCount);
|
||||
return rowCount;
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
return tableFrame ? tableFrame->GetRowCount() : 0;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
HTMLTableAccessible::SelectedCellCount()
|
||||
{
|
||||
nsITableLayout *tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return 0;
|
||||
|
||||
uint32_t count = 0, rowCount = RowCount(), colCount = ColCount();
|
||||
|
||||
nsCOMPtr<nsIDOMElement> domElement;
|
||||
int32_t startRowIndex = 0, startColIndex = 0,
|
||||
rowSpan, colSpan, actualRowSpan, actualColSpan;
|
||||
bool isSelected = false;
|
||||
|
||||
for (uint32_t rowIdx = 0; rowIdx < rowCount; rowIdx++) {
|
||||
for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
|
||||
nsresult rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
|
||||
*getter_AddRefs(domElement),
|
||||
startRowIndex, startColIndex,
|
||||
rowSpan, colSpan,
|
||||
actualRowSpan, actualColSpan,
|
||||
isSelected);
|
||||
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
|
||||
if (!cellFrame || !cellFrame->IsSelected())
|
||||
continue;
|
||||
|
||||
if (NS_SUCCEEDED(rv) && startRowIndex == rowIdx &&
|
||||
startColIndex == colIdx && isSelected)
|
||||
int32_t startRow = -1, startCol = -1;
|
||||
cellFrame->GetRowIndex(startRow);
|
||||
cellFrame->GetColIndex(startCol);
|
||||
if (startRow == rowIdx && startCol == colIdx)
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -549,32 +535,25 @@ HTMLTableAccessible::SelectedRowCount()
|
|||
void
|
||||
HTMLTableAccessible::SelectedCells(nsTArray<Accessible*>* aCells)
|
||||
{
|
||||
uint32_t rowCount = RowCount(), colCount = ColCount();
|
||||
|
||||
nsITableLayout *tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return;
|
||||
|
||||
nsCOMPtr<nsIDOMElement> cellElement;
|
||||
int32_t startRowIndex = 0, startColIndex = 0,
|
||||
rowSpan, colSpan, actualRowSpan, actualColSpan;
|
||||
bool isSelected = false;
|
||||
|
||||
uint32_t rowCount = RowCount(), colCount = ColCount();
|
||||
for (uint32_t rowIdx = 0; rowIdx < rowCount; rowIdx++) {
|
||||
for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
|
||||
nsresult rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
|
||||
*getter_AddRefs(cellElement),
|
||||
startRowIndex, startColIndex,
|
||||
rowSpan, colSpan,
|
||||
actualRowSpan, actualColSpan,
|
||||
isSelected);
|
||||
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
|
||||
if (!cellFrame || !cellFrame->IsSelected())
|
||||
continue;
|
||||
|
||||
if (NS_SUCCEEDED(rv) && startRowIndex == rowIdx &&
|
||||
startColIndex == colIdx && isSelected) {
|
||||
nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElement));
|
||||
Accessible* cell = mDoc->GetAccessible(cellContent);
|
||||
int32_t startCol = -1, startRow = -1;
|
||||
cellFrame->GetRowIndex(startRow);
|
||||
cellFrame->GetColIndex(startCol);
|
||||
if (startRow != rowIdx || startCol != colIdx)
|
||||
continue;
|
||||
|
||||
Accessible* cell = mDoc->GetAccessible(cellFrame->GetContent());
|
||||
aCells->AppendElement(cell);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -582,28 +561,21 @@ HTMLTableAccessible::SelectedCells(nsTArray<Accessible*>* aCells)
|
|||
void
|
||||
HTMLTableAccessible::SelectedCellIndices(nsTArray<uint32_t>* aCells)
|
||||
{
|
||||
nsITableLayout *tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return;
|
||||
|
||||
uint32_t rowCount = RowCount(), colCount = ColCount();
|
||||
|
||||
nsCOMPtr<nsIDOMElement> domElement;
|
||||
int32_t startRowIndex = 0, startColIndex = 0,
|
||||
rowSpan, colSpan, actualRowSpan, actualColSpan;
|
||||
bool isSelected = false;
|
||||
|
||||
for (uint32_t rowIdx = 0; rowIdx < rowCount; rowIdx++) {
|
||||
for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
|
||||
nsresult rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
|
||||
*getter_AddRefs(domElement),
|
||||
startRowIndex, startColIndex,
|
||||
rowSpan, colSpan,
|
||||
actualRowSpan, actualColSpan,
|
||||
isSelected);
|
||||
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
|
||||
if (!cellFrame || !cellFrame->IsSelected())
|
||||
continue;
|
||||
|
||||
if (NS_SUCCEEDED(rv) && startRowIndex == rowIdx &&
|
||||
startColIndex == colIdx && isSelected)
|
||||
int32_t startRow = -1, startCol = -1;
|
||||
cellFrame->GetColIndex(startCol);
|
||||
cellFrame->GetRowIndex(startRow);
|
||||
if (startRow == rowIdx && startCol == colIdx)
|
||||
aCells->AppendElement(CellIndexAt(rowIdx, colIdx));
|
||||
}
|
||||
}
|
||||
|
@ -628,17 +600,13 @@ HTMLTableAccessible::SelectedRowIndices(nsTArray<uint32_t>* aRows)
|
|||
}
|
||||
|
||||
Accessible*
|
||||
HTMLTableAccessible::CellAt(uint32_t aRowIndex, uint32_t aColumnIndex)
|
||||
{
|
||||
nsCOMPtr<nsIDOMElement> cellElement;
|
||||
GetCellAt(aRowIndex, aColumnIndex, *getter_AddRefs(cellElement));
|
||||
if (!cellElement)
|
||||
return nullptr;
|
||||
|
||||
nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElement));
|
||||
if (!cellContent)
|
||||
HTMLTableAccessible::CellAt(uint32_t aRowIdx, uint32_t aColIdx)
|
||||
{
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return nullptr;
|
||||
|
||||
nsIContent* cellContent = tableFrame->GetCellAt(aRowIdx, aColIdx);
|
||||
Accessible* cell = mDoc->GetAccessible(cellContent);
|
||||
|
||||
// XXX bug 576838: crazy tables (like table6 in tables/test_table2.html) may
|
||||
|
@ -649,34 +617,34 @@ HTMLTableAccessible::CellAt(uint32_t aRowIndex, uint32_t aColumnIndex)
|
|||
int32_t
|
||||
HTMLTableAccessible::CellIndexAt(uint32_t aRowIdx, uint32_t aColIdx)
|
||||
{
|
||||
nsITableLayout* tableLayout = GetTableLayout();
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return -1;
|
||||
|
||||
int32_t index = -1;
|
||||
tableLayout->GetIndexByRowAndColumn(aRowIdx, aColIdx, &index);
|
||||
return index;
|
||||
return tableFrame->GetIndexByRowAndColumn(aRowIdx, aColIdx);
|
||||
}
|
||||
|
||||
int32_t
|
||||
HTMLTableAccessible::ColIndexAt(uint32_t aCellIdx)
|
||||
{
|
||||
nsITableLayout* tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return -1;
|
||||
|
||||
int32_t rowIdx = -1, colIdx = -1;
|
||||
tableLayout->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
|
||||
tableFrame->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
|
||||
return colIdx;
|
||||
}
|
||||
|
||||
int32_t
|
||||
HTMLTableAccessible::RowIndexAt(uint32_t aCellIdx)
|
||||
{
|
||||
nsITableLayout* tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return -1;
|
||||
|
||||
int32_t rowIdx = -1, colIdx = -1;
|
||||
tableLayout->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
|
||||
tableFrame->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
|
||||
return rowIdx;
|
||||
}
|
||||
|
||||
|
@ -684,52 +652,29 @@ void
|
|||
HTMLTableAccessible::RowAndColIndicesAt(uint32_t aCellIdx, int32_t* aRowIdx,
|
||||
int32_t* aColIdx)
|
||||
{
|
||||
nsITableLayout* tableLayout = GetTableLayout();
|
||||
|
||||
if (tableLayout)
|
||||
tableLayout->GetRowAndColumnByIndex(aCellIdx, aRowIdx, aColIdx);
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (tableFrame)
|
||||
tableFrame->GetRowAndColumnByIndex(aCellIdx, aRowIdx, aColIdx);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
HTMLTableAccessible::ColExtentAt(uint32_t aRowIdx, uint32_t aColIdx)
|
||||
{
|
||||
nsITableLayout* tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return 0;
|
||||
|
||||
nsCOMPtr<nsIDOMElement> domElement;
|
||||
int32_t startRowIndex, startColIndex, rowSpan, colSpan, actualRowSpan;
|
||||
bool isSelected;
|
||||
int32_t columnExtent = 0;
|
||||
|
||||
DebugOnly<nsresult> rv = tableLayout->
|
||||
GetCellDataAt(aRowIdx, aColIdx, *getter_AddRefs(domElement),
|
||||
startRowIndex, startColIndex, rowSpan, colSpan,
|
||||
actualRowSpan, columnExtent, isSelected);
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv), "Could not get cell data");
|
||||
|
||||
return columnExtent;
|
||||
return tableFrame->GetEffectiveColSpanAt(aRowIdx, aColIdx);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
HTMLTableAccessible::RowExtentAt(uint32_t aRowIdx, uint32_t aColIdx)
|
||||
{
|
||||
nsITableLayout* tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return 0;
|
||||
|
||||
nsCOMPtr<nsIDOMElement> domElement;
|
||||
int32_t startRowIndex, startColIndex, rowSpan, colSpan, actualColSpan;
|
||||
bool isSelected;
|
||||
int32_t rowExtent = 0;
|
||||
|
||||
DebugOnly<nsresult> rv = tableLayout->
|
||||
GetCellDataAt(aRowIdx, aColIdx, *getter_AddRefs(domElement),
|
||||
startRowIndex, startColIndex, rowSpan, colSpan,
|
||||
rowExtent, actualColSpan, isSelected);
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv), "Could not get cell data");
|
||||
|
||||
return rowExtent;
|
||||
return tableFrame->GetEffectiveRowSpanAt(aRowIdx, aColIdx);
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -765,20 +710,12 @@ HTMLTableAccessible::IsRowSelected(uint32_t aRowIdx)
|
|||
bool
|
||||
HTMLTableAccessible::IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx)
|
||||
{
|
||||
nsITableLayout *tableLayout = GetTableLayout();
|
||||
if (!tableLayout)
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return false;
|
||||
|
||||
nsCOMPtr<nsIDOMElement> domElement;
|
||||
int32_t startRowIndex = 0, startColIndex = 0,
|
||||
rowSpan, colSpan, actualRowSpan, actualColSpan;
|
||||
bool isSelected = false;
|
||||
|
||||
tableLayout->GetCellDataAt(aRowIdx, aColIdx, *getter_AddRefs(domElement),
|
||||
startRowIndex, startColIndex, rowSpan, colSpan,
|
||||
actualRowSpan, actualColSpan, isSelected);
|
||||
|
||||
return isSelected;
|
||||
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(aRowIdx, aColIdx);
|
||||
return cellFrame ? cellFrame->IsSelected() : false;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -828,40 +765,26 @@ HTMLTableAccessible::AddRowOrColumnToSelection(int32_t aIndex, uint32_t aTarget)
|
|||
{
|
||||
bool doSelectRow = (aTarget == nsISelectionPrivate::TABLESELECTION_ROW);
|
||||
|
||||
nsITableLayout *tableLayout = GetTableLayout();
|
||||
NS_ENSURE_STATE(tableLayout);
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMElement> cellElm;
|
||||
int32_t startRowIdx, startColIdx, rowSpan, colSpan,
|
||||
actualRowSpan, actualColSpan;
|
||||
bool isSelected = false;
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
int32_t count = 0;
|
||||
uint32_t count = 0;
|
||||
if (doSelectRow)
|
||||
rv = GetColumnCount(&count);
|
||||
count = ColCount();
|
||||
else
|
||||
rv = GetRowCount(&count);
|
||||
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
count = RowCount();
|
||||
|
||||
nsIPresShell* presShell(mDoc->PresShell());
|
||||
nsRefPtr<nsFrameSelection> tableSelection =
|
||||
const_cast<nsFrameSelection*>(presShell->ConstFrameSelection());
|
||||
|
||||
for (int32_t idx = 0; idx < count; idx++) {
|
||||
for (uint32_t idx = 0; idx < count; idx++) {
|
||||
int32_t rowIdx = doSelectRow ? aIndex : idx;
|
||||
int32_t colIdx = doSelectRow ? idx : aIndex;
|
||||
rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
|
||||
*getter_AddRefs(cellElm),
|
||||
startRowIdx, startColIdx,
|
||||
rowSpan, colSpan,
|
||||
actualRowSpan, actualColSpan,
|
||||
isSelected);
|
||||
|
||||
if (NS_SUCCEEDED(rv) && !isSelected) {
|
||||
nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElm));
|
||||
rv = tableSelection->SelectCellElement(cellContent);
|
||||
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
|
||||
if (cellFrame && !cellFrame->IsSelected()) {
|
||||
nsresult rv = tableSelection->SelectCellElement(cellFrame->GetContent());
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
}
|
||||
|
@ -874,17 +797,16 @@ HTMLTableAccessible::RemoveRowsOrColumnsFromSelection(int32_t aIndex,
|
|||
uint32_t aTarget,
|
||||
bool aIsOuter)
|
||||
{
|
||||
nsITableLayout *tableLayout = GetTableLayout();
|
||||
NS_ENSURE_STATE(tableLayout);
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
return NS_OK;
|
||||
|
||||
nsIPresShell* presShell(mDoc->PresShell());
|
||||
nsRefPtr<nsFrameSelection> tableSelection =
|
||||
const_cast<nsFrameSelection*>(presShell->ConstFrameSelection());
|
||||
|
||||
bool doUnselectRow = (aTarget == nsISelectionPrivate::TABLESELECTION_ROW);
|
||||
int32_t count = 0;
|
||||
nsresult rv = doUnselectRow ? GetColumnCount(&count) : GetRowCount(&count);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
uint32_t count = doUnselectRow ? ColCount() : RowCount();
|
||||
|
||||
int32_t startRowIdx = doUnselectRow ? aIndex : 0;
|
||||
int32_t endRowIdx = doUnselectRow ? aIndex : count - 1;
|
||||
|
@ -901,37 +823,6 @@ HTMLTableAccessible::RemoveRowsOrColumnsFromSelection(int32_t aIndex,
|
|||
endRowIdx, endColIdx);
|
||||
}
|
||||
|
||||
nsITableLayout*
|
||||
HTMLTableAccessible::GetTableLayout()
|
||||
{
|
||||
nsIFrame *frame = mContent->GetPrimaryFrame();
|
||||
if (!frame)
|
||||
return nullptr;
|
||||
|
||||
nsITableLayout *tableLayout = do_QueryFrame(frame);
|
||||
return tableLayout;
|
||||
}
|
||||
|
||||
nsresult
|
||||
HTMLTableAccessible::GetCellAt(int32_t aRowIndex, int32_t aColIndex,
|
||||
nsIDOMElement*& aCell)
|
||||
{
|
||||
int32_t startRowIndex = 0, startColIndex = 0,
|
||||
rowSpan, colSpan, actualRowSpan, actualColSpan;
|
||||
bool isSelected;
|
||||
|
||||
nsITableLayout *tableLayout = GetTableLayout();
|
||||
NS_ENSURE_STATE(tableLayout);
|
||||
|
||||
nsresult rv = tableLayout->
|
||||
GetCellDataAt(aRowIndex, aColIndex, aCell, startRowIndex, startColIndex,
|
||||
rowSpan, colSpan, actualRowSpan, actualColSpan, isSelected);
|
||||
|
||||
if (rv == NS_TABLELAYOUT_CELL_NOT_FOUND)
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
return rv;
|
||||
}
|
||||
|
||||
void
|
||||
HTMLTableAccessible::Description(nsString& aDescription)
|
||||
{
|
||||
|
@ -1138,16 +1029,14 @@ HTMLTableAccessible::IsProbablyLayoutTable()
|
|||
// Now we know there are 2-4 columns and 2 or more rows
|
||||
// Check to see if there are visible borders on the cells
|
||||
// XXX currently, we just check the first cell -- do we really need to do more?
|
||||
nsCOMPtr<nsIDOMElement> cellElement;
|
||||
nsresult rv = GetCellAt(0, 0, *getter_AddRefs(cellElement));
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||
if (!tableFrame)
|
||||
RETURN_LAYOUT_ANSWER(false, "table with no frame!");
|
||||
|
||||
nsIFrame* cellFrame = tableFrame->GetCellFrameAt(0, 0);
|
||||
if (!cellFrame)
|
||||
RETURN_LAYOUT_ANSWER(false, "table's first cell has no frame!");
|
||||
|
||||
nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElement));
|
||||
NS_ENSURE_TRUE(cellContent, false);
|
||||
nsIFrame *cellFrame = cellContent->GetPrimaryFrame();
|
||||
if (!cellFrame) {
|
||||
RETURN_LAYOUT_ANSWER(false, "Could not get frame for cellContent");
|
||||
}
|
||||
nsMargin border;
|
||||
cellFrame->GetBorder(border);
|
||||
if (border.top && border.bottom && border.left && border.right) {
|
||||
|
|
|
@ -166,19 +166,6 @@ public:
|
|||
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
|
||||
virtual Relation RelationByType(uint32_t aRelationType);
|
||||
|
||||
// HTMLTableAccessible
|
||||
|
||||
/**
|
||||
* Retun cell element at the given row and column index.
|
||||
*/
|
||||
nsresult GetCellAt(int32_t aRowIndex, int32_t aColIndex,
|
||||
nsIDOMElement* &aCell);
|
||||
|
||||
/**
|
||||
* Return nsITableLayout for the frame of the accessible table.
|
||||
*/
|
||||
nsITableLayout* GetTableLayout();
|
||||
|
||||
protected:
|
||||
// Accessible
|
||||
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
|
||||
|
|
|
@ -39,6 +39,7 @@ LOCAL_INCLUDES = \
|
|||
-I$(srcdir)/../../../content/base/src \
|
||||
-I$(srcdir)/../../../content/html/content/src \
|
||||
-I$(srcdir)/../../../layout/generic \
|
||||
-I$(srcdir)/../../../layout/tables \
|
||||
-I$(srcdir)/../../../layout/xul/base/src \
|
||||
$(NULL)
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@ this.EXPORTED_SYMBOLS = ['AccessFu'];
|
|||
Cu.import('resource://gre/modules/Services.jsm');
|
||||
|
||||
Cu.import('resource://gre/modules/accessibility/Utils.jsm');
|
||||
Cu.import('resource://gre/modules/accessibility/TouchAdapter.jsm');
|
||||
|
||||
const ACCESSFU_DISABLE = 0;
|
||||
const ACCESSFU_ENABLE = 1;
|
||||
|
@ -58,6 +57,8 @@ this.AccessFu = {
|
|||
this._activatePref = ACCESSFU_DISABLE;
|
||||
}
|
||||
|
||||
Input.quickNavMode.updateModes(this.prefsBranch);
|
||||
|
||||
this._enableOrDisable();
|
||||
},
|
||||
|
||||
|
@ -76,9 +77,6 @@ this.AccessFu = {
|
|||
|
||||
Logger.info('enable');
|
||||
|
||||
this.touchAdapter = (Utils.MozBuildApp == 'mobile/android') ?
|
||||
AndroidTouchAdapter : TouchAdapter;
|
||||
|
||||
for each (let mm in Utils.getAllMessageManagers(this.chromeWin))
|
||||
this._loadFrameScript(mm);
|
||||
|
||||
|
@ -91,7 +89,7 @@ this.AccessFu = {
|
|||
|
||||
Input.attach(this.chromeWin);
|
||||
Output.attach(this.chromeWin);
|
||||
this.touchAdapter.attach(this.chromeWin);
|
||||
TouchAdapter.attach(this.chromeWin);
|
||||
|
||||
Services.obs.addObserver(this, 'remote-browser-frame-shown', false);
|
||||
Services.obs.addObserver(this, 'Accessibility:NextObject', false);
|
||||
|
@ -117,7 +115,7 @@ this.AccessFu = {
|
|||
mm.sendAsyncMessage('AccessFu:Stop');
|
||||
|
||||
Input.detach();
|
||||
this.touchAdapter.detach(this.chromeWin);
|
||||
TouchAdapter.detach(this.chromeWin);
|
||||
|
||||
this.chromeWin.removeEventListener('TabOpen', this);
|
||||
this.chromeWin.removeEventListener('TabSelect', this);
|
||||
|
@ -205,6 +203,8 @@ this.AccessFu = {
|
|||
if (aData == 'activate') {
|
||||
this._activatePref = this.prefsBranch.getIntPref('activate');
|
||||
this._enableOrDisable();
|
||||
} else if (aData == 'quicknav_modes') {
|
||||
Input.quickNavMode.updateModes(this.prefsBranch);
|
||||
}
|
||||
break;
|
||||
case 'remote-browser-frame-shown':
|
||||
|
@ -389,7 +389,7 @@ var Input = {
|
|||
this._handleKeypress(aEvent);
|
||||
break;
|
||||
case 'mozAccessFuGesture':
|
||||
this._handleGesture(aEvent);
|
||||
this._handleGesture(aEvent.detail);
|
||||
break;
|
||||
}
|
||||
} catch (x) {
|
||||
|
@ -397,44 +397,56 @@ var Input = {
|
|||
}
|
||||
},
|
||||
|
||||
_handleGesture: function _handleGesture(aEvent) {
|
||||
let detail = aEvent.detail;
|
||||
Logger.info('Gesture', detail.type,
|
||||
'(fingers: ' + detail.touches.length + ')');
|
||||
_handleGesture: function _handleGesture(aGesture) {
|
||||
let gestureName = aGesture.type + aGesture.touches.length;
|
||||
Logger.info('Gesture', aGesture.type,
|
||||
'(fingers: ' + aGesture.touches.length + ')');
|
||||
|
||||
if (detail.touches.length == 1) {
|
||||
switch (detail.type) {
|
||||
case 'swiperight':
|
||||
this.moveCursor('moveNext', 'Simple', 'gestures');
|
||||
break;
|
||||
case 'swipeleft':
|
||||
this.moveCursor('movePrevious', 'Simple', 'gesture');
|
||||
break;
|
||||
case 'doubletap':
|
||||
this.activateCurrent();
|
||||
break;
|
||||
case 'explore':
|
||||
this.moveCursor('moveToPoint', 'Simple', 'gesture',
|
||||
detail.x, detail.y);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (detail.touches.length == 3) {
|
||||
switch (detail.type) {
|
||||
case 'swiperight':
|
||||
this.scroll(-1, true);
|
||||
break;
|
||||
case 'swipedown':
|
||||
this.scroll(-1);
|
||||
break;
|
||||
case 'swipeleft':
|
||||
this.scroll(1, true);
|
||||
break;
|
||||
case 'swipeup':
|
||||
this.scroll(1);
|
||||
break;
|
||||
}
|
||||
switch (gestureName) {
|
||||
case 'dwell1':
|
||||
case 'explore1':
|
||||
this.moveCursor('moveToPoint', 'Simple', 'gesture',
|
||||
aGesture.x, aGesture.y);
|
||||
break;
|
||||
case 'doubletap1':
|
||||
this.activateCurrent();
|
||||
break;
|
||||
case 'swiperight1':
|
||||
this.moveCursor('moveNext', 'Simple', 'gestures');
|
||||
break;
|
||||
case 'swipeleft1':
|
||||
this.moveCursor('movePrevious', 'Simple', 'gesture');
|
||||
break;
|
||||
case 'swiperight2':
|
||||
this.scroll(-1, true);
|
||||
break;
|
||||
case 'swipedown2':
|
||||
this.scroll(-1);
|
||||
break;
|
||||
case 'swipeleft2':
|
||||
this.scroll(1, true);
|
||||
break;
|
||||
case 'swipeup2':
|
||||
this.scroll(1);
|
||||
break;
|
||||
case 'explore2':
|
||||
Utils.getCurrentBrowser(this.chromeWin).contentWindow.scrollBy(
|
||||
-aGesture.deltaX, -aGesture.deltaY);
|
||||
break;
|
||||
case 'swiperight3':
|
||||
this.moveCursor('moveNext', this.quickNavMode.current, 'gesture');
|
||||
break;
|
||||
case 'swipeleft3':
|
||||
this.moveCursor('movePrevious', this.quickNavMode.current, 'gesture');
|
||||
break;
|
||||
case 'swipedown3':
|
||||
this.quickNavMode.next();
|
||||
AccessFu.announce('quicknav_' + this.quickNavMode.current);
|
||||
break;
|
||||
case 'swipeup3':
|
||||
this.quickNavMode.previous();
|
||||
AccessFu.announce('quicknav_' + this.quickNavMode.current);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -568,5 +580,34 @@ var Input = {
|
|||
x: ['moveNext', 'Checkbox'],
|
||||
X: ['movePrevious', 'Checkbox']
|
||||
};
|
||||
|
||||
return this.keyMap;
|
||||
},
|
||||
|
||||
quickNavMode: {
|
||||
get current() {
|
||||
return this.modes[this._currentIndex];
|
||||
},
|
||||
|
||||
previous: function quickNavMode_previous() {
|
||||
if (--this._currentIndex < 0)
|
||||
this._currentIndex = this.modes.length - 1;
|
||||
},
|
||||
|
||||
next: function quickNavMode_next() {
|
||||
if (++this._currentIndex >= this.modes.length)
|
||||
this._currentIndex = 0;
|
||||
},
|
||||
|
||||
updateModes: function updateModes(aPrefsBranch) {
|
||||
try {
|
||||
this.modes = aPrefsBranch.getCharPref('quicknav_modes').split(',');
|
||||
} catch (x) {
|
||||
// Fallback
|
||||
this.modes = [];
|
||||
}
|
||||
},
|
||||
|
||||
_currentIndex: -1
|
||||
}
|
||||
};
|
||||
|
|
|
@ -9,7 +9,7 @@ const Ci = Components.interfaces;
|
|||
const Cu = Components.utils;
|
||||
const Cr = Components.results;
|
||||
|
||||
this.EXPORTED_SYMBOLS = ['TouchAdapter', 'AndroidTouchAdapter'];
|
||||
this.EXPORTED_SYMBOLS = ['TouchAdapter'];
|
||||
|
||||
Cu.import('resource://gre/modules/accessibility/Utils.jsm');
|
||||
|
||||
|
@ -39,6 +39,9 @@ this.TouchAdapter = {
|
|||
// maximum distance the mouse could move during a tap in inches
|
||||
TAP_MAX_RADIUS: 0.2,
|
||||
|
||||
// The virtual touch ID generated by an Android hover event.
|
||||
HOVER_ID: 'hover',
|
||||
|
||||
attach: function TouchAdapter_attach(aWindow) {
|
||||
if (this.chromeWin)
|
||||
return;
|
||||
|
@ -53,14 +56,26 @@ this.TouchAdapter = {
|
|||
this._dpi = this.chromeWin.QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIDOMWindowUtils).displayDPI;
|
||||
|
||||
this.glass = this.chromeWin.document.
|
||||
createElementNS('http://www.w3.org/1999/xhtml', 'div');
|
||||
this.glass.id = 'accessfu-glass';
|
||||
this.chromeWin.document.documentElement.appendChild(this.glass);
|
||||
let target = this.chromeWin;
|
||||
|
||||
this.glass.addEventListener('touchend', this, true, true);
|
||||
this.glass.addEventListener('touchmove', this, true, true);
|
||||
this.glass.addEventListener('touchstart', this, true, true);
|
||||
if (Utils.MozBuildApp == 'b2g') {
|
||||
this.glass = this.chromeWin.document.
|
||||
createElementNS('http://www.w3.org/1999/xhtml', 'div');
|
||||
this.glass.id = 'accessfu-glass';
|
||||
this.chromeWin.document.documentElement.appendChild(this.glass);
|
||||
target = this.glass;
|
||||
}
|
||||
|
||||
target.addEventListener('mousemove', this, true, true);
|
||||
target.addEventListener('mouseenter', this, true, true);
|
||||
target.addEventListener('mouseleave', this, true, true);
|
||||
target.addEventListener('mousedown', this, true, true);
|
||||
target.addEventListener('mouseup', this, true, true);
|
||||
target.addEventListener('click', this, true, true);
|
||||
|
||||
target.addEventListener('touchend', this, true, true);
|
||||
target.addEventListener('touchmove', this, true, true);
|
||||
target.addEventListener('touchstart', this, true, true);
|
||||
|
||||
if (Utils.OS != 'Android')
|
||||
Mouse2Touch.attach(aWindow);
|
||||
|
@ -72,10 +87,23 @@ this.TouchAdapter = {
|
|||
|
||||
Logger.info('TouchAdapter.detach');
|
||||
|
||||
this.glass.removeEventListener('touchend', this, true, true);
|
||||
this.glass.removeEventListener('touchmove', this, true, true);
|
||||
this.glass.removeEventListener('touchstart', this, true, true);
|
||||
this.glass.parentNode.removeChild(this.glass);
|
||||
let target = this.chromeWin;
|
||||
|
||||
if (Utils.MozBuildApp == 'b2g') {
|
||||
target = this.glass;
|
||||
this.glass.parentNode.removeChild(this.glass);
|
||||
}
|
||||
|
||||
target.removeEventListener('mousemove', this, true, true);
|
||||
target.removeEventListener('mouseenter', this, true, true);
|
||||
target.removeEventListener('mouseleave', this, true, true);
|
||||
target.removeEventListener('mousedown', this, true, true);
|
||||
target.removeEventListener('mouseup', this, true, true);
|
||||
target.removeEventListener('click', this, true, true);
|
||||
|
||||
target.removeEventListener('touchend', this, true, true);
|
||||
target.removeEventListener('touchmove', this, true, true);
|
||||
target.removeEventListener('touchstart', this, true, true);
|
||||
|
||||
if (Utils.OS != 'Android')
|
||||
Mouse2Touch.detach(aWindow);
|
||||
|
@ -84,16 +112,23 @@ this.TouchAdapter = {
|
|||
},
|
||||
|
||||
handleEvent: function TouchAdapter_handleEvent(aEvent) {
|
||||
let touches = aEvent.changedTouches;
|
||||
if (this._delayedEvent) {
|
||||
this.chromeWin.clearTimeout(this._delayedEvent);
|
||||
delete this._delayedEvent;
|
||||
}
|
||||
|
||||
let changedTouches = aEvent.changedTouches || [aEvent];
|
||||
|
||||
// XXX: Until bug 77992 is resolved, on desktop we get microseconds
|
||||
// instead of milliseconds.
|
||||
let timeStamp = (Utils.OS == 'Android') ? aEvent.timeStamp : Date.now();
|
||||
switch (aEvent.type) {
|
||||
case 'mouseenter':
|
||||
case 'touchstart':
|
||||
for (var i = 0; i < touches.length; i++) {
|
||||
let touch = touches[i];
|
||||
for (var i = 0; i < changedTouches.length; i++) {
|
||||
let touch = changedTouches[i];
|
||||
let touchPoint = new TouchPoint(touch, timeStamp, this._dpi);
|
||||
this._touchPoints[touch.identifier] = touchPoint;
|
||||
this._touchPoints[touch.identifier || this.HOVER_ID] = touchPoint;
|
||||
this._lastExploreTime = timeStamp + this.SWIPE_MAX_DURATION;
|
||||
}
|
||||
this._dwellTimeout = this.chromeWin.setTimeout(
|
||||
|
@ -101,27 +136,34 @@ this.TouchAdapter = {
|
|||
this.compileAndEmit(timeStamp + this.DWELL_THRESHOLD);
|
||||
}).bind(this), this.DWELL_THRESHOLD);
|
||||
break;
|
||||
case 'mousemove':
|
||||
case 'touchmove':
|
||||
for (var i = 0; i < touches.length; i++) {
|
||||
let touch = touches[i];
|
||||
let touchPoint = this._touchPoints[touch.identifier];
|
||||
touchPoint.update(touch, timeStamp);
|
||||
for (var i = 0; i < changedTouches.length; i++) {
|
||||
let touch = changedTouches[i];
|
||||
let touchPoint = this._touchPoints[touch.identifier || this.HOVER_ID];
|
||||
if (touchPoint)
|
||||
touchPoint.update(touch, timeStamp);
|
||||
}
|
||||
if (timeStamp - this._lastExploreTime >= EXPLORE_THROTTLE) {
|
||||
this.compileAndEmit(timeStamp);
|
||||
this._lastExploreTime = timeStamp;
|
||||
}
|
||||
break;
|
||||
case 'mouseleave':
|
||||
case 'touchend':
|
||||
for (var i = 0; i < touches.length; i++) {
|
||||
let touch = touches[i];
|
||||
let touchPoint = this._touchPoints[touch.identifier];
|
||||
touchPoint.update(touch, timeStamp);
|
||||
touchPoint.finish();
|
||||
for (var i = 0; i < changedTouches.length; i++) {
|
||||
let touch = changedTouches[i];
|
||||
let touchPoint = this._touchPoints[touch.identifier || this.HOVER_ID];
|
||||
if (touchPoint) {
|
||||
touchPoint.update(touch, timeStamp);
|
||||
touchPoint.finish();
|
||||
}
|
||||
}
|
||||
this.compileAndEmit(timeStamp);
|
||||
break;
|
||||
}
|
||||
|
||||
aEvent.preventDefault();
|
||||
},
|
||||
|
||||
cleanupTouches: function cleanupTouches() {
|
||||
|
@ -170,12 +212,22 @@ this.TouchAdapter = {
|
|||
if (timeDelta > this.MAX_CONSECUTIVE_GESTURE_DELAY) {
|
||||
delete this._prevGestures[idhash];
|
||||
} else {
|
||||
if (details.type == 'tap' && prevGesture.type == 'tap')
|
||||
details.type = 'doubletap';
|
||||
if (details.type == 'tap' && prevGesture.type == 'doubletap')
|
||||
details.type = 'tripletap';
|
||||
if (details.type == 'dwell' && prevGesture.type == 'tap')
|
||||
details.type = 'taphold';
|
||||
let sequence = prevGesture.type + '-' + details.type;
|
||||
switch (sequence) {
|
||||
case 'tap-tap':
|
||||
details.type = 'doubletap';
|
||||
break;
|
||||
case 'doubletap-tap':
|
||||
details.type = 'tripletap';
|
||||
break;
|
||||
case 'tap-dwell':
|
||||
details.type = 'taphold';
|
||||
break;
|
||||
case 'explore-explore':
|
||||
details.deltaX = details.x - prevGesture.x;
|
||||
details.deltaY = details.y - prevGesture.y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -189,9 +241,36 @@ this.TouchAdapter = {
|
|||
},
|
||||
|
||||
emitGesture: function TouchAdapter_emitGesture(aDetails) {
|
||||
let evt = this.chromeWin.document.createEvent('CustomEvent');
|
||||
evt.initCustomEvent('mozAccessFuGesture', true, true, aDetails);
|
||||
this.chromeWin.dispatchEvent(evt);
|
||||
let emitDelay = 0;
|
||||
|
||||
// Unmutate gestures we are getting from Android when EBT is enabled.
|
||||
// Two finger gestures are translated to one. Double taps are translated
|
||||
// to single taps.
|
||||
if (Utils.MozBuildApp == 'mobile/android' &&
|
||||
Utils.AndroidSdkVersion >= 14 &&
|
||||
aDetails.touches[0] != this.HOVER_ID) {
|
||||
if (aDetails.touches.length == 1) {
|
||||
if (aDetails.type == 'tap') {
|
||||
emitDelay = 50;
|
||||
aDetails.type = 'doubletap';
|
||||
} else {
|
||||
aDetails.touches.push(this.HOVER_ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let emit = function emit() {
|
||||
let evt = this.chromeWin.document.createEvent('CustomEvent');
|
||||
evt.initCustomEvent('mozAccessFuGesture', true, true, aDetails);
|
||||
this.chromeWin.dispatchEvent(evt);
|
||||
delete this._delayedEvent;
|
||||
}.bind(this);
|
||||
|
||||
if (emitDelay) {
|
||||
this._delayedEvent = this.chromeWin.setTimeout(emit, emitDelay);
|
||||
} else {
|
||||
emit();
|
||||
}
|
||||
},
|
||||
|
||||
compileAndEmit: function TouchAdapter_compileAndEmit(aTime) {
|
||||
|
@ -364,41 +443,3 @@ var Mouse2Touch = {
|
|||
aEvent.stopImmediatePropagation();
|
||||
}
|
||||
};
|
||||
|
||||
this.AndroidTouchAdapter = {
|
||||
attach: function AndroidTouchAdapter_attach(aWindow) {
|
||||
if (this.chromeWin)
|
||||
return;
|
||||
|
||||
Logger.info('AndroidTouchAdapter.attach');
|
||||
|
||||
this.chromeWin = aWindow;
|
||||
this.chromeWin.addEventListener('mousemove', this, true, true);
|
||||
this._lastExploreTime = 0;
|
||||
},
|
||||
|
||||
detach: function AndroidTouchAdapter_detach(aWindow) {
|
||||
if (!this.chromeWin)
|
||||
return;
|
||||
|
||||
Logger.info('AndroidTouchAdapter.detach');
|
||||
|
||||
this.chromeWin.removeEventListener('mousemove', this, true, true);
|
||||
delete this.chromeWin;
|
||||
},
|
||||
|
||||
handleEvent: function AndroidTouchAdapter_handleEvent(aEvent) {
|
||||
// On non-Android we use the shift key to simulate touch.
|
||||
if (Utils.MozBuildApp != 'mobile/android' && !aEvent.shiftKey)
|
||||
return;
|
||||
|
||||
if (aEvent.timeStamp - this._lastExploreTime >= EXPLORE_THROTTLE) {
|
||||
let evt = this.chromeWin.document.createEvent('CustomEvent');
|
||||
evt.initCustomEvent(
|
||||
'mozAccessFuGesture', true, true,
|
||||
{type: 'explore', x: aEvent.screenX, y: aEvent.screenY, touches: [1]});
|
||||
this.chromeWin.dispatchEvent(evt);
|
||||
this._lastExploreTime = aEvent.timeStamp;
|
||||
}
|
||||
}
|
||||
};
|
|
@ -59,9 +59,6 @@ const uint32_t USE_ROLE_STRING = 0;
|
|||
static gAccessibles = 0;
|
||||
#endif
|
||||
|
||||
EXTERN_C GUID CDECL CLSID_Accessible =
|
||||
{ 0x61044601, 0xa811, 0x4e2b, { 0xbb, 0xba, 0x17, 0xbf, 0xab, 0xd3, 0x29, 0xd7 } };
|
||||
|
||||
static const int32_t kIEnumVariantDisconnected = -1;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -70,7 +67,7 @@ static const int32_t kIEnumVariantDisconnected = -1;
|
|||
|
||||
ITypeInfo* AccessibleWrap::gTypeInfo = NULL;
|
||||
|
||||
NS_IMPL_ISUPPORTS_INHERITED0(AccessibleWrap, Accessible);
|
||||
NS_IMPL_ISUPPORTS_INHERITED0(AccessibleWrap, Accessible)
|
||||
|
||||
//-----------------------------------------------------
|
||||
// IUnknown interface methods - see iunknown.h for documentation
|
||||
|
@ -97,7 +94,7 @@ AccessibleWrap::QueryInterface(REFIID iid, void** ppv)
|
|||
else if (IID_IAccessible2 == iid && !Compatibility::IsIA2Off())
|
||||
*ppv = static_cast<IAccessible2*>(this);
|
||||
else if (IID_ISimpleDOMNode == iid) {
|
||||
if (IsDefunct() || !HasOwnContent() && !IsDoc())
|
||||
if (IsDefunct() || (!HasOwnContent() && !IsDoc()))
|
||||
return E_NOINTERFACE;
|
||||
|
||||
*ppv = new sdnAccessible(GetNode());
|
||||
|
@ -145,7 +142,7 @@ AccessibleWrap::QueryService(REFGUID aGuidService, REFIID aIID,
|
|||
// UIA IAccessibleEx
|
||||
if (aGuidService == IID_IAccessibleEx &&
|
||||
Preferences::GetBool("accessibility.uia.enable")) {
|
||||
IAccessibleEx* accEx = new uiaRawElmProvider(this);
|
||||
uiaRawElmProvider* accEx = new uiaRawElmProvider(this);
|
||||
HRESULT hr = accEx->QueryInterface(aIID, aInstancePtr);
|
||||
if (FAILED(hr))
|
||||
delete accEx;
|
||||
|
@ -175,8 +172,8 @@ AccessibleWrap::get_accParent( IDispatch __RPC_FAR *__RPC_FAR *ppdispParent)
|
|||
// Return window system accessible object for root document and tab document
|
||||
// accessibles.
|
||||
if (!doc->ParentDocument() ||
|
||||
nsWinUtils::IsWindowEmulationStarted() &&
|
||||
nsCoreUtils::IsTabDocument(doc->DocumentNode())) {
|
||||
(nsWinUtils::IsWindowEmulationStarted() &&
|
||||
nsCoreUtils::IsTabDocument(doc->DocumentNode()))) {
|
||||
HWND hwnd = static_cast<HWND>(doc->GetNativeWindow());
|
||||
if (hwnd && SUCCEEDED(::AccessibleObjectFromWindow(hwnd, OBJID_WINDOW,
|
||||
IID_IAccessible,
|
||||
|
@ -585,7 +582,7 @@ AccessibleWrap::get_accFocus(
|
|||
|
||||
// This helper class implements IEnumVARIANT for a nsIArray containing nsIAccessible objects.
|
||||
|
||||
class AccessibleEnumerator : public IEnumVARIANT
|
||||
class AccessibleEnumerator MOZ_FINAL : public IEnumVARIANT
|
||||
{
|
||||
public:
|
||||
AccessibleEnumerator(nsIArray* aArray) : mArray(aArray), mCurIndex(0) { }
|
||||
|
@ -1102,7 +1099,7 @@ AccessibleWrap::get_relation(long aRelationIndex,
|
|||
if (IsDefunct())
|
||||
return CO_E_OBJNOTCONNECTED;
|
||||
|
||||
uint32_t relIdx = 0;
|
||||
long relIdx = 0;
|
||||
for (uint32_t relType = nsIAccessibleRelation::RELATION_FIRST;
|
||||
relType <= nsIAccessibleRelation::RELATION_LAST; relType++) {
|
||||
Relation rel = RelationByType(relType);
|
||||
|
@ -1569,8 +1566,7 @@ AccessibleWrap::FirePlatformEvent(AccEvent* aEvent)
|
|||
eventType < nsIAccessibleEvent::EVENT_LAST_ENTRY,
|
||||
NS_ERROR_FAILURE);
|
||||
|
||||
uint32_t winLastEntry = gWinEventMap[nsIAccessibleEvent::EVENT_LAST_ENTRY];
|
||||
NS_ASSERTION(winLastEntry == kEVENT_LAST_ENTRY,
|
||||
NS_ASSERTION(gWinEventMap[nsIAccessibleEvent::EVENT_LAST_ENTRY] == kEVENT_LAST_ENTRY,
|
||||
"MSAA event map skewed");
|
||||
|
||||
uint32_t winEvent = gWinEventMap[eventType];
|
||||
|
@ -1711,7 +1707,7 @@ AccessibleWrap::ConvertToIA2Attributes(nsIPersistentProperties *aAttributes,
|
|||
if (NS_FAILED(propElem->GetKey(name)))
|
||||
return E_FAIL;
|
||||
|
||||
uint32_t offset = 0;
|
||||
int32_t offset = 0;
|
||||
while ((offset = name.FindCharInSet(kCharsToEscape, offset)) != kNotFound) {
|
||||
name.Insert('\\', offset);
|
||||
offset += 2;
|
||||
|
|
|
@ -259,7 +259,7 @@ DocAccessibleWrap::DoInitialUpdate()
|
|||
|
||||
a11y::RootAccessible* rootDocument = RootAccessible();
|
||||
|
||||
mozilla::WindowsHandle nativeData = NULL;
|
||||
mozilla::WindowsHandle nativeData = 0;
|
||||
if (tabChild)
|
||||
tabChild->SendGetWidgetNativeData(&nativeData);
|
||||
else
|
||||
|
|
|
@ -18,8 +18,8 @@ namespace a11y {
|
|||
class ChildrenEnumVariant MOZ_FINAL : public IEnumVARIANT
|
||||
{
|
||||
public:
|
||||
ChildrenEnumVariant(AccessibleWrap* aAnchor) : mAnchorAcc(aAnchor),
|
||||
mCurAcc(mAnchorAcc->GetChildAt(0)), mCurIndex(0), mRefCnt(0) { }
|
||||
ChildrenEnumVariant(AccessibleWrap* aAnchor) : mRefCnt(0), mAnchorAcc(aAnchor),
|
||||
mCurAcc(mAnchorAcc->GetChildAt(0)), mCurIndex(0) { }
|
||||
|
||||
// IUnknown
|
||||
DECL_IUNKNOWN
|
||||
|
@ -43,8 +43,8 @@ private:
|
|||
ChildrenEnumVariant& operator =(const ChildrenEnumVariant&) MOZ_DELETE;
|
||||
|
||||
ChildrenEnumVariant(const ChildrenEnumVariant& aEnumVariant) :
|
||||
mAnchorAcc(aEnumVariant.mAnchorAcc), mCurAcc(aEnumVariant.mCurAcc),
|
||||
mCurIndex(aEnumVariant.mCurIndex), mRefCnt(0) { }
|
||||
mRefCnt(0), mAnchorAcc(aEnumVariant.mAnchorAcc), mCurAcc(aEnumVariant.mCurAcc),
|
||||
mCurIndex(aEnumVariant.mCurIndex) { }
|
||||
virtual ~ChildrenEnumVariant() { }
|
||||
|
||||
protected:
|
||||
|
|
|
@ -15,5 +15,5 @@ NS_IMPL_ISUPPORTS_INHERITED0(ImageAccessibleWrap,
|
|||
|
||||
IMPL_IUNKNOWN_INHERITED1(ImageAccessibleWrap,
|
||||
AccessibleWrap,
|
||||
ia2AccessibleImage);
|
||||
ia2AccessibleImage)
|
||||
|
||||
|
|
|
@ -160,7 +160,7 @@ ia2AccessibleRelation::get_target(long aTargetIndex, IUnknown **aTarget)
|
|||
{
|
||||
A11Y_TRYBLOCK_BEGIN
|
||||
|
||||
if (aTargetIndex < 0 || aTargetIndex >= mTargets.Length() || !aTarget)
|
||||
if (aTargetIndex < 0 || (uint32_t)aTargetIndex >= mTargets.Length() || !aTarget)
|
||||
return E_INVALIDARG;
|
||||
|
||||
mTargets[aTargetIndex]->QueryNativeInterface(IID_IUnknown, (void**) aTarget);
|
||||
|
@ -179,11 +179,11 @@ ia2AccessibleRelation::get_targets(long aMaxTargets, IUnknown **aTargets,
|
|||
return E_INVALIDARG;
|
||||
|
||||
*aNTargets = 0;
|
||||
uint32_t maxTargets = mTargets.Length();
|
||||
long maxTargets = mTargets.Length();
|
||||
if (maxTargets > aMaxTargets)
|
||||
maxTargets = aMaxTargets;
|
||||
|
||||
for (uint32_t idx = 0; idx < maxTargets; idx++)
|
||||
for (long idx = 0; idx < maxTargets; idx++)
|
||||
get_target(idx, aTargets + idx);
|
||||
|
||||
*aNTargets = maxTargets;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
namespace mozilla {
|
||||
namespace a11y {
|
||||
|
||||
class sdnAccessible : public ISimpleDOMNode
|
||||
class sdnAccessible MOZ_FINAL : public ISimpleDOMNode
|
||||
{
|
||||
public:
|
||||
sdnAccessible(nsINode* aNode) : mNode(aNode) { }
|
||||
|
|
|
@ -77,7 +77,7 @@ uiaRawElmProvider::GetRuntimeId(__RPC__deref_out_opt SAFEARRAY** aRuntimeIds)
|
|||
if (!*aRuntimeIds)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
for (LONG i = 0; i < ArrayLength(ids); i++)
|
||||
for (LONG i = 0; i < (LONG)ArrayLength(ids); i++)
|
||||
SafeArrayPutElement(*aRuntimeIds, &i, (void*)&(ids[i]));
|
||||
|
||||
return S_OK;
|
||||
|
|
|
@ -23,7 +23,7 @@ class uiaRawElmProvider MOZ_FINAL : public IAccessibleEx,
|
|||
public IRawElementProviderSimple
|
||||
{
|
||||
public:
|
||||
uiaRawElmProvider(AccessibleWrap* aAcc) : mAcc(aAcc), mRefCnt(0) { }
|
||||
uiaRawElmProvider(AccessibleWrap* aAcc) : mRefCnt(0), mAcc(aAcc) { }
|
||||
|
||||
// IUnknown
|
||||
DECL_IUNKNOWN
|
||||
|
|
|
@ -21,7 +21,7 @@ XULSliderAccessible::
|
|||
XULSliderAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
||||
AccessibleWrap(aContent, aDoc)
|
||||
{
|
||||
mFlags = mFlags | eHasNumericValue;
|
||||
mStateFlags |= eHasNumericValue;
|
||||
}
|
||||
|
||||
// nsISupports
|
||||
|
|
|
@ -685,7 +685,7 @@ XULTreeItemAccessibleBase::
|
|||
mTree(aTree), mTreeView(aTreeView), mRow(aRow)
|
||||
{
|
||||
mParent = aParent;
|
||||
mFlags |= eSharedNode;
|
||||
mStateFlags |= eSharedNode;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -463,7 +463,7 @@ XULTreeGridCellAccessible::
|
|||
mTreeView(aTreeView), mRow(aRow), mColumn(aColumn)
|
||||
{
|
||||
mParent = aRowAcc;
|
||||
mFlags |= eSharedNode;
|
||||
mStateFlags |= eSharedNode;
|
||||
|
||||
NS_ASSERTION(mTreeView, "mTreeView is null");
|
||||
|
||||
|
|
|
@ -100,6 +100,9 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=558036
|
|||
testAttrs("th2", { "abbr": "SS#" }, true);
|
||||
testAttrs("th2", { "axis": "social" }, true);
|
||||
|
||||
// don't barf on an empty abbr element.
|
||||
testAbsentAttrs("th3", { "abbr": "" }, true);
|
||||
|
||||
// application accessible
|
||||
if (WIN) {
|
||||
var gfxInfo = Components.classes["@mozilla.org/gfx/info;1"].
|
||||
|
@ -154,6 +157,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=558036
|
|||
title="Expand support for nsIAccessibleEvent::OBJECT_ATTRIBUTE_CHANGE">
|
||||
Mozilla Bug 563862
|
||||
</a>
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=819303"
|
||||
title="crash in nsTextEquivUtils::AppendTextEquivFromTextContent">
|
||||
Mozilla Bug 819303
|
||||
</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
<pre id="test">
|
||||
|
@ -211,6 +219,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=558036
|
|||
<tr>
|
||||
<th id="th1"><abbr title="Social Security Number">SS#</abbr></th>
|
||||
<th id="th2" abbr="SS#" axis="social">Social Security Number</th>
|
||||
<th id="th3"><abbr></abbr></th>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
|
|
@ -234,16 +234,25 @@ pref("editor.singleLine.pasteNewlines", 2);
|
|||
pref("ui.dragThresholdX", 25);
|
||||
pref("ui.dragThresholdY", 25);
|
||||
|
||||
// Layers Acceleration
|
||||
pref("layers.acceleration.disabled", false);
|
||||
#ifndef XP_WIN
|
||||
//TODO: turn this on for Windows in bug 808016
|
||||
// Layers Acceleration. We can only have nice things on gonk, because
|
||||
// they're not maintained anywhere else.
|
||||
#ifndef MOZ_WIDGET_GONK
|
||||
pref("dom.ipc.tabs.disabled", true);
|
||||
pref("layers.offmainthreadcomposition.enabled", false);
|
||||
pref("layers.offmainthreadcomposition.animate-opacity", false);
|
||||
pref("layers.offmainthreadcomposition.animate-transform", false);
|
||||
pref("layers.offmainthreadcomposition.throttle-animations", false);
|
||||
pref("layers.async-video.enabled", false);
|
||||
#else
|
||||
pref("dom.ipc.tabs.disabled", false);
|
||||
pref("layers.offmainthreadcomposition.enabled", true);
|
||||
#endif
|
||||
pref("layers.acceleration.disabled", false);
|
||||
pref("layers.offmainthreadcomposition.animate-opacity", true);
|
||||
pref("layers.offmainthreadcomposition.animate-transform", true);
|
||||
pref("layers.offmainthreadcomposition.throttle-animations", true);
|
||||
pref("layers.async-video.enabled", true);
|
||||
pref("layers.async-pan-zoom.enabled", true);
|
||||
#endif
|
||||
|
||||
// Web Notifications
|
||||
pref("notification.feature.enabled", true);
|
||||
|
@ -379,7 +388,6 @@ pref("dom.mozBrowserFramesEnabled", true);
|
|||
// We'll run out of PIDs on UNIX-y systems before we hit this limit.
|
||||
pref("dom.ipc.processCount", 100000);
|
||||
|
||||
pref("dom.ipc.tabs.disabled", false);
|
||||
pref("dom.ipc.browser_frames.oop_by_default", false);
|
||||
|
||||
// Temporary permission hack for WebSMS
|
||||
|
@ -395,6 +403,7 @@ pref("dom.mozAlarms.enabled", true);
|
|||
// NetworkStats
|
||||
#ifdef MOZ_B2G_RIL
|
||||
pref("dom.mozNetworkStats.enabled", true);
|
||||
pref("ril.lastKnownMcc", 724);
|
||||
#endif
|
||||
|
||||
// WebSettings
|
||||
|
|
|
@ -168,10 +168,6 @@ int main(int argc, char* argv[])
|
|||
{
|
||||
char exePath[MAXPATHLEN];
|
||||
|
||||
#if defined(MOZ_X11)
|
||||
putenv("MOZ_USE_OMTC=1");
|
||||
#endif
|
||||
|
||||
nsresult rv = mozilla::BinaryPath::Get(argv[0], exePath);
|
||||
if (NS_FAILED(rv)) {
|
||||
Output("Couldn't calculate the application directory.\n");
|
||||
|
|
|
@ -70,7 +70,7 @@ if ("nsIAudioManager" in Ci) {
|
|||
const nsIAudioManager = Ci.nsIAudioManager;
|
||||
audioChannelSettings = [
|
||||
// settings name, max value, apply to stream types
|
||||
['audio.volume.content', 15, [nsIAudioManager.STREAM_TYPE_SYSTEM, nsIAudioManager.STREAM_TYPE_MUSIC, nsIAudioManager.STREAM_TYPE_FM]],
|
||||
['audio.volume.content', 15, [nsIAudioManager.STREAM_TYPE_SYSTEM, nsIAudioManager.STREAM_TYPE_MUSIC]],
|
||||
['audio.volume.notification', 15, [nsIAudioManager.STREAM_TYPE_RING, nsIAudioManager.STREAM_TYPE_NOTIFICATION]],
|
||||
['audio.volume.alarm', 15, [nsIAudioManager.STREAM_TYPE_ALARM]],
|
||||
['audio.volume.telephony', 5, [nsIAudioManager.STREAM_TYPE_VOICE_CALL]],
|
||||
|
|
|
@ -107,6 +107,9 @@ var shell = {
|
|||
return;
|
||||
}
|
||||
|
||||
// purge the queue.
|
||||
this.CrashSubmit.pruneSavedDumps();
|
||||
|
||||
try {
|
||||
// Check if we should automatically submit this crash.
|
||||
if (Services.prefs.getBoolPref("app.reportCrashes")) {
|
||||
|
@ -135,7 +138,7 @@ var shell = {
|
|||
&& network.type == Ci.nsINetworkInterface.NETWORK_TYPE_WIFI) {
|
||||
shell.CrashSubmit.submit(aCrashID);
|
||||
|
||||
// purge the queue.
|
||||
// submit the pending queue.
|
||||
let pending = shell.CrashSubmit.pendingIDs();
|
||||
for (let crashid of pending) {
|
||||
shell.CrashSubmit.submit(crashid);
|
||||
|
|
|
@ -4,6 +4,7 @@ mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-b2g
|
|||
|
||||
ac_add_options --enable-application=b2g
|
||||
ac_add_options --enable-b2g-camera
|
||||
ac_add_options --enable-updater
|
||||
|
||||
ac_add_options --target=arm-linux-androideabi
|
||||
ac_add_options --with-gonk="$topsrcdir/gonk-toolchain"
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
"mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
|
||||
"build_targets": [],
|
||||
"upload_files": [
|
||||
"{objdir}/dist/b2g-update/*.mar",
|
||||
"{objdir}/dist/b2g-*.tar.gz",
|
||||
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
||||
"{workdir}/sources.xml"
|
||||
],
|
||||
|
@ -24,6 +22,7 @@
|
|||
"MOZILLA_OFFICIAL": "1",
|
||||
"B2GUPDATER": "1"
|
||||
},
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"vcs": "hgtool",
|
||||
"repo": "http://hg.mozilla.org/integration/gaia-nightly",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[
|
||||
{
|
||||
"size": 868355892,
|
||||
"digest": "0ccae39ee8910947fe3cf51fa3a45e820d2ff11571f6ccec29d9b3e5ae7f7709c1ad657210fbfea98baadd032c3d6a58e00ddbb2e93acafd751089869a72fed6",
|
||||
"size": 895408640,
|
||||
"digest": "fc5be04b9b8365cd65fa8e66f4686bf0da8e34abb16ee618dd069469c9d9c9c3495562ebfcd21a2beadb27d59d6c011781188b9038ffebfd3e85cdd264f0aac3",
|
||||
"algorithm": "sha512",
|
||||
"filename": "gonk.tar.xz"
|
||||
},
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<remote fetch="git://github.com/mozilla/" name="mozilla"/>
|
||||
<remote fetch="git://codeaurora.org/" name="caf"/>
|
||||
<remote fetch="git://android.git.linaro.org/" name="linaro"/>
|
||||
<remote fetch="https://git.mozilla.org" name="mozillaorg"/>
|
||||
<default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
|
||||
|
||||
<!-- Gonk specific things and forks -->
|
||||
|
@ -14,76 +15,76 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2f4377622f4c40275546c7816c0d4b21e800b4c6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="654358494ba601a46ef9838debc95417ae464cc6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="32106d4ea635ebe17a1610b643b398db639b8b97"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="b7911c064a71a5c18e2c92f869f6364a798b46cd"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="e1bd90051c9e937221eb1f91c94e3cde747311a7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
|
||||
|
||||
<!-- Stock Android things -->
|
||||
<!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
<!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
<!-- Information: platform/bionic is tagged with M8960AAAAANLYA100715A --><project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
|
||||
<!-- Information: platform/bootable/recovery is tagged with M8960AAAAANLYA100715A --><project name="platform/bootable/recovery" path="bootable/recovery" revision="e0a9ac010df3afaa47ba107192c05ac8b5516435"/>
|
||||
<!-- Information: platform/development is tagged with M8960AAAAANLYA100715A --><project name="platform/development" path="development" revision="a384622f5fcb1d2bebb9102591ff7ae91fe8ed2d"/>
|
||||
<!-- Information: device/common is tagged with M8960AAAAANLYA1005304 --><project name="device/common" path="device/common" revision="7c65ea240157763b8ded6154a17d3c033167afb7"/>
|
||||
<!-- Information: device/sample is tagged with M8960AAAAANLYA100715A --><project name="device/sample" path="device/sample" revision="c328f3d4409db801628861baa8d279fb8855892f"/>
|
||||
<!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
|
||||
<!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
|
||||
<!-- Information: platform/external/bluetooth/bluez is tagged with M76XXUSNEKNLYA2040 --><project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="1023c91c66e9c3bd1132480051993bf7827770f6"/>
|
||||
<!-- Information: platform/external/bluetooth/glib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="c6b49241cc1a8950723a5f74f8f4b4f4c3fa970e"/>
|
||||
<!-- Information: platform/external/bluetooth/glib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="c6b49241cc1a8950723a5f74f8f4b4f4c3fa970e"/>
|
||||
<!-- Information: platform/external/bluetooth/hcidump is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/bluetooth/hcidump" path="external/bluetooth/hcidump" revision="02b1eb24fbb3d0135a81edb4a2175b1397308d7d"/>
|
||||
<!-- Information: platform/external/bsdiff is tagged with A8064AAAAANLYA1334 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
|
||||
<!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
|
||||
<!-- Information: platform/external/bsdiff is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
|
||||
<!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
|
||||
<!-- Information: platform/external/dbus is tagged with M8960AAAAANLYA100715A --><project name="platform/external/dbus" path="external/dbus" revision="c7517b6195dc6926728352113e6cc335da3f9c9e"/>
|
||||
<!-- Information: platform/external/dhcpcd is tagged with M8960AAAAANLYA100715A --><project name="platform/external/dhcpcd" path="external/dhcpcd" revision="1e00fb67022d0921af0fead263f81762781b9ffa"/>
|
||||
<!-- Information: platform/external/dnsmasq is tagged with A8064AAAAANLYA1334 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
|
||||
<!-- Information: platform/external/e2fsprogs is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
|
||||
<!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
|
||||
<!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
|
||||
<!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
|
||||
<!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
|
||||
<!-- Information: platform/external/giflib is tagged with A8064AAAAANLYA1334 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
|
||||
<!-- Information: platform/external/gtest is tagged with android-4.2_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
|
||||
<!-- Information: platform/external/harfbuzz is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
|
||||
<!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
|
||||
<!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
|
||||
<!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
|
||||
<!-- Information: platform/external/dnsmasq is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
|
||||
<!-- Information: platform/external/e2fsprogs is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
|
||||
<!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
|
||||
<!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
|
||||
<!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
|
||||
<!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
|
||||
<!-- Information: platform/external/giflib is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
|
||||
<!-- Information: platform/external/gtest is tagged with android-4.2.1_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
|
||||
<!-- Information: platform/external/harfbuzz is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
|
||||
<!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
|
||||
<!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
|
||||
<!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
|
||||
<!-- Information: platform/external/jpeg is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/jpeg" path="external/jpeg" revision="a62e464d672a4623233180e4023034bf825f066e"/>
|
||||
<!-- Information: platform/external/libgsm is tagged with A8064AAAAANLYA1334 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
|
||||
<!-- Information: platform/external/liblzf is tagged with A8064AAAAANLYA1334 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
|
||||
<!-- Information: platform/external/libnfc-nxp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
|
||||
<!-- Information: platform/external/libnl-headers is tagged with A8064AAAAANLYA1334 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
|
||||
<!-- Information: platform/external/libphonenumber is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
|
||||
<!-- Information: platform/external/libgsm is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
|
||||
<!-- Information: platform/external/liblzf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
|
||||
<!-- Information: platform/external/libnfc-nxp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
|
||||
<!-- Information: platform/external/libnl-headers is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
|
||||
<!-- Information: platform/external/libphonenumber is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
|
||||
<!-- Information: platform/external/libpng is tagged with M8960AAAAANLYA100715A --><project name="platform/external/libpng" path="external/libpng" revision="9c3730f0efa69f580f03463c237cd928f3196404"/>
|
||||
<!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
|
||||
<!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
|
||||
<!-- Information: platform/external/llvm is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/llvm" path="external/llvm" revision="bff5923831940309f7d8ddbff5826ca6ed2dc050"/>
|
||||
<!-- Information: platform/external/mksh is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/mksh" path="external/mksh" revision="ec646e8f5e7dac9a77d1de549c6ed92c04d0cd4b"/>
|
||||
<project name="platform_external_opensans" path="external/opensans" remote="b2g" revision="b5b4c226ca1d71e936153cf679dda6d3d60e2354"/>
|
||||
<!-- Information: platform/external/openssl is tagged with AU_LINUX_ANDROID_ICS.04.00.04.00.110 --><project name="platform/external/openssl" path="external/openssl" revision="27d333cce9a31c806b4bfa042925f045c727aecd"/>
|
||||
<!-- Information: platform/external/protobuf is tagged with A8064AAAAANLYA1334 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
|
||||
<!-- Information: platform/external/safe-iop is tagged with A8064AAAAANLYA1334 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
|
||||
<!-- Information: platform/external/protobuf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
|
||||
<!-- Information: platform/external/safe-iop is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
|
||||
<project name="screencap-gonk" path="external/screencap-gonk" remote="b2g" revision="e6403c71e9eca8cb943739d5a0a192deac60fc51"/>
|
||||
<!-- Information: platform/external/skia is tagged with M8960AAAAANLYA100715A --><project name="platform/external/skia" path="external/skia" revision="7d90c85f2c0e3b747f7c7eff8bc9253b0063b439"/>
|
||||
<!-- Information: platform/external/sonivox is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/sonivox" path="external/sonivox" revision="7c967779dfc61ac1f346e972de91d4bfce7dccbb"/>
|
||||
<!-- Information: platform/external/speex is tagged with A8064AAAAANLYA1334 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
|
||||
<!-- Information: platform/external/speex is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
|
||||
<project name="platform/external/sqlite" path="external/sqlite" revision="fb30e613139b8836fdc8e81e166cf3a76e5fa17f"/>
|
||||
<!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
|
||||
<!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
|
||||
<!-- Information: platform/external/tagsoup is tagged with A8064AAAAANLYA1334 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
|
||||
<!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
|
||||
<!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
|
||||
<!-- Information: platform/external/tagsoup is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
|
||||
<!-- Information: platform/external/tinyalsa is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/tinyalsa" path="external/tinyalsa" revision="06cc244ee512c1352215e543615738bc8ac82814"/>
|
||||
<!-- Information: platform/external/tremolo is tagged with A8064AAAAANLYA1334 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
|
||||
<!-- Information: platform/external/tremolo is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
|
||||
<project name="unbootimg" path="external/unbootimg" remote="b2g" revision="9464623d92eb8668544916dc5a8f4f6337d0bc08"/>
|
||||
<!-- Information: platform/external/webp is tagged with A8064AAAAANLYA1334 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
|
||||
<!-- Information: platform/external/webrtc is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
|
||||
<!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
|
||||
<!-- Information: platform/external/webp is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
|
||||
<!-- Information: platform/external/webrtc is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
|
||||
<!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
|
||||
<!-- Information: platform/external/hostap is tagged with M8960AAAAANLYA1047 --><project name="platform/external/hostap" path="external/hostap" revision="bf04b0faadbdeb4b7943f2e2c4c5aa59df872bb1"/>
|
||||
<!-- Information: platform/external/zlib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/zlib" path="external/zlib" revision="f96a1d1ebfdf1cd582210fd09c23d8f59e0ae094"/>
|
||||
<!-- Information: platform/external/yaffs2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
|
||||
<!-- Information: platform/external/zlib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/zlib" path="external/zlib" revision="f96a1d1ebfdf1cd582210fd09c23d8f59e0ae094"/>
|
||||
<!-- Information: platform/external/yaffs2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
|
||||
<!-- Information: platform/frameworks/base is tagged with M76XXUSNEKNLYA2040 --><project name="platform/frameworks/base" path="frameworks/base" revision="eb2bc75803ca179353c24c364a9c8a8ce23e8b78"/>
|
||||
<!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
|
||||
<!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
|
||||
<!-- Information: platform/frameworks/support is tagged with M8960AAAAANLYA1005304 --><project name="platform/frameworks/support" path="frameworks/support" revision="27208692b001981f1806f4f396434f4eac78b909"/>
|
||||
<!-- Information: platform/hardware/libhardware is tagged with M8960AAAAANLYA1049B --><project name="platform/hardware/libhardware" path="hardware/libhardware" revision="4a619901847621f8a7305edf42dd07347a140484"/>
|
||||
<!-- Information: platform/hardware/libhardware_legacy is tagged with M8960AAAAANLYA153611 --><project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="87b4d7afa8f854b445e2d0d95091f6f6069f2b30"/>
|
||||
<!-- Information: platform/libcore is tagged with M8960AAAAANLYA100715A --><project name="platform/libcore" path="libcore" revision="30841f9fba9ccd5c54f4f079f495994db97f283e"/>
|
||||
<!-- Information: platform/ndk is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/ndk" path="ndk" revision="9f555971e1481854d5b4dc11b3e6af9fff4f241f"/>
|
||||
<!-- Information: platform/ndk is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/ndk" path="ndk" revision="9f555971e1481854d5b4dc11b3e6af9fff4f241f"/>
|
||||
<!-- Information: platform/prebuilt is tagged with M8960AAAAANLYA1005304 --><project name="platform/prebuilt" path="prebuilt" revision="447ea790fcc957dde59730ecc2a65ca263bdc733"/>
|
||||
<!-- Information: platform/system/bluetooth is tagged with M8960AAAAANLYA100703 --><project name="platform/system/bluetooth" path="system/bluetooth" revision="7772cad4823f1f427ce1d4df84a55982386d6d18"/>
|
||||
<!-- Information: platform/system/core is tagged with M76XXUSNEKNLYA2040 --><project name="platform/system/core" path="system/core" revision="bf1970408676ce570b8f4dc3efa038e47552137f"/>
|
||||
|
@ -96,13 +97,13 @@
|
|||
<!-- Information: device/qcom/common is tagged with M8960AAAAANLYA100715A --><project name="device/qcom/common" path="device/qcom/common" revision="b9cdab8e1e1a215a8c65b8d5816f666bec7be205"/>
|
||||
<!-- Information: platform/vendor/qcom/msm7627a is tagged with M8960AAAAANLYA100715A --><project name="platform/vendor/qcom/msm7627a" path="device/qcom/msm7627a" revision="d920a502ba17cf4d716f8b1a615f07e796b0501a"/>
|
||||
<project name="android-device-otoro" path="device/qcom/otoro" remote="b2g" revision="e3e99b264dd0230108aa78f2b653db4ce0e494fb"/>
|
||||
<project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="f8ca54267ed2ceabefadf96b6953814ac89c5056"/>
|
||||
<project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="e74925a10e11a4f0bc56158c248bd20c521d3dd7"/>
|
||||
<project name="codeaurora_kernel_msm" path="kernel" remote="b2g" revision="0a01247e4b0880f93424b27251cd3a1f6b19dbb2"/>
|
||||
<!-- Information: platform/hardware/qcom/camera is tagged with M76XXUSNEKNLYA2040 --><project name="platform/hardware/qcom/camera" path="hardware/qcom/camera" revision="1acf77a75e30f3fc8b1eed2057c97adf1cb1633f"/>
|
||||
<project name="hardware_qcom_display" path="hardware/qcom/display" remote="b2g" revision="6405d30f2fac7d8a1f2cb17b99fb7dd0a8bcfdac"/>
|
||||
<!-- Information: platform/hardware/qcom/media is tagged with M8960AAAAANLYA100715A --><project name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="552c3ddb7174a01f3508782d40c4d8c845ab441a"/>
|
||||
<!-- Information: platform/hardware/qcom/gps is tagged with M8960AAAAANLYA100705 --><project name="platform/hardware/qcom/gps" path="hardware/qcom/gps" revision="23d5707b320d7fc69f8ba3b7d84d78a1c5681708"/>
|
||||
<!-- Information: platform/hardware/msm7k is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/hardware/msm7k" path="hardware/msm7k" revision="8892d46805c5639b55dd07547745c5180da861e7"/>
|
||||
<!-- Information: platform/hardware/msm7k is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/hardware/msm7k" path="hardware/msm7k" revision="8892d46805c5639b55dd07547745c5180da861e7"/>
|
||||
<!-- Information: platform/vendor/qcom-opensource/omx/mm-core is tagged with M8960AAAAANLYA100715A --><project name="platform/vendor/qcom-opensource/omx/mm-core" path="vendor/qcom/opensource/omx/mm-core" revision="ab17ac9a074b4bb69986a8436336bdfbbaf9cd39"/>
|
||||
<!-- Information: platform/hardware/ril is tagged with M76XXUSNEKNLYA1610 --><project name="platform/hardware/ril" path="hardware/ril" remote="caf" revision="fe9a3f63922143b57e79ed570bab2328df8c83a5"/>
|
||||
</manifest>
|
||||
</manifest>
|
|
@ -4,15 +4,15 @@
|
|||
"mock_target": "mozilla-centos6-i386",
|
||||
"mock_packages": ["ccache", "make", "bison", "flex", "gcc", "g++", "mpfr", "zlib-devel", "ncurses-devel", "zip", "autoconf213", "glibc-static", "perl-Digest-SHA", "wget", "alsa-lib", "atk", "cairo", "dbus-glib", "fontconfig", "freetype", "glib2", "gtk2", "libXRender", "libXt", "pango", "mozilla-python27-mercurial", "openssh-clients", "nss-devel"],
|
||||
"mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
|
||||
"build_targets": ["boottarball", "systemtarball", "userdatatarball"],
|
||||
"build_targets": ["boottarball", "systemtarball", "userdatatarball", "package-tests"],
|
||||
"upload_files": [
|
||||
"{workdir}/out/target/product/panda/*.tar.bz2",
|
||||
"{objdir}/dist/b2g-update/*.mar",
|
||||
"{objdir}/dist/b2g-*.tar.gz",
|
||||
"{workdir}/out/target/product/panda/tests/*.zip",
|
||||
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
||||
"{srcdir}/b2g/config/panda/README",
|
||||
"{workdir}/sources.xml"
|
||||
],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"vcs": "hgtool",
|
||||
"repo": "http://hg.mozilla.org/integration/gaia-central",
|
||||
|
|
|
@ -4,15 +4,15 @@
|
|||
"mock_target": "mozilla-centos6-i386",
|
||||
"mock_packages": ["ccache", "make", "bison", "flex", "gcc", "g++", "mpfr", "zlib-devel", "ncurses-devel", "zip", "autoconf213", "glibc-static", "perl-Digest-SHA", "wget", "alsa-lib", "atk", "cairo", "dbus-glib", "fontconfig", "freetype", "glib2", "gtk2", "libXRender", "libXt", "pango", "mozilla-python27-mercurial", "openssh-clients", "nss-devel"],
|
||||
"mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
|
||||
"build_targets": ["boottarball", "systemtarball", "userdatatarball"],
|
||||
"build_targets": ["boottarball", "systemtarball", "userdatatarball", "package-tests"],
|
||||
"upload_files": [
|
||||
"{workdir}/out/target/product/panda/*.tar.bz2",
|
||||
"{objdir}/dist/b2g-update/*.mar",
|
||||
"{objdir}/dist/b2g-*.tar.gz",
|
||||
"{workdir}/out/target/product/panda/tests/*.zip",
|
||||
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
||||
"{srcdir}/b2g/config/panda/README",
|
||||
"{workdir}/sources.xml"
|
||||
],
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"vcs": "hgtool",
|
||||
"repo": "http://hg.mozilla.org/integration/gaia-nightly",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[
|
||||
{
|
||||
"size": 649725280,
|
||||
"digest": "9059a4ebdf8d1ead0e9975fb872d95b07bceba1f84453f47a32559f258351ee6f6ff459c2747130603de309586dfaf784e674fd7a558be354f276795d12c273f",
|
||||
"size": 676548372,
|
||||
"digest": "e94c1ef674d2144ef19bf6b5faa0bc050f2f6e61d5a859c20f0d61a4665cd4587836f2c45dbc3a2b264f94b4da9db7f31d566d6ad21e9e43b90bc3f617508184",
|
||||
"algorithm": "sha512",
|
||||
"filename": "gonk.tar.xz"
|
||||
}
|
||||
|
|
|
@ -14,67 +14,67 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="9947f535cbe34fe583d122322b077cb0fc0a9ff7"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="654358494ba601a46ef9838debc95417ae464cc6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="32106d4ea635ebe17a1610b643b398db639b8b97"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
|
||||
|
||||
<!-- Stock Android things -->
|
||||
<!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
<!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
<project name="platform/bionic" path="bionic" revision="c7bab8cb8483e7869eabdbd4add7c9e5beeecc80"/>
|
||||
<!-- Information: platform/bootable/recovery is tagged with android-4.0.4_r2.1 --><project name="platform/bootable/recovery" path="bootable/recovery" revision="fadc5ac81d6400ebdd041f7d4ea64021596d6b7d"/>
|
||||
<!-- Information: device/common is tagged with android-sdk-adt_r20 --><project name="device/common" path="device/common" revision="7d4526582f88808a3194e1a3b304abb369d2745c"/>
|
||||
<!-- Information: device/sample is tagged with android-4.0.4_r2.1 --><project name="device/sample" path="device/sample" revision="ef228b8b377a9663e94be4b1aeb6c2bf7a07d098"/>
|
||||
<!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
|
||||
<!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
|
||||
<!-- Information: platform/external/bluetooth/bluez is tagged with android-4.0.4_r2.1 --><project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="966afbd88f0bfc325bf80274ad2723c238883fa1"/>
|
||||
<!-- Information: platform/external/bluetooth/glib is tagged with android-4.1.1_r6.1 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="1143b9918eab068401b604eb11c3f651f4e38b25"/>
|
||||
<!-- Information: platform/external/bluetooth/hcidump is tagged with android-4.1.1_r6.1 --><project name="platform/external/bluetooth/hcidump" path="external/bluetooth/hcidump" revision="7322661808c2006b7848e79e6bb72b37fbcf6710"/>
|
||||
<!-- Information: platform/external/bsdiff is tagged with A8064AAAAANLYA1334 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
|
||||
<!-- Information: platform/external/bsdiff is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
|
||||
<project name="platform/external/busybox" path="external/busybox" remote="linaro" revision="4fa5717aed10a5617c52def848dbd42ec7eca35b"/>
|
||||
<!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
|
||||
<!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
|
||||
<!-- Information: platform/external/dbus is tagged with android-4.1.1_r6.1 --><project name="platform/external/dbus" path="external/dbus" revision="537eaff5de9aace3348436166d4cde7adc1e488e"/>
|
||||
<!-- Information: platform/external/dhcpcd is tagged with android-sdk-adt_r20 --><project name="platform/external/dhcpcd" path="external/dhcpcd" revision="ddaa48f57b54b2862b3e6dcf18a44c9647f3baaa"/>
|
||||
<!-- Information: platform/external/dnsmasq is tagged with A8064AAAAANLYA1334 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
|
||||
<!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
|
||||
<!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
|
||||
<!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
|
||||
<!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
|
||||
<!-- Information: platform/external/giflib is tagged with A8064AAAAANLYA1334 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
|
||||
<!-- Information: platform/external/dnsmasq is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
|
||||
<!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
|
||||
<!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
|
||||
<!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
|
||||
<!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
|
||||
<!-- Information: platform/external/giflib is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
|
||||
<!-- Information: platform/external/gtest is tagged with android-4.2.1_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
|
||||
<!-- Information: platform/external/harfbuzz is tagged with android-sdk-adt_r20 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="bae491c03a00757d83ede8d855b7d85d246bde3d"/>
|
||||
<!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
|
||||
<!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
|
||||
<!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
|
||||
<!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
|
||||
<!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
|
||||
<!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
|
||||
<!-- Information: platform/external/jpeg is tagged with android-4.1.1_r6.1 --><project name="platform/external/jpeg" path="external/jpeg" revision="d4fad7f50f79626455d88523207e05b868819cd8"/>
|
||||
<!-- Information: platform/external/libgsm is tagged with A8064AAAAANLYA1334 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
|
||||
<!-- Information: platform/external/liblzf is tagged with android-4.2.1_r1 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
|
||||
<!-- Information: platform/external/libgsm is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
|
||||
<!-- Information: platform/external/liblzf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
|
||||
<!-- Information: platform/external/libnfc-nxp is tagged with android-4.0.4_r2.1 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="533c14450e6239cce8acb74f4e4dea2c89f8f219"/>
|
||||
<!-- Information: platform/external/libnl-headers is tagged with android-4.2.1_r1 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
|
||||
<!-- Information: platform/external/libnl-headers is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
|
||||
<!-- Information: platform/external/libphonenumber is tagged with android-4.0.4_r2.1 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="d470984844c388d6766c3de6ac64e93e00480fc9"/>
|
||||
<!-- Information: platform/external/libpng is tagged with android-4.0.4_r2.1 --><project name="platform/external/libpng" path="external/libpng" revision="84d92c718ab9f48faec0f640747c4b6f7a995607"/>
|
||||
<!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
|
||||
<!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
|
||||
<!-- Information: platform/external/mksh is tagged with M8960AAAAANLYA1099D --><project name="platform/external/mksh" path="external/mksh" revision="5155f1c7438ef540d7b25eb70aa1639579795b07"/>
|
||||
<project name="platform_external_opensans" path="external/opensans" remote="b2g" revision="b5b4c226ca1d71e936153cf679dda6d3d60e2354"/>
|
||||
<!-- Information: platform/external/openssl is tagged with android-4.0.4_r2.1 --><project name="platform/external/openssl" path="external/openssl" revision="ce96fb211b9a44bbd7fb5ef7ed0e6c1244045c2e"/>
|
||||
<!-- Information: platform/external/protobuf is tagged with A8064AAAAANLYA1334 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
|
||||
<!-- Information: platform/external/safe-iop is tagged with A8064AAAAANLYA1334 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
|
||||
<!-- Information: platform/external/protobuf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
|
||||
<!-- Information: platform/external/safe-iop is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
|
||||
<project name="screencap-gonk" path="external/screencap-gonk" remote="b2g" revision="e6403c71e9eca8cb943739d5a0a192deac60fc51"/>
|
||||
<!-- Information: platform/external/skia is tagged with android-4.0.4_r2.1 --><project name="platform/external/skia" path="external/skia" revision="5c67a309e16bffe7013defda8f1217b3ce2420b4"/>
|
||||
<!-- Information: platform/external/sonivox is tagged with android-sdk-adt_r20 --><project name="platform/external/sonivox" path="external/sonivox" revision="5f9600971859fe072f31b38a51c38157f5f9b381"/>
|
||||
<!-- Information: platform/external/speex is tagged with A8064AAAAANLYA1334 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
|
||||
<!-- Information: platform/external/speex is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
|
||||
<!-- Information: platform/external/sqlite is tagged with android-4.0.4_r2.1 --><project name="platform/external/sqlite" path="external/sqlite" revision="c999ff8c12a4cf81cb9ad628f47b2720effba5e5"/>
|
||||
<!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
|
||||
<!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
|
||||
<!-- Information: platform/external/tagsoup is tagged with android-4.2.1_r1 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
|
||||
<!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
|
||||
<!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
|
||||
<!-- Information: platform/external/tagsoup is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
|
||||
<!-- Information: platform/external/tinyalsa is tagged with android-4.0.4_r2.1 --><project name="platform/external/tinyalsa" path="external/tinyalsa" revision="495239e683a728957c890c124b239f9b7b8ef5a8"/>
|
||||
<!-- Information: platform/external/tremolo is tagged with A8064AAAAANLYA1334 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
|
||||
<!-- Information: platform/external/webp is tagged with A8064AAAAANLYA1334 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
|
||||
<!-- Information: platform/external/tremolo is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
|
||||
<!-- Information: platform/external/webp is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
|
||||
<!-- Information: platform/external/webrtc is tagged with android-sdk-adt_r20 --><project name="platform/external/webrtc" path="external/webrtc" revision="4b6dc1ec58105d17dc8c2f550124cc0621dc93b7"/>
|
||||
<!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
|
||||
<!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
|
||||
<project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="6dd24fc3792d71edccef9b09140f9a44b063a553"/>
|
||||
<!-- Information: platform/external/zlib is tagged with android-4.0.4_r2.1 --><project name="platform/external/zlib" path="external/zlib" revision="69e5801bd16a495e1c1666669fe827b1ddb8d56b"/>
|
||||
<!-- Information: platform/external/yaffs2 is tagged with android-4.0.4-aah_r1 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="6232e2d5ab34a40d710e4b05ab0ec6e3727804e7"/>
|
||||
<!-- Information: platform/frameworks/base is tagged with android-4.0.4_r2.1 --><project name="platform/frameworks/base" path="frameworks/base" revision="df331873c8576e0ae34ae1ee3cc258beed373535"/>
|
||||
<!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
|
||||
<!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
|
||||
<!-- Information: platform/frameworks/support is tagged with android-4.0.4_r2.1 --><project name="platform/frameworks/support" path="frameworks/support" revision="bfc8e01b7b0d5ea70ce89d0409b72b7f7d540f43"/>
|
||||
<!-- Information: platform/hardware/libhardware is tagged with android-4.0.4_r2.1 --><project name="platform/hardware/libhardware" path="hardware/libhardware" revision="a9b677fce432b29ab8f61e13796f34880dc0fe0f"/>
|
||||
<!-- Information: platform/hardware/libhardware_legacy is tagged with android-4.0.4_r2.1 --><project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="153d0f1a27e0a157cabb6ca9d0d88248630f5695"/>
|
||||
|
@ -97,4 +97,4 @@
|
|||
<project name="Negatus" path="external/negatus" remote="mozilla" revision="5d5288e7bec67d0a6a29320308cccb1321062b58"/>
|
||||
<project name="orangutan" path="external/orangutan" remote="b2g" revision="601280aed7d7f29f1a78496f6fa41bd79c16305c"/>
|
||||
|
||||
</manifest>
|
||||
</manifest>
|
|
@ -1,6 +1,6 @@
|
|||
[
|
||||
{
|
||||
"clang_version": "r169139"
|
||||
"clang_version": "r169730"
|
||||
},
|
||||
{
|
||||
"size": 47,
|
||||
|
@ -9,8 +9,8 @@
|
|||
"filename": "setup.sh"
|
||||
},
|
||||
{
|
||||
"size": 56158651,
|
||||
"digest": "38d718f20a8fa9218e22ade312e724e6c9cdd7c6650e023cfdc21b5505fe7aa3743ae41c0abd717a1bbccec4c4271be2fa82d0e2f96c91e693d70e33b4dc00d6",
|
||||
"size": 56115091,
|
||||
"digest": "d7188264f28d6f6a84fab9737520cad22fe3d575917a87fc110d0b9a2033617c35da83530ea20553f5c55a996459f750fa2d0c49288c1fb9671f6252a92cf4c9",
|
||||
"algorithm": "sha512",
|
||||
"filename": "clang.tar.bz2"
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
"build_targets": [],
|
||||
"upload_files": [
|
||||
"{objdir}/dist/b2g-update/*.mar",
|
||||
"{objdir}/dist/b2g-*.tar.gz",
|
||||
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
||||
"{workdir}/sources.xml"
|
||||
],
|
||||
|
@ -24,6 +23,7 @@
|
|||
"MOZILLA_OFFICIAL": "1",
|
||||
"B2GUPDATER": "1"
|
||||
},
|
||||
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||
"gaia": {
|
||||
"vcs": "hgtool",
|
||||
"repo": "http://hg.mozilla.org/integration/gaia-nightly",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
[
|
||||
{
|
||||
"size": 805101852,
|
||||
"digest": "553e88831f0760ef8de039a037c91499ff9334691f0532835c73a44352750a4911752cf0d5346f5e023f64b2351ed7f49a2a833c27538ddde59ad505f50ab063",
|
||||
"size": 832341968,
|
||||
"digest": "e2d099677f5f930db0b2c03eaf3812a53f02be0773bdb3bad89b1c387041e920c17b90f041bf70d9c2ab715dd4556503534483d4ebc28fb035f41cd5ebba6a52",
|
||||
"algorithm": "sha512",
|
||||
"filename": "gonk.tar.xz"
|
||||
},
|
||||
{
|
||||
"size": 8859648,
|
||||
"digest": "05d4a99e0f36cd91d1b10a2b558979ea776e9a7e03b8a921af3b0bfc62e2d96cf4faa20586c39885b6f8b25089fe07726794620a3b18c4826a2f71e29d90a8ef",
|
||||
"size": 8622080,
|
||||
"digest": "7a2bbf0c76f7b7d5e4b89f758f69b5d8bcf08ec579374877de8939ad69883ab8cd842f04fdaa03a4ef9cdf8170f242e0381dd437e969d5212ead6cdd6f79ab50",
|
||||
"algorithm": "sha512",
|
||||
"filename": "boot.img"
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<remote fetch="git://github.com/mozilla/" name="mozilla"/>
|
||||
<remote fetch="git://codeaurora.org/" name="caf"/>
|
||||
<remote fetch="git://android.git.linaro.org/" name="linaro"/>
|
||||
<remote fetch="https://git.mozilla.org" name="mozillaorg"/>
|
||||
<default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
|
||||
|
||||
<!-- Gonk specific things and forks -->
|
||||
|
@ -14,76 +15,76 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="aafa9ca4d2e9e755fe9964018a9797eac4ecc7de"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="654358494ba601a46ef9838debc95417ae464cc6"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="32106d4ea635ebe17a1610b643b398db639b8b97"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="b7911c064a71a5c18e2c92f869f6364a798b46cd"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="e1bd90051c9e937221eb1f91c94e3cde747311a7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
|
||||
|
||||
<!-- Stock Android things -->
|
||||
<!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
<!-- Information: platform/abi/cpp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
<!-- Information: platform/bionic is tagged with M8960AAAAANLYA100715A --><project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
|
||||
<!-- Information: platform/bootable/recovery is tagged with M8960AAAAANLYA100715A --><project name="platform/bootable/recovery" path="bootable/recovery" revision="e0a9ac010df3afaa47ba107192c05ac8b5516435"/>
|
||||
<!-- Information: platform/development is tagged with M8960AAAAANLYA100715A --><project name="platform/development" path="development" revision="a384622f5fcb1d2bebb9102591ff7ae91fe8ed2d"/>
|
||||
<!-- Information: device/common is tagged with M8960AAAAANLYA1005304 --><project name="device/common" path="device/common" revision="7c65ea240157763b8ded6154a17d3c033167afb7"/>
|
||||
<!-- Information: device/sample is tagged with M8960AAAAANLYA100715A --><project name="device/sample" path="device/sample" revision="c328f3d4409db801628861baa8d279fb8855892f"/>
|
||||
<!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
|
||||
<!-- Information: platform/external/apache-http is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/apache-http" path="external/apache-http" revision="6c9d8c58d3ed710f87c26820d903bb8aad81754f"/>
|
||||
<!-- Information: platform/external/bluetooth/bluez is tagged with M76XXUSNEKNLYA2040 --><project name="platform/external/bluetooth/bluez" path="external/bluetooth/bluez" revision="1023c91c66e9c3bd1132480051993bf7827770f6"/>
|
||||
<!-- Information: platform/external/bluetooth/glib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="c6b49241cc1a8950723a5f74f8f4b4f4c3fa970e"/>
|
||||
<!-- Information: platform/external/bluetooth/glib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bluetooth/glib" path="external/bluetooth/glib" revision="c6b49241cc1a8950723a5f74f8f4b4f4c3fa970e"/>
|
||||
<!-- Information: platform/external/bluetooth/hcidump is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/bluetooth/hcidump" path="external/bluetooth/hcidump" revision="02b1eb24fbb3d0135a81edb4a2175b1397308d7d"/>
|
||||
<!-- Information: platform/external/bsdiff is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
|
||||
<!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
|
||||
<!-- Information: platform/external/bsdiff is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/bsdiff" path="external/bsdiff" revision="81872540236d9bb15cccf963d05b9de48baa5375"/>
|
||||
<!-- Information: platform/external/bzip2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/bzip2" path="external/bzip2" revision="048dacdca43eed1534689ececcf2781c63e1e4ba"/>
|
||||
<!-- Information: platform/external/dbus is tagged with M8960AAAAANLYA100715A --><project name="platform/external/dbus" path="external/dbus" revision="c7517b6195dc6926728352113e6cc335da3f9c9e"/>
|
||||
<!-- Information: platform/external/dhcpcd is tagged with M8960AAAAANLYA100715A --><project name="platform/external/dhcpcd" path="external/dhcpcd" revision="1e00fb67022d0921af0fead263f81762781b9ffa"/>
|
||||
<!-- Information: platform/external/dnsmasq is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
|
||||
<!-- Information: platform/external/e2fsprogs is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
|
||||
<!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
|
||||
<!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
|
||||
<!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
|
||||
<!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
|
||||
<!-- Information: platform/external/giflib is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
|
||||
<!-- Information: platform/external/gtest is tagged with android-4.2_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
|
||||
<!-- Information: platform/external/harfbuzz is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
|
||||
<!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
|
||||
<!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
|
||||
<!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
|
||||
<!-- Information: platform/external/dnsmasq is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/dnsmasq" path="external/dnsmasq" revision="f621afad94df46204c25fc2593a19d704d2637f5"/>
|
||||
<!-- Information: platform/external/e2fsprogs is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
|
||||
<!-- Information: platform/external/expat is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
|
||||
<!-- Information: platform/external/fdlibm is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
|
||||
<!-- Information: platform/external/flac is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
|
||||
<!-- Information: platform/external/freetype is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
|
||||
<!-- Information: platform/external/giflib is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
|
||||
<!-- Information: platform/external/gtest is tagged with android-4.2.1_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
|
||||
<!-- Information: platform/external/harfbuzz is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
|
||||
<!-- Information: platform/external/icu4c is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
|
||||
<!-- Information: platform/external/iptables is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
|
||||
<!-- Information: platform/external/jhead is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
|
||||
<!-- Information: platform/external/jpeg is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/jpeg" path="external/jpeg" revision="a62e464d672a4623233180e4023034bf825f066e"/>
|
||||
<!-- Information: platform/external/libgsm is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
|
||||
<!-- Information: platform/external/liblzf is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
|
||||
<!-- Information: platform/external/libnfc-nxp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
|
||||
<!-- Information: platform/external/libnl-headers is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
|
||||
<!-- Information: platform/external/libphonenumber is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
|
||||
<!-- Information: platform/external/libgsm is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libgsm" path="external/libgsm" revision="5e4516958690b9a1b2c98f88eeecba3edd2dbda4"/>
|
||||
<!-- Information: platform/external/liblzf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
|
||||
<!-- Information: platform/external/libnfc-nxp is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
|
||||
<!-- Information: platform/external/libnl-headers is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/libnl-headers" path="external/libnl-headers" revision="6ccf7349d61f73ac26a0675d735d903ab919c658"/>
|
||||
<!-- Information: platform/external/libphonenumber is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
|
||||
<!-- Information: platform/external/libpng is tagged with M8960AAAAANLYA100715A --><project name="platform/external/libpng" path="external/libpng" revision="9c3730f0efa69f580f03463c237cd928f3196404"/>
|
||||
<!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
|
||||
<!-- Information: platform/external/libvpx is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/libvpx" path="external/libvpx" revision="3a40da0d96da5c520e7707aa14f48a80956e20d7"/>
|
||||
<!-- Information: platform/external/llvm is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/llvm" path="external/llvm" revision="bff5923831940309f7d8ddbff5826ca6ed2dc050"/>
|
||||
<!-- Information: platform/external/mksh is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/mksh" path="external/mksh" revision="ec646e8f5e7dac9a77d1de549c6ed92c04d0cd4b"/>
|
||||
<project name="platform_external_opensans" path="external/opensans" remote="b2g" revision="b5b4c226ca1d71e936153cf679dda6d3d60e2354"/>
|
||||
<!-- Information: platform/external/openssl is tagged with AU_LINUX_ANDROID_ICS.04.00.04.00.110 --><project name="platform/external/openssl" path="external/openssl" revision="27d333cce9a31c806b4bfa042925f045c727aecd"/>
|
||||
<!-- Information: platform/external/protobuf is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
|
||||
<!-- Information: platform/external/safe-iop is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
|
||||
<!-- Information: platform/external/protobuf is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/protobuf" path="external/protobuf" revision="e217977611c52bccde7f7c78e1d3c790c6357431"/>
|
||||
<!-- Information: platform/external/safe-iop is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
|
||||
<project name="screencap-gonk" path="external/screencap-gonk" remote="b2g" revision="e6403c71e9eca8cb943739d5a0a192deac60fc51"/>
|
||||
<!-- Information: platform/external/skia is tagged with M8960AAAAANLYA100715A --><project name="platform/external/skia" path="external/skia" revision="7d90c85f2c0e3b747f7c7eff8bc9253b0063b439"/>
|
||||
<!-- Information: platform/external/sonivox is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/sonivox" path="external/sonivox" revision="7c967779dfc61ac1f346e972de91d4bfce7dccbb"/>
|
||||
<!-- Information: platform/external/speex is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
|
||||
<!-- Information: platform/external/speex is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/speex" path="external/speex" revision="ebe6230a7f7c69f5a4389f2b09b7b19ef9e94f32"/>
|
||||
<project name="platform/external/sqlite" path="external/sqlite" revision="fb30e613139b8836fdc8e81e166cf3a76e5fa17f"/>
|
||||
<!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
|
||||
<!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
|
||||
<!-- Information: platform/external/tagsoup is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
|
||||
<!-- Information: platform/external/stlport is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/stlport" path="external/stlport" revision="a6734e0645fce81c9610de0488b729207bfa576e"/>
|
||||
<!-- Information: platform/external/strace is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
|
||||
<!-- Information: platform/external/tagsoup is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
|
||||
<!-- Information: platform/external/tinyalsa is tagged with M8960AAAAANLYA1005304 --><project name="platform/external/tinyalsa" path="external/tinyalsa" revision="06cc244ee512c1352215e543615738bc8ac82814"/>
|
||||
<!-- Information: platform/external/tremolo is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
|
||||
<!-- Information: platform/external/tremolo is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/tremolo" path="external/tremolo" revision="25bd78d2392dbdc879ae53382cde9d019f79cf6f"/>
|
||||
<project name="unbootimg" path="external/unbootimg" remote="b2g" revision="9464623d92eb8668544916dc5a8f4f6337d0bc08"/>
|
||||
<!-- Information: platform/external/webp is tagged with AU_LINUX_ANDROID_JB_2.2.04.01.02.14.080 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
|
||||
<!-- Information: platform/external/webrtc is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
|
||||
<!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
|
||||
<!-- Information: platform/external/webp is tagged with AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.041 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
|
||||
<!-- Information: platform/external/webrtc is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
|
||||
<!-- Information: platform/external/wpa_supplicant is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/wpa_supplicant" path="external/wpa_supplicant" revision="a01d37870bbf9892d43e792e5de0683ca41c5497"/>
|
||||
<!-- Information: platform/external/hostap is tagged with M8960AAAAANLYA1047 --><project name="platform/external/hostap" path="external/hostap" revision="bf04b0faadbdeb4b7943f2e2c4c5aa59df872bb1"/>
|
||||
<!-- Information: platform/external/zlib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/zlib" path="external/zlib" revision="f96a1d1ebfdf1cd582210fd09c23d8f59e0ae094"/>
|
||||
<!-- Information: platform/external/yaffs2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
|
||||
<!-- Information: platform/external/zlib is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/zlib" path="external/zlib" revision="f96a1d1ebfdf1cd582210fd09c23d8f59e0ae094"/>
|
||||
<!-- Information: platform/external/yaffs2 is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
|
||||
<!-- Information: platform/frameworks/base is tagged with M76XXUSNEKNLYA2040 --><project name="platform/frameworks/base" path="frameworks/base" revision="eb2bc75803ca179353c24c364a9c8a8ce23e8b78"/>
|
||||
<!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
|
||||
<!-- Information: platform/frameworks/opt/emoji is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="a95d8db002770469d72dfaf59ff37ac96db29a87"/>
|
||||
<!-- Information: platform/frameworks/support is tagged with M8960AAAAANLYA1005304 --><project name="platform/frameworks/support" path="frameworks/support" revision="27208692b001981f1806f4f396434f4eac78b909"/>
|
||||
<!-- Information: platform/hardware/libhardware is tagged with M8960AAAAANLYA1049B --><project name="platform/hardware/libhardware" path="hardware/libhardware" revision="4a619901847621f8a7305edf42dd07347a140484"/>
|
||||
<!-- Information: platform/hardware/libhardware_legacy is tagged with M8960AAAAANLYA153611 --><project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="87b4d7afa8f854b445e2d0d95091f6f6069f2b30"/>
|
||||
<!-- Information: platform/libcore is tagged with M8960AAAAANLYA100715A --><project name="platform/libcore" path="libcore" revision="30841f9fba9ccd5c54f4f079f495994db97f283e"/>
|
||||
<!-- Information: platform/ndk is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/ndk" path="ndk" revision="9f555971e1481854d5b4dc11b3e6af9fff4f241f"/>
|
||||
<!-- Information: platform/ndk is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/ndk" path="ndk" revision="9f555971e1481854d5b4dc11b3e6af9fff4f241f"/>
|
||||
<!-- Information: platform/prebuilt is tagged with M8960AAAAANLYA1005304 --><project name="platform/prebuilt" path="prebuilt" revision="447ea790fcc957dde59730ecc2a65ca263bdc733"/>
|
||||
<!-- Information: platform/system/bluetooth is tagged with M8960AAAAANLYA100703 --><project name="platform/system/bluetooth" path="system/bluetooth" revision="7772cad4823f1f427ce1d4df84a55982386d6d18"/>
|
||||
<!-- Information: platform/system/core is tagged with M76XXUSNEKNLYA2040 --><project name="platform/system/core" path="system/core" revision="bf1970408676ce570b8f4dc3efa038e47552137f"/>
|
||||
|
@ -95,14 +96,14 @@
|
|||
<!-- Otoro/Unagi specific things -->
|
||||
<!-- Information: device/qcom/common is tagged with M8960AAAAANLYA100715A --><project name="device/qcom/common" path="device/qcom/common" revision="b9cdab8e1e1a215a8c65b8d5816f666bec7be205"/>
|
||||
<!-- Information: platform/vendor/qcom/msm7627a is tagged with M8960AAAAANLYA100715A --><project name="platform/vendor/qcom/msm7627a" path="device/qcom/msm7627a" revision="d920a502ba17cf4d716f8b1a615f07e796b0501a"/>
|
||||
<project name="android-device-otoro" path="device/qcom/otoro" remote="b2g" revision="ad559059650d98bb7049720086401fc7ed4d24fb"/>
|
||||
<project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="c83d823b231b6ad8f48ba486375a0c951a4f42fb"/>
|
||||
<project name="android-device-otoro" path="device/qcom/otoro" remote="b2g" revision="e3e99b264dd0230108aa78f2b653db4ce0e494fb"/>
|
||||
<project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="e74925a10e11a4f0bc56158c248bd20c521d3dd7"/>
|
||||
<project name="codeaurora_kernel_msm" path="kernel" remote="b2g" revision="0a01247e4b0880f93424b27251cd3a1f6b19dbb2"/>
|
||||
<!-- Information: platform/hardware/qcom/camera is tagged with M76XXUSNEKNLYA2040 --><project name="platform/hardware/qcom/camera" path="hardware/qcom/camera" revision="1acf77a75e30f3fc8b1eed2057c97adf1cb1633f"/>
|
||||
<project name="hardware_qcom_display" path="hardware/qcom/display" remote="b2g" revision="6405d30f2fac7d8a1f2cb17b99fb7dd0a8bcfdac"/>
|
||||
<!-- Information: platform/hardware/qcom/media is tagged with M8960AAAAANLYA100715A --><project name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="552c3ddb7174a01f3508782d40c4d8c845ab441a"/>
|
||||
<!-- Information: platform/hardware/qcom/gps is tagged with M8960AAAAANLYA100705 --><project name="platform/hardware/qcom/gps" path="hardware/qcom/gps" revision="23d5707b320d7fc69f8ba3b7d84d78a1c5681708"/>
|
||||
<!-- Information: platform/hardware/msm7k is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/hardware/msm7k" path="hardware/msm7k" revision="8892d46805c5639b55dd07547745c5180da861e7"/>
|
||||
<!-- Information: platform/hardware/msm7k is tagged with AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.138 --><project name="platform/hardware/msm7k" path="hardware/msm7k" revision="8892d46805c5639b55dd07547745c5180da861e7"/>
|
||||
<!-- Information: platform/vendor/qcom-opensource/omx/mm-core is tagged with M8960AAAAANLYA100715A --><project name="platform/vendor/qcom-opensource/omx/mm-core" path="vendor/qcom/opensource/omx/mm-core" revision="ab17ac9a074b4bb69986a8436336bdfbbaf9cd39"/>
|
||||
<!-- Information: platform/hardware/ril is tagged with M76XXUSNEKNLYA1610 --><project name="platform/hardware/ril" path="hardware/ril" remote="caf" revision="fe9a3f63922143b57e79ed570bab2328df8c83a5"/>
|
||||
</manifest>
|
||||
</manifest>
|
|
@ -47,6 +47,7 @@ MOZ_EXTENSION_MANAGER=1
|
|||
MOZ_SYS_MSG=1
|
||||
MOZ_TIME_MANAGER=1
|
||||
|
||||
MOZ_B2G_CERTDATA=1
|
||||
MOZ_PAY=1
|
||||
MOZ_TOOLKIT_SEARCH=
|
||||
MOZ_PLACES=
|
||||
|
|
|
@ -54,6 +54,9 @@
|
|||
@BINPATH@/@DLL_PREFIX@xpcom@DLL_SUFFIX@
|
||||
@BINPATH@/@DLL_PREFIX@nspr4@DLL_SUFFIX@
|
||||
@BINPATH@/@DLL_PREFIX@mozalloc@DLL_SUFFIX@
|
||||
#ifdef MOZ_DMD
|
||||
@BINPATH@/@DLL_PREFIX@dmd@DLL_SUFFIX@
|
||||
#endif
|
||||
#ifdef XP_MACOSX
|
||||
@BINPATH@/XUL
|
||||
#else
|
||||
|
|
|
@ -146,8 +146,8 @@ libs:: $(srcdir)/profile/prefs.js
|
|||
ifndef LIBXUL_SDK
|
||||
# channel-prefs.js is handled separate from other prefs due to bug 756325
|
||||
libs:: $(srcdir)/profile/channel-prefs.js
|
||||
$(NSINSTALL) -D $(FINAL_TARGET)/defaults/pref
|
||||
$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(ACDEFINES) $^ > $(FINAL_TARGET)/defaults/pref/channel-prefs.js
|
||||
$(NSINSTALL) -D $(DIST)/bin/defaults/pref
|
||||
$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(ACDEFINES) $^ > $(DIST)/bin/defaults/pref/channel-prefs.js
|
||||
endif
|
||||
|
||||
libs:: $(srcdir)/blocklist.xml
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
<emItem blockID="i238" id="/^pink@.*\.info$/">
|
||||
<versionRange minVersion="0" maxVersion="*" severity="3">
|
||||
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
|
||||
<versionRange minVersion="19.0a1" maxVersion="*" />
|
||||
<versionRange minVersion="18.0" maxVersion="*" />
|
||||
</targetApplication>
|
||||
</versionRange>
|
||||
</emItem>
|
||||
|
|
|
@ -862,8 +862,10 @@ pref("security.alternate_certificate_error_page", "certerror");
|
|||
// Whether to start the private browsing mode at application startup
|
||||
pref("browser.privatebrowsing.autostart", false);
|
||||
|
||||
#ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||
// Whether we should skip prompting before starting the private browsing mode
|
||||
pref("browser.privatebrowsing.dont_prompt_on_enter", false);
|
||||
#endif
|
||||
|
||||
// Don't try to alter this pref, it'll be reset the next time you use the
|
||||
// bookmarking dialog
|
||||
|
@ -1045,6 +1047,9 @@ pref("devtools.debugger.ui.variables-sorting-enabled", true);
|
|||
pref("devtools.debugger.ui.variables-only-enum-visible", false);
|
||||
pref("devtools.debugger.ui.variables-searchbox-visible", false);
|
||||
|
||||
// Enable the Profiler
|
||||
pref("devtools.profiler.enabled", true);
|
||||
|
||||
// Enable the Tilt inspector
|
||||
pref("devtools.tilt.enabled", true);
|
||||
pref("devtools.tilt.intro_transition", true);
|
||||
|
@ -1163,14 +1168,15 @@ pref("pdfjs.previousHandler.alwaysAskBeforeHandling", false);
|
|||
// (This is intentionally on the high side; see bug 746055.)
|
||||
pref("image.mem.max_decoded_image_kb", 256000);
|
||||
|
||||
// Example social provider
|
||||
// Default social providers
|
||||
pref("social.manifest.facebook", "{\"origin\":\"https://www.facebook.com\",\"name\":\"Facebook Messenger\",\"workerURL\":\"https://www.facebook.com/desktop/fbdesktop2/socialfox/fbworker.js.php\",\"iconURL\":\"data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAX0lEQVQ4jWP4%2F%2F8%2FAyUYTFhHzjgDxP9JxGeQDSBVMxgTbUBCxer%2Fr999%2BQ8DJBuArJksA9A10s8AXIBoA0B%2BR%2FY%2FjD%2BEwoBoA1yT5v3PbdmCE8MAshhID%2FUMoDgzUYIBj0Cgi7ar4coAAAAASUVORK5CYII%3D\",\"sidebarURL\":\"https://www.facebook.com/desktop/fbdesktop2/?socialfox=true\"}");
|
||||
|
||||
// Comma-separated list of nsIURI::prePaths that are allowed to activate
|
||||
// built-in social functionality.
|
||||
pref("social.activation.whitelist", "https://www.facebook.com");
|
||||
|
||||
pref("social.sidebar.open", true);
|
||||
pref("social.sidebar.unload_timeout_ms", 10000);
|
||||
pref("social.active", false);
|
||||
pref("social.toast-notifications.enabled", true);
|
||||
|
||||
pref("dom.identity.enabled", false);
|
||||
|
|
|
@ -309,10 +309,8 @@
|
|||
disabled="true"/>
|
||||
#endif
|
||||
<menuitem id="appmenu_restoreLastSession"
|
||||
class="restoreLastSession"
|
||||
label="&historyRestoreLastSession.label;"
|
||||
oncommand="restoreLastSession();"
|
||||
disabled="true"/>
|
||||
command="Browser:RestoreLastSession"/>
|
||||
<menu id="appmenu_recentlyClosedTabsMenu"
|
||||
class="recentlyClosedTabsMenu"
|
||||
label="&historyUndoMenu.label;"
|
||||
|
|
|
@ -376,10 +376,8 @@
|
|||
disabled="true"/>
|
||||
#endif
|
||||
<menuitem id="historyRestoreLastSession"
|
||||
class="restoreLastSession"
|
||||
label="&historyRestoreLastSession.label;"
|
||||
oncommand="restoreLastSession();"
|
||||
disabled="true"/>
|
||||
command="Browser:RestoreLastSession"/>
|
||||
<menu id="historyUndoMenu"
|
||||
class="recentlyClosedTabsMenu"
|
||||
label="&historyUndoMenu.label;"
|
||||
|
@ -542,6 +540,7 @@
|
|||
command="Social:FocusChat"
|
||||
class="show-only-for-keyboard"/>
|
||||
<menuseparator class="social-statusarea-separator"/>
|
||||
<menuseparator class="social-provider-menu" hidden="true"/>
|
||||
<menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
|
||||
<menuitem class="social-remove-menuitem" command="Social:Remove"/>
|
||||
</menupopup>
|
||||
|
|
|
@ -660,15 +660,6 @@ HistoryMenu.prototype = {
|
|||
#endif
|
||||
},
|
||||
|
||||
toggleRestoreLastSession: function PHM_toggleRestoreLastSession() {
|
||||
let restoreItem = this._rootElt.getElementsByClassName("restoreLastSession")[0];
|
||||
|
||||
if (this._ss.canRestoreLastSession)
|
||||
restoreItem.removeAttribute("disabled");
|
||||
else
|
||||
restoreItem.setAttribute("disabled", true);
|
||||
},
|
||||
|
||||
_onPopupShowing: function HM__onPopupShowing(aEvent) {
|
||||
PlacesMenu.prototype._onPopupShowing.apply(this, arguments);
|
||||
|
||||
|
@ -679,7 +670,6 @@ HistoryMenu.prototype = {
|
|||
this.toggleRecentlyClosedTabs();
|
||||
this.toggleRecentlyClosedWindows();
|
||||
this.toggleTabsFromOtherComputers();
|
||||
this.toggleRestoreLastSession();
|
||||
},
|
||||
|
||||
_onCommand: function HM__onCommand(aEvent) {
|
||||
|
|
|
@ -251,6 +251,7 @@ var gPluginHandler = {
|
|||
}
|
||||
},
|
||||
|
||||
_notificationDisplayedOnce: false,
|
||||
handlePluginScripted: function PH_handlePluginScripted(aBrowser) {
|
||||
let contentWindow = aBrowser.contentWindow;
|
||||
if (!contentWindow)
|
||||
|
@ -278,9 +279,10 @@ var gPluginHandler = {
|
|||
});
|
||||
|
||||
let notification = PopupNotifications.getNotification("click-to-play-plugins", aBrowser);
|
||||
if (notification && !haveVisibleCTPPlugin) {
|
||||
if (notification && !haveVisibleCTPPlugin && !this._notificationDisplayedOnce) {
|
||||
notification.dismissed = false;
|
||||
PopupNotifications._update(notification.anchorElement);
|
||||
this._notificationDisplayedOnce = true;
|
||||
}
|
||||
|
||||
aBrowser._pluginScriptedState = PLUGIN_SCRIPTED_STATE_DONE;
|
||||
|
@ -643,8 +645,9 @@ var gPluginHandler = {
|
|||
let notification = PopupNotifications.getNotification("click-to-play-plugins", aBrowser);
|
||||
let dismissed = notification ? notification.dismissed : true;
|
||||
let options = { dismissed: dismissed, centerActions: centerActions };
|
||||
let icon = haveVulnerablePlugin ? "blocked-plugins-notification-icon" : "plugins-notification-icon"
|
||||
PopupNotifications.show(aBrowser, "click-to-play-plugins",
|
||||
messageString, "plugins-notification-icon",
|
||||
messageString, icon,
|
||||
mainAction, secondaryActions, options);
|
||||
},
|
||||
|
||||
|
|
|
@ -85,10 +85,11 @@
|
|||
<command id="cmd_fullZoomReset" oncommand="FullZoom.reset()"/>
|
||||
<command id="cmd_fullZoomToggle" oncommand="ZoomManager.toggleZoom();"/>
|
||||
<command id="Browser:OpenLocation" oncommand="openLocation();"/>
|
||||
<command id="Browser:RestoreLastSession" oncommand="restoreLastSession();" disabled="true"/>
|
||||
|
||||
<command id="Tools:Search" oncommand="BrowserSearch.webSearch();"/>
|
||||
<command id="Tools:Downloads" oncommand="BrowserDownloadsUI();"/>
|
||||
<command id="Tools:DevToolbox" oncommand="gDevTools.toggleToolboxCommand(gBrowser);"/>
|
||||
<command id="Tools:DevToolbox" oncommand="gDevToolsBrowser.toggleToolboxCommand(gBrowser);"/>
|
||||
<command id="Tools:DevToolbar" oncommand="DeveloperToolbar.toggle();" disabled="true" hidden="true"/>
|
||||
<command id="Tools:DevToolbarFocus" oncommand="DeveloperToolbar.focusToggle();" disabled="true"/>
|
||||
<command id="Tools:ChromeDebugger" oncommand="DebuggerUI.toggleChromeDebugger();" disabled="true" hidden="true"/>
|
||||
|
@ -96,7 +97,7 @@
|
|||
<command id="Tools:ResponsiveUI" oncommand="ResponsiveUI.toggle();" disabled="true" hidden="true"/>
|
||||
<command id="Tools:Addons" oncommand="BrowserOpenAddonsMgr();"/>
|
||||
<command id="Tools:ErrorConsole" oncommand="toJavaScriptConsole()" disabled="true" hidden="true"/>
|
||||
<command id="Tools:DevToolsConnect" oncommand="DevToolsXULCommands.openConnectScreen(gBrowser)"/>
|
||||
<command id="Tools:DevToolsConnect" oncommand="gDevToolsBrowser.openConnectScreen(gBrowser)"/>
|
||||
<command id="Tools:Sanitize"
|
||||
oncommand="Cc['@mozilla.org/browser/browserglue;1'].getService(Ci.nsIBrowserGlue).sanitize(window);"/>
|
||||
<command id="Tools:PrivateBrowsing"
|
||||
|
|
|
@ -10,17 +10,17 @@ XPCOMUtils.defineLazyModuleGetter(this, "SharedFrame",
|
|||
"resource:///modules/SharedFrame.jsm");
|
||||
|
||||
let SocialUI = {
|
||||
// Called on delayed startup to initialize UI
|
||||
// Called on delayed startup to initialize the UI
|
||||
init: function SocialUI_init() {
|
||||
Services.obs.addObserver(this, "social:pref-changed", false);
|
||||
Services.obs.addObserver(this, "social:ambient-notification-changed", false);
|
||||
Services.obs.addObserver(this, "social:profile-changed", false);
|
||||
Services.obs.addObserver(this, "social:recommend-info-changed", false);
|
||||
Services.obs.addObserver(this, "social:frameworker-error", false);
|
||||
Services.obs.addObserver(this, "social:provider-set", false);
|
||||
|
||||
Services.prefs.addObserver("social.sidebar.open", this, false);
|
||||
Services.prefs.addObserver("social.toast-notifications.enabled", this, false);
|
||||
Services.prefs.addObserver("social.active", this, false);
|
||||
|
||||
gBrowser.addEventListener("ActivateSocialFeature", this._activationEventHandler, true, true);
|
||||
|
||||
|
@ -40,14 +40,111 @@ let SocialUI = {
|
|||
Services.obs.removeObserver(this, "social:profile-changed");
|
||||
Services.obs.removeObserver(this, "social:recommend-info-changed");
|
||||
Services.obs.removeObserver(this, "social:frameworker-error");
|
||||
Services.obs.removeObserver(this, "social:provider-set");
|
||||
|
||||
Services.prefs.removeObserver("social.sidebar.open", this);
|
||||
Services.prefs.removeObserver("social.toast-notifications.enabled", this);
|
||||
Services.prefs.removeObserver("social.active", this);
|
||||
},
|
||||
|
||||
// Called once, after window load, once Social.jsm's provider has been set.
|
||||
_providerReady: function SocialUI_providerReady() {
|
||||
this._updateActiveUI();
|
||||
this._updateMenuItems();
|
||||
|
||||
SocialChatBar.update();
|
||||
SocialShareButton.init();
|
||||
SocialMenu.populate();
|
||||
SocialToolbar.init();
|
||||
SocialSidebar.init();
|
||||
},
|
||||
|
||||
// Social.provider has changed, update any state that depends on it.
|
||||
// Note: this method is not called when Social.provider is first set, during
|
||||
// the first window load.
|
||||
_updateProvider: function () {
|
||||
// XXX audit for handling nullness of social.provider
|
||||
this._updateActiveUI();
|
||||
this._updateMenuItems();
|
||||
|
||||
SocialChatBar.update();
|
||||
SocialShareButton.updateProvider();
|
||||
SocialMenu.populate();
|
||||
SocialToolbar.updateProvider();
|
||||
SocialSidebar.update();
|
||||
},
|
||||
|
||||
// The entire feature is being turned on/off.
|
||||
_updateEnabledState: function () {
|
||||
this._updateActiveUI();
|
||||
SocialChatBar.update();
|
||||
SocialSidebar.update();
|
||||
SocialShareButton.updateButtonHiddenState();
|
||||
SocialMenu.populate();
|
||||
SocialToolbar.updateButtonHiddenState();
|
||||
SocialToolbar.populateProviderMenus();
|
||||
},
|
||||
|
||||
_matchesCurrentProvider: function (origin) {
|
||||
return Social.provider && Social.provider.origin == origin;
|
||||
},
|
||||
|
||||
observe: function SocialUI_observe(subject, topic, data) {
|
||||
// Exceptions here sometimes don't get reported properly, report them
|
||||
// manually :(
|
||||
try {
|
||||
switch (topic) {
|
||||
case "social:provider-set":
|
||||
this._updateProvider();
|
||||
break;
|
||||
case "social:pref-changed":
|
||||
this._updateEnabledState();
|
||||
break;
|
||||
|
||||
// Provider-specific notifications
|
||||
case "social:ambient-notification-changed":
|
||||
if (this._matchesCurrentProvider(data)) {
|
||||
SocialToolbar.updateButton();
|
||||
SocialMenu.populate();
|
||||
}
|
||||
break;
|
||||
case "social:profile-changed":
|
||||
if (this._matchesCurrentProvider(data)) {
|
||||
SocialToolbar.updateProfile();
|
||||
SocialShareButton.updateProfileInfo();
|
||||
SocialChatBar.update();
|
||||
}
|
||||
break;
|
||||
case "social:recommend-info-changed":
|
||||
if (this._matchesCurrentProvider(data)) {
|
||||
SocialShareButton.updateShareState();
|
||||
}
|
||||
break;
|
||||
case "social:frameworker-error":
|
||||
if (Social.provider && Social.provider.origin == data) {
|
||||
SocialSidebar.setSidebarErrorMessage("frameworker-error");
|
||||
}
|
||||
break;
|
||||
|
||||
case "nsPref:changed":
|
||||
if (data == "social.sidebar.open") {
|
||||
SocialSidebar.update();
|
||||
}
|
||||
break;
|
||||
}
|
||||
} catch (e) {
|
||||
Components.utils.reportError(e + e.stack);
|
||||
throw e;
|
||||
}
|
||||
},
|
||||
|
||||
nonBrowserWindowInit: function SocialUI_nonBrowserInit() {
|
||||
// Disable the social menu item in non-browser windows
|
||||
document.getElementById("menu_socialAmbientMenu").hidden = true;
|
||||
},
|
||||
|
||||
// Miscellaneous helpers
|
||||
showProfile: function SocialUI_showProfile() {
|
||||
if (this.haveLoggedInUser())
|
||||
if (Social.haveLoggedInUser())
|
||||
openUILinkIn(Social.provider.profile.profileURL, "tab");
|
||||
else {
|
||||
// XXX Bug 789585 will implement an API for provider-specified login pages.
|
||||
|
@ -55,104 +152,39 @@ let SocialUI = {
|
|||
}
|
||||
},
|
||||
|
||||
observe: function SocialUI_observe(subject, topic, data) {
|
||||
switch (topic) {
|
||||
case "social:pref-changed":
|
||||
// Exceptions here sometimes don't get reported properly, report them
|
||||
// manually :(
|
||||
try {
|
||||
this.updateToggleCommand();
|
||||
SocialShareButton.updateButtonHiddenState();
|
||||
SocialToolbar.updateButtonHiddenState();
|
||||
SocialSidebar.update();
|
||||
SocialChatBar.update();
|
||||
SocialFlyout.unload();
|
||||
SocialMenu.populate();
|
||||
} catch (e) {
|
||||
Components.utils.reportError(e);
|
||||
throw e;
|
||||
}
|
||||
break;
|
||||
case "social:ambient-notification-changed":
|
||||
SocialToolbar.updateButton();
|
||||
SocialMenu.populate();
|
||||
break;
|
||||
case "social:profile-changed":
|
||||
SocialToolbar.updateProfile();
|
||||
SocialShareButton.updateProfileInfo();
|
||||
SocialChatBar.update();
|
||||
break;
|
||||
case "social:recommend-info-changed":
|
||||
SocialShareButton.updateShareState();
|
||||
break;
|
||||
case "social:frameworker-error":
|
||||
if (Social.provider) {
|
||||
Social.errorState = "frameworker-error";
|
||||
SocialSidebar.setSidebarErrorMessage("frameworker-error");
|
||||
}
|
||||
break;
|
||||
case "nsPref:changed":
|
||||
this.updateActiveBroadcaster();
|
||||
this.updateToggleCommand();
|
||||
SocialSidebar.update();
|
||||
SocialToolbar.updateButton();
|
||||
SocialMenu.populate();
|
||||
break;
|
||||
}
|
||||
},
|
||||
_updateActiveUI: function SocialUI_updateActiveUI() {
|
||||
let broadcaster = document.getElementById("socialActiveBroadcaster");
|
||||
broadcaster.hidden = !Social.active;
|
||||
|
||||
get toggleCommand() {
|
||||
return document.getElementById("Social:Toggle");
|
||||
},
|
||||
|
||||
// Called once Social.jsm's provider has been set
|
||||
_providerReady: function SocialUI_providerReady() {
|
||||
// If we couldn't find a provider, nothing to do here.
|
||||
if (!Social.provider)
|
||||
return;
|
||||
|
||||
this.updateToggleCommand();
|
||||
|
||||
// The View->Sidebar and Menubar->Tools menu.
|
||||
for (let id of ["menu_socialSidebar", "menu_socialAmbientMenu"])
|
||||
document.getElementById(id).setAttribute("label", Social.provider.name);
|
||||
|
||||
SocialToolbar.init();
|
||||
SocialShareButton.init();
|
||||
SocialSidebar.init();
|
||||
SocialMenu.populate();
|
||||
SocialChatBar.update();
|
||||
this.updateActiveBroadcaster();
|
||||
},
|
||||
|
||||
updateToggleCommand: function SocialUI_updateToggleCommand() {
|
||||
if (!Social.provider)
|
||||
return;
|
||||
|
||||
let toggleCommand = this.toggleCommand;
|
||||
let toggleCommand = document.getElementById("Social:Toggle");
|
||||
// We only need to update the command itself - all our menu items use it.
|
||||
let enabled = Services.prefs.getBoolPref("social.enabled");
|
||||
let label = gNavigatorBundle.getFormattedString(enabled ? "social.turnOff.label" : "social.turnOn.label",
|
||||
let label = gNavigatorBundle.getFormattedString(Social.provider.enabled ?
|
||||
"social.turnOff.label" :
|
||||
"social.turnOn.label",
|
||||
[Social.provider.name]);
|
||||
let accesskey = gNavigatorBundle.getString(enabled ? "social.turnOff.accesskey" : "social.turnOn.accesskey");
|
||||
let accesskey = gNavigatorBundle.getString(Social.provider.enabled ?
|
||||
"social.turnOff.accesskey" :
|
||||
"social.turnOn.accesskey");
|
||||
toggleCommand.setAttribute("label", label);
|
||||
toggleCommand.setAttribute("accesskey", accesskey);
|
||||
toggleCommand.setAttribute("hidden", Social.active ? "false" : "true");
|
||||
},
|
||||
|
||||
updateActiveBroadcaster: function SocialUI_updateActiveBroadcaster() {
|
||||
let broadcaster = document.getElementById("socialActiveBroadcaster");
|
||||
broadcaster.hidden = !Social.active;
|
||||
_updateMenuItems: function () {
|
||||
if (!Social.provider)
|
||||
return;
|
||||
|
||||
// The View->Sidebar and Menubar->Tools menu.
|
||||
for (let id of ["menu_socialSidebar", "menu_socialAmbientMenu"])
|
||||
document.getElementById(id).setAttribute("label", Social.provider.name);
|
||||
},
|
||||
|
||||
// This handles "ActivateSocialFeature" events fired against content documents
|
||||
// in this window.
|
||||
_activationEventHandler: function SocialUI_activationHandler(e) {
|
||||
// Nothing to do if Social is already enabled, or we don't have a provider
|
||||
// to enable yet.
|
||||
if (Social.enabled || !Social.provider)
|
||||
return;
|
||||
|
||||
let targetDoc = e.target;
|
||||
|
||||
// Event must be fired against the document
|
||||
|
@ -164,9 +196,9 @@ let SocialUI = {
|
|||
return;
|
||||
|
||||
// Check that the associated document's origin is in our whitelist
|
||||
let prePath = targetDoc.documentURIObject.prePath;
|
||||
let providerOrigin = targetDoc.nodePrincipal.origin;
|
||||
let whitelist = Services.prefs.getCharPref("social.activation.whitelist");
|
||||
if (whitelist.split(",").indexOf(prePath) == -1)
|
||||
if (whitelist.split(",").indexOf(providerOrigin) == -1)
|
||||
return;
|
||||
|
||||
// If the last event was received < 1s ago, ignore this one
|
||||
|
@ -175,34 +207,44 @@ let SocialUI = {
|
|||
return;
|
||||
Social.lastEventReceived = now;
|
||||
|
||||
// Keep track of the old provider in case of undo
|
||||
let oldOrigin = Social.provider ? Social.provider.origin : "";
|
||||
|
||||
// Enable the social functionality, and indicate that it was activated
|
||||
Social.active = true;
|
||||
let provider = Social.activateFromOrigin(providerOrigin);
|
||||
|
||||
// Provider to activate may not have been found
|
||||
if (!provider)
|
||||
return;
|
||||
|
||||
// Show a warning, allow undoing the activation
|
||||
let description = document.getElementById("social-activation-message");
|
||||
let brandShortName = document.getElementById("bundle_brand").getString("brandShortName");
|
||||
let message = gNavigatorBundle.getFormattedString("social.activated.description",
|
||||
[Social.provider.name, brandShortName]);
|
||||
[provider.name, brandShortName]);
|
||||
description.value = message;
|
||||
|
||||
SocialUI.notificationPanel.hidden = false;
|
||||
let notificationPanel = SocialUI.notificationPanel;
|
||||
// Set the origin being activated and the previously active one, to allow undo
|
||||
notificationPanel.setAttribute("origin", provider.origin);
|
||||
notificationPanel.setAttribute("oldorigin", oldOrigin);
|
||||
|
||||
// Show the panel
|
||||
notificationPanel.hidden = false;
|
||||
setTimeout(function () {
|
||||
SocialUI.notificationPanel.openPopup(SocialToolbar.button, "bottomcenter topright");
|
||||
}.bind(this), 0);
|
||||
},
|
||||
|
||||
get notificationPanel() {
|
||||
return document.getElementById("socialActivatedNotification")
|
||||
notificationPanel.openPopup(SocialToolbar.button, "bottomcenter topright");
|
||||
}, 0);
|
||||
},
|
||||
|
||||
undoActivation: function SocialUI_undoActivation() {
|
||||
Social.active = false;
|
||||
let origin = this.notificationPanel.getAttribute("origin");
|
||||
let oldOrigin = this.notificationPanel.getAttribute("oldorigin");
|
||||
Social.deactivateFromOrigin(origin, oldOrigin);
|
||||
this.notificationPanel.hidePopup();
|
||||
},
|
||||
|
||||
haveLoggedInUser: function SocialUI_haveLoggedInUser() {
|
||||
return !!(Social.provider && Social.provider.profile && Social.provider.profile.userName);
|
||||
get notificationPanel() {
|
||||
return document.getElementById("socialActivatedNotification");
|
||||
},
|
||||
|
||||
closeSocialPanelForLinkTraversal: function (target, linkNode) {
|
||||
|
@ -238,8 +280,9 @@ let SocialUI = {
|
|||
|
||||
let confirmationIndex = ps.confirmEx(null, dialogTitle, text, flags,
|
||||
okButtonText, null, null, null, {});
|
||||
if (confirmationIndex == 0)
|
||||
Social.active = false;
|
||||
if (confirmationIndex == 0) {
|
||||
Social.deactivateFromOrigin(Social.provider.origin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -250,7 +293,7 @@ let SocialChatBar = {
|
|||
// Whether the chatbar is available for this window. Note that in full-screen
|
||||
// mode chats are available, but not shown.
|
||||
get isAvailable() {
|
||||
if (!SocialUI.haveLoggedInUser())
|
||||
if (!Social.haveLoggedInUser())
|
||||
return false;
|
||||
let docElem = document.documentElement;
|
||||
let chromeless = docElem.getAttribute("chromehidden").indexOf("extrachrome") >= 0;
|
||||
|
@ -477,10 +520,19 @@ let SocialFlyout = {
|
|||
let SocialShareButton = {
|
||||
// Called once, after window load, when the Social.provider object is initialized
|
||||
init: function SSB_init() {
|
||||
this.updateProvider();
|
||||
},
|
||||
|
||||
// Called when the Social.provider changes
|
||||
updateProvider: function () {
|
||||
this.updateButtonHiddenState();
|
||||
if (!Social.provider)
|
||||
return;
|
||||
this.updateProfileInfo();
|
||||
},
|
||||
|
||||
// Called when the provider's profile info changes (or when the provider
|
||||
// changes, via updateProvider)
|
||||
updateProfileInfo: function SSB_updateProfileInfo() {
|
||||
let profileRow = document.getElementById("unsharePopupHeader");
|
||||
let profile = Social.provider.profile;
|
||||
|
@ -493,9 +545,7 @@ let SocialShareButton = {
|
|||
} else {
|
||||
profileRow.hidden = true;
|
||||
this.updateButtonHiddenState();
|
||||
return;
|
||||
}
|
||||
this.updateShareState();
|
||||
},
|
||||
|
||||
get shareButton() {
|
||||
|
@ -518,8 +568,9 @@ let SocialShareButton = {
|
|||
let shareButton = this.shareButton;
|
||||
if (shareButton)
|
||||
shareButton.hidden = !Social.uiVisible || Social.provider.recommendInfo == null ||
|
||||
!SocialUI.haveLoggedInUser() ||
|
||||
!Social.haveLoggedInUser() ||
|
||||
!this.canSharePage(gBrowser.currentURI);
|
||||
|
||||
// also update the relevent command's disabled state so the keyboard
|
||||
// shortcut only works when available.
|
||||
let cmd = document.getElementById("Social:SharePage");
|
||||
|
@ -577,8 +628,6 @@ let SocialShareButton = {
|
|||
},
|
||||
|
||||
updateShareState: function SSB_updateShareState() {
|
||||
// we might have been called due to a location change, and the new location
|
||||
// might change the state of "can this url be shared"
|
||||
this.updateButtonHiddenState();
|
||||
|
||||
let shareButton = this.shareButton;
|
||||
|
@ -626,31 +675,32 @@ var SocialMenu = {
|
|||
|
||||
let separator = document.getElementById("socialAmbientMenuSeparator");
|
||||
separator.hidden = true;
|
||||
if (!Social.uiVisible)
|
||||
return;
|
||||
|
||||
let provider = Social.provider;
|
||||
if (provider && provider.enabled) {
|
||||
let iconNames = Object.keys(provider.ambientNotificationIcons);
|
||||
for (let name of iconNames) {
|
||||
let icon = provider.ambientNotificationIcons[name];
|
||||
if (!icon.label || !icon.menuURL)
|
||||
continue;
|
||||
separator.hidden = false;
|
||||
let menuitem = document.createElement("menuitem");
|
||||
menuitem.setAttribute("label", icon.label);
|
||||
menuitem.classList.add("ambient-menuitem");
|
||||
menuitem.addEventListener("command", function() {
|
||||
openUILinkIn(icon.menuURL, "tab");
|
||||
}, false);
|
||||
submenu.insertBefore(menuitem, separator);
|
||||
}
|
||||
let iconNames = Object.keys(provider.ambientNotificationIcons);
|
||||
for (let name of iconNames) {
|
||||
let icon = provider.ambientNotificationIcons[name];
|
||||
if (!icon.label || !icon.menuURL)
|
||||
continue;
|
||||
separator.hidden = false;
|
||||
let menuitem = document.createElement("menuitem");
|
||||
menuitem.setAttribute("label", icon.label);
|
||||
menuitem.classList.add("ambient-menuitem");
|
||||
menuitem.addEventListener("command", function() {
|
||||
openUILinkIn(icon.menuURL, "tab");
|
||||
}, false);
|
||||
submenu.insertBefore(menuitem, separator);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// XXX Need to audit that this is being initialized correctly
|
||||
var SocialToolbar = {
|
||||
// Called once, after window load, when the Social.provider object is initialized
|
||||
// Called once, after window load, when the Social.provider object is
|
||||
// initialized.
|
||||
init: function SocialToolbar_init() {
|
||||
this.button.setAttribute("image", Social.provider.iconURL);
|
||||
|
||||
let brandShortName = document.getElementById("bundle_brand").getString("brandShortName");
|
||||
let label = gNavigatorBundle.getFormattedString("social.remove.label",
|
||||
[brandShortName]);
|
||||
|
@ -660,18 +710,29 @@ var SocialToolbar = {
|
|||
removeCommand.setAttribute("label", label);
|
||||
removeCommand.setAttribute("accesskey", accesskey);
|
||||
|
||||
this.updateProvider();
|
||||
this._dynamicResizer = new DynamicResizeWatcher();
|
||||
},
|
||||
|
||||
// Called when the Social.provider changes
|
||||
updateProvider: function () {
|
||||
if (!Social.provider)
|
||||
return;
|
||||
this.button.setAttribute("image", Social.provider.iconURL);
|
||||
this.updateButton();
|
||||
this.updateProfile();
|
||||
this._dynamicResizer = new DynamicResizeWatcher();
|
||||
this.populateProviderMenus();
|
||||
},
|
||||
|
||||
get button() {
|
||||
return document.getElementById("social-provider-button");
|
||||
},
|
||||
|
||||
// Note: this doesn't actually handle hiding the toolbar button,
|
||||
// socialActiveBroadcaster is responsible for that.
|
||||
updateButtonHiddenState: function SocialToolbar_updateButtonHiddenState() {
|
||||
let tbi = document.getElementById("social-toolbar-item");
|
||||
let socialEnabled = Social.enabled;
|
||||
let socialEnabled = Social.uiVisible;
|
||||
for (let className of ["social-statusarea-separator", "social-statusarea-user"]) {
|
||||
for (let element of document.getElementsByClassName(className))
|
||||
element.hidden = !socialEnabled;
|
||||
|
@ -679,7 +740,7 @@ var SocialToolbar = {
|
|||
let toggleNotificationsCommand = document.getElementById("Social:ToggleNotifications");
|
||||
toggleNotificationsCommand.setAttribute("hidden", !socialEnabled);
|
||||
|
||||
if (!SocialUI.haveLoggedInUser() || !socialEnabled) {
|
||||
if (!Social.haveLoggedInUser() || !socialEnabled) {
|
||||
let parent = document.getElementById("social-notification-panel");
|
||||
while (parent.hasChildNodes()) {
|
||||
let frame = parent.firstChild;
|
||||
|
@ -700,9 +761,8 @@ var SocialToolbar = {
|
|||
let userPortrait = profile.portrait || "chrome://global/skin/icons/information-32.png";
|
||||
|
||||
let userDetailsBroadcaster = document.getElementById("socialBroadcaster_userDetails");
|
||||
let loggedInStatusValue = profile.userName ?
|
||||
profile.userName :
|
||||
userDetailsBroadcaster.getAttribute("notLoggedInLabel");;
|
||||
let loggedInStatusValue = profile.userName ||
|
||||
userDetailsBroadcaster.getAttribute("notLoggedInLabel");
|
||||
|
||||
// "image" and "label" are used by Mac's native menus that do not render the menuitem's children
|
||||
// elements. "src" and "value" are used by the image/label children on the other platforms.
|
||||
|
@ -713,6 +773,7 @@ var SocialToolbar = {
|
|||
userDetailsBroadcaster.setAttribute("label", loggedInStatusValue);
|
||||
},
|
||||
|
||||
// XXX doesn't this need to be called for profile changes, given its use of provider.profile?
|
||||
updateButton: function SocialToolbar_updateButton() {
|
||||
this.updateButtonHiddenState();
|
||||
let provider = Social.provider;
|
||||
|
@ -728,8 +789,8 @@ var SocialToolbar = {
|
|||
const CACHE_PREF_NAME = "social.cached.ambientNotificationIcons";
|
||||
// provider.profile == undefined means no response yet from the provider
|
||||
// to tell us whether the user is logged in or not.
|
||||
if (!Social.provider || !Social.provider.enabled ||
|
||||
(!SocialUI.haveLoggedInUser() && provider.profile !== undefined)) {
|
||||
if (!provider.enabled ||
|
||||
(!Social.haveLoggedInUser() && provider.profile !== undefined)) {
|
||||
// Either no enabled provider, or there is a provider and it has
|
||||
// responded with a profile and the user isn't loggedin. The icons
|
||||
// etc have already been removed by updateButtonHiddenState, so we want
|
||||
|
@ -931,6 +992,41 @@ var SocialToolbar = {
|
|||
encodeURIComponent(src), null, null, null, null);
|
||||
let panel = aNotificationFrame.parentNode;
|
||||
sizeSocialPanelToContent(panel, aNotificationFrame);
|
||||
},
|
||||
|
||||
populateProviderMenus: function SocialToolbar_renderProviderMenus() {
|
||||
let providerMenuSeps = document.getElementsByClassName("social-provider-menu");
|
||||
let activeProviders = [p for (p of Social.providers) if (p.active)];
|
||||
for (let providerMenuSep of providerMenuSeps)
|
||||
this._populateProviderMenu(providerMenuSep, activeProviders);
|
||||
},
|
||||
|
||||
_populateProviderMenu: function SocialToolbar_renderProviderMenu(providerMenuSep, providers) {
|
||||
let menu = providerMenuSep.parentNode;
|
||||
// selectable providers are inserted before the provider-menu seperator,
|
||||
// remove any menuitems in that area
|
||||
while (providerMenuSep.previousSibling.nodeName == "menuitem") {
|
||||
menu.removeChild(providerMenuSep.previousSibling);
|
||||
}
|
||||
// only show a selection if there is more than one
|
||||
if (!Social.enabled || providers.length < 2) {
|
||||
providerMenuSep.hidden = true;
|
||||
return;
|
||||
}
|
||||
for (let provider of providers) {
|
||||
let menuitem = document.createElement("menuitem");
|
||||
menuitem.className = "menuitem-iconic social-provider-menuitem";
|
||||
menuitem.setAttribute("image", provider.iconURL);
|
||||
menuitem.setAttribute("label", provider.name);
|
||||
menuitem.setAttribute("origin", provider.origin);
|
||||
if (provider == Social.provider) {
|
||||
menuitem.setAttribute("checked", "true");
|
||||
} else {
|
||||
menuitem.setAttribute("oncommand", "Social.setProviderByOrigin(this.getAttribute('origin'));");
|
||||
}
|
||||
menu.insertBefore(menuitem, providerMenuSep);
|
||||
}
|
||||
providerMenuSep.hidden = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -996,6 +1092,7 @@ var SocialSidebar = {
|
|||
command.setAttribute("checked", !hideSidebar);
|
||||
|
||||
let sbrowser = document.getElementById("social-sidebar-browser");
|
||||
|
||||
if (hideSidebar) {
|
||||
sbrowser.removeEventListener("load", SocialSidebar._loadListener, true);
|
||||
this.setSidebarVisibilityState(false);
|
||||
|
@ -1011,14 +1108,14 @@ var SocialSidebar = {
|
|||
);
|
||||
}
|
||||
} else {
|
||||
if (Social.errorState == "frameworker-error") {
|
||||
sbrowser.setAttribute("origin", Social.provider.origin);
|
||||
if (Social.provider.errorState == "frameworker-error") {
|
||||
SocialSidebar.setSidebarErrorMessage("frameworker-error");
|
||||
return;
|
||||
}
|
||||
|
||||
// Make sure the right sidebar URL is loaded
|
||||
if (sbrowser.getAttribute("origin") != Social.provider.origin) {
|
||||
sbrowser.setAttribute("origin", Social.provider.origin);
|
||||
if (sbrowser.getAttribute("src") != Social.provider.sidebarURL) {
|
||||
sbrowser.setAttribute("src", Social.provider.sidebarURL);
|
||||
sbrowser.addEventListener("load", SocialSidebar._loadListener, true);
|
||||
} else {
|
||||
|
@ -1038,6 +1135,7 @@ var SocialSidebar = {
|
|||
if (!sbrowser.hasAttribute("origin"))
|
||||
return;
|
||||
|
||||
sbrowser.stop();
|
||||
sbrowser.removeAttribute("origin");
|
||||
sbrowser.setAttribute("src", "about:blank");
|
||||
SocialFlyout.unload();
|
||||
|
@ -1094,7 +1192,7 @@ SocialErrorListener.prototype = {
|
|||
|
||||
onLocationChange: function SPL_onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
let failure = aFlags & Ci.nsIWebProgressListener.LOCATION_CHANGE_ERROR_PAGE;
|
||||
if (failure && Social.errorState != "frameworker-error") {
|
||||
if (failure && Social.provider.errorState != "frameworker-error") {
|
||||
aRequest.cancel(Components.results.NS_BINDING_ABORTED);
|
||||
window.setTimeout(function(self) {
|
||||
self.setErrorMessage(aWebProgress);
|
||||
|
@ -1114,7 +1212,7 @@ SocialErrorListener.prototype = {
|
|||
|
||||
case "sidebar":
|
||||
// a frameworker error "trumps" a sidebar error.
|
||||
let reason = Social.errorState ? Social.errorState : "sidebar-error";
|
||||
let reason = Social.provider.errorState || "sidebar-error";
|
||||
SocialSidebar.setSidebarErrorMessage(reason);
|
||||
break;
|
||||
|
||||
|
|
|
@ -1318,13 +1318,16 @@ var gBrowserInit = {
|
|||
#endif
|
||||
|
||||
// initialize the session-restore service (in case it's not already running)
|
||||
try {
|
||||
Cc["@mozilla.org/browser/sessionstore;1"]
|
||||
.getService(Ci.nsISessionStore)
|
||||
.init(window);
|
||||
} catch (ex) {
|
||||
dump("nsSessionStore could not be initialized: " + ex + "\n");
|
||||
}
|
||||
let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
|
||||
ss.init(window);
|
||||
|
||||
// Enable the Restore Last Session command if needed
|
||||
if (ss.canRestoreLastSession
|
||||
#ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||
&& !PrivateBrowsingUtils.isWindowPrivate(window)
|
||||
#endif
|
||||
)
|
||||
goSetCommandEnabled("Browser:RestoreLastSession", true);
|
||||
|
||||
PlacesToolbarHelper.init();
|
||||
|
||||
|
@ -1459,7 +1462,7 @@ var gBrowserInit = {
|
|||
}
|
||||
|
||||
// Add Devtools menuitems and listeners
|
||||
gDevTools.registerBrowserWindow(window);
|
||||
gDevToolsBrowser.registerBrowserWindow(window);
|
||||
|
||||
let appMenuButton = document.getElementById("appmenu-button");
|
||||
let appMenuPopup = document.getElementById("appmenu-popup");
|
||||
|
@ -1503,7 +1506,7 @@ var gBrowserInit = {
|
|||
if (!this._loadHandled)
|
||||
return;
|
||||
|
||||
gDevTools.forgetBrowserWindow(window);
|
||||
gDevToolsBrowser.forgetBrowserWindow(window);
|
||||
|
||||
// First clean up services initialized in gBrowserInit.onLoad (or those whose
|
||||
// uninit methods don't depend on the services having been initialized).
|
||||
|
@ -1642,6 +1645,8 @@ var gBrowserInit = {
|
|||
}
|
||||
}
|
||||
|
||||
SocialUI.nonBrowserWindowInit();
|
||||
|
||||
this._delayedStartupTimeoutId = setTimeout(this.nonBrowserWindowDelayedStartup.bind(this), 0);
|
||||
},
|
||||
|
||||
|
@ -2458,7 +2463,11 @@ function BrowserOnAboutPageLoad(document) {
|
|||
|
||||
let ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
|
||||
getService(Components.interfaces.nsISessionStore);
|
||||
if (ss.canRestoreLastSession)
|
||||
if (ss.canRestoreLastSession
|
||||
#ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||
&& !PrivateBrowsingUtils.isWindowPrivate(window)
|
||||
#endif
|
||||
)
|
||||
document.getElementById("launcher").setAttribute("session", "true");
|
||||
|
||||
// Inject search engine and snippets URL.
|
||||
|
@ -3485,17 +3494,16 @@ function OpenBrowserWindow(options)
|
|||
var wintype = document.documentElement.getAttribute('windowtype');
|
||||
|
||||
var extraFeatures = "";
|
||||
var forcePrivate = false;
|
||||
#ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||
forcePrivate = typeof options == "object" && "private" in options && options.private;
|
||||
if (typeof options == "object" && options.private) {
|
||||
#else
|
||||
forcePrivate = gPrivateBrowsingUI.privateBrowsingEnabled;
|
||||
if (gPrivateBrowsingUI.privateBrowsingEnabled) {
|
||||
#endif
|
||||
|
||||
if (forcePrivate) {
|
||||
extraFeatures = ",private";
|
||||
// Force the new window to load about:privatebrowsing instead of the default home page
|
||||
defaultArgs = "about:privatebrowsing";
|
||||
} else {
|
||||
extraFeatures = ",non-private";
|
||||
}
|
||||
|
||||
// if and only if the current window is a browser window and it has a document with a character
|
||||
|
@ -7289,7 +7297,7 @@ var TabContextMenu = {
|
|||
XPCOMUtils.defineLazyModuleGetter(this, "gDevTools",
|
||||
"resource:///modules/devtools/gDevTools.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "DevToolsXULCommands",
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "gDevToolsBrowser",
|
||||
"resource:///modules/devtools/gDevTools.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "HUDConsoleUI", function () {
|
||||
|
|
|
@ -194,7 +194,7 @@
|
|||
<button id="social-undoactivation-button"
|
||||
label="&social.activated.undobutton.label;"
|
||||
accesskey="&social.activated.undobutton.accesskey;"
|
||||
onclick="SocialUI.undoActivation();"/>
|
||||
onclick="SocialUI.undoActivation(this);"/>
|
||||
<button default="true"
|
||||
autofocus="autofocus"
|
||||
label="&social.ok.label;"
|
||||
|
@ -209,7 +209,7 @@
|
|||
<button id="social-undoactivation-button"
|
||||
label="&social.activated.undobutton.label;"
|
||||
accesskey="&social.activated.undobutton.accesskey;"
|
||||
onclick="SocialUI.undoActivation();"/>
|
||||
onclick="SocialUI.undoActivation(this);"/>
|
||||
#endif
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
@ -557,6 +557,7 @@
|
|||
<image id="password-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="webapps-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="plugins-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="blocked-plugins-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
</box>
|
||||
<!-- Use onclick instead of normal popup= syntax since the popup
|
||||
code fires onmousedown, and hence eats our favicon drag events.
|
||||
|
@ -679,6 +680,7 @@
|
|||
label="&social.toggleNotifications.label;"
|
||||
accesskey="&social.toggleNotifications.accesskey;"/>
|
||||
<menuseparator class="social-statusarea-separator"/>
|
||||
<menuseparator class="social-provider-menu" hidden="true"/>
|
||||
<menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
|
||||
<menuitem class="social-remove-menuitem" command="Social:Remove"/>
|
||||
</menupopup>
|
||||
|
|
|
@ -421,25 +421,18 @@ nsContextMenu.prototype = {
|
|||
let gBrowser = this.browser.ownerDocument.defaultView.gBrowser;
|
||||
let imported = {};
|
||||
Cu.import("resource:///modules/devtools/Target.jsm", imported);
|
||||
var target = imported.TargetFactory.forTab(gBrowser.selectedTab);
|
||||
let inspector = gDevTools.getPanelForTarget("inspector", target);
|
||||
if (inspector && inspector.isReady) {
|
||||
inspector.selection.setNode(this.target);
|
||||
} else {
|
||||
let toolbox = gDevTools.openToolboxForTab(target, "inspector");
|
||||
toolbox.once("inspector-ready", function(event, panel) {
|
||||
let inspector = gDevTools.getPanelForTarget("inspector", target);
|
||||
inspector.selection.setNode(this.target, "browser-context-menu");
|
||||
}.bind(this));
|
||||
}
|
||||
let tt = imported.TargetFactory.forTab(gBrowser.selectedTab);
|
||||
return gDevTools.showToolbox(tt, "inspector").then(function(toolbox) {
|
||||
let inspector = toolbox.getCurrentPanel();
|
||||
inspector.selection.setNode(this.target, "browser-context-menu");
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
// Set various context menu attributes based on the state of the world.
|
||||
setTarget: function (aNode, aRangeParent, aRangeOffset) {
|
||||
const xulNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
if (aNode.namespaceURI == xulNS ||
|
||||
aNode.nodeType == Node.DOCUMENT_NODE ||
|
||||
this.isTargetAFormControl(aNode)) {
|
||||
aNode.nodeType == Node.DOCUMENT_NODE) {
|
||||
this.shouldDisplay = false;
|
||||
return;
|
||||
}
|
||||
|
@ -1297,18 +1290,6 @@ nsContextMenu.prototype = {
|
|||
"contextMenu.hasBGImage = " + this.hasBGImage + "\n";
|
||||
},
|
||||
|
||||
// Returns true if aNode is a from control (except text boxes and images).
|
||||
// This is used to disable the context menu for form controls.
|
||||
isTargetAFormControl: function(aNode) {
|
||||
if (aNode instanceof HTMLInputElement)
|
||||
return (!aNode.mozIsTextField(false) && aNode.type != "image");
|
||||
|
||||
return (aNode instanceof HTMLButtonElement) ||
|
||||
(aNode instanceof HTMLSelectElement) ||
|
||||
(aNode instanceof HTMLOptionElement) ||
|
||||
(aNode instanceof HTMLOptGroupElement);
|
||||
},
|
||||
|
||||
isTargetATextBox: function(node) {
|
||||
if (node instanceof HTMLInputElement)
|
||||
return node.mozIsTextField(false);
|
||||
|
|
|
@ -10,6 +10,7 @@ relativesrcdir = @relativesrcdir@
|
|||
|
||||
DIRS += \
|
||||
newtab \
|
||||
social \
|
||||
$(NULL)
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
@ -286,21 +287,6 @@ _BROWSER_FILES = \
|
|||
blockPluginVulnerableNoUpdate.xml \
|
||||
blockNoPlugins.xml \
|
||||
browser_utilityOverlay.js \
|
||||
browser_social.js \
|
||||
browser_social_toolbar.js \
|
||||
browser_social_shareButton.js \
|
||||
browser_social_sidebar.js \
|
||||
browser_social_flyout.js \
|
||||
browser_social_mozSocial_API.js \
|
||||
browser_social_isVisible.js \
|
||||
browser_social_chatwindow.js \
|
||||
social_panel.html \
|
||||
social_share_image.png \
|
||||
social_sidebar.html \
|
||||
social_chat.html \
|
||||
social_flyout.html \
|
||||
social_window.html \
|
||||
social_worker.js \
|
||||
browser_bug676619.js \
|
||||
download_page.html \
|
||||
$(NULL)
|
||||
|
|
|
@ -34,15 +34,15 @@ function test() {
|
|||
testInput("text", true);
|
||||
testInput("password", true);
|
||||
testInput("image", true);
|
||||
testInput("button", false);
|
||||
testInput("submit", false);
|
||||
testInput("reset", false);
|
||||
testInput("checkbox", false);
|
||||
testInput("radio", false);
|
||||
testElement("button", false);
|
||||
testElement("select", false);
|
||||
testElement("option", false);
|
||||
testElement("optgroup", false);
|
||||
testInput("button", true);
|
||||
testInput("submit", true);
|
||||
testInput("reset", true);
|
||||
testInput("checkbox", true);
|
||||
testInput("radio", true);
|
||||
testElement("button", true);
|
||||
testElement("select", true);
|
||||
testElement("option", true);
|
||||
testElement("optgroup", true);
|
||||
|
||||
// cleanup
|
||||
document.popupNode = null;
|
||||
|
|
|
@ -23,11 +23,15 @@ function test() {
|
|||
gTestBrowser.addEventListener("load", pageLoad, true);
|
||||
gTestBrowser.addEventListener("PluginScripted", pluginScripted, true);
|
||||
|
||||
// This list is iterated in reverse order, since it uses Array.pop to get the next test.
|
||||
gNextTestList = [
|
||||
{ func: testExpectPopupPart1,
|
||||
// Doesn't show a popup since not the first instance of a small plugin
|
||||
{ func: testExpectNoPopupPart1,
|
||||
url: gHttpTestRoot + "plugin_test_scriptedPopup1.html" },
|
||||
{ func: testExpectPopupPart1,
|
||||
// Doesn't show a popup since not the first instance of a small plugin
|
||||
{ func: testExpectNoPopupPart1,
|
||||
url: gHttpTestRoot + "plugin_test_scriptedPopup2.html" },
|
||||
// Shows a popup since it is the first instance of a small plugin
|
||||
{ func: testExpectPopupPart1,
|
||||
url: gHttpTestRoot + "plugin_test_scriptedPopup3.html" },
|
||||
{ func: testExpectNoPopupPart1,
|
||||
|
|
|
@ -992,10 +992,12 @@ function test23() {
|
|||
|
||||
// Reload plugin (this may need RunSoon() in the future when plugins change state asynchronously)
|
||||
pluginNode.type = null;
|
||||
pluginNode.src = pluginNode.src; // We currently don't properly change state just on type change, bug 767631
|
||||
// We currently don't properly change state just on type change,
|
||||
// so rebind the plugin to tree. bug 767631
|
||||
pluginNode.parentNode.appendChild(pluginNode);
|
||||
is(objLoadingContent.displayedType, Ci.nsIObjectLoadingContent.TYPE_NULL, "Test 23, plugin should be unloaded");
|
||||
pluginNode.type = "application/x-test";
|
||||
pluginNode.src = pluginNode.src;
|
||||
pluginNode.parentNode.appendChild(pluginNode);
|
||||
is(objLoadingContent.displayedType, Ci.nsIObjectLoadingContent.TYPE_NULL, "Test 23, Plugin should not have activated");
|
||||
is(objLoadingContent.pluginFallbackType, Ci.nsIObjectLoadingContent.PLUGIN_CLICK_TO_PLAY, "Test 23, Plugin should be click-to-play");
|
||||
ok(!pluginNode.activated, "Test 23, plugin node should not be activated");
|
||||
|
|
|
@ -1,11 +1,24 @@
|
|||
// Make sure that we can open private browsing windows
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
var nonPrivateWin = OpenBrowserWindow();
|
||||
ok(!PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin), "OpenBrowserWindow() should open a normal window");
|
||||
nonPrivateWin.close();
|
||||
|
||||
var privateWin = OpenBrowserWindow({private: true});
|
||||
ok(PrivateBrowsingUtils.isWindowPrivate(privateWin), "OpenBrowserWindow({private: true}) should open a private window");
|
||||
privateWin.close();
|
||||
|
||||
nonPrivateWin = OpenBrowserWindow({private: false});
|
||||
ok(!PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin), "OpenBrowserWindow({private: false}) should open a normal window");
|
||||
nonPrivateWin.close();
|
||||
|
||||
whenDelayedStartupFinished(privateWin, function() {
|
||||
nonPrivateWin = privateWin.OpenBrowserWindow({private: false});
|
||||
ok(!PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin), "privateWin.OpenBrowserWindow({private: false}) should open a normal window");
|
||||
nonPrivateWin.close();
|
||||
privateWin.close();
|
||||
finish();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -88,15 +88,6 @@ function waitForCondition(condition, nextTest, errorMsg) {
|
|||
var moveOn = function() { clearInterval(interval); nextTest(); };
|
||||
}
|
||||
|
||||
// Check that a specified (string) URL hasn't been "remembered" (ie, is not
|
||||
// in history, will not appear in about:newtab or auto-complete, etc.)
|
||||
function ensureSocialUrlNotRemembered(url) {
|
||||
let gh = Cc["@mozilla.org/browser/global-history;2"]
|
||||
.getService(Ci.nsIGlobalHistory2);
|
||||
let uri = Services.io.newURI(url, null, null);
|
||||
ok(!gh.isVisited(uri), "social URL " + url + " should not be in global history");
|
||||
}
|
||||
|
||||
function getTestPlugin() {
|
||||
var ph = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
|
||||
var tags = ph.getPluginTags();
|
||||
|
@ -110,97 +101,6 @@ function getTestPlugin() {
|
|||
return null;
|
||||
}
|
||||
|
||||
function runSocialTestWithProvider(manifest, callback) {
|
||||
let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
|
||||
|
||||
// Check that none of the provider's content ends up in history.
|
||||
registerCleanupFunction(function () {
|
||||
for (let what of ['sidebarURL', 'workerURL', 'iconURL']) {
|
||||
if (manifest[what]) {
|
||||
ensureSocialUrlNotRemembered(manifest[what]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
info("runSocialTestWithProvider: " + manifest.toSource());
|
||||
|
||||
let oldProvider;
|
||||
SocialService.addProvider(manifest, function(provider) {
|
||||
info("runSocialTestWithProvider: provider added");
|
||||
oldProvider = Social.provider;
|
||||
Social.provider = provider;
|
||||
|
||||
// Now that we've set the UI's provider, enable the social functionality
|
||||
Services.prefs.setBoolPref("social.enabled", true);
|
||||
Services.prefs.setBoolPref("social.active", true);
|
||||
|
||||
// Need to re-call providerReady since it is actually called before the test
|
||||
// framework is loaded and the provider state won't be set in the browser yet.
|
||||
SocialUI._providerReady();
|
||||
|
||||
registerCleanupFunction(function () {
|
||||
// if one test happens to fail, it is likely finishSocialTest will not
|
||||
// be called, causing most future social tests to also fail as they
|
||||
// attempt to add a provider which already exists - so work
|
||||
// around that by also attempting to remove the test provider.
|
||||
try {
|
||||
SocialService.removeProvider(provider.origin, finish);
|
||||
} catch (ex) {
|
||||
;
|
||||
}
|
||||
Social.provider = oldProvider;
|
||||
Services.prefs.clearUserPref("social.enabled");
|
||||
Services.prefs.clearUserPref("social.active");
|
||||
});
|
||||
|
||||
function finishSocialTest() {
|
||||
SocialService.removeProvider(provider.origin, finish);
|
||||
}
|
||||
callback(finishSocialTest);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function runSocialTests(tests, cbPreTest, cbPostTest, cbFinish) {
|
||||
let testIter = Iterator(tests);
|
||||
|
||||
if (cbPreTest === undefined) {
|
||||
cbPreTest = function(cb) {cb()};
|
||||
}
|
||||
if (cbPostTest === undefined) {
|
||||
cbPostTest = function(cb) {cb()};
|
||||
}
|
||||
|
||||
function runNextTest() {
|
||||
let name, func;
|
||||
try {
|
||||
[name, func] = testIter.next();
|
||||
} catch (err if err instanceof StopIteration) {
|
||||
// out of items:
|
||||
(cbFinish || finish)();
|
||||
return;
|
||||
}
|
||||
// We run on a timeout as the frameworker also makes use of timeouts, so
|
||||
// this helps keep the debug messages sane.
|
||||
executeSoon(function() {
|
||||
function cleanupAndRunNextTest() {
|
||||
info("sub-test " + name + " complete");
|
||||
cbPostTest(runNextTest);
|
||||
}
|
||||
cbPreTest(function() {
|
||||
info("sub-test " + name + " starting");
|
||||
try {
|
||||
func.call(tests, cleanupAndRunNextTest);
|
||||
} catch (ex) {
|
||||
ok(false, "sub-test " + name + " failed: " + ex.toString() +"\n"+ex.stack);
|
||||
cleanupAndRunNextTest();
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
runNextTest();
|
||||
}
|
||||
|
||||
function updateBlocklist(aCallback) {
|
||||
var blocklistNotifier = Cc["@mozilla.org/extensions/blocklist;1"]
|
||||
.getService(Ci.nsITimerCallback);
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
# 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/.
|
||||
|
||||
DEPTH = @DEPTH@
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
relativesrcdir = @relativesrcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
_BROWSER_FILES = \
|
||||
head.js \
|
||||
browser_social.js \
|
||||
browser_social_toolbar.js \
|
||||
browser_social_shareButton.js \
|
||||
browser_social_sidebar.js \
|
||||
browser_social_flyout.js \
|
||||
browser_social_mozSocial_API.js \
|
||||
browser_social_isVisible.js \
|
||||
browser_social_chatwindow.js \
|
||||
browser_social_multiprovider.js \
|
||||
social_panel.html \
|
||||
social_share_image.png \
|
||||
social_sidebar.html \
|
||||
social_chat.html \
|
||||
social_flyout.html \
|
||||
social_window.html \
|
||||
social_worker.js \
|
||||
$(NULL)
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
libs:: $(_BROWSER_FILES)
|
||||
$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir)
|
|
@ -30,8 +30,8 @@ function test() {
|
|||
let manifest = { // normal provider
|
||||
name: "provider 1",
|
||||
origin: "https://example.com",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social_worker.js",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||
};
|
||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
||||
|
@ -53,6 +53,7 @@ var tests = {
|
|||
togglePrivateBrowsing(function () {
|
||||
ok(!Social.enabled, "Social shuts down during private browsing");
|
||||
togglePrivateBrowsing(function () {
|
||||
ok(Social.provider.getWorkerPort(), "port still obtainable after PB")
|
||||
ok(Social.enabled, "Social enabled after private browsing");
|
||||
next();
|
||||
});
|
||||
|
@ -66,6 +67,7 @@ var tests = {
|
|||
// test PB from the perspective of entering PB without social enabled
|
||||
// we expect social to be enabled at the start of the test, we need
|
||||
// to disable it before testing PB transitions.
|
||||
ok(Social.enabled, "social is still enabled");
|
||||
let port = Social.provider.getWorkerPort();
|
||||
ok(port, "provider has a port");
|
||||
port.postMessage({topic: "test-init"});
|
|
@ -8,8 +8,8 @@ function test() {
|
|||
let manifest = { // normal provider
|
||||
name: "provider 1",
|
||||
origin: "https://example.com",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social_worker.js",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||
};
|
||||
let oldwidth = window.outerWidth; // we futz with this, so we restore it
|
||||
|
@ -102,7 +102,7 @@ var tests = {
|
|||
// The worker then makes the same call again - as that second call also
|
||||
// specifies "minimized" the chat should *not* be restored.
|
||||
testWorkerChatWindowMinimized: function(next) {
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social_chat.html";
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social/social_chat.html";
|
||||
let port = Social.provider.getWorkerPort();
|
||||
let seen_opened = false;
|
||||
ok(port, "provider has a port");
|
||||
|
@ -175,7 +175,7 @@ var tests = {
|
|||
}
|
||||
},
|
||||
testWorkerChatWindow: function(next) {
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social_chat.html";
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social/social_chat.html";
|
||||
let port = Social.provider.getWorkerPort();
|
||||
ok(port, "provider has a port");
|
||||
port.postMessage({topic: "test-init"});
|
||||
|
@ -414,7 +414,7 @@ var tests = {
|
|||
|
||||
testSecondTopLevelWindow: function(next) {
|
||||
// Bug 817782 - check chats work in new top-level windows.
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social_chat.html";
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social/social_chat.html";
|
||||
let port = Social.provider.getWorkerPort();
|
||||
let secondWindow;
|
||||
port.onmessage = function(e) {
|
||||
|
@ -437,7 +437,7 @@ var tests = {
|
|||
testChatWindowChooser: function(next) {
|
||||
// Tests that when a worker creates a chat, it is opened in the correct
|
||||
// window.
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social_chat.html";
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social/social_chat.html";
|
||||
let chatId = 1;
|
||||
let port = Social.provider.getWorkerPort();
|
||||
port.postMessage({topic: "test-init"});
|
||||
|
@ -481,7 +481,7 @@ var tests = {
|
|||
// XXX - note this must be the last test until we restore the login state
|
||||
// between tests...
|
||||
testCloseOnLogout: function(next) {
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social_chat.html";
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social/social_chat.html";
|
||||
let port = Social.provider.getWorkerPort();
|
||||
ok(port, "provider has a port");
|
||||
port.postMessage({topic: "test-init"});
|
||||
|
@ -552,7 +552,7 @@ function get3ChatsForCollapsing(mode, cb) {
|
|||
}
|
||||
|
||||
function makeChat(mode, uniqueid, cb) {
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social_chat.html";
|
||||
const chatUrl = "https://example.com/browser/browser/base/content/test/social/social_chat.html";
|
||||
let provider = Social.provider;
|
||||
window.SocialChatBar.openChat(provider, chatUrl + "?id=" + uniqueid, function(chat) {
|
||||
// we can't callback immediately or we might close the chat during
|
|
@ -8,8 +8,8 @@ function test() {
|
|||
let manifest = { // normal provider
|
||||
name: "provider 1",
|
||||
origin: "https://example.com",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social_worker.js",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||
};
|
||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
|
@ -8,8 +8,8 @@ function test() {
|
|||
let manifest = { // normal provider
|
||||
name: "provider 1",
|
||||
origin: "https://example.com",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social_worker.js",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||
};
|
||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
|
@ -8,8 +8,8 @@ function test() {
|
|||
let manifest = { // normal provider
|
||||
name: "provider 1",
|
||||
origin: "https://example.com",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social_worker.js",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||
};
|
||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
|
@ -0,0 +1,106 @@
|
|||
/* 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/. */
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
runSocialTestWithProvider(gProviders, function (finishcb) {
|
||||
runSocialTests(tests, undefined, undefined, finishcb);
|
||||
});
|
||||
}
|
||||
|
||||
let gProviders = [
|
||||
{
|
||||
name: "provider 1",
|
||||
origin: "https://example.com",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html?provider1",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "chrome://branding/content/icon48.png"
|
||||
},
|
||||
{
|
||||
name: "provider 2",
|
||||
origin: "https://test1.example.com",
|
||||
sidebarURL: "https://test1.example.com/browser/browser/base/content/test/social/social_sidebar.html?provider2",
|
||||
workerURL: "https://test1.example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "chrome://branding/content/icon48.png"
|
||||
}
|
||||
];
|
||||
|
||||
var tests = {
|
||||
testProviderSwitch: function(next) {
|
||||
function checkProviderMenu(selectedProvider) {
|
||||
let menu = document.getElementById("social-statusarea-popup");
|
||||
let menuProviders = menu.querySelectorAll(".social-provider-menuitem");
|
||||
is(menuProviders.length, gProviders.length, "correct number of providers listed in the menu");
|
||||
// Find the selectedProvider's menu item
|
||||
let el = menu.getElementsByAttribute("origin", selectedProvider.origin);
|
||||
is(el.length, 1, "selected provider menu item exists");
|
||||
is(el[0].getAttribute("checked"), "true", "selected provider menu item is checked");
|
||||
}
|
||||
|
||||
checkProviderMenu(gProviders[0]);
|
||||
|
||||
// Now wait for the initial provider profile to be set
|
||||
waitForProviderLoad(function() {
|
||||
checkUIStateMatchesProvider(gProviders[0]);
|
||||
|
||||
// Now activate "provider 2"
|
||||
observeProviderSet(function () {
|
||||
waitForProviderLoad(function() {
|
||||
checkUIStateMatchesProvider(gProviders[1]);
|
||||
next();
|
||||
});
|
||||
});
|
||||
Social.activateFromOrigin("https://test1.example.com");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function checkUIStateMatchesProvider(provider) {
|
||||
let profileData = getExpectedProfileData(provider);
|
||||
// Bug 789863 - share button uses 'displayName', toolbar uses 'userName'
|
||||
// Check the "share button"
|
||||
let displayNameEl = document.getElementById("socialUserDisplayName");
|
||||
is(displayNameEl.getAttribute("label"), profileData.displayName, "display name matches provider profile");
|
||||
// The toolbar
|
||||
let loginStatus = document.getElementsByClassName("social-statusarea-loggedInStatus");
|
||||
for (let label of loginStatus) {
|
||||
is(label.value, profileData.userName, "username name matches provider profile");
|
||||
}
|
||||
// Sidebar
|
||||
is(document.getElementById("social-sidebar-browser").getAttribute("src"), provider.sidebarURL, "side bar URL is set");
|
||||
}
|
||||
|
||||
function getExpectedProfileData(provider) {
|
||||
// This data is defined in social_worker.js
|
||||
if (provider.origin == "https://test1.example.com") {
|
||||
return {
|
||||
displayName: "Test1 User",
|
||||
userName: "tester"
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
displayName: "Kuma Lisa",
|
||||
userName: "trickster"
|
||||
};
|
||||
}
|
||||
|
||||
function observeProviderSet(cb) {
|
||||
Services.obs.addObserver(function providerSet(subject, topic, data) {
|
||||
Services.obs.removeObserver(providerSet, "social:provider-set");
|
||||
info("social:provider-set observer was notified");
|
||||
// executeSoon to let the browser UI observers run first
|
||||
executeSoon(cb);
|
||||
}, "social:provider-set", false);
|
||||
}
|
||||
|
||||
function waitForProviderLoad(cb) {
|
||||
waitForCondition(function() {
|
||||
let sbrowser = document.getElementById("social-sidebar-browser");
|
||||
return Social.provider.profile &&
|
||||
Social.provider.profile.displayName &&
|
||||
sbrowser.docShellIsActive;
|
||||
}, cb, "waitForProviderLoad: provider profile was not set");
|
||||
}
|
|
@ -27,8 +27,8 @@ function tabLoaded() {
|
|||
let manifest = { // normal provider
|
||||
name: "provider 1",
|
||||
origin: "https://example.com",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social_worker.js",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||
};
|
||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
||||
|
@ -68,7 +68,7 @@ function testInitial(finishcb) {
|
|||
is(shareButton.getAttribute("tooltiptext"), "Share this page", "check tooltip text is correct");
|
||||
is(shareStatusLabel.getAttribute("value"), "", "check status label text is blank");
|
||||
// Check the relative URL was resolved correctly (note this image has offsets of zero...)
|
||||
is(shareButton.src, 'https://example.com/browser/browser/base/content/test/social_share_image.png', "check image url is correct");
|
||||
is(shareButton.src, 'https://example.com/browser/browser/base/content/test/social/social_share_image.png', "check image url is correct");
|
||||
|
||||
// Test clicking the share button
|
||||
shareButton.addEventListener("click", function listener() {
|
||||
|
@ -77,7 +77,7 @@ function testInitial(finishcb) {
|
|||
is(shareButton.getAttribute("tooltiptext"), "Unshare this page", "check tooltip text is correct");
|
||||
is(shareStatusLabel.getAttribute("value"), "This page has been shared", "check status label text is correct");
|
||||
// Check the URL and offsets were applied correctly
|
||||
is(shareButton.src, 'https://example.com/browser/browser/base/content/test/social_share_image.png', "check image url is correct");
|
||||
is(shareButton.src, 'https://example.com/browser/browser/base/content/test/social/social_share_image.png', "check image url is correct");
|
||||
executeSoon(testSecondClick.bind(window, testPopupOKButton));
|
||||
});
|
||||
shareButton.click();
|
|
@ -8,8 +8,8 @@ function test() {
|
|||
let manifest = { // normal provider
|
||||
name: "provider 1",
|
||||
origin: "https://example.com",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social_worker.js",
|
||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||
};
|
||||
runSocialTestWithProvider(manifest, doTest);
|
||||
|
@ -28,10 +28,29 @@ function doTest(finishcb) {
|
|||
"toggle command should be " + (shouldBeShown ? "checked" : "unchecked"));
|
||||
is(sidebar.hidden, !shouldBeShown,
|
||||
"sidebar should be " + (shouldBeShown ? "visible" : "hidden"));
|
||||
is(Services.prefs.getBoolPref("social.sidebar.open"), shouldBeShown,
|
||||
"sidebar open pref should be " + shouldBeShown);
|
||||
if (shouldBeShown)
|
||||
// The sidebar.open pref only reflects the actual state of the sidebar
|
||||
// when social is enabled.
|
||||
if (Social.enabled)
|
||||
is(Services.prefs.getBoolPref("social.sidebar.open"), shouldBeShown,
|
||||
"sidebar open pref should be " + shouldBeShown);
|
||||
if (shouldBeShown) {
|
||||
is(browser.getAttribute('src'), Social.provider.sidebarURL, "sidebar url should be set");
|
||||
// We don't currently check docShellIsActive as this is only set
|
||||
// after load event fires, and the tests below explicitly wait for this
|
||||
// anyway.
|
||||
}
|
||||
else {
|
||||
ok(!browser.docShellIsActive, "sidebar should have an inactive docshell");
|
||||
// sidebar will only be immediately unloaded (and thus set to
|
||||
// about:blank) when canShow is false.
|
||||
if (SocialSidebar.canShow) {
|
||||
// should not have unloaded so will still be the provider URL.
|
||||
is(browser.getAttribute('src'), Social.provider.sidebarURL, "sidebar url should be set");
|
||||
} else {
|
||||
// should have been an immediate unload.
|
||||
is(browser.getAttribute('src'), "about:blank", "sidebar url should be blank");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// First check the the sidebar is initially visible, and loaded
|
||||
|
@ -48,6 +67,18 @@ function doTest(finishcb) {
|
|||
|
||||
checkShown(true);
|
||||
|
||||
// Set Social.enabled = false and check everything is as expected.
|
||||
Social.enabled = false;
|
||||
checkShown(false);
|
||||
|
||||
Social.enabled = true;
|
||||
checkShown(true);
|
||||
|
||||
// And an edge-case - disable social and reset the provider.
|
||||
Social.provider = null;
|
||||
Social.enabled = false;
|
||||
checkShown(false);
|
||||
|
||||
// Finish the test
|
||||
finishcb();
|
||||
});
|
||||
|
@ -57,9 +88,14 @@ function doTest(finishcb) {
|
|||
Social.toggleSidebar();
|
||||
});
|
||||
|
||||
// Now toggle it off
|
||||
info("Toggling sidebar off");
|
||||
Social.toggleSidebar();
|
||||
// Wait until the side bar loads
|
||||
waitForCondition(function () {
|
||||
return document.getElementById("social-sidebar-browser").docShellIsActive;
|
||||
}, function () {
|
||||
// Now toggle it off
|
||||
info("Toggling sidebar off");
|
||||
Social.toggleSidebar();
|
||||
});
|
||||
}
|
||||
|
||||
// XXX test sidebar in popup
|
|
@ -8,7 +8,7 @@ function test() {
|
|||
let manifest = { // normal provider
|
||||
name: "provider 1",
|
||||
origin: "https://example.com",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social_worker.js",
|
||||
workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
|
||||
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||
};
|
||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
|
@ -0,0 +1,129 @@
|
|||
/* 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/. */
|
||||
|
||||
function waitForCondition(condition, nextTest, errorMsg) {
|
||||
var tries = 0;
|
||||
var interval = setInterval(function() {
|
||||
if (tries >= 30) {
|
||||
ok(false, errorMsg);
|
||||
moveOn();
|
||||
}
|
||||
if (condition()) {
|
||||
moveOn();
|
||||
}
|
||||
tries++;
|
||||
}, 100);
|
||||
var moveOn = function() { clearInterval(interval); nextTest(); };
|
||||
}
|
||||
|
||||
// Check that a specified (string) URL hasn't been "remembered" (ie, is not
|
||||
// in history, will not appear in about:newtab or auto-complete, etc.)
|
||||
function ensureSocialUrlNotRemembered(url) {
|
||||
let gh = Cc["@mozilla.org/browser/global-history;2"]
|
||||
.getService(Ci.nsIGlobalHistory2);
|
||||
let uri = Services.io.newURI(url, null, null);
|
||||
ok(!gh.isVisited(uri), "social URL " + url + " should not be in global history");
|
||||
}
|
||||
|
||||
function runSocialTestWithProvider(manifest, callback) {
|
||||
let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
|
||||
|
||||
let manifests = Array.isArray(manifest) ? manifest : [manifest];
|
||||
|
||||
// Check that none of the provider's content ends up in history.
|
||||
registerCleanupFunction(function () {
|
||||
manifests.forEach(function (m) {
|
||||
for (let what of ['sidebarURL', 'workerURL', 'iconURL']) {
|
||||
if (m[what]) {
|
||||
ensureSocialUrlNotRemembered(m[what]);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
info("runSocialTestWithProvider: " + manifests.toSource());
|
||||
|
||||
let providersAdded = 0;
|
||||
let firstProvider;
|
||||
manifests.forEach(function (m) {
|
||||
SocialService.addProvider(m, function(provider) {
|
||||
provider.active = true;
|
||||
|
||||
providersAdded++;
|
||||
info("runSocialTestWithProvider: provider added");
|
||||
|
||||
// we want to set the first specified provider as the UI's provider
|
||||
if (provider.origin == manifests[0].origin) {
|
||||
firstProvider = provider;
|
||||
}
|
||||
|
||||
// If we've added all the providers we need, call the callback to start
|
||||
// the tests (and give it a callback it can call to finish them)
|
||||
if (providersAdded == manifests.length) {
|
||||
// Set the UI's provider and enable the feature
|
||||
Social.provider = firstProvider;
|
||||
Social.enabled = true;
|
||||
|
||||
registerCleanupFunction(function () {
|
||||
// disable social before removing the providers to avoid providers
|
||||
// being activated immediately before we get around to removing it.
|
||||
Services.prefs.clearUserPref("social.enabled");
|
||||
// if one test happens to fail, it is likely finishSocialTest will not
|
||||
// be called, causing most future social tests to also fail as they
|
||||
// attempt to add a provider which already exists - so work
|
||||
// around that by also attempting to remove the test provider.
|
||||
manifests.forEach(function (m) {
|
||||
try {
|
||||
SocialService.removeProvider(m.origin, finish);
|
||||
} catch (ex) {}
|
||||
});
|
||||
});
|
||||
function finishSocialTest() {
|
||||
SocialService.removeProvider(provider.origin, finish);
|
||||
}
|
||||
callback(finishSocialTest);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function runSocialTests(tests, cbPreTest, cbPostTest, cbFinish) {
|
||||
let testIter = Iterator(tests);
|
||||
|
||||
if (cbPreTest === undefined) {
|
||||
cbPreTest = function(cb) {cb()};
|
||||
}
|
||||
if (cbPostTest === undefined) {
|
||||
cbPostTest = function(cb) {cb()};
|
||||
}
|
||||
|
||||
function runNextTest() {
|
||||
let name, func;
|
||||
try {
|
||||
[name, func] = testIter.next();
|
||||
} catch (err if err instanceof StopIteration) {
|
||||
// out of items:
|
||||
(cbFinish || finish)();
|
||||
return;
|
||||
}
|
||||
// We run on a timeout as the frameworker also makes use of timeouts, so
|
||||
// this helps keep the debug messages sane.
|
||||
executeSoon(function() {
|
||||
function cleanupAndRunNextTest() {
|
||||
info("sub-test " + name + " complete");
|
||||
cbPostTest(runNextTest);
|
||||
}
|
||||
cbPreTest(function() {
|
||||
info("sub-test " + name + " starting");
|
||||
try {
|
||||
func.call(tests, cleanupAndRunNextTest);
|
||||
} catch (ex) {
|
||||
ok(false, "sub-test " + name + " failed: " + ex.toString() +"\n"+ex.stack);
|
||||
cleanupAndRunNextTest();
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
runNextTest();
|
||||
}
|
До Ширина: | Высота: | Размер: 934 B После Ширина: | Высота: | Размер: 934 B |
|
@ -81,20 +81,31 @@ onconnect = function(e) {
|
|||
break;
|
||||
case "social.initialize":
|
||||
// This is the workerAPI port, respond and set up a notification icon.
|
||||
// For multiprovider tests, we support acting like different providers
|
||||
// based on the domain we load from.
|
||||
apiPort = port;
|
||||
let profile = {
|
||||
portrait: "https://example.com/portrait.jpg",
|
||||
userName: "trickster",
|
||||
displayName: "Kuma Lisa",
|
||||
profileURL: "http://en.wikipedia.org/wiki/Kuma_Lisa"
|
||||
};
|
||||
let profile;
|
||||
if (location.href.indexOf("https://test1.example.com") == 0) {
|
||||
profile = {
|
||||
portrait: "https://test1.example.com/portrait.jpg",
|
||||
userName: "tester",
|
||||
displayName: "Test1 User",
|
||||
};
|
||||
} else {
|
||||
profile = {
|
||||
portrait: "https://example.com/portrait.jpg",
|
||||
userName: "trickster",
|
||||
displayName: "Kuma Lisa",
|
||||
profileURL: "http://en.wikipedia.org/wiki/Kuma_Lisa"
|
||||
};
|
||||
}
|
||||
port.postMessage({topic: "social.user-profile", data: profile});
|
||||
break;
|
||||
case "test-ambient-notification":
|
||||
let icon = {
|
||||
name: "testIcon",
|
||||
iconURL: "chrome://browser/skin/Info.png",
|
||||
contentPanel: "https://example.com/browser/browser/base/content/test/social_panel.html",
|
||||
contentPanel: "https://example.com/browser/browser/base/content/test/social/social_panel.html",
|
||||
counter: 1
|
||||
};
|
||||
apiPort.postMessage({topic: "social.ambient-notification", data: icon});
|
||||
|
@ -111,9 +122,9 @@ onconnect = function(e) {
|
|||
data: {
|
||||
images: {
|
||||
// this one is relative to test we handle relative ones.
|
||||
share: "browser/browser/base/content/test/social_share_image.png",
|
||||
share: "browser/browser/base/content/test/social/social_share_image.png",
|
||||
// absolute to check we handle them too.
|
||||
unshare: "https://example.com/browser/browser/base/content/test/social_share_image.png"
|
||||
unshare: "https://example.com/browser/browser/base/content/test/social/social_share_image.png"
|
||||
},
|
||||
messages: {
|
||||
shareTooltip: "Share this page",
|
|
@ -10,7 +10,9 @@ Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
|
|||
|
||||
XPCOMUtils.defineLazyGetter(this, "BROWSER_NEW_TAB_URL", function () {
|
||||
const PREF = "browser.newtab.url";
|
||||
#ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||
const TOPIC = "private-browsing-transition-complete";
|
||||
#endif
|
||||
|
||||
function getNewTabPageURL() {
|
||||
if (!Services.prefs.prefHasUserValue(PREF)) {
|
||||
|
@ -26,12 +28,16 @@ XPCOMUtils.defineLazyGetter(this, "BROWSER_NEW_TAB_URL", function () {
|
|||
}
|
||||
|
||||
Services.prefs.addObserver(PREF, update, false);
|
||||
#ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||
Services.obs.addObserver(update, TOPIC, false);
|
||||
#endif
|
||||
|
||||
addEventListener("unload", function onUnload() {
|
||||
removeEventListener("unload", onUnload);
|
||||
Services.prefs.removeObserver(PREF, update);
|
||||
#ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||
Services.obs.removeObserver(update, TOPIC);
|
||||
#endif
|
||||
});
|
||||
|
||||
return getNewTabPageURL();
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
-->
|
||||
<xul:description class="downloadTarget"
|
||||
crop="center"
|
||||
style="min-width: &downloadsSummary.minWidth;"
|
||||
style="min-width: &downloadsSummary.minWidth2;"
|
||||
xbl:inherits="value=target,tooltiptext=target"/>
|
||||
<xul:progressmeter anonid="progressmeter"
|
||||
class="downloadProgress"
|
||||
|
|
|
@ -116,7 +116,7 @@
|
|||
<vbox>
|
||||
<description id="downloadsSummaryDescription"
|
||||
class="downloadTarget"
|
||||
style="min-width: &downloadsSummary.minWidth;"/>
|
||||
style="min-width: &downloadsSummary.minWidth2;"/>
|
||||
<progressmeter id="downloadsSummaryProgress"
|
||||
class="downloadProgress"
|
||||
min="0"
|
||||
|
|
|
@ -47,9 +47,6 @@ const Cr = Components.results;
|
|||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "gBrowserGlue",
|
||||
"@mozilla.org/browser/browserglue;1",
|
||||
"nsIBrowserGlue");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
|
||||
"resource://gre/modules/NetUtil.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
|
||||
|
@ -78,7 +75,7 @@ const kDownloadsStringsRequiringFormatting = {
|
|||
};
|
||||
|
||||
const kDownloadsStringsRequiringPluralForm = {
|
||||
otherDownloads: true
|
||||
otherDownloads2: true
|
||||
};
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "DownloadsLocalFileCtor", function () {
|
||||
|
@ -1863,7 +1860,7 @@ DownloadsSummaryData.prototype = {
|
|||
DownloadsCommon.summarizeDownloads(this._dataItemsForSummary());
|
||||
|
||||
this._description = DownloadsCommon.strings
|
||||
.otherDownloads(summary.numActive);
|
||||
.otherDownloads2(summary.numActive);
|
||||
this._percentComplete = summary.percentComplete;
|
||||
|
||||
// If all downloads are paused, show the progress indicator as paused.
|
||||
|
|
|
@ -281,6 +281,16 @@ BrowserGlue.prototype = {
|
|||
case "initial-migration-did-import-default-bookmarks":
|
||||
this._initPlaces(true);
|
||||
break;
|
||||
case "handle-xul-text-link":
|
||||
let linkHandled = subject.QueryInterface(Ci.nsISupportsPRBool);
|
||||
if (!linkHandled.data) {
|
||||
let win = this.getMostRecentBrowserWindow();
|
||||
if (win) {
|
||||
win.openUILinkIn(data, "tab");
|
||||
linkHandled.data = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -312,6 +322,7 @@ BrowserGlue.prototype = {
|
|||
os.addObserver(this, "places-shutdown", false);
|
||||
this._isPlacesShutdownObserver = true;
|
||||
os.addObserver(this, "defaultURIFixup-using-keyword-pref", false);
|
||||
os.addObserver(this, "handle-xul-text-link", false);
|
||||
},
|
||||
|
||||
// cleanup (called on application shutdown)
|
||||
|
@ -342,6 +353,7 @@ BrowserGlue.prototype = {
|
|||
if (this._isPlacesShutdownObserver)
|
||||
os.removeObserver(this, "places-shutdown");
|
||||
os.removeObserver(this, "defaultURIFixup-using-keyword-pref");
|
||||
os.removeObserver(this, "handle-xul-text-link");
|
||||
UserAgentOverrides.uninit();
|
||||
webappsUI.uninit();
|
||||
SignInToWebsiteUX.uninit();
|
||||
|
|
|
@ -27,7 +27,7 @@ function waitForImportAndSmartBookmarks(aCallback) {
|
|||
}, "bookmarks-restore-success", false);
|
||||
}
|
||||
|
||||
let gTests = [
|
||||
[
|
||||
|
||||
// This test must be the first one.
|
||||
function test_checkPreferences() {
|
||||
|
@ -263,7 +263,7 @@ let gTests = [
|
|||
TOPICDATA_FORCE_PLACES_INIT);
|
||||
}
|
||||
|
||||
];
|
||||
].forEach(add_test);
|
||||
|
||||
do_register_cleanup(function () {
|
||||
remove_all_bookmarks();
|
||||
|
|
|
@ -439,11 +439,6 @@ PrivateBrowsingService.prototype = {
|
|||
this._unload();
|
||||
break;
|
||||
case "private-browsing":
|
||||
// clear all auth tokens
|
||||
let sdr = Cc["@mozilla.org/security/sdr;1"].
|
||||
getService(Ci.nsISecretDecoderRing);
|
||||
sdr.logoutAndTeardown();
|
||||
|
||||
if (!this._inPrivateBrowsing) {
|
||||
// Clear the error console
|
||||
let consoleService = Cc["@mozilla.org/consoleservice;1"].
|
||||
|
|
|
@ -40,7 +40,7 @@ function test() {
|
|||
Services.obs.removeObserver(observer1, "domwindowopened");
|
||||
}, false);
|
||||
}, "domwindowopened", false);
|
||||
OpenBrowserWindow();
|
||||
OpenBrowserWindow({private: PrivateBrowsingUtils.isWindowPrivate(window)});
|
||||
}
|
||||
|
||||
// test the gPrivateBrowsingUI object
|
||||
|
|
|
@ -13,7 +13,7 @@ function test() {
|
|||
|
||||
pb.privateBrowsingEnabled = true;
|
||||
|
||||
let win = OpenBrowserWindow();
|
||||
let win = OpenBrowserWindow({private: PrivateBrowsingUtils.isWindowPrivate(window)});
|
||||
win.addEventListener("load", function() {
|
||||
win.removeEventListener("load", arguments.callee, false);
|
||||
executeSoon(function() {
|
||||
|
|
|
@ -34,6 +34,8 @@ MOCHITEST_BROWSER_FILES = \
|
|||
browser_privatebrowsing_openlocation.js \
|
||||
browser_privatebrowsing_openLocationLastURL.js \
|
||||
browser_privatebrowsing_placestitle.js \
|
||||
browser_privatebrowsing_placesTitleNoUpdate.js \
|
||||
browser_privatebrowsing_placesTitleNoUpdate.html \
|
||||
browser_privatebrowsing_popupblocker.js \
|
||||
browser_privatebrowsing_protocolhandler.js \
|
||||
browser_privatebrowsing_protocolhandler_page.html \
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Title 1</title>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,124 @@
|
|||
/* 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/. */
|
||||
|
||||
// Test to make sure that the visited page titles do not get updated inside the
|
||||
// private browsing mode.
|
||||
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/PlacesUtils.jsm");
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
const TEST_URL = "http://mochi.test:8888/browser/browser/components/privatebrowsing/test/browser/perwindow/browser_privatebrowsing_placesTitleNoUpdate.html"
|
||||
const TEST_URI = Services.io.newURI(TEST_URL, null, null);
|
||||
const TITLE_1 = "Title 1";
|
||||
const TITLE_2 = "Title 2";
|
||||
|
||||
let selectedWin = null;
|
||||
let windowsToClose = [];
|
||||
let tabToClose = null;
|
||||
let testNumber = 0;
|
||||
let historyObserver;
|
||||
|
||||
|
||||
registerCleanupFunction(function() {
|
||||
PlacesUtils.history.removeObserver(historyObserver, false);
|
||||
windowsToClose.forEach(function(aWin) {
|
||||
aWin.close();
|
||||
});
|
||||
gBrowser.removeTab(tabToClose);
|
||||
});
|
||||
|
||||
|
||||
waitForClearHistory(function () {
|
||||
historyObserver = {
|
||||
onTitleChanged: function(aURI, aPageTitle) {
|
||||
switch (++testNumber) {
|
||||
case 1:
|
||||
afterFirstVisit();
|
||||
break;
|
||||
case 2:
|
||||
afterUpdateVisit();
|
||||
break;
|
||||
}
|
||||
},
|
||||
onBeginUpdateBatch: function () {},
|
||||
onEndUpdateBatch: function () {},
|
||||
onVisit: function () {},
|
||||
onBeforeDeleteURI: function () {},
|
||||
onDeleteURI: function () {},
|
||||
onClearHistory: function () {},
|
||||
onPageChanged: function () {},
|
||||
onDeleteVisits: function() {},
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsINavHistoryObserver])
|
||||
};
|
||||
PlacesUtils.history.addObserver(historyObserver, false);
|
||||
|
||||
tabToClose = gBrowser.addTab();
|
||||
gBrowser.selectedTab = tabToClose;
|
||||
whenPageLoad(window, function() {});
|
||||
});
|
||||
|
||||
function afterFirstVisit() {
|
||||
is(PlacesUtils.history.getPageTitle(TEST_URI), TITLE_1, "The title matches the orignal title after first visit");
|
||||
|
||||
let place = {
|
||||
uri: TEST_URI,
|
||||
title: TITLE_2,
|
||||
visits: [{
|
||||
visitDate: Date.now() * 1000,
|
||||
transitionType: Ci.nsINavHistoryService.TRANSITION_LINK
|
||||
}]
|
||||
};
|
||||
PlacesUtils.asyncHistory.updatePlaces(place, {
|
||||
handleError: function () do_throw("Unexpected error in adding visit."),
|
||||
handleResult: function () { },
|
||||
handleCompletion: function () {}
|
||||
});
|
||||
}
|
||||
|
||||
function afterUpdateVisit() {
|
||||
is(PlacesUtils.history.getPageTitle(TEST_URI), TITLE_2, "The title matches the updated title after updating visit");
|
||||
|
||||
testOnWindow(true, function(aWin) {
|
||||
whenPageLoad(aWin, function() {
|
||||
executeSoon(afterFirstVisitInPrivateWindow);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function afterFirstVisitInPrivateWindow() {
|
||||
is(PlacesUtils.history.getPageTitle(TEST_URI), TITLE_2, "The title remains the same after visiting in private window");
|
||||
waitForClearHistory(finish);
|
||||
}
|
||||
|
||||
function whenPageLoad(aWin, aCallback) {
|
||||
aWin.gBrowser.selectedBrowser.addEventListener("load", function onLoad() {
|
||||
aWin.gBrowser.selectedBrowser.removeEventListener("load", onLoad, true);
|
||||
aCallback();
|
||||
}, true);
|
||||
aWin.gBrowser.selectedBrowser.loadURI(TEST_URL);
|
||||
}
|
||||
|
||||
function testOnWindow(aPrivate, aCallback) {
|
||||
whenNewWindowLoaded({ private: aPrivate }, function(aWin) {
|
||||
selectedWin = aWin;
|
||||
windowsToClose.push(aWin);
|
||||
executeSoon(function() { aCallback(aWin) });
|
||||
});
|
||||
}
|
||||
|
||||
function waitForClearHistory(aCallback) {
|
||||
let observer = {
|
||||
observe: function(aSubject, aTopic, aData) {
|
||||
Services.obs.removeObserver(this, PlacesUtils.TOPIC_EXPIRATION_FINISHED);
|
||||
aCallback();
|
||||
}
|
||||
};
|
||||
Services.obs.addObserver(observer, PlacesUtils.TOPIC_EXPIRATION_FINISHED, false);
|
||||
|
||||
PlacesUtils.bhistory.removeAllPages();
|
||||
}
|
||||
}
|
||||
|
|
@ -3711,6 +3711,9 @@ let SessionStoreInternal = {
|
|||
for (let i = oState.windows.length - 1; i >= 0; i--) {
|
||||
if (oState.windows[i].isPrivate) {
|
||||
oState.windows.splice(i, 1);
|
||||
if (oState.selectedWindow >= i) {
|
||||
oState.selectedWindow--;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let i = oState._closedWindows.length - 1; i >= 0; i--) {
|
||||
|
|
|
@ -22,8 +22,6 @@ MOCHITEST_BROWSER_FILES = \
|
|||
browser_form_restore_events_sample.html \
|
||||
browser_formdata_format.js \
|
||||
browser_formdata_format_sample.html \
|
||||
browser_248970_a.js \
|
||||
browser_248970_b.js \
|
||||
browser_248970_b_sample.html \
|
||||
browser_339445.js \
|
||||
browser_339445_sample.html \
|
||||
|
@ -139,9 +137,12 @@ ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
|||
MOCHITEST_BROWSER_FILES += \
|
||||
browser_354894_perwindowpb.js \
|
||||
browser_394759_perwindowpb.js \
|
||||
browser_819510_perwindowpb.js \
|
||||
$(NULL)
|
||||
else
|
||||
MOCHITEST_BROWSER_FILES += \
|
||||
browser_248970_a.js \
|
||||
browser_248970_b.js \
|
||||
browser_354894.js \
|
||||
browser_394759_privatebrowsing.js \
|
||||
$(NULL)
|
||||
|
|
|
@ -0,0 +1,171 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
const originalState = ss.getBrowserState();
|
||||
|
||||
/** Private Browsing Test for Bug 819510 **/
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
registerCleanupFunction(function() {
|
||||
Services.prefs.clearUserPref("browser.sessionstore.interval");
|
||||
ss.setBrowserState(originalState);
|
||||
});
|
||||
|
||||
runNextTest();
|
||||
}
|
||||
|
||||
let tests = [
|
||||
test_1,
|
||||
test_2,
|
||||
test_3,
|
||||
];
|
||||
|
||||
const testState = {
|
||||
windows: [{
|
||||
tabs: [
|
||||
{ entries: [{ url: "about:blank" }] },
|
||||
]
|
||||
}]
|
||||
};
|
||||
|
||||
function runNextTest() {
|
||||
// Set an empty state
|
||||
let windowsEnum = Services.wm.getEnumerator("navigator:browser");
|
||||
while (windowsEnum.hasMoreElements()) {
|
||||
let currentWindow = windowsEnum.getNext();
|
||||
if (currentWindow != window) {
|
||||
currentWindow.close();
|
||||
}
|
||||
}
|
||||
|
||||
// Run the next test, or finish
|
||||
if (tests.length) {
|
||||
let currentTest = tests.shift();
|
||||
waitForBrowserState(testState, currentTest);
|
||||
}
|
||||
else {
|
||||
Services.prefs.clearUserPref("browser.sessionstore.interval");
|
||||
ss.setBrowserState(originalState);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
// Test opening default mochitest-normal-private-normal-private windows
|
||||
// (saving the state with last window being private)
|
||||
function test_1() {
|
||||
testOnWindow(false, function(aWindow) {
|
||||
aWindow.gBrowser.addTab("http://www.example.com/1");
|
||||
testOnWindow(true, function(aWindow) {
|
||||
aWindow.gBrowser.addTab("http://www.example.com/2");
|
||||
testOnWindow(false, function(aWindow) {
|
||||
aWindow.gBrowser.addTab("http://www.example.com/3");
|
||||
testOnWindow(true, function(aWindow) {
|
||||
aWindow.gBrowser.addTab("http://www.example.com/4");
|
||||
|
||||
let curState = JSON.parse(ss.getBrowserState());
|
||||
is (curState.windows.length, 5, "Browser has opened 5 windows");
|
||||
is (curState.windows[2].isPrivate, true, "Window is private");
|
||||
is (curState.windows[4].isPrivate, true, "Last window is private");
|
||||
is (curState.selectedWindow, 5, "Last window opened is the one selected");
|
||||
|
||||
Services.obs.addObserver(function observe(aSubject, aTopic, aData) {
|
||||
Services.obs.removeObserver(observe, aTopic);
|
||||
aSubject.QueryInterface(Ci.nsISupportsString);
|
||||
let state = JSON.parse(aSubject.data);
|
||||
is(state.windows.length, 3,
|
||||
"sessionstore state: 3 windows in data being writted to disk");
|
||||
is (state.selectedWindow, 3,
|
||||
"Selected window is updated to match one of the saved windows");
|
||||
state.windows.forEach(function(win) {
|
||||
is(!win.isPrivate, true, "Saved window is not private");
|
||||
});
|
||||
is(state._closedWindows.length, 0,
|
||||
"sessionstore state: no closed windows in data being writted to disk");
|
||||
runNextTest();
|
||||
}, "sessionstore-state-write", false);
|
||||
|
||||
Services.prefs.setIntPref("browser.sessionstore.interval", 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Test opening default mochitest window + 2 private windows
|
||||
function test_2() {
|
||||
testOnWindow(true, function(aWindow) {
|
||||
aWindow.gBrowser.addTab("http://www.example.com/1");
|
||||
testOnWindow(true, function(aWindow) {
|
||||
aWindow.gBrowser.addTab("http://www.example.com/2");
|
||||
|
||||
let curState = JSON.parse(ss.getBrowserState());
|
||||
is (curState.windows.length, 3, "Browser has opened 3 windows");
|
||||
is (curState.windows[1].isPrivate, true, "Window 1 is private");
|
||||
is (curState.windows[2].isPrivate, true, "Window 2 is private");
|
||||
is (curState.selectedWindow, 3, "Last window opened is the one selected");
|
||||
|
||||
Services.obs.addObserver(function observe(aSubject, aTopic, aData) {
|
||||
Services.obs.removeObserver(observe, aTopic);
|
||||
aSubject.QueryInterface(Ci.nsISupportsString);
|
||||
let state = JSON.parse(aSubject.data);
|
||||
is(state.windows.length, 1,
|
||||
"sessionstore state: 1 windows in data being writted to disk");
|
||||
is (state.selectedWindow, 1,
|
||||
"Selected window is updated to match one of the saved windows");
|
||||
is(state._closedWindows.length, 0,
|
||||
"sessionstore state: no closed windows in data being writted to disk");
|
||||
runNextTest();
|
||||
}, "sessionstore-state-write", false);
|
||||
Services.prefs.setIntPref("browser.sessionstore.interval", 0);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Test opening default-normal-private-normal windows and closing a normal window
|
||||
function test_3() {
|
||||
testOnWindow(false, function(normalWindow) {
|
||||
normalWindow.gBrowser.addTab("http://www.example.com/1");
|
||||
testOnWindow(true, function(aWindow) {
|
||||
aWindow.gBrowser.addTab("http://www.example.com/2");
|
||||
testOnWindow(false, function(aWindow) {
|
||||
aWindow.gBrowser.addTab("http://www.example.com/3");
|
||||
|
||||
let curState = JSON.parse(ss.getBrowserState());
|
||||
is (curState.windows.length, 4, "Browser has opened 4 windows");
|
||||
is (curState.windows[2].isPrivate, true, "Window 2 is private");
|
||||
is (curState.selectedWindow, 4, "Last window opened is the one selected");
|
||||
|
||||
normalWindow.close();
|
||||
Services.obs.addObserver(function observe(aSubject, aTopic, aData) {
|
||||
Services.obs.removeObserver(observe, aTopic);
|
||||
aSubject.QueryInterface(Ci.nsISupportsString);
|
||||
let state = JSON.parse(aSubject.data);
|
||||
is(state.windows.length, 2,
|
||||
"sessionstore state: 2 windows in data being writted to disk");
|
||||
is (state.selectedWindow, 2,
|
||||
"Selected window is updated to match one of the saved windows");
|
||||
state.windows.forEach(function(win) {
|
||||
is(!win.isPrivate, true, "Saved window is not private");
|
||||
});
|
||||
is(state._closedWindows.length, 1,
|
||||
"sessionstore state: 1 closed window in data being writted to disk");
|
||||
state._closedWindows.forEach(function(win) {
|
||||
is(!win.isPrivate, true, "Closed window is not private");
|
||||
});
|
||||
runNextTest();
|
||||
}, "sessionstore-state-write", false);
|
||||
|
||||
Services.prefs.setIntPref("browser.sessionstore.interval", 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function testOnWindow(aIsPrivate, aCallback) {
|
||||
let win = OpenBrowserWindow({private: aIsPrivate});
|
||||
win.addEventListener("load", function onLoad() {
|
||||
win.removeEventListener("load", onLoad, false);
|
||||
executeSoon(function() { aCallback(win); });
|
||||
}, false);
|
||||
}
|
|
@ -30,6 +30,7 @@
|
|||
#ifdef MOZ_WIDGET_GTK2
|
||||
#include "nsIImageToPixbuf.h"
|
||||
#endif
|
||||
#include "nsXULAppAPI.h"
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib-object.h>
|
||||
|
@ -108,13 +109,10 @@ nsGNOMEShellService::Init()
|
|||
NS_ENSURE_TRUE(dirSvc, NS_ERROR_NOT_AVAILABLE);
|
||||
|
||||
nsCOMPtr<nsIFile> appPath;
|
||||
rv = dirSvc->Get(NS_XPCOM_CURRENT_PROCESS_DIR, NS_GET_IID(nsIFile),
|
||||
rv = dirSvc->Get(XRE_EXECUTABLE_FILE, NS_GET_IID(nsIFile),
|
||||
getter_AddRefs(appPath));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = appPath->AppendNative(NS_LITERAL_CSTRING(MOZ_APP_NAME));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return appPath->GetNativePath(mAppPath);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "nsIWinTaskbar.h"
|
||||
#include "nsISupportsPrimitives.h"
|
||||
#include "nsThreadUtils.h"
|
||||
#include "nsXULAppAPI.h"
|
||||
|
||||
#include "windows.h"
|
||||
#include "shellapi.h"
|
||||
|
@ -198,12 +199,12 @@ GetHelperPath(nsAutoString& aPath)
|
|||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIFile> appHelper;
|
||||
rv = directoryService->Get(NS_XPCOM_CURRENT_PROCESS_DIR,
|
||||
rv = directoryService->Get(XRE_EXECUTABLE_FILE,
|
||||
NS_GET_IID(nsIFile),
|
||||
getter_AddRefs(appHelper));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = appHelper->AppendNative(NS_LITERAL_CSTRING("uninstall"));
|
||||
rv = appHelper->SetNativeLeafName(NS_LITERAL_CSTRING("uninstall"));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = appHelper->AppendNative(NS_LITERAL_CSTRING("helper.exe"));
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче