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

Side by Side Diff: chrome/browser/ui/browser_instant_controller.cc

Issue 263823007: Handle TemplateURLService load failure better (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove initial default copying Created 6 years, 7 months 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 | Annotate | Revision Log
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/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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698