Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
|
tommi (sloooow) - chröme
2013/03/07 13:04:46
I think that a decision was made to not change the
hans
2013/03/09 14:19:52
something is weird here.. it seems this is a new f
| |
| 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 #include "chrome/browser/spellchecker/spellcheck_message_filter.h" | 5 #include "chrome/browser/speech/tts_message_filter.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/prefs/pref_service.h" | |
| 9 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
| 10 #include "chrome/browser/spellchecker/spellcheck_factory.h" | 9 #include "chrome/common/spellcheck_messages.h" ///////////// |
|
tommi (sloooow) - chröme
2013/03/07 13:04:46
remove ///////?
| |
| 11 #include "chrome/browser/spellchecker/spellcheck_host_metrics.h" | |
| 12 #include "chrome/browser/spellchecker/spellcheck_service.h" | |
| 13 #include "chrome/browser/spellchecker/spelling_service_client.h" | |
| 14 #include "chrome/common/pref_names.h" | |
| 15 #include "chrome/common/spellcheck_messages.h" | |
| 16 #include "content/public/browser/render_process_host.h" | 10 #include "content/public/browser/render_process_host.h" |
| 17 #include "net/url_request/url_fetcher.h" | |
| 18 | 11 |
| 19 using content::BrowserThread; | 12 using content::BrowserThread; |
| 20 | 13 |
| 21 SpellCheckMessageFilter::SpellCheckMessageFilter(int render_process_id) | 14 TtsMessageFilter::TtsMessageFilter(int render_process_id) |
| 22 : render_process_id_(render_process_id), | 15 : render_process_id_(render_process_id) |
| 23 client_(new SpellingServiceClient) | |
| 24 #if !defined(OS_MACOSX) | 16 #if !defined(OS_MACOSX) |
| 25 , | 17 , |
| 26 route_id_(0), | 18 route_id_(0), |
| 27 identifier_(0) | 19 identifier_(0) |
| 28 #endif | 20 #endif |
| 29 { | 21 { |
| 30 } | 22 } |
| 31 | 23 |
| 32 void SpellCheckMessageFilter::OverrideThreadForMessage( | 24 void TtsMessageFilter::OverrideThreadForMessage( |
| 33 const IPC::Message& message, BrowserThread::ID* thread) { | 25 const IPC::Message& message, BrowserThread::ID* thread) { |
| 34 if (message.type() == SpellCheckHostMsg_RequestDictionary::ID || | 26 if (message.type() == SpellCheckHostMsg_RequestDictionary::ID || |
|
hans
2013/03/09 14:19:52
what's up with all the SpellCheck stuff here? am I
dmazzoni
2013/03/19 17:30:22
Sorry, my mistake - I switched implementation stra
| |
| 35 message.type() == SpellCheckHostMsg_NotifyChecked::ID) | 27 message.type() == SpellCheckHostMsg_NotifyChecked::ID) |
| 36 *thread = BrowserThread::UI; | 28 *thread = BrowserThread::UI; |
| 37 #if !defined(OS_MACOSX) | 29 #if !defined(OS_MACOSX) |
| 38 if (message.type() == SpellCheckHostMsg_CallSpellingService::ID) | 30 if (message.type() == SpellCheckHostMsg_CallSpellingService::ID) |
| 39 *thread = BrowserThread::UI; | 31 *thread = BrowserThread::UI; |
| 40 #endif | 32 #endif |
| 41 } | 33 } |
| 42 | 34 |
| 43 bool SpellCheckMessageFilter::OnMessageReceived(const IPC::Message& message, | 35 bool TtsMessageFilter::OnMessageReceived(const IPC::Message& message, |
| 44 bool* message_was_ok) { | 36 bool* message_was_ok) { |
| 45 bool handled = true; | 37 bool handled = true; |
| 46 IPC_BEGIN_MESSAGE_MAP_EX(SpellCheckMessageFilter, message, *message_was_ok) | 38 IPC_BEGIN_MESSAGE_MAP_EX(TtsMessageFilter, message, *message_was_ok) |
| 47 IPC_MESSAGE_HANDLER(SpellCheckHostMsg_RequestDictionary, | 39 IPC_MESSAGE_HANDLER(SpellCheckHostMsg_RequestDictionary, |
|
hans
2013/03/09 14:19:52
again with the spellcheck.. i'm not sure i underst
| |
| 48 OnSpellCheckerRequestDictionary) | 40 OnSpellCheckerRequestDictionary) |
| 49 IPC_MESSAGE_HANDLER(SpellCheckHostMsg_NotifyChecked, | 41 IPC_MESSAGE_HANDLER(SpellCheckHostMsg_NotifyChecked, |
| 50 OnNotifyChecked) | 42 OnNotifyChecked) |
| 51 #if !defined(OS_MACOSX) | 43 #if !defined(OS_MACOSX) |
| 52 IPC_MESSAGE_HANDLER(SpellCheckHostMsg_CallSpellingService, | 44 IPC_MESSAGE_HANDLER(SpellCheckHostMsg_CallSpellingService, |
| 53 OnCallSpellingService) | 45 OnCallSpellingService) |
| 54 #endif | 46 #endif |
| 55 IPC_MESSAGE_UNHANDLED(handled = false) | 47 IPC_MESSAGE_UNHANDLED(handled = false) |
| 56 IPC_END_MESSAGE_MAP() | 48 IPC_END_MESSAGE_MAP() |
| 57 return handled; | 49 return handled; |
| 58 } | 50 } |
| 59 | 51 |
| 60 SpellCheckMessageFilter::~SpellCheckMessageFilter() {} | 52 TtsMessageFilter::~TtsMessageFilter() {} |
| 61 | 53 |
| 62 void SpellCheckMessageFilter::OnSpellCheckerRequestDictionary() { | 54 void TtsMessageFilter::OnSpellCheckerRequestDictionary() { |
| 63 content::RenderProcessHost* host = | 55 content::RenderProcessHost* host = |
| 64 content::RenderProcessHost::FromID(render_process_id_); | 56 content::RenderProcessHost::FromID(render_process_id_); |
| 65 if (!host) | 57 if (!host) |
| 66 return; // Teardown. | 58 return; // Teardown. |
| 67 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); | 59 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); |
| 68 // The renderer has requested that we initialize its spellchecker. This should | 60 // The renderer has requested that we initialize its spellchecker. This should |
| 69 // generally only be called once per session, as after the first call, all | 61 // generally only be called once per session, as after the first call, all |
| 70 // future renderers will be passed the initialization information on startup | 62 // future renderers will be passed the initialization information on startup |
| 71 // (or when the dictionary changes in some way). | 63 // (or when the dictionary changes in some way). |
| 72 SpellcheckService* spellcheck_service = | 64 SpellcheckService* spellcheck_service = |
| 73 SpellcheckServiceFactory::GetForProfile(profile); | 65 SpellcheckServiceFactory::GetForProfile(profile); |
| 74 | 66 |
| 75 DCHECK(spellcheck_service); | 67 DCHECK(spellcheck_service); |
| 76 // The spellchecker initialization already started and finished; just send | 68 // The spellchecker initialization already started and finished; just send |
| 77 // it to the renderer. | 69 // it to the renderer. |
| 78 spellcheck_service->InitForRenderer(host); | 70 spellcheck_service->InitForRenderer(host); |
| 79 | 71 |
| 80 // TODO(rlp): Ensure that we do not initialize the hunspell dictionary more | 72 // TODO(rlp): Ensure that we do not initialize the hunspell dictionary more |
| 81 // than once if we get requests from different renderers. | 73 // than once if we get requests from different renderers. |
| 82 } | 74 } |
| 83 | 75 |
| 84 void SpellCheckMessageFilter::OnNotifyChecked(const string16& word, | 76 void TtsMessageFilter::OnNotifyChecked(const string16& word, |
| 85 bool misspelled) { | 77 bool misspelled) { |
| 86 content::RenderProcessHost* host = | 78 content::RenderProcessHost* host = |
| 87 content::RenderProcessHost::FromID(render_process_id_); | 79 content::RenderProcessHost::FromID(render_process_id_); |
| 88 if (!host) | 80 if (!host) |
| 89 return; // Teardown. | 81 return; // Teardown. |
| 90 // Delegates to SpellCheckHost which tracks the stats of our spellchecker. | 82 // Delegates to SpellCheckHost which tracks the stats of our spellchecker. |
| 91 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); | 83 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); |
| 92 SpellcheckService* spellcheck_service = | 84 SpellcheckService* spellcheck_service = |
| 93 SpellcheckServiceFactory::GetForProfile(profile); | 85 SpellcheckServiceFactory::GetForProfile(profile); |
| 94 DCHECK(spellcheck_service); | 86 DCHECK(spellcheck_service); |
| 95 if (spellcheck_service->GetMetrics()) | 87 if (spellcheck_service->GetMetrics()) |
| 96 spellcheck_service->GetMetrics()->RecordCheckedWordStats(word, misspelled); | 88 spellcheck_service->GetMetrics()->RecordCheckedWordStats(word, misspelled); |
| 97 } | 89 } |
| 98 | 90 |
| 99 #if !defined(OS_MACOSX) | 91 #if !defined(OS_MACOSX) |
| 100 void SpellCheckMessageFilter::OnCallSpellingService( | 92 void TtsMessageFilter::OnCallSpellingService( |
| 101 int route_id, | 93 int route_id, |
| 102 int identifier, | 94 int identifier, |
| 103 int document_tag, | 95 int document_tag, |
| 104 const string16& text) { | 96 const string16& text) { |
| 105 DCHECK(!text.empty()); | 97 DCHECK(!text.empty()); |
| 106 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 98 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 99 if (!CallSpellingService(route_id, identifier, document_tag, text)) { | |
| 100 std::vector<SpellCheckResult> results; | |
| 101 Send(new SpellCheckMsg_RespondSpellingService(route_id, | |
| 102 identifier, | |
| 103 document_tag, | |
| 104 false, | |
| 105 text, | |
| 106 results)); | |
| 107 return; | |
| 108 } | |
| 107 route_id_ = route_id; | 109 route_id_ = route_id; |
| 108 identifier_ = identifier; | 110 identifier_ = identifier; |
| 109 CallSpellingService(document_tag, text); | |
| 110 } | 111 } |
| 111 | 112 |
| 112 void SpellCheckMessageFilter::OnTextCheckComplete( | 113 void TtsMessageFilter::OnTextCheckComplete( |
| 113 int tag, | 114 int tag, |
| 114 bool success, | 115 bool success, |
| 115 const string16& text, | 116 const string16& text, |
| 116 const std::vector<SpellCheckResult>& results) { | 117 const std::vector<SpellCheckResult>& results) { |
| 117 Send(new SpellCheckMsg_RespondSpellingService(route_id_, | 118 Send(new SpellCheckMsg_RespondSpellingService(route_id_, |
| 118 identifier_, | 119 identifier_, |
| 119 tag, | 120 tag, |
| 120 success, | 121 success, |
| 121 text, | 122 text, |
| 122 results)); | 123 results)); |
| 124 client_.reset(); | |
| 123 } | 125 } |
| 124 | 126 |
| 125 // CallSpellingService always executes the callback OnTextCheckComplete. | 127 bool TtsMessageFilter::CallSpellingService( |
| 126 // (Which, in turn, sends a SpellCheckMsg_RespondSpellingService) | 128 int route_id, |
| 127 void SpellCheckMessageFilter::CallSpellingService(int document_tag, | 129 int identifier, |
| 128 const string16& text) { | 130 int document_tag, |
| 129 Profile* profile = NULL; | 131 const string16& text) { |
| 130 content::RenderProcessHost* host = | 132 content::RenderProcessHost* host = |
| 131 content::RenderProcessHost::FromID(render_process_id_); | 133 content::RenderProcessHost::FromID(render_process_id_); |
| 132 if (host) | 134 if (!host) |
| 133 profile = Profile::FromBrowserContext(host->GetBrowserContext()); | 135 return false; |
| 134 | 136 Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext()); |
|
tommi (sloooow) - chröme
2013/03/07 13:04:46
I seem to recall FromBrowserContext return NULL in
| |
| 135 client_->RequestTextCheck( | 137 if (!profile->GetPrefs()->GetBoolean(prefs::kSpellCheckUseSpellingService)) |
| 138 return false; | |
| 139 client_.reset(new SpellingServiceClient); | |
| 140 return client_->RequestTextCheck( | |
| 136 profile, SpellingServiceClient::SPELLCHECK, text, | 141 profile, SpellingServiceClient::SPELLCHECK, text, |
| 137 base::Bind(&SpellCheckMessageFilter::OnTextCheckComplete, | 142 base::Bind(&TtsMessageFilter::OnTextCheckComplete, |
| 138 base::Unretained(this), document_tag)); | 143 base::Unretained(this), document_tag)); |
| 139 } | 144 } |
| 140 #endif | 145 #endif |
| OLD | NEW |