Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/instant/instant_controller.h" | 5 #include "chrome/browser/instant/instant_controller.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 442 return false; | 442 return false; |
| 443 | 443 |
| 444 if (type == INSTANT_COMMIT_FOCUS_LOST) | 444 if (type == INSTANT_COMMIT_FOCUS_LOST) |
| 445 loader_->Cancel(last_omnibox_text_); | 445 loader_->Cancel(last_omnibox_text_); |
| 446 else | 446 else |
| 447 loader_->Submit(last_omnibox_text_); | 447 loader_->Submit(last_omnibox_text_); |
| 448 | 448 |
| 449 content::WebContents* preview = loader_->ReleaseContents(); | 449 content::WebContents* preview = loader_->ReleaseContents(); |
| 450 | 450 |
| 451 if (extended_enabled_) { | 451 if (extended_enabled_) { |
| 452 // Consider what's happening: | 452 string16 search_terms = last_omnibox_text_; |
| 453 // 1. The user has typed a query in the omnibox and committed it (either | 453 if (type == INSTANT_COMMIT_FOCUS_LOST && |
| 454 // by pressing Enter or clicking on the preview). | 454 last_suggestion_.behavior == INSTANT_COMPLETE_NEVER) |
| 455 // 2. We commit the preview to the tab strip, and tell the page. | 455 search_terms += last_suggestion_.text; |
|
Jered
2012/12/07 00:16:03
Indent.
Mathieu
2012/12/11 00:30:17
Done.
| |
| 456 // 3. The page will update the URL hash fragment with the query terms. | 456 preview->GetController().GetVisibleEntry()->SetSearchTerms(search_terms); |
| 457 // After steps 1 and 3, the omnibox will show the query terms. However, if | |
| 458 // the URL we are committing at step 2 doesn't already have query terms, it | |
| 459 // will flash for a brief moment as a plain URL. So, avoid that flicker by | |
| 460 // pretending that the plain URL is actually the typed query terms. | |
| 461 // TODO(samarth,beaudoin): Instead of this hack, we should add a new field | |
| 462 // to NavigationEntry to keep track of what the correct query, if any, is. | |
| 463 content::NavigationEntry* entry = | |
| 464 preview->GetController().GetVisibleEntry(); | |
| 465 std::string url = entry->GetVirtualURL().spec(); | |
| 466 if (!google_util::IsInstantExtendedAPIGoogleSearchUrl(url) && | |
| 467 google_util::IsGoogleDomainUrl(url, google_util::ALLOW_SUBDOMAIN, | |
| 468 google_util::ALLOW_NON_STANDARD_PORTS)) { | |
| 469 entry->SetVirtualURL(GURL( | |
| 470 url + "#q=" + | |
| 471 net::EscapeQueryParamValue(UTF16ToUTF8(last_omnibox_text_), true))); | |
| 472 chrome::search::SearchTabHelper::FromWebContents(preview)-> | |
| 473 NavigationEntryUpdated(); | |
| 474 } | |
| 475 } | 457 } |
| 476 | 458 |
| 477 // If the preview page has navigated since the last Update(), we need to add | 459 // If the preview page has navigated since the last Update(), we need to add |
| 478 // the navigation to history ourselves. Else, the page will navigate after | 460 // the navigation to history ourselves. Else, the page will navigate after |
| 479 // commit, and it will be added to history in the usual manner. | 461 // commit, and it will be added to history in the usual manner. |
| 480 const history::HistoryAddPageArgs& last_navigation = | 462 const history::HistoryAddPageArgs& last_navigation = |
| 481 loader_->last_navigation(); | 463 loader_->last_navigation(); |
| 482 if (!last_navigation.url.is_empty()) { | 464 if (!last_navigation.url.is_empty()) { |
| 483 content::NavigationEntry* entry = preview->GetController().GetActiveEntry(); | 465 content::NavigationEntry* entry = preview->GetController().GetActiveEntry(); |
| 484 DCHECK_EQ(last_navigation.url, entry->GetURL()); | 466 DCHECK_EQ(last_navigation.url, entry->GetURL()); |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1005 } | 987 } |
| 1006 | 988 |
| 1007 std::map<std::string, int>::const_iterator iter = | 989 std::map<std::string, int>::const_iterator iter = |
| 1008 blacklisted_urls_.find(*instant_url); | 990 blacklisted_urls_.find(*instant_url); |
| 1009 if (iter != blacklisted_urls_.end() && | 991 if (iter != blacklisted_urls_.end() && |
| 1010 iter->second > kMaxInstantSupportFailures) | 992 iter->second > kMaxInstantSupportFailures) |
| 1011 return false; | 993 return false; |
| 1012 | 994 |
| 1013 return true; | 995 return true; |
| 1014 } | 996 } |
| OLD | NEW |