diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/content/browser/conversions/conversions_browsertest.cc | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/content/browser/conversions/conversions_browsertest.cc')
-rw-r--r-- | chromium/content/browser/conversions/conversions_browsertest.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/chromium/content/browser/conversions/conversions_browsertest.cc b/chromium/content/browser/conversions/conversions_browsertest.cc index dedcf5a42ec..6df8d3c536f 100644 --- a/chromium/content/browser/conversions/conversions_browsertest.cc +++ b/chromium/content/browser/conversions/conversions_browsertest.cc @@ -5,7 +5,12 @@ #include <memory> #include "base/command_line.h" +#include "base/sequenced_task_runner.h" #include "base/test/scoped_feature_list.h" +#include "base/threading/sequenced_task_runner_handle.h" +#include "content/browser/conversions/conversion_manager_impl.h" +#include "content/browser/conversions/conversion_test_utils.h" +#include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test.h" @@ -14,6 +19,7 @@ #include "content/public/test/content_browser_test_utils.h" #include "content/public/test/test_navigation_observer.h" #include "content/shell/browser/shell.h" +#include "content/test/test_content_browser_client.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/controllable_http_response.h" #include "net/test/embedded_test_server/default_handlers.h" @@ -45,6 +51,8 @@ struct ExpectedReportWaiter { GURL expected_url; std::unique_ptr<net::test_server::ControllableHttpResponse> response; + bool HasRequest() { return !!response->http_request(); } + // Returns the url for the HttpRequest handled by |response|. This returns a // URL formatted with the host defined in the headers. This would not match // |expected_url| if the host for report url was not set properly. @@ -74,10 +82,15 @@ class ConversionsBrowserTest : public ContentBrowserTest { public: ConversionsBrowserTest() { feature_list_.InitAndEnableFeature(features::kConversionMeasurement); + ConversionManagerImpl::RunInMemoryForTesting(); } void SetUpCommandLine(base::CommandLine* command_line) override { command_line->AppendSwitch(switches::kConversionsDebugMode); + + // Sets up the blink runtime feature for ConversionMeasurement. + command_line->AppendSwitch( + switches::kEnableExperimentalWebPlatformFeatures); } void SetUpOnMainThread() override { @@ -95,11 +108,19 @@ class ConversionsBrowserTest : public ContentBrowserTest { net::EmbeddedTestServer* https_server() { return https_server_.get(); } + protected: + ConversionDisallowingContentBrowserClient disallowed_browser_client_; + private: base::test::ScopedFeatureList feature_list_; std::unique_ptr<net::EmbeddedTestServer> https_server_; }; +// Verifies that storage initialization does not hang when initialized in a +// browsertest context, see https://crbug.com/1080764). +IN_PROC_BROWSER_TEST_F(ConversionsBrowserTest, + FeatureEnabled_StorageInitWithoutHang) {} + IN_PROC_BROWSER_TEST_F(ConversionsBrowserTest, ImpressionConversion_ReportSent) { // Expected reports must be registered before the server starts. @@ -251,4 +272,57 @@ IN_PROC_BROWSER_TEST_F( } } +IN_PROC_BROWSER_TEST_F(ConversionsBrowserTest, + ConversionRegisteredWithEmbedderDisallow_NoData) { + ContentBrowserClient* old_browser_client = + SetBrowserClientForTesting(&disallowed_browser_client_); + + // Expected reports must be registered before the server starts. + ExpectedReportWaiter expected_report( + GURL( + "https://a.test/.well-known/" + "register-conversion?impression-data=1&conversion-data=7&credit=100"), + https_server()); + ASSERT_TRUE(https_server()->Start()); + + GURL impression_url = https_server()->GetURL( + "a.test", "/conversions/page_with_impression_creator.html"); + EXPECT_TRUE(NavigateToURL(web_contents(), impression_url)); + + // Create an anchor tag with impression attributes and click the link. By + // default the target is set to "_top". + GURL conversion_url = https_server()->GetURL( + "b.test", "/conversions/page_with_conversion_redirect.html"); + EXPECT_TRUE( + ExecJs(web_contents(), + JsReplace(R"( + createImpressionTag("link" /* id */, + $1 /* url */, + "1" /* impression data */, + $2 /* conversion_destination */);)", + conversion_url, url::Origin::Create(conversion_url)))); + + TestNavigationObserver observer(web_contents()); + EXPECT_TRUE(ExecJs(shell(), "simulateClick('link');")); + observer.Wait(); + + // Register a conversion with the original page as the reporting origin. + EXPECT_TRUE( + ExecJs(web_contents(), JsReplace("registerConversionForOrigin(7, $1)", + url::Origin::Create(impression_url)))); + + // Since we want to verify that a report _isn't_ sent, we can't really wait on + // any event here. The best thing we can do is just impose a short delay and + // verify the browser didn't send anything. Worst case, this should start + // flakily failing if the logic breaks. + base::RunLoop run_loop; + base::SequencedTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, run_loop.QuitClosure(), + base::TimeDelta::FromMilliseconds(100)); + run_loop.Run(); + EXPECT_FALSE(expected_report.HasRequest()); + + SetBrowserClientForTesting(old_browser_client); +} + } // namespace content |