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

Side by Side Diff: chrome/browser/ui/omnibox/omnibox_edit_model.cc

Issue 11421079: Persist the Instant API to committed search result pages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More fixes Created 8 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 #include "chrome/browser/ui/omnibox/omnibox_edit_model.h" 5 #include "chrome/browser/ui/omnibox/omnibox_edit_model.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 306
307 bool OmniboxEditModel::UseVerbatimInstant() { 307 bool OmniboxEditModel::UseVerbatimInstant() {
308 #if defined(OS_MACOSX) 308 #if defined(OS_MACOSX)
309 // TODO(suzhe): Fix Mac port to display Instant suggest in a separated NSView, 309 // TODO(suzhe): Fix Mac port to display Instant suggest in a separated NSView,
310 // so that we can display Instant suggest along with composition text. 310 // so that we can display Instant suggest along with composition text.
311 const AutocompleteInput& input = autocomplete_controller_->input(); 311 const AutocompleteInput& input = autocomplete_controller_->input();
312 if (input.prevent_inline_autocomplete()) 312 if (input.prevent_inline_autocomplete())
313 return true; 313 return true;
314 #endif 314 #endif
315 315
316 // The value of input.prevent_inline_autocomplete() is determined by 316 // The value of input.prevent_inline_autocomplete() is determined by the
317 // following conditions: 317 // following conditions:
318 // 1. If the caret is at the end of the text (checked below). 318 // 1. If the caret is at the end of the text.
319 // 2. If it's in IME composition mode. 319 // 2. If it's in IME composition mode.
320 // As we use a separated widget for displaying the Instant suggest, it won't 320 // We send the caret position to Instant (so it can determine #1 itself), and
321 // interfere with IME composition, so we don't need to care about the value of 321 // we use a separated widget for displaying the Instant suggest (so it doesn't
322 // interfere with #2). So, we don't need to care about the value of
322 // input.prevent_inline_autocomplete() here. 323 // input.prevent_inline_autocomplete() here.
323 if (view_->DeleteAtEndPressed() || (popup_->selected_line() != 0) || 324 return view_->DeleteAtEndPressed() || popup_->selected_line() != 0 ||
324 just_deleted_text_ || !inline_autocomplete_text_.empty()) 325 just_deleted_text_;
325 return true;
326
327 size_t start, end;
328 view_->GetSelectionBounds(&start, &end);
329 return (start != end) || (start != view_->GetText().length());
330 } 326 }
331 327
332 string16 OmniboxEditModel::GetDesiredTLD() const { 328 string16 OmniboxEditModel::GetDesiredTLD() const {
333 // Tricky corner case: The user has typed "foo" and currently sees an inline 329 // Tricky corner case: The user has typed "foo" and currently sees an inline
334 // autocomplete suggestion of "foo.net". He now presses ctrl-a (e.g. to 330 // autocomplete suggestion of "foo.net". He now presses ctrl-a (e.g. to
335 // select all, on Windows). If we treat the ctrl press as potentially for the 331 // select all, on Windows). If we treat the ctrl press as potentially for the
336 // sake of ctrl-enter, then we risk "www.foo.com" being promoted as the best 332 // sake of ctrl-enter, then we risk "www.foo.com" being promoted as the best
337 // match. This would make the autocompleted text disappear, leaving our user 333 // match. This would make the autocompleted text disappear, leaving our user
338 // feeling very confused when the wrong text gets highlighted. 334 // feeling very confused when the wrong text gets highlighted.
339 // 335 //
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
1182 } 1178 }
1183 } 1179 }
1184 1180
1185 bool OmniboxEditModel::DoInstant(const AutocompleteMatch& match) { 1181 bool OmniboxEditModel::DoInstant(const AutocompleteMatch& match) {
1186 InstantController* instant = controller_->GetInstant(); 1182 InstantController* instant = controller_->GetInstant();
1187 if (!instant || in_revert_) 1183 if (!instant || in_revert_)
1188 return false; 1184 return false;
1189 1185
1190 // The two pieces of text we want to send Instant, viz., what the user has 1186 // The two pieces of text we want to send Instant, viz., what the user has
1191 // typed, and the full omnibox text including any inline autocompletion. 1187 // typed, and the full omnibox text including any inline autocompletion.
1192 string16 user_text = user_text_; 1188 string16 user_text = has_temporary_text_ ?
1193 string16 full_text = user_text_ + inline_autocomplete_text_; 1189 match.fill_into_edit : DisplayTextFromUserText(user_text_);
1194 1190 string16 full_text = view_->GetText();
1195 // If there's temporary text, that overrides the user_text. In this case, we
1196 // should ignore any inline_autocomplete_text_, because it won't be visible.
1197 if (has_temporary_text_)
1198 user_text = full_text = CurrentMatch().fill_into_edit;
1199
1200 // Remove keyword if we're in keyword mode.
1201 user_text = DisplayTextFromUserText(user_text);
1202 full_text = DisplayTextFromUserText(full_text);
1203 1191
1204 // Remove "?" if we're in forced query mode. 1192 // Remove "?" if we're in forced query mode.
1205 AutocompleteInput::RemoveForcedQueryStringIfNecessary( 1193 AutocompleteInput::RemoveForcedQueryStringIfNecessary(
1206 autocomplete_controller_->input().type(), &user_text); 1194 autocomplete_controller_->input().type(), &user_text);
1207 AutocompleteInput::RemoveForcedQueryStringIfNecessary( 1195 AutocompleteInput::RemoveForcedQueryStringIfNecessary(
1208 autocomplete_controller_->input().type(), &full_text); 1196 autocomplete_controller_->input().type(), &full_text);
1209 1197
1210 return instant->Update(match, user_text, full_text, UseVerbatimInstant(), 1198 size_t start, end;
1211 user_input_in_progress_, popup_->IsOpen()); 1199 view_->GetSelectionBounds(&start, &end);
1200
1201 return instant->Update(match, user_text, full_text, start, end,
1202 UseVerbatimInstant(), user_input_in_progress_, popup_->IsOpen());
1212 } 1203 }
1213 1204
1214 void OmniboxEditModel::DoPrerender(const AutocompleteMatch& match) { 1205 void OmniboxEditModel::DoPrerender(const AutocompleteMatch& match) {
1215 // Do not prerender if the destination URL is the same as the current URL. 1206 // Do not prerender if the destination URL is the same as the current URL.
1216 if (match.destination_url == PermanentURL()) 1207 if (match.destination_url == PermanentURL())
1217 return; 1208 return;
1218 // It's possible the tab strip does not have an active tab contents, for 1209 // It's possible the tab strip does not have an active tab contents, for
1219 // instance if the tab has been closed or on return from a sleep state 1210 // instance if the tab has been closed or on return from a sleep state
1220 // (http://crbug.com/105689) 1211 // (http://crbug.com/105689)
1221 content::WebContents* tab = controller_->GetWebContents(); 1212 content::WebContents* tab = controller_->GetWebContents();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1271 } 1262 }
1272 1263
1273 void OmniboxEditModel::ClassifyStringForPasteAndGo( 1264 void OmniboxEditModel::ClassifyStringForPasteAndGo(
1274 const string16& text, 1265 const string16& text,
1275 AutocompleteMatch* match, 1266 AutocompleteMatch* match,
1276 GURL* alternate_nav_url) const { 1267 GURL* alternate_nav_url) const {
1277 DCHECK(match); 1268 DCHECK(match);
1278 AutocompleteClassifierFactory::GetForProfile(profile_)->Classify(text, 1269 AutocompleteClassifierFactory::GetForProfile(profile_)->Classify(text,
1279 string16(), false, false, match, alternate_nav_url); 1270 string16(), false, false, match, alternate_nav_url);
1280 } 1271 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698