Index: chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc |
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc |
index 145440417adc21475c05d7e1780ec013cb92548c..d0f032732c908710da43cceff872053c93302b8b 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc |
@@ -14,7 +14,6 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/test/histogram_tester.h" |
-#include "base/test/scoped_feature_list.h" |
#include "base/values.h" |
#include "build/build_config.h" |
#include "chrome/browser/browser_process.h" |
@@ -60,6 +59,7 @@ |
#include "net/cert/mock_cert_verifier.h" |
#include "net/test/embedded_test_server/embedded_test_server.h" |
#include "net/test/url_request/url_request_mock_http_job.h" |
+#include "testing/gmock/include/gmock/gmock-matchers.h" |
#include "ui/base/l10n/l10n_util.h" |
using chrome_browser_interstitials::SecurityInterstitialIDNTest; |
@@ -327,11 +327,6 @@ class SafeBrowsingBlockingPageBrowserTest |
InProcessBrowserTest::SetUp(); |
} |
- void SetUpInProcessBrowserTestFixture() override { |
- feature_list_.reset(new base::test::ScopedFeatureList); |
- feature_list_->InitAndEnableFeature(kFillDOMInThreatDetails); |
- } |
- |
void TearDown() override { |
InProcessBrowserTest::TearDown(); |
SafeBrowsingBlockingPage::RegisterFactory(NULL); |
@@ -340,6 +335,15 @@ class SafeBrowsingBlockingPageBrowserTest |
} |
void SetUpCommandLine(base::CommandLine* command_line) override { |
+ command_line->AppendSwitchASCII( |
+ "enable-features", |
+ "FillDOMInThreatDetails,ThreatDomDetailsTagAttributes<SBDomStudy"); |
+ command_line->AppendSwitchASCII("force-fieldtrials", |
+ "SBDomStudy/SBDomGroup"); |
+ command_line->AppendSwitchASCII( |
+ "force-fieldtrial-params", |
+ "SBDomStudy.SBDomGroup:tag_attribute_csv/div%2Cfoo%2Cdiv%2Cbaz"); |
+ |
if (testing::get<1>(GetParam())) |
content::IsolateAllSitesForTesting(command_line); |
} |
@@ -611,10 +615,14 @@ class SafeBrowsingBlockingPageBrowserTest |
void VerifyElement(const ClientSafeBrowsingReportRequest& report, |
const HTMLElement& actual_element, |
const std::string& expected_url, |
- const std::string& expected_tag_name) { |
- ASSERT_EQ(1, actual_element.attribute_size()); |
- EXPECT_EQ(expected_url, actual_element.attribute(0).value()); |
+ const std::string& expected_tag_name, |
+ const int expected_child_ids_size) { |
+ if (!expected_url.empty()) { |
+ ASSERT_EQ(1, actual_element.attribute_size()); |
+ EXPECT_EQ(expected_url, actual_element.attribute(0).value()); |
+ } |
EXPECT_EQ(expected_tag_name, actual_element.tag()); |
+ EXPECT_EQ(expected_child_ids_size, actual_element.child_ids_size()); |
} |
void ExpectSecurityIndicatorDowngrade(content::WebContents* tab, |
@@ -659,7 +667,6 @@ class SafeBrowsingBlockingPageBrowserTest |
TestSafeBrowsingServiceFactory factory_; |
TestSafeBrowsingBlockingPageFactory blocking_page_factory_; |
net::EmbeddedTestServer https_server_; |
- std::unique_ptr<base::test::ScopedFeatureList> feature_list_; |
DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPageBrowserTest); |
}; |
@@ -804,11 +811,34 @@ IN_PROC_BROWSER_TEST_P(SafeBrowsingBlockingPageBrowserTest, |
url.spec(), // kCrossSiteMaliciousPage |
0, "IFRAME"); |
- ASSERT_EQ(1, report.dom_size()); |
- VerifyElement( |
- report, report.dom(0), |
- net::URLRequestMockHTTPJob::GetMockUrl(kMaliciousIframe).spec(), |
- "IFRAME"); |
+ ASSERT_EQ(2, report.dom_size()); |
+ // Because the order of elements is not deterministic, we basically need to |
+ // verify the relationship. Namely that there is an IFRAME element and that |
+ // its has a DIV as its parent. |
+ int iframe_node_id = -1; |
+ for (const HTMLElement& elem : report.dom()) { |
+ if (elem.tag() == "IFRAME") { |
+ iframe_node_id = elem.id(); |
+ VerifyElement( |
+ report, elem, |
+ net::URLRequestMockHTTPJob::GetMockUrl(kMaliciousIframe).spec(), |
+ "IFRAME", /*child_size=*/0); |
+ break; |
+ } |
+ } |
+ EXPECT_GT(iframe_node_id, -1); |
+ |
+ // Find the parent DIV that is the parent of the iframe. |
+ // TODO(lpz): Test the identify of the DIV once we start collecting its |
+ // attributes. |
+ for (const HTMLElement& elem : report.dom()) { |
+ if (elem.id() != iframe_node_id) { |
+ // Not the IIFRAME, so this is the parent DIV |
+ VerifyElement(report, elem, /*url=*/"", "DIV", /*child_size=*/1); |
+ // Make sure this DIV has the IFRAME as a child. |
+ EXPECT_EQ(iframe_node_id, elem.child_ids(0)); |
+ } |
+ } |
} |
} |