Commit 98260cd1 authored by Tarun Bansal's avatar Tarun Bansal Committed by Commit Bot

Lower the priority of iframes in the browser

Previous CL did for frames and requests that start from Blink.
This CL additionally does it for frames or requests that
start in the browser.

Bug: 800035
Change-Id: Id31dafa267a54971aa175077b017f5ee26d20d44
Reviewed-on: https://chromium-review.googlesource.com/922886
Commit-Queue: Tarun Bansal <tbansal@chromium.org>
Reviewed-by: default avatarCharlie Harrison <csharrison@chromium.org>
Cr-Commit-Position: refs/heads/master@{#537539}
parent a6bcc6c1
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
#include "base/feature_list.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/task_scheduler/post_task.h" #include "base/task_scheduler/post_task.h"
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
...@@ -198,7 +199,14 @@ std::unique_ptr<network::ResourceRequest> CreateResourceRequest( ...@@ -198,7 +199,14 @@ std::unique_ptr<network::ResourceRequest> CreateResourceRequest(
new_request->method = request_info->common_params.method; new_request->method = request_info->common_params.method;
new_request->url = request_info->common_params.url; new_request->url = request_info->common_params.url;
new_request->site_for_cookies = request_info->site_for_cookies; new_request->site_for_cookies = request_info->site_for_cookies;
new_request->priority = net::HIGHEST;
net::RequestPriority net_priority = net::HIGHEST;
if (!request_info->is_main_frame &&
base::FeatureList::IsEnabled(features::kLowPriorityIframes)) {
net_priority = net::LOWEST;
}
new_request->priority = net_priority;
new_request->render_frame_id = frame_tree_node_id; new_request->render_frame_id = frame_tree_node_id;
// The code below to set fields like request_initiator, referrer, etc has // The code below to set fields like request_initiator, referrer, etc has
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/navigation_ui_data.h" #include "content/public/browser/navigation_ui_data.h"
#include "content/public/browser/storage_partition.h" #include "content/public/browser/storage_partition.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h" #include "content/public/common/content_switches.h"
#include "content/public/common/service_manager_connection.h" #include "content/public/common/service_manager_connection.h"
#include "content/public/test/test_browser_context.h" #include "content/public/test/test_browser_context.h"
...@@ -129,7 +130,8 @@ class NavigationURLLoaderNetworkServiceTest : public testing::Test { ...@@ -129,7 +130,8 @@ class NavigationURLLoaderNetworkServiceTest : public testing::Test {
const std::string& headers, const std::string& headers,
const std::string& method, const std::string& method,
NavigationURLLoaderDelegate* delegate, NavigationURLLoaderDelegate* delegate,
bool allow_download = false) { bool allow_download = false,
bool is_main_frame = true) {
mojom::BeginNavigationParamsPtr begin_params = mojom::BeginNavigationParamsPtr begin_params =
mojom::BeginNavigationParams::New( mojom::BeginNavigationParams::New(
headers, net::LOAD_NORMAL, false /* skip_service_worker */, headers, net::LOAD_NORMAL, false /* skip_service_worker */,
...@@ -147,11 +149,10 @@ class NavigationURLLoaderNetworkServiceTest : public testing::Test { ...@@ -147,11 +149,10 @@ class NavigationURLLoaderNetworkServiceTest : public testing::Test {
std::unique_ptr<NavigationRequestInfo> request_info( std::unique_ptr<NavigationRequestInfo> request_info(
new NavigationRequestInfo( new NavigationRequestInfo(
common_params, std::move(begin_params), url, common_params, std::move(begin_params), url, is_main_frame,
true /* is_main_frame */, false /* parent_is_main_frame */, false /* parent_is_main_frame */, false /* are_ancestors_secure */,
false /* are_ancestors_secure */, -1 /* frame_tree_node_id */, -1 /* frame_tree_node_id */, false /* is_for_guests_only */,
false /* is_for_guests_only */, false /* report_raw_headers */, false /* report_raw_headers */, false /* is_prerenering */));
false /* is_prerenering */));
std::vector<std::unique_ptr<URLLoaderRequestHandler>> handlers; std::vector<std::unique_ptr<URLLoaderRequestHandler>> handlers;
most_recent_resource_request_ = base::nullopt; most_recent_resource_request_ = base::nullopt;
handlers.push_back(std::make_unique<TestURLLoaderRequestHandler>( handlers.push_back(std::make_unique<TestURLLoaderRequestHandler>(
...@@ -212,6 +213,25 @@ class NavigationURLLoaderNetworkServiceTest : public testing::Test { ...@@ -212,6 +213,25 @@ class NavigationURLLoaderNetworkServiceTest : public testing::Test {
} }
} }
net::RequestPriority NavigateAndReturnRequestPriority(const GURL& url,
bool is_main_frame) {
TestNavigationURLLoaderDelegate delegate;
base::test::ScopedFeatureList scoped_feature_list_;
scoped_feature_list_.InitAndEnableFeature(features::kLowPriorityIframes);
std::unique_ptr<NavigationURLLoader> loader = CreateTestLoader(
url,
base::StringPrintf("%s: %s", net::HttpRequestHeaders::kOrigin,
url.GetOrigin().spec().c_str()),
"GET", &delegate, false /* allow_download */, is_main_frame);
delegate.WaitForRequestRedirected();
loader->FollowRedirect();
delegate.WaitForResponseStarted();
return most_recent_resource_request_.value().priority;
}
protected: protected:
base::test::ScopedFeatureList feature_list_; base::test::ScopedFeatureList feature_list_;
TestBrowserThreadBundle thread_bundle_; TestBrowserThreadBundle thread_bundle_;
...@@ -220,6 +240,16 @@ class NavigationURLLoaderNetworkServiceTest : public testing::Test { ...@@ -220,6 +240,16 @@ class NavigationURLLoaderNetworkServiceTest : public testing::Test {
base::Optional<network::ResourceRequest> most_recent_resource_request_; base::Optional<network::ResourceRequest> most_recent_resource_request_;
}; };
TEST_F(NavigationURLLoaderNetworkServiceTest, RequestPriority) {
ASSERT_TRUE(http_test_server_.Start());
const GURL url = http_test_server_.GetURL("/redirect301-to-echo");
EXPECT_EQ(net::HIGHEST,
NavigateAndReturnRequestPriority(url, true /* is_main_frame */));
EXPECT_EQ(net::LOWEST,
NavigateAndReturnRequestPriority(url, false /* is_main_frame */));
}
TEST_F(NavigationURLLoaderNetworkServiceTest, Redirect301Tests) { TEST_F(NavigationURLLoaderNetworkServiceTest, Redirect301Tests) {
ASSERT_TRUE(http_test_server_.Start()); ASSERT_TRUE(http_test_server_.Start());
......
...@@ -1894,8 +1894,13 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest( ...@@ -1894,8 +1894,13 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest(
DCHECK(!(load_flags & net::LOAD_IGNORE_LIMITS)); DCHECK(!(load_flags & net::LOAD_IGNORE_LIMITS));
std::unique_ptr<net::URLRequest> new_request; std::unique_ptr<net::URLRequest> new_request;
net::RequestPriority net_priority = net::HIGHEST;
if (!info.is_main_frame &&
base::FeatureList::IsEnabled(features::kLowPriorityIframes)) {
net_priority = net::LOWEST;
}
new_request = request_context->CreateRequest( new_request = request_context->CreateRequest(
info.common_params.url, net::HIGHEST, nullptr, GetTrafficAnnotation()); info.common_params.url, net_priority, nullptr, GetTrafficAnnotation());
new_request->set_method(info.common_params.method); new_request->set_method(info.common_params.method);
new_request->set_site_for_cookies(info.site_for_cookies); new_request->set_site_for_cookies(info.site_for_cookies);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment