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

Side by Side 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, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | components/safe_browsing/browser/threat_details.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/pickle.h" 11 #include "base/pickle.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "base/test/histogram_tester.h" 13 #include "base/test/histogram_tester.h"
14 #include "base/time/time.h" 14 #include "base/time/time.h"
15 #include "chrome/browser/history/history_service_factory.h" 15 #include "chrome/browser/history/history_service_factory.h"
16 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 17 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
18 #include "chrome/browser/safe_browsing/ui_manager.h" 18 #include "chrome/browser/safe_browsing/ui_manager.h"
19 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 19 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
20 #include "chrome/test/base/testing_profile.h" 20 #include "chrome/test/base/testing_profile.h"
21 #include "components/history/core/browser/history_backend.h" 21 #include "components/history/core/browser/history_backend.h"
22 #include "components/history/core/browser/history_service.h" 22 #include "components/history/core/browser/history_service.h"
23 #include "components/safe_browsing/browser/threat_details.h" 23 #include "components/safe_browsing/browser/threat_details.h"
24 #include "components/safe_browsing/browser/threat_details_history.h" 24 #include "components/safe_browsing/browser/threat_details_history.h"
25 #include "components/safe_browsing/common/safebrowsing_messages.h" 25 #include "components/safe_browsing/common/safebrowsing_messages.h"
26 #include "components/safe_browsing/csd.pb.h" 26 #include "components/safe_browsing/csd.pb.h"
27 #include "content/public/browser/render_process_host.h" 27 #include "content/public/browser/render_process_host.h"
28 #include "content/public/browser/web_contents.h" 28 #include "content/public/browser/web_contents.h"
29 #include "content/public/test/test_renderer_host.h"
29 #include "content/public/test/web_contents_tester.h" 30 #include "content/public/test/web_contents_tester.h"
30 #include "net/base/io_buffer.h" 31 #include "net/base/io_buffer.h"
31 #include "net/base/net_errors.h" 32 #include "net/base/net_errors.h"
32 #include "net/base/test_completion_callback.h" 33 #include "net/base/test_completion_callback.h"
33 #include "net/disk_cache/disk_cache.h" 34 #include "net/disk_cache/disk_cache.h"
34 #include "net/http/http_cache.h" 35 #include "net/http/http_cache.h"
35 #include "net/http/http_response_headers.h" 36 #include "net/http/http_response_headers.h"
36 #include "net/http/http_response_info.h" 37 #include "net/http/http_response_info.h"
37 #include "net/http/http_util.h" 38 #include "net/http/http_util.h"
38 #include "net/url_request/url_request_context.h" 39 #include "net/url_request/url_request_context.h"
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 } 540 }
540 541
541 // Tests creating a threat report when receiving data from multiple renderers. 542 // Tests creating a threat report when receiving data from multiple renderers.
542 // We use three layers in this test: 543 // We use three layers in this test:
543 // kDOMParentURL 544 // kDOMParentURL
544 // \- <div id=outer> 545 // \- <div id=outer>
545 // \- <iframe src=kDOMChildURL foo=bar> 546 // \- <iframe src=kDOMChildURL foo=bar>
546 // \- <div id=inner bar=baz/> - div and script are at the same level. 547 // \- <div id=inner bar=baz/> - div and script are at the same level.
547 // \- <script src=kDOMChildURL2> 548 // \- <script src=kDOMChildURL2>
548 TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) { 549 TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) {
550 // Create a child renderer inside the main frame to house the inner iframe.
551 // Perform the navigation first in order to manipulate the frame tree.
552 content::WebContentsTester::For(web_contents())
553 ->NavigateAndCommit(GURL(kLandingURL));
554 content::RenderFrameHost* child_rfh =
555 content::RenderFrameHostTester::For(main_rfh())->AppendChild("subframe");
556
549 // Define two sets of DOM nodes - one for an outer page containing an iframe, 557 // Define two sets of DOM nodes - one for an outer page containing an iframe,
550 // and then another for the inner page containing the contents of that iframe. 558 // and then another for the inner page containing the contents of that iframe.
551 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params; 559 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params;
552 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_div; 560 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_div;
553 outer_child_div.node_id = 1; 561 outer_child_div.node_id = 1;
554 outer_child_div.child_node_ids.push_back(2); 562 outer_child_div.child_node_ids.push_back(2);
555 outer_child_div.tag_name = "div"; 563 outer_child_div.tag_name = "div";
556 outer_child_div.parent = GURL(kDOMParentURL); 564 outer_child_div.parent = GURL(kDOMParentURL);
557 outer_child_div.attributes.push_back(std::make_pair("id", "outer")); 565 outer_child_div.attributes.push_back(std::make_pair("id", "outer"));
558 outer_params.push_back(outer_child_div); 566 outer_params.push_back(outer_child_div);
559 567
560 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_iframe; 568 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_iframe;
561 outer_child_iframe.node_id = 2; 569 outer_child_iframe.node_id = 2;
562 outer_child_iframe.parent_node_id = 1; 570 outer_child_iframe.parent_node_id = 1;
563 outer_child_iframe.url = GURL(kDOMChildURL); 571 outer_child_iframe.url = GURL(kDOMChildURL);
564 outer_child_iframe.tag_name = "iframe"; 572 outer_child_iframe.tag_name = "iframe";
565 outer_child_iframe.parent = GURL(kDOMParentURL); 573 outer_child_iframe.parent = GURL(kDOMParentURL);
566 outer_child_iframe.attributes.push_back(std::make_pair("src", kDOMChildURL)); 574 outer_child_iframe.attributes.push_back(std::make_pair("src", kDOMChildURL));
567 outer_child_iframe.attributes.push_back(std::make_pair("foo", "bar")); 575 outer_child_iframe.attributes.push_back(std::make_pair("foo", "bar"));
576 outer_child_iframe.child_frame_routing_id = child_rfh->GetRoutingID();
568 outer_params.push_back(outer_child_iframe); 577 outer_params.push_back(outer_child_iframe);
569 578
570 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node; 579 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node;
571 outer_summary_node.url = GURL(kDOMParentURL); 580 outer_summary_node.url = GURL(kDOMParentURL);
572 outer_summary_node.children.push_back(GURL(kDOMChildURL)); 581 outer_summary_node.children.push_back(GURL(kDOMChildURL));
573 outer_params.push_back(outer_summary_node); 582 outer_params.push_back(outer_summary_node);
574 583
575 // Now define some more nodes for the body of the iframe. 584 // Now define some more nodes for the body of the iframe.
576 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params; 585 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params;
577 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_div; 586 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_div;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 elem_dom_inner_div->add_attribute()->set_name("bar"); 668 elem_dom_inner_div->add_attribute()->set_name("bar");
660 elem_dom_inner_div->mutable_attribute(1)->set_value("baz"); 669 elem_dom_inner_div->mutable_attribute(1)->set_value("baz");
661 670
662 HTMLElement* elem_dom_inner_script = expected.add_dom(); 671 HTMLElement* elem_dom_inner_script = expected.add_dom();
663 elem_dom_inner_script->set_id(3); 672 elem_dom_inner_script->set_id(3);
664 elem_dom_inner_script->set_tag("SCRIPT"); 673 elem_dom_inner_script->set_tag("SCRIPT");
665 elem_dom_inner_script->set_resource_id(res_dom_child2->id()); 674 elem_dom_inner_script->set_resource_id(res_dom_child2->id());
666 elem_dom_inner_script->add_attribute()->set_name("src"); 675 elem_dom_inner_script->add_attribute()->set_name("src");
667 elem_dom_inner_script->mutable_attribute(0)->set_value(kDOMChildUrl2); 676 elem_dom_inner_script->mutable_attribute(0)->set_value(kDOMChildUrl2);
668 677
669 content::WebContentsTester::For(web_contents())
670 ->NavigateAndCommit(GURL(kLandingURL));
671
672 UnsafeResource resource; 678 UnsafeResource resource;
673 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED, 679 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED,
674 true /* is_subresource */, GURL(kThreatURL)); 680 true /* is_subresource */, GURL(kThreatURL));
675 681
676 // Send both sets of nodes, from different render frames. 682 // Send both sets of nodes, from different render frames.
677 { 683 {
678 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( 684 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap(
679 ui_manager_.get(), web_contents(), resource, NULL, history_service()); 685 ui_manager_.get(), web_contents(), resource, NULL, history_service());
680 686
681 // We call AddDOMDetails directly so we can specify different render frame 687 // Send both sets of nodes from different render frames.
682 // IDs. 688 report->OnReceivedThreatDOMDetails(main_rfh(), outer_params);
683 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); 689 report->OnReceivedThreatDOMDetails(child_rfh, inner_params);
684 report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params); 690
685 std::string serialized = WaitForSerializedReport( 691 std::string serialized = WaitForSerializedReport(
686 report.get(), false /* did_proceed*/, 0 /* num_visit */); 692 report.get(), false /* did_proceed*/, 0 /* num_visit */);
687 ClientSafeBrowsingReportRequest actual; 693 ClientSafeBrowsingReportRequest actual;
688 actual.ParseFromString(serialized); 694 actual.ParseFromString(serialized);
689 VerifyResults(actual, expected); 695 VerifyResults(actual, expected);
690 } 696 }
691 697
692 // Try again but with the messages coming in a different order. The IDs change 698 // Try again but with the messages coming in a different order. The IDs change
693 // slightly, but everything else remains the same. 699 // slightly, but everything else remains the same.
694 { 700 {
695 // Adjust the expected IDs: the inner params come first, so InnerScript and 701 // Adjust the expected IDs: the inner params come first, so InnerScript
696 // appear before DomParent 702 // and InnerDiv appear before DomParent
697 res_dom_child2->set_id(2); 703 res_dom_child2->set_id(2);
698 res_dom_child2->set_parent_id(3); 704 res_dom_child2->set_parent_id(3);
699 res_dom_child->set_id(3); 705 res_dom_child->set_id(3);
700 res_dom_child->set_parent_id(4); 706 res_dom_child->set_parent_id(4);
701 res_dom_child->clear_child_ids(); 707 res_dom_child->clear_child_ids();
702 res_dom_child->add_child_ids(2); 708 res_dom_child->add_child_ids(2);
703 res_dom_parent->set_id(4); 709 res_dom_parent->set_id(4);
704 res_dom_parent->clear_child_ids(); 710 res_dom_parent->clear_child_ids();
705 res_dom_parent->add_child_ids(3); 711 res_dom_parent->add_child_ids(3);
706 712
707 // Also adjust the elements - they change order since InnerDiv and 713 // Also adjust the elements - they change order since InnerDiv and
708 // InnerScript come in first. 714 // InnerScript come in first.
709 elem_dom_inner_div->set_id(0); 715 elem_dom_inner_div->set_id(0);
710 elem_dom_inner_script->set_id(1); 716 elem_dom_inner_script->set_id(1);
711 elem_dom_inner_script->set_resource_id(res_dom_child2->id()); 717 elem_dom_inner_script->set_resource_id(res_dom_child2->id());
712 718
713 elem_dom_outer_div->set_id(2); 719 elem_dom_outer_div->set_id(2);
714 elem_dom_outer_div->clear_child_ids(); 720 elem_dom_outer_div->clear_child_ids();
715 elem_dom_outer_div->add_child_ids(3); 721 elem_dom_outer_div->add_child_ids(3);
716 elem_dom_outer_iframe->set_id(3); 722 elem_dom_outer_iframe->set_id(3);
717 elem_dom_outer_iframe->set_resource_id(res_dom_child->id()); 723 elem_dom_outer_iframe->set_resource_id(res_dom_child->id());
718 elem_dom_outer_iframe->clear_child_ids(); 724 elem_dom_outer_iframe->clear_child_ids();
719 elem_dom_outer_iframe->add_child_ids(0); 725 elem_dom_outer_iframe->add_child_ids(0);
720 elem_dom_outer_iframe->add_child_ids(1); 726 elem_dom_outer_iframe->add_child_ids(1);
721 727
722 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( 728 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap(
723 ui_manager_.get(), web_contents(), resource, NULL, history_service()); 729 ui_manager_.get(), web_contents(), resource, NULL, history_service());
724 730
725 // We call AddDOMDetails directly so we can specify different render frame 731 // Send both sets of nodes from different render frames.
726 // IDs. 732 report->OnReceivedThreatDOMDetails(child_rfh, inner_params);
727 report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params); 733 report->OnReceivedThreatDOMDetails(main_rfh(), outer_params);
728 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); 734
729 std::string serialized = WaitForSerializedReport( 735 std::string serialized = WaitForSerializedReport(
730 report.get(), false /* did_proceed*/, 0 /* num_visit */); 736 report.get(), false /* did_proceed*/, 0 /* num_visit */);
731 ClientSafeBrowsingReportRequest actual; 737 ClientSafeBrowsingReportRequest actual;
732 actual.ParseFromString(serialized); 738 actual.ParseFromString(serialized);
733 VerifyResults(actual, expected); 739 VerifyResults(actual, expected);
734 } 740 }
735 } 741 }
736 742
737 // Tests an ambiguous DOM, meaning that an inner render frame has URL that can 743 // Tests an ambiguous DOM, meaning that an inner render frame can not be mapped
738 // not be mapped to an iframe element in the parent frame with that same URL. 744 // to an iframe element in the parent frame, which is a failure to lookup the
739 // Typically this happens when the iframe tag has a data URL. 745 // frames in the frame tree and should not happen.
740 // We use three layers in this test: 746 // We use three layers in this test:
741 // kDOMParentURL 747 // kDOMParentURL
742 // \- <iframe src=kDataURL> 748 // \- <frame src=kDataURL>
743 // \- <script src=kDOMChildURL2> 749 // \- <script src=kDOMChildURL2>
744 TEST_F(ThreatDetailsTest, ThreatDOMDetails_AmbiguousDOM) { 750 TEST_F(ThreatDetailsTest, ThreatDOMDetails_AmbiguousDOM) {
745 const char kAmbiguousDomMetric[] = "SafeBrowsing.ThreatReport.DomIsAmbiguous"; 751 const char kAmbiguousDomMetric[] = "SafeBrowsing.ThreatReport.DomIsAmbiguous";
746 752
747 // Define two sets of DOM nodes - one for an outer page containing an iframe, 753 // Create a child renderer inside the main frame to house the inner iframe.
748 // and then another for the inner page containing the contents of that iframe. 754 // Perform the navigation first in order to manipulate the frame tree.
755 content::WebContentsTester::For(web_contents())
756 ->NavigateAndCommit(GURL(kLandingURL));
757 content::RenderFrameHost* child_rfh =
758 content::RenderFrameHostTester::For(main_rfh())->AppendChild("subframe");
759
760 // Define two sets of DOM nodes - one for an outer page containing a frame,
761 // and then another for the inner page containing the contents of that frame.
749 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params; 762 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params;
750 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_node; 763 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_node;
751 outer_child_node.url = GURL(kDataURL); 764 outer_child_node.url = GURL(kDataURL);
752 outer_child_node.tag_name = "frame"; 765 outer_child_node.tag_name = "frame";
753 outer_child_node.parent = GURL(kDOMParentURL); 766 outer_child_node.parent = GURL(kDOMParentURL);
754 outer_child_node.attributes.push_back(std::make_pair("src", kDataURL)); 767 outer_child_node.attributes.push_back(std::make_pair("src", kDataURL));
755 outer_params.push_back(outer_child_node); 768 outer_params.push_back(outer_child_node);
756 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node; 769 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node;
757 outer_summary_node.url = GURL(kDOMParentURL); 770 outer_summary_node.url = GURL(kDOMParentURL);
758 outer_summary_node.children.push_back(GURL(kDataURL)); 771 outer_summary_node.children.push_back(GURL(kDataURL));
772 // Set |child_frame_routing_id| for this node to something non-sensical so
773 // that the child frame lookup fails.
774 outer_summary_node.child_frame_routing_id = -100;
759 outer_params.push_back(outer_summary_node); 775 outer_params.push_back(outer_summary_node);
760 776
761 // Now define some more nodes for the body of the iframe. The URL of this 777 // Now define some more nodes for the body of the frame. The URL of this
762 // inner frame is "about:blank". 778 // inner frame is "about:blank".
763 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params; 779 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params;
764 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_node; 780 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_node;
765 inner_child_node.url = GURL(kDOMChildUrl2); 781 inner_child_node.url = GURL(kDOMChildUrl2);
766 inner_child_node.tag_name = "script"; 782 inner_child_node.tag_name = "script";
767 inner_child_node.parent = GURL(kBlankURL); 783 inner_child_node.parent = GURL(kBlankURL);
768 inner_child_node.attributes.push_back(std::make_pair("src", kDOMChildUrl2)); 784 inner_child_node.attributes.push_back(std::make_pair("src", kDOMChildUrl2));
769 inner_params.push_back(inner_child_node); 785 inner_params.push_back(inner_child_node);
770 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_summary_node; 786 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_summary_node;
771 inner_summary_node.url = GURL(kBlankURL); 787 inner_summary_node.url = GURL(kBlankURL);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 pb_element->add_attribute()->set_name("src"); 832 pb_element->add_attribute()->set_name("src");
817 pb_element->mutable_attribute(0)->set_value(kDataURL); 833 pb_element->mutable_attribute(0)->set_value(kDataURL);
818 834
819 pb_element = expected.add_dom(); 835 pb_element = expected.add_dom();
820 pb_element->set_id(1); 836 pb_element->set_id(1);
821 pb_element->set_tag("SCRIPT"); 837 pb_element->set_tag("SCRIPT");
822 pb_element->set_resource_id(4); 838 pb_element->set_resource_id(4);
823 pb_element->add_attribute()->set_name("src"); 839 pb_element->add_attribute()->set_name("src");
824 pb_element->mutable_attribute(0)->set_value(kDOMChildUrl2); 840 pb_element->mutable_attribute(0)->set_value(kDOMChildUrl2);
825 841
826 content::WebContentsTester::For(web_contents())
827 ->NavigateAndCommit(GURL(kLandingURL));
828
829 UnsafeResource resource; 842 UnsafeResource resource;
830 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED, 843 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED,
831 true /* is_subresource */, GURL(kThreatURL)); 844 true /* is_subresource */, GURL(kThreatURL));
832 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( 845 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap(
833 ui_manager_.get(), web_contents(), resource, NULL, history_service()); 846 ui_manager_.get(), web_contents(), resource, NULL, history_service());
834 base::HistogramTester histograms; 847 base::HistogramTester histograms;
835 848
836 // Send both sets of nodes, from different render frames. We call 849 // Send both sets of nodes from different render frames.
837 // AddDOMDetails directly so we can specify different render frame IDs. 850 report->OnReceivedThreatDOMDetails(main_rfh(), outer_params);
838 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); 851 report->OnReceivedThreatDOMDetails(child_rfh, inner_params);
839 // The inner frame was using a data URL so its last committed URL is empty.
840 report->AddDOMDetails(200, GURL(), inner_params);
841 852
842 std::string serialized = WaitForSerializedReport( 853 std::string serialized = WaitForSerializedReport(
843 report.get(), false /* did_proceed*/, 0 /* num_visit */); 854 report.get(), false /* did_proceed*/, 0 /* num_visit */);
844 ClientSafeBrowsingReportRequest actual; 855 ClientSafeBrowsingReportRequest actual;
845 actual.ParseFromString(serialized); 856 actual.ParseFromString(serialized);
846 VerifyResults(actual, expected); 857 VerifyResults(actual, expected);
847 858
848 // This DOM should be ambiguous, expect the UMA metric to be incremented. 859 // This DOM should be ambiguous, expect the UMA metric to be incremented.
849 histograms.ExpectTotalCount(kAmbiguousDomMetric, 1); 860 histograms.ExpectTotalCount(kAmbiguousDomMetric, 1);
850 } 861 }
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 pb_resource->set_parent_id(3); 1340 pb_resource->set_parent_id(3);
1330 pb_resource->set_url(kSecondRedirectURL); 1341 pb_resource->set_url(kSecondRedirectURL);
1331 pb_resource = expected.add_resources(); 1342 pb_resource = expected.add_resources();
1332 pb_resource->set_id(3); 1343 pb_resource->set_id(3);
1333 pb_resource->set_url(kFirstRedirectURL); 1344 pb_resource->set_url(kFirstRedirectURL);
1334 1345
1335 VerifyResults(actual, expected); 1346 VerifyResults(actual, expected);
1336 } 1347 }
1337 1348
1338 } // namespace safe_browsing 1349 } // namespace safe_browsing
OLDNEW
« 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