| 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 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 1466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1477 return; | 1477 return; |
| 1478 | 1478 |
| 1479 // Don't send state updates for kSwappedOutURL. | 1479 // Don't send state updates for kSwappedOutURL. |
| 1480 if (entry->root().urlString() == WebString::fromUTF8(kSwappedOutURL)) | 1480 if (entry->root().urlString() == WebString::fromUTF8(kSwappedOutURL)) |
| 1481 return; | 1481 return; |
| 1482 | 1482 |
| 1483 Send(new ViewHostMsg_UpdateState( | 1483 Send(new ViewHostMsg_UpdateState( |
| 1484 routing_id_, page_id_, HistoryEntryToPageState(entry))); | 1484 routing_id_, page_id_, HistoryEntryToPageState(entry))); |
| 1485 } | 1485 } |
| 1486 | 1486 |
| 1487 void RenderViewImpl::SendFrameStateUpdates() { |
| 1488 // We only use this path in OOPIF-enabled modes. |
| 1489 DCHECK(SiteIsolationPolicy::UseSubframeNavigationEntries()); |
| 1490 |
| 1491 // Tell each frame with pending state to send its UpdateState message. |
| 1492 for (int render_frame_routing_id : frames_with_pending_state_) { |
| 1493 RenderFrameImpl* frame = |
| 1494 RenderFrameImpl::FromRoutingID(render_frame_routing_id); |
| 1495 if (frame) |
| 1496 frame->SendUpdateState(); |
| 1497 } |
| 1498 frames_with_pending_state_.clear(); |
| 1499 } |
| 1500 |
| 1487 void RenderViewImpl::ApplyWebPreferencesInternal( | 1501 void RenderViewImpl::ApplyWebPreferencesInternal( |
| 1488 const WebPreferences& prefs, | 1502 const WebPreferences& prefs, |
| 1489 blink::WebView* web_view, | 1503 blink::WebView* web_view, |
| 1490 CompositorDependencies* compositor_deps) { | 1504 CompositorDependencies* compositor_deps) { |
| 1491 ApplyWebPreferences(prefs, web_view); | 1505 ApplyWebPreferences(prefs, web_view); |
| 1492 #if defined(OS_MACOSX) && !defined(OS_IOS) | 1506 #if defined(OS_MACOSX) && !defined(OS_IOS) |
| 1493 DCHECK(compositor_deps); | 1507 DCHECK(compositor_deps); |
| 1494 bool is_elastic_overscroll_enabled = | 1508 bool is_elastic_overscroll_enabled = |
| 1495 compositor_deps->IsElasticOverscrollEnabled(); | 1509 compositor_deps->IsElasticOverscrollEnabled(); |
| 1496 web_view->settings()->setReportWheelOverscroll(is_elastic_overscroll_enabled); | 1510 web_view->settings()->setReportWheelOverscroll(is_elastic_overscroll_enabled); |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1841 } | 1855 } |
| 1842 } | 1856 } |
| 1843 | 1857 |
| 1844 gfx::RectF RenderViewImpl::ClientRectToPhysicalWindowRect( | 1858 gfx::RectF RenderViewImpl::ClientRectToPhysicalWindowRect( |
| 1845 const gfx::RectF& rect) const { | 1859 const gfx::RectF& rect) const { |
| 1846 gfx::RectF window_rect = rect; | 1860 gfx::RectF window_rect = rect; |
| 1847 window_rect.Scale(device_scale_factor_ * webview()->pageScaleFactor()); | 1861 window_rect.Scale(device_scale_factor_ * webview()->pageScaleFactor()); |
| 1848 return window_rect; | 1862 return window_rect; |
| 1849 } | 1863 } |
| 1850 | 1864 |
| 1851 void RenderViewImpl::StartNavStateSyncTimerIfNecessary() { | 1865 void RenderViewImpl::StartNavStateSyncTimerIfNecessary(RenderFrameImpl* frame) { |
| 1852 // TODO(creis): Move this to RenderFrameHost. In the meantime, we'll ignore | 1866 // In OOPIF modes, keep track of which frames have pending updates. |
| 1853 // state changes between navigation events in OOPIF-enabled modes. | |
| 1854 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) | 1867 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) |
| 1855 return; | 1868 frames_with_pending_state_.insert(frame->GetRoutingID()); |
| 1856 | 1869 |
| 1857 int delay; | 1870 int delay; |
| 1858 if (send_content_state_immediately_) | 1871 if (send_content_state_immediately_) |
| 1859 delay = 0; | 1872 delay = 0; |
| 1860 else if (is_hidden()) | 1873 else if (is_hidden()) |
| 1861 delay = kDelaySecondsForContentStateSyncHidden; | 1874 delay = kDelaySecondsForContentStateSyncHidden; |
| 1862 else | 1875 else |
| 1863 delay = kDelaySecondsForContentStateSync; | 1876 delay = kDelaySecondsForContentStateSync; |
| 1864 | 1877 |
| 1865 if (nav_state_sync_timer_.IsRunning()) { | 1878 if (nav_state_sync_timer_.IsRunning()) { |
| 1866 // The timer is already running. If the delay of the timer maches the amount | 1879 // The timer is already running. If the delay of the timer maches the amount |
| 1867 // we want to delay by, then return. Otherwise stop the timer so that it | 1880 // we want to delay by, then return. Otherwise stop the timer so that it |
| 1868 // gets started with the right delay. | 1881 // gets started with the right delay. |
| 1869 if (nav_state_sync_timer_.GetCurrentDelay().InSeconds() == delay) | 1882 if (nav_state_sync_timer_.GetCurrentDelay().InSeconds() == delay) |
| 1870 return; | 1883 return; |
| 1871 nav_state_sync_timer_.Stop(); | 1884 nav_state_sync_timer_.Stop(); |
| 1872 } | 1885 } |
| 1873 | 1886 |
| 1874 nav_state_sync_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(delay), this, | 1887 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
| 1875 &RenderViewImpl::SendUpdateState); | 1888 // In OOPIF modes, tell each frame with pending state to inform the browser. |
| 1889 nav_state_sync_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(delay), this, |
| 1890 &RenderViewImpl::SendFrameStateUpdates); |
| 1891 } else { |
| 1892 // By default, send an UpdateState for the current history item. |
| 1893 nav_state_sync_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(delay), this, |
| 1894 &RenderViewImpl::SendUpdateState); |
| 1895 } |
| 1876 } | 1896 } |
| 1877 | 1897 |
| 1878 void RenderViewImpl::setMouseOverURL(const WebURL& url) { | 1898 void RenderViewImpl::setMouseOverURL(const WebURL& url) { |
| 1879 mouse_over_url_ = GURL(url); | 1899 mouse_over_url_ = GURL(url); |
| 1880 UpdateTargetURL(mouse_over_url_, focus_url_); | 1900 UpdateTargetURL(mouse_over_url_, focus_url_); |
| 1881 } | 1901 } |
| 1882 | 1902 |
| 1883 void RenderViewImpl::setKeyboardFocusURL(const WebURL& url) { | 1903 void RenderViewImpl::setKeyboardFocusURL(const WebURL& url) { |
| 1884 focus_url_ = GURL(url); | 1904 focus_url_ = GURL(url); |
| 1885 UpdateTargetURL(focus_url_, mouse_over_url_); | 1905 UpdateTargetURL(focus_url_, mouse_over_url_); |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2126 std::vector<FaviconURL> urls; | 2146 std::vector<FaviconURL> urls; |
| 2127 for (size_t i = 0; i < icon_urls.size(); i++) { | 2147 for (size_t i = 0; i < icon_urls.size(); i++) { |
| 2128 std::vector<gfx::Size> sizes; | 2148 std::vector<gfx::Size> sizes; |
| 2129 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); | 2149 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); |
| 2130 urls.push_back(FaviconURL( | 2150 urls.push_back(FaviconURL( |
| 2131 icon_urls[i].iconURL(), ToFaviconType(icon_urls[i].iconType()), sizes)); | 2151 icon_urls[i].iconURL(), ToFaviconType(icon_urls[i].iconType()), sizes)); |
| 2132 } | 2152 } |
| 2133 SendUpdateFaviconURL(urls); | 2153 SendUpdateFaviconURL(urls); |
| 2134 } | 2154 } |
| 2135 | 2155 |
| 2136 void RenderViewImpl::didUpdateCurrentHistoryItem(WebLocalFrame* frame) { | |
| 2137 StartNavStateSyncTimerIfNecessary(); | |
| 2138 } | |
| 2139 | |
| 2140 void RenderViewImpl::CheckPreferredSize() { | 2156 void RenderViewImpl::CheckPreferredSize() { |
| 2141 // We don't always want to send the change messages over IPC, only if we've | 2157 // We don't always want to send the change messages over IPC, only if we've |
| 2142 // been put in that mode by getting a |ViewMsg_EnablePreferredSizeChangedMode| | 2158 // been put in that mode by getting a |ViewMsg_EnablePreferredSizeChangedMode| |
| 2143 // message. | 2159 // message. |
| 2144 if (!send_preferred_size_changes_ || !webview()) | 2160 if (!send_preferred_size_changes_ || !webview()) |
| 2145 return; | 2161 return; |
| 2146 | 2162 |
| 2147 gfx::Size size = webview()->contentsPreferredMinimumSize(); | 2163 gfx::Size size = webview()->contentsPreferredMinimumSize(); |
| 2148 if (size == preferred_size_) | 2164 if (size == preferred_size_) |
| 2149 return; | 2165 return; |
| 2150 | 2166 |
| 2151 preferred_size_ = size; | 2167 preferred_size_ = size; |
| 2152 Send(new ViewHostMsg_DidContentsPreferredSizeChange(routing_id_, | 2168 Send(new ViewHostMsg_DidContentsPreferredSizeChange(routing_id_, |
| 2153 preferred_size_)); | 2169 preferred_size_)); |
| 2154 } | 2170 } |
| 2155 | 2171 |
| 2156 void RenderViewImpl::didChangeScrollOffset(WebLocalFrame* frame) { | |
| 2157 StartNavStateSyncTimerIfNecessary(); | |
| 2158 } | |
| 2159 | |
| 2160 void RenderViewImpl::SendFindReply(int request_id, | 2172 void RenderViewImpl::SendFindReply(int request_id, |
| 2161 int match_count, | 2173 int match_count, |
| 2162 int ordinal, | 2174 int ordinal, |
| 2163 const WebRect& selection_rect, | 2175 const WebRect& selection_rect, |
| 2164 bool final_status_update) { | 2176 bool final_status_update) { |
| 2165 Send(new ViewHostMsg_Find_Reply(routing_id_, | 2177 Send(new ViewHostMsg_Find_Reply(routing_id_, |
| 2166 request_id, | 2178 request_id, |
| 2167 match_count, | 2179 match_count, |
| 2168 selection_rect, | 2180 selection_rect, |
| 2169 ordinal, | 2181 ordinal, |
| (...skipping 1539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3709 if (IsUseZoomForDSFEnabled()) { | 3721 if (IsUseZoomForDSFEnabled()) { |
| 3710 compositor_->SetPaintedDeviceScaleFactor(device_scale_factor_); | 3722 compositor_->SetPaintedDeviceScaleFactor(device_scale_factor_); |
| 3711 webview()->setZoomFactorForDeviceScaleFactor( | 3723 webview()->setZoomFactorForDeviceScaleFactor( |
| 3712 device_scale_factor_); | 3724 device_scale_factor_); |
| 3713 } else { | 3725 } else { |
| 3714 webview()->setDeviceScaleFactor(device_scale_factor_); | 3726 webview()->setDeviceScaleFactor(device_scale_factor_); |
| 3715 } | 3727 } |
| 3716 } | 3728 } |
| 3717 | 3729 |
| 3718 } // namespace content | 3730 } // namespace content |
| OLD | NEW |