OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 <memory> | 5 #include <memory> |
6 | 6 |
7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
8 #include "base/json/json_writer.h" | 8 #include "base/json/json_writer.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
671 MaybeTestIsolation(); | 671 MaybeTestIsolation(); |
672 } | 672 } |
673 | 673 |
674 void MaybeTestIsolation() { | 674 void MaybeTestIsolation() { |
675 if (page_id_one_.empty() || page_id_two_.empty()) | 675 if (page_id_one_.empty() || page_id_two_.empty()) |
676 return; | 676 return; |
677 | 677 |
678 devtools_client_->GetTarget()->GetExperimental()->AttachToTarget( | 678 devtools_client_->GetTarget()->GetExperimental()->AttachToTarget( |
679 target::AttachToTargetParams::Builder() | 679 target::AttachToTargetParams::Builder() |
680 .SetTargetId(page_id_one_) | 680 .SetTargetId(page_id_one_) |
681 .Build(), | 681 .Build()); |
682 base::Bind(&TargetDomainCreateTwoContexts::OnAttachedToTargetOne, | |
683 base::Unretained(this))); | |
684 | 682 |
685 devtools_client_->GetTarget()->GetExperimental()->AttachToTarget( | 683 devtools_client_->GetTarget()->GetExperimental()->AttachToTarget( |
686 target::AttachToTargetParams::Builder() | 684 target::AttachToTargetParams::Builder() |
687 .SetTargetId(page_id_two_) | 685 .SetTargetId(page_id_two_) |
688 .Build(), | 686 .Build()); |
689 base::Bind(&TargetDomainCreateTwoContexts::OnAttachedToTargetTwo, | |
690 base::Unretained(this))); | |
691 } | 687 } |
692 | 688 |
693 void OnAttachedToTargetOne( | 689 void OnAttachedToTarget( |
694 std::unique_ptr<target::AttachToTargetResult> result) { | 690 const target::AttachedToTargetParams& params) override { |
695 StopNavigationOnTarget(101, page_id_one_); | 691 if (session_id_one_.empty()) { |
| 692 session_id_one_ = params.GetSessionId(); |
| 693 StopNavigationOnTarget(101, session_id_one_); |
| 694 } else { |
| 695 EXPECT_TRUE(session_id_two_.empty()); |
| 696 session_id_two_ = params.GetSessionId(); |
| 697 StopNavigationOnTarget(102, session_id_two_); |
| 698 } |
696 } | 699 } |
697 | 700 |
698 void OnAttachedToTargetTwo( | 701 void StopNavigationOnTarget(int message_id, std::string session_id) { |
699 std::unique_ptr<target::AttachToTargetResult> result) { | |
700 StopNavigationOnTarget(102, page_id_two_); | |
701 } | |
702 | |
703 void StopNavigationOnTarget(int message_id, std::string target_id) { | |
704 // Avoid triggering Page.loadEventFired for about://blank if loading hasn't | 702 // Avoid triggering Page.loadEventFired for about://blank if loading hasn't |
705 // finished yet. | 703 // finished yet. |
706 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( | 704 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
707 target::SendMessageToTargetParams::Builder() | 705 target::SendMessageToTargetParams::Builder() |
708 .SetTargetId(target_id) | 706 .SetSessionId(session_id) |
709 .SetMessage("{\"id\":" + std::to_string(message_id) + | 707 .SetMessage("{\"id\":" + std::to_string(message_id) + |
710 ", \"method\": \"Page.stopLoading\"}") | 708 ", \"method\": \"Page.stopLoading\"}") |
711 .Build()); | 709 .Build()); |
712 } | 710 } |
713 | 711 |
714 void EnablePageOnTarget(int message_id, std::string target_id) { | 712 void EnablePageOnTarget(int message_id, std::string session_id) { |
715 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( | 713 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
716 target::SendMessageToTargetParams::Builder() | 714 target::SendMessageToTargetParams::Builder() |
717 .SetTargetId(target_id) | 715 .SetSessionId(session_id) |
718 .SetMessage("{\"id\":" + std::to_string(message_id) + | 716 .SetMessage("{\"id\":" + std::to_string(message_id) + |
719 ", \"method\": \"Page.enable\"}") | 717 ", \"method\": \"Page.enable\"}") |
720 .Build()); | 718 .Build()); |
721 } | 719 } |
722 | 720 |
723 void NavigateTarget(int message_id, std::string target_id) { | 721 void NavigateTarget(int message_id, std::string session_id) { |
724 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( | 722 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
725 target::SendMessageToTargetParams::Builder() | 723 target::SendMessageToTargetParams::Builder() |
726 .SetTargetId(target_id) | 724 .SetSessionId(session_id) |
727 .SetMessage( | 725 .SetMessage( |
728 "{\"id\":" + std::to_string(message_id) + | 726 "{\"id\":" + std::to_string(message_id) + |
729 ", \"method\": \"Page.navigate\", \"params\": {\"url\": \"" + | 727 ", \"method\": \"Page.navigate\", \"params\": {\"url\": \"" + |
730 embedded_test_server()->GetURL("/hello.html").spec() + "\"}}") | 728 embedded_test_server()->GetURL("/hello.html").spec() + "\"}}") |
731 .Build()); | 729 .Build()); |
732 } | 730 } |
733 | 731 |
734 void MaybeSetCookieOnPageOne() { | 732 void MaybeSetCookieOnPageOne() { |
735 if (!page_one_loaded_ || !page_two_loaded_) | 733 if (!page_one_loaded_ || !page_two_loaded_) |
736 return; | 734 return; |
737 | 735 |
738 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( | 736 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
739 target::SendMessageToTargetParams::Builder() | 737 target::SendMessageToTargetParams::Builder() |
740 .SetTargetId(page_id_one_) | 738 .SetSessionId(session_id_one_) |
741 .SetMessage("{\"id\":401, \"method\": \"Runtime.evaluate\", " | 739 .SetMessage("{\"id\":401, \"method\": \"Runtime.evaluate\", " |
742 "\"params\": {\"expression\": " | 740 "\"params\": {\"expression\": " |
743 "\"document.cookie = 'foo=bar';\"}}") | 741 "\"document.cookie = 'foo=bar';\"}}") |
744 .Build()); | 742 .Build()); |
745 } | 743 } |
746 | 744 |
747 void OnReceivedMessageFromTarget( | 745 void OnReceivedMessageFromTarget( |
748 const target::ReceivedMessageFromTargetParams& params) override { | 746 const target::ReceivedMessageFromTargetParams& params) override { |
749 std::unique_ptr<base::Value> message = | 747 std::unique_ptr<base::Value> message = |
750 base::JSONReader::Read(params.GetMessage(), base::JSON_PARSE_RFC); | 748 base::JSONReader::Read(params.GetMessage(), base::JSON_PARSE_RFC); |
751 const base::DictionaryValue* message_dict; | 749 const base::DictionaryValue* message_dict; |
752 if (!message || !message->GetAsDictionary(&message_dict)) { | 750 if (!message || !message->GetAsDictionary(&message_dict)) { |
753 return; | 751 return; |
754 } | 752 } |
755 | 753 |
756 std::string method; | 754 std::string method; |
757 if (message_dict->GetString("method", &method) && | 755 if (message_dict->GetString("method", &method) && |
758 method == "Page.loadEventFired") { | 756 method == "Page.loadEventFired") { |
759 if (params.GetTargetId() == page_id_one_) { | 757 if (params.GetSessionId() == session_id_one_) { |
760 page_one_loaded_ = true; | 758 page_one_loaded_ = true; |
761 } else if (params.GetTargetId() == page_id_two_) { | 759 } else if (params.GetSessionId() == session_id_two_) { |
762 page_two_loaded_ = true; | 760 page_two_loaded_ = true; |
763 } | 761 } |
764 MaybeSetCookieOnPageOne(); | 762 MaybeSetCookieOnPageOne(); |
765 return; | 763 return; |
766 } | 764 } |
767 | 765 |
768 int message_id = 0; | 766 int message_id = 0; |
769 if (!message_dict->GetInteger("id", &message_id)) | 767 if (!message_dict->GetInteger("id", &message_id)) |
770 return; | 768 return; |
771 const base::DictionaryValue* result_dict; | 769 const base::DictionaryValue* result_dict; |
772 if (message_dict->GetDictionary("result", &result_dict)) { | 770 if (message_dict->GetDictionary("result", &result_dict)) { |
773 if (message_id == 101) { | 771 if (message_id == 101) { |
774 // 101: Page.stopNavigation on target one. | 772 // 101: Page.stopNavigation on target one. |
775 EXPECT_EQ(page_id_one_, params.GetTargetId()); | 773 EXPECT_EQ(session_id_one_, params.GetSessionId()); |
776 EnablePageOnTarget(201, page_id_one_); | 774 EnablePageOnTarget(201, session_id_one_); |
777 } else if (message_id == 102) { | 775 } else if (message_id == 102) { |
778 // 102: Page.stopNavigation on target two. | 776 // 102: Page.stopNavigation on target two. |
779 EXPECT_EQ(page_id_two_, params.GetTargetId()); | 777 EXPECT_EQ(session_id_two_, params.GetSessionId()); |
780 EnablePageOnTarget(202, page_id_two_); | 778 EnablePageOnTarget(202, session_id_two_); |
781 } else if (message_id == 201) { | 779 } else if (message_id == 201) { |
782 // 201: Page.enable on target one. | 780 // 201: Page.enable on target one. |
783 EXPECT_EQ(page_id_one_, params.GetTargetId()); | 781 EXPECT_EQ(session_id_one_, params.GetSessionId()); |
784 NavigateTarget(301, page_id_one_); | 782 NavigateTarget(301, session_id_one_); |
785 } else if (message_id == 202) { | 783 } else if (message_id == 202) { |
786 // 202: Page.enable on target two. | 784 // 202: Page.enable on target two. |
787 EXPECT_EQ(page_id_two_, params.GetTargetId()); | 785 EXPECT_EQ(session_id_two_, params.GetSessionId()); |
788 NavigateTarget(302, page_id_two_); | 786 NavigateTarget(302, session_id_two_); |
789 } else if (message_id == 401) { | 787 } else if (message_id == 401) { |
790 // 401: Runtime.evaluate on target one. | 788 // 401: Runtime.evaluate on target one. |
791 EXPECT_EQ(page_id_one_, params.GetTargetId()); | 789 EXPECT_EQ(session_id_one_, params.GetSessionId()); |
792 | 790 |
793 // TODO(alexclarke): Make some better bindings | 791 // TODO(alexclarke): Make some better bindings |
794 // for Target.SendMessageToTarget. | 792 // for Target.SendMessageToTarget. |
795 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( | 793 devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
796 target::SendMessageToTargetParams::Builder() | 794 target::SendMessageToTargetParams::Builder() |
797 .SetTargetId(page_id_two_) | 795 .SetSessionId(session_id_two_) |
798 .SetMessage("{\"id\":402, \"method\": \"Runtime.evaluate\", " | 796 .SetMessage("{\"id\":402, \"method\": \"Runtime.evaluate\", " |
799 "\"params\": {\"expression\": " | 797 "\"params\": {\"expression\": " |
800 "\"document.cookie;\"}}") | 798 "\"document.cookie;\"}}") |
801 .Build()); | 799 .Build()); |
802 } else if (message_id == 402) { | 800 } else if (message_id == 402) { |
803 // 402: Runtime.evaluate on target two. | 801 // 402: Runtime.evaluate on target two. |
804 EXPECT_EQ(page_id_two_, params.GetTargetId()); | 802 EXPECT_EQ(session_id_two_, params.GetSessionId()); |
805 | 803 |
806 // There's a nested result. We want the inner one. | 804 // There's a nested result. We want the inner one. |
807 EXPECT_TRUE(result_dict->GetDictionary("result", &result_dict)); | 805 EXPECT_TRUE(result_dict->GetDictionary("result", &result_dict)); |
808 | 806 |
809 std::string value; | 807 std::string value; |
810 EXPECT_TRUE(result_dict->GetString("value", &value)); | 808 EXPECT_TRUE(result_dict->GetString("value", &value)); |
811 EXPECT_EQ("", value) << "Page 2 should not share cookies from page one"; | 809 EXPECT_EQ("", value) << "Page 2 should not share cookies from page one"; |
812 | 810 |
813 devtools_client_->GetTarget()->GetExperimental()->CloseTarget( | 811 devtools_client_->GetTarget()->GetExperimental()->CloseTarget( |
814 target::CloseTargetParams::Builder() | 812 target::CloseTargetParams::Builder() |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 return; | 855 return; |
858 | 856 |
859 FinishAsynchronousTest(); | 857 FinishAsynchronousTest(); |
860 } | 858 } |
861 | 859 |
862 private: | 860 private: |
863 std::string context_id_one_; | 861 std::string context_id_one_; |
864 std::string context_id_two_; | 862 std::string context_id_two_; |
865 std::string page_id_one_; | 863 std::string page_id_one_; |
866 std::string page_id_two_; | 864 std::string page_id_two_; |
| 865 std::string session_id_one_; |
| 866 std::string session_id_two_; |
867 bool page_one_loaded_ = false; | 867 bool page_one_loaded_ = false; |
868 bool page_two_loaded_ = false; | 868 bool page_two_loaded_ = false; |
869 int page_close_count_ = 0; | 869 int page_close_count_ = 0; |
870 int context_closed_count_ = 0; | 870 int context_closed_count_ = 0; |
871 }; | 871 }; |
872 | 872 |
873 HEADLESS_ASYNC_DEVTOOLED_TEST_F(TargetDomainCreateTwoContexts); | 873 HEADLESS_ASYNC_DEVTOOLED_TEST_F(TargetDomainCreateTwoContexts); |
874 | 874 |
875 class HeadlessDevToolsNavigationControlTest | 875 class HeadlessDevToolsNavigationControlTest |
876 : public HeadlessAsyncDevTooledBrowserTest, | 876 : public HeadlessAsyncDevTooledBrowserTest, |
(...skipping 1374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2251 << " Style # " << i; | 2251 << " Style # " << i; |
2252 } | 2252 } |
2253 | 2253 |
2254 FinishAsynchronousTest(); | 2254 FinishAsynchronousTest(); |
2255 } | 2255 } |
2256 }; | 2256 }; |
2257 | 2257 |
2258 HEADLESS_ASYNC_DEVTOOLED_TEST_F(DomTreeExtractionBrowserTest); | 2258 HEADLESS_ASYNC_DEVTOOLED_TEST_F(DomTreeExtractionBrowserTest); |
2259 | 2259 |
2260 } // namespace headless | 2260 } // namespace headless |
OLD | NEW |