| 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 f3415cbc03c29f834ea3d24c4e2624c92df19719..e3978800fae64e78ea526b890d9797c5906b0938 100644
|
| --- a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
|
| +++ b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
|
| @@ -481,6 +481,88 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, EmbedderVisibilityChanged) {
|
| test_guest()->WaitUntilHidden();
|
| }
|
|
|
| +namespace {
|
| +
|
| +bool IsAttributeNull(RenderFrameHost* rfh, const std::string& attribute) {
|
| + scoped_ptr<base::Value> value = content::ExecuteScriptAndGetValue(
|
| + rfh,
|
| + "document.getElementById('plugin').getAttribute('" + attribute + "');");
|
| + return value->GetType() == base::Value::TYPE_NULL;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// Verifies that setting the src attribute prior to DOM attachment works, i.e.
|
| +// that the BrowserPlugin is created without having a renderer.
|
| +const char kHTMLForGuestLateAttach[] =
|
| + "data:text/html,<html><title>late attach</title>"
|
| + "<body>hello world</body></html>";
|
| +
|
| +IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, PluginCreatedWithoutRenderer) {
|
| + const char kEmbedderURL[] = "/browser_plugin_embedder_late_attach.html";
|
| + StartBrowserPluginTest(
|
| + kEmbedderURL, kHTMLForGuestLateAttach, true, std::string());
|
| +
|
| + // Attach the browser plugin to the dom. We don't pass this to
|
| + // StartBrowserPluginTest since we want it to execute after the src parameter
|
| + // is set.
|
| + ExecuteSyncJSFunction(shell()->web_contents()->GetMainFrame(),
|
| + "attachPlugin();");
|
| +
|
| + // Verify attachment with src attribute intact.
|
| + EXPECT_FALSE(
|
| + IsAttributeNull(shell()->web_contents()->GetMainFrame(), "src"));
|
| +
|
| + // Verify page loaded properly by checking title.
|
| + const base::string16 expected_title = ASCIIToUTF16("late attach");
|
| + EXPECT_EQ(expected_title, test_guest()->web_contents()->GetTitle());
|
| +}
|
| +
|
| +// Verifies that browser-plugin state survives setting "display = none", i.e.
|
| +// that the BrowserPlugin object is persisted.
|
| +const char kHTMLForGuestPersisted[] =
|
| + "data:text/html,<html><title>persisted</title>"
|
| + "<body>hello world</body></html>";
|
| +
|
| +IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, PluginPersists) {
|
| + const char kEmbedderURL[] = "/browser_plugin_embedder.html";
|
| + StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, std::string());
|
| +
|
| + const char kGuestTitle[] = "persisted";
|
| + const char kGuestTitleModified[] = "still persisted";
|
| +
|
| + // Verify title is seen.
|
| + const base::string16 expected_title = ASCIIToUTF16(kGuestTitle);
|
| + {
|
| + content::TitleWatcher title_watcher(test_guest()->web_contents(),
|
| + expected_title);
|
| + ExecuteSyncJSFunction(
|
| + test_embedder()->web_contents()->GetMainFrame(),
|
| + base::StringPrintf("SetSrc('%s');", kHTMLForGuestPersisted));
|
| + base::string16 actual_title = title_watcher.WaitAndGetTitle();
|
| + EXPECT_EQ(expected_title, actual_title);
|
| + }
|
| +
|
| + // Set display none, verify title not seen.
|
| + ExecuteSyncJSFunction(
|
| + shell()->web_contents()->GetMainFrame(),
|
| + "document.getElementById('plugin').style.display = 'none'");
|
| +
|
| + ExecuteSyncJSFunction(
|
| + test_guest()->web_contents()->GetMainFrame(),
|
| + base::StringPrintf("document.title = '%s'", kGuestTitleModified));
|
| +
|
| + // Clear display none.
|
| + ExecuteSyncJSFunction(
|
| + shell()->web_contents()->GetMainFrame(),
|
| + "document.getElementById('plugin').style.display = 'block'");
|
| +
|
| + // The guest title should have survived the display:none.
|
| + const base::string16 expected_title_modified =
|
| + ASCIIToUTF16(kGuestTitleModified);
|
| + EXPECT_EQ(test_guest()->web_contents()->GetTitle(), expected_title_modified);
|
| +}
|
| +
|
| // 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) {
|
|
|