Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/accessible/base/TextUpdater.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
 * License, v. 2.0. If a copy of the MPL was not distributed with this
4
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6
#ifndef mozilla_a11y_TextUpdater_h__
7
#define mozilla_a11y_TextUpdater_h__
8
9
#include "AccEvent.h"
10
#include "HyperTextAccessible.h"
11
12
namespace mozilla {
13
namespace a11y {
14
15
/**
16
 * Used to find a difference between old and new text and fire text change
17
 * events.
18
 */
19
class TextUpdater
20
{
21
public:
22
  /**
23
   * Start text of the text leaf update.
24
   */
25
  static void Run(DocAccessible* aDocument, TextLeafAccessible* aTextLeaf,
26
                  const nsAString& aNewText);
27
28
private:
29
  TextUpdater(DocAccessible* aDocument, TextLeafAccessible* aTextLeaf) :
30
    mDocument(aDocument), mTextLeaf(aTextLeaf), mHyperText(nullptr),
31
0
    mTextOffset(-1) { }
32
33
  ~TextUpdater()
34
0
    { mDocument = nullptr; mTextLeaf = nullptr; mHyperText = nullptr; }
35
36
  /**
37
   * Update text of the text leaf accessible, fire text change and value change
38
   * (if applicable) events for its container hypertext accessible.
39
   */
40
  void DoUpdate(const nsAString& aNewText, const nsAString& aOldText,
41
                uint32_t aSkipStart);
42
43
private:
44
  TextUpdater();
45
  TextUpdater(const TextUpdater&);
46
  TextUpdater& operator=(const TextUpdater&);
47
48
  /**
49
   * Fire text change events based on difference between strings.
50
   */
51
  void ComputeTextChangeEvents(const nsAString& aStr1,
52
                               const nsAString& aStr2,
53
                               uint32_t* aEntries,
54
                               nsTArray<RefPtr<AccEvent> >& aEvents);
55
56
  /**
57
   * Helper to create text change events for inserted text.
58
   */
59
  inline void FireInsertEvent(const nsAString& aText, uint32_t aAddlOffset,
60
                              nsTArray<RefPtr<AccEvent> >& aEvents)
61
0
  {
62
0
    RefPtr<AccEvent> event =
63
0
      new AccTextChangeEvent(mHyperText, mTextOffset + aAddlOffset,
64
0
                             aText, true);
65
0
    aEvents.AppendElement(event);
66
0
  }
67
68
  /**
69
   * Helper to create text change events for removed text.
70
   */
71
  inline void FireDeleteEvent(const nsAString& aText, uint32_t aAddlOffset,
72
                              nsTArray<RefPtr<AccEvent> >& aEvents)
73
0
  {
74
0
    RefPtr<AccEvent> event =
75
0
      new AccTextChangeEvent(mHyperText, mTextOffset + aAddlOffset,
76
0
                             aText, false);
77
0
    aEvents.AppendElement(event);
78
0
  }
79
80
  /**
81
   * The constant used to skip string difference calculation in case of long
82
   * strings.
83
   */
84
  const static uint32_t kMaxStrLen = 1 << 6;
85
86
private:
87
  DocAccessible* mDocument;
88
  TextLeafAccessible* mTextLeaf;
89
  HyperTextAccessible* mHyperText;
90
  int32_t mTextOffset;
91
};
92
93
} // namespace a11y
94
} // namespace mozilla
95
96
#endif