OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/search/search_tab_helper.h" | 5 #include "chrome/browser/ui/search/search_tab_helper.h" |
6 | 6 |
7 #include "chrome/browser/google/google_util.h" | 7 #include "chrome/browser/google/google_util.h" |
8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
9 #include "chrome/browser/ui/omnibox/omnibox_edit_model.h" | 9 #include "chrome/browser/ui/omnibox/omnibox_edit_model.h" |
10 #include "chrome/browser/ui/tab_contents/tab_contents.h" | 10 #include "chrome/browser/ui/tab_contents/tab_contents.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 } // namespace | 27 } // namespace |
28 | 28 |
29 namespace chrome { | 29 namespace chrome { |
30 namespace search { | 30 namespace search { |
31 | 31 |
32 SearchTabHelper::SearchTabHelper( | 32 SearchTabHelper::SearchTabHelper( |
33 TabContents* contents, | 33 TabContents* contents, |
34 bool is_search_enabled) | 34 bool is_search_enabled) |
35 : WebContentsObserver(contents->web_contents()), | 35 : WebContentsObserver(contents->web_contents()), |
36 is_search_enabled_(is_search_enabled), | 36 is_search_enabled_(is_search_enabled), |
37 model_(contents) { | 37 model_(contents), |
| 38 has_navigated_(false) { |
38 if (!is_search_enabled) | 39 if (!is_search_enabled) |
39 return; | 40 return; |
40 | 41 |
41 registrar_.Add( | 42 registrar_.Add( |
42 this, | 43 this, |
43 content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 44 content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
44 content::Source<content::NavigationController>( | 45 content::Source<content::NavigationController>( |
45 &contents->web_contents()->GetController())); | 46 &contents->web_contents()->GetController())); |
46 } | 47 } |
47 | 48 |
(...skipping 30 matching lines...) Expand all Loading... |
78 Mode::Type mode = Mode::MODE_DEFAULT; | 79 Mode::Type mode = Mode::MODE_DEFAULT; |
79 GURL url(web_contents()->GetURL()); | 80 GURL url(web_contents()->GetURL()); |
80 // TODO(kuan): revisit this condition when zero suggest becomes available. | 81 // TODO(kuan): revisit this condition when zero suggest becomes available. |
81 if (google_util::IsInstantExtendedAPIGoogleSearchUrl(url.spec()) || | 82 if (google_util::IsInstantExtendedAPIGoogleSearchUrl(url.spec()) || |
82 (edit_model->has_focus() && edit_model->user_input_in_progress())) { | 83 (edit_model->has_focus() && edit_model->user_input_in_progress())) { |
83 mode = Mode::MODE_SEARCH; | 84 mode = Mode::MODE_SEARCH; |
84 } | 85 } |
85 model_.SetMode(Mode(mode, true)); | 86 model_.SetMode(Mode(mode, true)); |
86 } | 87 } |
87 | 88 |
88 void SearchTabHelper::NavigateToPendingEntry( | |
89 const GURL& url, | |
90 content::NavigationController::ReloadType reload_type) { | |
91 if (!is_search_enabled_) | |
92 return; | |
93 | |
94 UpdateModel(url); | |
95 FlushNTP(url); | |
96 } | |
97 | |
98 void SearchTabHelper::Observe( | 89 void SearchTabHelper::Observe( |
99 int type, | 90 int type, |
100 const content::NotificationSource& source, | 91 const content::NotificationSource& source, |
101 const content::NotificationDetails& details) { | 92 const content::NotificationDetails& details) { |
102 DCHECK_EQ(content::NOTIFICATION_NAV_ENTRY_COMMITTED, type); | 93 DCHECK_EQ(content::NOTIFICATION_NAV_ENTRY_COMMITTED, type); |
103 content::LoadCommittedDetails* committed_details = | 94 content::LoadCommittedDetails* committed_details = |
104 content::Details<content::LoadCommittedDetails>(details).ptr(); | 95 content::Details<content::LoadCommittedDetails>(details).ptr(); |
105 UpdateModel(committed_details->entry->GetURL()); | 96 UpdateModel(committed_details->entry->GetURL(), has_navigated_); |
| 97 has_navigated_ = true; |
106 FlushNTP(committed_details->entry->GetURL()); | 98 FlushNTP(committed_details->entry->GetURL()); |
107 } | 99 } |
108 | 100 |
109 void SearchTabHelper::UpdateModel(const GURL& url) { | 101 void SearchTabHelper::UpdateModel(const GURL& url, bool animate) { |
110 Mode::Type type = Mode::MODE_DEFAULT; | 102 Mode::Type type = Mode::MODE_DEFAULT; |
111 if (IsNTP(url)) | 103 if (IsNTP(url)) |
112 type = Mode::MODE_NTP; | 104 type = Mode::MODE_NTP; |
113 else if (google_util::IsInstantExtendedAPIGoogleSearchUrl(url.spec())) | 105 else if (google_util::IsInstantExtendedAPIGoogleSearchUrl(url.spec())) |
114 type = Mode::MODE_SEARCH; | 106 type = Mode::MODE_SEARCH; |
115 model_.SetMode(Mode(type, true)); | 107 model_.SetMode(Mode(type, animate)); |
116 } | 108 } |
117 | 109 |
118 void SearchTabHelper::FlushNTP(const GURL& url) { | 110 void SearchTabHelper::FlushNTP(const GURL& url) { |
119 if (!IsNTP(url) && | 111 if (!IsNTP(url) && |
120 !google_util::IsInstantExtendedAPIGoogleSearchUrl(url.spec())) { | 112 !google_util::IsInstantExtendedAPIGoogleSearchUrl(url.spec())) { |
121 ntp_web_contents_.reset(); | 113 ntp_web_contents_.reset(); |
122 } | 114 } |
123 } | 115 } |
124 | 116 |
125 } // namespace search | 117 } // namespace search |
126 } // namespace chrome | 118 } // namespace chrome |
OLD | NEW |