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

Side by Side Diff: chrome/browser/extensions/extension_dom_clipboard_apitest.cc

Issue 495213002: Add tests to make sure copy/paste in an about:blank iframe in a hosted app works. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/strings/stringprintf.h" 5 #include "base/strings/stringprintf.h"
6 #include "chrome/browser/extensions/extension_apitest.h" 6 #include "chrome/browser/extensions/extension_apitest.h"
7 #include "chrome/browser/ui/browser.h" 7 #include "chrome/browser/ui/browser.h"
8 #include "chrome/browser/ui/tabs/tab_strip_model.h" 8 #include "chrome/browser/ui/tabs/tab_strip_model.h"
9 #include "chrome/test/base/ui_test_utils.h" 9 #include "chrome/test/base/ui_test_utils.h"
10 #include "content/public/browser/web_contents.h" 10 #include "content/public/browser/web_contents.h"
11 #include "content/public/test/browser_test_utils.h" 11 #include "content/public/test/browser_test_utils.h"
12 #include "net/dns/mock_host_resolver.h" 12 #include "net/dns/mock_host_resolver.h"
13 #include "net/test/embedded_test_server/embedded_test_server.h" 13 #include "net/test/embedded_test_server/embedded_test_server.h"
14 #include "url/gurl.h" 14 #include "url/gurl.h"
15 15
16 namespace { 16 namespace {
17 17
18 class ClipboardApiTest : public ExtensionApiTest { 18 class ClipboardApiTest : public ExtensionApiTest {
19 public: 19 public:
20 bool LoadHostedApp(const std::string& app_name, 20 bool LoadHostedApp(const std::string& app_name,
21 const std::string& launch_page); 21 const std::string& launch_page);
22 bool ExecuteCopyInSelectedTab(bool* result); 22 bool ExecuteCopyInSelectedTab();
23 bool ExecutePasteInSelectedTab(bool* result); 23 bool ExecutePasteInSelectedTab();
24 bool ExecuteCopyInIframeInSelectedTab();
25 bool ExecutePasteInIframeInSelectedTab();
24 26
25 private: 27 private:
26 bool ExecuteScriptInSelectedTab(const std::string& script, bool* result); 28 bool ExecuteScriptInSelectedTab(const std::string& script);
27 }; 29 };
28 30
29 bool ClipboardApiTest::LoadHostedApp(const std::string& app_name, 31 bool ClipboardApiTest::LoadHostedApp(const std::string& app_name,
30 const std::string& launch_page) { 32 const std::string& launch_page) {
31 host_resolver()->AddRule("*", "127.0.0.1"); 33 host_resolver()->AddRule("*", "127.0.0.1");
32 34
33 if (!StartEmbeddedTestServer()) { 35 if (!StartEmbeddedTestServer()) {
34 message_ = "Failed to start test server."; 36 message_ = "Failed to start test server.";
35 return false; 37 return false;
36 } 38 }
(...skipping 11 matching lines...) Expand all
48 replace_host.SetHostStr(host_str); 50 replace_host.SetHostStr(host_str);
49 base_url = base_url.ReplaceComponents(replace_host); 51 base_url = base_url.ReplaceComponents(replace_host);
50 52
51 std::string launch_page_path = 53 std::string launch_page_path =
52 base::StringPrintf("%s/%s", app_name.c_str(), launch_page.c_str()); 54 base::StringPrintf("%s/%s", app_name.c_str(), launch_page.c_str());
53 ui_test_utils::NavigateToURL(browser(), base_url.Resolve(launch_page_path)); 55 ui_test_utils::NavigateToURL(browser(), base_url.Resolve(launch_page_path));
54 56
55 return true; 57 return true;
56 } 58 }
57 59
58 bool ClipboardApiTest::ExecuteCopyInSelectedTab(bool* result) { 60 bool ClipboardApiTest::ExecuteCopyInSelectedTab() {
59 const char kScript[] = 61 const char kScript[] =
60 "window.domAutomationController.send(document.execCommand('copy'))"; 62 "window.domAutomationController.send(document.execCommand('copy'))";
61 return ExecuteScriptInSelectedTab(kScript, result); 63 return ExecuteScriptInSelectedTab(kScript);
62 } 64 }
63 65
64 bool ClipboardApiTest::ExecutePasteInSelectedTab(bool* result) { 66 bool ClipboardApiTest::ExecutePasteInSelectedTab() {
65 const char kScript[] = 67 const char kScript[] =
66 "window.domAutomationController.send(document.execCommand('paste'))"; 68 "window.domAutomationController.send(document.execCommand('paste'))";
67 return ExecuteScriptInSelectedTab(kScript, result); 69 return ExecuteScriptInSelectedTab(kScript);
68 } 70 }
69 71
70 bool ClipboardApiTest::ExecuteScriptInSelectedTab(const std::string& script, 72 bool ClipboardApiTest::ExecuteCopyInIframeInSelectedTab() {
71 bool* result) { 73 const char kScript[] =
72 if (!content::ExecuteScriptAndExtractBool( 74 "var ifr = document.createElement('iframe');\n"
73 browser()->tab_strip_model()->GetActiveWebContents(), 75 "document.body.appendChild(ifr);\n"
74 script, 76 "window.domAutomationController.send("
75 result)) { 77 "ifr.contentDocument.execCommand('copy'));";
76 message_ = "Failed to execute script in selected tab."; 78 return ExecuteScriptInSelectedTab(kScript);
77 return false; 79 }
78 } 80
79 return true; 81 bool ClipboardApiTest::ExecutePasteInIframeInSelectedTab() {
82 const char kScript[] =
83 "var ifr = document.createElement('iframe');\n"
84 "document.body.appendChild(ifr);\n"
85 "window.domAutomationController.send("
86 "ifr.contentDocument.execCommand('paste'));";
87 return ExecuteScriptInSelectedTab(kScript);
88 }
89
90 bool ClipboardApiTest::ExecuteScriptInSelectedTab(const std::string& script) {
91 bool result;
92 CHECK(content::ExecuteScriptAndExtractBool(
93 browser()->tab_strip_model()->GetActiveWebContents(),
94 script,
95 &result));
96 return result;
80 } 97 }
81 98
82 } // namespace 99 } // namespace
83 100
84 IN_PROC_BROWSER_TEST_F(ClipboardApiTest, Extension) { 101 IN_PROC_BROWSER_TEST_F(ClipboardApiTest, Extension) {
85 ASSERT_TRUE(StartEmbeddedTestServer()); 102 ASSERT_TRUE(StartEmbeddedTestServer());
86 ASSERT_TRUE(RunExtensionTest("clipboard/extension")) << message_; 103 ASSERT_TRUE(RunExtensionTest("clipboard/extension")) << message_;
87 } 104 }
88 105
89 IN_PROC_BROWSER_TEST_F(ClipboardApiTest, ExtensionNoPermission) { 106 IN_PROC_BROWSER_TEST_F(ClipboardApiTest, ExtensionNoPermission) {
90 ASSERT_TRUE(StartEmbeddedTestServer()); 107 ASSERT_TRUE(StartEmbeddedTestServer());
91 ASSERT_TRUE(RunExtensionTest("clipboard/extension_no_permission")) 108 ASSERT_TRUE(RunExtensionTest("clipboard/extension_no_permission"))
92 << message_; 109 << message_;
93 } 110 }
94 111
95 IN_PROC_BROWSER_TEST_F(ClipboardApiTest, HostedApp) { 112 IN_PROC_BROWSER_TEST_F(ClipboardApiTest, HostedApp) {
96 ASSERT_TRUE(LoadHostedApp("hosted_app", "main.html")) << message_; 113 ASSERT_TRUE(LoadHostedApp("hosted_app", "main.html")) << message_;
97 114
98 bool result = false; 115 EXPECT_TRUE(ExecuteCopyInSelectedTab()) << message_;
99 ASSERT_TRUE(ExecuteCopyInSelectedTab(&result)) << message_; 116 EXPECT_TRUE(ExecutePasteInSelectedTab()) << message_;
100 EXPECT_TRUE(result); 117 EXPECT_TRUE(ExecuteCopyInIframeInSelectedTab()) << message_;
101 ASSERT_TRUE(ExecutePasteInSelectedTab(&result)) << message_; 118 EXPECT_TRUE(ExecutePasteInIframeInSelectedTab()) << message_;
102 EXPECT_TRUE(result);
103 } 119 }
104 120
105 IN_PROC_BROWSER_TEST_F(ClipboardApiTest, HostedAppNoPermission) { 121 IN_PROC_BROWSER_TEST_F(ClipboardApiTest, HostedAppNoPermission) {
106 ASSERT_TRUE(LoadHostedApp("hosted_app_no_permission", "main.html")) 122 ASSERT_TRUE(LoadHostedApp("hosted_app_no_permission", "main.html"))
107 << message_; 123 << message_;
108 124
109 bool result = false; 125 EXPECT_FALSE(ExecuteCopyInSelectedTab()) << message_;
110 ASSERT_TRUE(ExecuteCopyInSelectedTab(&result)) << message_; 126 EXPECT_FALSE(ExecutePasteInSelectedTab()) << message_;
111 EXPECT_FALSE(result); 127 EXPECT_FALSE(ExecuteCopyInIframeInSelectedTab()) << message_;
112 ASSERT_TRUE(ExecutePasteInSelectedTab(&result)) << message_; 128 EXPECT_FALSE(ExecutePasteInIframeInSelectedTab()) << message_;
113 EXPECT_FALSE(result);
114 } 129 }
115 130
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698