Commit 88e441a8 authored by John Delaney's avatar John Delaney Committed by Commit Bot

[conversions] Add better feature detection for origin trial

What: Ensure the CM runtime feature only looks enabled in renderer when
the browser process base::Feature is also enabled.

Why: It is currently impossible to do feature detection for the API,
as you do not know whether the client has the browser feature enabled.

How: Adds a depends_on condition to our existing runtime feature which
uses a webruntime feature matching the browser process base::Feature.

This requires removing API related expectations from
web_tests/webexposed until the browser side feature is enabled by
default/for testing.

Bug: 1115786
Change-Id: I1db0583551d25cc3def51a89ebddbbbed675362a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2353732Reviewed-by: default avatarCharlie Harrison <csharrison@chromium.org>
Reviewed-by: default avatarJeremy Roman <jbroman@chromium.org>
Commit-Queue: John Delaney <johnidel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799917}
parent ff4abf1f
......@@ -9,6 +9,7 @@
#include "chrome/test/base/ui_test_utils.h"
#include "components/page_load_metrics/browser/page_load_metrics_test_waiter.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
......@@ -22,7 +23,9 @@
// in the Chrome layer, as UseCounter recording is not used with content shell.
class ConversionsUseCounterBrowsertest : public InProcessBrowserTest {
public:
ConversionsUseCounterBrowsertest() = default;
ConversionsUseCounterBrowsertest() {
feature_list_.InitAndEnableFeature(features::kConversionMeasurement);
}
void SetUpCommandLine(base::CommandLine* command_line) override {
// Sets up the blink runtime feature for ConversionMeasurement.
......@@ -41,6 +44,9 @@ class ConversionsUseCounterBrowsertest : public InProcessBrowserTest {
protected:
net::EmbeddedTestServer server_{net::EmbeddedTestServer::TYPE_HTTPS};
private:
base::test::ScopedFeatureList feature_list_;
};
IN_PROC_BROWSER_TEST_F(ConversionsUseCounterBrowsertest,
......
......@@ -35,11 +35,9 @@ namespace {
constexpr char kBaseDataDir[] = "content/test/data/conversions/";
}
class ConversionsOriginTrialBrowserTest : public ContentBrowserTest {
class ConversionsOriginTrialBrowserTestBase : public ContentBrowserTest {
public:
ConversionsOriginTrialBrowserTest() {
feature_list_.InitAndEnableFeature(features::kConversionMeasurement);
}
ConversionsOriginTrialBrowserTestBase() = default;
void SetUpOnMainThread() override {
ContentBrowserTest::SetUpOnMainThread();
......@@ -63,10 +61,30 @@ class ConversionsOriginTrialBrowserTest : public ContentBrowserTest {
WebContents* web_contents() { return shell()->web_contents(); }
private:
base::test::ScopedFeatureList feature_list_;
std::unique_ptr<URLLoaderInterceptor> url_loader_interceptor_;
};
class ConversionsOriginTrialBrowserTest
: public ConversionsOriginTrialBrowserTestBase {
public:
ConversionsOriginTrialBrowserTest() {
feature_list_.InitAndEnableFeature(features::kConversionMeasurement);
}
private:
base::test::ScopedFeatureList feature_list_;
};
IN_PROC_BROWSER_TEST_F(ConversionsOriginTrialBrowserTest,
OriginTrialEnabled_FeatureDetected) {
EXPECT_TRUE(NavigateToURL(
shell(), GURL("https://example.test/impression_with_origin_trial.html")));
EXPECT_EQ(true, EvalJs(shell(),
"document.featurePolicy.features().includes('"
"conversion-measurement')"));
}
IN_PROC_BROWSER_TEST_F(ConversionsOriginTrialBrowserTest,
OriginTrialEnabled_ImpressionRegistered) {
EXPECT_TRUE(NavigateToURL(
......@@ -103,4 +121,25 @@ IN_PROC_BROWSER_TEST_F(ConversionsOriginTrialBrowserTest,
// This requires also using an embedded test server because the
// UrlLoadInterceptor cannot properly redirect the conversion pings.
class ConversionsOriginTrialNoBrowserFeatureBrowserTest
: public ConversionsOriginTrialBrowserTestBase {
public:
ConversionsOriginTrialNoBrowserFeatureBrowserTest() {
feature_list_.InitAndDisableFeature(features::kConversionMeasurement);
}
private:
base::test::ScopedFeatureList feature_list_;
};
IN_PROC_BROWSER_TEST_F(ConversionsOriginTrialNoBrowserFeatureBrowserTest,
BrowserSideLogicNotEnabled_FeatureNotDetected) {
EXPECT_TRUE(NavigateToURL(
shell(), GURL("https://example.test/impression_with_origin_trial.html")));
EXPECT_EQ(false, EvalJs(shell(),
"document.featurePolicy.features().includes('"
"conversion-measurement')"));
}
} // namespace content
......@@ -343,6 +343,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
kEnableOnly},
{wf::EnableCompositingOptimizations,
blink::features::kCompositingOptimizations, kUseFeatureState},
{wf::EnableConversionMeasurementInfraSupport,
features::kConversionMeasurement, kUseFeatureState},
};
for (const auto& mapping : blinkFeatureToBaseFeatureMapping) {
SetRuntimeFeatureFromChromiumFeature(
......
......@@ -250,6 +250,8 @@ class WebRuntimeFeatures {
bool);
BLINK_PLATFORM_EXPORT static void EnableContentIndex(bool);
BLINK_PLATFORM_EXPORT static void EnableRestrictGamepadAccess(bool);
BLINK_PLATFORM_EXPORT static void EnableConversionMeasurementInfraSupport(
bool);
BLINK_PLATFORM_EXPORT static void EnableCompositingOptimizations(bool);
......
......@@ -721,4 +721,8 @@ void WebRuntimeFeatures::EnableCompositingOptimizations(bool enable) {
RuntimeEnabledFeatures::SetCompositingOptimizationsEnabled(enable);
}
void WebRuntimeFeatures::EnableConversionMeasurementInfraSupport(bool enable) {
RuntimeEnabledFeatures::SetConversionMeasurementInfraSupportEnabled(enable);
}
} // namespace blink
......@@ -367,6 +367,12 @@
origin_trial_feature_name: "ConversionMeasurement",
origin_trial_allows_third_party: true,
status: "experimental",
depends_on: ["ConversionMeasurementInfraSupport"],
},
{
// Feature to explicitly disable/enable the Conversion
// Measurement API when there is not browser process side infra.
name: "ConversionMeasurementInfraSupport",
},
{
name: "CookieDeprecationMessages",
......
......@@ -325,7 +325,6 @@ namespace http://www.w3.org/1999/xhtml
property webkitRequestFullscreen
html element a
property charset
property conversionDestination
property coords
property download
property hash
......@@ -334,8 +333,6 @@ html element a
property href
property hrefTranslate
property hreflang
property impressionData
property impressionExpiry
property name
property origin
property password
......@@ -346,7 +343,6 @@ html element a
property referrerPolicy
property rel
property relList
property reportingOrigin
property rev
property search
property shape
......
......@@ -22,7 +22,6 @@ ch-viewport-width
ch-width
clipboard-read
clipboard-write
conversion-measurement
cross-origin-isolated
document-domain
document-write
......
......@@ -2688,7 +2688,6 @@ interface HTMLAllCollection
interface HTMLAnchorElement : HTMLElement
attribute @@toStringTag
getter charset
getter conversionDestination
getter coords
getter download
getter hash
......@@ -2697,8 +2696,6 @@ interface HTMLAnchorElement : HTMLElement
getter href
getter hrefTranslate
getter hreflang
getter impressionData
getter impressionExpiry
getter name
getter origin
getter password
......@@ -2709,7 +2706,6 @@ interface HTMLAnchorElement : HTMLElement
getter referrerPolicy
getter rel
getter relList
getter reportingOrigin
getter rev
getter search
getter shape
......@@ -2720,7 +2716,6 @@ interface HTMLAnchorElement : HTMLElement
method constructor
method toString
setter charset
setter conversionDestination
setter coords
setter download
setter hash
......@@ -2729,8 +2724,6 @@ interface HTMLAnchorElement : HTMLElement
setter href
setter hrefTranslate
setter hreflang
setter impressionData
setter impressionExpiry
setter name
setter password
setter pathname
......@@ -2740,7 +2733,6 @@ interface HTMLAnchorElement : HTMLElement
setter referrerPolicy
setter rel
setter relList
setter reportingOrigin
setter rev
setter search
setter shape
......
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