| 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 4f19031bd257bc3f4d7913ec9b181737d401f87d..907a7c88a9596a4242c51569d7e086152488a01e 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 synchronously and makes sure the returned value is
|
| + // 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,20 +560,18 @@ 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);
|
|
|
| - base::Value* value =
|
| - rvh->ExecuteJavascriptAndGetValue(string16(),
|
| - ASCIIToUTF16("CanGoBack()"));
|
| + scoped_ptr<base::Value> value(rvh->ExecuteJavascriptAndGetValue(string16(),
|
| + ASCIIToUTF16("CanGoBack()")));
|
| bool result = false;
|
| ASSERT_TRUE(value->GetAsBoolean(&result));
|
| EXPECT_TRUE(result);
|
|
|
| - value = rvh->ExecuteJavascriptAndGetValue(string16(),
|
| - ASCIIToUTF16("CanGoForward()"));
|
| + value.reset(rvh->ExecuteJavascriptAndGetValue(string16(),
|
| + ASCIIToUTF16("CanGoForward()")));
|
| result = false;
|
| ASSERT_TRUE(value->GetAsBoolean(&result));
|
| EXPECT_TRUE(result);
|
| @@ -571,14 +583,12 @@ 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);
|
|
|
| - base::Value* value =
|
| - rvh->ExecuteJavascriptAndGetValue(string16(),
|
| - ASCIIToUTF16("CanGoForward()"));
|
| + scoped_ptr<base::Value> value(rvh->ExecuteJavascriptAndGetValue(string16(),
|
| + ASCIIToUTF16("CanGoForward()")));
|
| bool result = true;
|
| ASSERT_TRUE(value->GetAsBoolean(&result));
|
| EXPECT_FALSE(result);
|
| @@ -590,14 +600,12 @@ 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);
|
|
|
| - base::Value* value =
|
| - rvh->ExecuteJavascriptAndGetValue(string16(),
|
| - ASCIIToUTF16("CanGoBack()"));
|
| + scoped_ptr<base::Value> value(rvh->ExecuteJavascriptAndGetValue(string16(),
|
| + ASCIIToUTF16("CanGoBack()")));
|
| bool result = true;
|
| ASSERT_TRUE(value->GetAsBoolean(&result));
|
| EXPECT_FALSE(result);
|
| @@ -607,7 +615,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());
|
| @@ -620,8 +628,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);
|
| @@ -638,9 +646,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();
|
| @@ -656,12 +663,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.
|
| @@ -669,7 +676,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);
|
| @@ -678,7 +685,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();
|
| @@ -686,7 +693,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");
|
| @@ -697,7 +704,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();
|
| @@ -705,7 +712,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");
|
| @@ -717,23 +724,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
|
|
|