Index: chrome/renderer/spellchecker/spellcheck.h |
=================================================================== |
--- chrome/renderer/spellchecker/spellcheck.h (revision 0) |
+++ chrome/renderer/spellchecker/spellcheck.h (working copy) |
@@ -1,67 +1,41 @@ |
-// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef CHROME_BROWSER_SPELLCHECKER_H_ |
-#define CHROME_BROWSER_SPELLCHECKER_H_ |
+#ifndef CHROME_RENDERER_SPELLCHECKER_SPELLCHECKER_H_ |
+#define CHROME_RENDERER_SPELLCHECKER_SPELLCHECKER_H_ |
#include <queue> |
#include <string> |
#include <vector> |
#include "app/l10n_util.h" |
+#include "base/file_descriptor_posix.h" |
#include "base/string16.h" |
-#include "base/task.h" |
#include "base/time.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/net/url_fetcher.h" |
-#include "chrome/browser/profile.h" |
-#include "chrome/browser/spellcheck_worditerator.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/pref_member.h" |
+#include "chrome/renderer/spellchecker/spellcheck_worditerator.h" |
#include "unicode/uscript.h" |
-class FilePath; |
class Hunspell; |
-class PrefService; |
-class Profile; |
-class MessageLoop; |
-class URLFetcher; |
-class URLRequestContextGetter; |
+namespace base { |
+class FileDescriptor; |
+} |
+ |
namespace file_util { |
class MemoryMappedFile; |
} |
-// The Browser's Spell Checker. It checks and suggests corrections. |
-// |
-// This object is not threadsafe. In normal usage (not unit tests) it lives on |
-// the I/O thread of the browser. It is threadsafe refcounted so that I/O thread |
-// and the profile on the main thread (which gives out references to it) can |
-// keep it. However, all usage of this must be on the I/O thread. |
-// |
-// This object should also be deleted on the I/O thread only. It owns a |
-// reference to URLRequestContext which in turn owns the cache, etc. and must be |
-// deleted on the I/O thread itself. |
-class SpellChecker : public base::RefCountedThreadSafe<SpellChecker>, |
- public URLFetcher::Delegate { |
+class SpellCheck { |
public: |
- // Creates the spellchecker by reading dictionaries from the given directory, |
- // and defaulting to the given language. Both strings must be provided. |
- // |
- // The request context is used to download dictionaries if they do not exist. |
- // This can be NULL if you don't want this (like in tests). |
- // The |custom_dictionary_file_name| should be left blank so that Spellchecker |
- // can figure out the custom dictionary file. It is non empty only for unit |
- // testing. |
- SpellChecker(const FilePath& dict_dir, |
- const std::string& language, |
- URLRequestContextGetter* request_context_getter, |
- const FilePath& custom_dictionary_file_name); |
+ SpellCheck(); |
- // Only delete on the I/O thread (see above). |
- ~SpellChecker(); |
+ ~SpellCheck(); |
+ void Init(const base::FileDescriptor& bdict_fd, |
+ const std::vector<std::string>& custom_words, |
+ const std::string language); |
+ |
// SpellCheck a word. |
// Returns true if spelled correctly, false otherwise. |
// If the spellchecker failed to initialize, always returns true. |
@@ -88,43 +62,22 @@ |
// |turn_on| = true means turn ON; false means turn OFF. |
void EnableAutoSpellCorrect(bool turn_on); |
- // Add custom word to the dictionary, which means: |
- // a) Add it to the current hunspell object for immediate use, |
- // b) Add the word to a file in disk for custom dictionary. |
- void AddWord(const string16& word); |
+ // Add a word to the custom list. This may be called before or after |
+ // |hunspell_| has been initialized. |
+ void WordAdded(const std::string& word); |
- // Get SpellChecker supported languages. |
- static void SpellCheckLanguages(std::vector<std::string>* languages); |
- |
- // This function computes a vector of strings which are to be displayed in |
- // the context menu over a text area for changing spell check languages. It |
- // returns the index of the current spell check language in the vector. |
- // TODO(port): this should take a vector of string16, but the implementation |
- // has some dependencies in l10n util that need porting first. |
- static int GetSpellCheckLanguages( |
- Profile* profile, |
- std::vector<std::string>* languages); |
- |
- // This function returns the corresponding language-region code for the |
- // spell check language. For example, for hi, it returns hi-IN. |
- static std::string GetSpellCheckLanguageRegion(std::string input_language); |
- |
- // This function returns ll (language code) from ll-RR where 'RR' (region |
- // code) is redundant. However, if the region code matters, it's preserved. |
- // That is, it returns 'hi' and 'en-GB' for 'hi-IN' and 'en-GB' respectively. |
- static std::string GetLanguageFromLanguageRegion(std::string input_language); |
- |
private: |
- friend class ReadDictionaryTask; |
+ // Initializes the Hunspell dictionary, or does nothing if |hunspell_| is |
+ // non-null. This blocks. |
+ void InitializeHunspell(); |
- // URLFetcher::Delegate implementation. Called when we finish downloading the |
- // spellcheck dictionary; saves the dictionary to disk. |
- virtual void OnURLFetchComplete(const URLFetcher* source, |
- const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
+ // If there is no dictionary file, then this requests one from the browser |
+ // and does not block. In this case it returns true. |
+ // If there is a dictionary file, but Hunspell has not been loaded, then |
+ // this loads Hunspell. |
+ // If Hunspell is already loaded, this does nothing. In both the latter cases |
+ // it returns false, meaning that it is OK to continue spellchecking. |
+ bool InitializeIfNeeded(); |
// When called, relays the request to check the spelling to the proper |
// backend, either hunspell or a platform-specific backend. |
@@ -135,86 +88,26 @@ |
void FillSuggestionList(const string16& wrong_word, |
std::vector<string16>* optional_suggestions); |
- // Initializes the Hunspell Dictionary. |
- bool Initialize(); |
- |
- // Called when |hunspell| is done loading, succesfully or not. If |hunspell| |
- // and |bdict_file| are non-NULL, assume ownership. |
- void HunspellInited(Hunspell* hunspell, |
- file_util::MemoryMappedFile* bdict_file, |
- bool file_existed); |
- |
- // Either start downloading a dictionary if we have not already, or do nothing |
- // if we have already tried to download one. |
- void DoDictionaryDownload(); |
- |
// Returns whether or not the given word is a contraction of valid words |
// (e.g. "word:word"). |
bool IsValidContraction(const string16& word, int tag); |
- // Return the file name of the dictionary, including the path and the version |
- // numbers. |
- FilePath GetVersionedFileName(const std::string& language, |
- const FilePath& dict_dir); |
+ // Add the given custom word to |hunspell_|. |
+ void AddWordToHunspell(const std::string& word); |
- static std::string GetCorrespondingSpellCheckLanguage( |
- const std::string& language); |
- |
- // Start downloading a dictionary from the server. On completion, the |
- // OnURLFetchComplete() function is invoked. |
- void StartDictionaryDownload(const FilePath& file_name); |
- |
- // This method is called in the IO thread after dictionary download has |
- // completed in FILE thread. |
- void OnDictionarySaveComplete(); |
- |
- // The given path to the directory whether SpellChecker first tries to |
- // download the spellcheck bdic dictionary file. |
- FilePath given_dictionary_directory_; |
- |
- // Path to the custom dictionary file. |
- FilePath custom_dictionary_file_name_; |
- |
- // BDIC file name (e.g. en-US_1_1.bdic). |
- FilePath bdic_file_name_; |
- |
// We memory-map the BDict file. |
scoped_ptr<file_util::MemoryMappedFile> bdict_file_; |
// The hunspell dictionary in use. |
scoped_ptr<Hunspell> hunspell_; |
+ base::FileDescriptor fd_; |
+ std::vector<std::string> custom_words_; |
+ |
// Represents character attributes used for filtering out characters which |
- // are not supported by this SpellChecker object. |
+ // are not supported by this SpellCheck object. |
SpellcheckCharAttribute character_attributes_; |
- // Flag indicating whether we've tried to initialize. If we've already |
- // attempted initialiation, we won't retry to avoid failure loops. |
- bool tried_to_init_; |
- |
- // The language that this spellchecker works in. |
- std::string language_; |
- |
- // This object must only be used on the same thread. However, it is normally |
- // created on the UI thread. This checks calls to SpellCheckWord and the |
- // destructor to make sure we're only ever running on the same thread. |
- // |
- // This will be NULL if it is not initialized yet (not initialized in the |
- // constructor since that's on a different thread). |
- MessageLoop* worker_loop_; |
- |
- // Flag indicating whether we tried to download the dictionary file. |
- bool tried_to_download_dictionary_file_; |
- |
- // File Thread Message Loop. |
- MessageLoop* file_loop_; |
- |
- // Used for requests. MAY BE NULL which means don't try to download. |
- URLRequestContextGetter* request_context_getter_; |
- |
- // True when we're downloading or saving a dictionary. |
- bool obtaining_dictionary_; |
- |
// Remember state for auto spell correct. |
bool auto_spell_correct_turned_on_; |
@@ -222,18 +115,13 @@ |
// and False if hunspell is being used. |
bool is_using_platform_spelling_engine_; |
- // URLFetcher to download a file in memory. |
- scoped_ptr<URLFetcher> fetcher_; |
+ // This flags whether we have ever been initialized, or have asked the browser |
+ // for a dictionary. The value indicates whether we should request a |
+ // dictionary from the browser when the render view asks us to check the |
+ // spelling of a word. |
+ bool initialized_; |
- // While Hunspell is loading, we add any new custom words to this queue. |
- // We will add them to |hunspell_| when it is done loading. |
- std::queue<std::string> custom_words_; |
- |
- // Used for generating callbacks to spellchecker, since spellchecker is a |
- // non-reference counted object. |
- ScopedRunnableMethodFactory<SpellChecker> method_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SpellChecker); |
+ DISALLOW_COPY_AND_ASSIGN(SpellCheck); |
}; |
-#endif // CHROME_BROWSER_SPELLCHECKER_H_ |
+#endif // CHROME_RENDERER_SPELLCHECKER_SPELLCHECKER_H_ |
Property changes on: chrome/renderer/spellchecker/spellcheck.h |
___________________________________________________________________ |
Added: svn:mergeinfo |
Merged /branches/chrome_webkit_merge_branch/chrome/browser/spellchecker.h:r69-2775 |