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

Side by Side Diff: chrome/test/plugin/plugin_test.cpp

Issue 7576018: Reorganize chrome/test, part #8 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 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
« no previous file with comments | « chrome/test/plugin/pdf_browsertest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Tests for the top plugins to catch regressions in our plugin host code, as
6 // well as in the out of process code. Currently this tests:
7 // Flash
8 // Real
9 // QuickTime
10 // Windows Media Player
11 // -this includes both WMP plugins. npdsplay.dll is the older one that
12 // comes with XP. np-mswmp.dll can be downloaded from Microsoft and
13 // needs SP2 or Vista.
14
15 #include "build/build_config.h"
16
17 #if defined(OS_WIN)
18 #include <windows.h>
19 #include <shellapi.h>
20 #include <shlobj.h>
21 #include <comutil.h>
22 #endif
23
24 #include <stdlib.h>
25 #include <string.h>
26 #include <memory.h>
27
28 #include <string>
29
30 #include "base/file_path.h"
31 #include "base/file_util.h"
32 #include "base/message_loop.h"
33 #include "base/path_service.h"
34 #include "base/test/test_timeouts.h"
35 #include "chrome/browser/plugin_download_helper.h"
36 #include "chrome/common/chrome_switches.h"
37 #include "chrome/common/chrome_paths.h"
38 #include "chrome/test/automation/automation_proxy.h"
39 #include "chrome/test/automation/tab_proxy.h"
40 #include "chrome/test/base/ui_test_utils.h"
41 #include "chrome/test/ui/ui_test.h"
42 #include "content/browser/net/url_request_mock_http_job.h"
43 #include "net/base/net_util.h"
44 #include "net/url_request/url_request_test_util.h"
45 #include "third_party/npapi/bindings/npapi.h"
46 #include "webkit/plugins/npapi/plugin_constants_win.h"
47 #include "webkit/plugins/npapi/plugin_list.h"
48 #include "webkit/plugins/plugin_switches.h"
49
50 #if defined(OS_WIN)
51 #include "base/win/registry.h"
52 #endif
53
54 class PluginTest : public UITest {
55 public:
56 // Generate the URL for testing a particular test.
57 // HTML for the tests is all located in test_directory\plugin\<testcase>
58 // Set |mock_http| to true to use mock HTTP server.
59 static GURL GetTestUrl(const std::string& test_case,
60 const std::string& query,
61 bool mock_http) {
62 static const FilePath::CharType kPluginPath[] = FILE_PATH_LITERAL("plugin");
63 if (mock_http) {
64 FilePath plugin_path = FilePath(kPluginPath).AppendASCII(test_case);
65 GURL url = URLRequestMockHTTPJob::GetMockUrl(plugin_path);
66 if (!query.empty()) {
67 GURL::Replacements replacements;
68 replacements.SetQueryStr(query);
69 return url.ReplaceComponents(replacements);
70 }
71 return url;
72 }
73
74 FilePath path;
75 PathService::Get(chrome::DIR_TEST_DATA, &path);
76 path = path.Append(kPluginPath).AppendASCII(test_case);
77 return ui_test_utils::GetFileUrlWithQuery(path, query);
78 }
79
80 protected:
81 virtual void SetUp() {
82 #if defined(OS_WIN)
83 const testing::TestInfo* const test_info =
84 testing::UnitTest::GetInstance()->current_test_info();
85 if (strcmp(test_info->name(), "MediaPlayerNew") == 0) {
86 // The installer adds our process names to the registry key below. Since
87 // the installer might not have run on this machine, add it manually.
88 base::win::RegKey regkey;
89 if (regkey.Open(HKEY_LOCAL_MACHINE,
90 L"Software\\Microsoft\\MediaPlayer\\ShimInclusionList",
91 KEY_WRITE) == ERROR_SUCCESS) {
92 regkey.CreateKey(L"CHROME.EXE", KEY_READ);
93 }
94 } else if (strcmp(test_info->name(), "MediaPlayerOld") == 0) {
95 // When testing the old WMP plugin, we need to force Chrome to not load
96 // the new plugin.
97 launch_arguments_.AppendSwitch(switches::kUseOldWMPPlugin);
98 } else if (strcmp(test_info->name(), "FlashSecurity") == 0) {
99 launch_arguments_.AppendSwitchASCII(switches::kTestSandbox,
100 "security_tests.dll");
101 }
102 #endif // defined(OS_WIN)
103
104 launch_arguments_.AppendSwitch(switches::kAllowOutdatedPlugins);
105 launch_arguments_.AppendSwitch(switches::kAlwaysAuthorizePlugins);
106
107 UITest::SetUp();
108 }
109
110 void TestPlugin(const std::string& test_case,
111 const std::string& query,
112 int timeout,
113 bool mock_http) {
114 GURL url = GetTestUrl(test_case, query, mock_http);
115 NavigateToURL(url);
116 WaitForFinish(timeout, mock_http);
117 }
118
119 // Waits for the test case to finish.
120 void WaitForFinish(const int wait_time, bool mock_http) {
121 static const char kTestCompleteCookie[] = "status";
122 static const char kTestCompleteSuccess[] = "OK";
123
124 GURL url = GetTestUrl("done", "", mock_http);
125 scoped_refptr<TabProxy> tab(GetActiveTab());
126
127 const std::string result =
128 WaitUntilCookieNonEmpty(tab, url, kTestCompleteCookie, wait_time);
129 ASSERT_EQ(kTestCompleteSuccess, result);
130 }
131 };
132
133 TEST_F(PluginTest, Flash) {
134 // Note: This does not work with the npwrapper on 64-bit Linux. Install the
135 // native 64-bit Flash to run the test.
136 // TODO(thestig) Update this list if we decide to only test against internal
137 // Flash plugin in the future?
138 std::string kFlashQuery =
139 #if defined(OS_WIN)
140 "npswf32.dll"
141 #elif defined(OS_MACOSX)
142 "Flash Player.plugin"
143 #elif defined(OS_POSIX)
144 "libflashplayer.so"
145 #endif
146 ;
147 TestPlugin("flash.html", kFlashQuery,
148 TestTimeouts::action_max_timeout_ms(), false);
149 }
150
151 class ClickToPlayPluginTest : public PluginTest {
152 public:
153 ClickToPlayPluginTest() {
154 dom_automation_enabled_ = true;
155 }
156 };
157
158 TEST_F(ClickToPlayPluginTest, Flash) {
159 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
160 ASSERT_TRUE(browser.get());
161 ASSERT_TRUE(browser->SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_PLUGINS,
162 CONTENT_SETTING_BLOCK));
163
164 GURL url = GetTestUrl("flash-clicktoplay.html", "", true);
165 NavigateToURL(url);
166
167 scoped_refptr<TabProxy> tab(browser->GetTab(0));
168 ASSERT_TRUE(tab.get());
169
170 ASSERT_TRUE(tab->LoadBlockedPlugins());
171
172 WaitForFinish(TestTimeouts::action_max_timeout_ms(), true);
173 }
174
175 TEST_F(ClickToPlayPluginTest, FlashDocument) {
176 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
177 ASSERT_TRUE(browser.get());
178 ASSERT_TRUE(browser->SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_PLUGINS,
179 CONTENT_SETTING_BLOCK));
180
181 scoped_refptr<TabProxy> tab(browser->GetTab(0));
182 ASSERT_TRUE(tab.get());
183 GURL url = GetTestUrl("js-invoker.swf", "callback=done", true);
184 NavigateToURL(url);
185
186 // Inject the callback function into the HTML page generated by the browser.
187 ASSERT_TRUE(tab->ExecuteJavaScript("window.done = function() {"
188 " window.location = \"done.html\";"
189 "}"));
190
191 ASSERT_TRUE(tab->LoadBlockedPlugins());
192
193 WaitForFinish(TestTimeouts::action_max_timeout_ms(), true);
194 }
195
196 #if defined(OS_WIN)
197 // Windows only test
198 TEST_F(PluginTest, DISABLED_FlashSecurity) {
199 TestPlugin("flash.html", "", TestTimeouts::action_max_timeout_ms(), false);
200 }
201 #endif // defined(OS_WIN)
202
203 #if defined(OS_WIN)
204 // TODO(port) Port the following tests to platforms that have the required
205 // plugins.
206 // Flaky: http://crbug.com/55915
207 TEST_F(PluginTest, FLAKY_Quicktime) {
208 TestPlugin("quicktime.html", "",
209 TestTimeouts::action_max_timeout_ms(), false);
210 }
211
212 // Disabled - http://crbug.com/44662
213 TEST_F(PluginTest, DISABLED_MediaPlayerNew) {
214 TestPlugin("wmp_new.html", "", TestTimeouts::action_max_timeout_ms(), false);
215 }
216
217 // http://crbug.com/4809
218 TEST_F(PluginTest, DISABLED_MediaPlayerOld) {
219 TestPlugin("wmp_old.html", "", TestTimeouts::action_max_timeout_ms(), false);
220 }
221
222 // Disabled - http://crbug.com/44673
223 TEST_F(PluginTest, DISABLED_Real) {
224 TestPlugin("real.html", "", TestTimeouts::action_max_timeout_ms(), false);
225 }
226
227 TEST_F(PluginTest, FlashOctetStream) {
228 TestPlugin("flash-octet-stream.html", "",
229 TestTimeouts::action_max_timeout_ms(), false);
230 }
231
232 #if defined(OS_WIN)
233 // http://crbug.com/53926
234 TEST_F(PluginTest, FLAKY_FlashLayoutWhilePainting) {
235 #else
236 TEST_F(PluginTest, FlashLayoutWhilePainting) {
237 #endif
238 TestPlugin("flash-layout-while-painting.html", "",
239 TestTimeouts::action_max_timeout_ms(), true);
240 }
241
242 // http://crbug.com/8690
243 TEST_F(PluginTest, DISABLED_Java) {
244 TestPlugin("Java.html", "", TestTimeouts::action_max_timeout_ms(), false);
245 }
246
247 TEST_F(PluginTest, Silverlight) {
248 TestPlugin("silverlight.html", "",
249 TestTimeouts::action_max_timeout_ms(), false);
250 }
251
252 // This class provides functionality to test the plugin installer download
253 // file functionality.
254 class PluginInstallerDownloadTest
255 : public PluginDownloadUrlHelper::DownloadDelegate,
256 public testing::Test {
257 public:
258 PluginInstallerDownloadTest()
259 : success_(false),
260 download_helper_(NULL) {}
261 ~PluginInstallerDownloadTest() {}
262
263 void Start() {
264 initial_download_path_ = PluginTest::GetTestUrl("flash.html", "", false);
265 download_helper_ = new PluginDownloadUrlHelper(
266 initial_download_path_.spec(), NULL,
267 static_cast<PluginDownloadUrlHelper::DownloadDelegate*>(this));
268 download_helper_->InitiateDownload(new TestURLRequestContext);
269
270 MessageLoop::current()->PostDelayedTask(
271 FROM_HERE, new MessageLoop::QuitTask,
272 TestTimeouts::action_max_timeout_ms());
273 }
274
275 virtual void OnDownloadCompleted(const FilePath& download_path,
276 bool success) {
277 success_ = success;
278 final_download_path_ = download_path;
279 MessageLoop::current()->Quit();
280 download_helper_ = NULL;
281 }
282
283 FilePath final_download_path() const {
284 return final_download_path_;
285 }
286
287 FilePath initial_download_path() const {
288 return final_download_path_;
289 }
290
291 bool success() const {
292 return success_;
293 }
294
295 private:
296 FilePath final_download_path_;
297 PluginDownloadUrlHelper* download_helper_;
298 bool success_;
299 GURL initial_download_path_;
300 };
301
302 // This test validates that the plugin downloader downloads the specified file
303 // to a temporary path with the same file name.
304 TEST_F(PluginInstallerDownloadTest, PluginInstallerDownloadPathTest) {
305 MessageLoop loop(MessageLoop::TYPE_IO);
306 Start();
307 loop.Run();
308
309 EXPECT_TRUE(success());
310 EXPECT_TRUE(initial_download_path().BaseName().value() ==
311 final_download_path().BaseName().value());
312 }
313 #endif // defined(OS_WIN)
OLDNEW
« no previous file with comments | « chrome/test/plugin/pdf_browsertest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698