| 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/ui/browser_instant_controller.h" | 5 #include "chrome/browser/ui/browser_instant_controller.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "chrome/browser/extensions/extension_service.h" | 9 #include "chrome/browser/extensions/extension_service.h" |
| 10 #include "chrome/browser/extensions/extension_web_ui.h" | 10 #include "chrome/browser/extensions/extension_web_ui.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #include "content/public/browser/user_metrics.h" | 30 #include "content/public/browser/user_metrics.h" |
| 31 #include "content/public/browser/web_contents.h" | 31 #include "content/public/browser/web_contents.h" |
| 32 | 32 |
| 33 using content::UserMetricsAction; | 33 using content::UserMetricsAction; |
| 34 | 34 |
| 35 //////////////////////////////////////////////////////////////////////////////// | 35 //////////////////////////////////////////////////////////////////////////////// |
| 36 // BrowserInstantController, public: | 36 // BrowserInstantController, public: |
| 37 | 37 |
| 38 BrowserInstantController::BrowserInstantController(Browser* browser) | 38 BrowserInstantController::BrowserInstantController(Browser* browser) |
| 39 : browser_(browser), | 39 : browser_(browser), |
| 40 instant_(this, | 40 instant_(this, chrome::IsInstantExtendedAPIEnabled()), |
| 41 chrome::IsInstantExtendedAPIEnabled()), | |
| 42 instant_unload_handler_(browser) { | 41 instant_unload_handler_(browser) { |
| 43 | 42 |
| 44 // TODO(sreeram): Perhaps this can be removed, if field trial info is | 43 // TODO(sreeram): Perhaps this can be removed, if field trial info is |
| 45 // available before we need to register the pref. | 44 // available before we need to register the pref. |
| 46 chrome::SetInstantExtendedPrefDefault(profile()); | 45 chrome::SetInstantExtendedPrefDefault(profile()); |
| 47 | 46 |
| 48 profile_pref_registrar_.Init(profile()->GetPrefs()); | 47 profile_pref_registrar_.Init(profile()->GetPrefs()); |
| 49 profile_pref_registrar_.Add( | 48 profile_pref_registrar_.Add( |
| 50 prefs::kSearchInstantEnabled, | 49 prefs::kSearchInstantEnabled, |
| 51 base::Bind(&BrowserInstantController::ResetInstant, | 50 base::Bind(&BrowserInstantController::ResetInstant, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 if (search_terms.empty()) | 136 if (search_terms.empty()) |
| 138 return false; | 137 return false; |
| 139 | 138 |
| 140 return instant_.SubmitQuery(search_terms); | 139 return instant_.SubmitQuery(search_terms); |
| 141 } | 140 } |
| 142 | 141 |
| 143 Profile* BrowserInstantController::profile() const { | 142 Profile* BrowserInstantController::profile() const { |
| 144 return browser_->profile(); | 143 return browser_->profile(); |
| 145 } | 144 } |
| 146 | 145 |
| 147 void BrowserInstantController::CommitInstant( | |
| 148 scoped_ptr<content::WebContents> overlay, | |
| 149 bool in_new_tab) { | |
| 150 const extensions::Extension* extension = | |
| 151 profile()->GetExtensionService()->GetInstalledApp(overlay->GetURL()); | |
| 152 if (extension) { | |
| 153 AppLauncherHandler::RecordAppLaunchType( | |
| 154 extension_misc::APP_LAUNCH_OMNIBOX_INSTANT, | |
| 155 extension->GetType()); | |
| 156 } | |
| 157 if (in_new_tab) { | |
| 158 // TabStripModel takes ownership of |overlay|. | |
| 159 browser_->tab_strip_model()->AddWebContents(overlay.release(), -1, | |
| 160 instant_.last_transition_type(), TabStripModel::ADD_ACTIVE); | |
| 161 } else { | |
| 162 content::WebContents* contents = overlay.get(); | |
| 163 ReplaceWebContentsAt( | |
| 164 browser_->tab_strip_model()->active_index(), | |
| 165 overlay.Pass()); | |
| 166 browser_->window()->GetLocationBar()->SaveStateToContents(contents); | |
| 167 } | |
| 168 } | |
| 169 | |
| 170 void BrowserInstantController::ReplaceWebContentsAt( | 146 void BrowserInstantController::ReplaceWebContentsAt( |
| 171 int index, | 147 int index, |
| 172 scoped_ptr<content::WebContents> new_contents) { | 148 scoped_ptr<content::WebContents> new_contents) { |
| 173 DCHECK_NE(TabStripModel::kNoTab, index); | 149 DCHECK_NE(TabStripModel::kNoTab, index); |
| 174 scoped_ptr<content::WebContents> old_contents(browser_->tab_strip_model()-> | 150 scoped_ptr<content::WebContents> old_contents(browser_->tab_strip_model()-> |
| 175 ReplaceWebContentsAt(index, new_contents.release())); | 151 ReplaceWebContentsAt(index, new_contents.release())); |
| 176 instant_unload_handler_.RunUnloadListenersOrDestroy(old_contents.Pass(), | 152 instant_unload_handler_.RunUnloadListenersOrDestroy(old_contents.Pass(), |
| 177 index); | 153 index); |
| 178 } | 154 } |
| 179 | 155 |
| 180 void BrowserInstantController::SetInstantSuggestion( | |
| 181 const InstantSuggestion& suggestion) { | |
| 182 browser_->window()->GetLocationBar()->SetInstantSuggestion(suggestion); | |
| 183 } | |
| 184 | |
| 185 gfx::Rect BrowserInstantController::GetInstantBounds() { | |
| 186 return browser_->window()->GetInstantBounds(); | |
| 187 } | |
| 188 | |
| 189 void BrowserInstantController::InstantOverlayFocused() { | |
| 190 // NOTE: This is only invoked on aura. | |
| 191 browser_->window()->WebContentsFocused(instant_.GetOverlayContents()); | |
| 192 } | |
| 193 | |
| 194 void BrowserInstantController::FocusOmnibox(bool caret_visibility) { | 156 void BrowserInstantController::FocusOmnibox(bool caret_visibility) { |
| 195 OmniboxView* omnibox_view = browser_->window()->GetLocationBar()-> | 157 OmniboxView* omnibox_view = browser_->window()->GetLocationBar()-> |
| 196 GetLocationEntry(); | 158 GetLocationEntry(); |
| 197 omnibox_view->SetFocus(); | 159 omnibox_view->SetFocus(); |
| 198 omnibox_view->model()->SetCaretVisibility(caret_visibility); | 160 omnibox_view->model()->SetCaretVisibility(caret_visibility); |
| 199 if (!caret_visibility) { | 161 if (!caret_visibility) { |
| 200 // If the user clicked on the fakebox, any text already in the omnibox | 162 // If the user clicked on the fakebox, any text already in the omnibox |
| 201 // should get cleared when they start typing. Selecting all the existing | 163 // should get cleared when they start typing. Selecting all the existing |
| 202 // text is a convenient way to accomplish this. It also gives a slight | 164 // text is a convenient way to accomplish this. It also gives a slight |
| 203 // visual cue to users who really understand selection state about what will | 165 // visual cue to users who really understand selection state about what will |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 | 197 |
| 236 void BrowserInstantController::UpdateLocationBar() { | 198 void BrowserInstantController::UpdateLocationBar() { |
| 237 browser_->window()->UpdateToolbar(GetActiveWebContents(), false); | 199 browser_->window()->UpdateToolbar(GetActiveWebContents(), false); |
| 238 } | 200 } |
| 239 | 201 |
| 240 void BrowserInstantController::ToggleVoiceSearch() { | 202 void BrowserInstantController::ToggleVoiceSearch() { |
| 241 instant_.ToggleVoiceSearch(); | 203 instant_.ToggleVoiceSearch(); |
| 242 } | 204 } |
| 243 | 205 |
| 244 void BrowserInstantController::ResetInstant(const std::string& pref_name) { | 206 void BrowserInstantController::ResetInstant(const std::string& pref_name) { |
| 245 bool instant_checkbox_checked = chrome::IsInstantCheckboxChecked(profile()); | 207 instant_.ReloadStaleNTP(); |
| 246 bool use_local_overlay_only = !chrome::IsInstantCheckboxEnabled(profile()); | |
| 247 instant_.SetInstantEnabled(instant_checkbox_checked, use_local_overlay_only); | |
| 248 } | 208 } |
| 249 | 209 |
| 250 //////////////////////////////////////////////////////////////////////////////// | 210 //////////////////////////////////////////////////////////////////////////////// |
| 251 // BrowserInstantController, SearchModelObserver implementation: | 211 // BrowserInstantController, SearchModelObserver implementation: |
| 252 | 212 |
| 253 void BrowserInstantController::ModelChanged( | 213 void BrowserInstantController::ModelChanged( |
| 254 const SearchModel::State& old_state, | 214 const SearchModel::State& old_state, |
| 255 const SearchModel::State& new_state) { | 215 const SearchModel::State& new_state) { |
| 256 if (old_state.mode != new_state.mode) { | 216 if (old_state.mode != new_state.mode) { |
| 257 const SearchMode& new_mode = new_state.mode; | 217 const SearchMode& new_mode = new_state.mode; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 if (!instant_service->IsInstantProcess( | 274 if (!instant_service->IsInstantProcess( |
| 315 contents->GetRenderProcessHost()->GetID())) | 275 contents->GetRenderProcessHost()->GetID())) |
| 316 continue; | 276 continue; |
| 317 | 277 |
| 318 // Reload the contents to ensure that it gets assigned to a non-priviledged | 278 // Reload the contents to ensure that it gets assigned to a non-priviledged |
| 319 // renderer. | 279 // renderer. |
| 320 contents->GetController().Reload(false); | 280 contents->GetController().Reload(false); |
| 321 } | 281 } |
| 322 instant_.OnDefaultSearchProviderChanged(); | 282 instant_.OnDefaultSearchProviderChanged(); |
| 323 } | 283 } |
| OLD | NEW |