Commit 8c2be4d1 authored by rajendrant's avatar rajendrant Committed by Commit Bot

Populate data reduction proxy page ID for an alternate path

This path seems to be used in some webdriver tests. The populated page
ID will be sent in the data reduction proxy pingbacks.

Bug: 951913
Change-Id: Ie246963027af6ea8d3219c00c23012fc98787e9e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1574215Reviewed-by: default avatarRyan Sturm <ryansturm@chromium.org>
Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Commit-Queue: rajendrant <rajendrant@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652647}
parent 8afa9297
......@@ -225,6 +225,22 @@ PreviewsLitePageDecider::MaybeCreateThrottleFor(
return nullptr;
}
// static
uint64_t PreviewsLitePageDecider::GeneratePageIdForWebContents(
content::WebContents* web_contents) {
return PreviewsLitePageDecider::GeneratePageIdForProfile(
Profile::FromBrowserContext(web_contents->GetBrowserContext()));
}
// static
uint64_t PreviewsLitePageDecider::GeneratePageIdForProfile(Profile* profile) {
PreviewsService* previews_service =
PreviewsServiceFactory::GetForProfile(profile);
return previews_service
? previews_service->previews_lite_page_decider()->GeneratePageID()
: 0;
}
void PreviewsLitePageDecider::OnProxyRequestHeadersChanged(
const net::HttpRequestHeaders& headers) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
......
......@@ -22,11 +22,14 @@
#include "net/http/http_request_headers.h"
class PrefService;
class Profile;
namespace content {
class BrowserContext;
class NavigationHandle;
class NavigationThrottle;
class WebContents;
} // namespace content
namespace user_prefs {
......@@ -53,6 +56,11 @@ class PreviewsLitePageDecider
static std::unique_ptr<content::NavigationThrottle> MaybeCreateThrottleFor(
content::NavigationHandle* handle);
// Helpers to generate page ID.
static uint64_t GeneratePageIdForWebContents(
content::WebContents* web_contents);
static uint64_t GeneratePageIdForProfile(Profile* profile);
// Removes |this| as a DataReductionProxySettingsObserver.
void Shutdown();
......
......@@ -10,6 +10,7 @@
#include "base/strings/string_number_conversions.h"
#include "base/test/scoped_task_environment.h"
#include "base/test/simple_test_tick_clock.h"
#include "chrome/browser/renderer_host/chrome_navigation_ui_data.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h"
......@@ -21,6 +22,8 @@
#include "content/public/browser/browser_context.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
#include "content/public/test/web_contents_tester.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -250,3 +253,52 @@ TEST_F(PreviewsLitePageDeciderPrefTest, TestDRPEnabledThenNotify) {
EXPECT_FALSE(decider->NeedsToNotifyUser());
}
class TestPreviewsLitePageDeciderWebContentsObserver
: public content::WebContentsObserver,
public content::WebContentsUserData<
TestPreviewsLitePageDeciderWebContentsObserver> {
public:
explicit TestPreviewsLitePageDeciderWebContentsObserver(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents) {}
~TestPreviewsLitePageDeciderWebContentsObserver() override {}
uint64_t last_navigation_page_id() { return last_navigation_page_id_; }
void DidFinishNavigation(
content::NavigationHandle* navigation_handle) override {
auto* chrome_navigation_ui_data =
static_cast<const ChromeNavigationUIData*>(
navigation_handle->GetNavigationUIData());
last_navigation_page_id_ =
chrome_navigation_ui_data->data_reduction_proxy_page_id();
}
private:
friend class content::WebContentsUserData<
TestPreviewsLitePageDeciderWebContentsObserver>;
uint64_t last_navigation_page_id_ = 0;
WEB_CONTENTS_USER_DATA_KEY_DECL();
};
WEB_CONTENTS_USER_DATA_KEY_IMPL(TestPreviewsLitePageDeciderWebContentsObserver)
TEST_F(PreviewsLitePageDeciderPrefTest, TestDRPPageIDIncremented) {
TestPreviewsLitePageDeciderWebContentsObserver::CreateForWebContents(
web_contents());
content::WebContentsTester::For(web_contents())
->NavigateAndCommit(GURL(kTestUrl));
uint64_t last_navigation_page_id =
TestPreviewsLitePageDeciderWebContentsObserver::FromWebContents(
web_contents())
->last_navigation_page_id();
// Tests that the page ID is set for the last navigation, and subsequent
// generates give an increment.
EXPECT_NE(static_cast<uint64_t>(0U), last_navigation_page_id);
EXPECT_EQ(
static_cast<uint64_t>(last_navigation_page_id + 1U),
PreviewsLitePageDecider::GeneratePageIdForWebContents(web_contents()));
}
......@@ -6,6 +6,7 @@
#include "chrome/browser/prerender/prerender_contents.h"
#include "chrome/browser/prerender/prerender_histograms.h"
#include "chrome/browser/previews/previews_lite_page_decider.h"
#include "content/public/browser/navigation_handle.h"
#include "extensions/buildflags/buildflags.h"
#include "ui/base/window_open_disposition.h"
......@@ -39,6 +40,8 @@ ChromeNavigationUIData::ChromeNavigationUIData(
prerender::PrerenderHistograms::GetHistogramPrefix(
prerender_contents->origin());
}
data_reduction_proxy_page_id_ =
PreviewsLitePageDecider::GeneratePageIdForWebContents(web_contents);
}
ChromeNavigationUIData::~ChromeNavigationUIData() {}
......
......@@ -20,8 +20,6 @@
#include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_manager_factory.h"
#include "chrome/browser/previews/previews_lite_page_decider.h"
#include "chrome/browser/previews/previews_service.h"
#include "chrome/browser/previews/previews_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/renderer_host/chrome_navigation_ui_data.h"
#include "chrome/browser/signin/signin_promo.h"
......@@ -339,15 +337,11 @@ void LoadURLInContents(WebContents* target_contents,
// |frame_tree_node_id| is kNoFrameTreeNodeId for main frame navigations.
if (params->frame_tree_node_id ==
content::RenderFrameHost::kNoFrameTreeNodeId) {
PreviewsService* previews_service =
PreviewsServiceFactory::GetForProfile(GetSourceProfile(params));
uint64_t previews_page_id =
previews_service
? previews_service->previews_lite_page_decider()->GeneratePageID()
: 0;
load_url_params.navigation_ui_data =
ChromeNavigationUIData::CreateForMainFrameNavigation(
target_contents, params->disposition, previews_page_id);
target_contents, params->disposition,
PreviewsLitePageDecider::GeneratePageIdForProfile(
GetSourceProfile(params)));
}
if (params->uses_post) {
......
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