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

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: Sync and small unittest tweak 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 unified diff | Download patch
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/web_contents_tester.h" 29 #include "content/public/test/web_contents_tester.h"
30 #include "content/test/test_render_frame_host.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"
39 #include "net/url_request/url_request_context_getter.h" 40 #include "net/url_request/url_request_context_getter.h"
(...skipping 499 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::TestRenderFrameHost* test_main_rfh =
Charlie Reis 2017/05/12 21:40:50 TestRenderFrameHost isn't a content/public class,
lpz 2017/05/15 18:49:07 Ahh great, thanks
555 static_cast<content::TestRenderFrameHost*>(main_rfh());
556 content::TestRenderFrameHost* child_rfh =
557 test_main_rfh->AppendChild("subframe");
558
549 // Define two sets of DOM nodes - one for an outer page containing an iframe, 559 // 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. 560 // and then another for the inner page containing the contents of that iframe.
551 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params; 561 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params;
552 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_div; 562 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_div;
553 outer_child_div.node_id = 1; 563 outer_child_div.node_id = 1;
554 outer_child_div.child_node_ids.push_back(2); 564 outer_child_div.child_node_ids.push_back(2);
555 outer_child_div.tag_name = "div"; 565 outer_child_div.tag_name = "div";
556 outer_child_div.parent = GURL(kDOMParentURL); 566 outer_child_div.parent = GURL(kDOMParentURL);
557 outer_child_div.attributes.push_back(std::make_pair("id", "outer")); 567 outer_child_div.attributes.push_back(std::make_pair("id", "outer"));
558 outer_params.push_back(outer_child_div); 568 outer_params.push_back(outer_child_div);
559 569
560 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_iframe; 570 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_iframe;
561 outer_child_iframe.node_id = 2; 571 outer_child_iframe.node_id = 2;
562 outer_child_iframe.parent_node_id = 1; 572 outer_child_iframe.parent_node_id = 1;
563 outer_child_iframe.url = GURL(kDOMChildURL); 573 outer_child_iframe.url = GURL(kDOMChildURL);
564 outer_child_iframe.tag_name = "iframe"; 574 outer_child_iframe.tag_name = "iframe";
565 outer_child_iframe.parent = GURL(kDOMParentURL); 575 outer_child_iframe.parent = GURL(kDOMParentURL);
566 outer_child_iframe.attributes.push_back(std::make_pair("src", kDOMChildURL)); 576 outer_child_iframe.attributes.push_back(std::make_pair("src", kDOMChildURL));
567 outer_child_iframe.attributes.push_back(std::make_pair("foo", "bar")); 577 outer_child_iframe.attributes.push_back(std::make_pair("foo", "bar"));
578 outer_child_iframe.child_frame_routing_id = child_rfh->GetRoutingID();
568 outer_params.push_back(outer_child_iframe); 579 outer_params.push_back(outer_child_iframe);
569 580
570 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node; 581 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node;
571 outer_summary_node.url = GURL(kDOMParentURL); 582 outer_summary_node.url = GURL(kDOMParentURL);
572 outer_summary_node.children.push_back(GURL(kDOMChildURL)); 583 outer_summary_node.children.push_back(GURL(kDOMChildURL));
573 outer_params.push_back(outer_summary_node); 584 outer_params.push_back(outer_summary_node);
574 585
575 // Now define some more nodes for the body of the iframe. 586 // Now define some more nodes for the body of the iframe.
576 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params; 587 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params;
577 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_div; 588 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"); 670 elem_dom_inner_div->add_attribute()->set_name("bar");
660 elem_dom_inner_div->mutable_attribute(1)->set_value("baz"); 671 elem_dom_inner_div->mutable_attribute(1)->set_value("baz");
661 672
662 HTMLElement* elem_dom_inner_script = expected.add_dom(); 673 HTMLElement* elem_dom_inner_script = expected.add_dom();
663 elem_dom_inner_script->set_id(3); 674 elem_dom_inner_script->set_id(3);
664 elem_dom_inner_script->set_tag("SCRIPT"); 675 elem_dom_inner_script->set_tag("SCRIPT");
665 elem_dom_inner_script->set_resource_id(res_dom_child2->id()); 676 elem_dom_inner_script->set_resource_id(res_dom_child2->id());
666 elem_dom_inner_script->add_attribute()->set_name("src"); 677 elem_dom_inner_script->add_attribute()->set_name("src");
667 elem_dom_inner_script->mutable_attribute(0)->set_value(kDOMChildUrl2); 678 elem_dom_inner_script->mutable_attribute(0)->set_value(kDOMChildUrl2);
668 679
669 content::WebContentsTester::For(web_contents())
670 ->NavigateAndCommit(GURL(kLandingURL));
671
672 UnsafeResource resource; 680 UnsafeResource resource;
673 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED, 681 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED,
674 true /* is_subresource */, GURL(kThreatURL)); 682 true /* is_subresource */, GURL(kThreatURL));
675 683
676 // Send both sets of nodes, from different render frames. 684 // Send both sets of nodes, from different render frames.
677 { 685 {
678 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( 686 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap(
679 ui_manager_.get(), web_contents(), resource, NULL, history_service()); 687 ui_manager_.get(), web_contents(), resource, NULL, history_service());
680 688
681 // We call AddDOMDetails directly so we can specify different render frame 689 // Send both sets of nodes from different render frames.
682 // IDs. 690 report->OnReceivedThreatDOMDetails(main_rfh(), outer_params);
683 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); 691 report->OnReceivedThreatDOMDetails(child_rfh, inner_params);
684 report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params); 692
685 std::string serialized = WaitForSerializedReport( 693 std::string serialized = WaitForSerializedReport(
686 report.get(), false /* did_proceed*/, 0 /* num_visit */); 694 report.get(), false /* did_proceed*/, 0 /* num_visit */);
687 ClientSafeBrowsingReportRequest actual; 695 ClientSafeBrowsingReportRequest actual;
688 actual.ParseFromString(serialized); 696 actual.ParseFromString(serialized);
689 VerifyResults(actual, expected); 697 VerifyResults(actual, expected);
690 } 698 }
691 699
692 // Try again but with the messages coming in a different order. The IDs change 700 // Try again but with the messages coming in a different order. The IDs change
693 // slightly, but everything else remains the same. 701 // slightly, but everything else remains the same.
694 { 702 {
695 // Adjust the expected IDs: the inner params come first, so InnerScript and 703 // Adjust the expected IDs: the inner params come first, so InnerScript
696 // appear before DomParent 704 // and InnerDiv appear before DomParent
697 res_dom_child2->set_id(2); 705 res_dom_child2->set_id(2);
698 res_dom_child2->set_parent_id(3); 706 res_dom_child2->set_parent_id(3);
699 res_dom_child->set_id(3); 707 res_dom_child->set_id(3);
700 res_dom_child->set_parent_id(4); 708 res_dom_child->set_parent_id(4);
701 res_dom_child->clear_child_ids(); 709 res_dom_child->clear_child_ids();
702 res_dom_child->add_child_ids(2); 710 res_dom_child->add_child_ids(2);
703 res_dom_parent->set_id(4); 711 res_dom_parent->set_id(4);
704 res_dom_parent->clear_child_ids(); 712 res_dom_parent->clear_child_ids();
705 res_dom_parent->add_child_ids(3); 713 res_dom_parent->add_child_ids(3);
706 714
707 // Also adjust the elements - they change order since InnerDiv and 715 // Also adjust the elements - they change order since InnerDiv and
708 // InnerScript come in first. 716 // InnerScript come in first.
709 elem_dom_inner_div->set_id(0); 717 elem_dom_inner_div->set_id(0);
710 elem_dom_inner_script->set_id(1); 718 elem_dom_inner_script->set_id(1);
711 elem_dom_inner_script->set_resource_id(res_dom_child2->id()); 719 elem_dom_inner_script->set_resource_id(res_dom_child2->id());
712 720
713 elem_dom_outer_div->set_id(2); 721 elem_dom_outer_div->set_id(2);
714 elem_dom_outer_div->clear_child_ids(); 722 elem_dom_outer_div->clear_child_ids();
715 elem_dom_outer_div->add_child_ids(3); 723 elem_dom_outer_div->add_child_ids(3);
716 elem_dom_outer_iframe->set_id(3); 724 elem_dom_outer_iframe->set_id(3);
717 elem_dom_outer_iframe->set_resource_id(res_dom_child->id()); 725 elem_dom_outer_iframe->set_resource_id(res_dom_child->id());
718 elem_dom_outer_iframe->clear_child_ids(); 726 elem_dom_outer_iframe->clear_child_ids();
719 elem_dom_outer_iframe->add_child_ids(0); 727 elem_dom_outer_iframe->add_child_ids(0);
720 elem_dom_outer_iframe->add_child_ids(1); 728 elem_dom_outer_iframe->add_child_ids(1);
721 729
722 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( 730 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap(
723 ui_manager_.get(), web_contents(), resource, NULL, history_service()); 731 ui_manager_.get(), web_contents(), resource, NULL, history_service());
724 732
725 // We call AddDOMDetails directly so we can specify different render frame 733 // Send both sets of nodes from different render frames.
726 // IDs. 734 report->OnReceivedThreatDOMDetails(child_rfh, inner_params);
727 report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params); 735 report->OnReceivedThreatDOMDetails(main_rfh(), outer_params);
728 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); 736
729 std::string serialized = WaitForSerializedReport( 737 std::string serialized = WaitForSerializedReport(
730 report.get(), false /* did_proceed*/, 0 /* num_visit */); 738 report.get(), false /* did_proceed*/, 0 /* num_visit */);
731 ClientSafeBrowsingReportRequest actual; 739 ClientSafeBrowsingReportRequest actual;
732 actual.ParseFromString(serialized); 740 actual.ParseFromString(serialized);
733 VerifyResults(actual, expected); 741 VerifyResults(actual, expected);
734 } 742 }
735 } 743 }
736 744
737 // Tests an ambiguous DOM, meaning that an inner render frame has URL that can 745 // 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. 746 // 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. 747 // frames in the frame tree and should not happen.
740 // We use three layers in this test: 748 // We use three layers in this test:
741 // kDOMParentURL 749 // kDOMParentURL
742 // \- <iframe src=kDataURL> 750 // \- <frame src=kDataURL>
743 // \- <script src=kDOMChildURL2> 751 // \- <script src=kDOMChildURL2>
744 TEST_F(ThreatDetailsTest, ThreatDOMDetails_AmbiguousDOM) { 752 TEST_F(ThreatDetailsTest, ThreatDOMDetails_AmbiguousDOM) {
745 const char kAmbiguousDomMetric[] = "SafeBrowsing.ThreatReport.DomIsAmbiguous"; 753 const char kAmbiguousDomMetric[] = "SafeBrowsing.ThreatReport.DomIsAmbiguous";
746 754
747 // Define two sets of DOM nodes - one for an outer page containing an iframe, 755 // 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. 756 // Perform the navigation first in order to manipulate the frame tree.
757 content::WebContentsTester::For(web_contents())
758 ->NavigateAndCommit(GURL(kLandingURL));
759 content::TestRenderFrameHost* test_main_rfh =
Charlie Reis 2017/05/12 21:40:50 Same here.
lpz 2017/05/15 18:49:07 Done.
760 static_cast<content::TestRenderFrameHost*>(main_rfh());
761 content::TestRenderFrameHost* child_rfh =
762 test_main_rfh->AppendChild("subframe");
763
764 // Define two sets of DOM nodes - one for an outer page containing a frame,
765 // and then another for the inner page containing the contents of that frame.
749 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params; 766 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params;
750 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_node; 767 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_node;
751 outer_child_node.url = GURL(kDataURL); 768 outer_child_node.url = GURL(kDataURL);
752 outer_child_node.tag_name = "frame"; 769 outer_child_node.tag_name = "frame";
753 outer_child_node.parent = GURL(kDOMParentURL); 770 outer_child_node.parent = GURL(kDOMParentURL);
754 outer_child_node.attributes.push_back(std::make_pair("src", kDataURL)); 771 outer_child_node.attributes.push_back(std::make_pair("src", kDataURL));
755 outer_params.push_back(outer_child_node); 772 outer_params.push_back(outer_child_node);
756 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node; 773 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node;
757 outer_summary_node.url = GURL(kDOMParentURL); 774 outer_summary_node.url = GURL(kDOMParentURL);
758 outer_summary_node.children.push_back(GURL(kDataURL)); 775 outer_summary_node.children.push_back(GURL(kDataURL));
776 // Set |child_frame_routing_id| for this node to something non-sensical so
777 // that the child frame lookup fails.
778 outer_summary_node.child_frame_routing_id = -100;
759 outer_params.push_back(outer_summary_node); 779 outer_params.push_back(outer_summary_node);
760 780
761 // Now define some more nodes for the body of the iframe. The URL of this 781 // Now define some more nodes for the body of the frame. The URL of this
762 // inner frame is "about:blank". 782 // inner frame is "about:blank".
763 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params; 783 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params;
764 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_node; 784 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_node;
765 inner_child_node.url = GURL(kDOMChildUrl2); 785 inner_child_node.url = GURL(kDOMChildUrl2);
766 inner_child_node.tag_name = "script"; 786 inner_child_node.tag_name = "script";
767 inner_child_node.parent = GURL(kBlankURL); 787 inner_child_node.parent = GURL(kBlankURL);
768 inner_child_node.attributes.push_back(std::make_pair("src", kDOMChildUrl2)); 788 inner_child_node.attributes.push_back(std::make_pair("src", kDOMChildUrl2));
769 inner_params.push_back(inner_child_node); 789 inner_params.push_back(inner_child_node);
770 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_summary_node; 790 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_summary_node;
771 inner_summary_node.url = GURL(kBlankURL); 791 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"); 836 pb_element->add_attribute()->set_name("src");
817 pb_element->mutable_attribute(0)->set_value(kDataURL); 837 pb_element->mutable_attribute(0)->set_value(kDataURL);
818 838
819 pb_element = expected.add_dom(); 839 pb_element = expected.add_dom();
820 pb_element->set_id(1); 840 pb_element->set_id(1);
821 pb_element->set_tag("SCRIPT"); 841 pb_element->set_tag("SCRIPT");
822 pb_element->set_resource_id(4); 842 pb_element->set_resource_id(4);
823 pb_element->add_attribute()->set_name("src"); 843 pb_element->add_attribute()->set_name("src");
824 pb_element->mutable_attribute(0)->set_value(kDOMChildUrl2); 844 pb_element->mutable_attribute(0)->set_value(kDOMChildUrl2);
825 845
826 content::WebContentsTester::For(web_contents())
827 ->NavigateAndCommit(GURL(kLandingURL));
828
829 UnsafeResource resource; 846 UnsafeResource resource;
830 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED, 847 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED,
831 true /* is_subresource */, GURL(kThreatURL)); 848 true /* is_subresource */, GURL(kThreatURL));
832 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( 849 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap(
833 ui_manager_.get(), web_contents(), resource, NULL, history_service()); 850 ui_manager_.get(), web_contents(), resource, NULL, history_service());
834 base::HistogramTester histograms; 851 base::HistogramTester histograms;
835 852
836 // Send both sets of nodes, from different render frames. We call 853 // Send both sets of nodes from different render frames.
837 // AddDOMDetails directly so we can specify different render frame IDs. 854 report->OnReceivedThreatDOMDetails(main_rfh(), outer_params);
838 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); 855 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 856
842 std::string serialized = WaitForSerializedReport( 857 std::string serialized = WaitForSerializedReport(
843 report.get(), false /* did_proceed*/, 0 /* num_visit */); 858 report.get(), false /* did_proceed*/, 0 /* num_visit */);
844 ClientSafeBrowsingReportRequest actual; 859 ClientSafeBrowsingReportRequest actual;
845 actual.ParseFromString(serialized); 860 actual.ParseFromString(serialized);
846 VerifyResults(actual, expected); 861 VerifyResults(actual, expected);
847 862
848 // This DOM should be ambiguous, expect the UMA metric to be incremented. 863 // This DOM should be ambiguous, expect the UMA metric to be incremented.
849 histograms.ExpectTotalCount(kAmbiguousDomMetric, 1); 864 histograms.ExpectTotalCount(kAmbiguousDomMetric, 1);
850 } 865 }
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 pb_resource->set_parent_id(3); 1344 pb_resource->set_parent_id(3);
1330 pb_resource->set_url(kSecondRedirectURL); 1345 pb_resource->set_url(kSecondRedirectURL);
1331 pb_resource = expected.add_resources(); 1346 pb_resource = expected.add_resources();
1332 pb_resource->set_id(3); 1347 pb_resource->set_id(3);
1333 pb_resource->set_url(kFirstRedirectURL); 1348 pb_resource->set_url(kFirstRedirectURL);
1334 1349
1335 VerifyResults(actual, expected); 1350 VerifyResults(actual, expected);
1336 } 1351 }
1337 1352
1338 } // namespace safe_browsing 1353 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698