| 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 "chrome/browser/extensions/extension_service.h" | 8 #include "chrome/browser/extensions/extension_service.h" |
| 9 #include "chrome/browser/extensions/extension_web_ui.h" | 9 #include "chrome/browser/extensions/extension_web_ui.h" |
| 10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| 11 #include "chrome/browser/search/instant_service.h" | 11 #include "chrome/browser/search/instant_service.h" |
| 12 #include "chrome/browser/search/instant_service_factory.h" | 12 #include "chrome/browser/search/instant_service_factory.h" |
| 13 #include "chrome/browser/search/search.h" | 13 #include "chrome/browser/search/search.h" |
| 14 #include "chrome/browser/ui/browser.h" | 14 #include "chrome/browser/ui/browser.h" |
| 15 #include "chrome/browser/ui/browser_window.h" | 15 #include "chrome/browser/ui/browser_window.h" |
| 16 #include "chrome/browser/ui/omnibox/location_bar.h" | 16 #include "chrome/browser/ui/omnibox/location_bar.h" |
| 17 #include "chrome/browser/ui/omnibox/omnibox_popup_model.h" | 17 #include "chrome/browser/ui/omnibox/omnibox_popup_model.h" |
| 18 #include "chrome/browser/ui/omnibox/omnibox_view.h" | 18 #include "chrome/browser/ui/omnibox/omnibox_view.h" |
| 19 #include "chrome/browser/ui/search/instant_search_prerenderer.h" | 19 #include "chrome/browser/ui/search/instant_search_prerenderer.h" |
| 20 #include "chrome/browser/ui/search/search_model.h" | 20 #include "chrome/browser/ui/search/search_model.h" |
| 21 #include "chrome/browser/ui/search/search_tab_helper.h" | 21 #include "chrome/browser/ui/search/search_tab_helper.h" |
| 22 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 22 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 23 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" | 23 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" |
| 24 #include "chrome/common/url_constants.h" | 24 #include "chrome/common/url_constants.h" |
| 25 #include "content/public/browser/render_process_host.h" | 25 #include "content/public/browser/render_process_host.h" |
| 26 #include "content/public/browser/user_metrics.h" | 26 #include "content/public/browser/user_metrics.h" |
| 27 #include "content/public/browser/web_contents.h" | 27 #include "content/public/browser/web_contents.h" |
| 28 #include "content/public/browser/web_contents_view.h" | 28 #include "content/public/browser/web_contents_view.h" |
| 29 | 29 |
| 30 using base::UserMetricsAction; | 30 |
| 31 // Helpers -------------------------------------------------------------------- |
| 31 | 32 |
| 32 namespace { | 33 namespace { |
| 33 | 34 |
| 34 InstantSearchPrerenderer* GetInstantSearchPrerenderer(Profile* profile) { | 35 InstantSearchPrerenderer* GetInstantSearchPrerenderer(Profile* profile) { |
| 35 DCHECK(profile); | 36 DCHECK(profile); |
| 36 InstantService* instant_service = | 37 InstantService* instant_service = |
| 37 InstantServiceFactory::GetForProfile(profile); | 38 InstantServiceFactory::GetForProfile(profile); |
| 38 return instant_service ? instant_service->instant_search_prerenderer() : NULL; | 39 return instant_service ? instant_service->instant_search_prerenderer() : NULL; |
| 39 } | 40 } |
| 40 | 41 |
| 41 } // namespace | 42 } // namespace |
| 42 | 43 |
| 43 //////////////////////////////////////////////////////////////////////////////// | 44 |
| 44 // BrowserInstantController, public: | 45 // BrowserInstantController --------------------------------------------------- |
| 45 | 46 |
| 46 BrowserInstantController::BrowserInstantController(Browser* browser) | 47 BrowserInstantController::BrowserInstantController(Browser* browser) |
| 47 : browser_(browser), | 48 : browser_(browser), |
| 48 instant_(this) { | 49 instant_(this) { |
| 49 browser_->search_model()->AddObserver(this); | 50 browser_->search_model()->AddObserver(this); |
| 50 | 51 |
| 51 InstantService* instant_service = | 52 InstantService* instant_service = |
| 52 InstantServiceFactory::GetForProfile(profile()); | 53 InstantServiceFactory::GetForProfile(profile()); |
| 53 instant_service->AddObserver(this); | 54 instant_service->AddObserver(this); |
| 54 } | 55 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 | 114 |
| 114 void BrowserInstantController::TabDeactivated(content::WebContents* contents) { | 115 void BrowserInstantController::TabDeactivated(content::WebContents* contents) { |
| 115 instant_.TabDeactivated(contents); | 116 instant_.TabDeactivated(contents); |
| 116 | 117 |
| 117 InstantSearchPrerenderer* prerenderer = | 118 InstantSearchPrerenderer* prerenderer = |
| 118 GetInstantSearchPrerenderer(profile()); | 119 GetInstantSearchPrerenderer(profile()); |
| 119 if (prerenderer) | 120 if (prerenderer) |
| 120 prerenderer->Cancel(); | 121 prerenderer->Cancel(); |
| 121 } | 122 } |
| 122 | 123 |
| 123 //////////////////////////////////////////////////////////////////////////////// | |
| 124 // BrowserInstantController, SearchModelObserver implementation: | |
| 125 | |
| 126 void BrowserInstantController::ModelChanged( | 124 void BrowserInstantController::ModelChanged( |
| 127 const SearchModel::State& old_state, | 125 const SearchModel::State& old_state, |
| 128 const SearchModel::State& new_state) { | 126 const SearchModel::State& new_state) { |
| 129 if (old_state.mode != new_state.mode) { | 127 if (old_state.mode != new_state.mode) { |
| 130 const SearchMode& new_mode = new_state.mode; | 128 const SearchMode& new_mode = new_state.mode; |
| 131 | 129 |
| 132 // Record some actions corresponding to the mode change. Note that to get | 130 // Record some actions corresponding to the mode change. Note that to get |
| 133 // the full story, it's necessary to look at other UMA actions as well, | 131 // the full story, it's necessary to look at other UMA actions as well, |
| 134 // such as tab switches. | 132 // such as tab switches. |
| 135 if (new_mode.is_search_results()) | 133 if (new_mode.is_search_results()) |
| 136 content::RecordAction(UserMetricsAction("InstantExtended.ShowSRP")); | 134 content::RecordAction(base::UserMetricsAction("InstantExtended.ShowSRP")); |
| 137 else if (new_mode.is_ntp()) | 135 else if (new_mode.is_ntp()) |
| 138 content::RecordAction(UserMetricsAction("InstantExtended.ShowNTP")); | 136 content::RecordAction(base::UserMetricsAction("InstantExtended.ShowNTP")); |
| 139 | 137 |
| 140 instant_.SearchModeChanged(old_state.mode, new_mode); | 138 instant_.SearchModeChanged(old_state.mode, new_mode); |
| 141 } | 139 } |
| 142 | 140 |
| 143 if (old_state.instant_support != new_state.instant_support) | 141 if (old_state.instant_support != new_state.instant_support) |
| 144 instant_.InstantSupportChanged(new_state.instant_support); | 142 instant_.InstantSupportChanged(new_state.instant_support); |
| 145 } | 143 } |
| 146 | 144 |
| 147 //////////////////////////////////////////////////////////////////////////////// | |
| 148 // BrowserInstantController, InstantServiceObserver implementation: | |
| 149 | |
| 150 void BrowserInstantController::DefaultSearchProviderChanged() { | 145 void BrowserInstantController::DefaultSearchProviderChanged() { |
| 151 ReloadTabsInInstantProcess(); | |
| 152 } | |
| 153 | |
| 154 void BrowserInstantController::GoogleURLUpdated() { | |
| 155 ReloadTabsInInstantProcess(); | |
| 156 } | |
| 157 | |
| 158 void BrowserInstantController::ReloadTabsInInstantProcess() { | |
| 159 InstantService* instant_service = | 146 InstantService* instant_service = |
| 160 InstantServiceFactory::GetForProfile(profile()); | 147 InstantServiceFactory::GetForProfile(profile()); |
| 161 if (!instant_service) | 148 if (!instant_service) |
| 162 return; | 149 return; |
| 163 | 150 |
| 164 TabStripModel* tab_model = browser_->tab_strip_model(); | 151 TabStripModel* tab_model = browser_->tab_strip_model(); |
| 165 int count = tab_model->count(); | 152 int count = tab_model->count(); |
| 166 for (int index = 0; index < count; ++index) { | 153 for (int index = 0; index < count; ++index) { |
| 167 content::WebContents* contents = tab_model->GetWebContentsAt(index); | 154 content::WebContents* contents = tab_model->GetWebContentsAt(index); |
| 168 if (!contents) | 155 if (!contents) |
| 169 continue; | 156 continue; |
| 170 | 157 |
| 171 // Send new search URLs to the renderer. | 158 // Send new search URLs to the renderer. |
| 172 content::RenderProcessHost* rph = contents->GetRenderProcessHost(); | 159 content::RenderProcessHost* rph = contents->GetRenderProcessHost(); |
| 173 instant_service->SendSearchURLsToRenderer(rph); | 160 instant_service->SendSearchURLsToRenderer(rph); |
| 174 | 161 |
| 175 // Reload the contents to ensure that it gets assigned to a non-priviledged | 162 // Reload the contents to ensure that it gets assigned to a non-priviledged |
| 176 // renderer. | 163 // renderer. |
| 177 if (!instant_service->IsInstantProcess(rph->GetID())) | 164 if (!instant_service->IsInstantProcess(rph->GetID())) |
| 178 continue; | 165 continue; |
| 179 contents->GetController().Reload(false); | 166 contents->GetController().Reload(false); |
| 180 } | 167 } |
| 181 } | 168 } |
| OLD | NEW |