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

Unified Diff: components/spellcheck/renderer/spellcheck_provider.cc

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 side-by-side diff with in-line comments
Download patch
Index: components/spellcheck/renderer/spellcheck_provider.cc
diff --git a/components/spellcheck/renderer/spellcheck_provider.cc b/components/spellcheck/renderer/spellcheck_provider.cc
index abd2cd5422f17f20e0619485e6f9d9a5ded8429d..998719597614e9485af8c671dc108bbbb99faeae 100644
--- a/components/spellcheck/renderer/spellcheck_provider.cc
+++ b/components/spellcheck/renderer/spellcheck_provider.cc
@@ -4,13 +4,18 @@
#include "components/spellcheck/renderer/spellcheck_provider.h"
+#include "base/bind.h"
#include "base/metrics/histogram_macros.h"
+#include "components/spellcheck/common/spellcheck.mojom.h"
#include "components/spellcheck/common/spellcheck_messages.h"
#include "components/spellcheck/common/spellcheck_result.h"
#include "components/spellcheck/renderer/spellcheck.h"
#include "components/spellcheck/renderer/spellcheck_language.h"
#include "components/spellcheck/spellcheck_build_features.h"
+#include "content/public/common/service_names.mojom.h"
#include "content/public/renderer/render_frame.h"
+#include "content/public/renderer/render_thread.h"
+#include "services/service_manager/public/cpp/connector.h"
#include "third_party/WebKit/public/platform/WebVector.h"
#include "third_party/WebKit/public/web/WebDocument.h"
#include "third_party/WebKit/public/web/WebElement.h"
@@ -47,6 +52,16 @@ SpellCheckProvider::SpellCheckProvider(content::RenderFrame* render_frame,
SpellCheckProvider::~SpellCheckProvider() {
}
+spellcheck::mojom::SpellCheckHost& SpellCheckProvider::GetSpellCheckHost() {
+ if (spellcheck_host_)
+ return *spellcheck_host_;
+
+ DCHECK(content::RenderThread::Get());
+ content::RenderThread::Get()->GetConnector()->BindInterface(
+ content::mojom::kBrowserServiceName, &spellcheck_host_);
+ return *spellcheck_host_;
+}
+
void SpellCheckProvider::RequestTextChecking(
const base::string16& text,
WebTextCheckingCompletion* completion) {
@@ -64,34 +79,34 @@ void SpellCheckProvider::RequestTextChecking(
// this text to the Spelling service only if a user enables this feature.
last_request_.clear();
last_results_.Assign(blink::WebVector<blink::WebTextCheckingResult>());
+ last_identifier_ = text_check_completions_.Add(completion);
#if BUILDFLAG(USE_BROWSER_SPELLCHECKER)
+ // TODO(crbug.com/714480): convert the RequestTextCheck IPC to mojo.
// Text check (unified request for grammar and spell check) is only
// available for browser process, so we ask the system spellchecker
- // over IPC or return an empty result if the checker is not
- // available.
- Send(new SpellCheckHostMsg_RequestTextCheck(
- routing_id(), text_check_completions_.Add(completion), text));
+ // over IPC or return an empty result if the checker is not available.
+ Send(new SpellCheckHostMsg_RequestTextCheck(routing_id(), last_identifier_,
+ text));
#else
- Send(new SpellCheckHostMsg_CallSpellingService(
- routing_id(), text_check_completions_.Add(completion),
- base::string16(text)));
+ GetSpellCheckHost().CallSpellingService(
+ text, base::Bind(&SpellCheckProvider::OnRespondSpellingService,
+ base::Unretained(this), last_identifier_, text));
#endif // !USE_BROWSER_SPELLCHECKER
}
bool SpellCheckProvider::OnMessageReceived(const IPC::Message& message) {
+#if BUILDFLAG(USE_BROWSER_SPELLCHECKER)
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(SpellCheckProvider, message)
-#if !BUILDFLAG(USE_BROWSER_SPELLCHECKER)
- IPC_MESSAGE_HANDLER(SpellCheckMsg_RespondSpellingService,
- OnRespondSpellingService)
-#endif
-#if BUILDFLAG(USE_BROWSER_SPELLCHECKER)
+ // TODO(crbug.com/714480): convert the RequestTextCheck IPC to mojo.
IPC_MESSAGE_HANDLER(SpellCheckMsg_RespondTextCheck, OnRespondTextCheck)
-#endif
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
+#else
+ return false;
+#endif
}
void SpellCheckProvider::FocusedNodeChanged(const blink::WebNode& unused) {
@@ -129,7 +144,8 @@ void SpellCheckProvider::CheckSpelling(
UMA_HISTOGRAM_COUNTS("SpellCheck.api.check", word.size());
// If optional_suggestions is not requested, the API is called
// for marking. So we use this for counting markable words.
- Send(new SpellCheckHostMsg_NotifyChecked(routing_id(), word, 0 < length));
+ if (content::RenderThread::Get()) // Can be NULL in tests.
+ GetSpellCheckHost().NotifyChecked(word, 0 < length);
}
}
@@ -151,8 +167,8 @@ void SpellCheckProvider::CancelAllPendingRequests() {
#if !BUILDFLAG(USE_BROWSER_SPELLCHECKER)
void SpellCheckProvider::OnRespondSpellingService(
int identifier,
- bool succeeded,
const base::string16& line,
+ bool succeeded,
const std::vector<SpellCheckResult>& results) {
WebTextCheckingCompletion* completion =
text_check_completions_.Lookup(identifier);

Powered by Google App Engine
This is Rietveld 408576698