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

Side by Side Diff: headless/lib/headless_devtools_client_browsertest.cc

Issue 2951913002: [DevTools] Support multiple sessions in Target domain (Closed)
Patch Set: simplify Created 3 years, 5 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 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698