13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_SPELLCHECK_HOST_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_SPELLCHECK_HOST_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/platform_file.h"
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile;
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SpellCheckHostObserver;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace net {
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass URLRequestContextGetter;
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// An abstract interface that provides operations that controls the spellchecker
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// attached to the browser. This class provides the operations listed below:
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// * Adding a word to the user dictionary;
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// * Retrieving the dictionary file (if it has one);
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// * Retrieving the list of words in the user dictionary;
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// * Retrieving the language used by the spellchecker.
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// * Listing available languages for a Profile object;
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// * Accepting an observer to reacting the state change of the object.
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//   You can also remove the observer from the SpellCheckHost object.
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//   The object should implement SpellCheckHostObserver interface.
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// The following snippet describes how to use this class,
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//   std::vector<std::string> languages;
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//   SpellCheckHost::GetSpellCheckLanguages(profile_, &languages);
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//   spellcheck_host_ = SpellCheckHost::Create(
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//       observer, languages[0], req_getter);
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen//
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// The class is intended to be owned by ProfileImpl so users should
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// retrieve the instance via Profile::GetSpellCheckHost().
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Users should not hold the reference over the function scope because
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// the instance can be invalidated during the browser's lifecycle.
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass SpellCheckHost
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : public base::RefCountedThreadSafe<SpellCheckHost,
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                        BrowserThread::DeleteOnFileThread> {
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~SpellCheckHost() {}
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Creates the instance of SpellCheckHost implementation object.
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static scoped_refptr<SpellCheckHost> Create(
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      SpellCheckHostObserver* observer,
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const std::string& language,
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      net::URLRequestContextGetter* request_context_getter);
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Clears an observer which is set on creation.
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Used to prevent calling back to a deleted object.
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void UnsetObserver() = 0;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Adds the given word to the custom words list and inform renderer of the
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // update.
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void AddWord(const std::string& word) = 0;
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual const base::PlatformFile& GetDictionaryFile() const = 0;
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual const std::vector<std::string>& GetCustomWords() const = 0;
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual const std::string& GetLastAddedFile() const = 0;
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual const std::string& GetLanguage() const = 0;
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool IsUsingPlatformChecker() const = 0;
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This function computes a vector of strings which are to be displayed in
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the context menu over a text area for changing spell check languages. It
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // returns the index of the current spell check language in the vector.
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(port): this should take a vector of string16, but the implementation
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // has some dependencies in l10n util that need porting first.
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static int GetSpellCheckLanguages(Profile* profile,
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    std::vector<std::string>* languages);
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_SPELLCHECK_HOST_H_
84