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

Side by Side Diff: content/browser/browser_plugin/browser_plugin_host_browsertest.cc

Issue 271593009: Rewrite AcceptTouchEvents test from content_browsertests to browser_tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove repeat macro + remove content_browsertests Created 6 years, 7 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
« no previous file with comments | « chrome/test/data/extensions/platform_apps/web_view/accept_touch_events/test.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/command_line.h" 5 #include "base/command_line.h"
6 #include "base/memory/singleton.h" 6 #include "base/memory/singleton.h"
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/strings/string_split.h" 8 #include "base/strings/string_split.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 using blink::WebInputEvent; 47 using blink::WebInputEvent;
48 using blink::WebMouseEvent; 48 using blink::WebMouseEvent;
49 using content::BrowserPluginEmbedder; 49 using content::BrowserPluginEmbedder;
50 using content::BrowserPluginGuest; 50 using content::BrowserPluginGuest;
51 using content::BrowserPluginHostFactory; 51 using content::BrowserPluginHostFactory;
52 using content::WebContentsImpl; 52 using content::WebContentsImpl;
53 53
54 const char kHTMLForGuest[] = 54 const char kHTMLForGuest[] =
55 "data:text/html,<html><body>hello world</body></html>"; 55 "data:text/html,<html><body>hello world</body></html>";
56 56
57 const char kHTMLForGuestTouchHandler[] =
58 "data:text/html,<html><body><div id=\"touch\">With touch</div></body>"
59 "<script type=\"text/javascript\">"
60 "function handler() {}"
61 "function InstallTouchHandler() { "
62 " document.getElementById(\"touch\").addEventListener(\"touchstart\", "
63 " handler);"
64 "}"
65 "function UninstallTouchHandler() { "
66 " document.getElementById(\"touch\").removeEventListener(\"touchstart\", "
67 " handler);"
68 "}"
69 "</script></html>";
70
71 const char kHTMLForGuestAcceptDrag[] = 57 const char kHTMLForGuestAcceptDrag[] =
72 "data:text/html,<html><body>" 58 "data:text/html,<html><body>"
73 "<script>" 59 "<script>"
74 "function dropped() {" 60 "function dropped() {"
75 " document.title = \"DROPPED\";" 61 " document.title = \"DROPPED\";"
76 "}" 62 "}"
77 "</script>" 63 "</script>"
78 "<textarea id=\"text\" style=\"width:100%; height: 100%\"" 64 "<textarea id=\"text\" style=\"width:100%; height: 100%\""
79 " ondrop=\"dropped();\">" 65 " ondrop=\"dropped();\">"
80 "</textarea>" 66 "</textarea>"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 TestShortHangTimeoutGuestFactory() {} 140 TestShortHangTimeoutGuestFactory() {}
155 virtual ~TestShortHangTimeoutGuestFactory() {} 141 virtual ~TestShortHangTimeoutGuestFactory() {}
156 142
157 private: 143 private:
158 // For Singleton. 144 // For Singleton.
159 friend struct DefaultSingletonTraits<TestShortHangTimeoutGuestFactory>; 145 friend struct DefaultSingletonTraits<TestShortHangTimeoutGuestFactory>;
160 146
161 DISALLOW_COPY_AND_ASSIGN(TestShortHangTimeoutGuestFactory); 147 DISALLOW_COPY_AND_ASSIGN(TestShortHangTimeoutGuestFactory);
162 }; 148 };
163 149
164 // A transparent observer that can be used to verify that a RenderViewHost
165 // received a specific message.
166 class MessageObserver : public WebContentsObserver {
167 public:
168 MessageObserver(WebContents* web_contents, uint32 message_id)
169 : WebContentsObserver(web_contents),
170 message_id_(message_id),
171 message_received_(false) {
172 }
173
174 virtual ~MessageObserver() {}
175
176 void WaitUntilMessageReceived() {
177 if (message_received_)
178 return;
179 message_loop_runner_ = new MessageLoopRunner();
180 message_loop_runner_->Run();
181 }
182
183 void ResetState() {
184 message_received_ = false;
185 }
186
187 // IPC::Listener implementation.
188 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
189 if (message.type() == message_id_) {
190 message_received_ = true;
191 if (message_loop_runner_)
192 message_loop_runner_->Quit();
193 }
194 return false;
195 }
196
197 private:
198 scoped_refptr<MessageLoopRunner> message_loop_runner_;
199 uint32 message_id_;
200 bool message_received_;
201
202 DISALLOW_COPY_AND_ASSIGN(MessageObserver);
203 };
204
205 class BrowserPluginHostTest : public ContentBrowserTest { 150 class BrowserPluginHostTest : public ContentBrowserTest {
206 public: 151 public:
207 BrowserPluginHostTest() 152 BrowserPluginHostTest()
208 : test_embedder_(NULL), 153 : test_embedder_(NULL),
209 test_guest_(NULL), 154 test_guest_(NULL),
210 test_guest_manager_(NULL) {} 155 test_guest_manager_(NULL) {}
211 156
212 virtual void SetUp() OVERRIDE { 157 virtual void SetUp() OVERRIDE {
213 // Override factory to create tests instances of BrowserPlugin*. 158 // Override factory to create tests instances of BrowserPlugin*.
214 BrowserPluginEmbedder::set_factory_for_testing( 159 BrowserPluginEmbedder::set_factory_for_testing(
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 EXPECT_EQ(expected_title, actual_title); 362 EXPECT_EQ(expected_title, actual_title);
418 VLOG(0) << "Done navigating to second page"; 363 VLOG(0) << "Done navigating to second page";
419 364
420 TestBrowserPluginEmbedder* test_embedder_after_nav = 365 TestBrowserPluginEmbedder* test_embedder_after_nav =
421 static_cast<TestBrowserPluginEmbedder*>( 366 static_cast<TestBrowserPluginEmbedder*>(
422 embedder_web_contents->GetBrowserPluginEmbedder()); 367 embedder_web_contents->GetBrowserPluginEmbedder());
423 // Embedder must not change in web_contents. 368 // Embedder must not change in web_contents.
424 ASSERT_EQ(test_embedder_after_nav, test_embedder()); 369 ASSERT_EQ(test_embedder_after_nav, test_embedder());
425 } 370 }
426 371
427 // Verifies that installing/uninstalling touch-event handlers in the guest
428 // plugin correctly updates the touch-event handling state in the embedder.
429 IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, AcceptTouchEvents) {
430 const char kEmbedderURL[] = "/browser_plugin_embedder.html";
431 StartBrowserPluginTest(
432 kEmbedderURL, kHTMLForGuestTouchHandler, true, std::string());
433
434 RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
435 test_embedder()->web_contents()->GetRenderViewHost());
436 // The embedder should not have any touch event handlers at this point.
437 EXPECT_FALSE(rvh->has_touch_handler());
438
439 // Install the touch handler in the guest. This should cause the embedder to
440 // start listening for touch events too.
441 MessageObserver observer(test_embedder()->web_contents(),
442 ViewHostMsg_HasTouchEventHandlers::ID);
443 ExecuteSyncJSFunction(test_guest()->web_contents()->GetMainFrame(),
444 "InstallTouchHandler();");
445 observer.WaitUntilMessageReceived();
446 EXPECT_TRUE(rvh->has_touch_handler());
447
448 // Uninstalling the touch-handler in guest should cause the embedder to stop
449 // listening for touch events.
450 observer.ResetState();
451 ExecuteSyncJSFunction(test_guest()->web_contents()->GetMainFrame(),
452 "UninstallTouchHandler();");
453 observer.WaitUntilMessageReceived();
454 EXPECT_FALSE(rvh->has_touch_handler());
455 }
456
457 // This tests verifies that reloading the embedder does not crash the browser 372 // This tests verifies that reloading the embedder does not crash the browser
458 // and that the guest is reset. 373 // and that the guest is reset.
459 IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, DISABLED_ReloadEmbedder) { 374 IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, DISABLED_ReloadEmbedder) {
460 const char kEmbedderURL[] = "/browser_plugin_embedder.html"; 375 const char kEmbedderURL[] = "/browser_plugin_embedder.html";
461 StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, std::string()); 376 StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, std::string());
462 RenderFrameHost* rfh = test_embedder()->web_contents()->GetMainFrame(); 377 RenderFrameHost* rfh = test_embedder()->web_contents()->GetMainFrame();
463 378
464 // Change the title of the page to 'modified' so that we know that 379 // Change the title of the page to 'modified' so that we know that
465 // the page has successfully reloaded when it goes back to 'embedder' 380 // the page has successfully reloaded when it goes back to 'embedder'
466 // in the next step. 381 // in the next step.
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
997 scoped_ptr<base::Value> value = 912 scoped_ptr<base::Value> value =
998 content::ExecuteScriptAndGetValue( 913 content::ExecuteScriptAndGetValue(
999 guest_rfh, "document.getElementById('input1').value"); 914 guest_rfh, "document.getElementById('input1').value");
1000 std::string actual_value; 915 std::string actual_value;
1001 ASSERT_TRUE(value->GetAsString(&actual_value)); 916 ASSERT_TRUE(value->GetAsString(&actual_value));
1002 EXPECT_EQ(base::UTF16ToUTF8(expected_value), actual_value); 917 EXPECT_EQ(base::UTF16ToUTF8(expected_value), actual_value);
1003 } 918 }
1004 } 919 }
1005 920
1006 } // namespace content 921 } // namespace content
OLDNEW
« no previous file with comments | « chrome/test/data/extensions/platform_apps/web_view/accept_touch_events/test.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698