1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
// 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 CHROME_RENDERER_SPELLCHECKER_SPELLCHECK_PROVIDER_H_
#define CHROME_RENDERER_SPELLCHECKER_SPELLCHECK_PROVIDER_H_
#include <vector>
#include "base/id_map.h"
#include "content/public/renderer/render_view_observer.h"
#include "content/public/renderer/render_view_observer_tracker.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSpellCheckClient.h"
class RenderView;
class SpellCheck;
struct SpellCheckResult;
namespace WebKit {
class WebString;
class WebTextCheckingCompletion;
struct WebTextCheckingResult;
}
// This class deals with invoking browser-side spellcheck mechanism
// which is done asynchronously.
class SpellCheckProvider
: public content::RenderViewObserver,
public content::RenderViewObserverTracker<SpellCheckProvider>,
public WebKit::WebSpellCheckClient {
public:
typedef IDMap<WebKit::WebTextCheckingCompletion> WebTextCheckCompletions;
SpellCheckProvider(content::RenderView* render_view,
SpellCheck* spellcheck);
virtual ~SpellCheckProvider();
// Requests async spell and grammar checker to the platform text
// checker, which is available on the browser process.
void RequestTextChecking(
const WebKit::WebString& text,
WebKit::WebTextCheckingCompletion* completion);
// The number of ongoing IPC requests.
size_t pending_text_request_size() const {
return text_check_completions_.size();
}
// Replace shared spellcheck data.
void set_spellcheck(SpellCheck* spellcheck) { spellcheck_ = spellcheck; }
// Enables document-wide spellchecking.
void EnableSpellcheck(bool enabled);
// RenderViewObserver implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void FocusedNodeChanged(const WebKit::WebNode& node) OVERRIDE;
private:
friend class TestingSpellCheckProvider;
// Tries to satisfy a spell check request from the cache in |last_request_|.
// Returns true (and cancels/finishes the completion) if it can, false
// if the provider should forward the query on.
bool SatisfyRequestFromCache(const WebKit::WebString& text,
WebKit::WebTextCheckingCompletion* completion);
// WebKit::WebSpellCheckClient implementation.
virtual void spellCheck(
const WebKit::WebString& text,
int& offset,
int& length,
WebKit::WebVector<WebKit::WebString>* optional_suggestions) OVERRIDE;
virtual void checkTextOfParagraph(
const WebKit::WebString& text,
WebKit::WebTextCheckingTypeMask mask,
WebKit::WebVector<WebKit::WebTextCheckingResult>* results) OVERRIDE;
// TODO(rouslan): Remove this version of requestCheckingOfText() method.
virtual void requestCheckingOfText(
const WebKit::WebString& text,
WebKit::WebTextCheckingCompletion* completion);
// TODO(rouslan): Add OVERRIDE to this version of requestCheckingOfText()
// method.
virtual void requestCheckingOfText(
const WebKit::WebString& text,
const WebKit::WebVector<uint32_t>& markers,
const WebKit::WebVector<unsigned>& marker_offsets,
WebKit::WebTextCheckingCompletion* completion);
virtual WebKit::WebString autoCorrectWord(
const WebKit::WebString& misspelled_word) OVERRIDE;
virtual void showSpellingUI(bool show) OVERRIDE;
virtual bool isShowingSpellingUI() OVERRIDE;
virtual void updateSpellingUIWithMisspelledWord(
const WebKit::WebString& word) OVERRIDE;
#if !defined(OS_MACOSX)
void OnRespondSpellingService(
int identifier,
bool succeeded,
const string16& text,
const std::vector<SpellCheckResult>& results);
#endif
// Returns whether |text| has word characters, i.e. whether a spellchecker
// needs to check this text.
bool HasWordCharacters(const WebKit::WebString& text, int index) const;
#if defined(OS_MACOSX)
void OnAdvanceToNextMisspelling();
void OnRespondTextCheck(
int identifier,
const std::vector<SpellCheckResult>& results);
void OnToggleSpellPanel(bool is_currently_visible);
#endif
// Holds ongoing spellchecking operations, assigns IDs for the IPC routing.
WebTextCheckCompletions text_check_completions_;
// The last text sent to the browser process to spellcheck it and its
// spellchecking results.
string16 last_request_;
WebKit::WebVector<WebKit::WebTextCheckingResult> last_results_;
// True if the browser is showing the spelling panel for us.
bool spelling_panel_visible_;
// Weak pointer to shared (per RenderView) spellcheck data.
SpellCheck* spellcheck_;
DISALLOW_COPY_AND_ASSIGN(SpellCheckProvider);
};
#endif // CHROME_RENDERER_SPELLCHECKER_SPELLCHECK_PROVIDER_H_
|