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

Side by Side Diff: chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc

Issue 1066563006: GuestView: Move GuestViewManager extension dependencies to ExtensionsGuestViewManagerDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@extensions_guest_view_message_filter
Patch Set: Fixed more tests Created 5 years, 8 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 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/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/renderer_context_menu/render_view_context_menu_browsert est_util.h" 11 #include "chrome/browser/renderer_context_menu/render_view_context_menu_browsert est_util.h"
12 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_uti l.h" 12 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_uti l.h"
13 #include "chrome/test/base/interactive_test_utils.h" 13 #include "chrome/test/base/interactive_test_utils.h"
14 #include "chrome/test/base/test_launcher_utils.h" 14 #include "chrome/test/base/test_launcher_utils.h"
15 #include "chrome/test/base/ui_test_utils.h" 15 #include "chrome/test/base/ui_test_utils.h"
16 #include "content/public/browser/notification_service.h" 16 #include "content/public/browser/notification_service.h"
17 #include "content/public/browser/render_process_host.h" 17 #include "content/public/browser/render_process_host.h"
18 #include "content/public/browser/render_view_host.h" 18 #include "content/public/browser/render_view_host.h"
19 #include "content/public/browser/render_widget_host_iterator.h" 19 #include "content/public/browser/render_widget_host_iterator.h"
20 #include "content/public/browser/render_widget_host_view.h" 20 #include "content/public/browser/render_widget_host_view.h"
21 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
22 #include "content/public/common/content_switches.h" 22 #include "content/public/common/content_switches.h"
23 #include "content/public/test/browser_test_utils.h" 23 #include "content/public/test/browser_test_utils.h"
24 #include "extensions/browser/app_window/app_window.h" 24 #include "extensions/browser/app_window/app_window.h"
25 #include "extensions/browser/app_window/app_window_registry.h" 25 #include "extensions/browser/app_window/app_window_registry.h"
26 #include "extensions/browser/guest_view/extensions_guest_view_manager_delegate.h "
26 #include "extensions/browser/guest_view/guest_view_base.h" 27 #include "extensions/browser/guest_view/guest_view_base.h"
27 #include "extensions/browser/guest_view/guest_view_manager.h" 28 #include "extensions/browser/guest_view/guest_view_manager.h"
28 #include "extensions/browser/guest_view/guest_view_manager_factory.h" 29 #include "extensions/browser/guest_view/guest_view_manager_factory.h"
30 #include "extensions/browser/guest_view/test_guest_view_manager.h"
29 #include "extensions/test/extension_test_message_listener.h" 31 #include "extensions/test/extension_test_message_listener.h"
30 #include "net/test/embedded_test_server/embedded_test_server.h" 32 #include "net/test/embedded_test_server/embedded_test_server.h"
31 #include "ui/base/ime/composition_text.h" 33 #include "ui/base/ime/composition_text.h"
32 #include "ui/base/ime/text_input_client.h" 34 #include "ui/base/ime/text_input_client.h"
33 #include "ui/base/test/ui_controls.h" 35 #include "ui/base/test/ui_controls.h"
34 #include "ui/events/keycodes/keyboard_codes.h" 36 #include "ui/events/keycodes/keyboard_codes.h"
35 37
36 using extensions::AppWindow; 38 using extensions::AppWindow;
37 39 using extensions::ExtensionsGuestViewManagerDelegate;
38 class TestGuestViewManager : public extensions::GuestViewManager { 40 using extensions::GuestViewManager;
39 public: 41 using extensions::TestGuestViewManager;
40 explicit TestGuestViewManager(content::BrowserContext* context)
41 : GuestViewManager(context),
42 guest_add_count_(0),
43 guest_remove_count_(0),
44 web_contents_(NULL) {}
45
46 content::WebContents* WaitForGuestAdded() {
47 if (web_contents_)
48 return web_contents_;
49
50 add_message_loop_runner_ = new content::MessageLoopRunner;
51 add_message_loop_runner_->Run();
52 return web_contents_;
53 }
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
67 private:
68 // GuestViewManager override:
69 void AddGuest(int guest_instance_id,
70 content::WebContents* guest_web_contents) override {
71 GuestViewManager::AddGuest(guest_instance_id, guest_web_contents);
72 web_contents_ = guest_web_contents;
73 ++guest_add_count_;
74
75 if (add_message_loop_runner_.get())
76 add_message_loop_runner_->Quit();
77 }
78
79 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_;
89 content::WebContents* web_contents_;
90 scoped_refptr<content::MessageLoopRunner> add_message_loop_runner_;
91 scoped_refptr<content::MessageLoopRunner> remove_message_loop_runner_;
92 };
93
94 // Test factory for creating test instances of GuestViewManager.
95 class TestGuestViewManagerFactory : public extensions::GuestViewManagerFactory {
96 public:
97 TestGuestViewManagerFactory() :
98 test_guest_view_manager_(NULL) {}
99
100 ~TestGuestViewManagerFactory() override {}
101
102 extensions::GuestViewManager* CreateGuestViewManager(
103 content::BrowserContext* context) override {
104 return GetManager(context);
105 }
106
107 TestGuestViewManager* GetManager(content::BrowserContext* context) {
108 if (!test_guest_view_manager_) {
109 test_guest_view_manager_ = new TestGuestViewManager(context);
110 }
111 return test_guest_view_manager_;
112 }
113
114 private:
115 TestGuestViewManager* test_guest_view_manager_;
116
117 DISALLOW_COPY_AND_ASSIGN(TestGuestViewManagerFactory);
118 };
119 42
120 class WebViewInteractiveTest 43 class WebViewInteractiveTest
121 : public extensions::PlatformAppBrowserTest { 44 : public extensions::PlatformAppBrowserTest {
122 public: 45 public:
123 WebViewInteractiveTest() 46 WebViewInteractiveTest()
124 : guest_web_contents_(NULL), 47 : guest_web_contents_(NULL),
125 embedder_web_contents_(NULL), 48 embedder_web_contents_(NULL),
126 corner_(gfx::Point()), 49 corner_(gfx::Point()),
127 mouse_click_result_(false), 50 mouse_click_result_(false),
128 first_click_(true) { 51 first_click_(true) {
129 extensions::GuestViewManager::set_factory_for_testing(&factory_); 52 extensions::GuestViewManager::set_factory_for_testing(&factory_);
130 } 53 }
131 54
55 void RunTestOnMainThreadLoop() override {
56 extensions::PlatformAppBrowserTest::RunTestOnMainThreadLoop();
57 GetGuestViewManager()->WaitForAllGuestsDeleted();
Fady Samuel 2015/04/24 01:31:24 Note to self: browser() may be undefined at this p
Fady Samuel 2015/04/24 04:37:48 Done.
58 }
59
132 TestGuestViewManager* GetGuestViewManager() { 60 TestGuestViewManager* GetGuestViewManager() {
133 return factory_.GetManager(browser()->profile()); 61 TestGuestViewManager* manager = static_cast<TestGuestViewManager*>(
62 TestGuestViewManager::FromBrowserContext(browser()->profile()));
63 // TestGuestViewManager::WaitForSingleGuestCreated may and will get called
64 // before a guest is created.
65 if (!manager) {
66 manager = static_cast<TestGuestViewManager*>(
67 GuestViewManager::CreateWithDelegate(
68 browser()->profile(),
69 scoped_ptr<guestview::GuestViewManagerDelegate>(
70 new ExtensionsGuestViewManagerDelegate(
71 browser()->profile()))));
72 }
73 return manager;
134 } 74 }
135 75
136 void MoveMouseInsideWindowWithListener(gfx::Point point, 76 void MoveMouseInsideWindowWithListener(gfx::Point point,
137 const std::string& message) { 77 const std::string& message) {
138 ExtensionTestMessageListener move_listener(message, false); 78 ExtensionTestMessageListener move_listener(message, false);
139 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync( 79 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
140 gfx::Point(corner_.x() + point.x(), corner_.y() + point.y()))); 80 gfx::Point(corner_.x() + point.x(), corner_.y() + point.y())));
141 ASSERT_TRUE(move_listener.WaitUntilSatisfied()); 81 ASSERT_TRUE(move_listener.WaitUntilSatisfied());
142 } 82 }
143 83
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 const std::string& app_location, 217 const std::string& app_location,
278 TestServer test_server) { 218 TestServer test_server) {
279 content::WebContents* embedder_web_contents = NULL; 219 content::WebContents* embedder_web_contents = NULL;
280 scoped_ptr<ExtensionTestMessageListener> done_listener( 220 scoped_ptr<ExtensionTestMessageListener> done_listener(
281 RunAppHelper( 221 RunAppHelper(
282 test_name, app_location, test_server, &embedder_web_contents)); 222 test_name, app_location, test_server, &embedder_web_contents));
283 223
284 ASSERT_TRUE(done_listener); 224 ASSERT_TRUE(done_listener);
285 ASSERT_TRUE(done_listener->WaitUntilSatisfied()); 225 ASSERT_TRUE(done_listener->WaitUntilSatisfied());
286 226
287 guest_web_contents_ = GetGuestViewManager()->WaitForGuestAdded(); 227 guest_web_contents_ = GetGuestViewManager()->WaitForSingleGuestCreated();
288 } 228 }
289 229
290 void RunTest(const std::string& app_name) {
291 }
292 void SetupTest(const std::string& app_name, 230 void SetupTest(const std::string& app_name,
293 const std::string& guest_url_spec) { 231 const std::string& guest_url_spec) {
294 ASSERT_TRUE(StartEmbeddedTestServer()); 232 ASSERT_TRUE(StartEmbeddedTestServer());
295 GURL::Replacements replace_host; 233 GURL::Replacements replace_host;
296 replace_host.SetHostStr("localhost"); 234 replace_host.SetHostStr("localhost");
297 235
298 GURL guest_url = embedded_test_server()->GetURL(guest_url_spec); 236 GURL guest_url = embedded_test_server()->GetURL(guest_url_spec);
299 guest_url = guest_url.ReplaceComponents(replace_host); 237 guest_url = guest_url.ReplaceComponents(replace_host);
300 238
301 ui_test_utils::UrlLoadObserver guest_observer( 239 ui_test_utils::UrlLoadObserver guest_observer(
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 "FULLSCREEN_STEP_PASSED", false); 478 "FULLSCREEN_STEP_PASSED", false);
541 passed_listener.set_failure_message("TEST_FAILED"); 479 passed_listener.set_failure_message("TEST_FAILED");
542 content::SimulateMouseClickAt(guest_web_contents(), 480 content::SimulateMouseClickAt(guest_web_contents(),
543 0, 481 0,
544 blink::WebMouseEvent::ButtonLeft, 482 blink::WebMouseEvent::ButtonLeft,
545 gfx::Point(20, 20)); 483 gfx::Point(20, 20));
546 ASSERT_TRUE(passed_listener.WaitUntilSatisfied()); 484 ASSERT_TRUE(passed_listener.WaitUntilSatisfied());
547 } 485 }
548 486
549 protected: 487 protected:
550 TestGuestViewManagerFactory factory_; 488 extensions::TestGuestViewManagerFactory factory_;
551 content::WebContents* guest_web_contents_; 489 content::WebContents* guest_web_contents_;
552 content::WebContents* embedder_web_contents_; 490 content::WebContents* embedder_web_contents_;
553 gfx::Point corner_; 491 gfx::Point corner_;
554 bool mouse_click_result_; 492 bool mouse_click_result_;
555 bool first_click_; 493 bool first_click_;
556 // Only used in drag/drop test. 494 // Only used in drag/drop test.
557 base::Closure quit_closure_; 495 base::Closure quit_closure_;
558 std::string last_drop_data_; 496 std::string last_drop_data_;
559 }; 497 };
560 498
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 // Wait for the embedder to receive a 'newwindow' event. 831 // Wait for the embedder to receive a 'newwindow' event.
894 ASSERT_TRUE(done_listener->WaitUntilSatisfied()); 832 ASSERT_TRUE(done_listener->WaitUntilSatisfied());
895 } 833 }
896 #endif 834 #endif
897 835
898 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, 836 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest,
899 NewWindow_OpenerDestroyedWhileUnattached) { 837 NewWindow_OpenerDestroyedWhileUnattached) {
900 TestHelper("testNewWindowOpenerDestroyedWhileUnattached", 838 TestHelper("testNewWindowOpenerDestroyedWhileUnattached",
901 "web_view/newwindow", 839 "web_view/newwindow",
902 NEEDS_TEST_SERVER); 840 NEEDS_TEST_SERVER);
903 ASSERT_EQ(2u, GetGuestViewManager()->guest_add_count()); 841 ASSERT_EQ(2, GetGuestViewManager()->num_guests_created());
904 842
905 // We have two guests in this test, one is the intial one, the other 843 // We have two guests in this test, one is the intial one, the other
906 // is the newwindow one. 844 // is the newwindow one.
907 // Before the embedder goes away, both the guests should go away. 845 // Before the embedder goes away, both the guests should go away.
908 // This ensures that unattached guests are gone if opener is gone. 846 // This ensures that unattached guests are gone if opener is gone.
909 GetGuestViewManager()->WaitForGuestRemoved(2u); 847 GetGuestViewManager()->WaitForAllGuestsDeleted();
910 } 848 }
911 849
912 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, ExecuteCode) { 850 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, ExecuteCode) {
913 ASSERT_TRUE(RunPlatformAppTestWithArg( 851 ASSERT_TRUE(RunPlatformAppTestWithArg(
914 "platform_apps/web_view/common", "execute_code")) << message_; 852 "platform_apps/web_view/common", "execute_code")) << message_;
915 } 853 }
916 854
917 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, PopupPositioningBasic) { 855 IN_PROC_BROWSER_TEST_F(WebViewInteractiveTest, PopupPositioningBasic) {
918 TestHelper("testBasic", "web_view/popup_positioning", NO_TEST_SERVER); 856 TestHelper("testBasic", "web_view/popup_positioning", NO_TEST_SERVER);
919 ASSERT_TRUE(guest_web_contents()); 857 ASSERT_TRUE(guest_web_contents());
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 1149
1212 // Now verify that the selection text propagates properly to RWHV. 1150 // Now verify that the selection text propagates properly to RWHV.
1213 content::RenderWidgetHostView* guest_rwhv = 1151 content::RenderWidgetHostView* guest_rwhv =
1214 guest_web_contents()->GetRenderWidgetHostView(); 1152 guest_web_contents()->GetRenderWidgetHostView();
1215 ASSERT_TRUE(guest_rwhv); 1153 ASSERT_TRUE(guest_rwhv);
1216 std::string selected_text = base::UTF16ToUTF8(guest_rwhv->GetSelectedText()); 1154 std::string selected_text = base::UTF16ToUTF8(guest_rwhv->GetSelectedText());
1217 ASSERT_TRUE(selected_text.size() >= 10u); 1155 ASSERT_TRUE(selected_text.size() >= 10u);
1218 ASSERT_EQ("AAAAAAAAAA", selected_text.substr(0, 10)); 1156 ASSERT_EQ("AAAAAAAAAA", selected_text.substr(0, 10));
1219 } 1157 }
1220 #endif 1158 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698