| 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));
 | 
| +      }
 | 
| +    }
 | 
|    }
 | 
|  }
 | 
|  
 | 
| 
 |