Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(614)

Side by Side Diff: chrome/renderer/spellchecker/hunspell_engine.cc

Issue 209193002: Remove PlatformFile from spell checker (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Revert IsEnabled behavior Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/spellchecker/hunspell_engine.h" 5 #include "chrome/renderer/spellchecker/hunspell_engine.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 9
10 #include "base/files/memory_mapped_file.h" 10 #include "base/files/memory_mapped_file.h"
(...skipping 11 matching lines...) Expand all
22 // Maximum length of words we actually check. 22 // Maximum length of words we actually check.
23 // 64 is the observed limits for OSX system checker. 23 // 64 is the observed limits for OSX system checker.
24 const size_t kMaxCheckedLen = 64; 24 const size_t kMaxCheckedLen = 64;
25 25
26 // Maximum length of words we provide suggestions for. 26 // Maximum length of words we provide suggestions for.
27 // 24 is the observed limits for OSX system checker. 27 // 24 is the observed limits for OSX system checker.
28 const size_t kMaxSuggestLen = 24; 28 const size_t kMaxSuggestLen = 24;
29 29
30 COMPILE_ASSERT(kMaxCheckedLen <= size_t(MAXWORDLEN), MaxCheckedLen_too_long); 30 COMPILE_ASSERT(kMaxCheckedLen <= size_t(MAXWORDLEN), MaxCheckedLen_too_long);
31 COMPILE_ASSERT(kMaxSuggestLen <= kMaxCheckedLen, MaxSuggestLen_too_long); 31 COMPILE_ASSERT(kMaxSuggestLen <= kMaxCheckedLen, MaxSuggestLen_too_long);
32 } 32 } // namespace
33 33
34 #if !defined(OS_MACOSX) 34 #if !defined(OS_MACOSX)
35 SpellingEngine* CreateNativeSpellingEngine() { 35 SpellingEngine* CreateNativeSpellingEngine() {
36 return new HunspellEngine(); 36 return new HunspellEngine();
37 } 37 }
38 #endif 38 #endif
39 39
40 HunspellEngine::HunspellEngine() 40 HunspellEngine::HunspellEngine()
41 : file_(base::kInvalidPlatformFileValue), 41 : hunspell_enabled_(false),
42 initialized_(false), 42 initialized_(false),
43 dictionary_requested_(false) { 43 dictionary_requested_(false) {
44 // Wait till we check the first word before doing any initializing. 44 // Wait till we check the first word before doing any initializing.
45 } 45 }
46 46
47 HunspellEngine::~HunspellEngine() { 47 HunspellEngine::~HunspellEngine() {
48 } 48 }
49 49
50 void HunspellEngine::Init(base::PlatformFile file) { 50 void HunspellEngine::Init(base::File file) {
51 initialized_ = true; 51 initialized_ = true;
52 hunspell_.reset(); 52 hunspell_.reset();
53 bdict_file_.reset(); 53 bdict_file_.reset();
54 file_ = file; 54 file_ = file.Pass();
55 hunspell_enabled_ = file_.IsValid();
55 // Delay the actual initialization of hunspell until it is needed. 56 // Delay the actual initialization of hunspell until it is needed.
56 } 57 }
57 58
58 void HunspellEngine::InitializeHunspell() { 59 void HunspellEngine::InitializeHunspell() {
59 if (hunspell_.get()) 60 if (hunspell_.get())
60 return; 61 return;
61 62
62 bdict_file_.reset(new base::MemoryMappedFile); 63 bdict_file_.reset(new base::MemoryMappedFile);
63 64
64 // TODO(rvargas): This object should not keep file_ after passing it to 65 if (bdict_file_->Initialize(file_.Pass())) {
65 // bdict_file_.
66 if (bdict_file_->Initialize(base::File(file_))) {
67 TimeTicks debug_start_time = base::Histogram::DebugNow(); 66 TimeTicks debug_start_time = base::Histogram::DebugNow();
68 67
69 hunspell_.reset( 68 hunspell_.reset(new Hunspell(bdict_file_->data(), bdict_file_->length()));
70 new Hunspell(bdict_file_->data(), bdict_file_->length()));
71 69
72 DHISTOGRAM_TIMES("Spellcheck.InitTime", 70 DHISTOGRAM_TIMES("Spellcheck.InitTime",
73 base::Histogram::DebugNow() - debug_start_time); 71 base::Histogram::DebugNow() - debug_start_time);
74 } else { 72 } else {
75 NOTREACHED() << "Could not mmap spellchecker dictionary."; 73 NOTREACHED() << "Could not mmap spellchecker dictionary.";
76 } 74 }
77 } 75 }
78 76
79 bool HunspellEngine::CheckSpelling(const base::string16& word_to_check, 77 bool HunspellEngine::CheckSpelling(const base::string16& word_to_check,
80 int tag) { 78 int tag) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 bool HunspellEngine::InitializeIfNeeded() { 125 bool HunspellEngine::InitializeIfNeeded() {
128 if (!initialized_ && !dictionary_requested_) { 126 if (!initialized_ && !dictionary_requested_) {
129 // RenderThread will not exist in test. 127 // RenderThread will not exist in test.
130 if (RenderThread::Get()) 128 if (RenderThread::Get())
131 RenderThread::Get()->Send(new SpellCheckHostMsg_RequestDictionary); 129 RenderThread::Get()->Send(new SpellCheckHostMsg_RequestDictionary);
132 dictionary_requested_ = true; 130 dictionary_requested_ = true;
133 return true; 131 return true;
134 } 132 }
135 133
136 // Don't initialize if hunspell is disabled. 134 // Don't initialize if hunspell is disabled.
137 if (file_ != base::kInvalidPlatformFileValue) 135 if (file_.IsValid())
138 InitializeHunspell(); 136 InitializeHunspell();
139 137
140 return !initialized_; 138 return !initialized_;
141 } 139 }
142 140
143 bool HunspellEngine::IsEnabled() { 141 bool HunspellEngine::IsEnabled() {
144 return file_ != base::kInvalidPlatformFileValue; 142 return hunspell_enabled_;
145 } 143 }
OLDNEW
« no previous file with comments | « chrome/renderer/spellchecker/hunspell_engine.h ('k') | chrome/renderer/spellchecker/spellcheck.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698