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

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

Issue 334923002: Remove ContentBrowserClient::GuestWebContentsAttached (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_adview
Patch Set: Hopefully fixed tests Created 6 years, 6 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 "apps/app_window.h" 5 #include "apps/app_window.h"
6 #include "apps/app_window_registry.h" 6 #include "apps/app_window_registry.h"
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/app/chrome_command_ids.h" 9 #include "chrome/app/chrome_command_ids.h"
10 #include "chrome/browser/apps/app_browsertest_util.h" 10 #include "chrome/browser/apps/app_browsertest_util.h"
11 #include "chrome/browser/chrome_content_browser_client.h" 11 #include "chrome/browser/chrome_content_browser_client.h"
12 #include "chrome/browser/extensions/extension_test_message_listener.h" 12 #include "chrome/browser/extensions/extension_test_message_listener.h"
13 #include "chrome/browser/guest_view/guest_view_base.h" 13 #include "chrome/browser/guest_view/guest_view_base.h"
14 #include "chrome/browser/guest_view/guest_view_manager.h"
15 #include "chrome/browser/guest_view/guest_view_manager_factory.h"
14 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/renderer_context_menu/render_view_context_menu_browsert est_util.h" 17 #include "chrome/browser/renderer_context_menu/render_view_context_menu_browsert est_util.h"
16 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_uti l.h" 18 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_uti l.h"
17 #include "chrome/test/base/interactive_test_utils.h" 19 #include "chrome/test/base/interactive_test_utils.h"
18 #include "chrome/test/base/test_launcher_utils.h" 20 #include "chrome/test/base/test_launcher_utils.h"
19 #include "chrome/test/base/ui_test_utils.h" 21 #include "chrome/test/base/ui_test_utils.h"
20 #include "content/public/browser/notification_service.h" 22 #include "content/public/browser/notification_service.h"
21 #include "content/public/browser/render_process_host.h" 23 #include "content/public/browser/render_process_host.h"
22 #include "content/public/browser/render_view_host.h" 24 #include "content/public/browser/render_view_host.h"
23 #include "content/public/browser/render_widget_host_iterator.h" 25 #include "content/public/browser/render_widget_host_iterator.h"
24 #include "content/public/browser/render_widget_host_view.h" 26 #include "content/public/browser/render_widget_host_view.h"
25 #include "content/public/browser/web_contents.h" 27 #include "content/public/browser/web_contents.h"
26 #include "content/public/common/content_switches.h" 28 #include "content/public/common/content_switches.h"
27 #include "content/public/test/browser_test_utils.h" 29 #include "content/public/test/browser_test_utils.h"
28 #include "net/test/embedded_test_server/embedded_test_server.h" 30 #include "net/test/embedded_test_server/embedded_test_server.h"
29 #include "ui/base/ime/composition_text.h" 31 #include "ui/base/ime/composition_text.h"
30 #include "ui/base/ime/text_input_client.h" 32 #include "ui/base/ime/text_input_client.h"
31 #include "ui/base/test/ui_controls.h" 33 #include "ui/base/test/ui_controls.h"
32 #include "ui/events/keycodes/keyboard_codes.h" 34 #include "ui/events/keycodes/keyboard_codes.h"
33 35
34 using apps::AppWindow; 36 using apps::AppWindow;
35 37
38 class TestGuestViewManager : public GuestViewManager {
39 public:
40 explicit TestGuestViewManager(content::BrowserContext* context) :
41 GuestViewManager(context),
42 web_contents_(NULL) {}
43
44 content::WebContents* WaitForGuestCreated() {
45 if (web_contents_)
46 return web_contents_;
47
48 message_loop_runner_ = new content::MessageLoopRunner;
49 message_loop_runner_->Run();
50 return web_contents_;
51 }
52
53 private:
54 // GuestViewManager override:
55 virtual void AddGuest(int guest_instance_id,
56 content::WebContents* guest_web_contents) OVERRIDE{
57 GuestViewManager::AddGuest(guest_instance_id, guest_web_contents);
58 web_contents_ = guest_web_contents;
59
60 if (message_loop_runner_)
61 message_loop_runner_->Quit();
62 }
63
64 content::WebContents* web_contents_;
65 scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
66 };
67
68 // Test factory for creating test instances of GuestViewManager.
69 class TestGuestViewManagerFactory : public GuestViewManagerFactory {
70 public:
71 TestGuestViewManagerFactory() :
72 test_guest_view_manager_(NULL) {}
73
74 virtual ~TestGuestViewManagerFactory() {}
75
76 virtual GuestViewManager* CreateGuestViewManager(
77 content::BrowserContext* context) OVERRIDE {
78 return GetManager(context);
79 }
80
81 TestGuestViewManager* GetManager(content::BrowserContext* context) {
82 if (!test_guest_view_manager_) {
83 test_guest_view_manager_ = new TestGuestViewManager(context);
84 }
85 return test_guest_view_manager_;
86 }
87
88 private:
89 TestGuestViewManager* test_guest_view_manager_;
90
91 DISALLOW_COPY_AND_ASSIGN(TestGuestViewManagerFactory);
92 };
93
36 class WebViewInteractiveTest 94 class WebViewInteractiveTest
37 : public extensions::PlatformAppBrowserTest { 95 : public extensions::PlatformAppBrowserTest {
38 public: 96 public:
39 WebViewInteractiveTest() 97 WebViewInteractiveTest()
40 : guest_web_contents_(NULL), 98 : guest_web_contents_(NULL),
41 embedder_web_contents_(NULL), 99 embedder_web_contents_(NULL),
42 corner_(gfx::Point()), 100 corner_(gfx::Point()),
43 mouse_click_result_(false), 101 mouse_click_result_(false),
44 first_click_(true) {} 102 first_click_(true) {
103 GuestViewManager::set_factory_for_testing(&factory_);
104 }
105
106 TestGuestViewManager* GetGuestViewManager() {
107 return factory_.GetManager(browser()->profile());
108 }
45 109
46 void MoveMouseInsideWindowWithListener(gfx::Point point, 110 void MoveMouseInsideWindowWithListener(gfx::Point point,
47 const std::string& message) { 111 const std::string& message) {
48 ExtensionTestMessageListener move_listener(message, false); 112 ExtensionTestMessageListener move_listener(message, false);
49 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync( 113 ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(
50 gfx::Point(corner_.x() + point.x(), corner_.y() + point.y()))); 114 gfx::Point(corner_.x() + point.x(), corner_.y() + point.y())));
51 ASSERT_TRUE(move_listener.WaitUntilSatisfied()); 115 ASSERT_TRUE(move_listener.WaitUntilSatisfied());
52 } 116 }
53 117
54 void SendMouseClickWithListener(ui_controls::MouseButton button, 118 void SendMouseClickWithListener(ui_controls::MouseButton button,
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 LOG(ERROR) << "UNABLE TO START TEST"; 243 LOG(ERROR) << "UNABLE TO START TEST";
180 return scoped_ptr<ExtensionTestMessageListener>(); 244 return scoped_ptr<ExtensionTestMessageListener>();
181 } 245 }
182 246
183 return done_listener.Pass(); 247 return done_listener.Pass();
184 } 248 }
185 249
186 void TestHelper(const std::string& test_name, 250 void TestHelper(const std::string& test_name,
187 const std::string& app_location, 251 const std::string& app_location,
188 TestServer test_server) { 252 TestServer test_server) {
189 GuestContentBrowserClient new_client;
190 content::ContentBrowserClient* old_client =
191 SetBrowserClientForTesting(&new_client);
192
193 content::WebContents* embedder_web_contents = NULL; 253 content::WebContents* embedder_web_contents = NULL;
194 scoped_ptr<ExtensionTestMessageListener> done_listener( 254 scoped_ptr<ExtensionTestMessageListener> done_listener(
195 RunAppHelper( 255 RunAppHelper(
196 test_name, app_location, test_server, &embedder_web_contents)); 256 test_name, app_location, test_server, &embedder_web_contents));
197 257
198 ASSERT_TRUE(done_listener); 258 ASSERT_TRUE(done_listener);
199 ASSERT_TRUE(done_listener->WaitUntilSatisfied()); 259 ASSERT_TRUE(done_listener->WaitUntilSatisfied());
200 260
201 guest_web_contents_ = new_client.WaitForGuestCreated(); 261 guest_web_contents_ = GetGuestViewManager()->WaitForGuestCreated();
202 // Reset the browser client so that we do not notice any unexpected
203 // behavior.
204 SetBrowserClientForTesting(old_client);
205 } 262 }
206 263
207 void RunTest(const std::string& app_name) { 264 void RunTest(const std::string& app_name) {
208 } 265 }
209 void SetupTest(const std::string& app_name, 266 void SetupTest(const std::string& app_name,
210 const std::string& guest_url_spec) { 267 const std::string& guest_url_spec) {
211 ASSERT_TRUE(StartEmbeddedTestServer()); 268 ASSERT_TRUE(StartEmbeddedTestServer());
212 GURL::Replacements replace_host; 269 GURL::Replacements replace_host;
213 std::string host_str("localhost"); // Must stay in scope with replace_host. 270 std::string host_str("localhost"); // Must stay in scope with replace_host.
214 replace_host.SetHostStr(host_str); 271 replace_host.SetHostStr(host_str);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 std::string last_drop_data; 497 std::string last_drop_data;
441 EXPECT_TRUE(content::ExecuteScriptAndExtractString( 498 EXPECT_TRUE(content::ExecuteScriptAndExtractString(
442 embedder_web_contents_, 499 embedder_web_contents_,
443 "window.domAutomationController.send(getLastDropData())", 500 "window.domAutomationController.send(getLastDropData())",
444 &last_drop_data)); 501 &last_drop_data));
445 502
446 last_drop_data_ = last_drop_data; 503 last_drop_data_ = last_drop_data;
447 } 504 }
448 505
449 protected: 506 protected:
507 TestGuestViewManagerFactory factory_;
450 content::WebContents* guest_web_contents_; 508 content::WebContents* guest_web_contents_;
451 content::WebContents* embedder_web_contents_; 509 content::WebContents* embedder_web_contents_;
452 gfx::Point corner_; 510 gfx::Point corner_;
453 bool mouse_click_result_; 511 bool mouse_click_result_;
454 bool first_click_; 512 bool first_click_;
455 // Only used in drag/drop test. 513 // Only used in drag/drop test.
456 base::Closure quit_closure_; 514 base::Closure quit_closure_;
457 std::string last_drop_data_; 515 std::string last_drop_data_;
458
459 private:
460 // Used to get notified when a guest is created.
461 class GuestContentBrowserClient : public chrome::ChromeContentBrowserClient {
462 public:
463 GuestContentBrowserClient() : web_contents_(NULL) {}
464
465 content::WebContents* WaitForGuestCreated() {
466 if (web_contents_)
467 return web_contents_;
468
469 message_loop_runner_ = new content::MessageLoopRunner;
470 message_loop_runner_->Run();
471 return web_contents_;
472 }
473
474 private:
475 // ChromeContentBrowserClient implementation:
476 virtual void GuestWebContentsAttached(
477 content::WebContents* guest_web_contents,
478 content::WebContents* embedder_web_contents,
479 const base::DictionaryValue& extra_params) OVERRIDE {
480 ChromeContentBrowserClient::GuestWebContentsAttached(
481 guest_web_contents, embedder_web_contents, extra_params);
482 web_contents_ = guest_web_contents;
483
484 if (message_loop_runner_)
485 message_loop_runner_->Quit();
486 }
487
488 content::WebContents* web_contents_;
489 scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
490 };
491 }; 516 };
492 517
493 // ui_test_utils::SendMouseMoveSync doesn't seem to work on OS_MACOSX, and 518 // ui_test_utils::SendMouseMoveSync doesn't seem to work on OS_MACOSX, and
494 // likely won't work on many other platforms as well, so for now this test 519 // likely won't work on many other platforms as well, so for now this test
495 // is for Windows and Linux only. As of Sept 17th, 2013 this test is disabled 520 // is for Windows and Linux only. As of Sept 17th, 2013 this test is disabled
496 // on Windows due to flakines, see http://crbug.com/293445. 521 // on Windows due to flakines, see http://crbug.com/293445.
497 522
498 // Disabled on Linux Aura because pointer lock does not work on Linux Aura. 523 // Disabled on Linux Aura because pointer lock does not work on Linux Aura.
499 // crbug.com/341876 524 // crbug.com/341876
500 525
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
1054 1079
1055 // Now verify that the selection text propagates properly to RWHV. 1080 // Now verify that the selection text propagates properly to RWHV.
1056 content::RenderWidgetHostView* guest_rwhv = 1081 content::RenderWidgetHostView* guest_rwhv =
1057 guest_web_contents()->GetRenderWidgetHostView(); 1082 guest_web_contents()->GetRenderWidgetHostView();
1058 ASSERT_TRUE(guest_rwhv); 1083 ASSERT_TRUE(guest_rwhv);
1059 std::string selected_text = base::UTF16ToUTF8(guest_rwhv->GetSelectedText()); 1084 std::string selected_text = base::UTF16ToUTF8(guest_rwhv->GetSelectedText());
1060 ASSERT_TRUE(selected_text.size() >= 10u); 1085 ASSERT_TRUE(selected_text.size() >= 10u);
1061 ASSERT_EQ("AAAAAAAAAA", selected_text.substr(0, 10)); 1086 ASSERT_EQ("AAAAAAAAAA", selected_text.substr(0, 10));
1062 } 1087 }
1063 #endif 1088 #endif
OLDNEW
« no previous file with comments | « chrome/browser/apps/web_view_browsertest.cc ('k') | chrome/browser/chrome_content_browser_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698