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

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..ef10d055d119e0ea4f4a34d34920414b31abe35d 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"
@@ -61,6 +62,17 @@ const char* kHTMLForGuestWithTitle =
"<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());
@@ -709,4 +721,52 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, LoadRedirect) {
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";
dcheng 2012/10/11 20:11:51 Nit: const char[] is preferred to const char* cons
sadrul 2012/10/11 20:41:21 Indeed. I have gone ahead and fixed all to use []
+ 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;
+ base::Value* v = rvh->ExecuteJavascriptAndGetValue(string16(),
dcheng 2012/10/11 20:11:51 Don't we need to delete the return value? Otherwis
sadrul 2012/10/11 20:41:21 You are correct. This value is indeed leaking. I h
+ ASCIIToUTF16("dragLocation()"));
+ ASSERT_TRUE(v->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.
+ v = rvh->ExecuteJavascriptAndGetValue(string16(),
+ ASCIIToUTF16("dropLocation()"));
+ ASSERT_TRUE(v->GetAsList(&end) && start->GetSize() == 2);
+ double end_x, end_y;
+ ASSERT_TRUE(end->GetDouble(0, &end_x) && end->GetDouble(1, &end_y));
+
+ WebDropData drop_data;
+ GURL file_url = GURL("https://www.domain.com/index.html");
dcheng 2012/10/11 20:11:51 Any particular reason this is file_url instead of
sadrul 2012/10/11 20:41:21 copy pasta :) Fixed
+ drop_data.url = file_url;
+ drop_data.html_base_url = file_url;
dcheng 2012/10/11 20:11:51 No need to set html_base_url if there's no HTML as
sadrul 2012/10/11 20:41:21 Fixed.
+
+ // 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

Powered by Google App Engine
This is Rietveld 408576698