| OLD | NEW |
| 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" |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 pb_element->set_resource_id(2); | 533 pb_element->set_resource_id(2); |
| 534 pb_element->add_attribute()->set_name("SRC"); | 534 pb_element->add_attribute()->set_name("SRC"); |
| 535 pb_element->mutable_attribute(0)->set_value(kDOMChildURL); | 535 pb_element->mutable_attribute(0)->set_value(kDOMChildURL); |
| 536 | 536 |
| 537 VerifyResults(actual, expected); | 537 VerifyResults(actual, expected); |
| 538 } | 538 } |
| 539 | 539 |
| 540 // Tests creating a threat report when receiving data from multiple renderers. | 540 // Tests creating a threat report when receiving data from multiple renderers. |
| 541 // We use three layers in this test: | 541 // We use three layers in this test: |
| 542 // kDOMParentURL | 542 // kDOMParentURL |
| 543 // \- <iframe src=kDOMChildURL> | 543 // \- <div id=outer> |
| 544 // \- <script src=kDOMChildURL2> | 544 // \- <iframe src=kDOMChildURL> |
| 545 // \- <div id=inner/> - div and script are at the same level. |
| 546 // \- <script src=kDOMChildURL2> |
| 545 TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) { | 547 TEST_F(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames) { |
| 546 // Define two sets of DOM nodes - one for an outer page containing an iframe, | 548 // Define two sets of DOM nodes - one for an outer page containing an iframe, |
| 547 // and then another for the inner page containing the contents of that iframe. | 549 // and then another for the inner page containing the contents of that iframe. |
| 548 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params; | 550 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> outer_params; |
| 549 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_node; | 551 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_div; |
| 550 outer_child_node.url = GURL(kDOMChildURL); | 552 outer_child_div.node_id = 1; |
| 551 outer_child_node.tag_name = "iframe"; | 553 outer_child_div.child_node_ids.push_back(2); |
| 552 outer_child_node.parent = GURL(kDOMParentURL); | 554 outer_child_div.tag_name = "div"; |
| 553 outer_params.push_back(outer_child_node); | 555 outer_child_div.parent = GURL(kDOMParentURL); |
| 556 outer_params.push_back(outer_child_div); |
| 557 |
| 558 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_child_iframe; |
| 559 outer_child_iframe.node_id = 2; |
| 560 outer_child_iframe.parent_node_id = 1; |
| 561 outer_child_iframe.url = GURL(kDOMChildURL); |
| 562 outer_child_iframe.tag_name = "iframe"; |
| 563 outer_child_iframe.parent = GURL(kDOMParentURL); |
| 564 outer_params.push_back(outer_child_iframe); |
| 565 |
| 554 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node; | 566 SafeBrowsingHostMsg_ThreatDOMDetails_Node outer_summary_node; |
| 555 outer_summary_node.url = GURL(kDOMParentURL); | 567 outer_summary_node.url = GURL(kDOMParentURL); |
| 556 outer_summary_node.children.push_back(GURL(kDOMChildURL)); | 568 outer_summary_node.children.push_back(GURL(kDOMChildURL)); |
| 557 outer_params.push_back(outer_summary_node); | 569 outer_params.push_back(outer_summary_node); |
| 558 | 570 |
| 559 // Now define some more nodes for the body of the iframe. | 571 // Now define some more nodes for the body of the iframe. |
| 560 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params; | 572 std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node> inner_params; |
| 561 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_node; | 573 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_div; |
| 562 inner_child_node.url = GURL(kDOMChildUrl2); | 574 inner_child_div.node_id = 1; |
| 563 inner_child_node.tag_name = "script"; | 575 inner_child_div.tag_name = "div"; |
| 564 inner_child_node.parent = GURL(kDOMChildURL); | 576 inner_child_div.parent = GURL(kDOMChildURL); |
| 565 inner_params.push_back(inner_child_node); | 577 inner_params.push_back(inner_child_div); |
| 578 |
| 579 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_child_script; |
| 580 inner_child_script.node_id = 2; |
| 581 inner_child_script.url = GURL(kDOMChildUrl2); |
| 582 inner_child_script.tag_name = "script"; |
| 583 inner_child_script.parent = GURL(kDOMChildURL); |
| 584 inner_params.push_back(inner_child_script); |
| 585 |
| 566 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_summary_node; | 586 SafeBrowsingHostMsg_ThreatDOMDetails_Node inner_summary_node; |
| 567 inner_summary_node.url = GURL(kDOMChildURL); | 587 inner_summary_node.url = GURL(kDOMChildURL); |
| 568 inner_summary_node.children.push_back(GURL(kDOMChildUrl2)); | 588 inner_summary_node.children.push_back(GURL(kDOMChildUrl2)); |
| 569 inner_params.push_back(inner_summary_node); | 589 inner_params.push_back(inner_summary_node); |
| 570 | 590 |
| 571 ClientSafeBrowsingReportRequest expected; | 591 ClientSafeBrowsingReportRequest expected; |
| 572 expected.set_type(ClientSafeBrowsingReportRequest::URL_UNWANTED); | 592 expected.set_type(ClientSafeBrowsingReportRequest::URL_UNWANTED); |
| 573 expected.set_url(kThreatURL); | 593 expected.set_url(kThreatURL); |
| 574 expected.set_page_url(kLandingURL); | 594 expected.set_page_url(kLandingURL); |
| 575 expected.set_referrer_url(""); | 595 expected.set_referrer_url(""); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 599 res_dom_parent->add_child_ids(2); | 619 res_dom_parent->add_child_ids(2); |
| 600 | 620 |
| 601 ClientSafeBrowsingReportRequest::Resource* res_dom_child2 = | 621 ClientSafeBrowsingReportRequest::Resource* res_dom_child2 = |
| 602 expected.add_resources(); | 622 expected.add_resources(); |
| 603 res_dom_child2->set_id(4); | 623 res_dom_child2->set_id(4); |
| 604 res_dom_child2->set_url(kDOMChildUrl2); | 624 res_dom_child2->set_url(kDOMChildUrl2); |
| 605 res_dom_child2->set_parent_id(2); | 625 res_dom_child2->set_parent_id(2); |
| 606 | 626 |
| 607 expected.set_complete(false); // Since the cache was missing. | 627 expected.set_complete(false); // Since the cache was missing. |
| 608 | 628 |
| 609 HTMLElement* elem_dom_child = expected.add_dom(); | 629 HTMLElement* elem_dom_outer_div = expected.add_dom(); |
| 610 elem_dom_child->set_id(0); | 630 elem_dom_outer_div->set_id(0); |
| 611 elem_dom_child->set_tag("IFRAME"); | 631 elem_dom_outer_div->set_tag("DIV"); |
| 612 elem_dom_child->set_resource_id(res_dom_child->id()); | 632 elem_dom_outer_div->add_child_ids(1); |
| 613 elem_dom_child->add_attribute()->set_name("SRC"); | |
| 614 elem_dom_child->mutable_attribute(0)->set_value(kDOMChildURL); | |
| 615 elem_dom_child->add_child_ids(1); | |
| 616 | 633 |
| 617 HTMLElement* elem_dom_child2 = expected.add_dom(); | 634 HTMLElement* elem_dom_outer_iframe = expected.add_dom(); |
| 618 elem_dom_child2->set_id(1); | 635 elem_dom_outer_iframe->set_id(1); |
| 619 elem_dom_child2->set_tag("SCRIPT"); | 636 elem_dom_outer_iframe->set_tag("IFRAME"); |
| 620 elem_dom_child2->set_resource_id(res_dom_child2->id()); | 637 elem_dom_outer_iframe->set_resource_id(res_dom_child->id()); |
| 621 elem_dom_child2->add_attribute()->set_name("SRC"); | 638 elem_dom_outer_iframe->add_attribute()->set_name("SRC"); |
| 622 elem_dom_child2->mutable_attribute(0)->set_value(kDOMChildUrl2); | 639 elem_dom_outer_iframe->mutable_attribute(0)->set_value(kDOMChildURL); |
| 640 elem_dom_outer_iframe->add_child_ids(2); |
| 641 elem_dom_outer_iframe->add_child_ids(3); |
| 642 |
| 643 HTMLElement* elem_dom_inner_div = expected.add_dom(); |
| 644 elem_dom_inner_div->set_id(2); |
| 645 elem_dom_inner_div->set_tag("DIV"); |
| 646 |
| 647 HTMLElement* elem_dom_inner_script = expected.add_dom(); |
| 648 elem_dom_inner_script->set_id(3); |
| 649 elem_dom_inner_script->set_tag("SCRIPT"); |
| 650 elem_dom_inner_script->set_resource_id(res_dom_child2->id()); |
| 651 elem_dom_inner_script->add_attribute()->set_name("SRC"); |
| 652 elem_dom_inner_script->mutable_attribute(0)->set_value(kDOMChildUrl2); |
| 623 | 653 |
| 624 content::WebContentsTester::For(web_contents()) | 654 content::WebContentsTester::For(web_contents()) |
| 625 ->NavigateAndCommit(GURL(kLandingURL)); | 655 ->NavigateAndCommit(GURL(kLandingURL)); |
| 626 | 656 |
| 627 UnsafeResource resource; | 657 UnsafeResource resource; |
| 628 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED, | 658 InitResource(&resource, SB_THREAT_TYPE_URL_UNWANTED, |
| 629 true /* is_subresource */, GURL(kThreatURL)); | 659 true /* is_subresource */, GURL(kThreatURL)); |
| 630 | 660 |
| 631 // Send both sets of nodes, from different render frames. | 661 // Send both sets of nodes, from different render frames. |
| 632 { | 662 { |
| 633 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( | 663 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( |
| 634 ui_manager_.get(), web_contents(), resource, NULL); | 664 ui_manager_.get(), web_contents(), resource, NULL); |
| 635 | 665 |
| 636 // We call AddDOMDetails directly so we can specify different render frame | 666 // We call AddDOMDetails directly so we can specify different render frame |
| 637 // IDs. | 667 // IDs. |
| 638 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); | 668 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); |
| 639 report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params); | 669 report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params); |
| 640 std::string serialized = WaitForSerializedReport( | 670 std::string serialized = WaitForSerializedReport( |
| 641 report.get(), false /* did_proceed*/, 0 /* num_visit */); | 671 report.get(), false /* did_proceed*/, 0 /* num_visit */); |
| 642 ClientSafeBrowsingReportRequest actual; | 672 ClientSafeBrowsingReportRequest actual; |
| 643 actual.ParseFromString(serialized); | 673 actual.ParseFromString(serialized); |
| 644 VerifyResults(actual, expected); | 674 VerifyResults(actual, expected); |
| 645 } | 675 } |
| 646 | 676 |
| 647 // Try again but with the messages coming in a different order. The IDs change | 677 // Try again but with the messages coming in a different order. The IDs change |
| 648 // slightly, but everything else remains the same. | 678 // slightly, but everything else remains the same. |
| 649 { | 679 { |
| 650 // Adjust the expected IDs: the inner params come first, so DomChild2 and | 680 // Adjust the expected IDs: the inner params come first, so InnerScript and |
| 651 // DomChild appear before DomParent | 681 // appear before DomParent |
| 652 res_dom_child2->set_id(2); | 682 res_dom_child2->set_id(2); |
| 653 res_dom_child2->set_parent_id(3); | 683 res_dom_child2->set_parent_id(3); |
| 654 res_dom_child->set_id(3); | 684 res_dom_child->set_id(3); |
| 655 res_dom_child->set_parent_id(4); | 685 res_dom_child->set_parent_id(4); |
| 656 res_dom_child->clear_child_ids(); | 686 res_dom_child->clear_child_ids(); |
| 657 res_dom_child->add_child_ids(2); | 687 res_dom_child->add_child_ids(2); |
| 658 res_dom_parent->set_id(4); | 688 res_dom_parent->set_id(4); |
| 659 res_dom_parent->clear_child_ids(); | 689 res_dom_parent->clear_child_ids(); |
| 660 res_dom_parent->add_child_ids(3); | 690 res_dom_parent->add_child_ids(3); |
| 661 | 691 |
| 662 // Also adjust the elements - they change order since DomChild2 comes in | 692 // Also adjust the elements - they change order since InnerDiv and |
| 663 // first. | 693 // InnerScript come in first. |
| 664 elem_dom_child2->set_id(0); | 694 elem_dom_inner_div->set_id(0); |
| 665 elem_dom_child2->set_resource_id(res_dom_child2->id()); | 695 elem_dom_inner_script->set_id(1); |
| 666 elem_dom_child->set_id(1); | 696 elem_dom_inner_script->set_resource_id(res_dom_child2->id()); |
| 667 elem_dom_child->set_resource_id(res_dom_child->id()); | 697 |
| 668 elem_dom_child->clear_child_ids(); | 698 elem_dom_outer_div->set_id(2); |
| 669 elem_dom_child->add_child_ids(0); | 699 elem_dom_outer_div->clear_child_ids(); |
| 700 elem_dom_outer_div->add_child_ids(3); |
| 701 elem_dom_outer_iframe->set_id(3); |
| 702 elem_dom_outer_iframe->set_resource_id(res_dom_child->id()); |
| 703 elem_dom_outer_iframe->clear_child_ids(); |
| 704 elem_dom_outer_iframe->add_child_ids(0); |
| 705 elem_dom_outer_iframe->add_child_ids(1); |
| 670 | 706 |
| 671 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( | 707 scoped_refptr<ThreatDetailsWrap> report = new ThreatDetailsWrap( |
| 672 ui_manager_.get(), web_contents(), resource, NULL); | 708 ui_manager_.get(), web_contents(), resource, NULL); |
| 673 | 709 |
| 674 // We call AddDOMDetails directly so we can specify different render frame | 710 // We call AddDOMDetails directly so we can specify different render frame |
| 675 // IDs. | 711 // IDs. |
| 676 report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params); | 712 report->AddDOMDetails(200, GURL(kDOMChildURL), inner_params); |
| 677 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); | 713 report->AddDOMDetails(100, GURL(kDOMParentURL), outer_params); |
| 678 std::string serialized = WaitForSerializedReport( | 714 std::string serialized = WaitForSerializedReport( |
| 679 report.get(), false /* did_proceed*/, 0 /* num_visit */); | 715 report.get(), false /* did_proceed*/, 0 /* num_visit */); |
| (...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1273 pb_resource->set_parent_id(3); | 1309 pb_resource->set_parent_id(3); |
| 1274 pb_resource->set_url(kSecondRedirectURL); | 1310 pb_resource->set_url(kSecondRedirectURL); |
| 1275 pb_resource = expected.add_resources(); | 1311 pb_resource = expected.add_resources(); |
| 1276 pb_resource->set_id(3); | 1312 pb_resource->set_id(3); |
| 1277 pb_resource->set_url(kFirstRedirectURL); | 1313 pb_resource->set_url(kFirstRedirectURL); |
| 1278 | 1314 |
| 1279 VerifyResults(actual, expected); | 1315 VerifyResults(actual, expected); |
| 1280 } | 1316 } |
| 1281 | 1317 |
| 1282 } // namespace safe_browsing | 1318 } // namespace safe_browsing |
| OLD | NEW |