| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/spellcheck/browser/spell_check_host_impl.h" |
| |
| #include "build/build_config.h" |
| #include "components/spellcheck/spellcheck_buildflags.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "ui/gfx/range/range.h" |
| |
| #if BUILDFLAG(USE_BROWSER_SPELLCHECKER) && !BUILDFLAG(ENABLE_SPELLING_SERVICE) |
| namespace { |
| |
| bool AreSpellingMarkersValid(const std::vector<gfx::Range>& spelling_markers, |
| size_t text_length) { |
| for (const gfx::Range& marker : spelling_markers) { |
| if (marker.start() >= text_length || marker.end() >= text_length) { |
| return false; |
| } |
| } |
| return true; |
| } |
| |
| } // namespace |
| #endif // BUILDFLAG(USE_BROWSER_SPELLCHECKER) && |
| // !BUILDFLAG(ENABLE_SPELLING_SERVICE) |
| |
| SpellCheckHostImpl::SpellCheckHostImpl() = default; |
| SpellCheckHostImpl::~SpellCheckHostImpl() = default; |
| |
| void SpellCheckHostImpl::NotifyChecked(const std::u16string& word, |
| bool misspelled) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| |
| // This API requires Chrome-only features. |
| return; |
| } |
| |
| #if BUILDFLAG(USE_RENDERER_SPELLCHECKER) |
| void SpellCheckHostImpl::CallSpellingService( |
| const std::u16string& text, |
| CallSpellingServiceCallback callback) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| |
| if (text.empty()) { |
| mojo::ReportBadMessage("Requested spelling service with empty text"); |
| return; |
| } |
| |
| // This API requires Chrome-only features. |
| std::move(callback).Run(false, std::vector<SpellCheckResult>()); |
| } |
| #endif // BUILDFLAG(USE_RENDERER_SPELLCHECKER) |
| |
| #if BUILDFLAG(USE_BROWSER_SPELLCHECKER) && !BUILDFLAG(ENABLE_SPELLING_SERVICE) |
| void SpellCheckHostImpl::RequestTextCheck( |
| const std::u16string& text, |
| const std::vector<gfx::Range>& spelling_markers, |
| RequestTextCheckCallback callback) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| |
| if (text.empty()) { |
| mojo::ReportBadMessage("Requested text check with empty text"); |
| return; |
| } |
| |
| if (!AreSpellingMarkersValid(spelling_markers, text.length())) { |
| mojo::ReportBadMessage( |
| "Requested text check with out-of-bound spelling markers"); |
| return; |
| } |
| |
| session_bridge_.RequestTextCheck(text, spelling_markers, std::move(callback)); |
| } |
| |
| #if BUILDFLAG(IS_WIN) |
| void SpellCheckHostImpl::InitializeDictionaries( |
| InitializeDictionariesCallback callback) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| NOTREACHED(); |
| } |
| #endif // BUILDFLAG(IS_WIN) |
| #endif // BUILDFLAG(USE_BROWSER_SPELLCHECKER) && |
| // !BUILDFLAG(ENABLE_SPELLING_SERVICE) |
| |
| #if BUILDFLAG(IS_ANDROID) |
| void SpellCheckHostImpl::DisconnectSessionBridge() { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| session_bridge_.DisconnectSession(); |
| } |
| #endif |