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