OLD | NEW |
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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 i != copy->scheme_host_zoom_levels_.end(); ++i) { | 129 i != copy->scheme_host_zoom_levels_.end(); ++i) { |
130 scheme_host_zoom_levels_[i->first] = HostZoomLevels(); | 130 scheme_host_zoom_levels_[i->first] = HostZoomLevels(); |
131 scheme_host_zoom_levels_[i->first]. | 131 scheme_host_zoom_levels_[i->first]. |
132 insert(i->second.begin(), i->second.end()); | 132 insert(i->second.begin(), i->second.end()); |
133 } | 133 } |
134 default_zoom_level_ = copy->default_zoom_level_; | 134 default_zoom_level_ = copy->default_zoom_level_; |
135 } | 135 } |
136 | 136 |
137 double HostZoomMapImpl::GetZoomLevelForHost(const std::string& host) const { | 137 double HostZoomMapImpl::GetZoomLevelForHost(const std::string& host) const { |
138 base::AutoLock auto_lock(lock_); | 138 base::AutoLock auto_lock(lock_); |
| 139 return GetZoomLevelForHostInternal(host); |
| 140 } |
| 141 |
| 142 double HostZoomMapImpl::GetZoomLevelForHostInternal( |
| 143 const std::string& host) const { |
139 HostZoomLevels::const_iterator i(host_zoom_levels_.find(host)); | 144 HostZoomLevels::const_iterator i(host_zoom_levels_.find(host)); |
140 return (i == host_zoom_levels_.end()) ? default_zoom_level_ : i->second; | 145 return (i == host_zoom_levels_.end()) ? default_zoom_level_ : i->second; |
141 } | 146 } |
142 | 147 |
143 bool HostZoomMapImpl::HasZoomLevel(const std::string& scheme, | 148 bool HostZoomMapImpl::HasZoomLevel(const std::string& scheme, |
144 const std::string& host) const { | 149 const std::string& host) const { |
145 base::AutoLock auto_lock(lock_); | 150 base::AutoLock auto_lock(lock_); |
146 | 151 |
147 SchemeHostZoomLevels::const_iterator scheme_iterator( | 152 SchemeHostZoomLevels::const_iterator scheme_iterator( |
148 scheme_host_zoom_levels_.find(scheme)); | 153 scheme_host_zoom_levels_.find(scheme)); |
149 | 154 |
150 const HostZoomLevels& zoom_levels = | 155 const HostZoomLevels& zoom_levels = |
151 (scheme_iterator != scheme_host_zoom_levels_.end()) | 156 (scheme_iterator != scheme_host_zoom_levels_.end()) |
152 ? scheme_iterator->second | 157 ? scheme_iterator->second |
153 : host_zoom_levels_; | 158 : host_zoom_levels_; |
154 | 159 |
155 HostZoomLevels::const_iterator i(zoom_levels.find(host)); | 160 HostZoomLevels::const_iterator i(zoom_levels.find(host)); |
156 return i != zoom_levels.end(); | 161 return i != zoom_levels.end(); |
157 } | 162 } |
158 | 163 |
| 164 double HostZoomMapImpl::GetZoomLevelForHostAndSchemeInternal( |
| 165 const std::string& scheme, |
| 166 const std::string& host) const { |
| 167 SchemeHostZoomLevels::const_iterator scheme_iterator( |
| 168 scheme_host_zoom_levels_.find(scheme)); |
| 169 if (scheme_iterator != scheme_host_zoom_levels_.end()) { |
| 170 HostZoomLevels::const_iterator i(scheme_iterator->second.find(host)); |
| 171 if (i != scheme_iterator->second.end()) |
| 172 return i->second; |
| 173 } |
| 174 |
| 175 return GetZoomLevelForHostInternal(host); |
| 176 } |
| 177 |
159 double HostZoomMapImpl::GetZoomLevelForHostAndScheme( | 178 double HostZoomMapImpl::GetZoomLevelForHostAndScheme( |
160 const std::string& scheme, | 179 const std::string& scheme, |
161 const std::string& host) const { | 180 const std::string& host) const { |
162 { | 181 base::AutoLock auto_lock(lock_); |
163 base::AutoLock auto_lock(lock_); | 182 return GetZoomLevelForHostAndSchemeInternal(scheme, host); |
164 SchemeHostZoomLevels::const_iterator scheme_iterator( | |
165 scheme_host_zoom_levels_.find(scheme)); | |
166 if (scheme_iterator != scheme_host_zoom_levels_.end()) { | |
167 HostZoomLevels::const_iterator i(scheme_iterator->second.find(host)); | |
168 if (i != scheme_iterator->second.end()) | |
169 return i->second; | |
170 } | |
171 } | |
172 return GetZoomLevelForHost(host); | |
173 } | 183 } |
174 | 184 |
175 HostZoomMap::ZoomLevelVector HostZoomMapImpl::GetAllZoomLevels() const { | 185 HostZoomMap::ZoomLevelVector HostZoomMapImpl::GetAllZoomLevels() const { |
176 HostZoomMap::ZoomLevelVector result; | 186 HostZoomMap::ZoomLevelVector result; |
177 { | 187 { |
178 base::AutoLock auto_lock(lock_); | 188 base::AutoLock auto_lock(lock_); |
179 result.reserve(host_zoom_levels_.size() + scheme_host_zoom_levels_.size()); | 189 result.reserve(host_zoom_levels_.size() + scheme_host_zoom_levels_.size()); |
180 for (HostZoomLevels::const_iterator i = host_zoom_levels_.begin(); | 190 for (HostZoomLevels::const_iterator i = host_zoom_levels_.begin(); |
181 i != host_zoom_levels_.end(); | 191 i != host_zoom_levels_.end(); |
182 ++i) { | 192 ++i) { |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 host->Send(new ViewMsg_SetZoomLevelForView(render_view_id, true, level)); | 368 host->Send(new ViewMsg_SetZoomLevelForView(render_view_id, true, level)); |
359 | 369 |
360 HostZoomMap::ZoomLevelChange change; | 370 HostZoomMap::ZoomLevelChange change; |
361 change.mode = HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM; | 371 change.mode = HostZoomMap::ZOOM_CHANGED_TEMPORARY_ZOOM; |
362 change.host = GetHostFromProcessView(render_process_id, render_view_id); | 372 change.host = GetHostFromProcessView(render_process_id, render_view_id); |
363 change.zoom_level = level; | 373 change.zoom_level = level; |
364 | 374 |
365 zoom_level_changed_callbacks_.Notify(change); | 375 zoom_level_changed_callbacks_.Notify(change); |
366 } | 376 } |
367 | 377 |
| 378 double HostZoomMapImpl::GetZoomLevelForView(const GURL& url, |
| 379 int render_process_id, |
| 380 int render_view_id) const { |
| 381 RenderViewKey key(render_process_id, render_view_id); |
| 382 base::AutoLock auto_lock(lock_); |
| 383 |
| 384 if (ContainsKey(temporary_zoom_levels_, key)) |
| 385 return temporary_zoom_levels_.find(key)->second; |
| 386 |
| 387 return GetZoomLevelForHostAndSchemeInternal(url.scheme(), |
| 388 net::GetHostOrSpecFromURL(url)); |
| 389 } |
| 390 |
368 void HostZoomMapImpl::Observe(int type, | 391 void HostZoomMapImpl::Observe(int type, |
369 const NotificationSource& source, | 392 const NotificationSource& source, |
370 const NotificationDetails& details) { | 393 const NotificationDetails& details) { |
371 switch (type) { | 394 switch (type) { |
372 case NOTIFICATION_RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW: { | 395 case NOTIFICATION_RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW: { |
373 int render_view_id = Source<RenderViewHost>(source)->GetRoutingID(); | 396 int render_view_id = Source<RenderViewHost>(source)->GetRoutingID(); |
374 int render_process_id = | 397 int render_process_id = |
375 Source<RenderViewHost>(source)->GetProcess()->GetID(); | 398 Source<RenderViewHost>(source)->GetProcess()->GetID(); |
376 ClearTemporaryZoomLevel(render_process_id, render_view_id); | 399 ClearTemporaryZoomLevel(render_process_id, render_view_id); |
377 break; | 400 break; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 double error_page_zoom_level = GetZoomLevelForHost(host); | 447 double error_page_zoom_level = GetZoomLevelForHost(host); |
425 | 448 |
426 SendZoomLevelChange(std::string(), host, error_page_zoom_level); | 449 SendZoomLevelChange(std::string(), host, error_page_zoom_level); |
427 } | 450 } |
428 | 451 |
429 HostZoomMapImpl::~HostZoomMapImpl() { | 452 HostZoomMapImpl::~HostZoomMapImpl() { |
430 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 453 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
431 } | 454 } |
432 | 455 |
433 } // namespace content | 456 } // namespace content |
OLD | NEW |