Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(448)

Unified Diff: chrome/browser/safe_browsing/threat_details_unittest.cc

Issue 2837603002: Content API changes to improve DOM stitching in ThreatDetails code. (Closed)
Patch Set: Use explicitly-sized int types in IPC definition Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | components/safe_browsing/browser/threat_details.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/safe_browsing/threat_details_unittest.cc
diff --git a/chrome/browser/safe_browsing/threat_details_unittest.cc b/chrome/browser/safe_browsing/threat_details_unittest.cc
index 56b32963a7936ebe7b6d57a45f69cb79ff4169ab..2ed74e7f687c86d180fa1aaa623c9010c9da9ea9 100644
--- a/chrome/browser/safe_browsing/threat_details_unittest.cc
+++ b/chrome/browser/safe_browsing/threat_details_unittest.cc
@@ -26,6 +26,7 @@
#include "components/safe_browsing/csd.pb.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/test/test_renderer_host.h"
#include "content/public/test/web_contents_tester.h"
#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
@@ -546,6 +547,13 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails) {
// \- <div id=inner bar=baz/> - div and script are at the same level.
// \- <script src=kDOMChildURL2>
TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) {
+ // Create a child renderer inside the main frame to house the inner iframe.
+ // Perform the navigation first in order to manipulate the frame tree.
+ content::WebContentsTester::For(web_contents())
+ ->NavigateAndCommit(GURL(kLandingURL));
+ content::RenderFrameHost* child_rfh =
+ content::RenderFrameHostTester::For(main_rfh())->AppendChild("subframe");
+
// Define two sets of DOM nodes - one for an outer page containing an iframe,
// and then another for the inner page containing the contents of that iframe.
std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params;
@@ -565,6 +573,7 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) {
outer_child_iframe.parent = GURL(kDOMParentURL);
outer_child_iframe.attributes.push_back(std::make_pair("src", kDOMChildURL));
outer_child_iframe.attributes.push_back(std::make_pair("foo", "bar"));
+ outer_child_iframe.child_frame_routing_id = child_rfh->GetRoutingID();
outer_params.push_back(outer_child_iframe);
SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node;
@@ -666,9 +675,6 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) {
elem_dom_inner_script->add_attribute()->set_name("src");
elem_dom_inner_script->mutable_attribute(0)->set_value(kDOMChildUrl2);
- content::WebContentsTester::For(web_contents())
- ->NavigateAndCommit(GURL(kLandingURL));
-
UnsafeResource resource;
InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED,
true /* is_subresource */, GURL(kThreatURL));
@@ -678,10 +684,10 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) {
scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap(
ui_manager_.get(), web_contents(), resource, NULL, history_service());
- // We call AddDOMDetails directly so we can specify different render frame
- // IDs.
- report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params);
- report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params);
+ // Send both sets of nodes from different render frames.
+ report->OnReceivedThreatDOMDetails(main_rfh(), outer_params);
+ report->OnReceivedThreatDOMDetails(child_rfh, inner_params);
+
std::string serialized = WaitForSerializedReport(
report.get(), false /* did_proceed*/, 0 /* num_visit */);
ClientSafeBrowsingReportRequest actual;
@@ -692,8 +698,8 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) {
// Try again but with the messages coming in a different order. The IDs change
// slightly, but everything else remains the same.
{
- // Adjust the expected IDs: the inner params come first, so InnerScript and
- // appear before DomParent
+ // Adjust the expected IDs: the inner params come first, so InnerScript
+ // and InnerDiv appear before DomParent
res_dom_child2->set_id(2);
res_dom_child2->set_parent_id(3);
res_dom_child->set_id(3);
@@ -722,10 +728,10 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) {
scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap(
ui_manager_.get(), web_contents(), resource, NULL, history_service());
- // We call AddDOMDetails directly so we can specify different render frame
- // IDs.
- report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params);
- report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params);
+ // Send both sets of nodes from different render frames.
+ report->OnReceivedThreatDOMDetails(child_rfh, inner_params);
+ report->OnReceivedThreatDOMDetails(main_rfh(), outer_params);
+
std::string serialized = WaitForSerializedReport(
report.get(), false /* did_proceed*/, 0 /* num_visit */);
ClientSafeBrowsingReportRequest actual;
@@ -734,18 +740,25 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) {
}
}
-// Tests an ambiguous DOM, meaning that an inner render frame has URL that can
-// not be mapped to an iframe element in the parent frame with that same URL.
-// Typically this happens when the iframe tag has a data URL.
+// Tests an ambiguous DOM, meaning that an inner render frame can not be mapped
+// to an iframe element in the parent frame, which is a failure to lookup the
+// frames in the frame tree and should not happen.
// We use three layers in this test:
// kDOMParentURL
-// \- <iframe src=kDataURL>
+// \- <frame src=kDataURL>
// \- <script src=kDOMChildURL2>
TEST_F(ThreatDetailsTest, ThreatDOMDetails_AmbiguousDOM) {
const char kAmbiguousDomMetric[] = "SafeBrowsing.ThreatReport.DomIsAmbiguous";
- // Define two sets of DOM nodes - one for an outer page containing an iframe,
- // and then another for the inner page containing the contents of that iframe.
+ // Create a child renderer inside the main frame to house the inner iframe.
+ // Perform the navigation first in order to manipulate the frame tree.
+ content::WebContentsTester::For(web_contents())
+ ->NavigateAndCommit(GURL(kLandingURL));
+ content::RenderFrameHost* child_rfh =
+ content::RenderFrameHostTester::For(main_rfh())->AppendChild("subframe");
+
+ // Define two sets of DOM nodes - one for an outer page containing a frame,
+ // and then another for the inner page containing the contents of that frame.
std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params;
SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_node;
outer_child_node.url = GURL(kDataURL);
@@ -756,9 +769,12 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails_AmbiguousDOM) {
SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node;
outer_summary_node.url = GURL(kDOMParentURL);
outer_summary_node.children.push_back(GURL(kDataURL));
+ // Set |child_frame_routing_id| for this node to something non-sensical so
+ // that the child frame lookup fails.
+ outer_summary_node.child_frame_routing_id = -100;
outer_params.push_back(outer_summary_node);
- // Now define some more nodes for the body of the iframe. The URL of this
+ // Now define some more nodes for the body of the frame. The URL of this
// inner frame is "about:blank".
std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params;
SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_node;
@@ -823,9 +839,6 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails_AmbiguousDOM) {
pb_element->add_attribute()->set_name("src");
pb_element->mutable_attribute(0)->set_value(kDOMChildUrl2);
- content::WebContentsTester::For(web_contents())
- ->NavigateAndCommit(GURL(kLandingURL));
-
UnsafeResource resource;
InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED,
true /* is_subresource */, GURL(kThreatURL));
@@ -833,11 +846,9 @@ TEST_F(ThreatDetailsTest, ThreatDOMDetails_AmbiguousDOM) {
ui_manager_.get(), web_contents(), resource, NULL, history_service());
base::HistogramTester histograms;
- // Send both sets of nodes, from different render frames. We call
- // AddDOMDetails directly so we can specify different render frame IDs.
- report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params);
- // The inner frame was using a data URL so its last committed URL is empty.
- report->AddDOMDetails(200, GURL(), inner_params);
+ // Send both sets of nodes from different render frames.
+ report->OnReceivedThreatDOMDetails(main_rfh(), outer_params);
+ report->OnReceivedThreatDOMDetails(child_rfh, inner_params);
std::string serialized = WaitForSerializedReport(
report.get(), false /* did_proceed*/, 0 /* num_visit */);
« no previous file with comments | « no previous file | components/safe_browsing/browser/threat_details.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698