Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "components/spellcheck/renderer/spellcheck.h" | 5 #include "components/spellcheck/renderer/spellcheck.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 256 DocumentMarkersCollector collector; | 256 DocumentMarkersCollector collector; |
| 257 content::RenderView::ForEach(&collector); | 257 content::RenderView::ForEach(&collector); |
| 258 content::RenderThread::Get()->Send( | 258 content::RenderThread::Get()->Send( |
| 259 new SpellCheckHostMsg_RespondDocumentMarkers(collector.markers())); | 259 new SpellCheckHostMsg_RespondDocumentMarkers(collector.markers())); |
| 260 } | 260 } |
| 261 | 261 |
| 262 // TODO(groby): Make sure we always have a spelling engine, even before | 262 // TODO(groby): Make sure we always have a spelling engine, even before |
| 263 // AddSpellcheckLanguage() is called. | 263 // AddSpellcheckLanguage() is called. |
| 264 void SpellCheck::AddSpellcheckLanguage(base::File file, | 264 void SpellCheck::AddSpellcheckLanguage(base::File file, |
| 265 const std::string& language) { | 265 const std::string& language) { |
| 266 languages_.push_back(new SpellcheckLanguage()); | 266 languages_.push_back(base::MakeUnique<SpellcheckLanguage>()); |
| 267 languages_.back()->Init(std::move(file), language); | 267 languages_.back()->Init(std::move(file), language); |
| 268 } | 268 } |
| 269 | 269 |
| 270 bool SpellCheck::SpellCheckWord( | 270 bool SpellCheck::SpellCheckWord( |
| 271 const base::char16* text_begin, | 271 const base::char16* text_begin, |
| 272 int position_in_text, | 272 int position_in_text, |
| 273 int text_length, | 273 int text_length, |
| 274 int tag, | 274 int tag, |
| 275 int* misspelling_start, | 275 int* misspelling_start, |
| 276 int* misspelling_len, | 276 int* misspelling_len, |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 300 // skippable. | 300 // skippable. |
| 301 for (; position_in_text <= text_length; | 301 for (; position_in_text <= text_length; |
| 302 position_in_text += agreed_skippable_len) { | 302 position_in_text += agreed_skippable_len) { |
| 303 // Reseting |agreed_skippable_len| to the worst-case length each time | 303 // Reseting |agreed_skippable_len| to the worst-case length each time |
| 304 // prevents some unnecessary iterations. | 304 // prevents some unnecessary iterations. |
| 305 agreed_skippable_len = text_length; | 305 agreed_skippable_len = text_length; |
| 306 *misspelling_start = 0; | 306 *misspelling_start = 0; |
| 307 *misspelling_len = 0; | 307 *misspelling_len = 0; |
| 308 suggestions_list.clear(); | 308 suggestions_list.clear(); |
| 309 | 309 |
| 310 for (ScopedVector<SpellcheckLanguage>::iterator language = | 310 for (auto language = languages_.begin(); language != languages_.end();) { |
| 311 languages_.begin(); | |
| 312 language != languages_.end();) { | |
| 313 language_suggestions.clear(); | 311 language_suggestions.clear(); |
| 314 SpellcheckLanguage::SpellcheckWordResult result = | 312 SpellcheckLanguage::SpellcheckWordResult result = |
| 315 (*language)->SpellCheckWord( | 313 (*language)->SpellCheckWord( |
| 316 text_begin, position_in_text, text_length, tag, | 314 text_begin, position_in_text, text_length, tag, |
| 317 &possible_misspelling_start, &possible_misspelling_len, | 315 &possible_misspelling_start, &possible_misspelling_len, |
| 318 optional_suggestions ? &language_suggestions : nullptr); | 316 optional_suggestions ? &language_suggestions : nullptr); |
| 319 | 317 |
| 320 switch (result) { | 318 switch (result) { |
| 321 case SpellcheckLanguage::SpellcheckWordResult::IS_CORRECT: | 319 case SpellcheckLanguage::SpellcheckWordResult::IS_CORRECT: |
| 322 *misspelling_start = 0; | 320 *misspelling_start = 0; |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 432 | 430 |
| 433 PostDelayedSpellCheckTask(pending_request_param_.release()); | 431 PostDelayedSpellCheckTask(pending_request_param_.release()); |
| 434 } | 432 } |
| 435 #endif | 433 #endif |
| 436 | 434 |
| 437 bool SpellCheck::InitializeIfNeeded() { | 435 bool SpellCheck::InitializeIfNeeded() { |
| 438 if (languages_.empty()) | 436 if (languages_.empty()) |
| 439 return true; | 437 return true; |
| 440 | 438 |
| 441 bool initialize_if_needed = false; | 439 bool initialize_if_needed = false; |
| 442 for (SpellcheckLanguage* language : languages_) | 440 for (auto& language : languages_) |
|
groby-ooo-7-16
2017/01/26 17:40:47
Why make this a reference?
ke.he
2017/01/27 03:15:40
if write as "for (auto language : languages)", com
groby-ooo-7-16
2017/02/02 16:05:44
Ah, my apologies. My mind kept thinking of |langua
| |
| 443 initialize_if_needed |= language->InitializeIfNeeded(); | 441 initialize_if_needed |= language->InitializeIfNeeded(); |
| 444 | 442 |
| 445 return initialize_if_needed; | 443 return initialize_if_needed; |
| 446 } | 444 } |
| 447 | 445 |
| 448 // OSX and Android don't have |pending_request_param_| | 446 // OSX and Android don't have |pending_request_param_| |
| 449 #if !BUILDFLAG(USE_BROWSER_SPELLCHECKER) | 447 #if !BUILDFLAG(USE_BROWSER_SPELLCHECKER) |
| 450 void SpellCheck::PostDelayedSpellCheckTask(SpellcheckRequest* request) { | 448 void SpellCheck::PostDelayedSpellCheckTask(SpellcheckRequest* request) { |
| 451 if (!request) | 449 if (!request) |
| 452 return; | 450 return; |
| 453 | 451 |
| 454 base::ThreadTaskRunnerHandle::Get()->PostTask( | 452 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 455 FROM_HERE, base::Bind(&SpellCheck::PerformSpellCheck, AsWeakPtr(), | 453 FROM_HERE, base::Bind(&SpellCheck::PerformSpellCheck, AsWeakPtr(), |
| 456 base::Owned(request))); | 454 base::Owned(request))); |
| 457 } | 455 } |
| 458 #endif | 456 #endif |
| 459 | 457 |
| 460 // Mac and Android use their platform engines instead. | 458 // Mac and Android use their platform engines instead. |
| 461 #if !BUILDFLAG(USE_BROWSER_SPELLCHECKER) | 459 #if !BUILDFLAG(USE_BROWSER_SPELLCHECKER) |
| 462 void SpellCheck::PerformSpellCheck(SpellcheckRequest* param) { | 460 void SpellCheck::PerformSpellCheck(SpellcheckRequest* param) { |
| 463 DCHECK(param); | 461 DCHECK(param); |
| 464 | 462 |
| 465 if (languages_.empty() || | 463 if (languages_.empty() || |
| 466 std::find_if(languages_.begin(), languages_.end(), | 464 std::find_if(languages_.begin(), languages_.end(), |
| 467 [](SpellcheckLanguage* language) { | 465 [](std::unique_ptr<SpellcheckLanguage>& language) { |
| 468 return !language->IsEnabled(); | 466 return !language->IsEnabled(); |
| 469 }) != languages_.end()) { | 467 }) != languages_.end()) { |
| 470 param->completion()->didCancelCheckingText(); | 468 param->completion()->didCancelCheckingText(); |
| 471 } else { | 469 } else { |
| 472 WebVector<blink::WebTextCheckingResult> results; | 470 WebVector<blink::WebTextCheckingResult> results; |
| 473 SpellCheckParagraph(param->text(), &results); | 471 SpellCheckParagraph(param->text(), &results); |
| 474 param->completion()->didFinishCheckingText(results); | 472 param->completion()->didFinishCheckingText(results); |
| 475 } | 473 } |
| 476 } | 474 } |
| 477 #endif | 475 #endif |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 533 | 531 |
| 534 textcheck_results->assign(results); | 532 textcheck_results->assign(results); |
| 535 } | 533 } |
| 536 | 534 |
| 537 bool SpellCheck::IsSpellcheckEnabled() { | 535 bool SpellCheck::IsSpellcheckEnabled() { |
| 538 #if defined(OS_ANDROID) | 536 #if defined(OS_ANDROID) |
| 539 if (!spellcheck::IsAndroidSpellCheckFeatureEnabled()) return false; | 537 if (!spellcheck::IsAndroidSpellCheckFeatureEnabled()) return false; |
| 540 #endif | 538 #endif |
| 541 return spellcheck_enabled_; | 539 return spellcheck_enabled_; |
| 542 } | 540 } |
| OLD | NEW |