| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/strings/stringprintf.h" | 5 #include "base/strings/stringprintf.h" |
| 6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
| 7 #include "chrome/app/chrome_command_ids.h" | 7 #include "chrome/app/chrome_command_ids.h" |
| 8 #include "chrome/browser/apps/app_browsertest_util.h" | 8 #include "chrome/browser/apps/app_browsertest_util.h" |
| 9 #include "chrome/browser/chrome_content_browser_client.h" | 9 #include "chrome/browser/chrome_content_browser_client.h" |
| 10 #include "chrome/browser/extensions/extension_test_message_listener.h" | 10 #include "chrome/browser/extensions/extension_test_message_listener.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #include "net/test/embedded_test_server/embedded_test_server.h" | 30 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 31 #include "ui/base/ime/composition_text.h" | 31 #include "ui/base/ime/composition_text.h" |
| 32 #include "ui/base/ime/text_input_client.h" | 32 #include "ui/base/ime/text_input_client.h" |
| 33 #include "ui/base/test/ui_controls.h" | 33 #include "ui/base/test/ui_controls.h" |
| 34 #include "ui/events/keycodes/keyboard_codes.h" | 34 #include "ui/events/keycodes/keyboard_codes.h" |
| 35 | 35 |
| 36 using extensions::AppWindow; | 36 using extensions::AppWindow; |
| 37 | 37 |
| 38 class TestGuestViewManager : public extensions::GuestViewManager { | 38 class TestGuestViewManager : public extensions::GuestViewManager { |
| 39 public: | 39 public: |
| 40 explicit TestGuestViewManager(content::BrowserContext* context) : | 40 explicit TestGuestViewManager(content::BrowserContext* context) |
| 41 GuestViewManager(context), | 41 : GuestViewManager(context), |
| 42 web_contents_(NULL) {} | 42 guest_add_count_(0), |
| 43 guest_remove_count_(0), |
| 44 web_contents_(NULL) {} |
| 43 | 45 |
| 44 content::WebContents* WaitForGuestCreated() { | 46 content::WebContents* WaitForGuestAdded() { |
| 45 if (web_contents_) | 47 if (web_contents_) |
| 46 return web_contents_; | 48 return web_contents_; |
| 47 | 49 |
| 48 message_loop_runner_ = new content::MessageLoopRunner; | 50 add_message_loop_runner_ = new content::MessageLoopRunner; |
| 49 message_loop_runner_->Run(); | 51 add_message_loop_runner_->Run(); |
| 50 return web_contents_; | 52 return web_contents_; |
| 51 } | 53 } |
| 52 | 54 |
| 55 // Waits so that at least |expected_remove_count| guests' creation |
| 56 // has been seen by this manager. |
| 57 void WaitForGuestRemoved(size_t expected_remove_count) { |
| 58 if (guest_remove_count_ >= expected_remove_count) |
| 59 return; |
| 60 |
| 61 remove_message_loop_runner_ = new content::MessageLoopRunner; |
| 62 remove_message_loop_runner_->Run(); |
| 63 } |
| 64 |
| 65 size_t guest_add_count() { return guest_add_count_; } |
| 66 |
| 53 private: | 67 private: |
| 54 // GuestViewManager override: | 68 // GuestViewManager override: |
| 55 virtual void AddGuest(int guest_instance_id, | 69 virtual void AddGuest(int guest_instance_id, |
| 56 content::WebContents* guest_web_contents) OVERRIDE{ | 70 content::WebContents* guest_web_contents) OVERRIDE{ |
| 57 GuestViewManager::AddGuest(guest_instance_id, guest_web_contents); | 71 GuestViewManager::AddGuest(guest_instance_id, guest_web_contents); |
| 58 web_contents_ = guest_web_contents; | 72 web_contents_ = guest_web_contents; |
| 73 ++guest_add_count_; |
| 59 | 74 |
| 60 if (message_loop_runner_.get()) | 75 if (add_message_loop_runner_.get()) |
| 61 message_loop_runner_->Quit(); | 76 add_message_loop_runner_->Quit(); |
| 62 } | 77 } |
| 63 | 78 |
| 79 virtual void RemoveGuest(int guest_instance_id) OVERRIDE { |
| 80 GuestViewManager::RemoveGuest(guest_instance_id); |
| 81 ++guest_remove_count_; |
| 82 |
| 83 if (remove_message_loop_runner_.get()) |
| 84 remove_message_loop_runner_->Quit(); |
| 85 } |
| 86 |
| 87 size_t guest_add_count_; |
| 88 size_t guest_remove_count_; |
| 64 content::WebContents* web_contents_; | 89 content::WebContents* web_contents_; |
| 65 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; | 90 scoped_refptr<content::MessageLoopRunner> add_message_loop_runner_; |
| 91 scoped_refptr<content::MessageLoopRunner> remove_message_loop_runner_; |
| 66 }; | 92 }; |
| 67 | 93 |
| 68 // Test factory for creating test instances of GuestViewManager. | 94 // Test factory for creating test instances of GuestViewManager. |
| 69 class TestGuestViewManagerFactory : public extensions::GuestViewManagerFactory { | 95 class TestGuestViewManagerFactory : public extensions::GuestViewManagerFactory { |
| 70 public: | 96 public: |
| 71 TestGuestViewManagerFactory() : | 97 TestGuestViewManagerFactory() : |
| 72 test_guest_view_manager_(NULL) {} | 98 test_guest_view_manager_(NULL) {} |
| 73 | 99 |
| 74 virtual ~TestGuestViewManagerFactory() {} | 100 virtual ~TestGuestViewManagerFactory() {} |
| 75 | 101 |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 const std::string& app_location, | 277 const std::string& app_location, |
| 252 TestServer test_server) { | 278 TestServer test_server) { |
| 253 content::WebContents* embedder_web_contents = NULL; | 279 content::WebContents* embedder_web_contents = NULL; |
| 254 scoped_ptr<ExtensionTestMessageListener> done_listener( | 280 scoped_ptr<ExtensionTestMessageListener> done_listener( |
| 255 RunAppHelper( | 281 RunAppHelper( |
| 256 test_name, app_location, test_server, &embedder_web_contents)); | 282 test_name, app_location, test_server, &embedder_web_contents)); |
| 257 | 283 |
| 258 ASSERT_TRUE(done_listener); | 284 ASSERT_TRUE(done_listener); |
| 259 ASSERT_TRUE(done_listener->WaitUntilSatisfied()); | 285 ASSERT_TRUE(done_listener->WaitUntilSatisfied()); |
| 260 | 286 |
| 261 guest_web_contents_ = GetGuestViewManager()->WaitForGuestCreated(); | 287 guest_web_contents_ = GetGuestViewManager()->WaitForGuestAdded(); |
| 262 } | 288 } |
| 263 | 289 |
| 264 void RunTest(const std::string& app_name) { | 290 void RunTest(const std::string& app_name) { |
| 265 } | 291 } |
| 266 void SetupTest(const std::string& app_name, | 292 void SetupTest(const std::string& app_name, |
| 267 const std::string& guest_url_spec) { | 293 const std::string& guest_url_spec) { |
| 268 ASSERT_TRUE(StartEmbeddedTestServer()); | 294 ASSERT_TRUE(StartEmbeddedTestServer()); |
| 269 GURL::Replacements replace_host; | 295 GURL::Replacements replace_host; |
| 270 std::string host_str("localhost"); // Must stay in scope with replace_host. | 296 std::string host_str("localhost"); // Must stay in scope with replace_host. |
| 271 replace_host.SetHostStr(host_str); | 297 replace_host.SetHostStr(host_str); |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 726 // Flush any pending events to make sure we start with a clean slate. | 752 // Flush any pending events to make sure we start with a clean slate. |
| 727 content::RunAllPendingInMessageLoop(); | 753 content::RunAllPendingInMessageLoop(); |
| 728 | 754 |
| 729 ExtensionTestMessageListener start_of_line_listener("StartOfLine", false); | 755 ExtensionTestMessageListener start_of_line_listener("StartOfLine", false); |
| 730 SendStartOfLineKeyPressToPlatformApp(); | 756 SendStartOfLineKeyPressToPlatformApp(); |
| 731 // Wait for the guest to receive a 'copy' edit command. | 757 // Wait for the guest to receive a 'copy' edit command. |
| 732 ASSERT_TRUE(start_of_line_listener.WaitUntilSatisfied()); | 758 ASSERT_TRUE(start_of_line_listener.WaitUntilSatisfied()); |
| 733 } | 759 } |
| 734 | 760 |
| 735 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, | 761 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, |
| 762 NewWindow_AttachAfterOpenerDestroyed) { |
| 763 TestHelper("testNewWindowAttachAfterOpenerDestroyed", |
| 764 "web_view/newwindow", |
| 765 NEEDS_TEST_SERVER); |
| 766 } |
| 767 |
| 768 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, |
| 736 NewWindow_NewWindowNameTakesPrecedence) { | 769 NewWindow_NewWindowNameTakesPrecedence) { |
| 737 TestHelper("testNewWindowNameTakesPrecedence", | 770 TestHelper("testNewWindowNameTakesPrecedence", |
| 738 "web_view/newwindow", | 771 "web_view/newwindow", |
| 739 NEEDS_TEST_SERVER); | 772 NEEDS_TEST_SERVER); |
| 740 } | 773 } |
| 741 | 774 |
| 742 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, | 775 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, |
| 743 NewWindow_WebViewNameTakesPrecedence) { | 776 NewWindow_WebViewNameTakesPrecedence) { |
| 744 TestHelper("testWebViewNameTakesPrecedence", | 777 TestHelper("testNewWindowWebViewNameTakesPrecedence", |
| 745 "web_view/newwindow", | 778 "web_view/newwindow", |
| 746 NEEDS_TEST_SERVER); | 779 NEEDS_TEST_SERVER); |
| 747 } | 780 } |
| 748 | 781 |
| 749 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_NoName) { | 782 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_NoName) { |
| 750 TestHelper("testNoName", | 783 TestHelper("testNewWindowNoName", |
| 751 "web_view/newwindow", | 784 "web_view/newwindow", |
| 752 NEEDS_TEST_SERVER); | 785 NEEDS_TEST_SERVER); |
| 753 } | 786 } |
| 754 | 787 |
| 755 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_Redirect) { | 788 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_Redirect) { |
| 756 TestHelper("testNewWindowRedirect", | 789 TestHelper("testNewWindowRedirect", |
| 757 "web_view/newwindow", | 790 "web_view/newwindow", |
| 758 NEEDS_TEST_SERVER); | 791 NEEDS_TEST_SERVER); |
| 759 } | 792 } |
| 760 | 793 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 776 NEEDS_TEST_SERVER); | 809 NEEDS_TEST_SERVER); |
| 777 } | 810 } |
| 778 | 811 |
| 779 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, | 812 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, |
| 780 NewWindow_DeclarativeWebRequest) { | 813 NewWindow_DeclarativeWebRequest) { |
| 781 TestHelper("testNewWindowDeclarativeWebRequest", | 814 TestHelper("testNewWindowDeclarativeWebRequest", |
| 782 "web_view/newwindow", | 815 "web_view/newwindow", |
| 783 NEEDS_TEST_SERVER); | 816 NEEDS_TEST_SERVER); |
| 784 } | 817 } |
| 785 | 818 |
| 819 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, |
| 820 NewWindow_DiscardAfterOpenerDestroyed) { |
| 821 TestHelper("testNewWindowDiscardAfterOpenerDestroyed", |
| 822 "web_view/newwindow", |
| 823 NEEDS_TEST_SERVER); |
| 824 } |
| 825 |
| 786 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_WebRequest) { | 826 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, NewWindow_WebRequest) { |
| 787 TestHelper("testNewWindowWebRequest", | 827 TestHelper("testNewWindowWebRequest", |
| 788 "web_view/newwindow", | 828 "web_view/newwindow", |
| 789 NEEDS_TEST_SERVER); | 829 NEEDS_TEST_SERVER); |
| 790 } | 830 } |
| 791 | 831 |
| 792 // A custom elements bug needs to be addressed to enable this test: | 832 // A custom elements bug needs to be addressed to enable this test: |
| 793 // See http://crbug.com/282477 for more information. | 833 // See http://crbug.com/282477 for more information. |
| 794 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, | 834 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, |
| 795 DISABLED_NewWindow_WebRequestCloseWindow) { | 835 DISABLED_NewWindow_WebRequestCloseWindow) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 824 #else | 864 #else |
| 825 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync( | 865 ASSERT_TRUE(ui_test_utils::SendKeyPressToWindowSync( |
| 826 GetPlatformAppWindow(), ui::VKEY_RETURN, | 866 GetPlatformAppWindow(), ui::VKEY_RETURN, |
| 827 true /* ctrl */, false, false, false)); | 867 true /* ctrl */, false, false, false)); |
| 828 #endif | 868 #endif |
| 829 | 869 |
| 830 // Wait for the embedder to receive a 'newwindow' event. | 870 // Wait for the embedder to receive a 'newwindow' event. |
| 831 ASSERT_TRUE(done_listener->WaitUntilSatisfied()); | 871 ASSERT_TRUE(done_listener->WaitUntilSatisfied()); |
| 832 } | 872 } |
| 833 | 873 |
| 874 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, |
| 875 NewWindow_OpenerDestroyedWhileUnattached) { |
| 876 TestHelper("testNewWindowOpenerDestroyedWhileUnattached", |
| 877 "web_view/newwindow", |
| 878 NEEDS_TEST_SERVER); |
| 879 ASSERT_EQ(2u, GetGuestViewManager()->guest_add_count()); |
| 880 |
| 881 // We have two guests in this test, one is the intial one, the other |
| 882 // is the newwindow one. |
| 883 // Before the embedder goes away, both the guests should go away. |
| 884 // This ensures that unattached guests are gone if opener is gone. |
| 885 GetGuestViewManager()->WaitForGuestRemoved(2u); |
| 886 } |
| 834 | 887 |
| 835 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, ExecuteCode) { | 888 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, ExecuteCode) { |
| 836 ASSERT_TRUE(RunPlatformAppTestWithArg( | 889 ASSERT_TRUE(RunPlatformAppTestWithArg( |
| 837 "platform_apps/web_view/common", "execute_code")) << message_; | 890 "platform_apps/web_view/common", "execute_code")) << message_; |
| 838 } | 891 } |
| 839 | 892 |
| 840 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, PopupPositioningBasic) { | 893 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, PopupPositioningBasic) { |
| 841 TestHelper("testBasic", "web_view/popup_positioning", NO_TEST_SERVER); | 894 TestHelper("testBasic", "web_view/popup_positioning", NO_TEST_SERVER); |
| 842 ASSERT_TRUE(guest_web_contents()); | 895 ASSERT_TRUE(guest_web_contents()); |
| 843 PopupTestHelper(gfx::Point()); | 896 PopupTestHelper(gfx::Point()); |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1107 | 1160 |
| 1108 // Now verify that the selection text propagates properly to RWHV. | 1161 // Now verify that the selection text propagates properly to RWHV. |
| 1109 content::RenderWidgetHostView* guest_rwhv = | 1162 content::RenderWidgetHostView* guest_rwhv = |
| 1110 guest_web_contents()->GetRenderWidgetHostView(); | 1163 guest_web_contents()->GetRenderWidgetHostView(); |
| 1111 ASSERT_TRUE(guest_rwhv); | 1164 ASSERT_TRUE(guest_rwhv); |
| 1112 std::string selected_text = base::UTF16ToUTF8(guest_rwhv->GetSelectedText()); | 1165 std::string selected_text = base::UTF16ToUTF8(guest_rwhv->GetSelectedText()); |
| 1113 ASSERT_TRUE(selected_text.size() >= 10u); | 1166 ASSERT_TRUE(selected_text.size() >= 10u); |
| 1114 ASSERT_EQ("AAAAAAAAAA", selected_text.substr(0, 10)); | 1167 ASSERT_EQ("AAAAAAAAAA", selected_text.substr(0, 10)); |
| 1115 } | 1168 } |
| 1116 #endif | 1169 #endif |
| OLD | NEW |