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

Unified Diff: content/browser/browser_plugin/browser_plugin_host_browsertest.cc

Issue 11088043: browser-plugin: Allow accepting drag-n-drop events. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/browser_plugin/browser_plugin_host_browsertest.cc
diff --git a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
index 703a4f9e894ce006e34f8cb50df369202d02aa0e..d2aafbfa59358b241c729914e78071a07ca8f7de 100644
--- a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
+++ b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
@@ -17,6 +17,7 @@
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_view_host_observer.h"
+#include "content/public/browser/render_widget_host_view.h"
#include "content/public/common/content_switches.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_utils.h"
@@ -35,9 +36,9 @@ using content::BrowserPluginHostFactory;
namespace {
-const char* kHTMLForGuest =
+const char kHTMLForGuest[] =
"data:text/html,<html><body>hello world</body></html>";
-const char* kHTMLForGuestInfiniteLoop =
+const char kHTMLForGuestInfiniteLoop[] =
"data:text/html,<html><head><script type=\"text/javascript\">"
"function StartInfiniteLoop() {"
" setTimeout(function () {while (true) {} }, 0);"
@@ -56,11 +57,22 @@ const char kHTMLForGuestTouchHandler[] =
" handler);"
"}"
"</script></html>";
-const char* kHTMLForGuestWithTitle =
+const char kHTMLForGuestWithTitle[] =
"data:text/html,"
"<html><head><title>%s</title></head>"
"<body>hello world</body>"
"</html>";
+const char kHTMLForGuestAcceptDrag[] =
+ "data:text/html,<html><body>"
+ "<script>"
+ "function dropped() {"
+ " document.title = \"DROPPED\";"
+ "}"
+ "</script>"
+ "<textarea id=\"text\" style=\"width:100%; height: 100%\""
+ " ondrop=\"dropped();\">"
+ "</textarea>"
+ "</body></html>";
std::string GetHTMLForGuestWithTitle(const std::string& title) {
return StringPrintf(kHTMLForGuestWithTitle, title.c_str());
@@ -233,6 +245,13 @@ class BrowserPluginHostTest : public ContentBrowserTest {
false); // command.
}
+ // Executes the javascript sunchronously and makes sure the returned value is
Charlie Reis 2012/10/11 21:28:20 nit: synchronously
sadrul 2012/10/12 00:18:47 Done.
+ // freed properly.
+ void ExecuteSyncJSFunction(RenderViewHost* rvh, const string16& jscript) {
+ scoped_ptr<base::Value> value(rvh->ExecuteJavascriptAndGetValue(
+ string16(), jscript));
+ }
+
// This helper method does the following:
// 1. Start the test server and navigate the shell to |embedder_url|.
// 2. Execute custom pre-navigation |embedder_code| if provided.
@@ -254,18 +273,16 @@ class BrowserPluginHostTest : public ContentBrowserTest {
// Allow the test to do some operations on the embedder before we perform
// the first navigation of the guest.
- if (!embedder_code.empty()) {
- rvh->ExecuteJavascriptAndGetValue(string16(),
- ASCIIToUTF16(embedder_code));
- }
+ if (!embedder_code.empty())
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(embedder_code));
if (!is_guest_data_url) {
test_url = test_server()->GetURL(guest_url);
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
- StringPrintf("SetSrc('%s');", test_url.spec().c_str())));
+ ExecuteSyncJSFunction(rvh,
+ ASCIIToUTF16(StringPrintf("SetSrc('%s');", test_url.spec().c_str())));
} else {
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
- StringPrintf("SetSrc('%s');", guest_url.c_str())));
+ ExecuteSyncJSFunction(rvh,
+ ASCIIToUTF16(StringPrintf("SetSrc('%s');", guest_url.c_str())));
}
// Wait to make sure embedder is created/attached to WebContents.
@@ -310,12 +327,11 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, MAYBE_NavigateGuest) {
// Override the hang timeout for guest to be very small.
content::BrowserPluginGuest::set_factory_for_testing(
TestShortHangTimeoutGuestFactory::GetInstance());
- const char* kEmbedderURL = "files/browser_plugin_embedder_crash.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder_crash.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuestInfiniteLoop, true, "");
- test_guest()->web_contents()->
- GetRenderViewHost()->ExecuteJavascriptAndGetValue(
- string16(), ASCIIToUTF16("StartInfiniteLoop();"));
+ ExecuteSyncJSFunction(test_guest()->web_contents()->GetRenderViewHost(),
+ ASCIIToUTF16("StartInfiniteLoop();"));
// Send a mouse event to the guest.
SimulateMouseClick(test_embedder()->web_contents());
@@ -334,7 +350,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, NavigateAfterResize) {
const gfx::Size nxt_size = gfx::Size(100, 200);
const std::string embedder_code =
StringPrintf("SetSize(%d, %d);", nxt_size.width(), nxt_size.height());
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, embedder_code);
// Wait for the guest to receive a damage buffer of size 100x200.
@@ -343,7 +359,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, NavigateAfterResize) {
}
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, AdvanceFocus) {
- const char* kEmbedderURL = "files/browser_plugin_focus.html";
+ const char kEmbedderURL[] = "files/browser_plugin_focus.html";
const char* kGuestURL = "files/browser_plugin_focus_child.html";
StartBrowserPluginTest(kEmbedderURL, kGuestURL, false, "");
@@ -374,7 +390,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, EmbedderChangedAfterSwap) {
ASSERT_TRUE(https_server.Start());
// 1. Load an embedder page with one guest in it.
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, "");
// 2. Navigate to a URL in https, so we trigger a RenderViewHost swap.
@@ -400,7 +416,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, EmbedderChangedAfterSwap) {
// therefore the embedder created on first page navigation stays the same in
// web_contents.
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, EmbedderSameAfterNav) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, "");
WebContentsImpl* embedder_web_contents = test_embedder()->web_contents();
@@ -425,13 +441,13 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, EmbedderSameAfterNav) {
// This test verifies that hiding the embedder also hides the guest.
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, BrowserPluginVisibilityChanged) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, "");
// Hide the Browser Plugin.
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
test_embedder()->web_contents()->GetRenderViewHost());
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(
"document.getElementById('plugin').style.visibility = 'hidden'"));
// Make sure that the guest is hidden.
@@ -439,7 +455,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, BrowserPluginVisibilityChanged) {
}
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, EmbedderVisibilityChanged) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, "");
// Hide the embedder.
@@ -451,14 +467,14 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, EmbedderVisibilityChanged) {
// This test verifies that calling the reload method reloads the guest.
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, ReloadGuest) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, "");
test_guest()->ResetUpdateRectCount();
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
test_embedder()->web_contents()->GetRenderViewHost());
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(
"document.getElementById('plugin').reload()"));
test_guest()->WaitForReload();
}
@@ -466,12 +482,12 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, ReloadGuest) {
// This test verifies that calling the stop method forwards the stop request
// to the guest's WebContents.
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, StopGuest) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, "");
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
test_embedder()->web_contents()->GetRenderViewHost());
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(
"document.getElementById('plugin').stop()"));
test_guest()->WaitForStop();
}
@@ -479,7 +495,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, StopGuest) {
// Verifies that installing/uninstalling touch-event handlers in the guest
// plugin correctly updates the touch-event handling state in the embedder.
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, AcceptTouchEvents) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuestTouchHandler, true, "");
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
@@ -491,24 +507,22 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, AcceptTouchEvents) {
// start listening for touch events too.
RenderViewHostMessageObserver observer(rvh,
ViewHostMsg_HasTouchEventHandlers::ID);
- test_guest()->web_contents()->
- GetRenderViewHost()->ExecuteJavascriptAndGetValue(
- string16(), ASCIIToUTF16("InstallTouchHandler();"));
+ ExecuteSyncJSFunction(test_guest()->web_contents()->GetRenderViewHost(),
+ ASCIIToUTF16("InstallTouchHandler();"));
observer.WaitUntilMessageReceived();
EXPECT_TRUE(rvh->has_touch_handler());
// Uninstalling the touch-handler in guest should cause the embedder to stop
// listening for touch events.
observer.ResetState();
- test_guest()->web_contents()->
- GetRenderViewHost()->ExecuteJavascriptAndGetValue(
- string16(), ASCIIToUTF16("UninstallTouchHandler();"));
+ ExecuteSyncJSFunction(test_guest()->web_contents()->GetRenderViewHost(),
+ ASCIIToUTF16("UninstallTouchHandler();"));
observer.WaitUntilMessageReceived();
EXPECT_FALSE(rvh->has_touch_handler());
}
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, Renavigate) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(
kEmbedderURL, GetHTMLForGuestWithTitle("P1"), true, "");
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
@@ -520,8 +534,8 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, Renavigate) {
content::TitleWatcher title_watcher(test_guest()->web_contents(),
expected_title);
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
- StringPrintf("SetSrc('%s');", GetHTMLForGuestWithTitle("P2").c_str())));
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(StringPrintf("SetSrc('%s');",
+ GetHTMLForGuestWithTitle("P2").c_str())));
string16 actual_title = title_watcher.WaitAndGetTitle();
EXPECT_EQ(expected_title, actual_title);
@@ -533,8 +547,8 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, Renavigate) {
content::TitleWatcher title_watcher(test_guest()->web_contents(),
expected_title);
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
- StringPrintf("SetSrc('%s');", GetHTMLForGuestWithTitle("P3").c_str())));
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(StringPrintf("SetSrc('%s');",
+ GetHTMLForGuestWithTitle("P3").c_str())));
string16 actual_title = title_watcher.WaitAndGetTitle();
EXPECT_EQ(expected_title, actual_title);
@@ -546,8 +560,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, Renavigate) {
content::TitleWatcher title_watcher(test_guest()->web_contents(),
expected_title);
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16("Back();"));
-
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16("Back();"));
string16 actual_title = title_watcher.WaitAndGetTitle();
EXPECT_EQ(expected_title, actual_title);
}
@@ -558,8 +571,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, Renavigate) {
content::TitleWatcher title_watcher(test_guest()->web_contents(),
expected_title);
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16("Forward();"));
-
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16("Forward();"));
string16 actual_title = title_watcher.WaitAndGetTitle();
EXPECT_EQ(expected_title, actual_title);
}
@@ -570,8 +582,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, Renavigate) {
content::TitleWatcher title_watcher(test_guest()->web_contents(),
expected_title);
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16("Go(-2);"));
-
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16("Go(-2);"));
string16 actual_title = title_watcher.WaitAndGetTitle();
EXPECT_EQ(expected_title, actual_title);
}
@@ -580,7 +591,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, Renavigate) {
// This tests verifies that reloading the embedder does not crash the browser
// and that the guest is reset.
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, ReloadEmbedder) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, "");
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
test_embedder()->web_contents()->GetRenderViewHost());
@@ -593,8 +604,8 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, ReloadEmbedder) {
content::TitleWatcher title_watcher(test_embedder()->web_contents(),
expected_title);
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
- StringPrintf("SetTitle('%s');", "modified")));
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(StringPrintf("SetTitle('%s');",
+ "modified")));
string16 actual_title = title_watcher.WaitAndGetTitle();
EXPECT_EQ(expected_title, actual_title);
@@ -611,9 +622,8 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, ReloadEmbedder) {
string16 actual_title = title_watcher.WaitAndGetTitle();
EXPECT_EQ(expected_title, actual_title);
- test_embedder()->web_contents()->GetRenderViewHost()->
- ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
- StringPrintf("SetSrc('%s');", kHTMLForGuest)));
+ ExecuteSyncJSFunction(test_embedder()->web_contents()->GetRenderViewHost(),
+ ASCIIToUTF16(StringPrintf("SetSrc('%s');", kHTMLForGuest)));
const BrowserPluginEmbedder::ContainerInstanceMap& instance_map =
test_embedder()->guest_web_contents_for_testing();
@@ -629,12 +639,12 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, ReloadEmbedder) {
}
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, TerminateGuest) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, "");
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
test_embedder()->web_contents()->GetRenderViewHost());
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(
"document.getElementById('plugin').terminate()"));
// Expect the guest to crash.
@@ -642,7 +652,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, TerminateGuest) {
}
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, LoadStart) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, "about:blank", true, "");
const string16 expected_title = ASCIIToUTF16(kHTMLForGuest);
@@ -651,7 +661,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, LoadStart) {
// Renavigate the guest to |kHTMLForGuest|.
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
test_embedder()->web_contents()->GetRenderViewHost());
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(
StringPrintf("SetSrc('%s');", kHTMLForGuest)));
string16 actual_title = title_watcher.WaitAndGetTitle();
@@ -659,7 +669,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, LoadStart) {
}
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, LoadAbort) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, "about:blank", true, "");
const string16 expected_title = ASCIIToUTF16("ERR_EMPTY_RESPONSE");
@@ -670,7 +680,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, LoadAbort) {
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
test_embedder()->web_contents()->GetRenderViewHost());
GURL test_url = test_server()->GetURL("close-socket");
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(
StringPrintf("SetSrc('%s');", test_url.spec().c_str())));
string16 actual_title = title_watcher.WaitAndGetTitle();
@@ -678,7 +688,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, LoadAbort) {
}
IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, LoadRedirect) {
- const char* kEmbedderURL = "files/browser_plugin_embedder.html";
+ const char kEmbedderURL[] = "files/browser_plugin_embedder.html";
StartBrowserPluginTest(kEmbedderURL, "about:blank", true, "");
const string16 expected_title = ASCIIToUTF16("redirected");
@@ -690,23 +700,70 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, LoadRedirect) {
"server-redirect?files/title1.html"));
RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
test_embedder()->web_contents()->GetRenderViewHost());
- rvh->ExecuteJavascriptAndGetValue(string16(), ASCIIToUTF16(
+ ExecuteSyncJSFunction(rvh, ASCIIToUTF16(
StringPrintf("SetSrc('%s');", redirect_url.spec().c_str())));
string16 actual_title = title_watcher.WaitAndGetTitle();
EXPECT_EQ(expected_title, actual_title);
// Verify that we heard a loadRedirect during the navigation.
- base::Value* v = rvh->ExecuteJavascriptAndGetValue(
- string16(), ASCIIToUTF16("redirectOldUrl"));
+ scoped_ptr<base::Value> value(rvh->ExecuteJavascriptAndGetValue(
+ string16(), ASCIIToUTF16("redirectOldUrl")));
std::string result;
- EXPECT_TRUE(v->GetAsString(&result));
+ EXPECT_TRUE(value->GetAsString(&result));
EXPECT_EQ(redirect_url.spec().c_str(), result);
- v = rvh->ExecuteJavascriptAndGetValue(
- string16(), ASCIIToUTF16("redirectNewUrl"));
- EXPECT_TRUE(v->GetAsString(&result));
+ value.reset(rvh->ExecuteJavascriptAndGetValue(
+ string16(), ASCIIToUTF16("redirectNewUrl")));
+ EXPECT_TRUE(value->GetAsString(&result));
EXPECT_EQ(test_server()->GetURL("files/title1.html").spec().c_str(), result);
}
+// Tests that a drag-n-drop over the browser plugin in the embedder happens
+// correctly.
+IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, AcceptDragEvents) {
+ const char kEmbedderURL[] = "files/browser_plugin_dragging.html";
+ StartBrowserPluginTest(kEmbedderURL, kHTMLForGuestAcceptDrag, true, "");
+
+ RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
+ test_embedder()->web_contents()->GetRenderViewHost());
+
+ // Get a location in the embedder outside of the plugin.
+ base::ListValue *start, *end;
+ scoped_ptr<base::Value> value(rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("dragLocation()")));
+ ASSERT_TRUE(value->GetAsList(&start) && start->GetSize() == 2);
+ double start_x, start_y;
+ ASSERT_TRUE(start->GetDouble(0, &start_x) && start->GetDouble(1, &start_y));
+
+ // Get a location in the embedder that falls inside the plugin.
+ value.reset(rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("dropLocation()")));
+ ASSERT_TRUE(value->GetAsList(&end) && end->GetSize() == 2);
+ double end_x, end_y;
+ ASSERT_TRUE(end->GetDouble(0, &end_x) && end->GetDouble(1, &end_y));
+
+ WebDropData drop_data;
+ GURL url = GURL("https://www.domain.com/index.html");
+ drop_data.url = url;
+
+ // Pretend that the URL is being dragged over the embedder. Start the drag
+ // from outside the plugin, then move the drag inside the plugin and drop.
+ // This should trigger appropriate messages from the embedder to the guest,
+ // and end with a drop on the guest. The guest changes title when a drop
+ // happens.
+ const string16 expected_title = ASCIIToUTF16("DROPPED");
+ content::TitleWatcher title_watcher(test_guest()->web_contents(),
+ expected_title);
+
+ rvh->DragTargetDragEnter(drop_data, gfx::Point(start_x, start_y),
+ gfx::Point(start_x, start_y), WebKit::WebDragOperationEvery, 0);
+ rvh->DragTargetDragOver(gfx::Point(end_x, end_y), gfx::Point(end_x, end_y),
+ WebKit::WebDragOperationEvery, 0);
+ rvh->DragTargetDrop(gfx::Point(end_x, end_y), gfx::Point(end_x, end_y), 0);
+
+ string16 actual_title = title_watcher.WaitAndGetTitle();
+ EXPECT_EQ(expected_title, actual_title);
+}
+
} // namespace content
« no previous file with comments | « content/browser/browser_plugin/browser_plugin_guest_helper.cc ('k') | content/common/browser_plugin_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698