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

Side by Side Diff: content/browser/host_zoom_map_impl.cc

Issue 302603012: Zoom Extension API (content changes) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 (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 "content/browser/host_zoom_map_impl.h" 5 #include "content/browser/host_zoom_map_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/strings/string_piece.h" 10 #include "base/strings/string_piece.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 143
144 { 144 {
145 base::AutoLock auto_lock(lock_); 145 base::AutoLock auto_lock(lock_);
146 146
147 if (ZoomValuesEqual(level, default_zoom_level_)) 147 if (ZoomValuesEqual(level, default_zoom_level_))
148 host_zoom_levels_.erase(host); 148 host_zoom_levels_.erase(host);
149 else 149 else
150 host_zoom_levels_[host] = level; 150 host_zoom_levels_[host] = level;
151 } 151 }
152 152
153 // Notify renderers from this browser context. 153 SendZoomLevelChange(std::string(), host, level);
154 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator()); 154
155 !i.IsAtEnd(); i.Advance()) {
156 RenderProcessHost* render_process_host = i.GetCurrentValue();
157 if (HostZoomMap::GetForBrowserContext(
158 render_process_host->GetBrowserContext()) == this) {
159 render_process_host->Send(
160 new ViewMsg_SetZoomLevelForCurrentURL(std::string(), host, level));
161 }
162 }
163 HostZoomMap::ZoomLevelChange change; 155 HostZoomMap::ZoomLevelChange change;
164 change.mode = HostZoomMap::ZOOM_CHANGED_FOR_HOST; 156 change.mode = HostZoomMap::ZOOM_CHANGED_FOR_HOST;
165 change.host = host; 157 change.host = host;
166 change.zoom_level = level; 158 change.zoom_level = level;
167 159
168 zoom_level_changed_callbacks_.Notify(change); 160 zoom_level_changed_callbacks_.Notify(change);
169 } 161 }
170 162
171 void HostZoomMapImpl::SetZoomLevelForHostAndScheme(const std::string& scheme, 163 void HostZoomMapImpl::SetZoomLevelForHostAndScheme(const std::string& scheme,
172 const std::string& host, 164 const std::string& host,
173 double level) { 165 double level) {
174 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 166 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
175 { 167 {
176 base::AutoLock auto_lock(lock_); 168 base::AutoLock auto_lock(lock_);
177 scheme_host_zoom_levels_[scheme][host] = level; 169 scheme_host_zoom_levels_[scheme][host] = level;
178 } 170 }
179 171
180 // Notify renderers from this browser context. 172 SendZoomLevelChange(scheme, host, level);
181 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
182 !i.IsAtEnd(); i.Advance()) {
183 RenderProcessHost* render_process_host = i.GetCurrentValue();
184 if (HostZoomMap::GetForBrowserContext(
185 render_process_host->GetBrowserContext()) == this) {
186 render_process_host->Send(
187 new ViewMsg_SetZoomLevelForCurrentURL(scheme, host, level));
188 }
189 }
190 173
191 HostZoomMap::ZoomLevelChange change; 174 HostZoomMap::ZoomLevelChange change;
192 change.mode = HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST; 175 change.mode = HostZoomMap::ZOOM_CHANGED_FOR_SCHEME_AND_HOST;
193 change.host = host; 176 change.host = host;
194 change.scheme = scheme; 177 change.scheme = scheme;
195 change.zoom_level = level; 178 change.zoom_level = level;
196 179
197 zoom_level_changed_callbacks_.Notify(change); 180 zoom_level_changed_callbacks_.Notify(change);
198 } 181 }
199 182
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 } 216 }
234 217
235 void HostZoomMapImpl::SetZoomLevelForWebContents( 218 void HostZoomMapImpl::SetZoomLevelForWebContents(
236 const WebContents& web_contents, 219 const WebContents& web_contents,
237 double level) { 220 double level) {
238 const WebContentsImpl& web_contents_impl = 221 const WebContentsImpl& web_contents_impl =
239 static_cast<const WebContentsImpl&>(web_contents); 222 static_cast<const WebContentsImpl&>(web_contents);
240 int render_process_id = web_contents_impl.GetRenderProcessHost()->GetID(); 223 int render_process_id = web_contents_impl.GetRenderProcessHost()->GetID();
241 int render_view_id = web_contents_impl.GetRenderViewHost()->GetRoutingID(); 224 int render_view_id = web_contents_impl.GetRenderViewHost()->GetRoutingID();
242 if (UsesTemporaryZoomLevel(render_process_id, render_view_id)) { 225 if (UsesTemporaryZoomLevel(render_process_id, render_view_id)) {
243 226 SetTemporaryZoomLevel(render_process_id,
244 SetTemporaryZoomLevel(render_process_id, render_view_id, level); 227 render_view_id,
228 net::GetHostOrSpecFromURL(
229 web_contents_impl.GetLastCommittedURL()),
230 level);
245 } else { 231 } else {
246 SetZoomLevelForHost( 232 SetZoomLevelForHost(
247 net::GetHostOrSpecFromURL(web_contents_impl.GetLastCommittedURL()), 233 net::GetHostOrSpecFromURL(web_contents_impl.GetLastCommittedURL()),
248 level); 234 level);
249 } 235 }
250 } 236 }
251 237
252 void HostZoomMapImpl::SetZoomLevelForView(int render_process_id, 238 void HostZoomMapImpl::SetZoomLevelForView(int render_process_id,
253 int render_view_id, 239 int render_view_id,
254 double level, 240 double level,
255 const std::string& host) { 241 const std::string& host) {
256 if (UsesTemporaryZoomLevel(render_process_id, render_view_id)) 242 if (UsesTemporaryZoomLevel(render_process_id, render_view_id))
257 SetTemporaryZoomLevel(render_process_id, render_view_id, level); 243 SetTemporaryZoomLevel(render_process_id, render_view_id, host, level);
258 else 244 else
259 SetZoomLevelForHost(host, level); 245 SetZoomLevelForHost(host, level);
260 } 246 }
261 247
262 bool HostZoomMapImpl::UsesTemporaryZoomLevel(int render_process_id, 248 bool HostZoomMapImpl::UsesTemporaryZoomLevel(int render_process_id,
263 int render_view_id) const { 249 int render_view_id) const {
264 base::AutoLock auto_lock(lock_); 250 base::AutoLock auto_lock(lock_);
265 TemporaryZoomLevel zoom_level(render_process_id, render_view_id); 251 TemporaryZoomLevel zoom_level(render_process_id, render_view_id);
266 TemporaryZoomLevelList::const_iterator it = find( 252 TemporaryZoomLevelList::const_iterator it = find(
267 temporary_zoom_levels_.begin(), temporary_zoom_levels_.end(), zoom_level); 253 temporary_zoom_levels_.begin(), temporary_zoom_levels_.end(), zoom_level);
(...skipping 28 matching lines...) Expand all
296 temporary_zoom_levels_[i].render_view_id == render_view_id) { 282 temporary_zoom_levels_[i].render_view_id == render_view_id) {
297 return temporary_zoom_levels_[i].zoom_level; 283 return temporary_zoom_levels_[i].zoom_level;
298 } 284 }
299 } 285 }
300 286
301 return 0; 287 return 0;
302 } 288 }
303 289
304 void HostZoomMapImpl::SetTemporaryZoomLevel(int render_process_id, 290 void HostZoomMapImpl::SetTemporaryZoomLevel(int render_process_id,
305 int render_view_id, 291 int render_view_id,
292 const std::string& host,
306 double level) { 293 double level) {
307 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 294 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
308 295
309 { 296 {
310 base::AutoLock auto_lock(lock_); 297 base::AutoLock auto_lock(lock_);
311 size_t i; 298 size_t i;
312 for (i = 0; i < temporary_zoom_levels_.size(); ++i) { 299 for (i = 0; i < temporary_zoom_levels_.size(); ++i) {
313 if (temporary_zoom_levels_[i].render_process_id == render_process_id && 300 if (temporary_zoom_levels_[i].render_process_id == render_process_id &&
314 temporary_zoom_levels_[i].render_view_id == render_view_id) { 301 temporary_zoom_levels_[i].render_view_id == render_view_id) {
315 if (level) { 302 temporary_zoom_levels_[i].zoom_level = level;
316 temporary_zoom_levels_[i].zoom_level = level;
317 } else {
318 temporary_zoom_levels_.erase(temporary_zoom_levels_.begin() + i);
319 }
320 break; 303 break;
321 } 304 }
322 } 305 }
323 306
324 if (level && i == temporary_zoom_levels_.size()) { 307 if (level && i == temporary_zoom_levels_.size()) {
325 TemporaryZoomLevel temp(render_process_id, render_view_id, level); 308 TemporaryZoomLevel temp(render_process_id, render_view_id, level);
326 temporary_zoom_levels_.push_back(temp); 309 temporary_zoom_levels_.push_back(temp);
327 } 310 }
328 } 311 }
329 312
330 HostZoomMap::ZoomLevelChange change; 313 HostZoomMap::ZoomLevelChange change;
331 change.mode = HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM; 314 change.mode = HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM;
315 change.host = host;
332 change.zoom_level = level; 316 change.zoom_level = level;
333 317
334 zoom_level_changed_callbacks_.Notify(change); 318 zoom_level_changed_callbacks_.Notify(change);
335 } 319 }
336 320
337 void HostZoomMapImpl::Observe(int type, 321 void HostZoomMapImpl::Observe(int type,
338 const NotificationSource& source, 322 const NotificationSource& source,
339 const NotificationDetails& details) { 323 const NotificationDetails& details) {
340 switch (type) { 324 switch (type) {
341 case NOTIFICATION_RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW: { 325 case NOTIFICATION_RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW: {
342 base::AutoLock auto_lock(lock_); 326 base::AutoLock auto_lock(lock_);
343 int render_view_id = Source<RenderViewHost>(source)->GetRoutingID(); 327 int render_view_id = Source<RenderViewHost>(source)->GetRoutingID();
344 int render_process_id = 328 int render_process_id =
345 Source<RenderViewHost>(source)->GetProcess()->GetID(); 329 Source<RenderViewHost>(source)->GetProcess()->GetID();
346 330 EraseTemporaryZoomLevel(render_process_id, render_view_id);
347 for (size_t i = 0; i < temporary_zoom_levels_.size(); ++i) {
348 if (temporary_zoom_levels_[i].render_process_id == render_process_id &&
349 temporary_zoom_levels_[i].render_view_id == render_view_id) {
350 temporary_zoom_levels_.erase(temporary_zoom_levels_.begin() + i);
351 break;
352 }
353 }
354 break; 331 break;
355 } 332 }
356 default: 333 default:
357 NOTREACHED() << "Unexpected preference observed."; 334 NOTREACHED() << "Unexpected preference observed.";
358 } 335 }
359 } 336 }
360 337
338 void HostZoomMapImpl::EraseTemporaryZoomLevel(int render_process_id,
339 int render_view_id) {
340 base::AutoLock auto_lock(lock_);
341 for (size_t i = 0; i < temporary_zoom_levels_.size(); ++i) {
342 if (temporary_zoom_levels_[i].render_process_id == render_process_id &&
343 temporary_zoom_levels_[i].render_view_id == render_view_id) {
344 temporary_zoom_levels_.erase(temporary_zoom_levels_.begin() + i);
345 break;
346 }
347 }
348 }
349
350 void HostZoomMapImpl::SendZoomLevelChange(const std::string& scheme,
351 const std::string& host,
352 double level) {
353 for (RenderProcessHost::iterator i(RenderProcessHost::AllHostsIterator());
354 !i.IsAtEnd(); i.Advance()) {
355 RenderProcessHost* render_process_host = i.GetCurrentValue();
356 if (HostZoomMap::GetForBrowserContext(
357 render_process_host->GetBrowserContext()) == this) {
358 int render_process_id = render_process_host->GetID();
359 std::set<int> exceptions;
360 for (size_t i = 0; i != temporary_zoom_levels_.size(); ++i) {
361 if (temporary_zoom_levels_[i].render_process_id == render_process_id)
362 exceptions.insert(temporary_zoom_levels_[i].render_view_id);
363 }
364 render_process_host->Send(new ViewMsg_SetZoomLevelForCurrentURL(
365 scheme, host, level, exceptions));
366 }
367 }
368 }
369
361 HostZoomMapImpl::~HostZoomMapImpl() { 370 HostZoomMapImpl::~HostZoomMapImpl() {
362 } 371 }
363 372
364 } // namespace content 373 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698