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:
Richard Newman 2012-12-15 17:08:14 -08:00
Родитель aa45233a91 e994977991
Коммит b8f7251de3
2375 изменённых файлов: 66700 добавлений и 139416 удалений

Просмотреть файл

Просмотреть файл

@ -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"));

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше