| 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);
|
| };
|
|
|