1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4//
5// An object to store user feedback to a single spellcheck suggestion.
6//
7// Stores the spellcheck suggestion, its uint32 hash identifier, and user's
8// feedback. The feedback is indirect, in the sense that we record user's
9// |action| instead of asking them how they feel about a spellcheck suggestion.
10// The object can serialize itself.
11
12#ifndef CHROME_BROWSER_SPELLCHECKER_MISSPELLING_H_
13#define CHROME_BROWSER_SPELLCHECKER_MISSPELLING_H_
14
15#include <vector>
16
17#include "base/time/time.h"
18#include "chrome/browser/spellchecker/spellcheck_action.h"
19
20// Stores user feedback to a spellcheck suggestion. Sample usage:
21//    Misspelling misspelling.
22//    misspelling.context = base::ASCIIToUTF16("Helllo world");
23//    misspelling.location = 0;
24//    misspelling.length = 6;
25//    misspelling.suggestions =
26//        std::vector<base::string16>(1, base::ASCIIToUTF16("Hello"));
27//    misspelling.hash = GenerateRandomHash();
28//    misspelling.action.type = SpellcheckAction::TYPE_SELECT;
29//    misspelling.action.index = 0;
30//    Process(misspelling.Serialize());
31class Misspelling {
32 public:
33  Misspelling();
34  Misspelling(const base::string16& context,
35              size_t location,
36              size_t length,
37              const std::vector<base::string16>& suggestions,
38              uint32 hash);
39  ~Misspelling();
40
41  // Serializes the data in this object into a dictionary value. The caller owns
42  // the result.
43  base::DictionaryValue* Serialize() const;
44
45  // Returns the substring of |context| that begins at |location| and contains
46  // |length| characters.
47  base::string16 GetMisspelledString() const;
48
49  // A several-word text snippet that immediately surrounds the misspelling.
50  base::string16 context;
51
52  // The number of characters between the beginning of |context| and the first
53  // misspelled character.
54  size_t location;
55
56  // The number of characters in the misspelling.
57  size_t length;
58
59  // Spelling suggestions.
60  std::vector<base::string16> suggestions;
61
62  // The hash that identifies the misspelling.
63  uint32 hash;
64
65  // User action.
66  SpellcheckAction action;
67
68  // The time when the user applied the action.
69  base::Time timestamp;
70};
71
72#endif  // CHROME_BROWSER_SPELLCHECKER_MISSPELLING_H_
73