Index: chrome/browser/spellchecker/spellcheck_custom_dictionary.h |
diff --git a/chrome/browser/spellchecker/spellcheck_custom_dictionary.h b/chrome/browser/spellchecker/spellcheck_custom_dictionary.h |
index b1d6045f1db0231c841c7e57c7738cf5b490a0c7..cedbb734c2c762df57ad3b030f80f276ea0b8278 100644 |
--- a/chrome/browser/spellchecker/spellcheck_custom_dictionary.h |
+++ b/chrome/browser/spellchecker/spellcheck_custom_dictionary.h |
@@ -11,10 +11,19 @@ |
#include "base/file_path.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/observer_list.h" |
#include "chrome/browser/spellchecker/spellcheck_dictionary.h" |
#include "chrome/common/spellcheck_common.h" |
-// Defines a custom dictionary which users can add their own words to. |
+// Defines a custom dictionary where users can add their own words. All words |
+// must be UTF8, between 1 and 128 bytes long, and without ASCII whitespace. |
+// The dictionary contains its own checksum when saved on disk. Example |
+// dictionary file contents: |
+// |
+// bar |
+// foo |
+// checksum_v1 = ec3df4034567e59e119fcf87f2d9bad4 |
+// |
class SpellcheckCustomDictionary : public SpellcheckDictionary { |
public: |
class Observer { |
@@ -33,8 +42,8 @@ class SpellcheckCustomDictionary : public SpellcheckDictionary { |
const chrome::spellcheck_common::WordList& GetWords() const; |
// Populates the |custom_words| with the list of words in the custom |
- // dictionary file. Makes sure that the custom dictionary file is sorted and |
- // does not have duplicates. |
+ // dictionary file. Makes sure that the custom dictionary file is sorted, does |
+ // not have duplicates, and contains only valid words. |
void LoadDictionaryIntoCustomWordList( |
chrome::spellcheck_common::WordList* custom_words); |
@@ -42,8 +51,8 @@ class SpellcheckCustomDictionary : public SpellcheckDictionary { |
// member variable. Does not delete the memory at |custom_words|. |
void SetCustomWordList(chrome::spellcheck_common::WordList* custom_words); |
- // Adds the given word to the custom words list and inform renderer of the |
- // update. Returns false for duplicate words. |
+ // Adds the given word to the custom words list and informs renderers of the |
+ // update. Returns false for duplicate and invalid words. |
bool AddWord(const std::string& word); |
// Returns false for duplicate words. |
@@ -51,8 +60,9 @@ class SpellcheckCustomDictionary : public SpellcheckDictionary { |
void WriteWordToCustomDictionary(const std::string& word); |
- // Removes the given word from the custom words list and informs renderer of |
- // the update. Returns false for words that are not in the dictionary. |
+ // Removes the given word from the custom words list and informs renderers of |
+ // the update. Returns false for words that are not in the dictionary and |
+ // invalid words. |
bool RemoveWord(const std::string& word); |
// Returns false for words that are not in the dictionary. |
@@ -75,6 +85,18 @@ class SpellcheckCustomDictionary : public SpellcheckDictionary { |
void SetCustomWordListAndDelete( |
chrome::spellcheck_common::WordList* custom_words); |
+ // Loads the dictionary file into |custom_words|. If the dictionary checksum |
+ // is not valid, but backup checksum is valid, then restores the backup and |
+ // loads that into |custom_words| instead. If the backup is invalid too, then |
+ // clears |custom_words|. |
+ void LoadDictionaryFileReliably( |
+ chrome::spellcheck_common::WordList* custom_words); |
+ |
+ // Backs up the original dictionary, saves |custom_words| and its checksum |
+ // into the dictionary file. |
+ void SaveDictionaryFileReliably( |
+ const chrome::spellcheck_common::WordList& custom_words); |
+ |
// In-memory cache of the custom words file. |
chrome::spellcheck_common::WordList words_; |
@@ -83,7 +105,7 @@ class SpellcheckCustomDictionary : public SpellcheckDictionary { |
base::WeakPtrFactory<SpellcheckCustomDictionary> weak_ptr_factory_; |
- std::vector<Observer*> observers_; |
+ ObserverList<Observer> observers_; |
DISALLOW_COPY_AND_ASSIGN(SpellcheckCustomDictionary); |
}; |