зеркало из 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.
|
* Accessible object types used when creating an accessible based on the frame.
|
||||||
*/
|
*/
|
||||||
enum AccType {
|
enum AccType {
|
||||||
eNoAccessible,
|
eNoType,
|
||||||
eHTMLBRAccessible,
|
eHTMLBR,
|
||||||
eHTMLButtonAccessible,
|
eHTMLButton,
|
||||||
eHTMLCanvasAccessible,
|
eHTMLCanvas,
|
||||||
eHTMLCaptionAccessible,
|
eHTMLCaption,
|
||||||
eHTMLCheckboxAccessible,
|
eHTMLCheckbox,
|
||||||
eHTMLComboboxAccessible,
|
eHTMLCombobox,
|
||||||
eHTMLFileInputAccessible,
|
eHTMLFileInput,
|
||||||
eHTMLGroupboxAccessible,
|
eHTMLGroupbox,
|
||||||
eHTMLHRAccessible,
|
eHTMLHR,
|
||||||
eHTMLImageMapAccessible,
|
eHTMLImageMap,
|
||||||
eHTMLLabelAccessible,
|
eHTMLLabel,
|
||||||
eHTMLLiAccessible,
|
eHTMLLi,
|
||||||
eHTMLSelectListAccessible,
|
eHTMLSelectList,
|
||||||
eHTMLMediaAccessible,
|
eHTMLMedia,
|
||||||
eHTMLObjectFrameAccessible,
|
eHTMLRadioButton,
|
||||||
eHTMLRadioButtonAccessible,
|
eHTMLTable,
|
||||||
eHTMLTableAccessible,
|
eHTMLTableCell,
|
||||||
eHTMLTableCellAccessible,
|
eHTMLTableRow,
|
||||||
eHTMLTableRowAccessible,
|
eHTMLTextField,
|
||||||
eHTMLTextFieldAccessible,
|
eHyperText,
|
||||||
eHyperTextAccessible,
|
eImage,
|
||||||
eImageAccessible,
|
eOuterDoc,
|
||||||
eOuterDocAccessible,
|
ePlugin,
|
||||||
eTextLeafAccessible
|
eTextLeaf
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -207,9 +207,9 @@ nsAccessibilityService::GetRootDocumentAccessible(nsIPresShell* aPresShell,
|
||||||
}
|
}
|
||||||
|
|
||||||
already_AddRefed<Accessible>
|
already_AddRefed<Accessible>
|
||||||
nsAccessibilityService::CreateHTMLObjectFrameAccessible(nsObjectFrame* aFrame,
|
nsAccessibilityService::CreatePluginAccessible(nsObjectFrame* aFrame,
|
||||||
nsIContent* aContent,
|
nsIContent* aContent,
|
||||||
Accessible* aContext)
|
Accessible* aContext)
|
||||||
{
|
{
|
||||||
// nsObjectFrame means a plugin, so we need to use the accessibility support
|
// nsObjectFrame means a plugin, so we need to use the accessibility support
|
||||||
// of the plugin.
|
// of the plugin.
|
||||||
|
@ -799,13 +799,13 @@ nsAccessibilityService::GetOrCreateAccessible(nsINode* aNode,
|
||||||
// on accessible HTML table elements.
|
// on accessible HTML table elements.
|
||||||
if ((roleMapEntry->accTypes & Accessible::eTableCellAccessible)) {
|
if ((roleMapEntry->accTypes & Accessible::eTableCellAccessible)) {
|
||||||
if (aContext->IsOfType(Accessible::eTableRowAccessible) &&
|
if (aContext->IsOfType(Accessible::eTableRowAccessible) &&
|
||||||
(frame->AccessibleType() != eHTMLTableCellAccessible ||
|
(frame->AccessibleType() != eHTMLTableCell ||
|
||||||
aContext->GetContent() != content->GetParent())) {
|
aContext->GetContent() != content->GetParent())) {
|
||||||
newAcc = new ARIAGridCellAccessibleWrap(content, document);
|
newAcc = new ARIAGridCellAccessibleWrap(content, document);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if ((roleMapEntry->accTypes & Accessible::eTableAccessible) &&
|
} else if ((roleMapEntry->accTypes & Accessible::eTableAccessible) &&
|
||||||
frame->AccessibleType() != eHTMLTableAccessible) {
|
frame->AccessibleType() != eHTMLTable) {
|
||||||
newAcc = new ARIAGridAccessibleWrap(content, document);
|
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
|
// If table has strong ARIA role then all table descendants shouldn't
|
||||||
// expose their native roles.
|
// expose their native roles.
|
||||||
if (!roleMapEntry && newAcc) {
|
if (!roleMapEntry && newAcc) {
|
||||||
if (frame->AccessibleType() == eHTMLTableRowAccessible) {
|
if (frame->AccessibleType() == eHTMLTableRow) {
|
||||||
nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
|
nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
|
||||||
if (contextRoleMap &&
|
if (contextRoleMap &&
|
||||||
!(contextRoleMap->accTypes & Accessible::eTableAccessible))
|
!(contextRoleMap->accTypes & Accessible::eTableAccessible))
|
||||||
roleMapEntry = &nsARIAMap::gEmptyRoleMap;
|
roleMapEntry = &nsARIAMap::gEmptyRoleMap;
|
||||||
|
|
||||||
} else if (frame->AccessibleType() == eHTMLTableCellAccessible &&
|
} else if (frame->AccessibleType() == eHTMLTableCell &&
|
||||||
aContext->ARIARoleMap() == &nsARIAMap::gEmptyRoleMap) {
|
aContext->ARIARoleMap() == &nsARIAMap::gEmptyRoleMap) {
|
||||||
roleMapEntry = &nsARIAMap::gEmptyRoleMap;
|
roleMapEntry = &nsARIAMap::gEmptyRoleMap;
|
||||||
|
|
||||||
} else if (content->Tag() == nsGkAtoms::dt ||
|
} else if (content->Tag() == nsGkAtoms::dt ||
|
||||||
content->Tag() == nsGkAtoms::li ||
|
content->Tag() == nsGkAtoms::li ||
|
||||||
content->Tag() == nsGkAtoms::dd ||
|
content->Tag() == nsGkAtoms::dd ||
|
||||||
frame->AccessibleType() == eHTMLLiAccessible) {
|
frame->AccessibleType() == eHTMLLi) {
|
||||||
nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
|
nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
|
||||||
if (contextRoleMap &&
|
if (contextRoleMap &&
|
||||||
!(contextRoleMap->accTypes & Accessible::eListAccessible))
|
!(contextRoleMap->accTypes & Accessible::eListAccessible))
|
||||||
|
@ -1306,75 +1306,69 @@ nsAccessibilityService::CreateAccessibleByFrameType(nsIFrame* aFrame,
|
||||||
|
|
||||||
nsRefPtr<Accessible> newAcc;
|
nsRefPtr<Accessible> newAcc;
|
||||||
switch (aFrame->AccessibleType()) {
|
switch (aFrame->AccessibleType()) {
|
||||||
case eNoAccessible:
|
case eNoType:
|
||||||
return nullptr;
|
return nullptr;
|
||||||
case eHTMLBRAccessible:
|
case eHTMLBR:
|
||||||
newAcc = new HTMLBRAccessible(aContent, document);
|
newAcc = new HTMLBRAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLButtonAccessible:
|
case eHTMLButton:
|
||||||
newAcc = new HTMLButtonAccessible(aContent, document);
|
newAcc = new HTMLButtonAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLCanvasAccessible:
|
case eHTMLCanvas:
|
||||||
newAcc = new HTMLCanvasAccessible(aContent, document);
|
newAcc = new HTMLCanvasAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLCaptionAccessible:
|
case eHTMLCaption:
|
||||||
if (aContext->IsOfType(Accessible::eTableAccessible) &&
|
if (aContext->IsOfType(Accessible::eTableAccessible) &&
|
||||||
aContext->GetContent() == aContent->GetParent()) {
|
aContext->GetContent() == aContent->GetParent()) {
|
||||||
newAcc = new HTMLCaptionAccessible(aContent, document);
|
newAcc = new HTMLCaptionAccessible(aContent, document);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case eHTMLCheckboxAccessible:
|
case eHTMLCheckbox:
|
||||||
newAcc = new HTMLCheckboxAccessible(aContent, document);
|
newAcc = new HTMLCheckboxAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLComboboxAccessible:
|
case eHTMLCombobox:
|
||||||
newAcc = new HTMLComboboxAccessible(aContent, document);
|
newAcc = new HTMLComboboxAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLFileInputAccessible:
|
case eHTMLFileInput:
|
||||||
newAcc = new HTMLFileInputAccessible(aContent, document);
|
newAcc = new HTMLFileInputAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLGroupboxAccessible:
|
case eHTMLGroupbox:
|
||||||
newAcc = new HTMLGroupboxAccessible(aContent, document);
|
newAcc = new HTMLGroupboxAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLHRAccessible:
|
case eHTMLHR:
|
||||||
newAcc = new HTMLHRAccessible(aContent, document);
|
newAcc = new HTMLHRAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLImageMapAccessible:
|
case eHTMLImageMap:
|
||||||
newAcc = new HTMLImageMapAccessible(aContent, document);
|
newAcc = new HTMLImageMapAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLLabelAccessible:
|
case eHTMLLabel:
|
||||||
newAcc = new HTMLLabelAccessible(aContent, document);
|
newAcc = new HTMLLabelAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLLiAccessible:
|
case eHTMLLi:
|
||||||
if (aContext->IsOfType(Accessible::eListAccessible) &&
|
if (aContext->IsOfType(Accessible::eListAccessible) &&
|
||||||
aContext->GetContent() == aContent->GetParent()) {
|
aContext->GetContent() == aContent->GetParent()) {
|
||||||
newAcc = new HTMLLIAccessible(aContent, document);
|
newAcc = new HTMLLIAccessible(aContent, document);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case eHTMLSelectListAccessible:
|
case eHTMLSelectList:
|
||||||
newAcc = new HTMLSelectListAccessible(aContent, document);
|
newAcc = new HTMLSelectListAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLMediaAccessible:
|
case eHTMLMedia:
|
||||||
newAcc = new EnumRoleAccessible(aContent, document, roles::GROUPING);
|
newAcc = new EnumRoleAccessible(aContent, document, roles::GROUPING);
|
||||||
break;
|
break;
|
||||||
case eHTMLObjectFrameAccessible: {
|
case eHTMLRadioButton:
|
||||||
nsObjectFrame* objectFrame = do_QueryFrame(aFrame);
|
|
||||||
newAcc = CreateHTMLObjectFrameAccessible(objectFrame, aContent, aContext);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case eHTMLRadioButtonAccessible:
|
|
||||||
newAcc = new HTMLRadioButtonAccessible(aContent, document);
|
newAcc = new HTMLRadioButtonAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLTableAccessible:
|
case eHTMLTable:
|
||||||
newAcc = new HTMLTableAccessibleWrap(aContent, document);
|
newAcc = new HTMLTableAccessibleWrap(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHTMLTableCellAccessible:
|
case eHTMLTableCell:
|
||||||
// Accessible HTML table cell must be a child of accessible HTML table row.
|
// Accessible HTML table cell must be a child of accessible HTML table row.
|
||||||
if (aContext->IsOfType(Accessible::eHTMLTableRowAccessible))
|
if (aContext->IsOfType(Accessible::eHTMLTableRowAccessible))
|
||||||
newAcc = new HTMLTableCellAccessibleWrap(aContent, document);
|
newAcc = new HTMLTableCellAccessibleWrap(aContent, document);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eHTMLTableRowAccessible: {
|
case eHTMLTableRow: {
|
||||||
// Accessible HTML table row must be a child of tbody/tfoot/thead of
|
// 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.
|
// accessible HTML table or must be a child of accessible of HTML table.
|
||||||
if (aContext->IsOfType(Accessible::eTableAccessible)) {
|
if (aContext->IsOfType(Accessible::eTableAccessible)) {
|
||||||
|
@ -1392,21 +1386,26 @@ nsAccessibilityService::CreateAccessibleByFrameType(nsIFrame* aFrame,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case eHTMLTextFieldAccessible:
|
case eHTMLTextField:
|
||||||
newAcc = new HTMLTextFieldAccessible(aContent, document);
|
newAcc = new HTMLTextFieldAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eHyperTextAccessible:
|
case eHyperText:
|
||||||
if (aContent->Tag() != nsGkAtoms::dt && aContent->Tag() != nsGkAtoms::dd)
|
if (aContent->Tag() != nsGkAtoms::dt && aContent->Tag() != nsGkAtoms::dd)
|
||||||
newAcc = new HyperTextAccessibleWrap(aContent, document);
|
newAcc = new HyperTextAccessibleWrap(aContent, document);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eImageAccessible:
|
case eImage:
|
||||||
newAcc = new ImageAccessibleWrap(aContent, document);
|
newAcc = new ImageAccessibleWrap(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eOuterDocAccessible:
|
case eOuterDoc:
|
||||||
newAcc = new OuterDocAccessible(aContent, document);
|
newAcc = new OuterDocAccessible(aContent, document);
|
||||||
break;
|
break;
|
||||||
case eTextLeafAccessible:
|
case ePlugin: {
|
||||||
|
nsObjectFrame* objectFrame = do_QueryFrame(aFrame);
|
||||||
|
newAcc = CreatePluginAccessible(objectFrame, aContent, aContext);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case eTextLeaf:
|
||||||
newAcc = new TextLeafAccessibleWrap(aContent, document);
|
newAcc = new TextLeafAccessibleWrap(aContent, document);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,8 +54,8 @@ public:
|
||||||
virtual Accessible* GetRootDocumentAccessible(nsIPresShell* aPresShell,
|
virtual Accessible* GetRootDocumentAccessible(nsIPresShell* aPresShell,
|
||||||
bool aCanCreate);
|
bool aCanCreate);
|
||||||
already_AddRefed<Accessible>
|
already_AddRefed<Accessible>
|
||||||
CreateHTMLObjectFrameAccessible(nsObjectFrame* aFrame, nsIContent* aContent,
|
CreatePluginAccessible(nsObjectFrame* aFrame, nsIContent* aContent,
|
||||||
Accessible* aContext);
|
Accessible* aContext);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds/remove ATK root accessible for gtk+ native window to/from children
|
* Adds/remove ATK root accessible for gtk+ native window to/from children
|
||||||
|
|
|
@ -42,7 +42,7 @@ Accessible::SetRoleMapEntry(nsRoleMapEntry* aRoleMapEntry)
|
||||||
inline bool
|
inline bool
|
||||||
Accessible::HasNumericValue() const
|
Accessible::HasNumericValue() const
|
||||||
{
|
{
|
||||||
if (mFlags & eHasNumericValue)
|
if (mStateFlags & eHasNumericValue)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return mRoleMapEntry && mRoleMapEntry->valueRule != eNoValue;
|
return mRoleMapEntry && mRoleMapEntry->valueRule != eNoValue;
|
||||||
|
|
|
@ -145,8 +145,8 @@ Accessible::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||||
|
|
||||||
Accessible::Accessible(nsIContent* aContent, DocAccessible* aDoc) :
|
Accessible::Accessible(nsIContent* aContent, DocAccessible* aDoc) :
|
||||||
nsAccessNodeWrap(aContent, aDoc),
|
nsAccessNodeWrap(aContent, aDoc),
|
||||||
mParent(nullptr), mIndexInParent(-1), mFlags(eChildrenUninitialized),
|
mParent(nullptr), mIndexInParent(-1), mChildrenFlags(eChildrenUninitialized),
|
||||||
mIndexOfEmbeddedChild(-1), mRoleMapEntry(nullptr)
|
mStateFlags(0), mFlags(0), mIndexOfEmbeddedChild(-1), mRoleMapEntry(nullptr)
|
||||||
{
|
{
|
||||||
#ifdef NS_DEBUG_X
|
#ifdef NS_DEBUG_X
|
||||||
{
|
{
|
||||||
|
@ -2430,7 +2430,7 @@ Accessible::Shutdown()
|
||||||
{
|
{
|
||||||
// Mark the accessible as defunct, invalidate the child count and pointers to
|
// 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
|
// other accessibles, also make sure none of its children point to this parent
|
||||||
mFlags |= eIsDefunct;
|
mStateFlags |= eIsDefunct;
|
||||||
|
|
||||||
InvalidateChildren();
|
InvalidateChildren();
|
||||||
if (mParent)
|
if (mParent)
|
||||||
|
|
|
@ -678,23 +678,24 @@ public:
|
||||||
/**
|
/**
|
||||||
* Return true if the accessible is defunct.
|
* 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.
|
* 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.
|
* Return true if the accessible should be contained by document node map.
|
||||||
*/
|
*/
|
||||||
bool IsNodeMapEntry() const
|
bool IsNodeMapEntry() const
|
||||||
{ return HasOwnContent() && !(mFlags & eNotNodeMapEntry); }
|
{ return HasOwnContent() && !(mStateFlags & eNotNodeMapEntry); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the accessible has associated DOM content.
|
* 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.
|
* Return true if accessible is of given type.
|
||||||
|
@ -752,25 +753,24 @@ protected:
|
||||||
/**
|
/**
|
||||||
* Return true if the children flag is set.
|
* Return true if the children flag is set.
|
||||||
*/
|
*/
|
||||||
inline bool IsChildrenFlag(ChildrenFlags aFlag) const
|
bool IsChildrenFlag(ChildrenFlags aFlag) const
|
||||||
{ return static_cast<ChildrenFlags> (mFlags & kChildrenFlagsMask) == aFlag; }
|
{ return static_cast<ChildrenFlags>(mChildrenFlags) == aFlag; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set children flag.
|
* Set children flag.
|
||||||
*/
|
*/
|
||||||
inline void SetChildrenFlag(ChildrenFlags aFlag)
|
void SetChildrenFlag(ChildrenFlags aFlag) { mChildrenFlags = aFlag; }
|
||||||
{ mFlags = (mFlags & ~kChildrenFlagsMask) | aFlag; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flags used to describe the state of this accessible.
|
* Flags used to describe the state of this accessible.
|
||||||
* @note keep these flags in sync with ChildrenFlags
|
* @note keep these flags in sync with ChildrenFlags
|
||||||
*/
|
*/
|
||||||
enum StateFlags {
|
enum StateFlags {
|
||||||
eIsDefunct = 1 << 2, // accessible is defunct
|
eIsDefunct = 1 << 0, // accessible is defunct
|
||||||
eIsNotInDocument = 1 << 3, // accessible is not in document
|
eIsNotInDocument = 1 << 1, // accessible is not in document
|
||||||
eSharedNode = 1 << 4, // accessible shares DOM node from another accessible
|
eSharedNode = 1 << 2, // accessible shares DOM node from another accessible
|
||||||
eNotNodeMapEntry = 1 << 5, // accessible shouldn't be in document node map
|
eNotNodeMapEntry = 1 << 3, // accessible shouldn't be in document node map
|
||||||
eHasNumericValue = 1 << 6 // accessible has a numeric value
|
eHasNumericValue = 1 << 4 // accessible has a numeric value
|
||||||
};
|
};
|
||||||
|
|
||||||
public: // XXX: a small hack to make these visible for nsARIAMap
|
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
|
* @note keep these flags in sync with ChildrenFlags and StateFlags
|
||||||
*/
|
*/
|
||||||
enum AccessibleTypes {
|
enum AccessibleTypes {
|
||||||
eApplicationAccessible = 1 << 7,
|
eApplicationAccessible = 1 << 0,
|
||||||
eAutoCompleteAccessible = 1 << 8,
|
eAutoCompleteAccessible = 1 << 1,
|
||||||
eAutoCompletePopupAccessible = 1 << 9,
|
eAutoCompletePopupAccessible = 1 << 2,
|
||||||
eComboboxAccessible = 1 << 10,
|
eComboboxAccessible = 1 << 3,
|
||||||
eDocAccessible = 1 << 11,
|
eDocAccessible = 1 << 4,
|
||||||
eHyperTextAccessible = 1 << 12,
|
eHyperTextAccessible = 1 << 5,
|
||||||
eHTMLFileInputAccessible = 1 << 13,
|
eHTMLFileInputAccessible = 1 << 6,
|
||||||
eHTMLListItemAccessible = 1 << 14,
|
eHTMLListItemAccessible = 1 << 7,
|
||||||
eHTMLTableRowAccessible = 1 << 15,
|
eHTMLTableRowAccessible = 1 << 8,
|
||||||
eImageAccessible = 1 << 16,
|
eImageAccessible = 1 << 9,
|
||||||
eImageMapAccessible = 1 << 17,
|
eImageMapAccessible = 1 << 10,
|
||||||
eListAccessible = 1 << 18,
|
eListAccessible = 1 << 11,
|
||||||
eListControlAccessible = 1 << 19,
|
eListControlAccessible = 1 << 12,
|
||||||
eMenuButtonAccessible = 1 << 20,
|
eMenuButtonAccessible = 1 << 13,
|
||||||
eMenuPopupAccessible = 1 << 21,
|
eMenuPopupAccessible = 1 << 14,
|
||||||
eProgressAccessible = 1 << 22,
|
eProgressAccessible = 1 << 15,
|
||||||
eRootAccessible = 1 << 23,
|
eRootAccessible = 1 << 16,
|
||||||
eSelectAccessible = 1 << 24,
|
eSelectAccessible = 1 << 17,
|
||||||
eTableAccessible = 1 << 25,
|
eTableAccessible = 1 << 18,
|
||||||
eTableCellAccessible = 1 << 26,
|
eTableCellAccessible = 1 << 19,
|
||||||
eTableRowAccessible = 1 << 27,
|
eTableRowAccessible = 1 << 20,
|
||||||
eTextLeafAccessible = 1 << 28,
|
eTextLeafAccessible = 1 << 21,
|
||||||
eXULDeckAccessible = 1 << 29,
|
eXULDeckAccessible = 1 << 22,
|
||||||
eXULTreeAccessible = 1 << 30
|
eXULTreeAccessible = 1 << 23
|
||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -909,10 +909,13 @@ protected:
|
||||||
nsTArray<nsRefPtr<Accessible> > mChildren;
|
nsTArray<nsRefPtr<Accessible> > mChildren;
|
||||||
int32_t mIndexInParent;
|
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;
|
friend class DocAccessible;
|
||||||
|
|
||||||
nsAutoPtr<mozilla::a11y::EmbeddedObjCollector> mEmbeddedObjCollector;
|
nsAutoPtr<mozilla::a11y::EmbeddedObjCollector> mEmbeddedObjCollector;
|
||||||
|
|
|
@ -79,7 +79,9 @@ DocAccessible::
|
||||||
mVirtualCursor(nullptr),
|
mVirtualCursor(nullptr),
|
||||||
mPresShell(aPresShell)
|
mPresShell(aPresShell)
|
||||||
{
|
{
|
||||||
mFlags |= eDocAccessible | eNotNodeMapEntry;
|
mFlags |= eDocAccessible;
|
||||||
|
mStateFlags |= eNotNodeMapEntry;
|
||||||
|
|
||||||
MOZ_ASSERT(mPresShell, "should have been given a pres shell");
|
MOZ_ASSERT(mPresShell, "should have been given a pres shell");
|
||||||
mPresShell->SetDocAccessible(this);
|
mPresShell->SetDocAccessible(this);
|
||||||
|
|
||||||
|
@ -613,7 +615,7 @@ DocAccessible::Shutdown()
|
||||||
// Mark the document as shutdown before AT is notified about the document
|
// 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
|
// removal from its container (valid for root documents on ATK and due to
|
||||||
// some reason for MSAA, refer to bug 757392 for details).
|
// some reason for MSAA, refer to bug 757392 for details).
|
||||||
mFlags |= eIsDefunct;
|
mStateFlags |= eIsDefunct;
|
||||||
nsCOMPtr<nsIDocument> kungFuDeathGripDoc = mDocumentNode;
|
nsCOMPtr<nsIDocument> kungFuDeathGripDoc = mDocumentNode;
|
||||||
mDocumentNode = nullptr;
|
mDocumentNode = nullptr;
|
||||||
|
|
||||||
|
@ -1941,7 +1943,7 @@ DocAccessible::CacheChildrenInSubtree(Accessible* aRoot)
|
||||||
void
|
void
|
||||||
DocAccessible::UncacheChildrenInSubtree(Accessible* aRoot)
|
DocAccessible::UncacheChildrenInSubtree(Accessible* aRoot)
|
||||||
{
|
{
|
||||||
aRoot->mFlags |= eIsNotInDocument;
|
aRoot->mStateFlags |= eIsNotInDocument;
|
||||||
|
|
||||||
if (aRoot->IsElement())
|
if (aRoot->IsElement())
|
||||||
RemoveDependentIDsFor(aRoot);
|
RemoveDependentIDsFor(aRoot);
|
||||||
|
|
|
@ -21,7 +21,8 @@ public:
|
||||||
ProgressMeterAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
ProgressMeterAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
||||||
LeafAccessible(aContent, aDoc)
|
LeafAccessible(aContent, aDoc)
|
||||||
{
|
{
|
||||||
mFlags |= eHasNumericValue | eProgressAccessible;
|
mStateFlags |= eHasNumericValue;
|
||||||
|
mFlags |= eProgressAccessible;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
|
|
|
@ -153,7 +153,7 @@ HTMLAreaAccessible::
|
||||||
{
|
{
|
||||||
// Make HTML area DOM element not accessible. HTML image map accessible
|
// Make HTML area DOM element not accessible. HTML image map accessible
|
||||||
// manages its tree itself.
|
// manages its tree itself.
|
||||||
mFlags |= eNotNodeMapEntry;
|
mStateFlags |= eNotNodeMapEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -145,7 +145,7 @@ HTMLListBulletAccessible::
|
||||||
HTMLListBulletAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
HTMLListBulletAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
||||||
LeafAccessible(aContent, aDoc)
|
LeafAccessible(aContent, aDoc)
|
||||||
{
|
{
|
||||||
mFlags |= eSharedNode;
|
mStateFlags |= eSharedNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -620,7 +620,7 @@ HTMLComboboxListAccessible::
|
||||||
DocAccessible* aDoc) :
|
DocAccessible* aDoc) :
|
||||||
HTMLSelectListAccessible(aContent, aDoc)
|
HTMLSelectListAccessible(aContent, aDoc)
|
||||||
{
|
{
|
||||||
mFlags |= eSharedNode;
|
mStateFlags |= eSharedNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -30,12 +30,13 @@
|
||||||
#include "nsIDocument.h"
|
#include "nsIDocument.h"
|
||||||
#include "nsIMutableArray.h"
|
#include "nsIMutableArray.h"
|
||||||
#include "nsIPresShell.h"
|
#include "nsIPresShell.h"
|
||||||
#include "nsITableLayout.h"
|
|
||||||
#include "nsITableCellLayout.h"
|
#include "nsITableCellLayout.h"
|
||||||
#include "nsFrameSelection.h"
|
#include "nsFrameSelection.h"
|
||||||
#include "nsError.h"
|
#include "nsError.h"
|
||||||
#include "nsArrayUtils.h"
|
#include "nsArrayUtils.h"
|
||||||
#include "nsComponentManagerUtils.h"
|
#include "nsComponentManagerUtils.h"
|
||||||
|
#include "nsTableCellFrame.h"
|
||||||
|
#include "nsTableOuterFrame.h"
|
||||||
|
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
using namespace mozilla::a11y;
|
using namespace mozilla::a11y;
|
||||||
|
@ -121,9 +122,11 @@ HTMLTableCellAccessible::NativeAttributes()
|
||||||
if (ChildCount() == 1) {
|
if (ChildCount() == 1) {
|
||||||
Accessible* abbr = FirstChild();
|
Accessible* abbr = FirstChild();
|
||||||
if (abbr->IsAbbreviation()) {
|
if (abbr->IsAbbreviation()) {
|
||||||
nsTextEquivUtils::
|
nsIContent* firstChildNode = abbr->GetContent()->GetFirstChild();
|
||||||
AppendTextEquivFromTextContent(abbr->GetContent()->GetFirstChild(),
|
if (firstChildNode) {
|
||||||
&abbrText);
|
nsTextEquivUtils::
|
||||||
|
AppendTextEquivFromTextContent(firstChildNode, &abbrText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (abbrText.IsEmpty())
|
if (abbrText.IsEmpty())
|
||||||
|
@ -469,52 +472,35 @@ HTMLTableAccessible::Summary(nsString& aSummary)
|
||||||
uint32_t
|
uint32_t
|
||||||
HTMLTableAccessible::ColCount()
|
HTMLTableAccessible::ColCount()
|
||||||
{
|
{
|
||||||
nsITableLayout* tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
if (!tableLayout)
|
return tableFrame ? tableFrame->GetColCount() : 0;
|
||||||
return 0;
|
|
||||||
|
|
||||||
int32_t rowCount = 0, colCount = 0;
|
|
||||||
tableLayout->GetTableSize(rowCount, colCount);
|
|
||||||
return colCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
HTMLTableAccessible::RowCount()
|
HTMLTableAccessible::RowCount()
|
||||||
{
|
{
|
||||||
nsITableLayout* tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
if (!tableLayout)
|
return tableFrame ? tableFrame->GetRowCount() : 0;
|
||||||
return 0;
|
|
||||||
|
|
||||||
int32_t rowCount = 0, colCount = 0;
|
|
||||||
tableLayout->GetTableSize(rowCount, colCount);
|
|
||||||
return rowCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
HTMLTableAccessible::SelectedCellCount()
|
HTMLTableAccessible::SelectedCellCount()
|
||||||
{
|
{
|
||||||
nsITableLayout *tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
if (!tableLayout)
|
if (!tableFrame)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
uint32_t count = 0, rowCount = RowCount(), colCount = ColCount();
|
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 rowIdx = 0; rowIdx < rowCount; rowIdx++) {
|
||||||
for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
|
for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
|
||||||
nsresult rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
|
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
|
||||||
*getter_AddRefs(domElement),
|
if (!cellFrame || !cellFrame->IsSelected())
|
||||||
startRowIndex, startColIndex,
|
continue;
|
||||||
rowSpan, colSpan,
|
|
||||||
actualRowSpan, actualColSpan,
|
|
||||||
isSelected);
|
|
||||||
|
|
||||||
if (NS_SUCCEEDED(rv) && startRowIndex == rowIdx &&
|
int32_t startRow = -1, startCol = -1;
|
||||||
startColIndex == colIdx && isSelected)
|
cellFrame->GetRowIndex(startRow);
|
||||||
|
cellFrame->GetColIndex(startCol);
|
||||||
|
if (startRow == rowIdx && startCol == colIdx)
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -549,32 +535,25 @@ HTMLTableAccessible::SelectedRowCount()
|
||||||
void
|
void
|
||||||
HTMLTableAccessible::SelectedCells(nsTArray<Accessible*>* aCells)
|
HTMLTableAccessible::SelectedCells(nsTArray<Accessible*>* aCells)
|
||||||
{
|
{
|
||||||
uint32_t rowCount = RowCount(), colCount = ColCount();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
|
if (!tableFrame)
|
||||||
nsITableLayout *tableLayout = GetTableLayout();
|
|
||||||
if (!tableLayout)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
nsCOMPtr<nsIDOMElement> cellElement;
|
uint32_t rowCount = RowCount(), colCount = ColCount();
|
||||||
int32_t startRowIndex = 0, startColIndex = 0,
|
|
||||||
rowSpan, colSpan, actualRowSpan, actualColSpan;
|
|
||||||
bool isSelected = false;
|
|
||||||
|
|
||||||
for (uint32_t rowIdx = 0; rowIdx < rowCount; rowIdx++) {
|
for (uint32_t rowIdx = 0; rowIdx < rowCount; rowIdx++) {
|
||||||
for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
|
for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
|
||||||
nsresult rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
|
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
|
||||||
*getter_AddRefs(cellElement),
|
if (!cellFrame || !cellFrame->IsSelected())
|
||||||
startRowIndex, startColIndex,
|
continue;
|
||||||
rowSpan, colSpan,
|
|
||||||
actualRowSpan, actualColSpan,
|
|
||||||
isSelected);
|
|
||||||
|
|
||||||
if (NS_SUCCEEDED(rv) && startRowIndex == rowIdx &&
|
int32_t startCol = -1, startRow = -1;
|
||||||
startColIndex == colIdx && isSelected) {
|
cellFrame->GetRowIndex(startRow);
|
||||||
nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElement));
|
cellFrame->GetColIndex(startCol);
|
||||||
Accessible* cell = mDoc->GetAccessible(cellContent);
|
if (startRow != rowIdx || startCol != colIdx)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Accessible* cell = mDoc->GetAccessible(cellFrame->GetContent());
|
||||||
aCells->AppendElement(cell);
|
aCells->AppendElement(cell);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -582,28 +561,21 @@ HTMLTableAccessible::SelectedCells(nsTArray<Accessible*>* aCells)
|
||||||
void
|
void
|
||||||
HTMLTableAccessible::SelectedCellIndices(nsTArray<uint32_t>* aCells)
|
HTMLTableAccessible::SelectedCellIndices(nsTArray<uint32_t>* aCells)
|
||||||
{
|
{
|
||||||
nsITableLayout *tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
if (!tableLayout)
|
if (!tableFrame)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32_t rowCount = RowCount(), colCount = ColCount();
|
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 rowIdx = 0; rowIdx < rowCount; rowIdx++) {
|
||||||
for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
|
for (uint32_t colIdx = 0; colIdx < colCount; colIdx++) {
|
||||||
nsresult rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
|
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
|
||||||
*getter_AddRefs(domElement),
|
if (!cellFrame || !cellFrame->IsSelected())
|
||||||
startRowIndex, startColIndex,
|
continue;
|
||||||
rowSpan, colSpan,
|
|
||||||
actualRowSpan, actualColSpan,
|
|
||||||
isSelected);
|
|
||||||
|
|
||||||
if (NS_SUCCEEDED(rv) && startRowIndex == rowIdx &&
|
int32_t startRow = -1, startCol = -1;
|
||||||
startColIndex == colIdx && isSelected)
|
cellFrame->GetColIndex(startCol);
|
||||||
|
cellFrame->GetRowIndex(startRow);
|
||||||
|
if (startRow == rowIdx && startCol == colIdx)
|
||||||
aCells->AppendElement(CellIndexAt(rowIdx, colIdx));
|
aCells->AppendElement(CellIndexAt(rowIdx, colIdx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -628,17 +600,13 @@ HTMLTableAccessible::SelectedRowIndices(nsTArray<uint32_t>* aRows)
|
||||||
}
|
}
|
||||||
|
|
||||||
Accessible*
|
Accessible*
|
||||||
HTMLTableAccessible::CellAt(uint32_t aRowIndex, uint32_t aColumnIndex)
|
HTMLTableAccessible::CellAt(uint32_t aRowIdx, uint32_t aColIdx)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIDOMElement> cellElement;
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
GetCellAt(aRowIndex, aColumnIndex, *getter_AddRefs(cellElement));
|
if (!tableFrame)
|
||||||
if (!cellElement)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElement));
|
|
||||||
if (!cellContent)
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
nsIContent* cellContent = tableFrame->GetCellAt(aRowIdx, aColIdx);
|
||||||
Accessible* cell = mDoc->GetAccessible(cellContent);
|
Accessible* cell = mDoc->GetAccessible(cellContent);
|
||||||
|
|
||||||
// XXX bug 576838: crazy tables (like table6 in tables/test_table2.html) may
|
// 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
|
int32_t
|
||||||
HTMLTableAccessible::CellIndexAt(uint32_t aRowIdx, uint32_t aColIdx)
|
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;
|
return tableFrame->GetIndexByRowAndColumn(aRowIdx, aColIdx);
|
||||||
tableLayout->GetIndexByRowAndColumn(aRowIdx, aColIdx, &index);
|
|
||||||
return index;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t
|
int32_t
|
||||||
HTMLTableAccessible::ColIndexAt(uint32_t aCellIdx)
|
HTMLTableAccessible::ColIndexAt(uint32_t aCellIdx)
|
||||||
{
|
{
|
||||||
nsITableLayout* tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
if (!tableLayout)
|
if (!tableFrame)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
int32_t rowIdx = -1, colIdx = -1;
|
int32_t rowIdx = -1, colIdx = -1;
|
||||||
tableLayout->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
|
tableFrame->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
|
||||||
return colIdx;
|
return colIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t
|
int32_t
|
||||||
HTMLTableAccessible::RowIndexAt(uint32_t aCellIdx)
|
HTMLTableAccessible::RowIndexAt(uint32_t aCellIdx)
|
||||||
{
|
{
|
||||||
nsITableLayout* tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
if (!tableLayout)
|
if (!tableFrame)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
int32_t rowIdx = -1, colIdx = -1;
|
int32_t rowIdx = -1, colIdx = -1;
|
||||||
tableLayout->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
|
tableFrame->GetRowAndColumnByIndex(aCellIdx, &rowIdx, &colIdx);
|
||||||
return rowIdx;
|
return rowIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -684,52 +652,29 @@ void
|
||||||
HTMLTableAccessible::RowAndColIndicesAt(uint32_t aCellIdx, int32_t* aRowIdx,
|
HTMLTableAccessible::RowAndColIndicesAt(uint32_t aCellIdx, int32_t* aRowIdx,
|
||||||
int32_t* aColIdx)
|
int32_t* aColIdx)
|
||||||
{
|
{
|
||||||
nsITableLayout* tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
|
if (tableFrame)
|
||||||
if (tableLayout)
|
tableFrame->GetRowAndColumnByIndex(aCellIdx, aRowIdx, aColIdx);
|
||||||
tableLayout->GetRowAndColumnByIndex(aCellIdx, aRowIdx, aColIdx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
HTMLTableAccessible::ColExtentAt(uint32_t aRowIdx, uint32_t aColIdx)
|
HTMLTableAccessible::ColExtentAt(uint32_t aRowIdx, uint32_t aColIdx)
|
||||||
{
|
{
|
||||||
nsITableLayout* tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
if (!tableLayout)
|
if (!tableFrame)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nsCOMPtr<nsIDOMElement> domElement;
|
return tableFrame->GetEffectiveColSpanAt(aRowIdx, aColIdx);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
HTMLTableAccessible::RowExtentAt(uint32_t aRowIdx, uint32_t aColIdx)
|
HTMLTableAccessible::RowExtentAt(uint32_t aRowIdx, uint32_t aColIdx)
|
||||||
{
|
{
|
||||||
nsITableLayout* tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
if (!tableLayout)
|
if (!tableFrame)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nsCOMPtr<nsIDOMElement> domElement;
|
return tableFrame->GetEffectiveRowSpanAt(aRowIdx, aColIdx);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -765,20 +710,12 @@ HTMLTableAccessible::IsRowSelected(uint32_t aRowIdx)
|
||||||
bool
|
bool
|
||||||
HTMLTableAccessible::IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx)
|
HTMLTableAccessible::IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx)
|
||||||
{
|
{
|
||||||
nsITableLayout *tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
if (!tableLayout)
|
if (!tableFrame)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
nsCOMPtr<nsIDOMElement> domElement;
|
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(aRowIdx, aColIdx);
|
||||||
int32_t startRowIndex = 0, startColIndex = 0,
|
return cellFrame ? cellFrame->IsSelected() : false;
|
||||||
rowSpan, colSpan, actualRowSpan, actualColSpan;
|
|
||||||
bool isSelected = false;
|
|
||||||
|
|
||||||
tableLayout->GetCellDataAt(aRowIdx, aColIdx, *getter_AddRefs(domElement),
|
|
||||||
startRowIndex, startColIndex, rowSpan, colSpan,
|
|
||||||
actualRowSpan, actualColSpan, isSelected);
|
|
||||||
|
|
||||||
return isSelected;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -828,40 +765,26 @@ HTMLTableAccessible::AddRowOrColumnToSelection(int32_t aIndex, uint32_t aTarget)
|
||||||
{
|
{
|
||||||
bool doSelectRow = (aTarget == nsISelectionPrivate::TABLESELECTION_ROW);
|
bool doSelectRow = (aTarget == nsISelectionPrivate::TABLESELECTION_ROW);
|
||||||
|
|
||||||
nsITableLayout *tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
NS_ENSURE_STATE(tableLayout);
|
if (!tableFrame)
|
||||||
|
return NS_OK;
|
||||||
|
|
||||||
nsCOMPtr<nsIDOMElement> cellElm;
|
uint32_t count = 0;
|
||||||
int32_t startRowIdx, startColIdx, rowSpan, colSpan,
|
|
||||||
actualRowSpan, actualColSpan;
|
|
||||||
bool isSelected = false;
|
|
||||||
|
|
||||||
nsresult rv = NS_OK;
|
|
||||||
int32_t count = 0;
|
|
||||||
if (doSelectRow)
|
if (doSelectRow)
|
||||||
rv = GetColumnCount(&count);
|
count = ColCount();
|
||||||
else
|
else
|
||||||
rv = GetRowCount(&count);
|
count = RowCount();
|
||||||
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
nsIPresShell* presShell(mDoc->PresShell());
|
nsIPresShell* presShell(mDoc->PresShell());
|
||||||
nsRefPtr<nsFrameSelection> tableSelection =
|
nsRefPtr<nsFrameSelection> tableSelection =
|
||||||
const_cast<nsFrameSelection*>(presShell->ConstFrameSelection());
|
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 rowIdx = doSelectRow ? aIndex : idx;
|
||||||
int32_t colIdx = doSelectRow ? idx : aIndex;
|
int32_t colIdx = doSelectRow ? idx : aIndex;
|
||||||
rv = tableLayout->GetCellDataAt(rowIdx, colIdx,
|
nsTableCellFrame* cellFrame = tableFrame->GetCellFrameAt(rowIdx, colIdx);
|
||||||
*getter_AddRefs(cellElm),
|
if (cellFrame && !cellFrame->IsSelected()) {
|
||||||
startRowIdx, startColIdx,
|
nsresult rv = tableSelection->SelectCellElement(cellFrame->GetContent());
|
||||||
rowSpan, colSpan,
|
|
||||||
actualRowSpan, actualColSpan,
|
|
||||||
isSelected);
|
|
||||||
|
|
||||||
if (NS_SUCCEEDED(rv) && !isSelected) {
|
|
||||||
nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElm));
|
|
||||||
rv = tableSelection->SelectCellElement(cellContent);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -874,17 +797,16 @@ HTMLTableAccessible::RemoveRowsOrColumnsFromSelection(int32_t aIndex,
|
||||||
uint32_t aTarget,
|
uint32_t aTarget,
|
||||||
bool aIsOuter)
|
bool aIsOuter)
|
||||||
{
|
{
|
||||||
nsITableLayout *tableLayout = GetTableLayout();
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
NS_ENSURE_STATE(tableLayout);
|
if (!tableFrame)
|
||||||
|
return NS_OK;
|
||||||
|
|
||||||
nsIPresShell* presShell(mDoc->PresShell());
|
nsIPresShell* presShell(mDoc->PresShell());
|
||||||
nsRefPtr<nsFrameSelection> tableSelection =
|
nsRefPtr<nsFrameSelection> tableSelection =
|
||||||
const_cast<nsFrameSelection*>(presShell->ConstFrameSelection());
|
const_cast<nsFrameSelection*>(presShell->ConstFrameSelection());
|
||||||
|
|
||||||
bool doUnselectRow = (aTarget == nsISelectionPrivate::TABLESELECTION_ROW);
|
bool doUnselectRow = (aTarget == nsISelectionPrivate::TABLESELECTION_ROW);
|
||||||
int32_t count = 0;
|
uint32_t count = doUnselectRow ? ColCount() : RowCount();
|
||||||
nsresult rv = doUnselectRow ? GetColumnCount(&count) : GetRowCount(&count);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
int32_t startRowIdx = doUnselectRow ? aIndex : 0;
|
int32_t startRowIdx = doUnselectRow ? aIndex : 0;
|
||||||
int32_t endRowIdx = doUnselectRow ? aIndex : count - 1;
|
int32_t endRowIdx = doUnselectRow ? aIndex : count - 1;
|
||||||
|
@ -901,37 +823,6 @@ HTMLTableAccessible::RemoveRowsOrColumnsFromSelection(int32_t aIndex,
|
||||||
endRowIdx, endColIdx);
|
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
|
void
|
||||||
HTMLTableAccessible::Description(nsString& aDescription)
|
HTMLTableAccessible::Description(nsString& aDescription)
|
||||||
{
|
{
|
||||||
|
@ -1138,16 +1029,14 @@ HTMLTableAccessible::IsProbablyLayoutTable()
|
||||||
// Now we know there are 2-4 columns and 2 or more rows
|
// Now we know there are 2-4 columns and 2 or more rows
|
||||||
// Check to see if there are visible borders on the cells
|
// 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?
|
// XXX currently, we just check the first cell -- do we really need to do more?
|
||||||
nsCOMPtr<nsIDOMElement> cellElement;
|
nsTableOuterFrame* tableFrame = do_QueryFrame(mContent->GetPrimaryFrame());
|
||||||
nsresult rv = GetCellAt(0, 0, *getter_AddRefs(cellElement));
|
if (!tableFrame)
|
||||||
NS_ENSURE_SUCCESS(rv, false);
|
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;
|
nsMargin border;
|
||||||
cellFrame->GetBorder(border);
|
cellFrame->GetBorder(border);
|
||||||
if (border.top && border.bottom && border.left && border.right) {
|
if (border.top && border.bottom && border.left && border.right) {
|
||||||
|
|
|
@ -166,19 +166,6 @@ public:
|
||||||
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
|
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
|
||||||
virtual Relation RelationByType(uint32_t aRelationType);
|
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:
|
protected:
|
||||||
// Accessible
|
// Accessible
|
||||||
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
|
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
|
||||||
|
|
|
@ -39,6 +39,7 @@ LOCAL_INCLUDES = \
|
||||||
-I$(srcdir)/../../../content/base/src \
|
-I$(srcdir)/../../../content/base/src \
|
||||||
-I$(srcdir)/../../../content/html/content/src \
|
-I$(srcdir)/../../../content/html/content/src \
|
||||||
-I$(srcdir)/../../../layout/generic \
|
-I$(srcdir)/../../../layout/generic \
|
||||||
|
-I$(srcdir)/../../../layout/tables \
|
||||||
-I$(srcdir)/../../../layout/xul/base/src \
|
-I$(srcdir)/../../../layout/xul/base/src \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ this.EXPORTED_SYMBOLS = ['AccessFu'];
|
||||||
Cu.import('resource://gre/modules/Services.jsm');
|
Cu.import('resource://gre/modules/Services.jsm');
|
||||||
|
|
||||||
Cu.import('resource://gre/modules/accessibility/Utils.jsm');
|
Cu.import('resource://gre/modules/accessibility/Utils.jsm');
|
||||||
Cu.import('resource://gre/modules/accessibility/TouchAdapter.jsm');
|
|
||||||
|
|
||||||
const ACCESSFU_DISABLE = 0;
|
const ACCESSFU_DISABLE = 0;
|
||||||
const ACCESSFU_ENABLE = 1;
|
const ACCESSFU_ENABLE = 1;
|
||||||
|
@ -58,6 +57,8 @@ this.AccessFu = {
|
||||||
this._activatePref = ACCESSFU_DISABLE;
|
this._activatePref = ACCESSFU_DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Input.quickNavMode.updateModes(this.prefsBranch);
|
||||||
|
|
||||||
this._enableOrDisable();
|
this._enableOrDisable();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -76,9 +77,6 @@ this.AccessFu = {
|
||||||
|
|
||||||
Logger.info('enable');
|
Logger.info('enable');
|
||||||
|
|
||||||
this.touchAdapter = (Utils.MozBuildApp == 'mobile/android') ?
|
|
||||||
AndroidTouchAdapter : TouchAdapter;
|
|
||||||
|
|
||||||
for each (let mm in Utils.getAllMessageManagers(this.chromeWin))
|
for each (let mm in Utils.getAllMessageManagers(this.chromeWin))
|
||||||
this._loadFrameScript(mm);
|
this._loadFrameScript(mm);
|
||||||
|
|
||||||
|
@ -91,7 +89,7 @@ this.AccessFu = {
|
||||||
|
|
||||||
Input.attach(this.chromeWin);
|
Input.attach(this.chromeWin);
|
||||||
Output.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, 'remote-browser-frame-shown', false);
|
||||||
Services.obs.addObserver(this, 'Accessibility:NextObject', false);
|
Services.obs.addObserver(this, 'Accessibility:NextObject', false);
|
||||||
|
@ -117,7 +115,7 @@ this.AccessFu = {
|
||||||
mm.sendAsyncMessage('AccessFu:Stop');
|
mm.sendAsyncMessage('AccessFu:Stop');
|
||||||
|
|
||||||
Input.detach();
|
Input.detach();
|
||||||
this.touchAdapter.detach(this.chromeWin);
|
TouchAdapter.detach(this.chromeWin);
|
||||||
|
|
||||||
this.chromeWin.removeEventListener('TabOpen', this);
|
this.chromeWin.removeEventListener('TabOpen', this);
|
||||||
this.chromeWin.removeEventListener('TabSelect', this);
|
this.chromeWin.removeEventListener('TabSelect', this);
|
||||||
|
@ -205,6 +203,8 @@ this.AccessFu = {
|
||||||
if (aData == 'activate') {
|
if (aData == 'activate') {
|
||||||
this._activatePref = this.prefsBranch.getIntPref('activate');
|
this._activatePref = this.prefsBranch.getIntPref('activate');
|
||||||
this._enableOrDisable();
|
this._enableOrDisable();
|
||||||
|
} else if (aData == 'quicknav_modes') {
|
||||||
|
Input.quickNavMode.updateModes(this.prefsBranch);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'remote-browser-frame-shown':
|
case 'remote-browser-frame-shown':
|
||||||
|
@ -389,7 +389,7 @@ var Input = {
|
||||||
this._handleKeypress(aEvent);
|
this._handleKeypress(aEvent);
|
||||||
break;
|
break;
|
||||||
case 'mozAccessFuGesture':
|
case 'mozAccessFuGesture':
|
||||||
this._handleGesture(aEvent);
|
this._handleGesture(aEvent.detail);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} catch (x) {
|
} catch (x) {
|
||||||
|
@ -397,44 +397,56 @@ var Input = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_handleGesture: function _handleGesture(aEvent) {
|
_handleGesture: function _handleGesture(aGesture) {
|
||||||
let detail = aEvent.detail;
|
let gestureName = aGesture.type + aGesture.touches.length;
|
||||||
Logger.info('Gesture', detail.type,
|
Logger.info('Gesture', aGesture.type,
|
||||||
'(fingers: ' + detail.touches.length + ')');
|
'(fingers: ' + aGesture.touches.length + ')');
|
||||||
|
|
||||||
if (detail.touches.length == 1) {
|
switch (gestureName) {
|
||||||
switch (detail.type) {
|
case 'dwell1':
|
||||||
case 'swiperight':
|
case 'explore1':
|
||||||
this.moveCursor('moveNext', 'Simple', 'gestures');
|
this.moveCursor('moveToPoint', 'Simple', 'gesture',
|
||||||
break;
|
aGesture.x, aGesture.y);
|
||||||
case 'swipeleft':
|
break;
|
||||||
this.moveCursor('movePrevious', 'Simple', 'gesture');
|
case 'doubletap1':
|
||||||
break;
|
this.activateCurrent();
|
||||||
case 'doubletap':
|
break;
|
||||||
this.activateCurrent();
|
case 'swiperight1':
|
||||||
break;
|
this.moveCursor('moveNext', 'Simple', 'gestures');
|
||||||
case 'explore':
|
break;
|
||||||
this.moveCursor('moveToPoint', 'Simple', 'gesture',
|
case 'swipeleft1':
|
||||||
detail.x, detail.y);
|
this.moveCursor('movePrevious', 'Simple', 'gesture');
|
||||||
break;
|
break;
|
||||||
}
|
case 'swiperight2':
|
||||||
}
|
this.scroll(-1, true);
|
||||||
|
break;
|
||||||
if (detail.touches.length == 3) {
|
case 'swipedown2':
|
||||||
switch (detail.type) {
|
this.scroll(-1);
|
||||||
case 'swiperight':
|
break;
|
||||||
this.scroll(-1, true);
|
case 'swipeleft2':
|
||||||
break;
|
this.scroll(1, true);
|
||||||
case 'swipedown':
|
break;
|
||||||
this.scroll(-1);
|
case 'swipeup2':
|
||||||
break;
|
this.scroll(1);
|
||||||
case 'swipeleft':
|
break;
|
||||||
this.scroll(1, true);
|
case 'explore2':
|
||||||
break;
|
Utils.getCurrentBrowser(this.chromeWin).contentWindow.scrollBy(
|
||||||
case 'swipeup':
|
-aGesture.deltaX, -aGesture.deltaY);
|
||||||
this.scroll(1);
|
break;
|
||||||
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: ['moveNext', 'Checkbox'],
|
||||||
X: ['movePrevious', '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 Cu = Components.utils;
|
||||||
const Cr = Components.results;
|
const Cr = Components.results;
|
||||||
|
|
||||||
this.EXPORTED_SYMBOLS = ['TouchAdapter', 'AndroidTouchAdapter'];
|
this.EXPORTED_SYMBOLS = ['TouchAdapter'];
|
||||||
|
|
||||||
Cu.import('resource://gre/modules/accessibility/Utils.jsm');
|
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
|
// maximum distance the mouse could move during a tap in inches
|
||||||
TAP_MAX_RADIUS: 0.2,
|
TAP_MAX_RADIUS: 0.2,
|
||||||
|
|
||||||
|
// The virtual touch ID generated by an Android hover event.
|
||||||
|
HOVER_ID: 'hover',
|
||||||
|
|
||||||
attach: function TouchAdapter_attach(aWindow) {
|
attach: function TouchAdapter_attach(aWindow) {
|
||||||
if (this.chromeWin)
|
if (this.chromeWin)
|
||||||
return;
|
return;
|
||||||
|
@ -53,14 +56,26 @@ this.TouchAdapter = {
|
||||||
this._dpi = this.chromeWin.QueryInterface(Ci.nsIInterfaceRequestor).
|
this._dpi = this.chromeWin.QueryInterface(Ci.nsIInterfaceRequestor).
|
||||||
getInterface(Ci.nsIDOMWindowUtils).displayDPI;
|
getInterface(Ci.nsIDOMWindowUtils).displayDPI;
|
||||||
|
|
||||||
this.glass = this.chromeWin.document.
|
let target = this.chromeWin;
|
||||||
createElementNS('http://www.w3.org/1999/xhtml', 'div');
|
|
||||||
this.glass.id = 'accessfu-glass';
|
|
||||||
this.chromeWin.document.documentElement.appendChild(this.glass);
|
|
||||||
|
|
||||||
this.glass.addEventListener('touchend', this, true, true);
|
if (Utils.MozBuildApp == 'b2g') {
|
||||||
this.glass.addEventListener('touchmove', this, true, true);
|
this.glass = this.chromeWin.document.
|
||||||
this.glass.addEventListener('touchstart', this, true, true);
|
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')
|
if (Utils.OS != 'Android')
|
||||||
Mouse2Touch.attach(aWindow);
|
Mouse2Touch.attach(aWindow);
|
||||||
|
@ -72,10 +87,23 @@ this.TouchAdapter = {
|
||||||
|
|
||||||
Logger.info('TouchAdapter.detach');
|
Logger.info('TouchAdapter.detach');
|
||||||
|
|
||||||
this.glass.removeEventListener('touchend', this, true, true);
|
let target = this.chromeWin;
|
||||||
this.glass.removeEventListener('touchmove', this, true, true);
|
|
||||||
this.glass.removeEventListener('touchstart', this, true, true);
|
if (Utils.MozBuildApp == 'b2g') {
|
||||||
this.glass.parentNode.removeChild(this.glass);
|
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')
|
if (Utils.OS != 'Android')
|
||||||
Mouse2Touch.detach(aWindow);
|
Mouse2Touch.detach(aWindow);
|
||||||
|
@ -84,16 +112,23 @@ this.TouchAdapter = {
|
||||||
},
|
},
|
||||||
|
|
||||||
handleEvent: function TouchAdapter_handleEvent(aEvent) {
|
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
|
// XXX: Until bug 77992 is resolved, on desktop we get microseconds
|
||||||
// instead of milliseconds.
|
// instead of milliseconds.
|
||||||
let timeStamp = (Utils.OS == 'Android') ? aEvent.timeStamp : Date.now();
|
let timeStamp = (Utils.OS == 'Android') ? aEvent.timeStamp : Date.now();
|
||||||
switch (aEvent.type) {
|
switch (aEvent.type) {
|
||||||
|
case 'mouseenter':
|
||||||
case 'touchstart':
|
case 'touchstart':
|
||||||
for (var i = 0; i < touches.length; i++) {
|
for (var i = 0; i < changedTouches.length; i++) {
|
||||||
let touch = touches[i];
|
let touch = changedTouches[i];
|
||||||
let touchPoint = new TouchPoint(touch, timeStamp, this._dpi);
|
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._lastExploreTime = timeStamp + this.SWIPE_MAX_DURATION;
|
||||||
}
|
}
|
||||||
this._dwellTimeout = this.chromeWin.setTimeout(
|
this._dwellTimeout = this.chromeWin.setTimeout(
|
||||||
|
@ -101,27 +136,34 @@ this.TouchAdapter = {
|
||||||
this.compileAndEmit(timeStamp + this.DWELL_THRESHOLD);
|
this.compileAndEmit(timeStamp + this.DWELL_THRESHOLD);
|
||||||
}).bind(this), this.DWELL_THRESHOLD);
|
}).bind(this), this.DWELL_THRESHOLD);
|
||||||
break;
|
break;
|
||||||
|
case 'mousemove':
|
||||||
case 'touchmove':
|
case 'touchmove':
|
||||||
for (var i = 0; i < touches.length; i++) {
|
for (var i = 0; i < changedTouches.length; i++) {
|
||||||
let touch = touches[i];
|
let touch = changedTouches[i];
|
||||||
let touchPoint = this._touchPoints[touch.identifier];
|
let touchPoint = this._touchPoints[touch.identifier || this.HOVER_ID];
|
||||||
touchPoint.update(touch, timeStamp);
|
if (touchPoint)
|
||||||
|
touchPoint.update(touch, timeStamp);
|
||||||
}
|
}
|
||||||
if (timeStamp - this._lastExploreTime >= EXPLORE_THROTTLE) {
|
if (timeStamp - this._lastExploreTime >= EXPLORE_THROTTLE) {
|
||||||
this.compileAndEmit(timeStamp);
|
this.compileAndEmit(timeStamp);
|
||||||
this._lastExploreTime = timeStamp;
|
this._lastExploreTime = timeStamp;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'mouseleave':
|
||||||
case 'touchend':
|
case 'touchend':
|
||||||
for (var i = 0; i < touches.length; i++) {
|
for (var i = 0; i < changedTouches.length; i++) {
|
||||||
let touch = touches[i];
|
let touch = changedTouches[i];
|
||||||
let touchPoint = this._touchPoints[touch.identifier];
|
let touchPoint = this._touchPoints[touch.identifier || this.HOVER_ID];
|
||||||
touchPoint.update(touch, timeStamp);
|
if (touchPoint) {
|
||||||
touchPoint.finish();
|
touchPoint.update(touch, timeStamp);
|
||||||
|
touchPoint.finish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.compileAndEmit(timeStamp);
|
this.compileAndEmit(timeStamp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aEvent.preventDefault();
|
||||||
},
|
},
|
||||||
|
|
||||||
cleanupTouches: function cleanupTouches() {
|
cleanupTouches: function cleanupTouches() {
|
||||||
|
@ -170,12 +212,22 @@ this.TouchAdapter = {
|
||||||
if (timeDelta > this.MAX_CONSECUTIVE_GESTURE_DELAY) {
|
if (timeDelta > this.MAX_CONSECUTIVE_GESTURE_DELAY) {
|
||||||
delete this._prevGestures[idhash];
|
delete this._prevGestures[idhash];
|
||||||
} else {
|
} else {
|
||||||
if (details.type == 'tap' && prevGesture.type == 'tap')
|
let sequence = prevGesture.type + '-' + details.type;
|
||||||
details.type = 'doubletap';
|
switch (sequence) {
|
||||||
if (details.type == 'tap' && prevGesture.type == 'doubletap')
|
case 'tap-tap':
|
||||||
details.type = 'tripletap';
|
details.type = 'doubletap';
|
||||||
if (details.type == 'dwell' && prevGesture.type == 'tap')
|
break;
|
||||||
details.type = 'taphold';
|
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) {
|
emitGesture: function TouchAdapter_emitGesture(aDetails) {
|
||||||
let evt = this.chromeWin.document.createEvent('CustomEvent');
|
let emitDelay = 0;
|
||||||
evt.initCustomEvent('mozAccessFuGesture', true, true, aDetails);
|
|
||||||
this.chromeWin.dispatchEvent(evt);
|
// 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) {
|
compileAndEmit: function TouchAdapter_compileAndEmit(aTime) {
|
||||||
|
@ -364,41 +443,3 @@ var Mouse2Touch = {
|
||||||
aEvent.stopImmediatePropagation();
|
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;
|
static gAccessibles = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EXTERN_C GUID CDECL CLSID_Accessible =
|
|
||||||
{ 0x61044601, 0xa811, 0x4e2b, { 0xbb, 0xba, 0x17, 0xbf, 0xab, 0xd3, 0x29, 0xd7 } };
|
|
||||||
|
|
||||||
static const int32_t kIEnumVariantDisconnected = -1;
|
static const int32_t kIEnumVariantDisconnected = -1;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -70,7 +67,7 @@ static const int32_t kIEnumVariantDisconnected = -1;
|
||||||
|
|
||||||
ITypeInfo* AccessibleWrap::gTypeInfo = NULL;
|
ITypeInfo* AccessibleWrap::gTypeInfo = NULL;
|
||||||
|
|
||||||
NS_IMPL_ISUPPORTS_INHERITED0(AccessibleWrap, Accessible);
|
NS_IMPL_ISUPPORTS_INHERITED0(AccessibleWrap, Accessible)
|
||||||
|
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
// IUnknown interface methods - see iunknown.h for documentation
|
// 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())
|
else if (IID_IAccessible2 == iid && !Compatibility::IsIA2Off())
|
||||||
*ppv = static_cast<IAccessible2*>(this);
|
*ppv = static_cast<IAccessible2*>(this);
|
||||||
else if (IID_ISimpleDOMNode == iid) {
|
else if (IID_ISimpleDOMNode == iid) {
|
||||||
if (IsDefunct() || !HasOwnContent() && !IsDoc())
|
if (IsDefunct() || (!HasOwnContent() && !IsDoc()))
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
|
|
||||||
*ppv = new sdnAccessible(GetNode());
|
*ppv = new sdnAccessible(GetNode());
|
||||||
|
@ -145,7 +142,7 @@ AccessibleWrap::QueryService(REFGUID aGuidService, REFIID aIID,
|
||||||
// UIA IAccessibleEx
|
// UIA IAccessibleEx
|
||||||
if (aGuidService == IID_IAccessibleEx &&
|
if (aGuidService == IID_IAccessibleEx &&
|
||||||
Preferences::GetBool("accessibility.uia.enable")) {
|
Preferences::GetBool("accessibility.uia.enable")) {
|
||||||
IAccessibleEx* accEx = new uiaRawElmProvider(this);
|
uiaRawElmProvider* accEx = new uiaRawElmProvider(this);
|
||||||
HRESULT hr = accEx->QueryInterface(aIID, aInstancePtr);
|
HRESULT hr = accEx->QueryInterface(aIID, aInstancePtr);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
delete accEx;
|
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
|
// Return window system accessible object for root document and tab document
|
||||||
// accessibles.
|
// accessibles.
|
||||||
if (!doc->ParentDocument() ||
|
if (!doc->ParentDocument() ||
|
||||||
nsWinUtils::IsWindowEmulationStarted() &&
|
(nsWinUtils::IsWindowEmulationStarted() &&
|
||||||
nsCoreUtils::IsTabDocument(doc->DocumentNode())) {
|
nsCoreUtils::IsTabDocument(doc->DocumentNode()))) {
|
||||||
HWND hwnd = static_cast<HWND>(doc->GetNativeWindow());
|
HWND hwnd = static_cast<HWND>(doc->GetNativeWindow());
|
||||||
if (hwnd && SUCCEEDED(::AccessibleObjectFromWindow(hwnd, OBJID_WINDOW,
|
if (hwnd && SUCCEEDED(::AccessibleObjectFromWindow(hwnd, OBJID_WINDOW,
|
||||||
IID_IAccessible,
|
IID_IAccessible,
|
||||||
|
@ -585,7 +582,7 @@ AccessibleWrap::get_accFocus(
|
||||||
|
|
||||||
// This helper class implements IEnumVARIANT for a nsIArray containing nsIAccessible objects.
|
// This helper class implements IEnumVARIANT for a nsIArray containing nsIAccessible objects.
|
||||||
|
|
||||||
class AccessibleEnumerator : public IEnumVARIANT
|
class AccessibleEnumerator MOZ_FINAL : public IEnumVARIANT
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AccessibleEnumerator(nsIArray* aArray) : mArray(aArray), mCurIndex(0) { }
|
AccessibleEnumerator(nsIArray* aArray) : mArray(aArray), mCurIndex(0) { }
|
||||||
|
@ -1102,7 +1099,7 @@ AccessibleWrap::get_relation(long aRelationIndex,
|
||||||
if (IsDefunct())
|
if (IsDefunct())
|
||||||
return CO_E_OBJNOTCONNECTED;
|
return CO_E_OBJNOTCONNECTED;
|
||||||
|
|
||||||
uint32_t relIdx = 0;
|
long relIdx = 0;
|
||||||
for (uint32_t relType = nsIAccessibleRelation::RELATION_FIRST;
|
for (uint32_t relType = nsIAccessibleRelation::RELATION_FIRST;
|
||||||
relType <= nsIAccessibleRelation::RELATION_LAST; relType++) {
|
relType <= nsIAccessibleRelation::RELATION_LAST; relType++) {
|
||||||
Relation rel = RelationByType(relType);
|
Relation rel = RelationByType(relType);
|
||||||
|
@ -1569,8 +1566,7 @@ AccessibleWrap::FirePlatformEvent(AccEvent* aEvent)
|
||||||
eventType < nsIAccessibleEvent::EVENT_LAST_ENTRY,
|
eventType < nsIAccessibleEvent::EVENT_LAST_ENTRY,
|
||||||
NS_ERROR_FAILURE);
|
NS_ERROR_FAILURE);
|
||||||
|
|
||||||
uint32_t winLastEntry = gWinEventMap[nsIAccessibleEvent::EVENT_LAST_ENTRY];
|
NS_ASSERTION(gWinEventMap[nsIAccessibleEvent::EVENT_LAST_ENTRY] == kEVENT_LAST_ENTRY,
|
||||||
NS_ASSERTION(winLastEntry == kEVENT_LAST_ENTRY,
|
|
||||||
"MSAA event map skewed");
|
"MSAA event map skewed");
|
||||||
|
|
||||||
uint32_t winEvent = gWinEventMap[eventType];
|
uint32_t winEvent = gWinEventMap[eventType];
|
||||||
|
@ -1711,7 +1707,7 @@ AccessibleWrap::ConvertToIA2Attributes(nsIPersistentProperties *aAttributes,
|
||||||
if (NS_FAILED(propElem->GetKey(name)))
|
if (NS_FAILED(propElem->GetKey(name)))
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
uint32_t offset = 0;
|
int32_t offset = 0;
|
||||||
while ((offset = name.FindCharInSet(kCharsToEscape, offset)) != kNotFound) {
|
while ((offset = name.FindCharInSet(kCharsToEscape, offset)) != kNotFound) {
|
||||||
name.Insert('\\', offset);
|
name.Insert('\\', offset);
|
||||||
offset += 2;
|
offset += 2;
|
||||||
|
|
|
@ -259,7 +259,7 @@ DocAccessibleWrap::DoInitialUpdate()
|
||||||
|
|
||||||
a11y::RootAccessible* rootDocument = RootAccessible();
|
a11y::RootAccessible* rootDocument = RootAccessible();
|
||||||
|
|
||||||
mozilla::WindowsHandle nativeData = NULL;
|
mozilla::WindowsHandle nativeData = 0;
|
||||||
if (tabChild)
|
if (tabChild)
|
||||||
tabChild->SendGetWidgetNativeData(&nativeData);
|
tabChild->SendGetWidgetNativeData(&nativeData);
|
||||||
else
|
else
|
||||||
|
|
|
@ -18,8 +18,8 @@ namespace a11y {
|
||||||
class ChildrenEnumVariant MOZ_FINAL : public IEnumVARIANT
|
class ChildrenEnumVariant MOZ_FINAL : public IEnumVARIANT
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ChildrenEnumVariant(AccessibleWrap* aAnchor) : mAnchorAcc(aAnchor),
|
ChildrenEnumVariant(AccessibleWrap* aAnchor) : mRefCnt(0), mAnchorAcc(aAnchor),
|
||||||
mCurAcc(mAnchorAcc->GetChildAt(0)), mCurIndex(0), mRefCnt(0) { }
|
mCurAcc(mAnchorAcc->GetChildAt(0)), mCurIndex(0) { }
|
||||||
|
|
||||||
// IUnknown
|
// IUnknown
|
||||||
DECL_IUNKNOWN
|
DECL_IUNKNOWN
|
||||||
|
@ -43,8 +43,8 @@ private:
|
||||||
ChildrenEnumVariant& operator =(const ChildrenEnumVariant&) MOZ_DELETE;
|
ChildrenEnumVariant& operator =(const ChildrenEnumVariant&) MOZ_DELETE;
|
||||||
|
|
||||||
ChildrenEnumVariant(const ChildrenEnumVariant& aEnumVariant) :
|
ChildrenEnumVariant(const ChildrenEnumVariant& aEnumVariant) :
|
||||||
mAnchorAcc(aEnumVariant.mAnchorAcc), mCurAcc(aEnumVariant.mCurAcc),
|
mRefCnt(0), mAnchorAcc(aEnumVariant.mAnchorAcc), mCurAcc(aEnumVariant.mCurAcc),
|
||||||
mCurIndex(aEnumVariant.mCurIndex), mRefCnt(0) { }
|
mCurIndex(aEnumVariant.mCurIndex) { }
|
||||||
virtual ~ChildrenEnumVariant() { }
|
virtual ~ChildrenEnumVariant() { }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -15,5 +15,5 @@ NS_IMPL_ISUPPORTS_INHERITED0(ImageAccessibleWrap,
|
||||||
|
|
||||||
IMPL_IUNKNOWN_INHERITED1(ImageAccessibleWrap,
|
IMPL_IUNKNOWN_INHERITED1(ImageAccessibleWrap,
|
||||||
AccessibleWrap,
|
AccessibleWrap,
|
||||||
ia2AccessibleImage);
|
ia2AccessibleImage)
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ ia2AccessibleRelation::get_target(long aTargetIndex, IUnknown **aTarget)
|
||||||
{
|
{
|
||||||
A11Y_TRYBLOCK_BEGIN
|
A11Y_TRYBLOCK_BEGIN
|
||||||
|
|
||||||
if (aTargetIndex < 0 || aTargetIndex >= mTargets.Length() || !aTarget)
|
if (aTargetIndex < 0 || (uint32_t)aTargetIndex >= mTargets.Length() || !aTarget)
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
mTargets[aTargetIndex]->QueryNativeInterface(IID_IUnknown, (void**) aTarget);
|
mTargets[aTargetIndex]->QueryNativeInterface(IID_IUnknown, (void**) aTarget);
|
||||||
|
@ -179,11 +179,11 @@ ia2AccessibleRelation::get_targets(long aMaxTargets, IUnknown **aTargets,
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
*aNTargets = 0;
|
*aNTargets = 0;
|
||||||
uint32_t maxTargets = mTargets.Length();
|
long maxTargets = mTargets.Length();
|
||||||
if (maxTargets > aMaxTargets)
|
if (maxTargets > aMaxTargets)
|
||||||
maxTargets = aMaxTargets;
|
maxTargets = aMaxTargets;
|
||||||
|
|
||||||
for (uint32_t idx = 0; idx < maxTargets; idx++)
|
for (long idx = 0; idx < maxTargets; idx++)
|
||||||
get_target(idx, aTargets + idx);
|
get_target(idx, aTargets + idx);
|
||||||
|
|
||||||
*aNTargets = maxTargets;
|
*aNTargets = maxTargets;
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace a11y {
|
namespace a11y {
|
||||||
|
|
||||||
class sdnAccessible : public ISimpleDOMNode
|
class sdnAccessible MOZ_FINAL : public ISimpleDOMNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
sdnAccessible(nsINode* aNode) : mNode(aNode) { }
|
sdnAccessible(nsINode* aNode) : mNode(aNode) { }
|
||||||
|
|
|
@ -77,7 +77,7 @@ uiaRawElmProvider::GetRuntimeId(__RPC__deref_out_opt SAFEARRAY** aRuntimeIds)
|
||||||
if (!*aRuntimeIds)
|
if (!*aRuntimeIds)
|
||||||
return E_OUTOFMEMORY;
|
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]));
|
SafeArrayPutElement(*aRuntimeIds, &i, (void*)&(ids[i]));
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
@ -23,7 +23,7 @@ class uiaRawElmProvider MOZ_FINAL : public IAccessibleEx,
|
||||||
public IRawElementProviderSimple
|
public IRawElementProviderSimple
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
uiaRawElmProvider(AccessibleWrap* aAcc) : mAcc(aAcc), mRefCnt(0) { }
|
uiaRawElmProvider(AccessibleWrap* aAcc) : mRefCnt(0), mAcc(aAcc) { }
|
||||||
|
|
||||||
// IUnknown
|
// IUnknown
|
||||||
DECL_IUNKNOWN
|
DECL_IUNKNOWN
|
||||||
|
|
|
@ -21,7 +21,7 @@ XULSliderAccessible::
|
||||||
XULSliderAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
XULSliderAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
||||||
AccessibleWrap(aContent, aDoc)
|
AccessibleWrap(aContent, aDoc)
|
||||||
{
|
{
|
||||||
mFlags = mFlags | eHasNumericValue;
|
mStateFlags |= eHasNumericValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// nsISupports
|
// nsISupports
|
||||||
|
|
|
@ -685,7 +685,7 @@ XULTreeItemAccessibleBase::
|
||||||
mTree(aTree), mTreeView(aTreeView), mRow(aRow)
|
mTree(aTree), mTreeView(aTreeView), mRow(aRow)
|
||||||
{
|
{
|
||||||
mParent = aParent;
|
mParent = aParent;
|
||||||
mFlags |= eSharedNode;
|
mStateFlags |= eSharedNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -463,7 +463,7 @@ XULTreeGridCellAccessible::
|
||||||
mTreeView(aTreeView), mRow(aRow), mColumn(aColumn)
|
mTreeView(aTreeView), mRow(aRow), mColumn(aColumn)
|
||||||
{
|
{
|
||||||
mParent = aRowAcc;
|
mParent = aRowAcc;
|
||||||
mFlags |= eSharedNode;
|
mStateFlags |= eSharedNode;
|
||||||
|
|
||||||
NS_ASSERTION(mTreeView, "mTreeView is null");
|
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", { "abbr": "SS#" }, true);
|
||||||
testAttrs("th2", { "axis": "social" }, true);
|
testAttrs("th2", { "axis": "social" }, true);
|
||||||
|
|
||||||
|
// don't barf on an empty abbr element.
|
||||||
|
testAbsentAttrs("th3", { "abbr": "" }, true);
|
||||||
|
|
||||||
// application accessible
|
// application accessible
|
||||||
if (WIN) {
|
if (WIN) {
|
||||||
var gfxInfo = Components.classes["@mozilla.org/gfx/info;1"].
|
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">
|
title="Expand support for nsIAccessibleEvent::OBJECT_ATTRIBUTE_CHANGE">
|
||||||
Mozilla Bug 563862
|
Mozilla Bug 563862
|
||||||
</a>
|
</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>
|
<p id="display"></p>
|
||||||
<div id="content" style="display: none"></div>
|
<div id="content" style="display: none"></div>
|
||||||
<pre id="test">
|
<pre id="test">
|
||||||
|
@ -211,6 +219,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=558036
|
||||||
<tr>
|
<tr>
|
||||||
<th id="th1"><abbr title="Social Security Number">SS#</abbr></th>
|
<th id="th1"><abbr title="Social Security Number">SS#</abbr></th>
|
||||||
<th id="th2" abbr="SS#" axis="social">Social Security Number</th>
|
<th id="th2" abbr="SS#" axis="social">Social Security Number</th>
|
||||||
|
<th id="th3"><abbr></abbr></th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -234,16 +234,25 @@ pref("editor.singleLine.pasteNewlines", 2);
|
||||||
pref("ui.dragThresholdX", 25);
|
pref("ui.dragThresholdX", 25);
|
||||||
pref("ui.dragThresholdY", 25);
|
pref("ui.dragThresholdY", 25);
|
||||||
|
|
||||||
// Layers Acceleration
|
// Layers Acceleration. We can only have nice things on gonk, because
|
||||||
pref("layers.acceleration.disabled", false);
|
// they're not maintained anywhere else.
|
||||||
#ifndef XP_WIN
|
#ifndef MOZ_WIDGET_GONK
|
||||||
//TODO: turn this on for Windows in bug 808016
|
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);
|
pref("layers.offmainthreadcomposition.enabled", true);
|
||||||
#endif
|
pref("layers.acceleration.disabled", false);
|
||||||
pref("layers.offmainthreadcomposition.animate-opacity", true);
|
pref("layers.offmainthreadcomposition.animate-opacity", true);
|
||||||
pref("layers.offmainthreadcomposition.animate-transform", true);
|
pref("layers.offmainthreadcomposition.animate-transform", true);
|
||||||
|
pref("layers.offmainthreadcomposition.throttle-animations", true);
|
||||||
pref("layers.async-video.enabled", true);
|
pref("layers.async-video.enabled", true);
|
||||||
pref("layers.async-pan-zoom.enabled", true);
|
pref("layers.async-pan-zoom.enabled", true);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Web Notifications
|
// Web Notifications
|
||||||
pref("notification.feature.enabled", true);
|
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.
|
// We'll run out of PIDs on UNIX-y systems before we hit this limit.
|
||||||
pref("dom.ipc.processCount", 100000);
|
pref("dom.ipc.processCount", 100000);
|
||||||
|
|
||||||
pref("dom.ipc.tabs.disabled", false);
|
|
||||||
pref("dom.ipc.browser_frames.oop_by_default", false);
|
pref("dom.ipc.browser_frames.oop_by_default", false);
|
||||||
|
|
||||||
// Temporary permission hack for WebSMS
|
// Temporary permission hack for WebSMS
|
||||||
|
@ -395,6 +403,7 @@ pref("dom.mozAlarms.enabled", true);
|
||||||
// NetworkStats
|
// NetworkStats
|
||||||
#ifdef MOZ_B2G_RIL
|
#ifdef MOZ_B2G_RIL
|
||||||
pref("dom.mozNetworkStats.enabled", true);
|
pref("dom.mozNetworkStats.enabled", true);
|
||||||
|
pref("ril.lastKnownMcc", 724);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// WebSettings
|
// WebSettings
|
||||||
|
|
|
@ -168,10 +168,6 @@ int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
char exePath[MAXPATHLEN];
|
char exePath[MAXPATHLEN];
|
||||||
|
|
||||||
#if defined(MOZ_X11)
|
|
||||||
putenv("MOZ_USE_OMTC=1");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
nsresult rv = mozilla::BinaryPath::Get(argv[0], exePath);
|
nsresult rv = mozilla::BinaryPath::Get(argv[0], exePath);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
Output("Couldn't calculate the application directory.\n");
|
Output("Couldn't calculate the application directory.\n");
|
||||||
|
|
|
@ -70,7 +70,7 @@ if ("nsIAudioManager" in Ci) {
|
||||||
const nsIAudioManager = Ci.nsIAudioManager;
|
const nsIAudioManager = Ci.nsIAudioManager;
|
||||||
audioChannelSettings = [
|
audioChannelSettings = [
|
||||||
// settings name, max value, apply to stream types
|
// 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.notification', 15, [nsIAudioManager.STREAM_TYPE_RING, nsIAudioManager.STREAM_TYPE_NOTIFICATION]],
|
||||||
['audio.volume.alarm', 15, [nsIAudioManager.STREAM_TYPE_ALARM]],
|
['audio.volume.alarm', 15, [nsIAudioManager.STREAM_TYPE_ALARM]],
|
||||||
['audio.volume.telephony', 5, [nsIAudioManager.STREAM_TYPE_VOICE_CALL]],
|
['audio.volume.telephony', 5, [nsIAudioManager.STREAM_TYPE_VOICE_CALL]],
|
||||||
|
|
|
@ -107,6 +107,9 @@ var shell = {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// purge the queue.
|
||||||
|
this.CrashSubmit.pruneSavedDumps();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Check if we should automatically submit this crash.
|
// Check if we should automatically submit this crash.
|
||||||
if (Services.prefs.getBoolPref("app.reportCrashes")) {
|
if (Services.prefs.getBoolPref("app.reportCrashes")) {
|
||||||
|
@ -135,7 +138,7 @@ var shell = {
|
||||||
&& network.type == Ci.nsINetworkInterface.NETWORK_TYPE_WIFI) {
|
&& network.type == Ci.nsINetworkInterface.NETWORK_TYPE_WIFI) {
|
||||||
shell.CrashSubmit.submit(aCrashID);
|
shell.CrashSubmit.submit(aCrashID);
|
||||||
|
|
||||||
// purge the queue.
|
// submit the pending queue.
|
||||||
let pending = shell.CrashSubmit.pendingIDs();
|
let pending = shell.CrashSubmit.pendingIDs();
|
||||||
for (let crashid of pending) {
|
for (let crashid of pending) {
|
||||||
shell.CrashSubmit.submit(crashid);
|
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-application=b2g
|
||||||
ac_add_options --enable-b2g-camera
|
ac_add_options --enable-b2g-camera
|
||||||
|
ac_add_options --enable-updater
|
||||||
|
|
||||||
ac_add_options --target=arm-linux-androideabi
|
ac_add_options --target=arm-linux-androideabi
|
||||||
ac_add_options --with-gonk="$topsrcdir/gonk-toolchain"
|
ac_add_options --with-gonk="$topsrcdir/gonk-toolchain"
|
||||||
|
|
|
@ -6,8 +6,6 @@
|
||||||
"mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
|
"mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
|
||||||
"build_targets": [],
|
"build_targets": [],
|
||||||
"upload_files": [
|
"upload_files": [
|
||||||
"{objdir}/dist/b2g-update/*.mar",
|
|
||||||
"{objdir}/dist/b2g-*.tar.gz",
|
|
||||||
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
||||||
"{workdir}/sources.xml"
|
"{workdir}/sources.xml"
|
||||||
],
|
],
|
||||||
|
@ -24,6 +22,7 @@
|
||||||
"MOZILLA_OFFICIAL": "1",
|
"MOZILLA_OFFICIAL": "1",
|
||||||
"B2GUPDATER": "1"
|
"B2GUPDATER": "1"
|
||||||
},
|
},
|
||||||
|
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||||
"gaia": {
|
"gaia": {
|
||||||
"vcs": "hgtool",
|
"vcs": "hgtool",
|
||||||
"repo": "http://hg.mozilla.org/integration/gaia-nightly",
|
"repo": "http://hg.mozilla.org/integration/gaia-nightly",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"size": 868355892,
|
"size": 895408640,
|
||||||
"digest": "0ccae39ee8910947fe3cf51fa3a45e820d2ff11571f6ccec29d9b3e5ae7f7709c1ad657210fbfea98baadd032c3d6a58e00ddbb2e93acafd751089869a72fed6",
|
"digest": "fc5be04b9b8365cd65fa8e66f4686bf0da8e34abb16ee618dd069469c9d9c9c3495562ebfcd21a2beadb27d59d6c011781188b9038ffebfd3e85cdd264f0aac3",
|
||||||
"algorithm": "sha512",
|
"algorithm": "sha512",
|
||||||
"filename": "gonk.tar.xz"
|
"filename": "gonk.tar.xz"
|
||||||
},
|
},
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<remote fetch="git://github.com/mozilla/" name="mozilla"/>
|
<remote fetch="git://github.com/mozilla/" name="mozilla"/>
|
||||||
<remote fetch="git://codeaurora.org/" name="caf"/>
|
<remote fetch="git://codeaurora.org/" name="caf"/>
|
||||||
<remote fetch="git://android.git.linaro.org/" name="linaro"/>
|
<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"/>
|
<default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
|
||||||
|
|
||||||
<!-- Gonk specific things and forks -->
|
<!-- Gonk specific things and forks -->
|
||||||
|
@ -14,76 +15,76 @@
|
||||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||||
</project>
|
</project>
|
||||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
<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="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"/>
|
<project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
|
||||||
|
|
||||||
<!-- Stock Android things -->
|
<!-- 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/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/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: 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/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: 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/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/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/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.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 M8960AAAAANLYA100715A --><project name="platform/external/dbus" path="external/dbus" revision="c7517b6195dc6926728352113e6cc335da3f9c9e"/>
|
<!-- 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/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/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.117 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
|
<!-- 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.117 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
|
<!-- 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.117 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
|
<!-- 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.117 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
|
<!-- 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.117 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
|
<!-- 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 A8064AAAAANLYA1334 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
|
<!-- 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_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
|
<!-- 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.117 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
|
<!-- 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.117 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
|
<!-- 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.117 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
|
<!-- 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.117 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
|
<!-- 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/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/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 A8064AAAAANLYA1334 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
|
<!-- 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.117 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
|
<!-- 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 A8064AAAAANLYA1334 --><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 AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.117 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
|
<!-- 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/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/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"/>
|
<!-- 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"/>
|
<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/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/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 A8064AAAAANLYA1334 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
|
<!-- 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"/>
|
<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/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/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"/>
|
<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/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.117 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
|
<!-- 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 A8064AAAAANLYA1334 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
|
<!-- 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/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"/>
|
<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/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.117 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
|
<!-- 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.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"/>
|
||||||
<!-- Information: platform/external/hostap is tagged with M8960AAAAANLYA1047 --><project name="platform/external/hostap" path="external/hostap" revision="bf04b0faadbdeb4b7943f2e2c4c5aa59df872bb1"/>
|
<!-- 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/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.117 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
|
<!-- 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/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/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 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/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/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/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/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"/>
|
<!-- 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: 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"/>
|
<!-- 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-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"/>
|
<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"/>
|
<!-- 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"/>
|
<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/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/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/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"/>
|
<!-- 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_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_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"]],
|
"mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
|
||||||
"build_targets": ["boottarball", "systemtarball", "userdatatarball"],
|
"build_targets": ["boottarball", "systemtarball", "userdatatarball", "package-tests"],
|
||||||
"upload_files": [
|
"upload_files": [
|
||||||
"{workdir}/out/target/product/panda/*.tar.bz2",
|
"{workdir}/out/target/product/panda/*.tar.bz2",
|
||||||
"{objdir}/dist/b2g-update/*.mar",
|
"{workdir}/out/target/product/panda/tests/*.zip",
|
||||||
"{objdir}/dist/b2g-*.tar.gz",
|
|
||||||
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
||||||
"{srcdir}/b2g/config/panda/README",
|
"{srcdir}/b2g/config/panda/README",
|
||||||
"{workdir}/sources.xml"
|
"{workdir}/sources.xml"
|
||||||
],
|
],
|
||||||
|
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||||
"gaia": {
|
"gaia": {
|
||||||
"vcs": "hgtool",
|
"vcs": "hgtool",
|
||||||
"repo": "http://hg.mozilla.org/integration/gaia-central",
|
"repo": "http://hg.mozilla.org/integration/gaia-central",
|
||||||
|
|
|
@ -4,15 +4,15 @@
|
||||||
"mock_target": "mozilla-centos6-i386",
|
"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_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"]],
|
"mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
|
||||||
"build_targets": ["boottarball", "systemtarball", "userdatatarball"],
|
"build_targets": ["boottarball", "systemtarball", "userdatatarball", "package-tests"],
|
||||||
"upload_files": [
|
"upload_files": [
|
||||||
"{workdir}/out/target/product/panda/*.tar.bz2",
|
"{workdir}/out/target/product/panda/*.tar.bz2",
|
||||||
"{objdir}/dist/b2g-update/*.mar",
|
"{workdir}/out/target/product/panda/tests/*.zip",
|
||||||
"{objdir}/dist/b2g-*.tar.gz",
|
|
||||||
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
||||||
"{srcdir}/b2g/config/panda/README",
|
"{srcdir}/b2g/config/panda/README",
|
||||||
"{workdir}/sources.xml"
|
"{workdir}/sources.xml"
|
||||||
],
|
],
|
||||||
|
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||||
"gaia": {
|
"gaia": {
|
||||||
"vcs": "hgtool",
|
"vcs": "hgtool",
|
||||||
"repo": "http://hg.mozilla.org/integration/gaia-nightly",
|
"repo": "http://hg.mozilla.org/integration/gaia-nightly",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"size": 649725280,
|
"size": 676548372,
|
||||||
"digest": "9059a4ebdf8d1ead0e9975fb872d95b07bceba1f84453f47a32559f258351ee6f6ff459c2747130603de309586dfaf784e674fd7a558be354f276795d12c273f",
|
"digest": "e94c1ef674d2144ef19bf6b5faa0bc050f2f6e61d5a859c20f0d61a4665cd4587836f2c45dbc3a2b264f94b4da9db7f31d566d6ad21e9e43b90bc3f617508184",
|
||||||
"algorithm": "sha512",
|
"algorithm": "sha512",
|
||||||
"filename": "gonk.tar.xz"
|
"filename": "gonk.tar.xz"
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,67 +14,67 @@
|
||||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||||
</project>
|
</project>
|
||||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
<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="rilproxy" path="rilproxy" remote="b2g" revision="32106d4ea635ebe17a1610b643b398db639b8b97"/>
|
||||||
<project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
|
<project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
|
||||||
|
|
||||||
<!-- Stock Android things -->
|
<!-- 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"/>
|
<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: 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/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: 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/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/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/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"/>
|
<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/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/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/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.117 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
|
<!-- 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.117 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
|
<!-- 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.117 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
|
<!-- 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.117 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
|
<!-- 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 A8064AAAAANLYA1334 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
|
<!-- 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/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/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/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.117 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
|
<!-- 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.117 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
|
<!-- 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/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/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 android-4.2.1_r1 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
|
<!-- 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/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/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/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"/>
|
<!-- 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"/>
|
<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/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/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 A8064AAAAANLYA1334 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
|
<!-- 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"/>
|
<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/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/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/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/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.117 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
|
<!-- 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 android-4.2.1_r1 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
|
<!-- 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/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/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 A8064AAAAANLYA1334 --><project name="platform/external/webp" path="external/webp" revision="88fe2b83c4b9232cd08729556fd0485d6a6a92cd"/>
|
<!-- 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/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"/>
|
<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/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/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/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/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 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"/>
|
<!-- 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="Negatus" path="external/negatus" remote="mozilla" revision="5d5288e7bec67d0a6a29320308cccb1321062b58"/>
|
||||||
<project name="orangutan" path="external/orangutan" remote="b2g" revision="601280aed7d7f29f1a78496f6fa41bd79c16305c"/>
|
<project name="orangutan" path="external/orangutan" remote="b2g" revision="601280aed7d7f29f1a78496f6fa41bd79c16305c"/>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
|
@ -1,6 +1,6 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"clang_version": "r169139"
|
"clang_version": "r169730"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size": 47,
|
"size": 47,
|
||||||
|
@ -9,8 +9,8 @@
|
||||||
"filename": "setup.sh"
|
"filename": "setup.sh"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size": 56158651,
|
"size": 56115091,
|
||||||
"digest": "38d718f20a8fa9218e22ade312e724e6c9cdd7c6650e023cfdc21b5505fe7aa3743ae41c0abd717a1bbccec4c4271be2fa82d0e2f96c91e693d70e33b4dc00d6",
|
"digest": "d7188264f28d6f6a84fab9737520cad22fe3d575917a87fc110d0b9a2033617c35da83530ea20553f5c55a996459f750fa2d0c49288c1fb9671f6252a92cf4c9",
|
||||||
"algorithm": "sha512",
|
"algorithm": "sha512",
|
||||||
"filename": "clang.tar.bz2"
|
"filename": "clang.tar.bz2"
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
"build_targets": [],
|
"build_targets": [],
|
||||||
"upload_files": [
|
"upload_files": [
|
||||||
"{objdir}/dist/b2g-update/*.mar",
|
"{objdir}/dist/b2g-update/*.mar",
|
||||||
"{objdir}/dist/b2g-*.tar.gz",
|
|
||||||
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
|
||||||
"{workdir}/sources.xml"
|
"{workdir}/sources.xml"
|
||||||
],
|
],
|
||||||
|
@ -24,6 +23,7 @@
|
||||||
"MOZILLA_OFFICIAL": "1",
|
"MOZILLA_OFFICIAL": "1",
|
||||||
"B2GUPDATER": "1"
|
"B2GUPDATER": "1"
|
||||||
},
|
},
|
||||||
|
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
|
||||||
"gaia": {
|
"gaia": {
|
||||||
"vcs": "hgtool",
|
"vcs": "hgtool",
|
||||||
"repo": "http://hg.mozilla.org/integration/gaia-nightly",
|
"repo": "http://hg.mozilla.org/integration/gaia-nightly",
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"size": 805101852,
|
"size": 832341968,
|
||||||
"digest": "553e88831f0760ef8de039a037c91499ff9334691f0532835c73a44352750a4911752cf0d5346f5e023f64b2351ed7f49a2a833c27538ddde59ad505f50ab063",
|
"digest": "e2d099677f5f930db0b2c03eaf3812a53f02be0773bdb3bad89b1c387041e920c17b90f041bf70d9c2ab715dd4556503534483d4ebc28fb035f41cd5ebba6a52",
|
||||||
"algorithm": "sha512",
|
"algorithm": "sha512",
|
||||||
"filename": "gonk.tar.xz"
|
"filename": "gonk.tar.xz"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size": 8859648,
|
"size": 8622080,
|
||||||
"digest": "05d4a99e0f36cd91d1b10a2b558979ea776e9a7e03b8a921af3b0bfc62e2d96cf4faa20586c39885b6f8b25089fe07726794620a3b18c4826a2f71e29d90a8ef",
|
"digest": "7a2bbf0c76f7b7d5e4b89f758f69b5d8bcf08ec579374877de8939ad69883ab8cd842f04fdaa03a4ef9cdf8170f242e0381dd437e969d5212ead6cdd6f79ab50",
|
||||||
"algorithm": "sha512",
|
"algorithm": "sha512",
|
||||||
"filename": "boot.img"
|
"filename": "boot.img"
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<remote fetch="git://github.com/mozilla/" name="mozilla"/>
|
<remote fetch="git://github.com/mozilla/" name="mozilla"/>
|
||||||
<remote fetch="git://codeaurora.org/" name="caf"/>
|
<remote fetch="git://codeaurora.org/" name="caf"/>
|
||||||
<remote fetch="git://android.git.linaro.org/" name="linaro"/>
|
<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"/>
|
<default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
|
||||||
|
|
||||||
<!-- Gonk specific things and forks -->
|
<!-- Gonk specific things and forks -->
|
||||||
|
@ -14,76 +15,76 @@
|
||||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||||
</project>
|
</project>
|
||||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
<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="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"/>
|
<project name="moztt" path="external/moztt" remote="b2g" revision="6ee1f8987ef36d688f97064c003ad57849dfadf2"/>
|
||||||
|
|
||||||
<!-- Stock Android things -->
|
<!-- 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/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/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: 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/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: 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/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/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/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.111 --><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 M8960AAAAANLYA100715A --><project name="platform/external/dbus" path="external/dbus" revision="c7517b6195dc6926728352113e6cc335da3f9c9e"/>
|
<!-- 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/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/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.111 --><project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="d5f550bb2f556c5d287f7c8d2b77223654bcec37"/>
|
<!-- 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.111 --><project name="platform/external/expat" path="external/expat" revision="6df134250feab71edb5915ecaa6268210bca76c5"/>
|
<!-- 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.111 --><project name="platform/external/fdlibm" path="external/fdlibm" revision="988ffeb12a6e044ae3504838ef1fee3fe0716934"/>
|
<!-- 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.111 --><project name="platform/external/flac" path="external/flac" revision="5893fbe890f5dab8e4146d2baa4bd2691c0739e0"/>
|
<!-- 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.111 --><project name="platform/external/freetype" path="external/freetype" revision="aeb407daf3711a10a27f3bc2223c5eb05158076e"/>
|
<!-- 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_2.2.04.01.02.14.080 --><project name="platform/external/giflib" path="external/giflib" revision="b2597268aef084202a8c349d1cc072c03c6e22eb"/>
|
<!-- 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_r1 --><project name="platform/external/gtest" path="external/gtest" remote="linaro" revision="344e5f3db17615cc853073a02968a603efd39109"/>
|
<!-- 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.111 --><project name="platform/external/harfbuzz" path="external/harfbuzz" revision="116610d63a859521dacf00fb6818ee9ab2e666f6"/>
|
<!-- 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.111 --><project name="platform/external/icu4c" path="external/icu4c" revision="0fa67b93b831c6636ca18b152a1b1b14cc99b034"/>
|
<!-- 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.111 --><project name="platform/external/iptables" path="external/iptables" revision="3b2deb17f065c5664bb25e1a28489e5792eb63ff"/>
|
<!-- 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.111 --><project name="platform/external/jhead" path="external/jhead" revision="754078052c687f6721536009c816644c73e4f145"/>
|
<!-- 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/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/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_2.2.04.01.02.14.080 --><project name="platform/external/liblzf" path="external/liblzf" revision="6946aa575b0949d045722794850896099d937cbb"/>
|
<!-- 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.111 --><project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="3a912b065a31a72c63ad56ac224cfeaa933423b6"/>
|
<!-- 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_2.2.04.01.02.14.080 --><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 AU_LINUX_GECKO_ICS_STRAWBERRY.01.00.00.19.111 --><project name="platform/external/libphonenumber" path="external/libphonenumber" revision="8d22c9a05eda1935c6dc27d188158e6ee38dc016"/>
|
<!-- 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/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/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"/>
|
<!-- 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"/>
|
<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/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/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_2.2.04.01.02.14.080 --><project name="platform/external/safe-iop" path="external/safe-iop" revision="07073634e2e3aa4f518e36ed5dec3aabc549d5fb"/>
|
<!-- 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"/>
|
<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/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/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"/>
|
<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/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.111 --><project name="platform/external/strace" path="external/strace" revision="c9fd2e5ef7d002e12e7cf2512506c84a9414b0fd"/>
|
<!-- 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_2.2.04.01.02.14.080 --><project name="platform/external/tagsoup" path="external/tagsoup" revision="68c2ec9e0acdb3214b7fb91dbab8c9fab8736817"/>
|
<!-- 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/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"/>
|
<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/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.111 --><project name="platform/external/webrtc" path="external/webrtc" revision="137024dc8a2e9251a471e20518a9c3ae06f81f23"/>
|
<!-- 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.111 --><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"/>
|
||||||
<!-- Information: platform/external/hostap is tagged with M8960AAAAANLYA1047 --><project name="platform/external/hostap" path="external/hostap" revision="bf04b0faadbdeb4b7943f2e2c4c5aa59df872bb1"/>
|
<!-- 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/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.111 --><project name="platform/external/yaffs2" path="external/yaffs2" revision="0afa916204c664b3114429637b63af1321a0aeca"/>
|
<!-- 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/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/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 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/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/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/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/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"/>
|
<!-- 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 -->
|
<!-- Otoro/Unagi specific things -->
|
||||||
<!-- Information: device/qcom/common is tagged with M8960AAAAANLYA100715A --><project name="device/qcom/common" path="device/qcom/common" revision="b9cdab8e1e1a215a8c65b8d5816f666bec7be205"/>
|
<!-- 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"/>
|
<!-- 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-otoro" path="device/qcom/otoro" remote="b2g" revision="e3e99b264dd0230108aa78f2b653db4ce0e494fb"/>
|
||||||
<project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="c83d823b231b6ad8f48ba486375a0c951a4f42fb"/>
|
<project name="android-device-unagi" path="device/qcom/unagi" remote="b2g" revision="e74925a10e11a4f0bc56158c248bd20c521d3dd7"/>
|
||||||
<project name="codeaurora_kernel_msm" path="kernel" remote="b2g" revision="0a01247e4b0880f93424b27251cd3a1f6b19dbb2"/>
|
<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"/>
|
<!-- 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"/>
|
<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/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/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/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"/>
|
<!-- 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_SYS_MSG=1
|
||||||
MOZ_TIME_MANAGER=1
|
MOZ_TIME_MANAGER=1
|
||||||
|
|
||||||
|
MOZ_B2G_CERTDATA=1
|
||||||
MOZ_PAY=1
|
MOZ_PAY=1
|
||||||
MOZ_TOOLKIT_SEARCH=
|
MOZ_TOOLKIT_SEARCH=
|
||||||
MOZ_PLACES=
|
MOZ_PLACES=
|
||||||
|
|
|
@ -54,6 +54,9 @@
|
||||||
@BINPATH@/@DLL_PREFIX@xpcom@DLL_SUFFIX@
|
@BINPATH@/@DLL_PREFIX@xpcom@DLL_SUFFIX@
|
||||||
@BINPATH@/@DLL_PREFIX@nspr4@DLL_SUFFIX@
|
@BINPATH@/@DLL_PREFIX@nspr4@DLL_SUFFIX@
|
||||||
@BINPATH@/@DLL_PREFIX@mozalloc@DLL_SUFFIX@
|
@BINPATH@/@DLL_PREFIX@mozalloc@DLL_SUFFIX@
|
||||||
|
#ifdef MOZ_DMD
|
||||||
|
@BINPATH@/@DLL_PREFIX@dmd@DLL_SUFFIX@
|
||||||
|
#endif
|
||||||
#ifdef XP_MACOSX
|
#ifdef XP_MACOSX
|
||||||
@BINPATH@/XUL
|
@BINPATH@/XUL
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -146,8 +146,8 @@ libs:: $(srcdir)/profile/prefs.js
|
||||||
ifndef LIBXUL_SDK
|
ifndef LIBXUL_SDK
|
||||||
# channel-prefs.js is handled separate from other prefs due to bug 756325
|
# channel-prefs.js is handled separate from other prefs due to bug 756325
|
||||||
libs:: $(srcdir)/profile/channel-prefs.js
|
libs:: $(srcdir)/profile/channel-prefs.js
|
||||||
$(NSINSTALL) -D $(FINAL_TARGET)/defaults/pref
|
$(NSINSTALL) -D $(DIST)/bin/defaults/pref
|
||||||
$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(ACDEFINES) $^ > $(FINAL_TARGET)/defaults/pref/channel-prefs.js
|
$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(ACDEFINES) $^ > $(DIST)/bin/defaults/pref/channel-prefs.js
|
||||||
endif
|
endif
|
||||||
|
|
||||||
libs:: $(srcdir)/blocklist.xml
|
libs:: $(srcdir)/blocklist.xml
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
<emItem blockID="i238" id="/^pink@.*\.info$/">
|
<emItem blockID="i238" id="/^pink@.*\.info$/">
|
||||||
<versionRange minVersion="0" maxVersion="*" severity="3">
|
<versionRange minVersion="0" maxVersion="*" severity="3">
|
||||||
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
|
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
|
||||||
<versionRange minVersion="19.0a1" maxVersion="*" />
|
<versionRange minVersion="18.0" maxVersion="*" />
|
||||||
</targetApplication>
|
</targetApplication>
|
||||||
</versionRange>
|
</versionRange>
|
||||||
</emItem>
|
</emItem>
|
||||||
|
|
|
@ -862,8 +862,10 @@ pref("security.alternate_certificate_error_page", "certerror");
|
||||||
// Whether to start the private browsing mode at application startup
|
// Whether to start the private browsing mode at application startup
|
||||||
pref("browser.privatebrowsing.autostart", false);
|
pref("browser.privatebrowsing.autostart", false);
|
||||||
|
|
||||||
|
#ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||||
// Whether we should skip prompting before starting the private browsing mode
|
// Whether we should skip prompting before starting the private browsing mode
|
||||||
pref("browser.privatebrowsing.dont_prompt_on_enter", false);
|
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
|
// Don't try to alter this pref, it'll be reset the next time you use the
|
||||||
// bookmarking dialog
|
// 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-only-enum-visible", false);
|
||||||
pref("devtools.debugger.ui.variables-searchbox-visible", false);
|
pref("devtools.debugger.ui.variables-searchbox-visible", false);
|
||||||
|
|
||||||
|
// Enable the Profiler
|
||||||
|
pref("devtools.profiler.enabled", true);
|
||||||
|
|
||||||
// Enable the Tilt inspector
|
// Enable the Tilt inspector
|
||||||
pref("devtools.tilt.enabled", true);
|
pref("devtools.tilt.enabled", true);
|
||||||
pref("devtools.tilt.intro_transition", 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.)
|
// (This is intentionally on the high side; see bug 746055.)
|
||||||
pref("image.mem.max_decoded_image_kb", 256000);
|
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\"}");
|
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
|
// Comma-separated list of nsIURI::prePaths that are allowed to activate
|
||||||
// built-in social functionality.
|
// built-in social functionality.
|
||||||
pref("social.activation.whitelist", "https://www.facebook.com");
|
pref("social.activation.whitelist", "https://www.facebook.com");
|
||||||
|
|
||||||
pref("social.sidebar.open", true);
|
pref("social.sidebar.open", true);
|
||||||
pref("social.sidebar.unload_timeout_ms", 10000);
|
pref("social.sidebar.unload_timeout_ms", 10000);
|
||||||
pref("social.active", false);
|
|
||||||
pref("social.toast-notifications.enabled", true);
|
pref("social.toast-notifications.enabled", true);
|
||||||
|
|
||||||
pref("dom.identity.enabled", false);
|
pref("dom.identity.enabled", false);
|
||||||
|
|
|
@ -309,10 +309,8 @@
|
||||||
disabled="true"/>
|
disabled="true"/>
|
||||||
#endif
|
#endif
|
||||||
<menuitem id="appmenu_restoreLastSession"
|
<menuitem id="appmenu_restoreLastSession"
|
||||||
class="restoreLastSession"
|
|
||||||
label="&historyRestoreLastSession.label;"
|
label="&historyRestoreLastSession.label;"
|
||||||
oncommand="restoreLastSession();"
|
command="Browser:RestoreLastSession"/>
|
||||||
disabled="true"/>
|
|
||||||
<menu id="appmenu_recentlyClosedTabsMenu"
|
<menu id="appmenu_recentlyClosedTabsMenu"
|
||||||
class="recentlyClosedTabsMenu"
|
class="recentlyClosedTabsMenu"
|
||||||
label="&historyUndoMenu.label;"
|
label="&historyUndoMenu.label;"
|
||||||
|
|
|
@ -376,10 +376,8 @@
|
||||||
disabled="true"/>
|
disabled="true"/>
|
||||||
#endif
|
#endif
|
||||||
<menuitem id="historyRestoreLastSession"
|
<menuitem id="historyRestoreLastSession"
|
||||||
class="restoreLastSession"
|
|
||||||
label="&historyRestoreLastSession.label;"
|
label="&historyRestoreLastSession.label;"
|
||||||
oncommand="restoreLastSession();"
|
command="Browser:RestoreLastSession"/>
|
||||||
disabled="true"/>
|
|
||||||
<menu id="historyUndoMenu"
|
<menu id="historyUndoMenu"
|
||||||
class="recentlyClosedTabsMenu"
|
class="recentlyClosedTabsMenu"
|
||||||
label="&historyUndoMenu.label;"
|
label="&historyUndoMenu.label;"
|
||||||
|
@ -542,6 +540,7 @@
|
||||||
command="Social:FocusChat"
|
command="Social:FocusChat"
|
||||||
class="show-only-for-keyboard"/>
|
class="show-only-for-keyboard"/>
|
||||||
<menuseparator class="social-statusarea-separator"/>
|
<menuseparator class="social-statusarea-separator"/>
|
||||||
|
<menuseparator class="social-provider-menu" hidden="true"/>
|
||||||
<menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
|
<menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
|
||||||
<menuitem class="social-remove-menuitem" command="Social:Remove"/>
|
<menuitem class="social-remove-menuitem" command="Social:Remove"/>
|
||||||
</menupopup>
|
</menupopup>
|
||||||
|
|
|
@ -660,15 +660,6 @@ HistoryMenu.prototype = {
|
||||||
#endif
|
#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) {
|
_onPopupShowing: function HM__onPopupShowing(aEvent) {
|
||||||
PlacesMenu.prototype._onPopupShowing.apply(this, arguments);
|
PlacesMenu.prototype._onPopupShowing.apply(this, arguments);
|
||||||
|
|
||||||
|
@ -679,7 +670,6 @@ HistoryMenu.prototype = {
|
||||||
this.toggleRecentlyClosedTabs();
|
this.toggleRecentlyClosedTabs();
|
||||||
this.toggleRecentlyClosedWindows();
|
this.toggleRecentlyClosedWindows();
|
||||||
this.toggleTabsFromOtherComputers();
|
this.toggleTabsFromOtherComputers();
|
||||||
this.toggleRestoreLastSession();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onCommand: function HM__onCommand(aEvent) {
|
_onCommand: function HM__onCommand(aEvent) {
|
||||||
|
|
|
@ -251,6 +251,7 @@ var gPluginHandler = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_notificationDisplayedOnce: false,
|
||||||
handlePluginScripted: function PH_handlePluginScripted(aBrowser) {
|
handlePluginScripted: function PH_handlePluginScripted(aBrowser) {
|
||||||
let contentWindow = aBrowser.contentWindow;
|
let contentWindow = aBrowser.contentWindow;
|
||||||
if (!contentWindow)
|
if (!contentWindow)
|
||||||
|
@ -278,9 +279,10 @@ var gPluginHandler = {
|
||||||
});
|
});
|
||||||
|
|
||||||
let notification = PopupNotifications.getNotification("click-to-play-plugins", aBrowser);
|
let notification = PopupNotifications.getNotification("click-to-play-plugins", aBrowser);
|
||||||
if (notification && !haveVisibleCTPPlugin) {
|
if (notification && !haveVisibleCTPPlugin && !this._notificationDisplayedOnce) {
|
||||||
notification.dismissed = false;
|
notification.dismissed = false;
|
||||||
PopupNotifications._update(notification.anchorElement);
|
PopupNotifications._update(notification.anchorElement);
|
||||||
|
this._notificationDisplayedOnce = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
aBrowser._pluginScriptedState = PLUGIN_SCRIPTED_STATE_DONE;
|
aBrowser._pluginScriptedState = PLUGIN_SCRIPTED_STATE_DONE;
|
||||||
|
@ -643,8 +645,9 @@ var gPluginHandler = {
|
||||||
let notification = PopupNotifications.getNotification("click-to-play-plugins", aBrowser);
|
let notification = PopupNotifications.getNotification("click-to-play-plugins", aBrowser);
|
||||||
let dismissed = notification ? notification.dismissed : true;
|
let dismissed = notification ? notification.dismissed : true;
|
||||||
let options = { dismissed: dismissed, centerActions: centerActions };
|
let options = { dismissed: dismissed, centerActions: centerActions };
|
||||||
|
let icon = haveVulnerablePlugin ? "blocked-plugins-notification-icon" : "plugins-notification-icon"
|
||||||
PopupNotifications.show(aBrowser, "click-to-play-plugins",
|
PopupNotifications.show(aBrowser, "click-to-play-plugins",
|
||||||
messageString, "plugins-notification-icon",
|
messageString, icon,
|
||||||
mainAction, secondaryActions, options);
|
mainAction, secondaryActions, options);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -85,10 +85,11 @@
|
||||||
<command id="cmd_fullZoomReset" oncommand="FullZoom.reset()"/>
|
<command id="cmd_fullZoomReset" oncommand="FullZoom.reset()"/>
|
||||||
<command id="cmd_fullZoomToggle" oncommand="ZoomManager.toggleZoom();"/>
|
<command id="cmd_fullZoomToggle" oncommand="ZoomManager.toggleZoom();"/>
|
||||||
<command id="Browser:OpenLocation" oncommand="openLocation();"/>
|
<command id="Browser:OpenLocation" oncommand="openLocation();"/>
|
||||||
|
<command id="Browser:RestoreLastSession" oncommand="restoreLastSession();" disabled="true"/>
|
||||||
|
|
||||||
<command id="Tools:Search" oncommand="BrowserSearch.webSearch();"/>
|
<command id="Tools:Search" oncommand="BrowserSearch.webSearch();"/>
|
||||||
<command id="Tools:Downloads" oncommand="BrowserDownloadsUI();"/>
|
<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:DevToolbar" oncommand="DeveloperToolbar.toggle();" disabled="true" hidden="true"/>
|
||||||
<command id="Tools:DevToolbarFocus" oncommand="DeveloperToolbar.focusToggle();" disabled="true"/>
|
<command id="Tools:DevToolbarFocus" oncommand="DeveloperToolbar.focusToggle();" disabled="true"/>
|
||||||
<command id="Tools:ChromeDebugger" oncommand="DebuggerUI.toggleChromeDebugger();" disabled="true" hidden="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:ResponsiveUI" oncommand="ResponsiveUI.toggle();" disabled="true" hidden="true"/>
|
||||||
<command id="Tools:Addons" oncommand="BrowserOpenAddonsMgr();"/>
|
<command id="Tools:Addons" oncommand="BrowserOpenAddonsMgr();"/>
|
||||||
<command id="Tools:ErrorConsole" oncommand="toJavaScriptConsole()" disabled="true" hidden="true"/>
|
<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"
|
<command id="Tools:Sanitize"
|
||||||
oncommand="Cc['@mozilla.org/browser/browserglue;1'].getService(Ci.nsIBrowserGlue).sanitize(window);"/>
|
oncommand="Cc['@mozilla.org/browser/browserglue;1'].getService(Ci.nsIBrowserGlue).sanitize(window);"/>
|
||||||
<command id="Tools:PrivateBrowsing"
|
<command id="Tools:PrivateBrowsing"
|
||||||
|
|
|
@ -10,17 +10,17 @@ XPCOMUtils.defineLazyModuleGetter(this, "SharedFrame",
|
||||||
"resource:///modules/SharedFrame.jsm");
|
"resource:///modules/SharedFrame.jsm");
|
||||||
|
|
||||||
let SocialUI = {
|
let SocialUI = {
|
||||||
// Called on delayed startup to initialize UI
|
// Called on delayed startup to initialize the UI
|
||||||
init: function SocialUI_init() {
|
init: function SocialUI_init() {
|
||||||
Services.obs.addObserver(this, "social:pref-changed", false);
|
Services.obs.addObserver(this, "social:pref-changed", false);
|
||||||
Services.obs.addObserver(this, "social:ambient-notification-changed", false);
|
Services.obs.addObserver(this, "social:ambient-notification-changed", false);
|
||||||
Services.obs.addObserver(this, "social:profile-changed", false);
|
Services.obs.addObserver(this, "social:profile-changed", false);
|
||||||
Services.obs.addObserver(this, "social:recommend-info-changed", false);
|
Services.obs.addObserver(this, "social:recommend-info-changed", false);
|
||||||
Services.obs.addObserver(this, "social:frameworker-error", 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.sidebar.open", this, false);
|
||||||
Services.prefs.addObserver("social.toast-notifications.enabled", 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);
|
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:profile-changed");
|
||||||
Services.obs.removeObserver(this, "social:recommend-info-changed");
|
Services.obs.removeObserver(this, "social:recommend-info-changed");
|
||||||
Services.obs.removeObserver(this, "social:frameworker-error");
|
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.sidebar.open", this);
|
||||||
Services.prefs.removeObserver("social.toast-notifications.enabled", 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() {
|
showProfile: function SocialUI_showProfile() {
|
||||||
if (this.haveLoggedInUser())
|
if (Social.haveLoggedInUser())
|
||||||
openUILinkIn(Social.provider.profile.profileURL, "tab");
|
openUILinkIn(Social.provider.profile.profileURL, "tab");
|
||||||
else {
|
else {
|
||||||
// XXX Bug 789585 will implement an API for provider-specified login pages.
|
// 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) {
|
_updateActiveUI: function SocialUI_updateActiveUI() {
|
||||||
switch (topic) {
|
let broadcaster = document.getElementById("socialActiveBroadcaster");
|
||||||
case "social:pref-changed":
|
broadcaster.hidden = !Social.active;
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
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)
|
if (!Social.provider)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.updateToggleCommand();
|
let toggleCommand = document.getElementById("Social:Toggle");
|
||||||
|
|
||||||
// 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;
|
|
||||||
// We only need to update the command itself - all our menu items use it.
|
// 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(Social.provider.enabled ?
|
||||||
let label = gNavigatorBundle.getFormattedString(enabled ? "social.turnOff.label" : "social.turnOn.label",
|
"social.turnOff.label" :
|
||||||
|
"social.turnOn.label",
|
||||||
[Social.provider.name]);
|
[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("label", label);
|
||||||
toggleCommand.setAttribute("accesskey", accesskey);
|
toggleCommand.setAttribute("accesskey", accesskey);
|
||||||
toggleCommand.setAttribute("hidden", Social.active ? "false" : "true");
|
toggleCommand.setAttribute("hidden", Social.active ? "false" : "true");
|
||||||
},
|
},
|
||||||
|
|
||||||
updateActiveBroadcaster: function SocialUI_updateActiveBroadcaster() {
|
_updateMenuItems: function () {
|
||||||
let broadcaster = document.getElementById("socialActiveBroadcaster");
|
if (!Social.provider)
|
||||||
broadcaster.hidden = !Social.active;
|
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
|
// This handles "ActivateSocialFeature" events fired against content documents
|
||||||
// in this window.
|
// in this window.
|
||||||
_activationEventHandler: function SocialUI_activationHandler(e) {
|
_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;
|
let targetDoc = e.target;
|
||||||
|
|
||||||
// Event must be fired against the document
|
// Event must be fired against the document
|
||||||
|
@ -164,9 +196,9 @@ let SocialUI = {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Check that the associated document's origin is in our whitelist
|
// 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");
|
let whitelist = Services.prefs.getCharPref("social.activation.whitelist");
|
||||||
if (whitelist.split(",").indexOf(prePath) == -1)
|
if (whitelist.split(",").indexOf(providerOrigin) == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// If the last event was received < 1s ago, ignore this one
|
// If the last event was received < 1s ago, ignore this one
|
||||||
|
@ -175,34 +207,44 @@ let SocialUI = {
|
||||||
return;
|
return;
|
||||||
Social.lastEventReceived = now;
|
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
|
// 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
|
// Show a warning, allow undoing the activation
|
||||||
let description = document.getElementById("social-activation-message");
|
let description = document.getElementById("social-activation-message");
|
||||||
let brandShortName = document.getElementById("bundle_brand").getString("brandShortName");
|
let brandShortName = document.getElementById("bundle_brand").getString("brandShortName");
|
||||||
let message = gNavigatorBundle.getFormattedString("social.activated.description",
|
let message = gNavigatorBundle.getFormattedString("social.activated.description",
|
||||||
[Social.provider.name, brandShortName]);
|
[provider.name, brandShortName]);
|
||||||
description.value = message;
|
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 () {
|
setTimeout(function () {
|
||||||
SocialUI.notificationPanel.openPopup(SocialToolbar.button, "bottomcenter topright");
|
notificationPanel.openPopup(SocialToolbar.button, "bottomcenter topright");
|
||||||
}.bind(this), 0);
|
}, 0);
|
||||||
},
|
|
||||||
|
|
||||||
get notificationPanel() {
|
|
||||||
return document.getElementById("socialActivatedNotification")
|
|
||||||
},
|
},
|
||||||
|
|
||||||
undoActivation: function SocialUI_undoActivation() {
|
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();
|
this.notificationPanel.hidePopup();
|
||||||
},
|
},
|
||||||
|
|
||||||
haveLoggedInUser: function SocialUI_haveLoggedInUser() {
|
get notificationPanel() {
|
||||||
return !!(Social.provider && Social.provider.profile && Social.provider.profile.userName);
|
return document.getElementById("socialActivatedNotification");
|
||||||
},
|
},
|
||||||
|
|
||||||
closeSocialPanelForLinkTraversal: function (target, linkNode) {
|
closeSocialPanelForLinkTraversal: function (target, linkNode) {
|
||||||
|
@ -238,8 +280,9 @@ let SocialUI = {
|
||||||
|
|
||||||
let confirmationIndex = ps.confirmEx(null, dialogTitle, text, flags,
|
let confirmationIndex = ps.confirmEx(null, dialogTitle, text, flags,
|
||||||
okButtonText, null, null, null, {});
|
okButtonText, null, null, null, {});
|
||||||
if (confirmationIndex == 0)
|
if (confirmationIndex == 0) {
|
||||||
Social.active = false;
|
Social.deactivateFromOrigin(Social.provider.origin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +293,7 @@ let SocialChatBar = {
|
||||||
// Whether the chatbar is available for this window. Note that in full-screen
|
// Whether the chatbar is available for this window. Note that in full-screen
|
||||||
// mode chats are available, but not shown.
|
// mode chats are available, but not shown.
|
||||||
get isAvailable() {
|
get isAvailable() {
|
||||||
if (!SocialUI.haveLoggedInUser())
|
if (!Social.haveLoggedInUser())
|
||||||
return false;
|
return false;
|
||||||
let docElem = document.documentElement;
|
let docElem = document.documentElement;
|
||||||
let chromeless = docElem.getAttribute("chromehidden").indexOf("extrachrome") >= 0;
|
let chromeless = docElem.getAttribute("chromehidden").indexOf("extrachrome") >= 0;
|
||||||
|
@ -477,10 +520,19 @@ let SocialFlyout = {
|
||||||
let SocialShareButton = {
|
let SocialShareButton = {
|
||||||
// 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 SSB_init() {
|
init: function SSB_init() {
|
||||||
|
this.updateProvider();
|
||||||
|
},
|
||||||
|
|
||||||
|
// Called when the Social.provider changes
|
||||||
|
updateProvider: function () {
|
||||||
this.updateButtonHiddenState();
|
this.updateButtonHiddenState();
|
||||||
|
if (!Social.provider)
|
||||||
|
return;
|
||||||
this.updateProfileInfo();
|
this.updateProfileInfo();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Called when the provider's profile info changes (or when the provider
|
||||||
|
// changes, via updateProvider)
|
||||||
updateProfileInfo: function SSB_updateProfileInfo() {
|
updateProfileInfo: function SSB_updateProfileInfo() {
|
||||||
let profileRow = document.getElementById("unsharePopupHeader");
|
let profileRow = document.getElementById("unsharePopupHeader");
|
||||||
let profile = Social.provider.profile;
|
let profile = Social.provider.profile;
|
||||||
|
@ -493,9 +545,7 @@ let SocialShareButton = {
|
||||||
} else {
|
} else {
|
||||||
profileRow.hidden = true;
|
profileRow.hidden = true;
|
||||||
this.updateButtonHiddenState();
|
this.updateButtonHiddenState();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
this.updateShareState();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
get shareButton() {
|
get shareButton() {
|
||||||
|
@ -518,8 +568,9 @@ let SocialShareButton = {
|
||||||
let shareButton = this.shareButton;
|
let shareButton = this.shareButton;
|
||||||
if (shareButton)
|
if (shareButton)
|
||||||
shareButton.hidden = !Social.uiVisible || Social.provider.recommendInfo == null ||
|
shareButton.hidden = !Social.uiVisible || Social.provider.recommendInfo == null ||
|
||||||
!SocialUI.haveLoggedInUser() ||
|
!Social.haveLoggedInUser() ||
|
||||||
!this.canSharePage(gBrowser.currentURI);
|
!this.canSharePage(gBrowser.currentURI);
|
||||||
|
|
||||||
// also update the relevent command's disabled state so the keyboard
|
// also update the relevent command's disabled state so the keyboard
|
||||||
// shortcut only works when available.
|
// shortcut only works when available.
|
||||||
let cmd = document.getElementById("Social:SharePage");
|
let cmd = document.getElementById("Social:SharePage");
|
||||||
|
@ -577,8 +628,6 @@ let SocialShareButton = {
|
||||||
},
|
},
|
||||||
|
|
||||||
updateShareState: function SSB_updateShareState() {
|
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();
|
this.updateButtonHiddenState();
|
||||||
|
|
||||||
let shareButton = this.shareButton;
|
let shareButton = this.shareButton;
|
||||||
|
@ -626,31 +675,32 @@ var SocialMenu = {
|
||||||
|
|
||||||
let separator = document.getElementById("socialAmbientMenuSeparator");
|
let separator = document.getElementById("socialAmbientMenuSeparator");
|
||||||
separator.hidden = true;
|
separator.hidden = true;
|
||||||
|
if (!Social.uiVisible)
|
||||||
|
return;
|
||||||
|
|
||||||
let provider = Social.provider;
|
let provider = Social.provider;
|
||||||
if (provider && provider.enabled) {
|
let iconNames = Object.keys(provider.ambientNotificationIcons);
|
||||||
let iconNames = Object.keys(provider.ambientNotificationIcons);
|
for (let name of iconNames) {
|
||||||
for (let name of iconNames) {
|
let icon = provider.ambientNotificationIcons[name];
|
||||||
let icon = provider.ambientNotificationIcons[name];
|
if (!icon.label || !icon.menuURL)
|
||||||
if (!icon.label || !icon.menuURL)
|
continue;
|
||||||
continue;
|
separator.hidden = false;
|
||||||
separator.hidden = false;
|
let menuitem = document.createElement("menuitem");
|
||||||
let menuitem = document.createElement("menuitem");
|
menuitem.setAttribute("label", icon.label);
|
||||||
menuitem.setAttribute("label", icon.label);
|
menuitem.classList.add("ambient-menuitem");
|
||||||
menuitem.classList.add("ambient-menuitem");
|
menuitem.addEventListener("command", function() {
|
||||||
menuitem.addEventListener("command", function() {
|
openUILinkIn(icon.menuURL, "tab");
|
||||||
openUILinkIn(icon.menuURL, "tab");
|
}, false);
|
||||||
}, false);
|
submenu.insertBefore(menuitem, separator);
|
||||||
submenu.insertBefore(menuitem, separator);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// XXX Need to audit that this is being initialized correctly
|
||||||
var SocialToolbar = {
|
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() {
|
init: function SocialToolbar_init() {
|
||||||
this.button.setAttribute("image", Social.provider.iconURL);
|
|
||||||
|
|
||||||
let brandShortName = document.getElementById("bundle_brand").getString("brandShortName");
|
let brandShortName = document.getElementById("bundle_brand").getString("brandShortName");
|
||||||
let label = gNavigatorBundle.getFormattedString("social.remove.label",
|
let label = gNavigatorBundle.getFormattedString("social.remove.label",
|
||||||
[brandShortName]);
|
[brandShortName]);
|
||||||
|
@ -660,18 +710,29 @@ var SocialToolbar = {
|
||||||
removeCommand.setAttribute("label", label);
|
removeCommand.setAttribute("label", label);
|
||||||
removeCommand.setAttribute("accesskey", accesskey);
|
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.updateButton();
|
||||||
this.updateProfile();
|
this.updateProfile();
|
||||||
this._dynamicResizer = new DynamicResizeWatcher();
|
this.populateProviderMenus();
|
||||||
},
|
},
|
||||||
|
|
||||||
get button() {
|
get button() {
|
||||||
return document.getElementById("social-provider-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() {
|
updateButtonHiddenState: function SocialToolbar_updateButtonHiddenState() {
|
||||||
let tbi = document.getElementById("social-toolbar-item");
|
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 className of ["social-statusarea-separator", "social-statusarea-user"]) {
|
||||||
for (let element of document.getElementsByClassName(className))
|
for (let element of document.getElementsByClassName(className))
|
||||||
element.hidden = !socialEnabled;
|
element.hidden = !socialEnabled;
|
||||||
|
@ -679,7 +740,7 @@ var SocialToolbar = {
|
||||||
let toggleNotificationsCommand = document.getElementById("Social:ToggleNotifications");
|
let toggleNotificationsCommand = document.getElementById("Social:ToggleNotifications");
|
||||||
toggleNotificationsCommand.setAttribute("hidden", !socialEnabled);
|
toggleNotificationsCommand.setAttribute("hidden", !socialEnabled);
|
||||||
|
|
||||||
if (!SocialUI.haveLoggedInUser() || !socialEnabled) {
|
if (!Social.haveLoggedInUser() || !socialEnabled) {
|
||||||
let parent = document.getElementById("social-notification-panel");
|
let parent = document.getElementById("social-notification-panel");
|
||||||
while (parent.hasChildNodes()) {
|
while (parent.hasChildNodes()) {
|
||||||
let frame = parent.firstChild;
|
let frame = parent.firstChild;
|
||||||
|
@ -700,9 +761,8 @@ var SocialToolbar = {
|
||||||
let userPortrait = profile.portrait || "chrome://global/skin/icons/information-32.png";
|
let userPortrait = profile.portrait || "chrome://global/skin/icons/information-32.png";
|
||||||
|
|
||||||
let userDetailsBroadcaster = document.getElementById("socialBroadcaster_userDetails");
|
let userDetailsBroadcaster = document.getElementById("socialBroadcaster_userDetails");
|
||||||
let loggedInStatusValue = profile.userName ?
|
let loggedInStatusValue = profile.userName ||
|
||||||
profile.userName :
|
userDetailsBroadcaster.getAttribute("notLoggedInLabel");
|
||||||
userDetailsBroadcaster.getAttribute("notLoggedInLabel");;
|
|
||||||
|
|
||||||
// "image" and "label" are used by Mac's native menus that do not render the menuitem's children
|
// "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.
|
// 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);
|
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() {
|
updateButton: function SocialToolbar_updateButton() {
|
||||||
this.updateButtonHiddenState();
|
this.updateButtonHiddenState();
|
||||||
let provider = Social.provider;
|
let provider = Social.provider;
|
||||||
|
@ -728,8 +789,8 @@ var SocialToolbar = {
|
||||||
const CACHE_PREF_NAME = "social.cached.ambientNotificationIcons";
|
const CACHE_PREF_NAME = "social.cached.ambientNotificationIcons";
|
||||||
// provider.profile == undefined means no response yet from the provider
|
// provider.profile == undefined means no response yet from the provider
|
||||||
// to tell us whether the user is logged in or not.
|
// to tell us whether the user is logged in or not.
|
||||||
if (!Social.provider || !Social.provider.enabled ||
|
if (!provider.enabled ||
|
||||||
(!SocialUI.haveLoggedInUser() && provider.profile !== undefined)) {
|
(!Social.haveLoggedInUser() && provider.profile !== undefined)) {
|
||||||
// Either no enabled provider, or there is a provider and it has
|
// Either no enabled provider, or there is a provider and it has
|
||||||
// responded with a profile and the user isn't loggedin. The icons
|
// responded with a profile and the user isn't loggedin. The icons
|
||||||
// etc have already been removed by updateButtonHiddenState, so we want
|
// etc have already been removed by updateButtonHiddenState, so we want
|
||||||
|
@ -931,6 +992,41 @@ var SocialToolbar = {
|
||||||
encodeURIComponent(src), null, null, null, null);
|
encodeURIComponent(src), null, null, null, null);
|
||||||
let panel = aNotificationFrame.parentNode;
|
let panel = aNotificationFrame.parentNode;
|
||||||
sizeSocialPanelToContent(panel, aNotificationFrame);
|
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);
|
command.setAttribute("checked", !hideSidebar);
|
||||||
|
|
||||||
let sbrowser = document.getElementById("social-sidebar-browser");
|
let sbrowser = document.getElementById("social-sidebar-browser");
|
||||||
|
|
||||||
if (hideSidebar) {
|
if (hideSidebar) {
|
||||||
sbrowser.removeEventListener("load", SocialSidebar._loadListener, true);
|
sbrowser.removeEventListener("load", SocialSidebar._loadListener, true);
|
||||||
this.setSidebarVisibilityState(false);
|
this.setSidebarVisibilityState(false);
|
||||||
|
@ -1011,14 +1108,14 @@ var SocialSidebar = {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Social.errorState == "frameworker-error") {
|
sbrowser.setAttribute("origin", Social.provider.origin);
|
||||||
|
if (Social.provider.errorState == "frameworker-error") {
|
||||||
SocialSidebar.setSidebarErrorMessage("frameworker-error");
|
SocialSidebar.setSidebarErrorMessage("frameworker-error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure the right sidebar URL is loaded
|
// Make sure the right sidebar URL is loaded
|
||||||
if (sbrowser.getAttribute("origin") != Social.provider.origin) {
|
if (sbrowser.getAttribute("src") != Social.provider.sidebarURL) {
|
||||||
sbrowser.setAttribute("origin", Social.provider.origin);
|
|
||||||
sbrowser.setAttribute("src", Social.provider.sidebarURL);
|
sbrowser.setAttribute("src", Social.provider.sidebarURL);
|
||||||
sbrowser.addEventListener("load", SocialSidebar._loadListener, true);
|
sbrowser.addEventListener("load", SocialSidebar._loadListener, true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1038,6 +1135,7 @@ var SocialSidebar = {
|
||||||
if (!sbrowser.hasAttribute("origin"))
|
if (!sbrowser.hasAttribute("origin"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
sbrowser.stop();
|
||||||
sbrowser.removeAttribute("origin");
|
sbrowser.removeAttribute("origin");
|
||||||
sbrowser.setAttribute("src", "about:blank");
|
sbrowser.setAttribute("src", "about:blank");
|
||||||
SocialFlyout.unload();
|
SocialFlyout.unload();
|
||||||
|
@ -1094,7 +1192,7 @@ SocialErrorListener.prototype = {
|
||||||
|
|
||||||
onLocationChange: function SPL_onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {
|
onLocationChange: function SPL_onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {
|
||||||
let failure = aFlags & Ci.nsIWebProgressListener.LOCATION_CHANGE_ERROR_PAGE;
|
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);
|
aRequest.cancel(Components.results.NS_BINDING_ABORTED);
|
||||||
window.setTimeout(function(self) {
|
window.setTimeout(function(self) {
|
||||||
self.setErrorMessage(aWebProgress);
|
self.setErrorMessage(aWebProgress);
|
||||||
|
@ -1114,7 +1212,7 @@ SocialErrorListener.prototype = {
|
||||||
|
|
||||||
case "sidebar":
|
case "sidebar":
|
||||||
// a frameworker error "trumps" a sidebar error.
|
// 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);
|
SocialSidebar.setSidebarErrorMessage(reason);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -1318,13 +1318,16 @@ var gBrowserInit = {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// initialize the session-restore service (in case it's not already running)
|
// initialize the session-restore service (in case it's not already running)
|
||||||
try {
|
let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
|
||||||
Cc["@mozilla.org/browser/sessionstore;1"]
|
ss.init(window);
|
||||||
.getService(Ci.nsISessionStore)
|
|
||||||
.init(window);
|
// Enable the Restore Last Session command if needed
|
||||||
} catch (ex) {
|
if (ss.canRestoreLastSession
|
||||||
dump("nsSessionStore could not be initialized: " + ex + "\n");
|
#ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||||
}
|
&& !PrivateBrowsingUtils.isWindowPrivate(window)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
goSetCommandEnabled("Browser:RestoreLastSession", true);
|
||||||
|
|
||||||
PlacesToolbarHelper.init();
|
PlacesToolbarHelper.init();
|
||||||
|
|
||||||
|
@ -1459,7 +1462,7 @@ var gBrowserInit = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add Devtools menuitems and listeners
|
// Add Devtools menuitems and listeners
|
||||||
gDevTools.registerBrowserWindow(window);
|
gDevToolsBrowser.registerBrowserWindow(window);
|
||||||
|
|
||||||
let appMenuButton = document.getElementById("appmenu-button");
|
let appMenuButton = document.getElementById("appmenu-button");
|
||||||
let appMenuPopup = document.getElementById("appmenu-popup");
|
let appMenuPopup = document.getElementById("appmenu-popup");
|
||||||
|
@ -1503,7 +1506,7 @@ var gBrowserInit = {
|
||||||
if (!this._loadHandled)
|
if (!this._loadHandled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gDevTools.forgetBrowserWindow(window);
|
gDevToolsBrowser.forgetBrowserWindow(window);
|
||||||
|
|
||||||
// First clean up services initialized in gBrowserInit.onLoad (or those whose
|
// First clean up services initialized in gBrowserInit.onLoad (or those whose
|
||||||
// uninit methods don't depend on the services having been initialized).
|
// 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);
|
this._delayedStartupTimeoutId = setTimeout(this.nonBrowserWindowDelayedStartup.bind(this), 0);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -2458,7 +2463,11 @@ function BrowserOnAboutPageLoad(document) {
|
||||||
|
|
||||||
let ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
|
let ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
|
||||||
getService(Components.interfaces.nsISessionStore);
|
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");
|
document.getElementById("launcher").setAttribute("session", "true");
|
||||||
|
|
||||||
// Inject search engine and snippets URL.
|
// Inject search engine and snippets URL.
|
||||||
|
@ -3485,17 +3494,16 @@ function OpenBrowserWindow(options)
|
||||||
var wintype = document.documentElement.getAttribute('windowtype');
|
var wintype = document.documentElement.getAttribute('windowtype');
|
||||||
|
|
||||||
var extraFeatures = "";
|
var extraFeatures = "";
|
||||||
var forcePrivate = false;
|
|
||||||
#ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
#ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||||
forcePrivate = typeof options == "object" && "private" in options && options.private;
|
if (typeof options == "object" && options.private) {
|
||||||
#else
|
#else
|
||||||
forcePrivate = gPrivateBrowsingUI.privateBrowsingEnabled;
|
if (gPrivateBrowsingUI.privateBrowsingEnabled) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (forcePrivate) {
|
|
||||||
extraFeatures = ",private";
|
extraFeatures = ",private";
|
||||||
// Force the new window to load about:privatebrowsing instead of the default home page
|
// Force the new window to load about:privatebrowsing instead of the default home page
|
||||||
defaultArgs = "about:privatebrowsing";
|
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
|
// 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",
|
XPCOMUtils.defineLazyModuleGetter(this, "gDevTools",
|
||||||
"resource:///modules/devtools/gDevTools.jsm");
|
"resource:///modules/devtools/gDevTools.jsm");
|
||||||
|
|
||||||
XPCOMUtils.defineLazyModuleGetter(this, "DevToolsXULCommands",
|
XPCOMUtils.defineLazyModuleGetter(this, "gDevToolsBrowser",
|
||||||
"resource:///modules/devtools/gDevTools.jsm");
|
"resource:///modules/devtools/gDevTools.jsm");
|
||||||
|
|
||||||
XPCOMUtils.defineLazyGetter(this, "HUDConsoleUI", function () {
|
XPCOMUtils.defineLazyGetter(this, "HUDConsoleUI", function () {
|
||||||
|
|
|
@ -194,7 +194,7 @@
|
||||||
<button id="social-undoactivation-button"
|
<button id="social-undoactivation-button"
|
||||||
label="&social.activated.undobutton.label;"
|
label="&social.activated.undobutton.label;"
|
||||||
accesskey="&social.activated.undobutton.accesskey;"
|
accesskey="&social.activated.undobutton.accesskey;"
|
||||||
onclick="SocialUI.undoActivation();"/>
|
onclick="SocialUI.undoActivation(this);"/>
|
||||||
<button default="true"
|
<button default="true"
|
||||||
autofocus="autofocus"
|
autofocus="autofocus"
|
||||||
label="&social.ok.label;"
|
label="&social.ok.label;"
|
||||||
|
@ -209,7 +209,7 @@
|
||||||
<button id="social-undoactivation-button"
|
<button id="social-undoactivation-button"
|
||||||
label="&social.activated.undobutton.label;"
|
label="&social.activated.undobutton.label;"
|
||||||
accesskey="&social.activated.undobutton.accesskey;"
|
accesskey="&social.activated.undobutton.accesskey;"
|
||||||
onclick="SocialUI.undoActivation();"/>
|
onclick="SocialUI.undoActivation(this);"/>
|
||||||
#endif
|
#endif
|
||||||
</hbox>
|
</hbox>
|
||||||
</vbox>
|
</vbox>
|
||||||
|
@ -557,6 +557,7 @@
|
||||||
<image id="password-notification-icon" class="notification-anchor-icon" role="button"/>
|
<image id="password-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||||
<image id="webapps-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="plugins-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||||
|
<image id="blocked-plugins-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||||
</box>
|
</box>
|
||||||
<!-- Use onclick instead of normal popup= syntax since the popup
|
<!-- Use onclick instead of normal popup= syntax since the popup
|
||||||
code fires onmousedown, and hence eats our favicon drag events.
|
code fires onmousedown, and hence eats our favicon drag events.
|
||||||
|
@ -679,6 +680,7 @@
|
||||||
label="&social.toggleNotifications.label;"
|
label="&social.toggleNotifications.label;"
|
||||||
accesskey="&social.toggleNotifications.accesskey;"/>
|
accesskey="&social.toggleNotifications.accesskey;"/>
|
||||||
<menuseparator class="social-statusarea-separator"/>
|
<menuseparator class="social-statusarea-separator"/>
|
||||||
|
<menuseparator class="social-provider-menu" hidden="true"/>
|
||||||
<menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
|
<menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
|
||||||
<menuitem class="social-remove-menuitem" command="Social:Remove"/>
|
<menuitem class="social-remove-menuitem" command="Social:Remove"/>
|
||||||
</menupopup>
|
</menupopup>
|
||||||
|
|
|
@ -421,25 +421,18 @@ nsContextMenu.prototype = {
|
||||||
let gBrowser = this.browser.ownerDocument.defaultView.gBrowser;
|
let gBrowser = this.browser.ownerDocument.defaultView.gBrowser;
|
||||||
let imported = {};
|
let imported = {};
|
||||||
Cu.import("resource:///modules/devtools/Target.jsm", imported);
|
Cu.import("resource:///modules/devtools/Target.jsm", imported);
|
||||||
var target = imported.TargetFactory.forTab(gBrowser.selectedTab);
|
let tt = imported.TargetFactory.forTab(gBrowser.selectedTab);
|
||||||
let inspector = gDevTools.getPanelForTarget("inspector", target);
|
return gDevTools.showToolbox(tt, "inspector").then(function(toolbox) {
|
||||||
if (inspector && inspector.isReady) {
|
let inspector = toolbox.getCurrentPanel();
|
||||||
inspector.selection.setNode(this.target);
|
inspector.selection.setNode(this.target, "browser-context-menu");
|
||||||
} else {
|
}.bind(this));
|
||||||
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));
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Set various context menu attributes based on the state of the world.
|
// Set various context menu attributes based on the state of the world.
|
||||||
setTarget: function (aNode, aRangeParent, aRangeOffset) {
|
setTarget: function (aNode, aRangeParent, aRangeOffset) {
|
||||||
const xulNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
const xulNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||||
if (aNode.namespaceURI == xulNS ||
|
if (aNode.namespaceURI == xulNS ||
|
||||||
aNode.nodeType == Node.DOCUMENT_NODE ||
|
aNode.nodeType == Node.DOCUMENT_NODE) {
|
||||||
this.isTargetAFormControl(aNode)) {
|
|
||||||
this.shouldDisplay = false;
|
this.shouldDisplay = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1297,18 +1290,6 @@ nsContextMenu.prototype = {
|
||||||
"contextMenu.hasBGImage = " + this.hasBGImage + "\n";
|
"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) {
|
isTargetATextBox: function(node) {
|
||||||
if (node instanceof HTMLInputElement)
|
if (node instanceof HTMLInputElement)
|
||||||
return node.mozIsTextField(false);
|
return node.mozIsTextField(false);
|
||||||
|
|
|
@ -10,6 +10,7 @@ relativesrcdir = @relativesrcdir@
|
||||||
|
|
||||||
DIRS += \
|
DIRS += \
|
||||||
newtab \
|
newtab \
|
||||||
|
social \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
include $(DEPTH)/config/autoconf.mk
|
include $(DEPTH)/config/autoconf.mk
|
||||||
|
@ -286,21 +287,6 @@ _BROWSER_FILES = \
|
||||||
blockPluginVulnerableNoUpdate.xml \
|
blockPluginVulnerableNoUpdate.xml \
|
||||||
blockNoPlugins.xml \
|
blockNoPlugins.xml \
|
||||||
browser_utilityOverlay.js \
|
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 \
|
browser_bug676619.js \
|
||||||
download_page.html \
|
download_page.html \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
|
@ -34,15 +34,15 @@ function test() {
|
||||||
testInput("text", true);
|
testInput("text", true);
|
||||||
testInput("password", true);
|
testInput("password", true);
|
||||||
testInput("image", true);
|
testInput("image", true);
|
||||||
testInput("button", false);
|
testInput("button", true);
|
||||||
testInput("submit", false);
|
testInput("submit", true);
|
||||||
testInput("reset", false);
|
testInput("reset", true);
|
||||||
testInput("checkbox", false);
|
testInput("checkbox", true);
|
||||||
testInput("radio", false);
|
testInput("radio", true);
|
||||||
testElement("button", false);
|
testElement("button", true);
|
||||||
testElement("select", false);
|
testElement("select", true);
|
||||||
testElement("option", false);
|
testElement("option", true);
|
||||||
testElement("optgroup", false);
|
testElement("optgroup", true);
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
document.popupNode = null;
|
document.popupNode = null;
|
||||||
|
|
|
@ -23,11 +23,15 @@ function test() {
|
||||||
gTestBrowser.addEventListener("load", pageLoad, true);
|
gTestBrowser.addEventListener("load", pageLoad, true);
|
||||||
gTestBrowser.addEventListener("PluginScripted", pluginScripted, true);
|
gTestBrowser.addEventListener("PluginScripted", pluginScripted, true);
|
||||||
|
|
||||||
|
// This list is iterated in reverse order, since it uses Array.pop to get the next test.
|
||||||
gNextTestList = [
|
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" },
|
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" },
|
url: gHttpTestRoot + "plugin_test_scriptedPopup2.html" },
|
||||||
|
// Shows a popup since it is the first instance of a small plugin
|
||||||
{ func: testExpectPopupPart1,
|
{ func: testExpectPopupPart1,
|
||||||
url: gHttpTestRoot + "plugin_test_scriptedPopup3.html" },
|
url: gHttpTestRoot + "plugin_test_scriptedPopup3.html" },
|
||||||
{ func: testExpectNoPopupPart1,
|
{ func: testExpectNoPopupPart1,
|
||||||
|
|
|
@ -992,10 +992,12 @@ function test23() {
|
||||||
|
|
||||||
// Reload plugin (this may need RunSoon() in the future when plugins change state asynchronously)
|
// Reload plugin (this may need RunSoon() in the future when plugins change state asynchronously)
|
||||||
pluginNode.type = null;
|
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");
|
is(objLoadingContent.displayedType, Ci.nsIObjectLoadingContent.TYPE_NULL, "Test 23, plugin should be unloaded");
|
||||||
pluginNode.type = "application/x-test";
|
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.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");
|
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");
|
ok(!pluginNode.activated, "Test 23, plugin node should not be activated");
|
||||||
|
|
|
@ -1,11 +1,24 @@
|
||||||
// Make sure that we can open private browsing windows
|
// Make sure that we can open private browsing windows
|
||||||
|
|
||||||
function test() {
|
function test() {
|
||||||
|
waitForExplicitFinish();
|
||||||
var nonPrivateWin = OpenBrowserWindow();
|
var nonPrivateWin = OpenBrowserWindow();
|
||||||
ok(!PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin), "OpenBrowserWindow() should open a normal window");
|
ok(!PrivateBrowsingUtils.isWindowPrivate(nonPrivateWin), "OpenBrowserWindow() should open a normal window");
|
||||||
nonPrivateWin.close();
|
nonPrivateWin.close();
|
||||||
|
|
||||||
var privateWin = OpenBrowserWindow({private: true});
|
var privateWin = OpenBrowserWindow({private: true});
|
||||||
ok(PrivateBrowsingUtils.isWindowPrivate(privateWin), "OpenBrowserWindow({private: true}) should open a private window");
|
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(); };
|
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() {
|
function getTestPlugin() {
|
||||||
var ph = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
|
var ph = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
|
||||||
var tags = ph.getPluginTags();
|
var tags = ph.getPluginTags();
|
||||||
|
@ -110,97 +101,6 @@ function getTestPlugin() {
|
||||||
return null;
|
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) {
|
function updateBlocklist(aCallback) {
|
||||||
var blocklistNotifier = Cc["@mozilla.org/extensions/blocklist;1"]
|
var blocklistNotifier = Cc["@mozilla.org/extensions/blocklist;1"]
|
||||||
.getService(Ci.nsITimerCallback);
|
.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
|
let manifest = { // normal provider
|
||||||
name: "provider 1",
|
name: "provider 1",
|
||||||
origin: "https://example.com",
|
origin: "https://example.com",
|
||||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||||
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"
|
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||||
};
|
};
|
||||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
runSocialTestWithProvider(manifest, function (finishcb) {
|
||||||
|
@ -53,6 +53,7 @@ var tests = {
|
||||||
togglePrivateBrowsing(function () {
|
togglePrivateBrowsing(function () {
|
||||||
ok(!Social.enabled, "Social shuts down during private browsing");
|
ok(!Social.enabled, "Social shuts down during private browsing");
|
||||||
togglePrivateBrowsing(function () {
|
togglePrivateBrowsing(function () {
|
||||||
|
ok(Social.provider.getWorkerPort(), "port still obtainable after PB")
|
||||||
ok(Social.enabled, "Social enabled after private browsing");
|
ok(Social.enabled, "Social enabled after private browsing");
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
|
@ -66,6 +67,7 @@ var tests = {
|
||||||
// test PB from the perspective of entering PB without social enabled
|
// 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
|
// we expect social to be enabled at the start of the test, we need
|
||||||
// to disable it before testing PB transitions.
|
// to disable it before testing PB transitions.
|
||||||
|
ok(Social.enabled, "social is still enabled");
|
||||||
let port = Social.provider.getWorkerPort();
|
let port = Social.provider.getWorkerPort();
|
||||||
ok(port, "provider has a port");
|
ok(port, "provider has a port");
|
||||||
port.postMessage({topic: "test-init"});
|
port.postMessage({topic: "test-init"});
|
|
@ -8,8 +8,8 @@ function test() {
|
||||||
let manifest = { // normal provider
|
let manifest = { // normal provider
|
||||||
name: "provider 1",
|
name: "provider 1",
|
||||||
origin: "https://example.com",
|
origin: "https://example.com",
|
||||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||||
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"
|
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||||
};
|
};
|
||||||
let oldwidth = window.outerWidth; // we futz with this, so we restore it
|
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
|
// The worker then makes the same call again - as that second call also
|
||||||
// specifies "minimized" the chat should *not* be restored.
|
// specifies "minimized" the chat should *not* be restored.
|
||||||
testWorkerChatWindowMinimized: function(next) {
|
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 port = Social.provider.getWorkerPort();
|
||||||
let seen_opened = false;
|
let seen_opened = false;
|
||||||
ok(port, "provider has a port");
|
ok(port, "provider has a port");
|
||||||
|
@ -175,7 +175,7 @@ var tests = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
testWorkerChatWindow: function(next) {
|
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();
|
let port = Social.provider.getWorkerPort();
|
||||||
ok(port, "provider has a port");
|
ok(port, "provider has a port");
|
||||||
port.postMessage({topic: "test-init"});
|
port.postMessage({topic: "test-init"});
|
||||||
|
@ -414,7 +414,7 @@ var tests = {
|
||||||
|
|
||||||
testSecondTopLevelWindow: function(next) {
|
testSecondTopLevelWindow: function(next) {
|
||||||
// Bug 817782 - check chats work in new top-level windows.
|
// 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 port = Social.provider.getWorkerPort();
|
||||||
let secondWindow;
|
let secondWindow;
|
||||||
port.onmessage = function(e) {
|
port.onmessage = function(e) {
|
||||||
|
@ -437,7 +437,7 @@ var tests = {
|
||||||
testChatWindowChooser: function(next) {
|
testChatWindowChooser: function(next) {
|
||||||
// Tests that when a worker creates a chat, it is opened in the correct
|
// Tests that when a worker creates a chat, it is opened in the correct
|
||||||
// window.
|
// 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 chatId = 1;
|
||||||
let port = Social.provider.getWorkerPort();
|
let port = Social.provider.getWorkerPort();
|
||||||
port.postMessage({topic: "test-init"});
|
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
|
// XXX - note this must be the last test until we restore the login state
|
||||||
// between tests...
|
// between tests...
|
||||||
testCloseOnLogout: function(next) {
|
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();
|
let port = Social.provider.getWorkerPort();
|
||||||
ok(port, "provider has a port");
|
ok(port, "provider has a port");
|
||||||
port.postMessage({topic: "test-init"});
|
port.postMessage({topic: "test-init"});
|
||||||
|
@ -552,7 +552,7 @@ function get3ChatsForCollapsing(mode, cb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeChat(mode, uniqueid, 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;
|
let provider = Social.provider;
|
||||||
window.SocialChatBar.openChat(provider, chatUrl + "?id=" + uniqueid, function(chat) {
|
window.SocialChatBar.openChat(provider, chatUrl + "?id=" + uniqueid, function(chat) {
|
||||||
// we can't callback immediately or we might close the chat during
|
// we can't callback immediately or we might close the chat during
|
|
@ -8,8 +8,8 @@ function test() {
|
||||||
let manifest = { // normal provider
|
let manifest = { // normal provider
|
||||||
name: "provider 1",
|
name: "provider 1",
|
||||||
origin: "https://example.com",
|
origin: "https://example.com",
|
||||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||||
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"
|
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||||
};
|
};
|
||||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
runSocialTestWithProvider(manifest, function (finishcb) {
|
|
@ -8,8 +8,8 @@ function test() {
|
||||||
let manifest = { // normal provider
|
let manifest = { // normal provider
|
||||||
name: "provider 1",
|
name: "provider 1",
|
||||||
origin: "https://example.com",
|
origin: "https://example.com",
|
||||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||||
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"
|
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||||
};
|
};
|
||||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
runSocialTestWithProvider(manifest, function (finishcb) {
|
|
@ -8,8 +8,8 @@ function test() {
|
||||||
let manifest = { // normal provider
|
let manifest = { // normal provider
|
||||||
name: "provider 1",
|
name: "provider 1",
|
||||||
origin: "https://example.com",
|
origin: "https://example.com",
|
||||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||||
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"
|
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||||
};
|
};
|
||||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
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
|
let manifest = { // normal provider
|
||||||
name: "provider 1",
|
name: "provider 1",
|
||||||
origin: "https://example.com",
|
origin: "https://example.com",
|
||||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||||
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"
|
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||||
};
|
};
|
||||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
runSocialTestWithProvider(manifest, function (finishcb) {
|
||||||
|
@ -68,7 +68,7 @@ function testInitial(finishcb) {
|
||||||
is(shareButton.getAttribute("tooltiptext"), "Share this page", "check tooltip text is correct");
|
is(shareButton.getAttribute("tooltiptext"), "Share this page", "check tooltip text is correct");
|
||||||
is(shareStatusLabel.getAttribute("value"), "", "check status label text is blank");
|
is(shareStatusLabel.getAttribute("value"), "", "check status label text is blank");
|
||||||
// Check the relative URL was resolved correctly (note this image has offsets of zero...)
|
// 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
|
// Test clicking the share button
|
||||||
shareButton.addEventListener("click", function listener() {
|
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(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");
|
is(shareStatusLabel.getAttribute("value"), "This page has been shared", "check status label text is correct");
|
||||||
// Check the URL and offsets were applied correctly
|
// 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));
|
executeSoon(testSecondClick.bind(window, testPopupOKButton));
|
||||||
});
|
});
|
||||||
shareButton.click();
|
shareButton.click();
|
|
@ -8,8 +8,8 @@ function test() {
|
||||||
let manifest = { // normal provider
|
let manifest = { // normal provider
|
||||||
name: "provider 1",
|
name: "provider 1",
|
||||||
origin: "https://example.com",
|
origin: "https://example.com",
|
||||||
sidebarURL: "https://example.com/browser/browser/base/content/test/social_sidebar.html",
|
sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
|
||||||
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"
|
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||||
};
|
};
|
||||||
runSocialTestWithProvider(manifest, doTest);
|
runSocialTestWithProvider(manifest, doTest);
|
||||||
|
@ -28,10 +28,29 @@ function doTest(finishcb) {
|
||||||
"toggle command should be " + (shouldBeShown ? "checked" : "unchecked"));
|
"toggle command should be " + (shouldBeShown ? "checked" : "unchecked"));
|
||||||
is(sidebar.hidden, !shouldBeShown,
|
is(sidebar.hidden, !shouldBeShown,
|
||||||
"sidebar should be " + (shouldBeShown ? "visible" : "hidden"));
|
"sidebar should be " + (shouldBeShown ? "visible" : "hidden"));
|
||||||
is(Services.prefs.getBoolPref("social.sidebar.open"), shouldBeShown,
|
// The sidebar.open pref only reflects the actual state of the sidebar
|
||||||
"sidebar open pref should be " + shouldBeShown);
|
// when social is enabled.
|
||||||
if (shouldBeShown)
|
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");
|
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
|
// First check the the sidebar is initially visible, and loaded
|
||||||
|
@ -48,6 +67,18 @@ function doTest(finishcb) {
|
||||||
|
|
||||||
checkShown(true);
|
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
|
// Finish the test
|
||||||
finishcb();
|
finishcb();
|
||||||
});
|
});
|
||||||
|
@ -57,9 +88,14 @@ function doTest(finishcb) {
|
||||||
Social.toggleSidebar();
|
Social.toggleSidebar();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Now toggle it off
|
// Wait until the side bar loads
|
||||||
info("Toggling sidebar off");
|
waitForCondition(function () {
|
||||||
Social.toggleSidebar();
|
return document.getElementById("social-sidebar-browser").docShellIsActive;
|
||||||
|
}, function () {
|
||||||
|
// Now toggle it off
|
||||||
|
info("Toggling sidebar off");
|
||||||
|
Social.toggleSidebar();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX test sidebar in popup
|
// XXX test sidebar in popup
|
|
@ -8,7 +8,7 @@ function test() {
|
||||||
let manifest = { // normal provider
|
let manifest = { // normal provider
|
||||||
name: "provider 1",
|
name: "provider 1",
|
||||||
origin: "https://example.com",
|
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"
|
iconURL: "https://example.com/browser/browser/base/content/test/moz.png"
|
||||||
};
|
};
|
||||||
runSocialTestWithProvider(manifest, function (finishcb) {
|
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;
|
break;
|
||||||
case "social.initialize":
|
case "social.initialize":
|
||||||
// This is the workerAPI port, respond and set up a notification icon.
|
// 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;
|
apiPort = port;
|
||||||
let profile = {
|
let profile;
|
||||||
portrait: "https://example.com/portrait.jpg",
|
if (location.href.indexOf("https://test1.example.com") == 0) {
|
||||||
userName: "trickster",
|
profile = {
|
||||||
displayName: "Kuma Lisa",
|
portrait: "https://test1.example.com/portrait.jpg",
|
||||||
profileURL: "http://en.wikipedia.org/wiki/Kuma_Lisa"
|
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});
|
port.postMessage({topic: "social.user-profile", data: profile});
|
||||||
break;
|
break;
|
||||||
case "test-ambient-notification":
|
case "test-ambient-notification":
|
||||||
let icon = {
|
let icon = {
|
||||||
name: "testIcon",
|
name: "testIcon",
|
||||||
iconURL: "chrome://browser/skin/Info.png",
|
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
|
counter: 1
|
||||||
};
|
};
|
||||||
apiPort.postMessage({topic: "social.ambient-notification", data: icon});
|
apiPort.postMessage({topic: "social.ambient-notification", data: icon});
|
||||||
|
@ -111,9 +122,9 @@ onconnect = function(e) {
|
||||||
data: {
|
data: {
|
||||||
images: {
|
images: {
|
||||||
// this one is relative to test we handle relative ones.
|
// 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.
|
// 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: {
|
messages: {
|
||||||
shareTooltip: "Share this page",
|
shareTooltip: "Share this page",
|
|
@ -10,7 +10,9 @@ Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
|
||||||
|
|
||||||
XPCOMUtils.defineLazyGetter(this, "BROWSER_NEW_TAB_URL", function () {
|
XPCOMUtils.defineLazyGetter(this, "BROWSER_NEW_TAB_URL", function () {
|
||||||
const PREF = "browser.newtab.url";
|
const PREF = "browser.newtab.url";
|
||||||
|
#ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||||
const TOPIC = "private-browsing-transition-complete";
|
const TOPIC = "private-browsing-transition-complete";
|
||||||
|
#endif
|
||||||
|
|
||||||
function getNewTabPageURL() {
|
function getNewTabPageURL() {
|
||||||
if (!Services.prefs.prefHasUserValue(PREF)) {
|
if (!Services.prefs.prefHasUserValue(PREF)) {
|
||||||
|
@ -26,12 +28,16 @@ XPCOMUtils.defineLazyGetter(this, "BROWSER_NEW_TAB_URL", function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
Services.prefs.addObserver(PREF, update, false);
|
Services.prefs.addObserver(PREF, update, false);
|
||||||
|
#ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||||
Services.obs.addObserver(update, TOPIC, false);
|
Services.obs.addObserver(update, TOPIC, false);
|
||||||
|
#endif
|
||||||
|
|
||||||
addEventListener("unload", function onUnload() {
|
addEventListener("unload", function onUnload() {
|
||||||
removeEventListener("unload", onUnload);
|
removeEventListener("unload", onUnload);
|
||||||
Services.prefs.removeObserver(PREF, update);
|
Services.prefs.removeObserver(PREF, update);
|
||||||
|
#ifndef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||||
Services.obs.removeObserver(update, TOPIC);
|
Services.obs.removeObserver(update, TOPIC);
|
||||||
|
#endif
|
||||||
});
|
});
|
||||||
|
|
||||||
return getNewTabPageURL();
|
return getNewTabPageURL();
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
-->
|
-->
|
||||||
<xul:description class="downloadTarget"
|
<xul:description class="downloadTarget"
|
||||||
crop="center"
|
crop="center"
|
||||||
style="min-width: &downloadsSummary.minWidth;"
|
style="min-width: &downloadsSummary.minWidth2;"
|
||||||
xbl:inherits="value=target,tooltiptext=target"/>
|
xbl:inherits="value=target,tooltiptext=target"/>
|
||||||
<xul:progressmeter anonid="progressmeter"
|
<xul:progressmeter anonid="progressmeter"
|
||||||
class="downloadProgress"
|
class="downloadProgress"
|
||||||
|
|
|
@ -116,7 +116,7 @@
|
||||||
<vbox>
|
<vbox>
|
||||||
<description id="downloadsSummaryDescription"
|
<description id="downloadsSummaryDescription"
|
||||||
class="downloadTarget"
|
class="downloadTarget"
|
||||||
style="min-width: &downloadsSummary.minWidth;"/>
|
style="min-width: &downloadsSummary.minWidth2;"/>
|
||||||
<progressmeter id="downloadsSummaryProgress"
|
<progressmeter id="downloadsSummaryProgress"
|
||||||
class="downloadProgress"
|
class="downloadProgress"
|
||||||
min="0"
|
min="0"
|
||||||
|
|
|
@ -47,9 +47,6 @@ const Cr = Components.results;
|
||||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||||
Cu.import("resource://gre/modules/Services.jsm");
|
Cu.import("resource://gre/modules/Services.jsm");
|
||||||
|
|
||||||
XPCOMUtils.defineLazyServiceGetter(this, "gBrowserGlue",
|
|
||||||
"@mozilla.org/browser/browserglue;1",
|
|
||||||
"nsIBrowserGlue");
|
|
||||||
XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
|
XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
|
||||||
"resource://gre/modules/NetUtil.jsm");
|
"resource://gre/modules/NetUtil.jsm");
|
||||||
XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
|
XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
|
||||||
|
@ -78,7 +75,7 @@ const kDownloadsStringsRequiringFormatting = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const kDownloadsStringsRequiringPluralForm = {
|
const kDownloadsStringsRequiringPluralForm = {
|
||||||
otherDownloads: true
|
otherDownloads2: true
|
||||||
};
|
};
|
||||||
|
|
||||||
XPCOMUtils.defineLazyGetter(this, "DownloadsLocalFileCtor", function () {
|
XPCOMUtils.defineLazyGetter(this, "DownloadsLocalFileCtor", function () {
|
||||||
|
@ -1863,7 +1860,7 @@ DownloadsSummaryData.prototype = {
|
||||||
DownloadsCommon.summarizeDownloads(this._dataItemsForSummary());
|
DownloadsCommon.summarizeDownloads(this._dataItemsForSummary());
|
||||||
|
|
||||||
this._description = DownloadsCommon.strings
|
this._description = DownloadsCommon.strings
|
||||||
.otherDownloads(summary.numActive);
|
.otherDownloads2(summary.numActive);
|
||||||
this._percentComplete = summary.percentComplete;
|
this._percentComplete = summary.percentComplete;
|
||||||
|
|
||||||
// If all downloads are paused, show the progress indicator as paused.
|
// If all downloads are paused, show the progress indicator as paused.
|
||||||
|
|
|
@ -281,6 +281,16 @@ BrowserGlue.prototype = {
|
||||||
case "initial-migration-did-import-default-bookmarks":
|
case "initial-migration-did-import-default-bookmarks":
|
||||||
this._initPlaces(true);
|
this._initPlaces(true);
|
||||||
break;
|
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);
|
os.addObserver(this, "places-shutdown", false);
|
||||||
this._isPlacesShutdownObserver = true;
|
this._isPlacesShutdownObserver = true;
|
||||||
os.addObserver(this, "defaultURIFixup-using-keyword-pref", false);
|
os.addObserver(this, "defaultURIFixup-using-keyword-pref", false);
|
||||||
|
os.addObserver(this, "handle-xul-text-link", false);
|
||||||
},
|
},
|
||||||
|
|
||||||
// cleanup (called on application shutdown)
|
// cleanup (called on application shutdown)
|
||||||
|
@ -342,6 +353,7 @@ BrowserGlue.prototype = {
|
||||||
if (this._isPlacesShutdownObserver)
|
if (this._isPlacesShutdownObserver)
|
||||||
os.removeObserver(this, "places-shutdown");
|
os.removeObserver(this, "places-shutdown");
|
||||||
os.removeObserver(this, "defaultURIFixup-using-keyword-pref");
|
os.removeObserver(this, "defaultURIFixup-using-keyword-pref");
|
||||||
|
os.removeObserver(this, "handle-xul-text-link");
|
||||||
UserAgentOverrides.uninit();
|
UserAgentOverrides.uninit();
|
||||||
webappsUI.uninit();
|
webappsUI.uninit();
|
||||||
SignInToWebsiteUX.uninit();
|
SignInToWebsiteUX.uninit();
|
||||||
|
|
|
@ -27,7 +27,7 @@ function waitForImportAndSmartBookmarks(aCallback) {
|
||||||
}, "bookmarks-restore-success", false);
|
}, "bookmarks-restore-success", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
let gTests = [
|
[
|
||||||
|
|
||||||
// This test must be the first one.
|
// This test must be the first one.
|
||||||
function test_checkPreferences() {
|
function test_checkPreferences() {
|
||||||
|
@ -263,7 +263,7 @@ let gTests = [
|
||||||
TOPICDATA_FORCE_PLACES_INIT);
|
TOPICDATA_FORCE_PLACES_INIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
];
|
].forEach(add_test);
|
||||||
|
|
||||||
do_register_cleanup(function () {
|
do_register_cleanup(function () {
|
||||||
remove_all_bookmarks();
|
remove_all_bookmarks();
|
||||||
|
|
|
@ -439,11 +439,6 @@ PrivateBrowsingService.prototype = {
|
||||||
this._unload();
|
this._unload();
|
||||||
break;
|
break;
|
||||||
case "private-browsing":
|
case "private-browsing":
|
||||||
// clear all auth tokens
|
|
||||||
let sdr = Cc["@mozilla.org/security/sdr;1"].
|
|
||||||
getService(Ci.nsISecretDecoderRing);
|
|
||||||
sdr.logoutAndTeardown();
|
|
||||||
|
|
||||||
if (!this._inPrivateBrowsing) {
|
if (!this._inPrivateBrowsing) {
|
||||||
// Clear the error console
|
// Clear the error console
|
||||||
let consoleService = Cc["@mozilla.org/consoleservice;1"].
|
let consoleService = Cc["@mozilla.org/consoleservice;1"].
|
||||||
|
|
|
@ -40,7 +40,7 @@ function test() {
|
||||||
Services.obs.removeObserver(observer1, "domwindowopened");
|
Services.obs.removeObserver(observer1, "domwindowopened");
|
||||||
}, false);
|
}, false);
|
||||||
}, "domwindowopened", false);
|
}, "domwindowopened", false);
|
||||||
OpenBrowserWindow();
|
OpenBrowserWindow({private: PrivateBrowsingUtils.isWindowPrivate(window)});
|
||||||
}
|
}
|
||||||
|
|
||||||
// test the gPrivateBrowsingUI object
|
// test the gPrivateBrowsingUI object
|
||||||
|
|
|
@ -13,7 +13,7 @@ function test() {
|
||||||
|
|
||||||
pb.privateBrowsingEnabled = true;
|
pb.privateBrowsingEnabled = true;
|
||||||
|
|
||||||
let win = OpenBrowserWindow();
|
let win = OpenBrowserWindow({private: PrivateBrowsingUtils.isWindowPrivate(window)});
|
||||||
win.addEventListener("load", function() {
|
win.addEventListener("load", function() {
|
||||||
win.removeEventListener("load", arguments.callee, false);
|
win.removeEventListener("load", arguments.callee, false);
|
||||||
executeSoon(function() {
|
executeSoon(function() {
|
||||||
|
|
|
@ -34,6 +34,8 @@ MOCHITEST_BROWSER_FILES = \
|
||||||
browser_privatebrowsing_openlocation.js \
|
browser_privatebrowsing_openlocation.js \
|
||||||
browser_privatebrowsing_openLocationLastURL.js \
|
browser_privatebrowsing_openLocationLastURL.js \
|
||||||
browser_privatebrowsing_placestitle.js \
|
browser_privatebrowsing_placestitle.js \
|
||||||
|
browser_privatebrowsing_placesTitleNoUpdate.js \
|
||||||
|
browser_privatebrowsing_placesTitleNoUpdate.html \
|
||||||
browser_privatebrowsing_popupblocker.js \
|
browser_privatebrowsing_popupblocker.js \
|
||||||
browser_privatebrowsing_protocolhandler.js \
|
browser_privatebrowsing_protocolhandler.js \
|
||||||
browser_privatebrowsing_protocolhandler_page.html \
|
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--) {
|
for (let i = oState.windows.length - 1; i >= 0; i--) {
|
||||||
if (oState.windows[i].isPrivate) {
|
if (oState.windows[i].isPrivate) {
|
||||||
oState.windows.splice(i, 1);
|
oState.windows.splice(i, 1);
|
||||||
|
if (oState.selectedWindow >= i) {
|
||||||
|
oState.selectedWindow--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (let i = oState._closedWindows.length - 1; i >= 0; i--) {
|
for (let i = oState._closedWindows.length - 1; i >= 0; i--) {
|
||||||
|
|
|
@ -22,8 +22,6 @@ MOCHITEST_BROWSER_FILES = \
|
||||||
browser_form_restore_events_sample.html \
|
browser_form_restore_events_sample.html \
|
||||||
browser_formdata_format.js \
|
browser_formdata_format.js \
|
||||||
browser_formdata_format_sample.html \
|
browser_formdata_format_sample.html \
|
||||||
browser_248970_a.js \
|
|
||||||
browser_248970_b.js \
|
|
||||||
browser_248970_b_sample.html \
|
browser_248970_b_sample.html \
|
||||||
browser_339445.js \
|
browser_339445.js \
|
||||||
browser_339445_sample.html \
|
browser_339445_sample.html \
|
||||||
|
@ -139,9 +137,12 @@ ifdef MOZ_PER_WINDOW_PRIVATE_BROWSING
|
||||||
MOCHITEST_BROWSER_FILES += \
|
MOCHITEST_BROWSER_FILES += \
|
||||||
browser_354894_perwindowpb.js \
|
browser_354894_perwindowpb.js \
|
||||||
browser_394759_perwindowpb.js \
|
browser_394759_perwindowpb.js \
|
||||||
|
browser_819510_perwindowpb.js \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
else
|
else
|
||||||
MOCHITEST_BROWSER_FILES += \
|
MOCHITEST_BROWSER_FILES += \
|
||||||
|
browser_248970_a.js \
|
||||||
|
browser_248970_b.js \
|
||||||
browser_354894.js \
|
browser_354894.js \
|
||||||
browser_394759_privatebrowsing.js \
|
browser_394759_privatebrowsing.js \
|
||||||
$(NULL)
|
$(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
|
#ifdef MOZ_WIDGET_GTK2
|
||||||
#include "nsIImageToPixbuf.h"
|
#include "nsIImageToPixbuf.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "nsXULAppAPI.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
|
@ -108,13 +109,10 @@ nsGNOMEShellService::Init()
|
||||||
NS_ENSURE_TRUE(dirSvc, NS_ERROR_NOT_AVAILABLE);
|
NS_ENSURE_TRUE(dirSvc, NS_ERROR_NOT_AVAILABLE);
|
||||||
|
|
||||||
nsCOMPtr<nsIFile> appPath;
|
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));
|
getter_AddRefs(appPath));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
rv = appPath->AppendNative(NS_LITERAL_CSTRING(MOZ_APP_NAME));
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
return appPath->GetNativePath(mAppPath);
|
return appPath->GetNativePath(mAppPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "nsIWinTaskbar.h"
|
#include "nsIWinTaskbar.h"
|
||||||
#include "nsISupportsPrimitives.h"
|
#include "nsISupportsPrimitives.h"
|
||||||
#include "nsThreadUtils.h"
|
#include "nsThreadUtils.h"
|
||||||
|
#include "nsXULAppAPI.h"
|
||||||
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "shellapi.h"
|
#include "shellapi.h"
|
||||||
|
@ -198,12 +199,12 @@ GetHelperPath(nsAutoString& aPath)
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
nsCOMPtr<nsIFile> appHelper;
|
nsCOMPtr<nsIFile> appHelper;
|
||||||
rv = directoryService->Get(NS_XPCOM_CURRENT_PROCESS_DIR,
|
rv = directoryService->Get(XRE_EXECUTABLE_FILE,
|
||||||
NS_GET_IID(nsIFile),
|
NS_GET_IID(nsIFile),
|
||||||
getter_AddRefs(appHelper));
|
getter_AddRefs(appHelper));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
rv = appHelper->AppendNative(NS_LITERAL_CSTRING("uninstall"));
|
rv = appHelper->SetNativeLeafName(NS_LITERAL_CSTRING("uninstall"));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
rv = appHelper->AppendNative(NS_LITERAL_CSTRING("helper.exe"));
|
rv = appHelper->AppendNative(NS_LITERAL_CSTRING("helper.exe"));
|
||||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче