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/renderer/render_view_impl.h" | 5 #include "content/renderer/render_view_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1204 return true; | 1204 return true; |
1205 } | 1205 } |
1206 | 1206 |
1207 bool handled = true; | 1207 bool handled = true; |
1208 IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message) | 1208 IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message) |
1209 IPC_MESSAGE_HANDLER(InputMsg_ExecuteEditCommand, OnExecuteEditCommand) | 1209 IPC_MESSAGE_HANDLER(InputMsg_ExecuteEditCommand, OnExecuteEditCommand) |
1210 IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret) | 1210 IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret) |
1211 IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect, | 1211 IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect, |
1212 OnScrollFocusedEditableNodeIntoRect) | 1212 OnScrollFocusedEditableNodeIntoRect) |
1213 IPC_MESSAGE_HANDLER(ViewMsg_SetPageScale, OnSetPageScale) | 1213 IPC_MESSAGE_HANDLER(ViewMsg_SetPageScale, OnSetPageScale) |
1214 IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom) | |
1215 IPC_MESSAGE_HANDLER(ViewMsg_AllowBindings, OnAllowBindings) | 1214 IPC_MESSAGE_HANDLER(ViewMsg_AllowBindings, OnAllowBindings) |
1216 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus) | 1215 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus) |
1217 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck) | 1216 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck) |
1218 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences) | 1217 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences) |
1219 IPC_MESSAGE_HANDLER(ViewMsg_EnumerateDirectoryResponse, | 1218 IPC_MESSAGE_HANDLER(ViewMsg_EnumerateDirectoryResponse, |
1220 OnEnumerateDirectoryResponse) | 1219 OnEnumerateDirectoryResponse) |
1221 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage) | 1220 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage) |
1222 IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted) | 1221 IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted) |
1223 IPC_MESSAGE_HANDLER(ViewMsg_SetBackgroundOpaque, OnSetBackgroundOpaque) | 1222 IPC_MESSAGE_HANDLER(ViewMsg_SetBackgroundOpaque, OnSetBackgroundOpaque) |
1224 IPC_MESSAGE_HANDLER(ViewMsg_EnablePreferredSizeChangedMode, | 1223 IPC_MESSAGE_HANDLER(ViewMsg_EnablePreferredSizeChangedMode, |
(...skipping 834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2059 bool RenderViewImpl::GetContentStateImmediately() const { | 2058 bool RenderViewImpl::GetContentStateImmediately() const { |
2060 return send_content_state_immediately_; | 2059 return send_content_state_immediately_; |
2061 } | 2060 } |
2062 | 2061 |
2063 void RenderViewImpl::OnSetPageScale(float page_scale_factor) { | 2062 void RenderViewImpl::OnSetPageScale(float page_scale_factor) { |
2064 if (!webview()) | 2063 if (!webview()) |
2065 return; | 2064 return; |
2066 webview()->setPageScaleFactor(page_scale_factor); | 2065 webview()->setPageScaleFactor(page_scale_factor); |
2067 } | 2066 } |
2068 | 2067 |
2069 void RenderViewImpl::OnZoom(PageZoom zoom) { | |
2070 if (!webview()) // Not sure if this can happen, but no harm in being safe. | |
2071 return; | |
2072 | |
2073 webview()->hidePopups(); | |
2074 | |
2075 double old_zoom_level = webview()->zoomLevel(); | |
2076 double zoom_level; | |
2077 if (zoom == PAGE_ZOOM_RESET) { | |
2078 zoom_level = 0; | |
2079 } else if (static_cast<int>(old_zoom_level) == old_zoom_level) { | |
2080 // Previous zoom level is a whole number, so just increment/decrement. | |
2081 zoom_level = old_zoom_level + zoom; | |
2082 } else { | |
2083 // Either the user hit the zoom factor limit and thus the zoom level is now | |
2084 // not a whole number, or a plugin changed it to a custom value. We want | |
2085 // to go to the next whole number so that the user can always get back to | |
2086 // 100% with the keyboard/menu. | |
2087 if ((old_zoom_level > 1 && zoom > 0) || | |
2088 (old_zoom_level < 1 && zoom < 0)) { | |
2089 zoom_level = static_cast<int>(old_zoom_level + zoom); | |
2090 } else { | |
2091 // We're going towards 100%, so first go to the next whole number. | |
2092 zoom_level = static_cast<int>(old_zoom_level); | |
2093 } | |
2094 } | |
2095 SetZoomLevel(zoom_level); | |
2096 zoomLevelChanged(); | |
2097 } | |
2098 | |
2099 void RenderViewImpl::OnSetZoomLevel( | 2068 void RenderViewImpl::OnSetZoomLevel( |
2100 PageMsg_SetZoomLevel_Command command, | 2069 PageMsg_SetZoomLevel_Command command, |
2101 double zoom_level) { | 2070 double zoom_level) { |
2102 switch (command) { | 2071 switch (command) { |
2103 case PageMsg_SetZoomLevel_Command::CLEAR_TEMPORARY: | 2072 case PageMsg_SetZoomLevel_Command::CLEAR_TEMPORARY: |
2104 uses_temporary_zoom_level_ = false; | 2073 uses_temporary_zoom_level_ = false; |
2105 break; | 2074 break; |
2106 case PageMsg_SetZoomLevel_Command::SET_TEMPORARY: | 2075 case PageMsg_SetZoomLevel_Command::SET_TEMPORARY: |
2107 uses_temporary_zoom_level_ = true; | 2076 uses_temporary_zoom_level_ = true; |
2108 break; | 2077 break; |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2449 // percentages. | 2418 // percentages. |
2450 int minimum_percent = round( | 2419 int minimum_percent = round( |
2451 ZoomLevelToZoomFactor(minimum_level) * 100); | 2420 ZoomLevelToZoomFactor(minimum_level) * 100); |
2452 int maximum_percent = round( | 2421 int maximum_percent = round( |
2453 ZoomLevelToZoomFactor(maximum_level) * 100); | 2422 ZoomLevelToZoomFactor(maximum_level) * 100); |
2454 | 2423 |
2455 Send(new ViewHostMsg_UpdateZoomLimits(GetRoutingID(), minimum_percent, | 2424 Send(new ViewHostMsg_UpdateZoomLimits(GetRoutingID(), minimum_percent, |
2456 maximum_percent)); | 2425 maximum_percent)); |
2457 } | 2426 } |
2458 | 2427 |
2459 void RenderViewImpl::zoomLevelChanged() { | |
2460 double zoom_level = webview()->zoomLevel(); | |
2461 | |
2462 // Do not send empty URLs to the browser when we are just setting the default | |
2463 // zoom level (from RendererPreferences) before the first navigation. | |
2464 if (!webview()->mainFrame()->document().url().isEmpty()) { | |
2465 // Tell the browser which url got zoomed so it can update the menu and the | |
2466 // saved values if necessary | |
2467 Send(new ViewHostMsg_DidZoomURL( | |
2468 GetRoutingID(), zoom_level, | |
2469 GURL(webview()->mainFrame()->document().url()))); | |
2470 } | |
2471 } | |
2472 | |
2473 void RenderViewImpl::pageScaleFactorChanged() { | 2428 void RenderViewImpl::pageScaleFactorChanged() { |
2474 if (!webview()) | 2429 if (!webview()) |
2475 return; | 2430 return; |
2476 | 2431 |
2477 Send(new ViewHostMsg_PageScaleFactorChanged(GetRoutingID(), | 2432 Send(new ViewHostMsg_PageScaleFactorChanged(GetRoutingID(), |
2478 webview()->pageScaleFactor())); | 2433 webview()->pageScaleFactor())); |
2479 } | 2434 } |
2480 | 2435 |
2481 double RenderViewImpl::zoomLevelToZoomFactor(double zoom_level) const { | 2436 double RenderViewImpl::zoomLevelToZoomFactor(double zoom_level) const { |
2482 return ZoomLevelToZoomFactor(zoom_level); | 2437 return ZoomLevelToZoomFactor(zoom_level); |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2791 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 2746 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
2792 } | 2747 } |
2793 | 2748 |
2794 std::unique_ptr<InputEventAck> ack( | 2749 std::unique_ptr<InputEventAck> ack( |
2795 new InputEventAck(InputEventAckSource::MAIN_THREAD, input_event->type, | 2750 new InputEventAck(InputEventAckSource::MAIN_THREAD, input_event->type, |
2796 INPUT_EVENT_ACK_STATE_NOT_CONSUMED)); | 2751 INPUT_EVENT_ACK_STATE_NOT_CONSUMED)); |
2797 OnInputEventAck(std::move(ack)); | 2752 OnInputEventAck(std::move(ack)); |
2798 } | 2753 } |
2799 | 2754 |
2800 } // namespace content | 2755 } // namespace content |
OLD | NEW |