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

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

Issue 23591016: BrowserPlugin/WebView - Move plugin lifetime to DOM (Chromium-side) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase CL. Created 7 years, 1 month 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 417d916e58fef857d1b339e0f8709cd935dda2f6..cffa9720499b6f73f88f624cabb181213aca1d71 100644
--- a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
+++ b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
@@ -494,6 +494,70 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, EmbedderVisibilityChanged) {
test_guest()->WaitUntilHidden();
}
+// Verifies that setting the src attribute prior to DOM attachment works, i.e.
+// that the BrowserPlugin is created without having a renderer.
+IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, PluginCreatedWithoutRenderer) {
+ const char kEmbedderURL[] = "/browser_plugin_embedder_late_attach.html";
+ const char kGuestTitle[] = "late attach";
+ StartBrowserPluginTest(
+ kEmbedderURL, GetHTMLForGuestWithTitle(kGuestTitle), 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()->GetRenderViewHost(),
+ "attachPlugin();");
+
+ // Verify attachment with src attribute intact.
+ EXPECT_FALSE(
+ IsAttributeNull(shell()->web_contents()->GetRenderViewHost(), "src"));
+
+ // Verify page loaded properly by checking title.
+ const string16 expected_title = ASCIIToUTF16(kGuestTitle);
+ 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.
+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 string16 expected_title = ASCIIToUTF16(kGuestTitle);
+ {
+ content::TitleWatcher title_watcher(test_guest()->web_contents(),
+ expected_title);
+ ExecuteSyncJSFunction(
+ test_embedder()->web_contents()->GetRenderViewHost(),
+ base::StringPrintf("SetSrc('%s');",
+ GetHTMLForGuestWithTitle(kGuestTitle).c_str()));
+ string16 actual_title = title_watcher.WaitAndGetTitle();
+ EXPECT_EQ(expected_title, actual_title);
+ }
+
+ // Set display none, verify title not seen.
+ ExecuteSyncJSFunction(
+ shell()->web_contents()->GetRenderViewHost(),
+ "document.getElementById('plugin').style.display = 'none'");
+
+ ExecuteSyncJSFunction(
+ test_guest()->web_contents()->GetRenderViewHost(),
+ base::StringPrintf("document.title = '%s'", kGuestTitleModified));
+
+ // Clear display none.
+ ExecuteSyncJSFunction(
+ shell()->web_contents()->GetRenderViewHost(),
+ "document.getElementById('plugin').style.display = 'block'");
+
+ // The guest title should have survived the display:none.
+ const 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) {

Powered by Google App Engine
This is Rietveld 408576698