Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: components/spellcheck/renderer/spellcheck_provider.h

Issue 2857353002: Convert Spellcheck host MessageFilter IPC to mojo (Closed)
Patch Set: Use MakeUnique for the MessageLoop in TestingSpellCheckProvider. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef COMPONENTS_SPELLCHECK_RENDERER_SPELLCHECK_PROVIDER_H_ 5 #ifndef COMPONENTS_SPELLCHECK_RENDERER_SPELLCHECK_PROVIDER_H_
6 #define COMPONENTS_SPELLCHECK_RENDERER_SPELLCHECK_PROVIDER_H_ 6 #define COMPONENTS_SPELLCHECK_RENDERER_SPELLCHECK_PROVIDER_H_
7 7
8 #include <stddef.h>
9 #include <stdint.h>
10
11 #include <vector> 8 #include <vector>
12 9
13 #include "base/id_map.h" 10 #include "base/id_map.h"
14 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "components/spellcheck/common/spellcheck.mojom.h"
15 #include "components/spellcheck/spellcheck_build_features.h" 13 #include "components/spellcheck/spellcheck_build_features.h"
16 #include "content/public/renderer/render_frame_observer.h" 14 #include "content/public/renderer/render_frame_observer.h"
17 #include "content/public/renderer/render_frame_observer_tracker.h" 15 #include "content/public/renderer/render_frame_observer_tracker.h"
18 #include "third_party/WebKit/public/web/WebTextCheckClient.h" 16 #include "third_party/WebKit/public/web/WebTextCheckClient.h"
19 17
20 class SpellCheck; 18 class SpellCheck;
21 struct SpellCheckResult; 19 struct SpellCheckResult;
22 20
23 namespace blink { 21 namespace blink {
24 class WebTextCheckingCompletion; 22 class WebTextCheckingCompletion;
25 struct WebTextCheckingResult; 23 struct WebTextCheckingResult;
26 } 24 }
27 25
28 // This class deals with invoking browser-side spellcheck mechanism 26 // This class deals with asynchronously invoking text spelling and grammar
29 // which is done asynchronously. 27 // checking services provided by the browser process (host).
30 class SpellCheckProvider 28 class SpellCheckProvider
31 : public content::RenderFrameObserver, 29 : public content::RenderFrameObserver,
32 public content::RenderFrameObserverTracker<SpellCheckProvider>, 30 public content::RenderFrameObserverTracker<SpellCheckProvider>,
33 public blink::WebTextCheckClient { 31 public blink::WebTextCheckClient {
34 public: 32 public:
35 using WebTextCheckCompletions = IDMap<blink::WebTextCheckingCompletion*>; 33 using WebTextCheckCompletions = IDMap<blink::WebTextCheckingCompletion*>;
36 34
37 SpellCheckProvider(content::RenderFrame* render_frame, 35 SpellCheckProvider(content::RenderFrame* render_frame,
38 SpellCheck* spellcheck); 36 SpellCheck* spellcheck);
39 ~SpellCheckProvider() override; 37 ~SpellCheckProvider() override;
40 38
41 // Requests async spell and grammar checker to the platform text 39 // Requests async spell and grammar checks from the platform text checker
42 // checker, which is available on the browser process. The function does not 40 // available in the browser process. The function does not have special
43 // have special handling for partial words, as Blink guarantees that no 41 // handling for partial words, as Blink guarantees that no request is made
44 // request is made when typing in the middle of a word. 42 // when typing in the middle of a word.
45 void RequestTextChecking(const base::string16& text, 43 void RequestTextChecking(const base::string16& text,
46 blink::WebTextCheckingCompletion* completion); 44 blink::WebTextCheckingCompletion* completion);
47 45
48 // The number of ongoing IPC requests. 46 // The number of ongoing spellcheck host requests.
49 size_t pending_text_request_size() const { 47 size_t pending_text_request_size() const {
50 return text_check_completions_.size(); 48 return text_check_completions_.size();
51 } 49 }
52 50
53 // Replace shared spellcheck data. 51 // Replace shared spellcheck data.
54 void set_spellcheck(SpellCheck* spellcheck) { spellcheck_ = spellcheck; } 52 void set_spellcheck(SpellCheck* spellcheck) { spellcheck_ = spellcheck; }
55 53
56 // Enables document-wide spellchecking. 54 // Enables document-wide spellchecking.
57 void EnableSpellcheck(bool enabled); 55 void EnableSpellcheck(bool enabled);
58 56
59 // RenderFrameObserver implementation. 57 // content::RenderFrameObserver:
60 bool OnMessageReceived(const IPC::Message& message) override; 58 bool OnMessageReceived(const IPC::Message& message) override;
61 void FocusedNodeChanged(const blink::WebNode& node) override; 59 void FocusedNodeChanged(const blink::WebNode& node) override;
62 60
63 private: 61 private:
64 friend class TestingSpellCheckProvider; 62 friend class TestingSpellCheckProvider;
65 63
66 // Tries to satisfy a spell check request from the cache in |last_request_|. 64 // Sets the SpellCheckHost (for unit tests).
65 void SetSpellCheckHostForTesting(spellcheck::mojom::SpellCheckHostPtr host) {
66 spellcheck_host_ = std::move(host);
67 }
68
69 // Returns the SpellCheckHost.
70 spellcheck::mojom::SpellCheckHost& GetSpellCheckHost();
71
72 // Tries to satisfy a spellcheck request from the cache in |last_request_|.
67 // Returns true (and cancels/finishes the completion) if it can, false 73 // Returns true (and cancels/finishes the completion) if it can, false
68 // if the provider should forward the query on. 74 // if the provider should forward the query on.
69 bool SatisfyRequestFromCache(const base::string16& text, 75 bool SatisfyRequestFromCache(const base::string16& text,
70 blink::WebTextCheckingCompletion* completion); 76 blink::WebTextCheckingCompletion* completion);
71 77
72 // RenderFrameObserver implementation. 78 // content::RenderFrameObserver:
73 void OnDestruct() override; 79 void OnDestruct() override;
74 80
75 // blink::WebTextCheckClient implementation. 81 // blink::WebTextCheckClient:
76 void CheckSpelling( 82 void CheckSpelling(
77 const blink::WebString& text, 83 const blink::WebString& text,
78 int& offset, 84 int& offset,
79 int& length, 85 int& length,
80 blink::WebVector<blink::WebString>* optional_suggestions) override; 86 blink::WebVector<blink::WebString>* optional_suggestions) override;
81 void RequestCheckingOfText( 87 void RequestCheckingOfText(
82 const blink::WebString& text, 88 const blink::WebString& text,
83 blink::WebTextCheckingCompletion* completion) override; 89 blink::WebTextCheckingCompletion* completion) override;
84 void CancelAllPendingRequests() override; 90 void CancelAllPendingRequests() override;
85 91
86 #if !BUILDFLAG(USE_BROWSER_SPELLCHECKER) 92 #if !BUILDFLAG(USE_BROWSER_SPELLCHECKER)
87 void OnRespondSpellingService( 93 void OnRespondSpellingService(int identifier,
88 int identifier, 94 const base::string16& text,
89 bool succeeded, 95 bool succeeded,
90 const base::string16& text, 96 const std::vector<SpellCheckResult>& results);
91 const std::vector<SpellCheckResult>& results);
92 #endif 97 #endif
93 98
94 // Returns whether |text| has word characters, i.e. whether a spellchecker 99 // Returns whether |text| has word characters, i.e. whether a spellchecker
95 // needs to check this text. 100 // needs to check this text.
96 bool HasWordCharacters(const base::string16& text, int index) const; 101 bool HasWordCharacters(const base::string16& text, int index) const;
97 102
98 #if BUILDFLAG(USE_BROWSER_SPELLCHECKER) 103 #if BUILDFLAG(USE_BROWSER_SPELLCHECKER)
99 void OnRespondTextCheck( 104 void OnRespondTextCheck(
100 int identifier, 105 int identifier,
101 const base::string16& line, 106 const base::string16& line,
102 const std::vector<SpellCheckResult>& results); 107 const std::vector<SpellCheckResult>& results);
103 #endif 108 #endif
104 109
105 // Holds ongoing spellchecking operations, assigns IDs for the IPC routing. 110 // Holds ongoing spellchecking operations.
106 WebTextCheckCompletions text_check_completions_; 111 WebTextCheckCompletions text_check_completions_;
107 112
108 // The last text sent to the browser process to spellcheck it and its 113 // The last text sent to the browser process for spellchecking, and its
109 // spellchecking results. 114 // spellcheck results and WebTextCheckCompletions identifier.
110 base::string16 last_request_; 115 base::string16 last_request_;
111 blink::WebVector<blink::WebTextCheckingResult> last_results_; 116 blink::WebVector<blink::WebTextCheckingResult> last_results_;
117 int last_identifier_;
112 118
113 // Weak pointer to shared (per RenderView) spellcheck data. 119 // Weak pointer to shared (per renderer) spellcheck data.
114 SpellCheck* spellcheck_; 120 SpellCheck* spellcheck_;
115 121
122 // Interface to the SpellCheckHost.
123 spellcheck::mojom::SpellCheckHostPtr spellcheck_host_;
124
116 DISALLOW_COPY_AND_ASSIGN(SpellCheckProvider); 125 DISALLOW_COPY_AND_ASSIGN(SpellCheckProvider);
117 }; 126 };
118 127
119 #endif // COMPONENTS_SPELLCHECK_RENDERER_SPELLCHECK_PROVIDER_H_ 128 #endif // COMPONENTS_SPELLCHECK_RENDERER_SPELLCHECK_PROVIDER_H_
OLDNEW
« no previous file with comments | « components/spellcheck/renderer/spellcheck.cc ('k') | components/spellcheck/renderer/spellcheck_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698