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

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

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

Powered by Google App Engine
This is Rietveld 408576698