summaryrefslogtreecommitdiffstats
path: root/chrome/browser/instant/instant_loader.cc
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-24 02:46:11 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-24 02:46:11 +0000
commitbdf1d86216f0d2a3f8600e3bc69147799225807d (patch)
tree9ea4800aa2947e962cd5a365abe9351ffd297d89 /chrome/browser/instant/instant_loader.cc
parent9cbfc3b8be01d655b307eb8e79fa53ca53ba14db (diff)
downloadchromium_src-bdf1d86216f0d2a3f8600e3bc69147799225807d.zip
chromium_src-bdf1d86216f0d2a3f8600e3bc69147799225807d.tar.gz
chromium_src-bdf1d86216f0d2a3f8600e3bc69147799225807d.tar.bz2
Instant: refactor code intended to prevent extra work.
current symptoms: - when you send two OnChanges in a row, the second one will get the a blank |suggested_text|. - if you type alaska, the suggestion is "alaska air". Pressing space returns a blank |suggested_text|. fix: - return last suggestion. Also consolidate two points in the code where we tried to prevent Update from doing extra work. BUG=64245 TEST=manual (see bug and above) Review URL: http://codereview.chromium.org/5330003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67206 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/instant/instant_loader.cc')
-rw-r--r--chrome/browser/instant/instant_loader.cc25
1 files changed, 17 insertions, 8 deletions
diff --git a/chrome/browser/instant/instant_loader.cc b/chrome/browser/instant/instant_loader.cc
index 9ef682d..90f6689 100644
--- a/chrome/browser/instant/instant_loader.cc
+++ b/chrome/browser/instant/instant_loader.cc
@@ -407,17 +407,25 @@ void InstantLoader::Update(TabContentsWrapper* tab_contents,
const string16& user_text,
bool verbatim,
string16* suggested_text) {
- if (url_ == url && verbatim == verbatim_)
+ // Strip leading ?.
+ string16 new_user_text =
+ !user_text.empty() && (UTF16ToWide(user_text)[0] == L'?') ?
+ user_text.substr(1) : user_text;
+
+ // If state hasn't changed, just reuse the last suggestion.
+ if (url_ == url && verbatim == verbatim_ && user_text_ == new_user_text &&
+ last_transition_type_ == transition_type) {
+ suggested_text->assign(last_suggestion_);
return;
+ }
DCHECK(!url.is_empty() && url.is_valid());
last_transition_type_ = transition_type;
url_ = url;
- // Strip leading ?.
- user_text_ = !user_text.empty() && (UTF16ToWide(user_text)[0] == L'?') ?
- user_text.substr(1) : user_text;
+ user_text_ = new_user_text;
verbatim_ = verbatim;
+ last_suggestion_.clear();
bool created_preview_contents;
if (preview_contents_.get() == NULL) {
@@ -480,7 +488,8 @@ void InstantLoader::Update(TabContentsWrapper* tab_contents,
complete_suggested_text_lower.size() > user_text_lower.size() &&
!complete_suggested_text_lower.compare(0, user_text_lower.size(),
user_text_lower)) {
- *suggested_text = complete_suggested_text_.substr(user_text_.size());
+ *suggested_text = last_suggestion_ =
+ complete_suggested_text_.substr(user_text_.size());
}
} else {
// Load the instant URL. We don't reflect the url we load in url() as
@@ -616,6 +625,7 @@ void InstantLoader::SetCompleteSuggestedText(
string16 user_text_lower = l10n_util::ToLower(user_text_);
string16 complete_suggested_text_lower = l10n_util::ToLower(
complete_suggested_text);
+ last_suggestion_.clear();
if (user_text_lower.compare(0, user_text_lower.size(),
complete_suggested_text_lower,
0, user_text_lower.size())) {
@@ -626,9 +636,8 @@ void InstantLoader::SetCompleteSuggestedText(
}
complete_suggested_text_ = complete_suggested_text;
- delegate_->SetSuggestedTextFor(
- this,
- complete_suggested_text_.substr(user_text_.size()));
+ last_suggestion_ = complete_suggested_text_.substr(user_text_.size());
+ delegate_->SetSuggestedTextFor(this, last_suggestion_);
}
void InstantLoader::PreviewPainted() {