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

Side by Side Diff: content/renderer/render_thread_impl.cc

Issue 1804023002: Fix page zoom to be frame-centric for out-of-process frames. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't use WeakPtr for PostTask on UI thread. Created 4 years, 8 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
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/renderer/render_thread_impl.h" 5 #include "content/renderer/render_thread_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <map> 9 #include <map>
10 #include <utility> 10 #include <utility>
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 260
261 private: 261 private:
262 // WebThreadImplForWorkerScheduler: 262 // WebThreadImplForWorkerScheduler:
263 scoped_ptr<scheduler::WorkerScheduler> CreateWorkerScheduler() override { 263 scoped_ptr<scheduler::WorkerScheduler> CreateWorkerScheduler() override {
264 return make_scoped_ptr(new scheduler::CompositorWorkerScheduler(thread())); 264 return make_scoped_ptr(new scheduler::CompositorWorkerScheduler(thread()));
265 } 265 }
266 266
267 DISALLOW_COPY_AND_ASSIGN(WebThreadForCompositor); 267 DISALLOW_COPY_AND_ASSIGN(WebThreadForCompositor);
268 }; 268 };
269 269
270 class RenderViewZoomer : public RenderViewVisitor {
271 public:
272 RenderViewZoomer(const std::string& scheme,
273 const std::string& host,
274 double zoom_level) : scheme_(scheme),
275 host_(host),
276 zoom_level_(zoom_level) {
277 }
278
279 bool Visit(RenderView* render_view) override {
280 WebView* webview = render_view->GetWebView();
281 RenderViewImpl* render_view_impl =
282 static_cast<RenderViewImpl*>(render_view);
283 // Remote frames don't host documents.
284 // TODO(wjmaclean) Although it seems likely that a frame without a
285 // document can safely early-out here, we should confirm this is truly
286 // the case. https://crbug.com/477007
287 if (webview->mainFrame()->isWebRemoteFrame())
288 return true;
289
290 WebDocument document = webview->mainFrame()->document();
291
292 // Don't set zoom level for full-page plugin since they don't use the same
293 // zoom settings.
294 if (document.isPluginDocument())
295 return true;
296 GURL url(document.url());
297 // Empty scheme works as wildcard that matches any scheme,
298 if ((net::GetHostOrSpecFromURL(url) == host_) &&
299 (scheme_.empty() || scheme_ == url.scheme()) &&
300 !render_view_impl->uses_temporary_zoom_level()) {
301 webview->hidePopups();
302 render_view_impl->SetZoomLevel(zoom_level_);
303 }
304 return true;
305 }
306
307 private:
308 const std::string scheme_;
309 const std::string host_;
310 const double zoom_level_;
311
312 DISALLOW_COPY_AND_ASSIGN(RenderViewZoomer);
313 };
314
315 void* CreateHistogram( 270 void* CreateHistogram(
316 const char *name, int min, int max, size_t buckets) { 271 const char *name, int min, int max, size_t buckets) {
317 if (min <= 0) 272 if (min <= 0)
318 min = 1; 273 min = 1;
319 std::string histogram_name; 274 std::string histogram_name;
320 RenderThreadImpl* render_thread_impl = RenderThreadImpl::current(); 275 RenderThreadImpl* render_thread_impl = RenderThreadImpl::current();
321 if (render_thread_impl) { // Can be null in tests. 276 if (render_thread_impl) { // Can be null in tests.
322 histogram_name = render_thread_impl-> 277 histogram_name = render_thread_impl->
323 histogram_customizer()->ConvertToCustomHistogramName(name); 278 histogram_customizer()->ConvertToCustomHistogramName(name);
324 } else { 279 } else {
(...skipping 1442 matching lines...) Expand 10 before | Expand all | Expand 10 after
1767 if (appcache_dispatcher_->OnMessageReceived(msg) || 1722 if (appcache_dispatcher_->OnMessageReceived(msg) ||
1768 dom_storage_dispatcher_->OnMessageReceived(msg) || 1723 dom_storage_dispatcher_->OnMessageReceived(msg) ||
1769 embedded_worker_dispatcher_->OnMessageReceived(msg)) { 1724 embedded_worker_dispatcher_->OnMessageReceived(msg)) {
1770 return true; 1725 return true;
1771 } 1726 }
1772 1727
1773 bool handled = true; 1728 bool handled = true;
1774 IPC_BEGIN_MESSAGE_MAP(RenderThreadImpl, msg) 1729 IPC_BEGIN_MESSAGE_MAP(RenderThreadImpl, msg)
1775 IPC_MESSAGE_HANDLER(FrameMsg_NewFrame, OnCreateNewFrame) 1730 IPC_MESSAGE_HANDLER(FrameMsg_NewFrame, OnCreateNewFrame)
1776 IPC_MESSAGE_HANDLER(FrameMsg_NewFrameProxy, OnCreateNewFrameProxy) 1731 IPC_MESSAGE_HANDLER(FrameMsg_NewFrameProxy, OnCreateNewFrameProxy)
1777 IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForCurrentURL,
1778 OnSetZoomLevelForCurrentURL)
1779 // TODO(port): removed from render_messages_internal.h; 1732 // TODO(port): removed from render_messages_internal.h;
1780 // is there a new non-windows message I should add here? 1733 // is there a new non-windows message I should add here?
1781 IPC_MESSAGE_HANDLER(ViewMsg_New, OnCreateNewView) 1734 IPC_MESSAGE_HANDLER(ViewMsg_New, OnCreateNewView)
1782 IPC_MESSAGE_HANDLER(ViewMsg_NetworkConnectionChanged, 1735 IPC_MESSAGE_HANDLER(ViewMsg_NetworkConnectionChanged,
1783 OnNetworkConnectionChanged) 1736 OnNetworkConnectionChanged)
1784 IPC_MESSAGE_HANDLER(WorkerProcessMsg_CreateWorker, OnCreateNewSharedWorker) 1737 IPC_MESSAGE_HANDLER(WorkerProcessMsg_CreateWorker, OnCreateNewSharedWorker)
1785 IPC_MESSAGE_HANDLER(ViewMsg_TimezoneChange, OnUpdateTimezone) 1738 IPC_MESSAGE_HANDLER(ViewMsg_TimezoneChange, OnUpdateTimezone)
1786 #if defined(OS_ANDROID) 1739 #if defined(OS_ANDROID)
1787 IPC_MESSAGE_HANDLER(ViewMsg_SetWebKitSharedTimersSuspended, 1740 IPC_MESSAGE_HANDLER(ViewMsg_SetWebKitSharedTimersSuspended,
1788 OnSetWebKitSharedTimersSuspended) 1741 OnSetWebKitSharedTimersSuspended)
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1830 base::IntToString(render_view_routing_id)); 1783 base::IntToString(render_view_routing_id));
1831 base::debug::SetCrashKeyValue("newproxy_opener_id", 1784 base::debug::SetCrashKeyValue("newproxy_opener_id",
1832 base::IntToString(opener_routing_id)); 1785 base::IntToString(opener_routing_id));
1833 base::debug::SetCrashKeyValue("newproxy_parent_id", 1786 base::debug::SetCrashKeyValue("newproxy_parent_id",
1834 base::IntToString(parent_routing_id)); 1787 base::IntToString(parent_routing_id));
1835 RenderFrameProxy::CreateFrameProxy(routing_id, render_view_routing_id, 1788 RenderFrameProxy::CreateFrameProxy(routing_id, render_view_routing_id,
1836 opener_routing_id, parent_routing_id, 1789 opener_routing_id, parent_routing_id,
1837 replicated_state); 1790 replicated_state);
1838 } 1791 }
1839 1792
1840 void RenderThreadImpl::OnSetZoomLevelForCurrentURL(const std::string& scheme,
1841 const std::string& host,
1842 double zoom_level) {
1843 RenderViewZoomer zoomer(scheme, host, zoom_level);
1844 RenderView::ForEach(&zoomer);
1845 }
1846
1847 void RenderThreadImpl::OnCreateNewView(const ViewMsg_New_Params& params) { 1793 void RenderThreadImpl::OnCreateNewView(const ViewMsg_New_Params& params) {
1848 CompositorDependencies* compositor_deps = this; 1794 CompositorDependencies* compositor_deps = this;
1849 // When bringing in render_view, also bring in webkit's glue and jsbindings. 1795 // When bringing in render_view, also bring in webkit's glue and jsbindings.
1850 RenderViewImpl::Create(compositor_deps, params, false); 1796 RenderViewImpl::Create(compositor_deps, params, false);
1851 } 1797 }
1852 1798
1853 GpuChannelHost* RenderThreadImpl::EstablishGpuChannelSync( 1799 GpuChannelHost* RenderThreadImpl::EstablishGpuChannelSync(
1854 CauseForGpuLaunch cause_for_gpu_launch) { 1800 CauseForGpuLaunch cause_for_gpu_launch) {
1855 TRACE_EVENT0("gpu", "RenderThreadImpl::EstablishGpuChannelSync"); 1801 TRACE_EVENT0("gpu", "RenderThreadImpl::EstablishGpuChannelSync");
1856 1802
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
2177 } 2123 }
2178 2124
2179 void RenderThreadImpl::PendingRenderFrameConnect::OnConnectionError() { 2125 void RenderThreadImpl::PendingRenderFrameConnect::OnConnectionError() {
2180 size_t erased = 2126 size_t erased =
2181 RenderThreadImpl::current()->pending_render_frame_connects_.erase( 2127 RenderThreadImpl::current()->pending_render_frame_connects_.erase(
2182 routing_id_); 2128 routing_id_);
2183 DCHECK_EQ(1u, erased); 2129 DCHECK_EQ(1u, erased);
2184 } 2130 }
2185 2131
2186 } // namespace content 2132 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698