Commit cdc6ee91 authored by mek@chromium.org's avatar mek@chromium.org

Add tests to make sure copy/paste in an about:blank iframe in a hosted app or extension works.

BUG=395376

Review URL: https://codereview.chromium.org/495213002

Cr-Commit-Position: refs/heads/master@{#291268}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@291268 0039d316-1c4b-4281-b951-d872f2087c98
parent b1a4853a
...@@ -19,11 +19,13 @@ class ClipboardApiTest : public ExtensionApiTest { ...@@ -19,11 +19,13 @@ class ClipboardApiTest : public ExtensionApiTest {
public: public:
bool LoadHostedApp(const std::string& app_name, bool LoadHostedApp(const std::string& app_name,
const std::string& launch_page); const std::string& launch_page);
bool ExecuteCopyInSelectedTab(bool* result); bool ExecuteCopyInSelectedTab();
bool ExecutePasteInSelectedTab(bool* result); bool ExecutePasteInSelectedTab();
bool ExecuteCopyInIframeInSelectedTab();
bool ExecutePasteInIframeInSelectedTab();
private: private:
bool ExecuteScriptInSelectedTab(const std::string& script, bool* result); bool ExecuteScriptInSelectedTab(const std::string& script);
}; };
bool ClipboardApiTest::LoadHostedApp(const std::string& app_name, bool ClipboardApiTest::LoadHostedApp(const std::string& app_name,
...@@ -55,28 +57,43 @@ bool ClipboardApiTest::LoadHostedApp(const std::string& app_name, ...@@ -55,28 +57,43 @@ bool ClipboardApiTest::LoadHostedApp(const std::string& app_name,
return true; return true;
} }
bool ClipboardApiTest::ExecuteCopyInSelectedTab(bool* result) { bool ClipboardApiTest::ExecuteCopyInSelectedTab() {
const char kScript[] = const char kScript[] =
"window.domAutomationController.send(document.execCommand('copy'))"; "window.domAutomationController.send(document.execCommand('copy'))";
return ExecuteScriptInSelectedTab(kScript, result); return ExecuteScriptInSelectedTab(kScript);
} }
bool ClipboardApiTest::ExecutePasteInSelectedTab(bool* result) { bool ClipboardApiTest::ExecutePasteInSelectedTab() {
const char kScript[] = const char kScript[] =
"window.domAutomationController.send(document.execCommand('paste'))"; "window.domAutomationController.send(document.execCommand('paste'))";
return ExecuteScriptInSelectedTab(kScript, result); return ExecuteScriptInSelectedTab(kScript);
} }
bool ClipboardApiTest::ExecuteScriptInSelectedTab(const std::string& script, bool ClipboardApiTest::ExecuteCopyInIframeInSelectedTab() {
bool* result) { const char kScript[] =
if (!content::ExecuteScriptAndExtractBool( "var ifr = document.createElement('iframe');\n"
browser()->tab_strip_model()->GetActiveWebContents(), "document.body.appendChild(ifr);\n"
script, "window.domAutomationController.send("
result)) { "ifr.contentDocument.execCommand('copy'));";
message_ = "Failed to execute script in selected tab."; return ExecuteScriptInSelectedTab(kScript);
return false; }
}
return true; bool ClipboardApiTest::ExecutePasteInIframeInSelectedTab() {
const char kScript[] =
"var ifr = document.createElement('iframe');\n"
"document.body.appendChild(ifr);\n"
"window.domAutomationController.send("
"ifr.contentDocument.execCommand('paste'));";
return ExecuteScriptInSelectedTab(kScript);
}
bool ClipboardApiTest::ExecuteScriptInSelectedTab(const std::string& script) {
bool result;
CHECK(content::ExecuteScriptAndExtractBool(
browser()->tab_strip_model()->GetActiveWebContents(),
script,
&result));
return result;
} }
} // namespace } // namespace
...@@ -95,21 +112,19 @@ IN_PROC_BROWSER_TEST_F(ClipboardApiTest, ExtensionNoPermission) { ...@@ -95,21 +112,19 @@ IN_PROC_BROWSER_TEST_F(ClipboardApiTest, ExtensionNoPermission) {
IN_PROC_BROWSER_TEST_F(ClipboardApiTest, HostedApp) { IN_PROC_BROWSER_TEST_F(ClipboardApiTest, HostedApp) {
ASSERT_TRUE(LoadHostedApp("hosted_app", "main.html")) << message_; ASSERT_TRUE(LoadHostedApp("hosted_app", "main.html")) << message_;
bool result = false; EXPECT_TRUE(ExecuteCopyInSelectedTab()) << message_;
ASSERT_TRUE(ExecuteCopyInSelectedTab(&result)) << message_; EXPECT_TRUE(ExecutePasteInSelectedTab()) << message_;
EXPECT_TRUE(result); EXPECT_TRUE(ExecuteCopyInIframeInSelectedTab()) << message_;
ASSERT_TRUE(ExecutePasteInSelectedTab(&result)) << message_; EXPECT_TRUE(ExecutePasteInIframeInSelectedTab()) << message_;
EXPECT_TRUE(result);
} }
IN_PROC_BROWSER_TEST_F(ClipboardApiTest, HostedAppNoPermission) { IN_PROC_BROWSER_TEST_F(ClipboardApiTest, HostedAppNoPermission) {
ASSERT_TRUE(LoadHostedApp("hosted_app_no_permission", "main.html")) ASSERT_TRUE(LoadHostedApp("hosted_app_no_permission", "main.html"))
<< message_; << message_;
bool result = false; EXPECT_FALSE(ExecuteCopyInSelectedTab()) << message_;
ASSERT_TRUE(ExecuteCopyInSelectedTab(&result)) << message_; EXPECT_FALSE(ExecutePasteInSelectedTab()) << message_;
EXPECT_FALSE(result); EXPECT_FALSE(ExecuteCopyInIframeInSelectedTab()) << message_;
ASSERT_TRUE(ExecutePasteInSelectedTab(&result)) << message_; EXPECT_FALSE(ExecutePasteInIframeInSelectedTab()) << message_;
EXPECT_FALSE(result);
} }
...@@ -17,6 +17,22 @@ chrome.test.runTests([ ...@@ -17,6 +17,22 @@ chrome.test.runTests([
chrome.test.succeed(); chrome.test.succeed();
else else
chrome.test.fail('execCommand("paste") failed'); chrome.test.fail('execCommand("paste") failed');
},
function copyInIframe() {
var ifr = document.createElement('iframe');
document.body.appendChild(ifr);
if (ifr.contentDocument.execCommand('copy'))
chrome.test.succeed();
else
chrome.test.fail('execCommand("copy") failed in iframe');
},
function pasteInIframe() {
var ifr = document.createElement('iframe');
document.body.appendChild(ifr);
if (ifr.contentDocument.execCommand('paste'))
chrome.test.succeed();
else
chrome.test.fail('execCommand("paste") failed in iframe');
} }
]); ]);
...@@ -17,5 +17,21 @@ chrome.test.runTests([ ...@@ -17,5 +17,21 @@ chrome.test.runTests([
chrome.test.succeed(); chrome.test.succeed();
else else
chrome.test.fail('execCommand("paste") succeeded'); chrome.test.fail('execCommand("paste") succeeded');
},
function copyInIframe() {
var ifr = document.createElement('iframe');
document.body.appendChild(ifr);
if (ifr.contentDocument.execCommand('copy'))
chrome.test.succeed();
else
chrome.test.fail('execCommand("copy") failed in iframe');
},
function pasteInIframe() {
var ifr = document.createElement('iframe');
document.body.appendChild(ifr);
if (ifr.contentDocument.execCommand('paste'))
chrome.test.fail('execCommand("paste") succeeded in iframe');
else
chrome.test.succeed();
} }
]); ]);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment