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

Side by Side Diff: chrome/browser/ui/zoom/zoom_controller.cc

Issue 373603007: Refactor to convert vector to scoped_ptr in ZoomController. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clean up includes list. Created 6 years, 5 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
« no previous file with comments | « chrome/browser/ui/zoom/zoom_controller.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/zoom/zoom_controller.h" 5 #include "chrome/browser/ui/zoom/zoom_controller.h"
6 6
7 #include "base/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
8 #include "chrome/browser/chrome_notification_types.h" 8 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/ui/browser_finder.h" 10 #include "chrome/browser/ui/browser_finder.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 FOR_EACH_OBSERVER( 118 FOR_EACH_OBSERVER(
119 ZoomObserver, observers_, OnZoomChanged(zoom_change_data)); 119 ZoomObserver, observers_, OnZoomChanged(zoom_change_data));
120 120
121 last_extension_ = NULL; 121 last_extension_ = NULL;
122 return true; 122 return true;
123 } 123 }
124 124
125 content::HostZoomMap* zoom_map = 125 content::HostZoomMap* zoom_map =
126 content::HostZoomMap::GetForBrowserContext(browser_context_); 126 content::HostZoomMap::GetForBrowserContext(browser_context_);
127 DCHECK(zoom_map); 127 DCHECK(zoom_map);
128 DCHECK(event_data_.empty()); 128 DCHECK(!event_data_);
129 event_data_.push_back(ZoomChangedEventData(web_contents(), 129 event_data_.reset(new ZoomChangedEventData(web_contents(),
130 GetZoomLevel(), 130 GetZoomLevel(),
131 zoom_level, 131 zoom_level,
132 zoom_mode_, 132 zoom_mode_,
133 false /* can_show_bubble */)); 133 false /* can_show_bubble */));
134 int render_process_id = web_contents()->GetRenderProcessHost()->GetID(); 134 int render_process_id = web_contents()->GetRenderProcessHost()->GetID();
135 int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID(); 135 int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID();
136 if (zoom_mode_ == ZOOM_MODE_ISOLATED || 136 if (zoom_mode_ == ZOOM_MODE_ISOLATED ||
137 zoom_map->UsesTemporaryZoomLevel(render_process_id, render_view_id)) { 137 zoom_map->UsesTemporaryZoomLevel(render_process_id, render_view_id)) {
138 zoom_map->SetTemporaryZoomLevel( 138 zoom_map->SetTemporaryZoomLevel(
139 render_process_id, render_view_id, zoom_level); 139 render_process_id, render_view_id, zoom_level);
140 } else { 140 } else {
141 content::NavigationEntry* entry = 141 content::NavigationEntry* entry =
142 web_contents()->GetController().GetLastCommittedEntry(); 142 web_contents()->GetController().GetLastCommittedEntry();
143 143
144 if (!entry) { 144 if (!entry) {
145 last_extension_ = NULL; 145 last_extension_ = NULL;
146 return false; 146 return false;
147 } 147 }
148 std::string host = net::GetHostOrSpecFromURL(entry->GetURL()); 148 std::string host = net::GetHostOrSpecFromURL(entry->GetURL());
149 zoom_map->SetZoomLevelForHost(host, zoom_level); 149 zoom_map->SetZoomLevelForHost(host, zoom_level);
150 } 150 }
151 151
152 DCHECK(event_data_.empty()); 152 DCHECK(!event_data_);
153 last_extension_ = NULL; 153 last_extension_ = NULL;
154 return true; 154 return true;
155 } 155 }
156 156
157 void ZoomController::SetZoomMode(ZoomMode new_mode) { 157 void ZoomController::SetZoomMode(ZoomMode new_mode) {
158 if (new_mode == zoom_mode_) 158 if (new_mode == zoom_mode_)
159 return; 159 return;
160 160
161 content::HostZoomMap* zoom_map = 161 content::HostZoomMap* zoom_map =
162 content::HostZoomMap::GetForBrowserContext(browser_context_); 162 content::HostZoomMap::GetForBrowserContext(browser_context_);
163 DCHECK(zoom_map); 163 DCHECK(zoom_map);
164 int render_process_id = web_contents()->GetRenderProcessHost()->GetID(); 164 int render_process_id = web_contents()->GetRenderProcessHost()->GetID();
165 int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID(); 165 int render_view_id = web_contents()->GetRenderViewHost()->GetRoutingID();
166 double original_zoom_level = GetZoomLevel(); 166 double original_zoom_level = GetZoomLevel();
167 167
168 ZoomChangedEventData zoom_change_data(web_contents(), 168 DCHECK(!event_data_);
169 original_zoom_level, 169 event_data_.reset(new ZoomChangedEventData(web_contents(),
170 original_zoom_level, 170 original_zoom_level,
171 new_mode, 171 original_zoom_level,
172 new_mode != ZOOM_MODE_DEFAULT); 172 new_mode,
173 DCHECK(event_data_.empty()); 173 new_mode != ZOOM_MODE_DEFAULT));
174 event_data_.push_back(zoom_change_data);
175 174
176 switch (new_mode) { 175 switch (new_mode) {
177 case ZOOM_MODE_DEFAULT: { 176 case ZOOM_MODE_DEFAULT: {
178 content::NavigationEntry* entry = 177 content::NavigationEntry* entry =
179 web_contents()->GetController().GetLastCommittedEntry(); 178 web_contents()->GetController().GetLastCommittedEntry();
180 179
181 if (entry) { 180 if (entry) {
182 GURL url = entry->GetURL(); 181 GURL url = entry->GetURL();
183 std::string host = net::GetHostOrSpecFromURL(url); 182 std::string host = net::GetHostOrSpecFromURL(url);
184 183
185 if (zoom_map->HasZoomLevel(url.scheme(), host)) { 184 if (zoom_map->HasZoomLevel(url.scheme(), host)) {
186 // If there are other tabs with the same origin, then set this tab's 185 // If there are other tabs with the same origin, then set this tab's
187 // zoom level to match theirs. The temporary zoom level will be 186 // zoom level to match theirs. The temporary zoom level will be
188 // cleared below, but this call will make sure this tab re-draws at 187 // cleared below, but this call will make sure this tab re-draws at
189 // the correct zoom level. 188 // the correct zoom level.
190 double origin_zoom_level = 189 double origin_zoom_level =
191 zoom_map->GetZoomLevelForHostAndScheme(url.scheme(), host); 190 zoom_map->GetZoomLevelForHostAndScheme(url.scheme(), host);
192 event_data_.back().new_zoom_level = origin_zoom_level; 191 event_data_->new_zoom_level = origin_zoom_level;
193 zoom_map->SetTemporaryZoomLevel( 192 zoom_map->SetTemporaryZoomLevel(
194 render_process_id, render_view_id, origin_zoom_level); 193 render_process_id, render_view_id, origin_zoom_level);
195 } else { 194 } else {
196 // The host will need a level prior to removing the temporary level. 195 // The host will need a level prior to removing the temporary level.
197 // We don't want the zoom level to change just because we entered 196 // We don't want the zoom level to change just because we entered
198 // default mode. 197 // default mode.
199 zoom_map->SetZoomLevelForHost(host, original_zoom_level); 198 zoom_map->SetZoomLevelForHost(host, original_zoom_level);
200 } 199 }
201 } 200 }
202 // Remove per-tab zoom data for this tab. No event callback expected. 201 // Remove per-tab zoom data for this tab. No event callback expected.
203 zoom_map->ClearTemporaryZoomLevel(render_process_id, render_view_id); 202 zoom_map->ClearTemporaryZoomLevel(render_process_id, render_view_id);
204 break; 203 break;
205 } 204 }
206 case ZOOM_MODE_ISOLATED: { 205 case ZOOM_MODE_ISOLATED: {
207 // Unless the zoom mode was |ZOOM_MODE_DISABLED| before this call, the 206 // Unless the zoom mode was |ZOOM_MODE_DISABLED| before this call, the
208 // page needs an initial isolated zoom back to the same level it was at 207 // page needs an initial isolated zoom back to the same level it was at
209 // in the other mode. 208 // in the other mode.
210 if (zoom_mode_ != ZOOM_MODE_DISABLED) { 209 if (zoom_mode_ != ZOOM_MODE_DISABLED) {
211 zoom_map->SetTemporaryZoomLevel( 210 zoom_map->SetTemporaryZoomLevel(
212 render_process_id, render_view_id, original_zoom_level); 211 render_process_id, render_view_id, original_zoom_level);
213 } else { 212 } else {
214 // When we don't call any HostZoomMap set functions, we send the event 213 // When we don't call any HostZoomMap set functions, we send the event
215 // manually. 214 // manually.
216 FOR_EACH_OBSERVER( 215 FOR_EACH_OBSERVER(
217 ZoomObserver, observers_, OnZoomChanged(event_data_.back())); 216 ZoomObserver, observers_, OnZoomChanged(*event_data_));
218 event_data_.pop_back(); 217 event_data_.reset();
219 } 218 }
220 break; 219 break;
221 } 220 }
222 case ZOOM_MODE_MANUAL: { 221 case ZOOM_MODE_MANUAL: {
223 // Unless the zoom mode was |ZOOM_MODE_DISABLED| before this call, the 222 // Unless the zoom mode was |ZOOM_MODE_DISABLED| before this call, the
224 // page needs to be resized to the default zoom. While in manual mode, 223 // page needs to be resized to the default zoom. While in manual mode,
225 // the zoom level is handled independently. 224 // the zoom level is handled independently.
226 if (zoom_mode_ != ZOOM_MODE_DISABLED) { 225 if (zoom_mode_ != ZOOM_MODE_DISABLED) {
227 zoom_map->SetTemporaryZoomLevel( 226 zoom_map->SetTemporaryZoomLevel(
228 render_process_id, render_view_id, default_zoom_level_.GetValue()); 227 render_process_id, render_view_id, default_zoom_level_.GetValue());
229 zoom_level_ = original_zoom_level; 228 zoom_level_ = original_zoom_level;
230 } else { 229 } else {
231 // When we don't call any HostZoomMap set functions, we send the event 230 // When we don't call any HostZoomMap set functions, we send the event
232 // manually. 231 // manually.
233 FOR_EACH_OBSERVER( 232 FOR_EACH_OBSERVER(
234 ZoomObserver, observers_, OnZoomChanged(event_data_.back())); 233 ZoomObserver, observers_, OnZoomChanged(*event_data_));
235 event_data_.pop_back(); 234 event_data_.reset();
236 } 235 }
237 break; 236 break;
238 } 237 }
239 case ZOOM_MODE_DISABLED: { 238 case ZOOM_MODE_DISABLED: {
240 // The page needs to be zoomed back to default before disabling the zoom 239 // The page needs to be zoomed back to default before disabling the zoom
241 zoom_map->SetTemporaryZoomLevel( 240 zoom_map->SetTemporaryZoomLevel(
242 render_process_id, render_view_id, default_zoom_level_.GetValue()); 241 render_process_id, render_view_id, default_zoom_level_.GetValue());
243 break; 242 break;
244 } 243 }
245 } 244 }
246 // Any event data we've stored should have been consumed by this point. 245 // Any event data we've stored should have been consumed by this point.
247 DCHECK(event_data_.empty()); 246 DCHECK(!event_data_);
248 247
249 zoom_mode_ = new_mode; 248 zoom_mode_ = new_mode;
250 } 249 }
251 250
252 void ZoomController::DidNavigateMainFrame( 251 void ZoomController::DidNavigateMainFrame(
253 const content::LoadCommittedDetails& details, 252 const content::LoadCommittedDetails& details,
254 const content::FrameNavigateParams& params) { 253 const content::FrameNavigateParams& params) {
255 // If the main frame's content has changed, the new page may have a different 254 // If the main frame's content has changed, the new page may have a different
256 // zoom level from the old one. 255 // zoom level from the old one.
257 UpdateState(std::string()); 256 UpdateState(std::string());
(...skipping 23 matching lines...) Expand all
281 return; 280 return;
282 } 281 }
283 } 282 }
284 283
285 // The zoom bubble can be shown for all normal, per-origin zoom changes 284 // The zoom bubble can be shown for all normal, per-origin zoom changes
286 // (where the host will not be empty and the zoom is not temporary), or any 285 // (where the host will not be empty and the zoom is not temporary), or any
287 // special zoom changes (where the zoom mode will not be "default"). 286 // special zoom changes (where the zoom mode will not be "default").
288 bool can_show_bubble = 287 bool can_show_bubble =
289 zoom_mode_ != ZOOM_MODE_DEFAULT || (!host.empty() && !is_temporary_zoom); 288 zoom_mode_ != ZOOM_MODE_DEFAULT || (!host.empty() && !is_temporary_zoom);
290 289
291 if (!event_data_.empty()) { 290 if (event_data_) {
292 // For state changes initiated within the ZoomController, information about 291 // For state changes initiated within the ZoomController, information about
293 // the change should be sent. 292 // the change should be sent.
294 ZoomChangedEventData zoom_change_data = event_data_.back(); 293 ZoomChangedEventData zoom_change_data = *event_data_;
295 event_data_.pop_back(); 294 event_data_.reset();
296 zoom_change_data.can_show_bubble |= can_show_bubble; 295 zoom_change_data.can_show_bubble |= can_show_bubble;
297 FOR_EACH_OBSERVER( 296 FOR_EACH_OBSERVER(
298 ZoomObserver, observers_, OnZoomChanged(zoom_change_data)); 297 ZoomObserver, observers_, OnZoomChanged(zoom_change_data));
299 } else { 298 } else {
300 // TODO(wjmaclean) Should we consider having HostZoomMap send both old and 299 // TODO(wjmaclean) Should we consider having HostZoomMap send both old and
301 // new zoom levels here? 300 // new zoom levels here?
302 double zoom_level = GetZoomLevel(); 301 double zoom_level = GetZoomLevel();
303 ZoomChangedEventData zoom_change_data = ZoomChangedEventData( 302 ZoomChangedEventData zoom_change_data(
304 web_contents(), zoom_level, zoom_level, zoom_mode_, can_show_bubble); 303 web_contents(), zoom_level, zoom_level, zoom_mode_, can_show_bubble);
305 FOR_EACH_OBSERVER( 304 FOR_EACH_OBSERVER(
306 ZoomObserver, observers_, OnZoomChanged(zoom_change_data)); 305 ZoomObserver, observers_, OnZoomChanged(zoom_change_data));
307 } 306 }
308 } 307 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/zoom/zoom_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698