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

Side by Side Diff: chrome/browser/instant/instant_controller.cc

Issue 11413217: Instant API: tell page whether the browser is capturing key strokes. (Closed) Base URL: http://git.chromium.org/chromium/src.git@focus
Patch Set: Rebase. Addressed comments. 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
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/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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 145
146 InstantController::InstantController(chrome::BrowserInstantController* browser, 146 InstantController::InstantController(chrome::BrowserInstantController* browser,
147 bool extended_enabled) 147 bool extended_enabled)
148 : browser_(browser), 148 : browser_(browser),
149 extended_enabled_(extended_enabled), 149 extended_enabled_(extended_enabled),
150 instant_enabled_(false), 150 instant_enabled_(false),
151 model_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 151 model_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
152 last_verbatim_(false), 152 last_verbatim_(false),
153 last_transition_type_(content::PAGE_TRANSITION_LINK), 153 last_transition_type_(content::PAGE_TRANSITION_LINK),
154 last_match_was_search_(false), 154 last_match_was_search_(false),
155 is_omnibox_focused_(false) { 155 omnibox_focus_state_(NONE) {
156 } 156 }
157 157
158 InstantController::~InstantController() { 158 InstantController::~InstantController() {
159 } 159 }
160 160
161 bool InstantController::Update(const AutocompleteMatch& match, 161 bool InstantController::Update(const AutocompleteMatch& match,
162 const string16& user_text, 162 const string16& user_text,
163 const string16& full_text, 163 const string16& full_text,
164 const bool verbatim, 164 const bool verbatim,
165 const bool user_input_in_progress, 165 const bool user_input_in_progress,
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 469
470 // Try to create another loader immediately so that it is ready for the next 470 // Try to create another loader immediately so that it is ready for the next
471 // user interaction. 471 // user interaction.
472 CreateDefaultLoader(); 472 CreateDefaultLoader();
473 473
474 return true; 474 return true;
475 } 475 }
476 476
477 void InstantController::OmniboxLostFocus(gfx::NativeView view_gaining_focus) { 477 void InstantController::OmniboxLostFocus(gfx::NativeView view_gaining_focus) {
478 DVLOG(1) << "OmniboxLostFocus"; 478 DVLOG(1) << "OmniboxLostFocus";
479 is_omnibox_focused_ = false; 479 omnibox_focus_state_ = NONE;
480 SendKeyCaptureModeToPage();
480 481
481 if (!extended_enabled_ && !instant_enabled_) 482 if (!extended_enabled_ && !instant_enabled_)
482 return; 483 return;
483 484
484 // If the preview isn't showing search suggestions, nothing to do. The check 485 // If the preview isn't showing search suggestions, nothing to do. The check
485 // for GetPreviewContents() (which normally is redundant, given IsCurrent()) 486 // for GetPreviewContents() (which normally is redundant, given IsCurrent())
486 // is to handle the case when we get here during a commit. 487 // is to handle the case when we get here during a commit.
487 if (!IsCurrent() || !GetPreviewContents()) { 488 if (!IsCurrent() || !GetPreviewContents()) {
488 OnStaleLoader(); 489 OnStaleLoader();
489 return; 490 return;
490 } 491 }
491 492
492 #if defined(OS_MACOSX) 493 #if defined(OS_MACOSX)
493 if (!loader_->IsPointerDownFromActivate()) 494 if (!loader_->IsPointerDownFromActivate())
494 Hide(true); 495 Hide(true);
495 #else 496 #else
496 if (IsViewInContents(GetViewGainingFocus(view_gaining_focus), 497 if (IsViewInContents(GetViewGainingFocus(view_gaining_focus),
497 GetPreviewContents()->web_contents())) 498 GetPreviewContents()->web_contents()))
498 CommitIfCurrent(INSTANT_COMMIT_FOCUS_LOST); 499 CommitIfCurrent(INSTANT_COMMIT_FOCUS_LOST);
499 else 500 else
500 Hide(true); 501 Hide(true);
501 #endif 502 #endif
502 } 503 }
503 504
504 void InstantController::OmniboxGotFocus() { 505 void InstantController::OmniboxGotFocus(bool focus_is_visible) {
505 DVLOG(1) << "OmniboxGotFocus"; 506 DVLOG(1) << "OmniboxGotFocus";
506 is_omnibox_focused_ = true; 507 omnibox_focus_state_ = focus_is_visible ? VISIBLE : INVISIBLE;
508 SendKeyCaptureModeToPage();
507 509
508 if (!extended_enabled_ && !instant_enabled_) 510 if (!extended_enabled_ && !instant_enabled_)
509 return; 511 return;
510 512
511 if (!GetPreviewContents()) 513 if (!GetPreviewContents())
512 CreateDefaultLoader(); 514 CreateDefaultLoader();
513 } 515 }
514 516
515 void InstantController::SearchModeChanged( 517 void InstantController::SearchModeChanged(
516 const chrome::search::Mode& old_mode, 518 const chrome::search::Mode& old_mode,
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 if (!GetInstantURL(template_url, &instant_url)) 702 if (!GetInstantURL(template_url, &instant_url))
701 return false; 703 return false;
702 704
703 if (GetPreviewContents() && loader_->instant_url() != instant_url) 705 if (GetPreviewContents() && loader_->instant_url() != instant_url)
704 DeleteLoader(); 706 DeleteLoader();
705 707
706 if (!GetPreviewContents()) { 708 if (!GetPreviewContents()) {
707 loader_.reset(new InstantLoader(this, instant_url, active_tab)); 709 loader_.reset(new InstantLoader(this, instant_url, active_tab));
708 loader_->Init(); 710 loader_->Init();
709 711
710 // Ensure the searchbox API has the correct theme-related info and context. 712 // Ensure the searchbox API has correct state.
711 if (extended_enabled_) { 713 if (extended_enabled_) {
712 browser_->UpdateThemeInfoForPreview(); 714 browser_->UpdateThemeInfoForPreview();
713 loader_->SearchModeChanged(search_mode_); 715 loader_->SearchModeChanged(search_mode_);
716 SendKeyCaptureModeToPage();
714 } 717 }
715 718
716 // Reset the loader timer. 719 // Reset the loader timer.
717 stale_loader_timer_.Start( 720 stale_loader_timer_.Start(
718 FROM_HERE, 721 FROM_HERE,
719 base::TimeDelta::FromMilliseconds(kStaleLoaderTimeoutMS), this, 722 base::TimeDelta::FromMilliseconds(kStaleLoaderTimeoutMS), this,
720 &InstantController::OnStaleLoader); 723 &InstantController::OnStaleLoader);
721 } 724 }
722 725
723 return true; 726 return true;
724 } 727 }
725 728
726 bool InstantController::CreateDefaultLoader() { 729 bool InstantController::CreateDefaultLoader() {
727 // If there's no active tab, the browser is closing. 730 // If there's no active tab, the browser is closing.
728 const TabContents* active_tab = browser_->GetActiveTabContents(); 731 const TabContents* active_tab = browser_->GetActiveTabContents();
729 if (!active_tab) 732 if (!active_tab)
730 return false; 733 return false;
731 734
732 const TemplateURL* template_url = 735 const TemplateURL* template_url =
733 TemplateURLServiceFactory::GetForProfile(active_tab->profile())-> 736 TemplateURLServiceFactory::GetForProfile(active_tab->profile())->
734 GetDefaultSearchProvider(); 737 GetDefaultSearchProvider();
735 738
736 return ResetLoader(template_url, active_tab); 739 return ResetLoader(template_url, active_tab);
737 } 740 }
738 741
739 void InstantController::OnStaleLoader() { 742 void InstantController::OnStaleLoader() {
740 // If the preview is showing or the omnibox has focus, don't delete the 743 // If the preview is showing or the omnibox has focus, don't delete the
741 // loader. It will get refreshed the next time the preview is hidden or the 744 // loader. It will get refreshed the next time the preview is hidden or the
742 // omnibox loses focus. 745 // omnibox loses focus.
743 if (!stale_loader_timer_.IsRunning() && !is_omnibox_focused_ && 746 if (!stale_loader_timer_.IsRunning() && omnibox_focus_state_ == NONE &&
744 model_.mode().is_default()) { 747 model_.mode().is_default()) {
745 DeleteLoader(); 748 DeleteLoader();
746 CreateDefaultLoader(); 749 CreateDefaultLoader();
747 } 750 }
748 } 751 }
749 752
750 void InstantController::DeleteLoader() { 753 void InstantController::DeleteLoader() {
751 // Clear all state, except |last_transition_type_| as it's used during commit. 754 // Clear all state, except |last_transition_type_| as it's used during commit.
752 last_user_text_.clear(); 755 last_user_text_.clear();
753 last_full_text_.clear(); 756 last_full_text_.clear();
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 // There is no point in sanity-checking |intersection.y()| because the omnibox 858 // There is no point in sanity-checking |intersection.y()| because the omnibox
856 // can be placed anywhere vertically relative to the preview (for example, in 859 // can be placed anywhere vertically relative to the preview (for example, in
857 // Mac fullscreen mode, the omnibox is fully enclosed by the preview bounds). 860 // Mac fullscreen mode, the omnibox is fully enclosed by the preview bounds).
858 DCHECK_LE(0, intersection.x()); 861 DCHECK_LE(0, intersection.x());
859 DCHECK_LE(0, intersection.width()); 862 DCHECK_LE(0, intersection.width());
860 DCHECK_LE(0, intersection.height()); 863 DCHECK_LE(0, intersection.height());
861 864
862 loader_->SetOmniboxBounds(intersection); 865 loader_->SetOmniboxBounds(intersection);
863 } 866 }
864 867
868 void InstantController::SendKeyCaptureModeToPage() {
869 if (extended_enabled_ && GetPreviewContents())
870 loader_->OnKeyCaptureChange(omnibox_focus_state_ == INVISIBLE);
871 }
872
865 bool InstantController::GetInstantURL(const TemplateURL* template_url, 873 bool InstantController::GetInstantURL(const TemplateURL* template_url,
866 std::string* instant_url) const { 874 std::string* instant_url) const {
867 CommandLine* command_line = CommandLine::ForCurrentProcess(); 875 CommandLine* command_line = CommandLine::ForCurrentProcess();
868 if (command_line->HasSwitch(switches::kInstantURL)) { 876 if (command_line->HasSwitch(switches::kInstantURL)) {
869 *instant_url = command_line->GetSwitchValueASCII(switches::kInstantURL); 877 *instant_url = command_line->GetSwitchValueASCII(switches::kInstantURL);
870 return template_url != NULL; 878 return template_url != NULL;
871 } 879 }
872 880
873 if (!template_url) 881 if (!template_url)
874 return false; 882 return false;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 } 914 }
907 915
908 std::map<std::string, int>::const_iterator iter = 916 std::map<std::string, int>::const_iterator iter =
909 blacklisted_urls_.find(*instant_url); 917 blacklisted_urls_.find(*instant_url);
910 if (iter != blacklisted_urls_.end() && 918 if (iter != blacklisted_urls_.end() &&
911 iter->second > kMaxInstantSupportFailures) 919 iter->second > kMaxInstantSupportFailures)
912 return false; 920 return false;
913 921
914 return true; 922 return true;
915 } 923 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698