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 @@ ...@@ -9,6 +9,7 @@
#include "chrome/test/base/ui_test_utils.h" #include "chrome/test/base/ui_test_utils.h"
#include "components/page_load_metrics/browser/page_load_metrics_test_waiter.h" #include "components/page_load_metrics/browser/page_load_metrics_test_waiter.h"
#include "content/public/browser/web_contents.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/common/content_switches.h"
#include "content/public/test/browser_test.h" #include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h" #include "content/public/test/browser_test_utils.h"
...@@ -22,7 +23,9 @@ ...@@ -22,7 +23,9 @@
// in the Chrome layer, as UseCounter recording is not used with content shell. // in the Chrome layer, as UseCounter recording is not used with content shell.
class ConversionsUseCounterBrowsertest : public InProcessBrowserTest { class ConversionsUseCounterBrowsertest : public InProcessBrowserTest {
public: public:
ConversionsUseCounterBrowsertest() = default; ConversionsUseCounterBrowsertest() {
feature_list_.InitAndEnableFeature(features::kConversionMeasurement);
}
void SetUpCommandLine(base::CommandLine* command_line) override { void SetUpCommandLine(base::CommandLine* command_line) override {
// Sets up the blink runtime feature for ConversionMeasurement. // Sets up the blink runtime feature for ConversionMeasurement.
...@@ -41,6 +44,9 @@ class ConversionsUseCounterBrowsertest : public InProcessBrowserTest { ...@@ -41,6 +44,9 @@ class ConversionsUseCounterBrowsertest : public InProcessBrowserTest {
protected: protected:
net::EmbeddedTestServer server_{net::EmbeddedTestServer::TYPE_HTTPS}; net::EmbeddedTestServer server_{net::EmbeddedTestServer::TYPE_HTTPS};
private:
base::test::ScopedFeatureList feature_list_;
}; };
IN_PROC_BROWSER_TEST_F(ConversionsUseCounterBrowsertest, IN_PROC_BROWSER_TEST_F(ConversionsUseCounterBrowsertest,
......
...@@ -35,11 +35,9 @@ namespace { ...@@ -35,11 +35,9 @@ namespace {
constexpr char kBaseDataDir[] = "content/test/data/conversions/"; constexpr char kBaseDataDir[] = "content/test/data/conversions/";
} }
class ConversionsOriginTrialBrowserTest : public ContentBrowserTest { class ConversionsOriginTrialBrowserTestBase : public ContentBrowserTest {
public: public:
ConversionsOriginTrialBrowserTest() { ConversionsOriginTrialBrowserTestBase() = default;
feature_list_.InitAndEnableFeature(features::kConversionMeasurement);
}
void SetUpOnMainThread() override { void SetUpOnMainThread() override {
ContentBrowserTest::SetUpOnMainThread(); ContentBrowserTest::SetUpOnMainThread();
...@@ -63,10 +61,30 @@ class ConversionsOriginTrialBrowserTest : public ContentBrowserTest { ...@@ -63,10 +61,30 @@ class ConversionsOriginTrialBrowserTest : public ContentBrowserTest {
WebContents* web_contents() { return shell()->web_contents(); } WebContents* web_contents() { return shell()->web_contents(); }
private: private:
base::test::ScopedFeatureList feature_list_;
std::unique_ptr<URLLoaderInterceptor> url_loader_interceptor_; 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, IN_PROC_BROWSER_TEST_F(ConversionsOriginTrialBrowserTest,
OriginTrialEnabled_ImpressionRegistered) { OriginTrialEnabled_ImpressionRegistered) {
EXPECT_TRUE(NavigateToURL( EXPECT_TRUE(NavigateToURL(
...@@ -103,4 +121,25 @@ IN_PROC_BROWSER_TEST_F(ConversionsOriginTrialBrowserTest, ...@@ -103,4 +121,25 @@ IN_PROC_BROWSER_TEST_F(ConversionsOriginTrialBrowserTest,
// This requires also using an embedded test server because the // This requires also using an embedded test server because the
// UrlLoadInterceptor cannot properly redirect the conversion pings. // 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 } // namespace content
...@@ -343,6 +343,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() { ...@@ -343,6 +343,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
kEnableOnly}, kEnableOnly},
{wf::EnableCompositingOptimizations, {wf::EnableCompositingOptimizations,
blink::features::kCompositingOptimizations, kUseFeatureState}, blink::features::kCompositingOptimizations, kUseFeatureState},
{wf::EnableConversionMeasurementInfraSupport,
features::kConversionMeasurement, kUseFeatureState},
}; };
for (const auto& mapping : blinkFeatureToBaseFeatureMapping) { for (const auto& mapping : blinkFeatureToBaseFeatureMapping) {
SetRuntimeFeatureFromChromiumFeature( SetRuntimeFeatureFromChromiumFeature(
......
...@@ -250,6 +250,8 @@ class WebRuntimeFeatures { ...@@ -250,6 +250,8 @@ class WebRuntimeFeatures {
bool); bool);
BLINK_PLATFORM_EXPORT static void EnableContentIndex(bool); BLINK_PLATFORM_EXPORT static void EnableContentIndex(bool);
BLINK_PLATFORM_EXPORT static void EnableRestrictGamepadAccess(bool); BLINK_PLATFORM_EXPORT static void EnableRestrictGamepadAccess(bool);
BLINK_PLATFORM_EXPORT static void EnableConversionMeasurementInfraSupport(
bool);
BLINK_PLATFORM_EXPORT static void EnableCompositingOptimizations(bool); BLINK_PLATFORM_EXPORT static void EnableCompositingOptimizations(bool);
......
...@@ -721,4 +721,8 @@ void WebRuntimeFeatures::EnableCompositingOptimizations(bool enable) { ...@@ -721,4 +721,8 @@ void WebRuntimeFeatures::EnableCompositingOptimizations(bool enable) {
RuntimeEnabledFeatures::SetCompositingOptimizationsEnabled(enable); RuntimeEnabledFeatures::SetCompositingOptimizationsEnabled(enable);
} }
void WebRuntimeFeatures::EnableConversionMeasurementInfraSupport(bool enable) {
RuntimeEnabledFeatures::SetConversionMeasurementInfraSupportEnabled(enable);
}
} // namespace blink } // namespace blink
...@@ -367,6 +367,12 @@ ...@@ -367,6 +367,12 @@
origin_trial_feature_name: "ConversionMeasurement", origin_trial_feature_name: "ConversionMeasurement",
origin_trial_allows_third_party: true, origin_trial_allows_third_party: true,
status: "experimental", 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", name: "CookieDeprecationMessages",
......
...@@ -325,7 +325,6 @@ namespace http://www.w3.org/1999/xhtml ...@@ -325,7 +325,6 @@ namespace http://www.w3.org/1999/xhtml
property webkitRequestFullscreen property webkitRequestFullscreen
html element a html element a
property charset property charset
property conversionDestination
property coords property coords
property download property download
property hash property hash
...@@ -334,8 +333,6 @@ html element a ...@@ -334,8 +333,6 @@ html element a
property href property href
property hrefTranslate property hrefTranslate
property hreflang property hreflang
property impressionData
property impressionExpiry
property name property name
property origin property origin
property password property password
...@@ -346,7 +343,6 @@ html element a ...@@ -346,7 +343,6 @@ html element a
property referrerPolicy property referrerPolicy
property rel property rel
property relList property relList
property reportingOrigin
property rev property rev
property search property search
property shape property shape
......
...@@ -22,7 +22,6 @@ ch-viewport-width ...@@ -22,7 +22,6 @@ ch-viewport-width
ch-width ch-width
clipboard-read clipboard-read
clipboard-write clipboard-write
conversion-measurement
cross-origin-isolated cross-origin-isolated
document-domain document-domain
document-write document-write
......
...@@ -2688,7 +2688,6 @@ interface HTMLAllCollection ...@@ -2688,7 +2688,6 @@ interface HTMLAllCollection
interface HTMLAnchorElement : HTMLElement interface HTMLAnchorElement : HTMLElement
attribute @@toStringTag attribute @@toStringTag
getter charset getter charset
getter conversionDestination
getter coords getter coords
getter download getter download
getter hash getter hash
...@@ -2697,8 +2696,6 @@ interface HTMLAnchorElement : HTMLElement ...@@ -2697,8 +2696,6 @@ interface HTMLAnchorElement : HTMLElement
getter href getter href
getter hrefTranslate getter hrefTranslate
getter hreflang getter hreflang
getter impressionData
getter impressionExpiry
getter name getter name
getter origin getter origin
getter password getter password
...@@ -2709,7 +2706,6 @@ interface HTMLAnchorElement : HTMLElement ...@@ -2709,7 +2706,6 @@ interface HTMLAnchorElement : HTMLElement
getter referrerPolicy getter referrerPolicy
getter rel getter rel
getter relList getter relList
getter reportingOrigin
getter rev getter rev
getter search getter search
getter shape getter shape
...@@ -2720,7 +2716,6 @@ interface HTMLAnchorElement : HTMLElement ...@@ -2720,7 +2716,6 @@ interface HTMLAnchorElement : HTMLElement
method constructor method constructor
method toString method toString
setter charset setter charset
setter conversionDestination
setter coords setter coords
setter download setter download
setter hash setter hash
...@@ -2729,8 +2724,6 @@ interface HTMLAnchorElement : HTMLElement ...@@ -2729,8 +2724,6 @@ interface HTMLAnchorElement : HTMLElement
setter href setter href
setter hrefTranslate setter hrefTranslate
setter hreflang setter hreflang
setter impressionData
setter impressionExpiry
setter name setter name
setter password setter password
setter pathname setter pathname
...@@ -2740,7 +2733,6 @@ interface HTMLAnchorElement : HTMLElement ...@@ -2740,7 +2733,6 @@ interface HTMLAnchorElement : HTMLElement
setter referrerPolicy setter referrerPolicy
setter rel setter rel
setter relList setter relList
setter reportingOrigin
setter rev setter rev
setter search setter search
setter shape 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