| // Copyright (c) 2012 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 COMPONENTS_SPELLCHECK_BROWSER_SPELLCHECK_MESSAGE_FILTER_PLATFORM_H_ |
| #define COMPONENTS_SPELLCHECK_BROWSER_SPELLCHECK_MESSAGE_FILTER_PLATFORM_H_ |
| |
| #include <map> |
| |
| #include "base/macros.h" |
| #include "build/build_config.h" |
| #include "components/spellcheck/browser/spelling_service_client.h" |
| #include "components/spellcheck/common/spellcheck_result.h" |
| #include "content/public/browser/browser_message_filter.h" |
| |
| class SpellCheckerSessionBridge; |
| |
| // A message filter implementation that receives |
| // the platform-specific spell checker requests from SpellCheckProvider. |
| class SpellCheckMessageFilterPlatform : public content::BrowserMessageFilter { |
| public: |
| explicit SpellCheckMessageFilterPlatform(int render_process_id); |
| |
| // BrowserMessageFilter implementation. |
| void OverrideThreadForMessage(const IPC::Message& message, |
| content::BrowserThread::ID* thread) override; |
| bool OnMessageReceived(const IPC::Message& message) override; |
| |
| // Adjusts remote_results by examining local_results. Any result that's both |
| // local and remote stays type SPELLING, all others are flagged GRAMMAR. |
| // (This is needed to force gray underline for remote-only results.) |
| static void CombineResults( |
| std::vector<SpellCheckResult>* remote_results, |
| const std::vector<SpellCheckResult>& local_results); |
| |
| private: |
| friend class TestingSpellCheckMessageFilter; |
| friend class SpellcheckMessageFilterPlatformMacTest; |
| |
| ~SpellCheckMessageFilterPlatform() override; |
| |
| void OnCheckSpelling(const base::string16& word, int route_id, bool* correct); |
| void OnFillSuggestionList(const base::string16& word, |
| std::vector<base::string16>* suggestions); |
| void OnRequestTextCheck(int route_id, |
| int identifier, |
| const base::string16& text); |
| |
| int ToDocumentTag(int route_id); |
| void RetireDocumentTag(int route_id); |
| std::map<int,int> tag_map_; |
| |
| int render_process_id_; |
| |
| #if defined(OS_ANDROID) |
| friend struct content::BrowserThread::DeleteOnThread< |
| content::BrowserThread::UI>; |
| friend class base::DeleteHelper<SpellCheckMessageFilterPlatform>; |
| |
| void OnToggleSpellCheck(bool enabled, bool checked); |
| void OnDestruct() const override; |
| |
| // Android-specific object used to query the Android spellchecker. |
| std::unique_ptr<SpellCheckerSessionBridge> impl_; |
| #else |
| // A JSON-RPC client that calls the Spelling service in the background. |
| std::unique_ptr<SpellingServiceClient> client_; |
| #endif |
| |
| DISALLOW_COPY_AND_ASSIGN(SpellCheckMessageFilterPlatform); |
| }; |
| |
| #endif // COMPONENTS_SPELLCHECK_BROWSER_SPELLCHECK_MESSAGE_FILTER_PLATFORM_H_ |