1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Use of this source code is governed by a BSD-style license that can be 31622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu// found in the LICENSE file. 4112344ab7f96cf482bce80530676712c282756d5Jordan Rose 51622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu#ifndef CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_MESSAGE_FILTER_MAC_H_ 61622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu#define CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_MESSAGE_FILTER_MAC_H_ 71622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu 81622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu#include <map> 963bc186d6ac0b44ba4ec6fccb5f471b05c79b666Jordan Rose 1063bc186d6ac0b44ba4ec6fccb5f471b05c79b666Jordan Rose#include "chrome/browser/spellchecker/spellcheck_message_filter.h" 111622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu#include "chrome/common/spellcheck_result.h" 121622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu#include "content/public/browser/browser_message_filter.h" 131622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu 141622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu// A message filter implementation that receives 151622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xu// the Mac-specific spell checker requests from SpellCheckProvider. 161622a547971cee50e386b4cdfe62ed1fcee1036dZhongxing Xuclass SpellCheckMessageFilterMac : public content::BrowserMessageFilter { 172c46458d4cd96a3a33e8810e95e692d8e2e05ff3Zhongxing Xu public: 182c46458d4cd96a3a33e8810e95e692d8e2e05ff3Zhongxing Xu explicit SpellCheckMessageFilterMac(int render_process_id); 1963bc186d6ac0b44ba4ec6fccb5f471b05c79b666Jordan Rose 20112344ab7f96cf482bce80530676712c282756d5Jordan Rose // BrowserMessageFilter implementation. 21551bd1f9191af0eecdc29764e34e01803c73ae31Ted Kremenek virtual void OverrideThreadForMessage( 22551bd1f9191af0eecdc29764e34e01803c73ae31Ted Kremenek const IPC::Message& message, 23551bd1f9191af0eecdc29764e34e01803c73ae31Ted Kremenek content::BrowserThread::ID* thread) OVERRIDE; 24551bd1f9191af0eecdc29764e34e01803c73ae31Ted Kremenek virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 25551bd1f9191af0eecdc29764e34e01803c73ae31Ted Kremenek 26551bd1f9191af0eecdc29764e34e01803c73ae31Ted Kremenek // Adjusts remote_results by examining local_results. Any result that's both 27551bd1f9191af0eecdc29764e34e01803c73ae31Ted Kremenek // local and remote stays type SPELLING, all others are flagged GRAMMAR. 28551bd1f9191af0eecdc29764e34e01803c73ae31Ted Kremenek // (This is needed to force gray underline for remote-only results.) 29a8166156a6414ddd6a68514dc4f48e95d2259977Ted Kremenek static void CombineResults( 30a8166156a6414ddd6a68514dc4f48e95d2259977Ted Kremenek std::vector<SpellCheckResult>* remote_results, 31a8166156a6414ddd6a68514dc4f48e95d2259977Ted Kremenek const std::vector<SpellCheckResult>& local_results); 32a8166156a6414ddd6a68514dc4f48e95d2259977Ted Kremenek 33a8166156a6414ddd6a68514dc4f48e95d2259977Ted Kremenek private: 34a8166156a6414ddd6a68514dc4f48e95d2259977Ted Kremenek friend class TestingSpellCheckMessageFilter; 3563bc186d6ac0b44ba4ec6fccb5f471b05c79b666Jordan Rose friend class SpellcheckMessageFilterMacTest; 3663bc186d6ac0b44ba4ec6fccb5f471b05c79b666Jordan Rose 37112344ab7f96cf482bce80530676712c282756d5Jordan Rose virtual ~SpellCheckMessageFilterMac(); 38112344ab7f96cf482bce80530676712c282756d5Jordan Rose 39112344ab7f96cf482bce80530676712c282756d5Jordan Rose void OnCheckSpelling(const base::string16& word, int route_id, bool* correct); 40112344ab7f96cf482bce80530676712c282756d5Jordan Rose void OnFillSuggestionList(const base::string16& word, 41112344ab7f96cf482bce80530676712c282756d5Jordan Rose std::vector<base::string16>* suggestions); 42112344ab7f96cf482bce80530676712c282756d5Jordan Rose void OnShowSpellingPanel(bool show); 43112344ab7f96cf482bce80530676712c282756d5Jordan Rose void OnUpdateSpellingPanelWithMisspelledWord(const base::string16& word); 44112344ab7f96cf482bce80530676712c282756d5Jordan Rose void OnRequestTextCheck(int route_id, 45112344ab7f96cf482bce80530676712c282756d5Jordan Rose int identifier, 46112344ab7f96cf482bce80530676712c282756d5Jordan Rose const base::string16& text, 47112344ab7f96cf482bce80530676712c282756d5Jordan Rose std::vector<SpellCheckMarker> markers); 48112344ab7f96cf482bce80530676712c282756d5Jordan Rose 49112344ab7f96cf482bce80530676712c282756d5Jordan Rose int ToDocumentTag(int route_id); 50112344ab7f96cf482bce80530676712c282756d5Jordan Rose void RetireDocumentTag(int route_id); 51112344ab7f96cf482bce80530676712c282756d5Jordan Rose std::map<int,int> tag_map_; 52112344ab7f96cf482bce80530676712c282756d5Jordan Rose 53112344ab7f96cf482bce80530676712c282756d5Jordan Rose int render_process_id_; 54112344ab7f96cf482bce80530676712c282756d5Jordan Rose 55112344ab7f96cf482bce80530676712c282756d5Jordan Rose // A JSON-RPC client that calls the Spelling service in the background. 56112344ab7f96cf482bce80530676712c282756d5Jordan Rose scoped_ptr<SpellingServiceClient> client_; 57112344ab7f96cf482bce80530676712c282756d5Jordan Rose 58112344ab7f96cf482bce80530676712c282756d5Jordan Rose DISALLOW_COPY_AND_ASSIGN(SpellCheckMessageFilterMac); 59}; 60 61#endif // CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_MESSAGE_FILTER_MAC_H_ 62