15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_MESSAGE_FILTER_MAC_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_MESSAGE_FILTER_MAC_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_message_filter.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/spellcheck_result.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_message_filter.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A message filter implementation that receives 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the Mac-specific spell checker requests from SpellCheckProvider. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SpellCheckMessageFilterMac : public content::BrowserMessageFilter { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit SpellCheckMessageFilterMac(int render_process_id); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserMessageFilter implementation. 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OverrideThreadForMessage( 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const IPC::Message& message, 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserThread::ID* thread) OVERRIDE; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* message_was_ok) OVERRIDE; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Adjusts remote_results by examining local_results. Any result that's both 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // local and remote stays type SPELLING, all others are flagged GRAMMAR. 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // (This is needed to force gray underline for remote-only results.) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static void CombineResults( 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<SpellCheckResult>* remote_results, 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<SpellCheckResult>& local_results); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class TestingSpellCheckMessageFilter; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) friend class SpellcheckMessageFilterMacTest; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SpellCheckMessageFilterMac(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCheckSpelling(const string16& word, int route_id, bool* correct); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnFillSuggestionList(const string16& word, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<string16>* suggestions); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnShowSpellingPanel(bool show); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUpdateSpellingPanelWithMisspelledWord(const string16& word); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnRequestTextCheck(int route_id, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int identifier, 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const string16& text, 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::vector<SpellCheckMarker> markers); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ToDocumentTag(int route_id); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RetireDocumentTag(int route_id); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<int,int> tag_map_; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int render_process_id_; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A JSON-RPC client that calls the Spelling service in the background. 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<SpellingServiceClient> client_; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpellCheckMessageFilterMac); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_MESSAGE_FILTER_MAC_H_ 63