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

Unified Diff: chrome/browser/tab_contents/spelling_menu_observer.cc

Issue 8422006: Adds a bubble that asks a user whether to integrate the Spelling service. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 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
« no previous file with comments | « chrome/browser/tab_contents/spelling_menu_observer.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/tab_contents/spelling_menu_observer.cc
===================================================================
--- chrome/browser/tab_contents/spelling_menu_observer.cc (revision 108037)
+++ chrome/browser/tab_contents/spelling_menu_observer.cc (working copy)
@@ -14,6 +14,8 @@
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/spellchecker/spellcheck_host.h"
+#include "chrome/browser/spellchecker/spellcheck_host_metrics.h"
#include "chrome/browser/tab_contents/render_view_context_menu.h"
#include "chrome/common/pref_names.h"
#include "content/browser/renderer_host/render_view_host.h"
@@ -55,45 +57,87 @@
if (!profile || !profile->GetRequestContext())
return;
- // Retrieve the misspelled word to be sent to the Spelling service.
- string16 text = params.misspelled_word;
- if (text.empty())
- return;
+ PrefService* pref = profile->GetPrefs();
+ if (pref->GetBoolean(prefs::kEnableSpellCheck) &&
+ pref->GetBoolean(prefs::kSpellCheckUseSpellingService)) {
+ // Retrieve the misspelled word to be sent to the Spelling service.
+ string16 text = params.misspelled_word;
+ if (text.empty())
+ return;
- // Initialize variables used in OnURLFetchComplete(). We copy the input text
- // to the result text so we can replace its misspelled regions with
- // suggestions.
- loading_frame_ = 0;
- succeeded_ = false;
- result_ = text;
+ // Initialize variables used in OnURLFetchComplete(). We copy the input text
+ // to the result text so we can replace its misspelled regions with
+ // suggestions.
+ loading_frame_ = 0;
+ succeeded_ = false;
+ result_ = text;
- // Add a placeholder item. This item will be updated when we receive a
- // response from the Spelling service. (We do not have to disable this item
- // now since Chrome will call IsCommandIdEnabled() and disable it.)
- loading_message_ =
- l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_SPELLING_CHECKING);
- proxy_->AddMenuItem(IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION,
- loading_message_);
+ // Add a placeholder item. This item will be updated when we receive a
+ // response from the Spelling service. (We do not have to disable this item
+ // now since Chrome will call IsCommandIdEnabled() and disable it.)
+ loading_message_ =
+ l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_SPELLING_CHECKING);
+ proxy_->AddMenuItem(IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION,
+ loading_message_);
- // Invoke a JSON-RPC call to the Spelling service in the background so we can
- // update the placeholder item when we receive its response. It also starts
- // the animation timer so we can show animation until we receive it.
- const PrefService* pref = profile->GetPrefs();
- std::string language =
- pref ? pref->GetString(prefs::kSpellCheckDictionary) : "en-US";
- Invoke(text, language, profile->GetRequestContext());
+ // Invoke a JSON-RPC call to the Spelling service in the background so we
+ // can update the placeholder item when we receive its response. It also
+ // starts the animation timer so we can show animation until we receive it.
+ const PrefService* pref = profile->GetPrefs();
+ std::string language =
+ pref ? pref->GetString(prefs::kSpellCheckDictionary) : "en-US";
+ Invoke(text, language, profile->GetRequestContext());
+ }
+
+ // Append Dictionary spell check suggestions.
+ suggestions_ = params.dictionary_suggestions;
+ for (size_t i = 0; i < params.dictionary_suggestions.size() &&
+ IDC_SPELLCHECK_SUGGESTION_0 + i <= IDC_SPELLCHECK_SUGGESTION_LAST;
+ ++i) {
+ proxy_->AddMenuItem(IDC_SPELLCHECK_SUGGESTION_0 + static_cast<int>(i),
+ params.dictionary_suggestions[i]);
+ }
}
bool SpellingMenuObserver::IsCommandIdSupported(int command_id) {
+ if (command_id >= IDC_SPELLCHECK_SUGGESTION_0 &&
+ command_id <= IDC_SPELLCHECK_SUGGESTION_4)
+ return true;
+
return command_id == IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION;
}
bool SpellingMenuObserver::IsCommandIdEnabled(int command_id) {
- return command_id == IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION && succeeded_;
+ DCHECK(IsCommandIdSupported(command_id));
+
+ if (command_id >= IDC_SPELLCHECK_SUGGESTION_0 &&
+ command_id <= IDC_SPELLCHECK_SUGGESTION_4)
+ return true;
+
+ if (command_id == IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION)
+ return succeeded_;
+ return false;
}
void SpellingMenuObserver::ExecuteCommand(int command_id) {
- if (IsCommandIdEnabled(command_id))
+ DCHECK(IsCommandIdSupported(command_id));
+
+ if (command_id >= IDC_SPELLCHECK_SUGGESTION_0 &&
+ command_id <= IDC_SPELLCHECK_SUGGESTION_4) {
+ proxy_->GetRenderViewHost()->Replace(
+ suggestions_[command_id - IDC_SPELLCHECK_SUGGESTION_0]);
+ // GetSpellCheckHost() can return null when the suggested word is
+ // provided by Web SpellCheck API.
+ Profile* profile = proxy_->GetProfile();
+ if (profile) {
+ SpellCheckHost* spellcheck_host = profile->GetSpellCheckHost();
+ if (spellcheck_host && spellcheck_host->GetMetrics())
+ spellcheck_host->GetMetrics()->RecordReplacedWordStats(1);
+ }
+ return;
+ }
+
+ if (command_id == IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION)
proxy_->GetRenderViewHost()->Replace(result_);
}
@@ -163,16 +207,11 @@
std::string data;
source->GetResponseAsString(&data);
succeeded_ = ParseResponse(source->GetResponseCode(), data);
- if (!succeeded_)
- result_ = l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_SPELLING_CORRECT);
- // Update the menu item with the result text. We enable this item only when
- // the request text has misspelled words. (We disable this item not only when
- // we receive a server error but also when the input text consists only of
- // well-spelled words. For either case, we do not need to replace the input
- // text.)
+ // Update the menu item with the result text. We disable this item and hide it
+ // when the spelling service does not provide valid suggestions.
proxy_->UpdateMenuItem(IDC_CONTENT_CONTEXT_SPELLING_SUGGESTION, succeeded_,
- false, result_);
+ !succeeded_, result_);
}
bool SpellingMenuObserver::ParseResponse(int response,
@@ -255,6 +294,14 @@
result_.replace(start, length, text);
}
+ // If the above result text is included in the suggestion list provided by the
+ // local spellchecker, we return false to hide this item.
+ for (std::vector<string16>::const_iterator it = suggestions_.begin();
+ it != suggestions_.end(); ++it) {
+ if (result_ == *it)
+ return false;
+ }
+
return true;
}
« no previous file with comments | « chrome/browser/tab_contents/spelling_menu_observer.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698