This commit is contained in:
Nick Alexander 2013-09-13 11:59:08 -07:00
Родитель 9239060230 0dc1896c1e
Коммит 4603aa7048
778 изменённых файлов: 20627 добавлений и 11870 удалений

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

@ -27,6 +27,7 @@
#include "mozilla/Util.h"
#include "nsXPCOMStrings.h"
#include "nsComponentManagerUtils.h"
#include "nsIPersistentProperties2.h"
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -10,6 +10,7 @@
#include "ImageAccessible.h"
#include "mozilla/Likely.h"
#include "nsMai.h"
#include "nsIAccessibleTypes.h"
#include "nsIURI.h"
using namespace mozilla;

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

@ -10,6 +10,7 @@
#include "HyperTextAccessible.h"
#include "nsMai.h"
#include "nsIAccessibleTypes.h"
#include "nsIPersistentProperties2.h"
#include "mozilla/Likely.h"

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

@ -7,7 +7,6 @@
#include "ARIAMap.h"
#include "Accessible.h"
#include "nsAccUtils.h"
#include "nsCoreUtils.h"
#include "Role.h"

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

@ -6,19 +6,12 @@
#include "AccEvent.h"
#include "ApplicationAccessibleWrap.h"
#include "nsAccessibilityService.h"
#include "nsAccUtils.h"
#include "DocAccessible.h"
#include "nsIAccessibleText.h"
#include "xpcAccEvents.h"
#include "States.h"
#include "nsEventStateManager.h"
#include "nsIServiceManager.h"
#ifdef MOZ_XUL
#include "nsIDOMXULMultSelectCntrlEl.h"
#endif
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "AccGroupInfo.h"
#include "nsAccUtils.h"
#include "Role.h"
#include "States.h"

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

@ -6,7 +6,6 @@
#define AccGroupInfo_h_
#include "Accessible-inl.h"
#include "nsAccUtils.h"
namespace mozilla {
namespace a11y {

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

@ -4,15 +4,12 @@
#include "AccIterator.h"
#include "nsAccessibilityService.h"
#include "AccGroupInfo.h"
#include "Accessible-inl.h"
#ifdef MOZ_XUL
#include "XULTreeAccessible.h"
#endif
#include "mozilla/dom/Element.h"
#include "nsBindingManager.h"
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -9,7 +9,8 @@
#include "DocAccessible.h"
#include "Filters.h"
#include "nsAccessibilityService.h"
class nsITreeView;
namespace mozilla {
namespace a11y {

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

@ -29,7 +29,6 @@ enum AccType {
eHTMLGroupboxType,
eHTMLHRType,
eHTMLImageMapType,
eHTMLLabelType,
eHTMLLiType,
eHTMLSelectListType,
eHTMLMediaType,

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

@ -5,14 +5,11 @@
#include "DocManager.h"
#include "Accessible-inl.h"
#include "ApplicationAccessible.h"
#include "ARIAMap.h"
#include "DocAccessible-inl.h"
#include "nsAccessibilityService.h"
#include "nsAccUtils.h"
#include "RootAccessibleWrap.h"
#include "States.h"
#ifdef A11Y_LOG
#include "Logging.h"
@ -22,13 +19,14 @@
#include "nsDocShellLoadTypes.h"
#include "nsDOMEvent.h"
#include "nsIChannel.h"
#include "nsIContentViewer.h"
#include "nsIDOMDocument.h"
#include "nsEventListenerManager.h"
#include "nsIDOMWindow.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsIWebNavigation.h"
#include "nsServiceManagerUtils.h"
#include "nsIWebProgress.h"
#include "nsCoreUtils.h"
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -8,7 +8,6 @@
#include "nsIDocument.h"
#include "nsIDOMEventListener.h"
#include "nsRefPtrHashtable.h"
#include "nsIWebProgress.h"
#include "nsIWebProgressListener.h"
#include "nsWeakReference.h"
#include "nsIPresShell.h"

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

@ -6,8 +6,12 @@
#include "EventQueue.h"
#include "Accessible-inl.h"
#include "DocAccessible-inl.h"
#include "nsEventShell.h"
#include "DocAccessible.h"
#include "nsAccessibilityService.h"
#ifdef A11Y_LOG
#include "Logging.h"
#endif
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -8,8 +8,6 @@
#include "AccEvent.h"
class nsIContent;
namespace mozilla {
namespace a11y {

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

@ -10,10 +10,10 @@
#include "nsAccUtils.h"
#include "nsEventShell.h"
#include "Role.h"
#include "RootAccessible.h"
#include "nsEventStateManager.h"
#include "nsFocusManager.h"
#include "mozilla/dom/Element.h"
namespace dom = mozilla::dom;
using namespace mozilla::a11y;

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

@ -6,7 +6,10 @@
#define mozilla_a11y_FocusManager_h_
#include "nsAutoPtr.h"
#include "mozilla/dom/Element.h"
class nsINode;
class nsIDocument;
class nsISupports;
namespace mozilla {
namespace a11y {

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

@ -22,6 +22,7 @@
#include "prenv.h"
#include "nsIDocShellTreeItem.h"
#include "nsIURI.h"
#include "mozilla/dom/Element.h"
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -8,12 +8,13 @@
#define mozilla_a11y_logs_h__
#include "nscore.h"
#include "nsAString.h"
#include "nsStringFwd.h"
class nsIDocument;
class nsINode;
class nsIRequest;
class nsISelection;
class nsISupports;
class nsIWebProgress;
namespace mozilla {

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

@ -5,7 +5,6 @@
#include "NotificationController.h"
#include "Accessible-inl.h"
#include "DocAccessible-inl.h"
#include "TextLeafAccessible.h"
#include "TextUpdater.h"

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

@ -15,12 +15,9 @@
#include "Logging.h"
#endif
class nsIContent;
namespace mozilla {
namespace a11y {
class Accessible;
class DocAccessible;
/**

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

@ -7,8 +7,6 @@
#include "nsIAccessibleRole.h"
#include "Role.h"
#include "mozilla/Assertions.h"
using namespace mozilla::a11y;
#define ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role, nameRule) \

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

@ -10,17 +10,15 @@
#include "nsAccUtils.h"
#include "nsCoreUtils.h"
#include "nsIAccessibleEvent.h"
#include "RootAccessible.h"
#include "nsCaret.h"
#include "nsIAccessibleTypes.h"
#include "nsIDOMDocument.h"
#include "nsIDOMHTMLAnchorElement.h"
#include "nsIDOMHTMLTextAreaElement.h"
#include "nsIFrame.h"
#include "nsIPresShell.h"
#include "nsISelectionPrivate.h"
#include "nsServiceManagerUtils.h"
#include "mozilla/Selection.h"
#include "mozilla/dom/Element.h"
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -6,15 +6,14 @@
#include "TextAttrs.h"
#include "Accessible-inl.h"
#include "HyperTextAccessibleWrap.h"
#include "nsAccUtils.h"
#include "nsCoreUtils.h"
#include "StyleInfo.h"
#include "gfxFont.h"
#include "gfxUserFontSet.h"
#include "nsFontMetrics.h"
#include "nsLayoutUtils.h"
#include "HyperTextAccessible.h"
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -6,7 +6,7 @@
#ifndef mozilla_a11y_TreeWalker_h_
#define mozilla_a11y_TreeWalker_h_
#include "nsAutoPtr.h"
#include <stdint.h>
class nsIContent;

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

@ -15,13 +15,10 @@
#include "Role.h"
#include "States.h"
#include "TextLeafAccessible.h"
#include "nsIMutableArray.h"
#include "nsIDOMXULContainerElement.h"
#include "nsIDOMXULSelectCntrlEl.h"
#include "nsIDOMXULSelectCntrlItemEl.h"
#include "nsWhitespaceTokenizer.h"
#include "nsComponentManagerUtils.h"
#include "nsIPersistentProperties2.h"
#include "mozilla/dom/Element.h"
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -7,23 +7,21 @@
#define nsAccUtils_h_
#include "mozilla/a11y/Accessible.h"
#include "nsIAccessibleText.h"
#include "nsAccessibilityService.h"
#include "nsCoreUtils.h"
#include "mozilla/dom/Element.h"
#include "nsIDocShell.h"
#include "nsIPersistentProperties2.h"
#include "nsIPresShell.h"
#include "nsPoint.h"
struct nsRoleMapEntry;
namespace mozilla {
namespace dom {
class Element;
}
namespace a11y {
class Accessible;
class HyperTextAccessible;
class DocAccessible;

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

@ -5,20 +5,11 @@
#include "nsAccessNode.h"
#include "nsAccessibilityService.h"
#include "nsAccUtils.h"
#include "nsCoreUtils.h"
#include "RootAccessible.h"
#include "nsIDocShell.h"
#include "nsIDOMWindow.h"
#include "nsIFrame.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsIPresShell.h"
#include "nsIServiceManager.h"
#include "nsFocusManager.h"
#include "nsPresContext.h"
#include "mozilla/Services.h"
using namespace mozilla::a11y;

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

@ -10,14 +10,10 @@
#ifndef _nsAccessNode_H_
#define _nsAccessNode_H_
#include "nsIAccessibleTypes.h"
#include "nsINode.h"
class nsIContent;
class nsIDocShellTreeItem;
class nsIFrame;
class nsIPresShell;
class nsPresContext;
namespace mozilla {
namespace a11y {

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

@ -6,7 +6,6 @@
#include "nsAccessibilityService.h"
// NOTE: alphabetically ordered
#include "Accessible-inl.h"
#include "ApplicationAccessibleWrap.h"
#include "ARIAGridAccessibleWrap.h"
#include "ARIAMap.h"
@ -20,13 +19,18 @@
#include "HTMLSelectAccessible.h"
#include "HTMLTableAccessibleWrap.h"
#include "HyperTextAccessibleWrap.h"
#include "RootAccessible.h"
#include "nsAccessiblePivot.h"
#include "nsAccUtils.h"
#include "nsAttrName.h"
#include "nsEventShell.h"
#include "nsIURI.h"
#include "OuterDocAccessible.h"
#include "Platform.h"
#include "Role.h"
#ifdef MOZ_ACCESSIBILITY_ATK
#include "RootAccessibleWrap.h"
#endif
#include "States.h"
#include "Statistics.h"
#include "TextLeafAccessibleWrap.h"
@ -38,6 +42,7 @@
#ifdef XP_WIN
#include "mozilla/a11y/Compatibility.h"
#include "HTMLWin32ObjectAccessible.h"
#include "mozilla/StaticPtr.h"
#endif
#ifdef A11Y_LOG
@ -48,25 +53,18 @@
#include "nsExceptionHandler.h"
#endif
#include "nsIDOMDocument.h"
#include "nsIDOMHTMLObjectElement.h"
#include "nsIDOMXULElement.h"
#include "nsImageFrame.h"
#include "nsIObserverService.h"
#include "nsLayoutUtils.h"
#include "nsNPAPIPluginInstance.h"
#include "nsObjectFrame.h"
#include "nsSVGPathGeometryFrame.h"
#include "nsTreeBodyFrame.h"
#include "nsTreeColumns.h"
#include "nsTreeUtils.h"
#include "nsBindingManager.h"
#include "nsXBLPrototypeBinding.h"
#include "nsXBLBinding.h"
#include "mozilla/dom/Element.h"
#include "mozilla/Preferences.h"
#include "mozilla/Services.h"
#include "mozilla/StaticPtr.h"
#include "mozilla/Util.h"
#include "nsDeckFrame.h"
@ -83,6 +81,10 @@
#include "XULTreeGridAccessibleWrap.h"
#endif
#if defined(XP_WIN) || defined(MOZ_ACCESSIBILITY_ATK)
#include "nsNPAPIPluginInstance.h"
#endif
using namespace mozilla;
using namespace mozilla::a11y;
@ -1433,6 +1435,12 @@ nsAccessibilityService::CreateHTMLAccessibleByMarkup(nsIFrame* aFrame,
return accessible.forget();
}
if (tag == nsGkAtoms::label) {
nsRefPtr<Accessible> accessible =
new HTMLLabelAccessible(aContent, document);
return accessible.forget();
}
if (tag == nsGkAtoms::output) {
nsRefPtr<Accessible> accessible =
new HTMLOutputAccessible(aContent, document);
@ -1492,9 +1500,6 @@ nsAccessibilityService::CreateAccessibleByFrameType(nsIFrame* aFrame,
case eHTMLImageMapType:
newAcc = new HTMLImageMapAccessible(aContent, document);
break;
case eHTMLLabelType:
newAcc = new HTMLLabelAccessible(aContent, document);
break;
case eHTMLLiType:
if (aContext->IsList() &&
aContext->GetContent() == aContent->GetParent()) {

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

@ -6,15 +6,10 @@
#include "nsAccessiblePivot.h"
#include "DocAccessible.h"
#include "HyperTextAccessible.h"
#include "nsAccUtils.h"
#include "States.h"
#include "nsArrayUtils.h"
#include "nsComponentManagerUtils.h"
#include "nsISupportsPrimitives.h"
using namespace mozilla::a11y;

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

@ -15,7 +15,6 @@
#include "nsCycleCollectionParticipant.h"
#include "mozilla/Attributes.h"
class nsIAccessibleTraversalRule;
class RuleCache;
/**

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

@ -7,8 +7,6 @@
#include "nsIAccessibleTypes.h"
#include "nsAccessNode.h"
#include "nsIBaseWindow.h"
#include "nsIDocShellTreeOwner.h"
#include "nsIDocument.h"
@ -16,10 +14,9 @@
#include "nsIDOMHTMLDocument.h"
#include "nsIDOMHTMLElement.h"
#include "nsRange.h"
#include "nsIDOMWindow.h"
#include "nsIBoxObject.h"
#include "nsIDOMXULElement.h"
#include "nsIDocShell.h"
#include "nsIContentViewer.h"
#include "nsEventListenerManager.h"
#include "nsIPresShell.h"
#include "nsPresContext.h"
@ -27,16 +24,12 @@
#include "nsEventStateManager.h"
#include "nsISelectionPrivate.h"
#include "nsISelectionController.h"
#include "nsPIDOMWindow.h"
#include "nsGUIEvent.h"
#include "nsView.h"
#include "nsLayoutUtils.h"
#include "nsGkAtoms.h"
#include "nsDOMTouchEvent.h"
#include "nsComponentManagerUtils.h"
#include "nsIInterfaceRequestorUtils.h"
#include "mozilla/dom/Element.h"
#include "nsITreeBoxObject.h"
#include "nsITreeColumns.h"

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

@ -7,7 +7,6 @@
#define nsCoreUtils_h_
#include "nsIContent.h"
#include "nsIBoxObject.h"
#include "nsIPresShell.h"
#include "nsIDOMDOMStringList.h"
@ -15,6 +14,7 @@
#include "nsTArray.h"
class nsRange;
class nsIBoxObject;
class nsIFrame;
class nsIDocShell;
class nsITreeColumn;

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

@ -9,14 +9,9 @@
#include "Accessible-inl.h"
#include "AccIterator.h"
#include "nsAccessibilityService.h"
#include "nsAccUtils.h"
#include "nsStyleStructInlines.h"
#include "nsCoreUtils.h"
#include "nsIDOMXULLabeledControlEl.h"
#include "nsArrayUtils.h"
using namespace mozilla::a11y;
/**

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

@ -9,7 +9,6 @@
#define _nsTextEquivUtils_H_
#include "Accessible.h"
#include "nsIStringBundle.h"
#include "Role.h"
class nsIContent;

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

@ -12,6 +12,7 @@
#include "States.h"
#include "nsIMutableArray.h"
#include "nsIPersistentProperties2.h"
#include "nsComponentManagerUtils.h"
using namespace mozilla;

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

@ -11,6 +11,7 @@
#include "nsAccessibilityService.h"
#include "NotificationController.h"
#include "States.h"
#include "nsIScrollableFrame.h"
#ifdef A11Y_LOG
#include "Logging.h"

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

@ -32,6 +32,7 @@
#include "nsIFrame.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsINameSpaceManager.h"
#include "nsIPersistentProperties2.h"
#include "nsIPresShell.h"
#include "nsIServiceManager.h"
#include "nsViewManager.h"

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

@ -25,6 +25,7 @@
#include "nsFrameSelection.h"
#include "nsILineIterator.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsIPersistentProperties2.h"
#include "nsIPlaintextEditor.h"
#include "nsIScrollableFrame.h"
#include "nsIServiceManager.h"

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

@ -18,6 +18,7 @@
#include "nsIPresShell.h"
#include "nsIServiceManager.h"
#include "nsIDOMHTMLImageElement.h"
#include "nsIPersistentProperties2.h"
#include "nsPIDOMWindow.h"
#include "nsIURI.h"

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

@ -8,6 +8,7 @@
#include "DocAccessible.h"
#include "nsAccUtils.h"
#include "nsIAccessibleRelation.h"
#include "nsIPersistentProperties2.h"
#include "nsTextEquivUtils.h"
#include "Relation.h"
#include "Role.h"

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

@ -23,6 +23,7 @@
#include "nsIEditor.h"
#include "nsIFormControl.h"
#include "nsINameSpaceManager.h"
#include "nsIPersistentProperties2.h"
#include "nsISelectionController.h"
#include "jsapi.h"
#include "nsIServiceManager.h"

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

@ -28,6 +28,7 @@
#include "nsIDOMHTMLCollection.h"
#include "nsIDocument.h"
#include "nsIMutableArray.h"
#include "nsIPersistentProperties2.h"
#include "nsIPresShell.h"
#include "nsITableCellLayout.h"
#include "nsFrameSelection.h"

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

@ -13,6 +13,7 @@
#include "nsIAccessibleRelation.h"
#include "nsIAccessibleText.h"
#include "nsIAccessibleEditableText.h"
#include "nsIPersistentProperties2.h"
#include "Relation.h"
#include "Role.h"
#include "RootAccessible.h"

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

@ -6,6 +6,7 @@
#include "Accessible-inl.h"
#include "AccessibleWrap.h"
#include "TextLeafAccessible.h"
#include "nsIAccessibleTypes.h"
#include "nsCocoaUtils.h"
#include "nsObjCExceptions.h"

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

@ -13,6 +13,7 @@
#include "HyperTextAccessibleWrap.h"
#include "nsIPersistentProperties2.h"
#include "nsIAccessibleTypes.h"
using namespace mozilla::a11y;

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

@ -42,6 +42,8 @@
#include "AccessibleRole.h"
#include "AccessibleStates.h"
#include "oleacc.h"
#include "nsIAccessibleTypes.h"
#include "nsIPersistentProperties2.h"
using namespace mozilla;
using namespace mozilla::a11y;

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

@ -279,7 +279,7 @@ DocAccessibleWrap::DoInitialUpdate()
// Create window for tab document.
if (mDocFlags & eTabDocument) {
mozilla::dom::TabChild* tabChild =
mozilla::dom::GetTabChildFrom(mDocumentNode->GetShell());
mozilla::dom::TabChild::GetFrom(mDocumentNode->GetShell());
a11y::RootAccessible* rootDocument = RootAccessible();

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

@ -11,6 +11,7 @@
#include "nsAttrName.h"
#include "nsCoreUtils.h"
#include "nsIAccessibleTypes.h"
#include "nsIDOMHTMLElement.h"
#include "nsIDOMCSSStyleDeclaration.h"
#include "nsServiceManagerUtils.h"

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

@ -16,6 +16,7 @@
#include "nsPresContext.h"
#include "nsLayoutUtils.h"
#include "gfxFont.h"
#include "nsIAccessibleTypes.h"
using namespace mozilla::a11y;

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

@ -28,6 +28,7 @@
#include "nsINameSpaceManager.h"
#include "nsITextControlFrame.h"
#include "nsMenuPopupFrame.h"
#include "mozilla/dom/Element.h"
using namespace mozilla::a11y;

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

@ -21,6 +21,7 @@
#include "nsIDOMXULPopupElement.h"
#include "nsIDOMXULSelectCntrlItemEl.h"
#include "nsIMutableArray.h"
#include "nsIPersistentProperties2.h"
using namespace mozilla::a11y;

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

@ -10,6 +10,7 @@
#include "States.h"
#include "nsIFrame.h"
#include "mozilla/dom/Element.h"
using namespace mozilla::a11y;

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

@ -21,6 +21,7 @@
#include "nsIAccessibleRelation.h"
#include "nsIAutoCompleteInput.h"
#include "nsIAutoCompletePopup.h"
#include "nsIBoxObject.h"
#include "nsIDOMXULElement.h"
#include "nsIDOMXULMenuListElement.h"
#include "nsIDOMXULMultSelectCntrlEl.h"

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

@ -14,7 +14,9 @@
#include "Role.h"
#include "States.h"
#include "nsIBoxObject.h"
#include "nsIMutableArray.h"
#include "nsIPersistentProperties2.h"
#include "nsITreeSelection.h"
#include "nsComponentManagerUtils.h"

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

@ -293,11 +293,12 @@ function eventQueue(aEventType)
{
// Some scenario was matched, we wait on next invoker processing.
if (this.mNextInvokerStatus == kInvokerCanceled) {
this.mNextInvokerStatus = kInvokerNotScheduled;
this.setInvokerStatus(kInvokerNotScheduled,
"scenario was matched, wait for next invoker activation");
return;
}
this.mNextInvokerStatus = kInvokerNotScheduled;
this.setInvokerStatus(kInvokerNotScheduled, "the next invoker is processed now");
// Finish processing of the current invoker if any.
var testFailed = false;
@ -433,7 +434,7 @@ function eventQueue(aEventType)
this.processNextInvokerInTimeout =
function eventQueue_processNextInvokerInTimeout(aUncondProcess)
{
this.mNextInvokerStatus = kInvokerPending;
this.setInvokerStatus(kInvokerPending, "Process next invoker in timeout");
// No need to wait extra timeout when a) we know we don't need to do that
// and b) there's no any single unexpected event.
@ -541,15 +542,22 @@ function eventQueue(aEventType)
}
// If we don't have more events to wait then schedule next invoker.
if (this.hasMatchedScenario() &&
(this.mNextInvokerStatus == kInvokerNotScheduled)) {
this.processNextInvokerInTimeout();
if (this.hasMatchedScenario()) {
if (this.mNextInvokerStatus == kInvokerNotScheduled) {
this.processNextInvokerInTimeout();
} else if (this.mNextInvokerStatus == kInvokerCanceled) {
this.setInvokerStatus(kInvokerPending,
"Full match. Void the cancelation of next invoker processing");
}
return;
}
// If we have scheduled a next invoker then cancel in case of match.
if ((this.mNextInvokerStatus == kInvokerPending) && hasMatchedCheckers)
this.mNextInvokerStatus = kInvokerCanceled;
if ((this.mNextInvokerStatus == kInvokerPending) && hasMatchedCheckers) {
this.setInvokerStatus(kInvokerCanceled,
"Cancel the scheduled invoker in case of match");
}
}
// Helpers
@ -622,6 +630,17 @@ function eventQueue(aEventType)
return true;
}
this.isUnexpectedEventScenario =
function eventQueue_isUnexpectedEventsScenario(aScenario)
{
for (var idx = 0; idx < aScenario.length; idx++) {
if (!aScenario[idx].unexpected)
break;
}
return idx == aScenario.length;
}
this.hasUnexpectedEventsScenario =
function eventQueue_hasUnexpectedEventsScenario()
{
@ -629,23 +648,19 @@ function eventQueue(aEventType)
return true;
for (var scnIdx = 0; scnIdx < this.mScenarios.length; scnIdx++) {
var eventSeq = this.mScenarios[scnIdx];
for (var idx = 0; idx < eventSeq.length; idx++) {
if (!eventSeq[idx].unexpected)
break;
}
if (idx == eventSeq.length)
if (this.isUnexpectedEventScenario(this.mScenarios[scnIdx]))
return true;
}
return false;
}
this.hasMatchedScenario =
function eventQueue_hasMatchedScenario()
{
for (var scnIdx = 0; scnIdx < this.mScenarios.length; scnIdx++) {
if (!this.areExpectedEventsLeft(this.mScenarios[scnIdx]))
var scn = this.mScenarios[scnIdx];
if (!this.isUnexpectedEventScenario(scn) && !this.areExpectedEventsLeft(scn))
return true;
}
return false;
@ -775,6 +790,14 @@ function eventQueue(aEventType)
return invoker.getID();
}
this.setInvokerStatus = function eventQueue_setInvokerStatus(aStatus, aLogMsg)
{
this.mNextInvokerStatus = aStatus;
// Uncomment it to debug invoker processing logic.
//gLogger.log(eventQueue.invokerStatusToMsg(aStatus, aLogMsg));
}
this.mDefEventType = aEventType;
this.mInvokers = new Array();
@ -872,24 +895,10 @@ eventQueue.isSameEvent = function eventQueue_isSameEvent(aChecker, aEvent)
!(aEvent instanceof nsIAccessibleStateChangeEvent);
}
eventQueue.logEvent = function eventQueue_logEvent(aOrigEvent, aMatchedChecker,
aScenarioIdx, aEventIdx,
aAreExpectedEventsLeft,
aInvokerStatus)
eventQueue.invokerStatusToMsg =
function eventQueue_invokerStatusToMsg(aInvokerStatus, aMsg)
{
if (!gLogger.isEnabled()) // debug stuff
return;
// Dump DOM event information. Skip a11y event since it is dumped by
// gA11yEventObserver.
if (aOrigEvent instanceof nsIDOMEvent) {
var info = "Event type: " + eventQueue.getEventTypeAsString(aOrigEvent);
info += ". Target: " + eventQueue.getEventTargetDescr(aOrigEvent);
gLogger.logToDOM(info);
}
var msg = "unhandled expected events: " + aAreExpectedEventsLeft +
", invoker status: ";
var msg = "invoker status: ";
switch (aInvokerStatus) {
case kInvokerNotScheduled:
msg += "not scheduled";
@ -902,23 +911,37 @@ eventQueue.logEvent = function eventQueue_logEvent(aOrigEvent, aMatchedChecker,
break;
}
gLogger.logToConsole(msg);
gLogger.logToDOM(msg);
if (aMsg)
msg += " (" + aMsg + ")";
if (!aMatchedChecker)
return;
return msg;
}
var msg = "EQ: ";
var emphText = "matched ";
eventQueue.logEvent = function eventQueue_logEvent(aOrigEvent, aMatchedChecker,
aScenarioIdx, aEventIdx,
aAreExpectedEventsLeft,
aInvokerStatus)
{
// Dump DOM event information. Skip a11y event since it is dumped by
// gA11yEventObserver.
if (aOrigEvent instanceof nsIDOMEvent) {
var info = "Event type: " + eventQueue.getEventTypeAsString(aOrigEvent);
info += ". Target: " + eventQueue.getEventTargetDescr(aOrigEvent);
gLogger.logToDOM(info);
}
var infoMsg = "unhandled expected events: " + aAreExpectedEventsLeft +
", " + eventQueue.invokerStatusToMsg(aInvokerStatus);
var currType = eventQueue.getEventTypeAsString(aMatchedChecker);
var currTargetDescr = eventQueue.getEventTargetDescr(aMatchedChecker);
var consoleMsg = "*****\nScenario " + aScenarioIdx +
", event " + aEventIdx + " matched: " + currType + "\n*****";
", event " + aEventIdx + " matched: " + currType + "\n" + infoMsg + "\n*****";
gLogger.logToConsole(consoleMsg);
msg += " event, type: " + currType + ", target: " + currTargetDescr;
var emphText = "matched ";
var msg = "EQ event, type: " + currType + ", target: " + currTargetDescr +
", " + infoMsg;
gLogger.logToDOM(msg, true, emphText);
}

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

@ -20,7 +20,7 @@
src="../events.js"></script>
<script type="application/javascript">
gA11yEventDumpToConsole = true; // debugging stuff
//gA11yEventDumpToConsole = true; // debugging stuff
function loadFile()
{

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

@ -73,7 +73,7 @@ pref("mozilla.widget.force-24bpp", true);
pref("mozilla.widget.use-buffer-pixmap", true);
pref("mozilla.widget.disable-native-theme", true);
pref("layout.reflow.synthMouseMove", false);
pref("layers.force-tiles", false);
pref("layers.force-tiles", true);
/* download manager (don't show the window or alert) */
pref("browser.download.useDownloadDir", true);
@ -747,9 +747,23 @@ pref("ping.manifestURL", "https://marketplace.firefox.com/packaged.webapp");
// Enable the disk space watcher
pref("disk_space_watcher.enabled", true);
// SNTP preferences.
pref("network.sntp.maxRetryCount", 10);
pref("network.sntp.refreshPeriod", 86400); // In seconds.
pref("network.sntp.pools", // Servers separated by ';'.
"0.pool.ntp.org;1.pool.ntp.org;2.pool.ntp.org;3.pool.ntp.org");
pref("network.sntp.port", 123);
pref("network.sntp.timeout", 30); // In seconds.
// Enable promise
pref("dom.promise.enabled", false);
// DOM Inter-App Communication API.
#ifdef MOZ_WIDGET_GONK
// Enable this only for gonk-specific build but not for desktop build.
pref("dom.inter-app-communication-api.enabled", true);
#endif
// Allow ADB to run for this many hours before disabling
// (only applies when marionette is disabled)
// 0 disables the timer.

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

@ -1069,10 +1069,14 @@ let CompositionManager = {
_isStarted: false,
_text: '',
_clauseAttrMap: {
'raw-input': domWindowUtils.COMPOSITION_ATTR_RAWINPUT,
'selected-raw-text': domWindowUtils.COMPOSITION_ATTR_SELECTEDRAWTEXT,
'converted-text': domWindowUtils.COMPOSITION_ATTR_CONVERTEDTEXT,
'selected-converted-text': domWindowUtils.COMPOSITION_ATTR_SELECTEDCONVERTEDTEXT
'raw-input':
Ci.nsICompositionStringSynthesizer.ATTR_RAWINPUT,
'selected-raw-text':
Ci.nsICompositionStringSynthesizer.ATTR_SELECTEDRAWTEXT,
'converted-text':
Ci.nsICompositionStringSynthesizer.ATTR_CONVERTEDTEXT,
'selected-converted-text':
Ci.nsICompositionStringSynthesizer.ATTR_SELECTEDCONVERTEDTEXT
},
setComposition: function cm_setComposition(element, text, cursor, clauses) {
@ -1081,20 +1085,14 @@ let CompositionManager = {
return;
}
let len = text.length;
if (cursor < 0) {
cursor = 0;
} else if (cursor > len) {
if (cursor > len) {
cursor = len;
}
let clauseLens = [len, 0, 0];
let clauseAttrs = [domWindowUtils.COMPOSITION_ATTR_RAWINPUT,
domWindowUtils.COMPOSITION_ATTR_RAWINPUT,
domWindowUtils.COMPOSITION_ATTR_RAWINPUT];
let clauseLens = [];
let clauseAttrs = [];
if (clauses) {
let remainingLength = len;
// Currently we don't support 4 or more clauses composition string.
let clauseNum = Math.min(3, clauses.length);
for (let i = 0; i < clauseNum; i++) {
for (let i = 0; i < clauses.length; i++) {
if (clauses[i]) {
let clauseLength = clauses[i].length || 0;
// Make sure the total clauses length is not bigger than that of the
@ -1103,16 +1101,19 @@ let CompositionManager = {
clauseLength = remainingLength;
}
remainingLength -= clauseLength;
clauseLens[i] = clauseLength;
clauseAttrs[i] = this._clauseAttrMap[clauses[i].selectionType] ||
domWindowUtils.COMPOSITION_ATTR_RAWINPUT;
clauseLens.push(clauseLength);
clauseAttrs.push(this._clauseAttrMap[clauses[i].selectionType] ||
Ci.nsICompositionStringSynthesizer.ATTR_RAWINPUT);
}
}
// If the total clauses length is less than that of the composition
// string, extend the last clause to the end of the composition string.
if (remainingLength > 0) {
clauseLens[2] += remainingLength;
clauseLens[clauseLens.length - 1] += remainingLength;
}
} else {
clauseLens.push(len);
clauseAttrs.push(Ci.nsICompositionStringSynthesizer.ATTR_RAWINPUT);
}
// Start composition if need to.
@ -1127,11 +1128,15 @@ let CompositionManager = {
this._text = text;
domWindowUtils.sendCompositionEvent('compositionupdate', text, '');
}
domWindowUtils.sendTextEvent(text,
clauseLens[0], clauseAttrs[0],
clauseLens[1], clauseAttrs[1],
clauseLens[2], clauseAttrs[2],
cursor, 0);
let compositionString = domWindowUtils.createCompositionStringSynthesizer();
compositionString.setString(text);
for (var i = 0; i < clauseLens.length; i++) {
compositionString.appendClause(clauseLens[i], clauseAttrs[i]);
}
if (cursor >= 0) {
compositionString.setCaret(cursor, 0);
}
compositionString.dispatchEvent();
},
endComposition: function cm_endComposition(text) {
@ -1142,9 +1147,12 @@ let CompositionManager = {
if (this._text !== text) {
domWindowUtils.sendCompositionEvent('compositionupdate', text, '');
}
let compositionString = domWindowUtils.createCompositionStringSynthesizer();
compositionString.setString(text);
// Set the cursor position to |text.length| so that the text will be
// committed before the cursor position.
domWindowUtils.sendTextEvent(text, 0, 0, 0, 0, 0, 0, text.length, 0);
compositionString.setCaret(text.length, 0);
compositionString.dispatchEvent();
domWindowUtils.sendCompositionEvent('compositionend', text, '');
this._text = '';
this._isStarted = false;

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

@ -317,8 +317,11 @@ let AdbController = {
// Check if we have a remote debugging session going on. If so, we won't
// disable adb even if the screen is locked.
let isDebugging = Object.keys(DebuggerServer._connections).length > 0;
this.debug("isDebugging=" + isDebugging);
let isDebugging = DebuggerServer._connections &&
Object.keys(DebuggerServer._connections).length > 0;
if (this.DEBUG) {
this.debug("isDebugging=" + isDebugging);
}
let enableAdb = this.remoteDebuggerEnabled &&
(!(this.lockEnabled && this.locked) || isDebugging);

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

@ -631,9 +631,18 @@ Services.obs.addObserver(function onSystemMessageOpenApp(subject, topic, data) {
shell.openAppForSystemMessage(msg);
}, 'system-messages-open-app', false);
Services.obs.addObserver(function(aSubject, aTopic, aData) {
Services.obs.addObserver(function onInterAppCommConnect(subject, topic, data) {
data = JSON.parse(data);
shell.sendChromeEvent({ type: "inter-app-comm-permission",
chromeEventID: data.callerID,
manifestURL: data.manifestURL,
keyword: data.keyword,
peers: data.appsToSelect });
}, 'inter-app-comm-select-app', false);
Services.obs.addObserver(function onFullscreenOriginChange(subject, topic, data) {
shell.sendChromeEvent({ type: "fullscreenoriginchange",
fullscreenorigin: aData });
fullscreenorigin: data });
}, "fullscreen-origin-change", false);
Services.obs.addObserver(function onWebappsStart(subject, topic, data) {
@ -700,6 +709,16 @@ var CustomEventManager = {
case 'captive-portal-login-cancel':
CaptivePortalLoginHelper.handleEvent(detail);
break;
case 'inter-app-comm-permission':
Services.obs.notifyObservers(null, 'inter-app-comm-select-app-result',
JSON.stringify({ callerID: detail.chromeEventID,
keyword: detail.keyword,
manifestURL: detail.manifestURL,
selectedApps: detail.peers }));
break;
case 'inputmethod-update-layouts':
KeyboardHelper.handleEvent(detail);
break;
}
}
}
@ -1052,6 +1071,14 @@ let RemoteDebugger = {
}
}
let KeyboardHelper = {
handleEvent: function keyboard_handleEvent(aMessage) {
let data = aMessage.data;
Keyboard.setLayouts(data.layouts);
}
};
// This is the backend for Gaia's screenshot feature. Gaia requests a
// screenshot by sending a mozContentEvent with detail.type set to
// 'take-screenshot'. Then we take a screenshot and send a
@ -1189,6 +1216,15 @@ window.addEventListener('ContentStart', function update_onContentStart() {
}, "audio-channel-changed", false);
})();
(function defaultVolumeChannelChangedTracker() {
Services.obs.addObserver(function(aSubject, aTopic, aData) {
shell.sendChromeEvent({
type: 'default-volume-channel-changed',
channel: aData
});
}, "default-volume-channel-changed", false);
})();
(function visibleAudioChannelChangedTracker() {
Services.obs.addObserver(function(aSubject, aTopic, aData) {
shell.sendChromeEvent({

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

@ -238,6 +238,10 @@ let Keyboard = {
},
getContext: function keyboardGetContext(msg) {
if (this._layouts) {
ppmm.broadcastAsyncMessage('Keyboard:LayoutsChange', this._layouts);
}
this.sendAsyncMessage('Forms:GetContext', msg.data);
},
@ -247,6 +251,19 @@ let Keyboard = {
endComposition: function keyboardEndComposition(msg) {
this.sendAsyncMessage('Forms:EndComposition', msg.data);
},
/**
* Get the number of keyboard layouts active from keyboard_manager
*/
_layouts: null,
setLayouts: function keyboardSetLayoutCount(layouts) {
// The input method plugins may not have loaded yet,
// cache the layouts so on init we can respond immediately instead
// of going back and forth between keyboard_manager
this._layouts = layouts;
ppmm.broadcastAsyncMessage('Keyboard:LayoutsChange', layouts);
}
};

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

@ -207,6 +207,8 @@ MozKeyboard.prototype = {
function MozInputMethodManager() { }
MozInputMethodManager.prototype = {
_supportsSwitching: false,
classID: Components.ID("{7e9d7280-ef86-11e2-b778-0800200c9a66}"),
QueryInterface: XPCOMUtils.generateQI([
@ -230,7 +232,7 @@ MozInputMethodManager.prototype = {
},
supportsSwitching: function() {
return true;
return this._supportsSwitching;
},
hide: function() {
@ -247,6 +249,7 @@ function MozInputMethod() { }
MozInputMethod.prototype = {
_inputcontext: null,
_layouts: {},
classID: Components.ID("{4607330d-e7d2-40a4-9eb8-43967eae0142}"),
@ -284,6 +287,7 @@ MozInputMethod.prototype = {
cpmm.addMessageListener('Keyboard:FocusChange', this);
cpmm.addMessageListener('Keyboard:SelectionChange', this);
cpmm.addMessageListener('Keyboard:GetContext:Result:OK', this);
cpmm.addMessageListener('Keyboard:LayoutsChange', this);
// If there already is an active context, then this will trigger
// a GetContext:Result:OK event, and we can initialize ourselves.
@ -296,6 +300,7 @@ MozInputMethod.prototype = {
cpmm.removeMessageListener('Keyboard:FocusChange', this);
cpmm.removeMessageListener('Keyboard:SelectionChange', this);
cpmm.removeMessageListener('Keyboard:GetContext:Result:OK', this);
cpmm.removeMessageListener('Keyboard:LayoutsChange', this);
this._window = null;
this._mgmt = null;
@ -320,6 +325,9 @@ MozInputMethod.prototype = {
case 'Keyboard:GetContext:Result:OK':
this.setInputContext(json);
break;
case 'Keyboard:LayoutsChange':
this._layouts = json;
break;
}
},
@ -349,9 +357,14 @@ MozInputMethod.prototype = {
if (this._inputcontext) {
this._inputcontext.destroy();
this._inputcontext = null;
this._mgmt._supportsSwitching = false;
}
if (data) {
this._mgmt._supportsSwitching = this._layouts[data.type] ?
this._layouts[data.type] > 1 :
false;
this._inputcontext = new MozInputContext(data);
this._inputcontext.init(this._window);
}

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

@ -9,8 +9,17 @@ this.EXPORTED_SYMBOLS = ["WebappsUpdater"];
const Cc = Components.classes;
const Cu = Components.utils;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyServiceGetter(this, "settings",
"@mozilla.org/settingsService;1",
"nsISettingsService");
function debug(aStr) {
//dump("--*-- WebappsUpdater: " + aStr);
}
this.WebappsUpdater = {
_checkingApps: false,
_pendingEvents: [],
@ -29,7 +38,7 @@ this.WebappsUpdater = {
let browser = Services.wm.getMostRecentWindow("navigator:browser");
if (!browser) {
this._pendingEvents.push(detail);
dump("Warning: Couldn't send update event " + aType +
debug("Warning: Couldn't send update event " + aType +
": no content browser. Will send again when content becomes available.");
return false;
}
@ -39,8 +48,8 @@ this.WebappsUpdater = {
},
_appsUpdated: function(aApps) {
dump("appsUpdated: " + aApps.length + " apps to update");
let lock = Services.settings.createLock();
debug("appsUpdated: " + aApps.length + " apps to update");
let lock = settings.createLock();
lock.set("apps.updateStatus", "check-complete", null);
this.sendChromeEvent("apps-update-check", { apps: aApps });
this._checkingApps = false;
@ -49,7 +58,7 @@ this.WebappsUpdater = {
// Trigger apps update check and wait for all to be done before
// notifying gaia.
updateApps: function() {
dump("updateApps (" + this._checkingApps + ")");
debug("updateApps (" + this._checkingApps + ")");
// Don't start twice.
if (this._checkingApps) {
return;

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

@ -1,4 +1,4 @@
{
"revision": "9e3d2b3f6706916168b9ad9bb96084c01df8771f",
"revision": "4ab5602bc5338c921426cf44e8fbc1b2ddd69290",
"repo_path": "/integration/gaia-central"
}

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

@ -1,17 +1,18 @@
{
"config_version": 1,
"tooltool_manifest": "releng-otoro.tt",
"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", "java-1.6.0-openjdk-devel"],
"config_version": 2,
"tooltool_manifest": "releng-mako.tt",
"mock_target": "mozilla-centos6-x86_64",
"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", "glibc-devel.i686", "libstdc++.i686", "zlib-devel.i686", "ncurses-devel.i686", "libX11-devel.i686", "mesa-libGL-devel.i686", "mesa-libGL-devel", "libX11-devel", "git", "libxml2"],
"mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
"build_targets": [],
"upload_files": [
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
"{objdir}/dist/b2g-*.tar.gz",
"{workdir}/sources.xml"
],
"zip_files": [
["{workdir}/out/target/product/otoro/*.img", "out/target/product/otoro/"],
["{workdir}/boot.img", "out/target/product/otoro/"],
["{workdir}/out/target/product/mako/*.img", "out/target/product/mako/"],
["{workdir}/boot.img", "out/target/product/mako/"],
"{workdir}/flash.sh",
"{workdir}/load-config.sh",
"{workdir}/.config",
@ -22,6 +23,9 @@
"MOZILLA_OFFICIAL": "1",
"B2GUPDATER": "1"
},
"b2g_manifest": "nexus-4.xml",
"b2g_manifest_branch": "master",
"additional_source_tarballs": [],
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
"gaia": {
"l10n": {

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

@ -0,0 +1,21 @@
[
{
"size": 13111,
"digest": "09373556ddb4325897b9e008184228f9088b4c8c22bacf4fa2d39793ecfd264316ad69c2bc8082229ad7fdb80f89154c7b995a60f9b18beb1847e7111e7e69b2",
"algorithm": "sha512",
"filename": "broadcom-mako-jwr66v-cbde0d61.tgz"
},
{
"size": 12658359,
"digest": "2483df1a949df53d02ca33a87731cedd8f7cd07114d723bde1addf63fd71154c23b6f11f64f390b9849121725fb53a402db8df2f96a3673ec52416f45260f79d",
"algorithm": "sha512",
"filename": "qcom-mako-jwr66v-30ef957c.tgz"
},
{
"size": 378532,
"digest": "27aced8feb0e757d61df37839e62410ff30a059cfa8f04897d29ab74b787c765313acf904b1f9cf311c3e682883514df7da54197665251ef9b8bdad6bd0f62c5",
"algorithm": "sha512",
"filename": "lge-mako-jwr66v-985845e4.tgz"
}
]

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

@ -1,14 +0,0 @@
[
{
"size": 896371048,
"digest": "73e89a23226726739c60b2e5be00da9d24d7ab8a39d60cf4c84a0ebf1d16a0cb1ff92440e72a6bdeef44cc7252a13d0bdd8a08770c858a5abce3f0bcea7a17ce",
"algorithm": "sha512",
"filename": "gonk.tar.xz"
},
{
"size": 4139008,
"digest": "6f65553e882316582b944e46c659915a1b907c4a326104cb31d81356330dddacba757e3eafbd282063da0e670c3c5d6b9a0905ab88da84b47848d810c37571cb",
"algorithm": "sha512",
"filename": "boot.img"
}
]

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

@ -1,229 +0,0 @@
All the parts of B2G written by Mozilla are free software, under the MPL 2 and
other licenses.
However, this directory contains system images for use with the PandaBoard, and
these images require proprietary drivers to function. The full license terms
for those drivers are included below. The "Authorized Android Enabled Device"
is the PandaBoard. Your attention is particularly drawn to the fact that the
license only gives permission for Imagination Technologies' software (the
drivers) to be used on certain devices, and only non-commercially (section 2a).
Alternative terms may be available from Imagination Technologies.
THIS DEVELOPER SOFTWARE LICENSE AGREEMENT (THE "AGREEMENT") IS A LEGALLY
BINDING AGREEMENT BETWEEN IMAGINATION TECHNOLOGIES LTD. ("LICENSOR") AND
YOU OR THE LEGAL ENTITY YOU REPRESENT ("You" or its possessive, "Your"). BY
TYPING "I ACCEPT" WHERE INDICATED YOU ACKNOWLEDGE THAT YOU HAVE READ THIS
AGREEMENT, UNDERSTAND IT AND AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS. IF
YOU DO NOT AGREE TO THESE TERMS YOU MUST DISCONTINUE THE INSTALLATION PROCESS
AND YOU SHALL NOT USE THE SOFTWARE OR RETAIN ANY COPIES OF THE SOFTWARE OR
DOCUMENTATION. ANY USE OR POSSESSION OF THE SOFTWARE BY YOU IS SUBJECT TO THE
TERMS AND CONDITIONS SET FORTH IN THIS AGREEMENT. IF THE SOFTWARE IS INSTALLED
ON A COMPUTER OWNED BY A CORPORATION OR OTHER LEGAL ENTITY, THEN YOU REPRESENT
AND WARRANT THAT YOU HAVE THE AUTHORITY TO BIND SUCH ENTITY TO THE TERMS AND
CONDITIONS OF THIS AGREEMENT.
1. Special Definitions
a. The term "Android" means the open source mobile platform, software
stack, operating system, middleware, application programming
interfaces and mobile applications under the trade-name "Android"
distributed at Android.com.
b. The term "Android Applications" means a software application or
open-source contribution developed by You, designed to operate with
Android that does not contain or incorporate any of the Software.
c. The term "Authorized Android Enabled Device" means only the device
identified on the site from which You downloaded the Software.
The term "Software" means the Licensor's proprietary software and
libraries in object code form, designed for use on the Authorized
Android Enabled Device.
d. The term "Authorized Android Enabled Device Software" means a
packaged build for Authorized Android Enabled Devices, consisting of
files suitable for installation on an Authorized Android Enabled
Device using a mechanism such as fastboot mode or recovery mode.
2. License Grant
a. Subject to the terms of this Agreement, Licensor hereby grants to
You, free of charge, a non-exclusive, non-sublicensable,
non-transferable, limited license, during the term of this Agreement,
to download, install and use the Software internally in
machine-readable (i.e., object code) form and the Documentation for
non-commercial use on an Authorized Android Enabled Device and
non-commercial redistribution of the Authorized Android Enabled
Device Software (the "Limited Purpose"). You may grant your end users
the right to use the Software for the Limited Purpose. The license to
the Software granted to You hereunder is solely for the Limited
Purpose set forth in this section, and the Software shall not be used
for any other purpose.
3. Restrictions
a. Retention of Rights. The entire right, title and interest in the
Software shall remain with Licensor and, unless specified in writing
hereunder, no rights are granted to any of the Software. Except for
the right to use the Software for the Limited Purpose, the delivery
of the Software to You does not convey to You any intellectual
property rights in the Software, including, but not limited to any
rights under any patent, trademark, copyright, or trade secret.
Neither the delivery of the Software to You nor any terms set forth
herein shall be construed to grant to You, either expressly, by
implication or by way of estoppel, any license under any patents or
other intellectual property rights covering or relating to any other
product or invention or any combination of the Software with any
other product. Any rights not expressly granted to You herein are
reserved by Licensor.
b. No Commercialization or Distribution of the Software and
Documentation. Except as expressly provided in Section 2 of this
Agreement, You shall have no right to (i) copy, disclose, distribute,
publically perform, publically display, transfer, alter, modify,
translate, disassemble, decompile, reverse engineer, or adapt the
Software and Documentation, or any portion thereof, or create any
derivative works based thereon; (ii) rent, lease, assign, sublicense,
resell, disclose or otherwise transfer the Software and Documentation
in whole or in part to any third party (iii) use the Software and
Documentation except for the Limited Purpose, (iv) remove or alter
any of the copyright or proprietary notices contained in any of the
Software and Documentation. For the purposes of clarity, nothing in
this Agreement prohibits You from making and distributing Android
Applications under commercial or non-commercial terms, provided that
You shall not contain, incorporate, and/or compile the Software or
any of its derivative works, in whole or in part, into Your Android
Applications and/or any software/devices created by You or by third
parties acting on Your behalf. You and any such third party shall
comply with all of the terms and conditions of this Agreement.
c. No Reverse Engineering. Except for any portions of the Software
provided to You in source code format and except for any third party
code distributed with the Software that is licensed under contrary
terms, You will not reverse engineer, disassemble,
decompile, or translate the Software, or otherwise attempt to derive
the source code version of the Software, except if and to the extent
expressly permitted under any applicable law.
d. Third Party Software. You agree that Android may contain third party
software. You agree that you may not distribute such third party
software for any purpose without appropriate licenses from the
applicable third party or parties.
e. No Transfer or Assignment. You shall not assign any of its rights or
obligations under this Agreement. Any attempted assignment in
contravention of this Section shall be void.
4. Indemnity
a. You agree to indemnify and hold harmless Licensor and its officers,
directors, customers, employees and successors and assigns (each an
"Indemnified Party") against any and all claims, demands, causes of
action, losses, liabilities, damages, costs and expenses, incurred by
the Indemnified Party (including but not limited to costs of defense,
investigation and reasonable attorney's fees) arising out of,
resulting from or related to (i) any software, products,
documentation, content, materials or derivative works created or
developed by You using the Software which causes an infringement of
any patent, copyright, trademark, trade secret, or other property,
publicity or privacy rights of any third parties arising in any
jurisdiction anywhere in the world, (ii) the download, distribution,
installation, storage, execution, use or transfer of such software,
products, documentation, content, materials or derivative works by
any person or entity, and/or (iii) any breach of this Agreement by
You. If requested by an Indemnified Party, You agree to defend such
Indemnified Party in connection with any third party claims, demands,
or causes of action resulting from, arising out of or in connection
with any of the foregoing.
5. Limitation of Liability
a. TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAWS, UNDER NO
CIRCUMSTANCES, INCLUDING WITHOUT LIMITATION NEGLIGENCE, SHALL
LICENSOR, ITS AFFILIATES AND/OR ITS DIRECTORS, OFFICERS, EMPLOYEES OR
AGENTS BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE OR
CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT LIMITED TO DAMAGES FOR LOSS
OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
INFORMATION AND THE LIKE) ARISING OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR ANY DOWNLOAD, INSTALLATION OR USE OF, OR INABILITY TO
USE, THE SOFTWARE, EVEN IF LICENSOR HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS DO NOT ALLOW THE
LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL
DAMAGES SO THE ABOVE LIMITATION OR EXCLUSION MAY NOT APPLY OR MAY BE
LIMITED. IN NO EVENT SHALL LICENSOR'S TOTAL AGGREGATE LIABILITY TO
YOU FOR ANY AND ALL DAMAGES, LOSSES, CLAIMS AND CAUSES OF ACTIONS
(WHETHER IN CONTRACT, TORT, INCLUDING NEGLIGENCE, INDEMNIFICATION OR
OTHERWISE) EXCEED ONE HUNDRED U.S. DOLLARS (US00). THE LIMITATIONS
SET FORTH IN THIS PARAGRAPH SHALL BE DEEMED TO APPLY TO THE MAXIMUM
EXTENT PERMITTED BY APPLICABLE LAW. THE PARTIES HAVE FULLY CONSIDERED
THE FOREGOING ALLOCATION OF RISK AND FIND IT REASONABLE, AND THAT THE
FOREGOING LIMITATIONS IN THIS PARAGRAPH ARE AN ESSENTIAL BASIS OF
THE BARGAIN BETWEEN THE PARTIES.
6. No Warranty
a. LICENSOR MAKES NO WARRANTIES, EXPRESS OR IMPLIED, WITH RESPECT TO THE
SOFTWARE AND DOCUMENTATION PROVIDED UNDER THIS AGREEMENT, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A
PARTICULAR PURPOSE OR AGAINST INFRINGEMENT, OR ANY EXPRESS OR IMPLIED
WARRANTY ARISING OUT OF TRADE USAGE OR OUT OF A COURSE OF DEALING OR
COURSE OF PERFORMANCE. NOTHING CONTAINED IN THIS AGREEMENT SHALL BE
CONSTRUED AS A WARRANTY OR REPRESENTATION BY LICENSOR (I) AS TO THE
VALIDITY OR SCOPE OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL
PROPERTY RIGHT AND (II) THAT ANY MANUFACTURE OR USE WILL BE FREE FROM
INFRINGEMENT OF PATENTS, COPYRIGHTS OR OTHER INTELLECTUAL PROPERTY
RIGHTS OF OTHERS, AND IT SHALL BE THE SOLE RESPONSIBILITY OF YOU TO
MAKE SUCH DETERMINATION AS IS NECESSARY WITH RESPECT TO THE
ACQUISITION OF LICENSES UNDER PATENTS AND OTHER INTELLECTUAL PROPERTY
OF THIRD PARTIES. LICENSOR SHALL NOT HAVE ANY OBLIGATION TO PROVIDE
ANY TECHNICAL SUPPORT OF THE SOFTWARE UNDER THIS AGREEMENT.
7. Term and Termination
a. This Agreement shall be effective on the date You accept this
Agreement and shall remain in effect until terminated as provided
herein. You may terminate the Agreement at any time by deleting and
destroying all copies of the Software and all related information in
Your possession or control. This Agreement terminates immediately and
automatically, with or without notice, if You fail to comply with any
provision hereof. Additionally, Licensor may at any time terminate
this Agreement, without cause, upon notice to You. Upon termination
You must delete or destroy all copies of the Software in Your
possession, and the license granted to You in this Agreement shall
terminate. Sections 3, 4, 5, 6 and 8 shall survive the termination of
this Agreement.
8. Miscellaneous
a. Governing Law. This Agreement is governed and interpreted in
accordance with the laws of the State of California without giving
effect to its conflict of laws provisions. The United Nations
Convention on Contracts for the International Sale of Goods is
expressly disclaimed and shall not apply. Any claim arising out of or
related to this Agreement must be brought exclusively in a federal or
state court located in Santa Clara County, California and You consent
to the jurisdiction and venue of such courts.
b. Waiver and Severability. The failure of either party to require
performance by the other party of any provision of this Agreement
shall not affect the full right to require such performance at any
time thereafter; nor shall the waiver by either party of a breach of
any provision of this Agreement be taken or held to be a waiver of
the provision itself. Severability. If any provision of this
Agreement is unenforceable or invalid under any applicable law or is
so held by applicable court decision, such unenforceability or
invalidity shall not render this Agreement unenforceable or invalid
as a whole, and such provision shall be changed and interpreted so as
to best accomplish the objectives of such unenforceable or invalid
provision within the limits of applicable law or applicable court
decisions.
c. Amendment and Modification. This Agreement and any of its terms and
provisions may only be amended, modified, supplemented or waived in a
writing signed by both parties hereto.
d. Compliance with Laws. You shall comply with all applicable laws,
rules, and regulations in connection with its activities under this
Agreement.
e. Entire Agreement. This Agreement completely and exclusively states
the agreement between You and Licensor regarding this subject matter.

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

@ -1,23 +0,0 @@
{
"config_version": 2,
"tooltool_manifest": "releng-pandaboard.tt",
"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", "git"],
"mock_files": [["/home/cltbld/.ssh", "/home/mock_mozilla/.ssh"]],
"build_targets": ["boottarball", "systemtarball", "userdatatarball", "package-tests"],
"upload_files": [
"{workdir}/out/target/product/panda/*.tar.bz2",
"{workdir}/out/target/product/panda/tests/*.zip",
"{objdir}/dist/b2g-*.crashreporter-symbols.zip",
"{srcdir}/b2g/config/panda/README",
"{workdir}/sources.xml"
],
"b2g_manifest": "pandaboard.xml",
"gecko_l10n_root": "http://hg.mozilla.org/l10n-central",
"gaia": {
"l10n": {
"vcs": "hgtool",
"root": "http://hg.mozilla.org/gaia-l10n"
}
}
}

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

@ -1,8 +0,0 @@
[
{
"size": 2116507,
"digest": "be67a012963a5c162834f9fcb989bcebd2d047dcb4e17ee23031b694dcf7cdfd6d7a6545d7a1f5e7293b6d24415403972f4ea1ab8c6c78fefcabfaf3f6875214",
"algorithm": "sha512",
"filename": "download-panda.tar.bz2"
}
]

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

@ -505,6 +505,11 @@
@BINPATH@/components/Push.manifest
@BINPATH@/components/PushServiceLauncher.js
@BINPATH@/components/InterAppComm.manifest
@BINPATH@/components/InterAppCommService.js
@BINPATH@/components/InterAppConnection.js
@BINPATH@/components/InterAppMessagePort.js
@BINPATH@/components/nsDOMIdentity.js
@BINPATH@/components/nsIDService.js
@BINPATH@/components/Identity.manifest

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

@ -352,6 +352,10 @@ pref("browser.download.panel.shown", false);
// enabled has been completed already.
pref("browser.download.panel.firstSessionCompleted", false);
#ifndef XP_MACOSX
pref("browser.helperApps.deleteTempFileOnExit", true);
#endif
// search engines URL
pref("browser.search.searchEnginesURL", "https://addons.mozilla.org/%LOCALE%/firefox/search-engines/");

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

@ -15,6 +15,8 @@
<!ENTITY % browserDTD
SYSTEM "chrome://browser/locale/browser.dtd">
%browserDTD;
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
%brandDTD;
]>
@ -30,6 +32,11 @@
<p id="helper-error-msg">&tabCrashed.message;</p>
</div>
<div id="report-box">
<input type="checkbox" id="checkSendReport" checked="checked"/>
<label for="checkSendReport">&tabCrashed.checkSendReport;</label>
</div>
<div id="button-box">
<button id="tryAgain">&tabCrashed.tryAgain;</button>
</div>

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

@ -102,7 +102,7 @@ let gBrowserThumbnails = {
_capture: function Thumbnails_capture(aBrowser) {
if (this._shouldCapture(aBrowser))
PageThumbs.captureAndStore(aBrowser);
PageThumbs.captureAndStoreIfStale(aBrowser);
},
_delayedCapture: function Thumbnails_delayedCapture(aBrowser) {

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

@ -544,7 +544,6 @@ statuspanel {
-moz-binding: url("chrome://browser/content/tabbrowser.xml#statuspanel");
position: fixed;
margin-top: -3em;
left: 0;
max-width: calc(100% - 5px);
pointer-events: none;
}

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

@ -137,6 +137,11 @@ XPCOMUtils.defineLazyModuleGetter(this, "SitePermissions",
XPCOMUtils.defineLazyModuleGetter(this, "SessionStore",
"resource:///modules/sessionstore/SessionStore.jsm");
#ifdef MOZ_CRASHREPORTER
XPCOMUtils.defineLazyModuleGetter(this, "TabCrashReporter",
"resource:///modules/TabCrashReporter.jsm");
#endif
let gInitialPages = [
"about:blank",
"about:newtab",
@ -170,6 +175,10 @@ let gInitialPages = [
XPCOMUtils.defineLazyGetter(this, "Win7Features", function () {
#ifdef XP_WIN
// Bug 666808 - AeroPeek support for e10s
if (gMultiProcessBrowser)
return null;
const WINTASKBAR_CONTRACTID = "@mozilla.org/windows-taskbar;1";
if (WINTASKBAR_CONTRACTID in Cc &&
Cc[WINTASKBAR_CONTRACTID].getService(Ci.nsIWinTaskbar).available) {
@ -1042,6 +1051,11 @@ var gBrowserInit = {
// Ensure login manager is up and running.
Services.logins;
#ifdef MOZ_CRASHREPORTER
if (gMultiProcessBrowser)
TabCrashReporter.init();
#endif
if (mustLoadSidebar) {
let sidebar = document.getElementById("sidebar");
let sidebarBox = document.getElementById("sidebar-box");
@ -1135,11 +1149,8 @@ var gBrowserInit = {
gBrowser.mPanelContainer.addEventListener("PreviewBrowserTheme", LightWeightThemeWebInstaller, false, true);
gBrowser.mPanelContainer.addEventListener("ResetBrowserThemePreview", LightWeightThemeWebInstaller, false, true);
// Bug 666808 - AeroPeek support for e10s
if (!gMultiProcessBrowser) {
if (Win7Features)
Win7Features.onOpenWindow();
}
if (Win7Features)
Win7Features.onOpenWindow();
// called when we go into full screen, even if initiated by a web page script
window.addEventListener("fullscreen", onFullScreen, true);
@ -2497,6 +2508,12 @@ let BrowserOnClick = {
let button = aEvent.originalTarget;
if (button.id == "tryAgain") {
#ifdef MOZ_CRASHREPORTER
if (aOwnerDoc.getElementById("checkSendReport").checked) {
let browser = gBrowser.getBrowserForDocument(aOwnerDoc);
TabCrashReporter.submitCrashReport(browser);
}
#endif
openUILinkIn(button.getAttribute("url"), "current");
}
},
@ -3655,8 +3672,7 @@ var XULBrowserWindow = {
return this.reloadCommand = document.getElementById("Browser:Reload");
},
get statusTextField () {
delete this.statusTextField;
return this.statusTextField = document.getElementById("statusbar-display");
return gBrowser.getStatusPanel();
},
get isImage () {
delete this.isImage;
@ -3676,7 +3692,6 @@ var XULBrowserWindow = {
delete this.throbberElement;
delete this.stopCommand;
delete this.reloadCommand;
delete this.statusTextField;
delete this.statusText;
},
@ -4267,6 +4282,11 @@ var TabsProgressListener = {
if (event.target.documentElement)
event.target.documentElement.removeAttribute("hasBrowserHandlers");
}, true);
#ifdef MOZ_CRASHREPORTER
if (doc.documentURI.startsWith("about:tabcrashed"))
TabCrashReporter.onAboutTabCrashedLoad(aBrowser);
#endif
}
},

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

@ -1026,7 +1026,6 @@
autocompletepopup="PopupAutoComplete"
selectpopup="ContentSelectDropdown"/>
<chatbar id="pinnedchats" layer="true" mousethrough="always" hidden="true"/>
<statuspanel id="statusbar-display" inactive="true"/>
</vbox>
<splitter id="social-sidebar-splitter"
class="chromeclass-extrachrome sidebar-splitter"

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

@ -48,8 +48,7 @@ if (Services.prefs.getBoolPref("browser.tabs.remote")) {
let AboutHomeListener = {
init: function(chromeGlobal) {
let self = this;
chromeGlobal.addEventListener('AboutHomeLoad', function(e) { self.onPageLoad(); }, false, true);
chromeGlobal.addEventListener('AboutHomeLoad', () => this.onPageLoad(), false, true);
},
handleEvent: function(aEvent) {

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

@ -134,7 +134,7 @@ Site.prototype = {
#ifndef RELEASE_BUILD
// request a staleness check for the thumbnail, which will cause page.js
// to be notified and call our refreshThumbnail() method.
BackgroundPageThumbs.captureIfStale(this.url);
BackgroundPageThumbs.captureIfMissing(this.url);
// but still display whatever thumbnail might be available now.
#endif
this.refreshThumbnail();

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

@ -322,11 +322,8 @@ Sanitizer.prototype = {
}
// Clear all completed/cancelled downloads
let publicList = yield Downloads.getPublicDownloadList();
publicList.removeFinished(filterByTime);
let privateList = yield Downloads.getPrivateDownloadList();
privateList.removeFinished(filterByTime);
let list = yield Downloads.getList(Downloads.ALL);
list.removeFinished(filterByTime);
}.bind(this)).then(null, Components.utils.reportError);
}
else {

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

@ -198,11 +198,12 @@
this.dispatchPanelEvent("socialFrameShow");
sizeSocialPanelToContent(this.panel, this.content);
} else {
this.content.addEventListener("load", function panelBrowserOnload(e) {
let panelBrowserOnload = () => {
this.content.removeEventListener("load", panelBrowserOnload, true);
this.dispatchPanelEvent("socialFrameShow");
sizeSocialPanelToContent(this.panel, this.content);
}.bind(this), true);
};
this.content.addEventListener("load", panelBrowserOnload, true);
}
]]></handler>
<handler event="popuphidden"><![CDATA[

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

@ -182,6 +182,27 @@
]]></body>
</method>
<method name="getStatusPanel">
<body><![CDATA[
if (!this._statusPanel) {
this._statusPanel = document.createElementNS(this.namespaceURI, "statuspanel");
this._statusPanel.setAttribute("inactive", "true");
this._appendStatusPanel();
}
return this._statusPanel;
]]></body>
</method>
<method name="_appendStatusPanel">
<body><![CDATA[
if (this._statusPanel) {
let browser = this.selectedBrowser;
let browserContainer = this.getBrowserContainer(browser);
browserContainer.insertBefore(this._statusPanel, browser.parentNode.nextSibling);
}
]]></body>
</method>
<method name="updateWindowResizers">
<body><![CDATA[
if (!window.gShowPageResizers)
@ -988,6 +1009,8 @@
});
}
this._appendStatusPanel();
if (updatePageReport)
this.mCurrentBrowser.updatePageReport();

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

@ -96,7 +96,7 @@ function onHistoryReady() {
itemPrefs.setBoolPref("sessions", false);
itemPrefs.setBoolPref("siteSettings", false);
let publicList = yield Downloads.getPublicDownloadList();
let publicList = yield Downloads.getList(Downloads.PUBLIC);
let downloadPromise = promiseDownloadRemoved(publicList);
// Clear 10 minutes ago
@ -612,7 +612,7 @@ function setupFormHistory() {
function setupDownloads() {
let publicList = yield Downloads.getPublicDownloadList();
let publicList = yield Downloads.getList(Downloads.PUBLIC);
let download = yield Downloads.createDownload({
source: "https://bugzilla.mozilla.org/show_bug.cgi?id=480169",

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

@ -912,7 +912,7 @@ WindowHelper.prototype = {
* The download will be downloaded this many minutes ago
*/
function addDownloadWithMinutesAgo(aExpectedPathList, aMinutesAgo) {
let publicList = yield Downloads.getPublicDownloadList();
let publicList = yield Downloads.getList(Downloads.PUBLIC);
let name = "fakefile-" + aMinutesAgo + "-minutes-ago";
let download = yield Downloads.createDownload({
@ -984,7 +984,7 @@ function blankSlate() {
let formHistoryDone = false, downloadsDone = false;
Task.spawn(function deleteAllDownloads() {
let publicList = yield Downloads.getPublicDownloadList();
let publicList = yield Downloads.getList(Downloads.PUBLIC);
let downloads = yield publicList.getAll();
for (let download of downloads) {
publicList.remove(download);
@ -1037,7 +1037,7 @@ function boolPrefIs(aPrefName, aExpectedVal, aMsg) {
function downloadExists(aPath)
{
return Task.spawn(function() {
let publicList = yield Downloads.getPublicDownloadList();
let publicList = yield Downloads.getList(Downloads.PUBLIC);
let listArray = yield publicList.getAll();
throw new Task.Result(listArray.some(i => i.target.path == aPath));
});

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

@ -38,8 +38,7 @@ const EXPECTED_REFLOWS = [
"TabItem__reconnect@chrome://browser/content/tabview.js|" +
"TabItem@chrome://browser/content/tabview.js|" +
"TabItems_link@chrome://browser/content/tabview.js|" +
"@chrome://browser/content/tabview.js|" +
"addTab@chrome://browser/content/tabbrowser.xml|",
"@chrome://browser/content/tabview.js|",
// SessionStore.getWindowDimensions()
"ssi_getWindowDimension@resource:///modules/sessionstore/SessionStore.jsm|" +
@ -88,6 +87,7 @@ let observer = {
let path = (new Error().stack).split("\n").slice(1).map(line => {
return line.replace(/:\d+$/, "");
}).join("|");
let pathWithLineNumbers = (new Error().stack).split("\n").slice(1).join("|");
// Stack trace is empty. Reflow was triggered by native code.
if (path === "") {
@ -102,7 +102,7 @@ let observer = {
}
}
ok(false, "unexpected uninterruptible reflow '" + path + "'");
ok(false, "unexpected uninterruptible reflow '" + pathWithLineNumbers + "'");
},
reflowInterruptible: function (start, end) {

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

@ -640,8 +640,8 @@ DownloadsDataCtor.prototype = {
// Start receiving real-time events.
if (DownloadsCommon.useJSTransfer) {
if (!this._dataLinkInitialized) {
let promiseList = this._isPrivate ? Downloads.getPrivateDownloadList()
: Downloads.getPublicDownloadList();
let promiseList = Downloads.getList(this._isPrivate ? Downloads.PRIVATE
: Downloads.PUBLIC);
promiseList.then(list => list.addView(this)).then(null, Cu.reportError);
this._dataLinkInitialized = true;
}
@ -697,8 +697,8 @@ DownloadsDataCtor.prototype = {
removeFinished: function DD_removeFinished()
{
if (DownloadsCommon.useJSTransfer) {
let promiseList = this._isPrivate ? Downloads.getPrivateDownloadList()
: Downloads.getPublicDownloadList();
let promiseList = Downloads.getList(this._isPrivate ? Downloads.PRIVATE
: Downloads.PUBLIC);
promiseList.then(list => list.removeFinished())
.then(null, Cu.reportError);
} else {
@ -1715,12 +1715,10 @@ DownloadsDataItem.prototype = {
*/
remove: function DDI_remove() {
if (DownloadsCommon.useJSTransfer) {
let promiseList = this._download.source.isPrivate
? Downloads.getPrivateDownloadList()
: Downloads.getPublicDownloadList();
promiseList.then(list => list.remove(this._download))
.then(() => this._download.finalize(true))
.then(null, Cu.reportError);
Downloads.getList(Downloads.ALL)
.then(list => list.remove(this._download))
.then(() => this._download.finalize(true))
.then(null, Cu.reportError);
return;
}

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

@ -72,7 +72,7 @@ function promisePanelOpened()
function task_resetState()
{
// Remove all downloads.
let publicList = yield Downloads.getPublicDownloadList();
let publicList = yield Downloads.getList(Downloads.PUBLIC);
let downloads = yield publicList.getAll();
for (let download of downloads) {
publicList.remove(download);
@ -88,7 +88,7 @@ function task_addDownloads(aItems)
{
let startTimeMs = Date.now();
let publicList = yield Downloads.getPublicDownloadList();
let publicList = yield Downloads.getList(Downloads.PUBLIC);
for (let item of aItems) {
publicList.add(yield Downloads.createDownload({
source: "http://www.example.com/test-download.txt",

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

@ -369,6 +369,13 @@ WebContentConverterRegistrar.prototype = {
function WCCR_registerProtocolHandler(aProtocol, aURIString, aTitle, aContentWindow) {
LOG("registerProtocolHandler(" + aProtocol + "," + aURIString + "," + aTitle + ")");
var uri = this._checkAndGetURI(aURIString, aContentWindow);
// If the protocol handler is already registered, just return early.
if (this._protocolHandlerRegistered(aProtocol, uri.spec)) {
return;
}
var browserWindow = this._getBrowserWindowForContentWindow(aContentWindow);
if (PrivateBrowsingUtils.isWindowPrivate(browserWindow)) {
// Inside the private browsing mode, we don't want to alert the user to save
@ -406,25 +413,18 @@ WebContentConverterRegistrar.prototype = {
throw("Not allowed to register a protocol handler for " + aProtocol);
}
var uri = this._checkAndGetURI(aURIString, aContentWindow);
// Now Ask the user and provide the proper callback
var message = this._getFormattedString("addProtocolHandler",
[aTitle, uri.host, aProtocol]);
var buttons, message;
if (this._protocolHandlerRegistered(aProtocol, uri.spec))
message = this._getFormattedString("protocolHandlerRegistered",
[aTitle, aProtocol]);
else {
// Now Ask the user and provide the proper callback
message = this._getFormattedString("addProtocolHandler",
[aTitle, uri.host, aProtocol]);
var notificationIcon = uri.prePath + "/favicon.ico";
var notificationValue = "Protocol Registration: " + aProtocol;
var addButton = {
label: this._getString("addProtocolHandlerAddButton"),
accessKey: this._getString("addHandlerAddButtonAccesskey"),
protocolInfo: { protocol: aProtocol, uri: uri.spec, name: aTitle },
var notificationIcon = uri.prePath + "/favicon.ico";
var notificationValue = "Protocol Registration: " + aProtocol;
var addButton = {
label: this._getString("addProtocolHandlerAddButton"),
accessKey: this._getString("addHandlerAddButtonAccesskey"),
protocolInfo: { protocol: aProtocol, uri: uri.spec, name: aTitle },
callback:
callback:
function WCCR_addProtocolHandlerButtonCallback(aNotification, aButtonInfo) {
var protocol = aButtonInfo.protocolInfo.protocol;
var uri = aButtonInfo.protocolInfo.uri;
@ -450,11 +450,8 @@ WebContentConverterRegistrar.prototype = {
getService(Ci.nsIHandlerService);
hs.store(handlerInfo);
}
};
buttons = [addButton];
}
};
var buttons;
var browserElement = this._getBrowserForContentWindow(browserWindow, aContentWindow);
var notificationBox = browserWindow.getBrowser().getNotificationBox(browserElement);
notificationBox.appendNotification(message,

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

@ -1619,6 +1619,9 @@ let SessionStoreInternal = {
},
getWindowValue: function ssi_getWindowValue(aWindow, aKey) {
if (this._disabledForMultiProcess)
return "";
if ("__SSi" in aWindow) {
var data = this._windows[aWindow.__SSi].extData || {};
return data[aKey] || "";

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

@ -28,6 +28,9 @@ function test() {
is(newBrowser.contentWindow.scrollY, 1200, "still scrolled vertically");
gBrowser.removeTab(newTab);
// Call stopPropagation on the event so we won't fire the
// tabbrowser's SSTabRestored listeners.
e.stopPropagation();
finish();
}, true);

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

@ -24,17 +24,24 @@ function test() {
tabState.entries[0].referrer = REFERRER2;
ss.setTabState(tab, JSON.stringify(tabState));
tab.addEventListener("SSTabRestored", function() {
tab.addEventListener("SSTabRestored", function(e) {
tab.removeEventListener("SSTabRestored", arguments.callee, true);
is(window.content.document.referrer, REFERRER2, "document.referrer matches referrer set via setTabState.");
gBrowser.removeTab(tab);
// Call stopPropagation on the event so we won't fire the
// tabbrowser's SSTabRestored listeners.
e.stopPropagation();
let newTab = ss.undoCloseTab(window, 0);
newTab.addEventListener("SSTabRestored", function() {
newTab.addEventListener("SSTabRestored", function(e) {
newTab.removeEventListener("SSTabRestored", arguments.callee, true);
is(window.content.document.referrer, REFERRER2, "document.referrer is still correct after closing and reopening the tab.");
gBrowser.removeTab(newTab);
// Call stopPropagation on the event so we won't fire the
// tabbrowser's SSTabRestored listeners.
e.stopPropagation();
finish();
}, true);

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

@ -98,6 +98,9 @@ function testTabRestoreData(aFormData, aExpectedValues, aCallback) {
// clean up
gBrowser.removeTab(tab);
// Call stopPropagation on the event so we won't fire the
// tabbrowser's SSTabRestored listeners.
aEvent.stopPropagation();
aCallback();
});

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

@ -23,8 +23,8 @@
<vbox flex="1">
<hbox id="content" flex="1">
<vbox id="tabs">
<button class="button projects-button" onclick="selectTab('projects')">&index.projects;</button>
<button class="button device-button" onclick="selectTab('device')">&index.device;</button>
<button class="button projects-button" onclick="selectTab('projects')">&index.projects2;</button>
<button class="button device-button" onclick="selectTab('device')">&index.device2;</button>
</vbox>
<hbox id="tab-panels" flex="1">
<iframe flex="1" class="panel projects-panel" src="chrome://browser/content/devtools/app-manager/projects.xhtml"/>

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

@ -20,7 +20,7 @@
<aside id="sidebar">
<div id="project-list" template='{"type":"attribute","path":"projects.length","name":"projects-count"}'>
<div template-loop='{"arrayPath":"projects","childSelector":"#project-item-template"}'></div>
<div id="no-project">&projects.noProject;</div>
<div id="no-project">&projects.noProjects;</div>
</div>
<div id="new-packaged-project" onclick="UI.addPackaged()">&projects.addPackaged;</div>
<div id="new-hosted-project">&projects.addHosted;

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

@ -668,7 +668,7 @@ let StackFrameUtils = {
getFrameTitle: function(aFrame) {
if (aFrame.type == "call") {
let c = aFrame.callee;
return (c.name || c.userDisplayName || c.displayName || "(anonymous)");
return (c.userDisplayName || c.displayName || c.name || "(anonymous)");
}
return "(" + aFrame.type + ")";
},
@ -702,7 +702,7 @@ let StackFrameUtils = {
case "function":
let f = aEnv.function;
label += " [" +
(f.name || f.userDisplayName || f.displayName || "(anonymous)") +
(f.userDisplayName || f.displayName || f.name || "(anonymous)") +
"]";
break;
}

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

@ -43,6 +43,8 @@ function inspectNode(aInspector)
function performScrollingTest()
{
executeSoon(function() {
// FIXME: this will fail on retina displays. EventUtils will only scroll
// 25px down instead of 50.
EventUtils.synthesizeWheel(div, 10, 10,
{ deltaY: 50.0, deltaMode: WheelEvent.DOM_DELTA_PIXEL },
iframe.contentWindow);

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

@ -2,16 +2,64 @@
* 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/. */
ul {
list-style: none;
#root-wrapper {
overflow: hidden;
min-width: 250px;
}
ul.children:not([expanded]) {
.children {
list-style: none;
padding: 0;
margin: 0;
}
.child {
margin-left: -1000em;
padding-left: 1001em;
}
.tag-line {
min-height: 1.4em;
line-height: 1.4em;
position: relative;
}
/* Children are indented thanks to their parent's left padding, that means they
* are not stretching from edge to edge, which is what we want.
* So we insert a pseudo-element and make sure it covers the whole "line" */
.tag-line .highlighter {
content: "";
position: absolute;
left: -1000em;
right: 0;
height: 100%;
z-index: -1;
}
.expander {
display: inline-block;
margin-left: -14px;
vertical-align: middle;
}
.child.collapsed .child {
display: none;
}
.codebox {
display: inline-block;
.child > .tag-line:first-child .close {
display: none;
}
.child.collapsed > .tag-line:first-child .close {
display: inline;
}
.child.collapsed > .tag-line ~ .tag-line {
display: none;
}
.child.collapsed .close {
display: inline;
}
.newattr {
@ -19,24 +67,13 @@ ul.children:not([expanded]) {
width: 1em;
height: 1ex;
margin-right: -1em;
padding: 1px 0;
}
.newattr:focus {
margin-right: 0;
}
.closing-bracket {
pointer-events: none;
}
.summary {
cursor: pointer;
}
.summary[expanded] {
display: none;
}
/* Preview */
#previewbar {

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

@ -8,19 +8,16 @@ const {Cc, Cu, Ci} = require("chrome");
// Page size for pageup/pagedown
const PAGE_SIZE = 10;
const PREVIEW_AREA = 700;
const DEFAULT_MAX_CHILDREN = 100;
let {UndoStack} = require("devtools/shared/undo");
let EventEmitter = require("devtools/shared/event-emitter");
let {editableField, InplaceEditor} = require("devtools/shared/inplace-editor");
let promise = require("sdk/core/promise");
const {UndoStack} = require("devtools/shared/undo");
const {editableField, InplaceEditor} = require("devtools/shared/inplace-editor");
const promise = require("sdk/core/promise");
Cu.import("resource://gre/modules/devtools/LayoutHelpers.jsm");
Cu.import("resource://gre/modules/devtools/Templater.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
loader.lazyGetter(this, "DOMParser", function() {
return Cc["@mozilla.org/xmlextras/domparser;1"].createInstance(Ci.nsIDOMParser);
@ -192,7 +189,8 @@ MarkupView.prototype = {
}
break;
case Ci.nsIDOMKeyEvent.DOM_VK_RIGHT:
if (!this._selectedContainer.expanded) {
if (!this._selectedContainer.expanded &&
this._selectedContainer.hasChildren) {
this._expandContainer(this._selectedContainer);
} else {
let next = this._selectionWalker().nextNode();
@ -365,7 +363,7 @@ MarkupView.prototype = {
if (mutation.type === "documentUnload") {
// Treat this as a childList change of the child (maybe the protocol
// should do this).
type = "childList"
type = "childList";
target = mutation.targetParent;
if (!target) {
continue;
@ -390,7 +388,6 @@ MarkupView.prototype = {
});
},
/**
* Make sure the given node's parents are expanded and the
* node is scrolled on to screen.
@ -419,7 +416,7 @@ MarkupView.prototype = {
{
return this._updateChildren(aContainer, true).then(() => {
aContainer.expanded = true;
})
});
},
/**
@ -807,8 +804,7 @@ MarkupView.prototype = {
this._updatePreview();
this._previewBar.classList.remove("hide");
}.bind(this), 1000);
},
}
};
@ -817,14 +813,13 @@ MarkupView.prototype = {
* tree. Manages creation of the editor for the node and
* a <ul> for placing child elements, and expansion/collapsing
* of the element.
*
*
* @param MarkupView aMarkupView
* The markup view that owns this container.
* @param DOMNode aNode
* The node to display.
*/
function MarkupContainer(aMarkupView, aNode)
{
function MarkupContainer(aMarkupView, aNode) {
this.markup = aMarkupView;
this.doc = this.markup.doc;
this.undo = this.markup.undo;
@ -839,48 +834,43 @@ function MarkupContainer(aMarkupView, aNode)
} else if (aNode.nodeType == Ci.nsIDOMNode.DOCUMENT_TYPE_NODE) {
this.editor = new DoctypeEditor(this, aNode);
} else {
this.editor = new GenericEditor(this.markup, aNode);
this.editor = new GenericEditor(this, aNode);
}
// The template will fill the following properties
this.elt = null;
this.expander = null;
this.codeBox = null;
this.highlighter = null;
this.tagLine = null;
this.children = null;
this.markup.template("container", this);
this.elt.container = this;
this.children.container = this;
this.expander.addEventListener("click", function() {
this.markup.navigate(this);
// Expanding/collapsing the node on dblclick of the whole tag-line element
this._onToggle = this._onToggle.bind(this);
this.elt.addEventListener("dblclick", this._onToggle, false);
this.expander.addEventListener("click", this._onToggle, false);
this.markup.setNodeExpanded(this.node, !this.expanded);
}.bind(this));
// Dealing with the highlighting of the row via javascript rather than :hover
// This is to allow highlighting the closing tag-line as well as reusing the
// theme css classes (which wouldn't have been possible with a :hover pseudo)
this._onMouseOver = this._onMouseOver.bind(this);
this.elt.addEventListener("mouseover", this._onMouseOver, false);
this.codeBox.insertBefore(this.editor.elt, this.children);
this._onMouseOut = this._onMouseOut.bind(this);
this.elt.addEventListener("mouseout", this._onMouseOut, false);
this.editor.elt.addEventListener("mousedown", function(evt) {
this.markup.navigate(this);
}.bind(this), false);
// Appending the editor element and attaching event listeners
this.tagLine.appendChild(this.editor.elt);
if (this.editor.summaryElt) {
this.editor.summaryElt.addEventListener("click", function(evt) {
this.markup.navigate(this);
this.markup.expandNode(this.node);
}.bind(this), false);
this.codeBox.appendChild(this.editor.summaryElt);
}
if (this.editor.closeElt) {
this.editor.closeElt.addEventListener("mousedown", function(evt) {
this.markup.navigate(this);
}.bind(this), false);
this.codeBox.appendChild(this.editor.closeElt);
}
this.elt.addEventListener("mousedown", this._onMouseDown.bind(this), false);
}
MarkupContainer.prototype = {
toString: function() { return "[MarkupContainer for " + this.node + "]" },
toString: function() {
return "[MarkupContainer for " + this.node + "]";
},
/**
* True if the current node has children. The MarkupView
@ -909,21 +899,88 @@ MarkupContainer.prototype = {
* True if the node has been visually expanded in the tree.
*/
get expanded() {
return this.children.hasAttribute("expanded");
return !this.elt.classList.contains("collapsed");
},
set expanded(aValue) {
if (aValue) {
if (aValue && this.elt.classList.contains("collapsed")) {
// Expanding a node means cloning its "inline" closing tag into a new
// tag-line that the user can interact with and showing the children.
if (this.editor instanceof ElementEditor) {
let closingTag = this.elt.querySelector(".close");
if (closingTag) {
if (!this.closeTagLine) {
let line = this.markup.doc.createElement("div");
line.classList.add("tag-line");
let highlighter = this.markup.doc.createElement("div");
highlighter.classList.add("highlighter");
line.appendChild(highlighter);
line.appendChild(closingTag.cloneNode(true));
line.addEventListener("mouseover", this._onMouseOver, false);
line.addEventListener("mouseout", this._onMouseOut, false);
this.closeTagLine = line;
}
this.elt.appendChild(this.closeTagLine);
}
}
this.elt.classList.remove("collapsed");
this.expander.setAttribute("open", "");
this.children.setAttribute("expanded", "");
if (this.editor.summaryElt) {
this.editor.summaryElt.setAttribute("expanded", "");
this.highlighted = false;
} else if (!aValue) {
if (this.editor instanceof ElementEditor && this.closeTagLine) {
this.elt.removeChild(this.closeTagLine);
}
this.elt.classList.add("collapsed");
this.expander.removeAttribute("open");
}
},
_onToggle: function(event) {
this.markup.navigate(this);
if(this.hasChildren) {
this.markup.setNodeExpanded(this.node, !this.expanded);
}
event.stopPropagation();
},
_onMouseOver: function(event) {
this.highlighted = true;
event.stopPropagation();
},
_onMouseOut: function(event) {
this.highlighted = false;
event.stopPropagation();
},
_onMouseDown: function(event) {
this.highlighted = false;
this.markup.navigate(this);
event.stopPropagation();
},
_highlighted: false,
/**
* Highlight the currently hovered tag + its closing tag if necessary
* (that is if the tag is expanded)
*/
set highlighted(aValue) {
this._highlighted = aValue;
if (aValue) {
if (!this.selected) {
this.highlighter.classList.add("theme-bg-darker");
}
if (this.closeTagLine) {
this.closeTagLine.querySelector(".highlighter").classList.add("theme-bg-darker");
}
} else {
this.expander.removeAttribute("open");
this.children.removeAttribute("expanded");
if (this.editor.summaryElt) {
this.editor.summaryElt.removeAttribute("expanded");
this.highlighter.classList.remove("theme-bg-darker");
if (this.closeTagLine) {
this.closeTagLine.querySelector(".highlighter").classList.remove("theme-bg-darker");
}
}
},
@ -931,8 +988,7 @@ MarkupContainer.prototype = {
/**
* True if the container is visible in the markup tree.
*/
get visible()
{
get visible() {
return this.elt.getBoundingClientRect().height > 0;
},
@ -949,15 +1005,11 @@ MarkupContainer.prototype = {
this._selected = aValue;
this.editor.selected = aValue;
if (this._selected) {
this.editor.elt.classList.add("theme-selected");
if (this.editor.closeElt) {
this.editor.closeElt.classList.add("theme-selected");
}
this.tagLine.setAttribute("selected", "");
this.highlighter.classList.add("theme-selected");
} else {
this.editor.elt.classList.remove("theme-selected");
if (this.editor.closeElt) {
this.editor.closeElt.classList.remove("theme-selected");
}
this.tagLine.removeAttribute("selected");
this.highlighter.classList.remove("theme-selected");
}
},
@ -965,8 +1017,7 @@ MarkupContainer.prototype = {
* Update the container's editor to the current state of the
* viewed node.
*/
update: function MC_update()
{
update: function() {
if (this.editor.update) {
this.editor.update();
}
@ -975,20 +1026,19 @@ MarkupContainer.prototype = {
/**
* Try to put keyboard focus on the current editor.
*/
focus: function MC_focus()
{
focus: function() {
let focusable = this.editor.elt.querySelector("[tabindex]");
if (focusable) {
focusable.focus();
}
},
}
}
};
/**
* Dummy container node used for the root document element.
*/
function RootContainer(aMarkupView, aNode)
{
function RootContainer(aMarkupView, aNode) {
this.doc = aMarkupView.doc;
this.elt = this.doc.createElement("ul");
this.elt.container = this;
@ -997,6 +1047,12 @@ function RootContainer(aMarkupView, aNode)
this.toString = function() { return "[root container]"}
}
RootContainer.prototype = {
hasChildren: true,
expanded: true,
update: function() {}
};
/**
* Creates an editor for simple nodes.
*/
@ -1117,27 +1173,19 @@ function ElementEditor(aContainer, aNode)
this.markup = this.container.markup;
this.node = aNode;
this.attrs = { };
this.attrs = {};
// The templates will fill the following properties
this.elt = null;
this.tag = null;
this.closeTag = null;
this.attrList = null;
this.newAttr = null;
this.summaryElt = null;
this.closeElt = null;
// Create the main editor
this.template("element", this);
if (this.node.hasChildren) {
// Create the summary placeholder
this.template("elementContentSummary", this);
}
// Create the closing tag
this.template("elementClose", this);
this.rawNode = aNode.rawNode();
// Make the tag name editable (unless this is a remote node or
@ -1338,7 +1386,6 @@ ElementEditor.prototype = {
for (let attr of attrs) {
// Create an attribute editor next to the current attribute if needed.
this._createAttribute(attr, aAttrNode ? aAttrNode.nextSibling : null);
this._saveAttribute(attr.name, aUndoMods);
aDoMods.setAttribute(attr.name, attr.value);
}
@ -1414,14 +1461,6 @@ ElementEditor.prototype = {
});
}).then(null, console.error);
}
}
RootContainer.prototype = {
hasChildren: true,
expanded: true,
update: function RC_update() {}
};
function nodeDocument(node) {
@ -1439,7 +1478,6 @@ function nodeDocument(node) {
* An array of attribute names and their values.
*/
function parseAttributeValues(attr, doc) {
attr = attr.trim();
// Handle bad user inputs by appending a " or ' if it fails to parse without them.
@ -1466,19 +1504,6 @@ function parseAttributeValues(attr, doc) {
return attributes.reverse();
}
/**
* A tree walker filter for avoiding empty whitespace text nodes.
*/
function whitespaceTextFilter(aNode)
{
if (aNode.nodeType == Ci.nsIDOMNode.TEXT_NODE &&
!/[^\s]/.exec(aNode.nodeValue)) {
return Ci.nsIDOMNodeFilter.FILTER_SKIP;
} else {
return Ci.nsIDOMNodeFilter.FILTER_ACCEPT;
}
}
loader.lazyGetter(MarkupView.prototype, "strings", () => Services.strings.createBundle(
"chrome://browser/locale/devtools/inspector.properties"
));

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

@ -15,33 +15,36 @@
</head>
<body class="theme-body devtools-monospace" role="application">
<div id="root"></div>
<div id="root-wrapper">
<div id="root"></div>
</div>
<div id="templates" style="display:none">
<ul>
<li id="template-container" save="${elt}" class="container"><span save="${codeBox}" class="codebox"><span save="${expander}" class="theme-twisty expander"></span><ul save="${children}" class="children"></ul></span></li>
<ul class="children">
<li id="template-container" save="${elt}" class="child collapsed">
<div save="${tagLine}" class="tag-line"><span save="${highlighter}" class="highlighter"></span><span save="${expander}" class="theme-twisty expander"></span></div>
<ul save="${children}" class="children"></ul>
</li>
<li id="template-more-nodes" class="more-nodes devtools-class-comment" save="${elt}"><span>${showing}</span> <button href="#" onclick="${allButtonClick}">${showAll}</button></li>
</ul>
<span id="template-element" save="${elt}" class="editor"><span>&lt;</span><span save="${tag}" class="tagname theme-fg-color3"></span><span save="${attrList}"></span><span save="${newAttr}" class="newattr" tabindex="0"></span><span class="closing-bracket">&gt;</span></span>
<span id="template-element" save="${elt}" class="editor"><span class="open">&lt;<span save="${tag}" class="tag theme-fg-color3" tabindex="0"></span><span save="${attrList}"></span><span save="${newAttr}" class="newattr" tabindex="0"></span>&gt;</span><span class="close">&lt;/<span save="${closeTag}" class="tag theme-fg-color3"></span>&gt;</span></span>
<span id="template-attribute" save="${attr}" data-attr="${attrName}" class="attreditor" style="display:none"> <span class="editable" save="${inner}" tabindex="0"><span save="${name}" class="attrname theme-fg-color2"></span>=&quot;<span save="${val}" class="attrvalue theme-fg-color6"></span>&quot;</span></span>
<span id="template-attribute" save="${attr}" data-attr="${attrName}" class="attreditor" style="display:none"> <span class="editable" save="${inner}" tabindex="0"><span save="${name}" class="attr-name theme-fg-color2"></span>=&quot;<span save="${val}" class="attr-value theme-fg-color6"></span>&quot;</span></span>
<span id="template-text" save="${elt}" class="editor text">
<pre save="${value}" style="display:inline-block;" tabindex="0"></pre>
</span>
<span id="template-comment" save="${elt}" class="editor comment theme-comment">
<span>&lt;!--</span><pre save="${value}" style="display:inline-block;" tabindex="0"></pre><span>--&gt;</span>
</span>
<span id="template-comment" save="${elt}" class="editor comment theme-comment"><span>&lt;!--</span><pre save="${value}" style="display:inline-block;" tabindex="0"></pre><span>--&gt;</span></span>
<span id="template-elementContentSummary" save="${summaryElt}" class="summary"></span>
<!-- span id="template-elementClose" save="${closeElt}">&lt;/<span save="${closeTag}" class="tagname theme-fg-color3"></span>&gt;</span -->
<span id="template-elementClose" save="${closeElt}">&lt;/<span save="${closeTag}" class="tagname theme-fg-color3"></span>&gt;</span>
</div>
<div id="previewbar" class="disabled">
</div>
<div id="previewbar" class="disabled">
<div id="preview"/>
<div id="viewbox"/>
</div>
</div>
</body>
</html>

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