| 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 if (search_terms.empty()) | 138 if (search_terms.empty()) |
| 140 return false; | 139 return false; |
| 141 | 140 |
| 142 return instant_.SubmitQuery(search_terms); | 141 return instant_.SubmitQuery(search_terms); |
| 143 } | 142 } |
| 144 | 143 |
| 145 Profile* BrowserInstantController::profile() const { | 144 Profile* BrowserInstantController::profile() const { |
| 146 return browser_->profile(); | 145 return browser_->profile(); |
| 147 } | 146 } |
| 148 | 147 |
| 149 void BrowserInstantController::CommitInstant( | |
| 150 scoped_ptr<content::WebContents> overlay, | |
| 151 bool in_new_tab) { | |
| 152 const extensions::Extension* extension = | |
| 153 profile()->GetExtensionService()->GetInstalledApp(overlay->GetURL()); | |
| 154 if (extension) { | |
| 155 AppLauncherHandler::RecordAppLaunchType( | |
| 156 extension_misc::APP_LAUNCH_OMNIBOX_INSTANT, | |
| 157 extension->GetType()); | |
| 158 } | |
| 159 if (in_new_tab) { | |
| 160 // TabStripModel takes ownership of |overlay|. | |
| 161 browser_->tab_strip_model()->AddWebContents(overlay.release(), -1, | |
| 162 instant_.last_transition_type(), TabStripModel::ADD_ACTIVE); | |
| 163 } else { | |
| 164 content::WebContents* contents = overlay.get(); | |
| 165 ReplaceWebContentsAt( | |
| 166 browser_->tab_strip_model()->active_index(), | |
| 167 overlay.Pass()); | |
| 168 browser_->window()->GetLocationBar()->SaveStateToContents(contents); | |
| 169 } | |
| 170 } | |
| 171 | |
| 172 void BrowserInstantController::ReplaceWebContentsAt( | 148 void BrowserInstantController::ReplaceWebContentsAt( |
| 173 int index, | 149 int index, |
| 174 scoped_ptr<content::WebContents> new_contents) { | 150 scoped_ptr<content::WebContents> new_contents) { |
| 175 DCHECK_NE(TabStripModel::kNoTab, index); | 151 DCHECK_NE(TabStripModel::kNoTab, index); |
| 176 scoped_ptr<content::WebContents> old_contents(browser_->tab_strip_model()-> | 152 scoped_ptr<content::WebContents> old_contents(browser_->tab_strip_model()-> |
| 177 ReplaceWebContentsAt(index, new_contents.release())); | 153 ReplaceWebContentsAt(index, new_contents.release())); |
| 178 instant_unload_handler_.RunUnloadListenersOrDestroy(old_contents.Pass(), | 154 instant_unload_handler_.RunUnloadListenersOrDestroy(old_contents.Pass(), |
| 179 index); | 155 index); |
| 180 } | 156 } |
| 181 | 157 |
| 182 void BrowserInstantController::SetInstantSuggestion( | |
| 183 const InstantSuggestion& suggestion) { | |
| 184 browser_->window()->GetLocationBar()->SetInstantSuggestion(suggestion); | |
| 185 } | |
| 186 | |
| 187 gfx::Rect BrowserInstantController::GetInstantBounds() { | |
| 188 return browser_->window()->GetInstantBounds(); | |
| 189 } | |
| 190 | |
| 191 void BrowserInstantController::InstantOverlayFocused() { | |
| 192 // NOTE: This is only invoked on aura. | |
| 193 browser_->window()->WebContentsFocused(instant_.GetOverlayContents()); | |
| 194 } | |
| 195 | |
| 196 void BrowserInstantController::FocusOmnibox(bool caret_visibility) { | 158 void BrowserInstantController::FocusOmnibox(bool caret_visibility) { |
| 197 OmniboxView* omnibox_view = browser_->window()->GetLocationBar()-> | 159 OmniboxView* omnibox_view = browser_->window()->GetLocationBar()-> |
| 198 GetLocationEntry(); | 160 GetLocationEntry(); |
| 199 omnibox_view->SetFocus(); | 161 omnibox_view->SetFocus(); |
| 200 omnibox_view->model()->SetCaretVisibility(caret_visibility); | 162 omnibox_view->model()->SetCaretVisibility(caret_visibility); |
| 201 if (!caret_visibility) { | 163 if (!caret_visibility) { |
| 202 // If the user clicked on the fakebox, any text already in the omnibox | 164 // If the user clicked on the fakebox, any text already in the omnibox |
| 203 // should get cleared when they start typing. Selecting all the existing | 165 // should get cleared when they start typing. Selecting all the existing |
| 204 // text is a convenient way to accomplish this. It also gives a slight | 166 // text is a convenient way to accomplish this. It also gives a slight |
| 205 // visual cue to users who really understand selection state about what will | 167 // 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... |
| 237 | 199 |
| 238 void BrowserInstantController::UpdateLocationBar() { | 200 void BrowserInstantController::UpdateLocationBar() { |
| 239 browser_->window()->UpdateToolbar(GetActiveWebContents(), false); | 201 browser_->window()->UpdateToolbar(GetActiveWebContents(), false); |
| 240 } | 202 } |
| 241 | 203 |
| 242 void BrowserInstantController::ToggleVoiceSearch() { | 204 void BrowserInstantController::ToggleVoiceSearch() { |
| 243 instant_.ToggleVoiceSearch(); | 205 instant_.ToggleVoiceSearch(); |
| 244 } | 206 } |
| 245 | 207 |
| 246 void BrowserInstantController::ResetInstant(const std::string& pref_name) { | 208 void BrowserInstantController::ResetInstant(const std::string& pref_name) { |
| 247 bool instant_checkbox_checked = chrome::IsInstantCheckboxChecked(profile()); | 209 instant_.ReloadStaleNTP(); |
| 248 bool use_local_overlay_only = !chrome::IsInstantCheckboxEnabled(profile()); | |
| 249 instant_.SetInstantEnabled(instant_checkbox_checked, use_local_overlay_only); | |
| 250 } | 210 } |
| 251 | 211 |
| 252 //////////////////////////////////////////////////////////////////////////////// | 212 //////////////////////////////////////////////////////////////////////////////// |
| 253 // BrowserInstantController, SearchModelObserver implementation: | 213 // BrowserInstantController, SearchModelObserver implementation: |
| 254 | 214 |
| 255 void BrowserInstantController::ModelChanged( | 215 void BrowserInstantController::ModelChanged( |
| 256 const SearchModel::State& old_state, | 216 const SearchModel::State& old_state, |
| 257 const SearchModel::State& new_state) { | 217 const SearchModel::State& new_state) { |
| 258 if (old_state.mode != new_state.mode) { | 218 if (old_state.mode != new_state.mode) { |
| 259 const SearchMode& new_mode = new_state.mode; | 219 const SearchMode& new_mode = new_state.mode; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 if (!instant_service->IsInstantProcess( | 285 if (!instant_service->IsInstantProcess( |
| 326 contents->GetRenderProcessHost()->GetID())) | 286 contents->GetRenderProcessHost()->GetID())) |
| 327 continue; | 287 continue; |
| 328 | 288 |
| 329 // Reload the contents to ensure that it gets assigned to a non-priviledged | 289 // Reload the contents to ensure that it gets assigned to a non-priviledged |
| 330 // renderer. | 290 // renderer. |
| 331 contents->GetController().Reload(false); | 291 contents->GetController().Reload(false); |
| 332 } | 292 } |
| 333 instant_.OnDefaultSearchProviderChanged(); | 293 instant_.OnDefaultSearchProviderChanged(); |
| 334 } | 294 } |
| OLD | NEW |