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

Side by Side Diff: content/browser/plugin_browsertest.cc

Issue 1248363003: Merge M45: Remove NPAPI command line flags entirely. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2454
Patch Set: Created 5 years, 5 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
« no previous file with comments | « no previous file | content/browser/plugin_service_impl.cc » ('j') | 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) 2012 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 #include "base/command_line.h"
6 #include "base/files/file_util.h"
7 #include "base/path_service.h"
8 #include "base/strings/string_util.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "content/browser/loader/resource_dispatcher_host_impl.h"
11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/resource_dispatcher_host_delegate.h"
13 #include "content/public/common/content_switches.h"
14 #include "content/public/test/browser_test_utils.h"
15 #include "content/public/test/content_browser_test.h"
16 #include "content/public/test/content_browser_test_utils.h"
17 #include "content/public/test/test_utils.h"
18 #include "content/shell/browser/shell.h"
19 #include "content/shell/common/shell_switches.h"
20 #include "net/test/embedded_test_server/embedded_test_server.h"
21 #include "net/test/url_request/url_request_mock_http_job.h"
22 #include "net/url_request/url_request.h"
23 #include "ui/gfx/geometry/rect.h"
24
25 #if defined(OS_WIN)
26 #include "base/win/registry.h"
27 #endif
28
29 // TODO(jschuh): Finish plugins on Win64. crbug.com/180861
30 #if defined(OS_WIN) && defined(ARCH_CPU_X86_64)
31 #define MAYBE(x) DISABLED_##x
32 #else
33 #define MAYBE(x) x
34 #endif
35
36 // In-process windowless plugin tests that create canvas break on Windows since
37 // Win32k Renderer Lockdown was enabled in M42.
38 #if defined(OS_WIN)
39 #define MAYBE_INPROC_WINDOWLESS(x) DISABLED_##x
40 #else
41 #define MAYBE_INPROC_WINDOWLESS(x) x
42 #endif
43
44 using base::ASCIIToUTF16;
45
46 namespace content {
47 namespace {
48
49 void SetUrlRequestMock(const base::FilePath& path) {
50 net::URLRequestMockHTTPJob::AddUrlHandlers(
51 path, content::BrowserThread::GetBlockingPool());
52 }
53
54 }
55
56 class PluginTest : public ContentBrowserTest {
57 protected:
58 PluginTest() {}
59
60 void SetUpCommandLine(base::CommandLine* command_line) override {
61 // Some NPAPI tests schedule garbage collection to force object tear-down.
62 command_line->AppendSwitchASCII(switches::kJavaScriptFlags, "--expose_gc");
63
64 #if defined(OS_WIN)
65 const testing::TestInfo* const test_info =
66 testing::UnitTest::GetInstance()->current_test_info();
67 if (strcmp(test_info->name(), "MediaPlayerNew") == 0) {
68 // The installer adds our process names to the registry key below. Since
69 // the installer might not have run on this machine, add it manually.
70 base::win::RegKey regkey;
71 if (regkey.Open(HKEY_LOCAL_MACHINE,
72 L"Software\\Microsoft\\MediaPlayer\\ShimInclusionList",
73 KEY_WRITE) == ERROR_SUCCESS) {
74 regkey.CreateKey(L"BROWSER_TESTS.EXE", KEY_READ);
75 }
76 }
77 #elif defined(OS_MACOSX)
78 base::FilePath plugin_dir;
79 PathService::Get(base::DIR_MODULE, &plugin_dir);
80 plugin_dir = plugin_dir.AppendASCII("plugins");
81 // The plugins directory isn't read by default on the Mac, so it needs to be
82 // explicitly registered.
83 command_line->AppendSwitchPath(switches::kExtraPluginDir, plugin_dir);
84 #endif
85 command_line->AppendSwitch(switches::kEnableNpapiForTesting);
86 }
87
88 void SetUpOnMainThread() override {
89 base::FilePath path = GetTestFilePath("", "");
90 BrowserThread::PostTask(
91 BrowserThread::IO, FROM_HERE, base::Bind(&SetUrlRequestMock, path));
92 }
93
94 static void LoadAndWaitInWindow(Shell* window, const GURL& url) {
95 base::string16 expected_title(ASCIIToUTF16("OK"));
96 TitleWatcher title_watcher(window->web_contents(), expected_title);
97 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL"));
98 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("plugin_not_found"));
99 NavigateToURL(window, url);
100 base::string16 title = title_watcher.WaitAndGetTitle();
101 if (title == ASCIIToUTF16("plugin_not_found")) {
102 const testing::TestInfo* const test_info =
103 testing::UnitTest::GetInstance()->current_test_info();
104 VLOG(0) << "PluginTest." << test_info->name()
105 << " not running because plugin not installed.";
106 } else {
107 EXPECT_EQ(expected_title, title);
108 }
109 }
110
111 void LoadAndWait(const GURL& url) {
112 LoadAndWaitInWindow(shell(), url);
113 }
114
115 GURL GetURL(const char* filename) {
116 return GetTestUrl("npapi", filename);
117 }
118
119 void NavigateAway() {
120 GURL url = GetTestUrl("", "simple_page.html");
121 LoadAndWait(url);
122 }
123
124 void TestPlugin(const char* filename) {
125 base::FilePath path = GetTestFilePath("plugin", filename);
126 if (!base::PathExists(path)) {
127 const testing::TestInfo* const test_info =
128 testing::UnitTest::GetInstance()->current_test_info();
129 VLOG(0) << "PluginTest." << test_info->name()
130 << " not running because test data wasn't found.";
131 return;
132 }
133
134 GURL url = GetTestUrl("plugin", filename);
135 LoadAndWait(url);
136 }
137 };
138
139 // Make sure that navigating away from a plugin referenced by JS doesn't
140 // crash.
141 IN_PROC_BROWSER_TEST_F(PluginTest, UnloadNoCrash) {
142 LoadAndWait(GetURL("layout_test_plugin.html"));
143 NavigateAway();
144 }
145
146 // Tests if a plugin executing a self deleting script using NPN_GetURL
147 // works without crashing or hanging
148 // Flaky: http://crbug.com/59327
149 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(SelfDeletePluginGetUrl)) {
150 LoadAndWait(GetURL("self_delete_plugin_geturl.html"));
151 }
152
153 // Tests if a plugin executing a self deleting script using Invoke
154 // works without crashing or hanging
155 // Flaky. See http://crbug.com/30702
156 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(SelfDeletePluginInvoke)) {
157 LoadAndWait(GetURL("self_delete_plugin_invoke.html"));
158 }
159
160 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NPObjectReleasedOnDestruction)) {
161 NavigateToURL(shell(), GetURL("npobject_released_on_destruction.html"));
162 NavigateAway();
163 }
164
165 // Test that a dialog is properly created when a plugin throws an
166 // exception. Should be run for in and out of process plugins, but
167 // the more interesting case is out of process, where we must route
168 // the exception to the correct renderer.
169 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NPObjectSetException)) {
170 LoadAndWait(GetURL("npobject_set_exception.html"));
171 }
172
173 #if defined(OS_WIN)
174 // Tests if a plugin executing a self deleting script in the context of
175 // a synchronous mouseup works correctly.
176 // This was never ported to Mac. The only thing remaining is to make
177 // SimulateMouseClick get to Mac plugins, currently it doesn't work.
178 IN_PROC_BROWSER_TEST_F(
179 PluginTest,
180 MAYBE_INPROC_WINDOWLESS(SelfDeletePluginInvokeInSynchronousMouseUp)) {
181 NavigateToURL(shell(), GetURL("execute_script_delete_in_mouse_up.html"));
182
183 base::string16 expected_title(ASCIIToUTF16("OK"));
184 TitleWatcher title_watcher(shell()->web_contents(), expected_title);
185 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL"));
186 SimulateMouseClick(shell()->web_contents(), 0,
187 blink::WebMouseEvent::ButtonLeft);
188 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
189 }
190 #endif
191
192 // Flaky, http://crbug.com/302274.
193 #if defined(OS_MACOSX)
194 #define MAYBE_GetURLRequest404Response DISABLED_GetURLRequest404Response
195 #else
196 #define MAYBE_GetURLRequest404Response MAYBE(GetURLRequest404Response)
197 #endif
198
199 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE_GetURLRequest404Response) {
200 GURL url(net::URLRequestMockHTTPJob::GetMockUrl(
201 base::FilePath().AppendASCII("npapi").AppendASCII(
202 "plugin_url_request_404.html")));
203 LoadAndWait(url);
204 }
205
206 // Tests if a plugin executing a self deleting script using Invoke with
207 // a modal dialog showing works without crashing or hanging
208 // Disabled, flakily exceeds timeout, http://crbug.com/46257.
209 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(SelfDeletePluginInvokeAlert)) {
210 // Navigate asynchronously because if we waitd until it completes, there's a
211 // race condition where the alert can come up before we start watching for it.
212 shell()->LoadURL(GetURL("self_delete_plugin_invoke_alert.html"));
213
214 base::string16 expected_title(ASCIIToUTF16("OK"));
215 TitleWatcher title_watcher(shell()->web_contents(), expected_title);
216 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL"));
217
218 WaitForAppModalDialog(shell());
219
220 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
221 }
222
223 // Test passing arguments to a plugin.
224 // crbug.com/306318
225 #if !defined(OS_LINUX)
226 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Arguments)) {
227 LoadAndWait(GetURL("arguments.html"));
228 }
229 #endif
230
231 // Test invoking many plugins within a single page.
232 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(ManyPlugins)) {
233 LoadAndWait(GetURL("many_plugins.html"));
234 }
235
236 #if !defined(OS_MACOSX) // http://crbug.com/402164
237 // Test various calls to GetURL from a plugin.
238 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(GetURL)) {
239 LoadAndWait(GetURL("geturl.html"));
240 }
241 #endif
242
243 // Test various calls to GetURL for javascript URLs with
244 // non NULL targets from a plugin.
245 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(GetJavaScriptURL)) {
246 LoadAndWait(GetURL("get_javascript_url.html"));
247 }
248
249 // Test that calling GetURL with a javascript URL and target=_self
250 // works properly when the plugin is embedded in a subframe.
251 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(GetJavaScriptURL2)) {
252 LoadAndWait(GetURL("get_javascript_url2.html"));
253 }
254
255 // Test is flaky on linux/cros/win builders. http://crbug.com/71904
256 IN_PROC_BROWSER_TEST_F(PluginTest, GetURLRedirectNotification) {
257 LoadAndWait(GetURL("geturl_redirect_notify.html"));
258 }
259
260 // Tests that identity is preserved for NPObjects passed from a plugin
261 // into JavaScript.
262 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NPObjectIdentity)) {
263 LoadAndWait(GetURL("npobject_identity.html"));
264 }
265
266 // Tests that if an NPObject is proxies back to its original process, the
267 // original pointer is returned and not a proxy. If this fails the plugin
268 // will crash.
269 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NPObjectProxy)) {
270 LoadAndWait(GetURL("npobject_proxy.html"));
271 }
272
273 #if defined(OS_WIN) || defined(OS_MACOSX)
274 // Tests if a plugin executing a self deleting script in the context of
275 // a synchronous paint event works correctly
276 // http://crbug.com/44960
277 IN_PROC_BROWSER_TEST_F(
278 PluginTest,
279 MAYBE_INPROC_WINDOWLESS(SelfDeletePluginInvokeInSynchronousPaint)) {
280 LoadAndWait(GetURL("execute_script_delete_in_paint.html"));
281 }
282 #endif
283
284 // Tests that if a plugin executes a self resizing script in the context of a
285 // synchronous paint, the plugin doesn't use deallocated memory.
286 // http://crbug.com/139462
287 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE_INPROC_WINDOWLESS(ResizeDuringPaint)) {
288 LoadAndWait(GetURL("resize_during_paint.html"));
289 }
290
291 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(SelfDeletePluginInNewStream)) {
292 LoadAndWait(GetURL("self_delete_plugin_stream.html"));
293 }
294
295 // On Mac this test asserts in plugin_host: http://crbug.com/95558
296 // On all platforms it flakes in ~URLRequestContext: http://crbug.com/310336
297 #if !defined(NDEBUG)
298 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_DeletePluginInDeallocate) {
299 LoadAndWait(GetURL("plugin_delete_in_deallocate.html"));
300 }
301 #endif
302
303 #if defined(OS_WIN)
304
305 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(VerifyPluginWindowRect)) {
306 LoadAndWait(GetURL("verify_plugin_window_rect.html"));
307 }
308
309 // Tests that creating a new instance of a plugin while another one is handling
310 // a paint message doesn't cause deadlock.
311 // http://crbug.com/406184
312 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_CreateInstanceInPaint) {
313 LoadAndWait(GetURL("create_instance_in_paint.html"));
314 }
315
316 // Tests that putting up an alert in response to a paint doesn't deadlock.
317 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_AlertInWindowMessage) {
318 NavigateToURL(shell(), GetURL("alert_in_window_message.html"));
319
320 WaitForAppModalDialog(shell());
321 WaitForAppModalDialog(shell());
322 }
323
324 // http://crbug.com/406184
325 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_VerifyNPObjectLifetimeTest) {
326 LoadAndWait(GetURL("npobject_lifetime_test.html"));
327 }
328
329 // Tests that we don't crash or assert if NPP_New fails
330 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NewFails)) {
331 LoadAndWait(GetURL("new_fails.html"));
332 }
333
334 IN_PROC_BROWSER_TEST_F(PluginTest,
335 MAYBE_INPROC_WINDOWLESS(SelfDeletePluginInNPNEvaluate)) {
336 LoadAndWait(GetURL("execute_script_delete_in_npn_evaluate.html"));
337 }
338
339 IN_PROC_BROWSER_TEST_F(
340 PluginTest,
341 MAYBE_INPROC_WINDOWLESS(SelfDeleteCreatePluginInNPNEvaluate)) {
342 LoadAndWait(GetURL("npn_plugin_delete_create_in_evaluate.html"));
343 }
344
345 #endif // OS_WIN
346
347 // If this flakes, reopen http://crbug.com/17645
348 // As of 6 July 2011, this test is flaky on Windows (perhaps due to timing out).
349 #if !defined(OS_MACOSX) && !defined(OS_LINUX)
350 // Disabled on Mac because the plugin side isn't implemented yet, see
351 // "TODO(port)" in plugin_javascript_open_popup.cc.
352 // Disabled on Linux because we don't support NPAPI any more.
353 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(OpenPopupWindowWithPlugin)) {
354 LoadAndWait(GetURL("get_javascript_open_popup_with_plugin.html"));
355 }
356 #endif
357
358 // Test checking the privacy mode is off.
359 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(PrivateDisabled)) {
360 LoadAndWait(GetURL("private.html"));
361 }
362
363 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(ScheduleTimer)) {
364 LoadAndWait(GetURL("schedule_timer.html"));
365 }
366
367 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(PluginThreadAsyncCall)) {
368 LoadAndWait(GetURL("plugin_thread_async_call.html"));
369 }
370
371 IN_PROC_BROWSER_TEST_F(PluginTest, PluginSingleRangeRequest) {
372 LoadAndWait(GetURL("plugin_single_range_request.html"));
373 }
374
375 #if !defined(OS_WIN) // http://crbug.com/396373
376 // Test checking the privacy mode is on.
377 // If this flakes on Linux, use http://crbug.com/104380
378 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(PrivateEnabled)) {
379 GURL url = GetURL("private.html");
380 url = GURL(url.spec() + "?private");
381 LoadAndWaitInWindow(CreateOffTheRecordBrowser(), url);
382 }
383 #endif
384
385 // These used to run on Windows: http://crbug.com/396373
386 #if defined(OS_MACOSX)
387 // Test a browser hang due to special case of multiple
388 // plugin instances indulged in sync calls across renderer.
389 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(MultipleInstancesSyncCalls)) {
390 LoadAndWait(GetURL("multiple_instances_sync_calls.html"));
391 }
392
393 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(GetURLRequestFailWrite)) {
394 GURL url(net::URLRequestMockHTTPJob::GetMockUrl(
395 base::FilePath().AppendASCII("npapi").AppendASCII(
396 "plugin_url_request_fail_write.html")));
397 LoadAndWait(url);
398 }
399 #endif
400
401 #if defined(OS_WIN)
402 // Flaky on Windows x86. http://crbug.com/388245
403 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_EnsureScriptingWorksInDestroy) {
404 LoadAndWait(GetURL("ensure_scripting_works_in_destroy.html"));
405 }
406
407 // This test uses a Windows Event to signal to the plugin that it should crash
408 // on NP_Initialize.
409 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(NoHangIfInitCrashes)) {
410 HANDLE crash_event = CreateEvent(NULL, TRUE, FALSE, L"TestPluginCrashOnInit");
411 SetEvent(crash_event);
412 LoadAndWait(GetURL("no_hang_if_init_crashes.html"));
413 CloseHandle(crash_event);
414 }
415 #endif
416
417 // If this flakes on Mac, use http://crbug.com/111508
418 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(PluginReferrerTest)) {
419 GURL url(net::URLRequestMockHTTPJob::GetMockUrl(
420 base::FilePath().AppendASCII("npapi").AppendASCII(
421 "plugin_url_request_referrer_test.html")));
422 LoadAndWait(url);
423 }
424
425 #if defined(OS_MACOSX)
426 // Test is flaky, see http://crbug.com/134515.
427 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_PluginConvertPointTest) {
428 gfx::Rect bounds(50, 50, 400, 400);
429 SetWindowBounds(shell()->window(), bounds);
430
431 NavigateToURL(shell(), GetURL("convert_point.html"));
432
433 base::string16 expected_title(ASCIIToUTF16("OK"));
434 TitleWatcher title_watcher(shell()->web_contents(), expected_title);
435 title_watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL"));
436 // TODO(stuartmorgan): When the automation system supports sending clicks,
437 // change the test to trigger on mouse-down rather than window focus.
438
439 // TODO: is this code still needed? It was here when it used to run in
440 // browser_tests.
441 //static_cast<WebContentsDelegate*>(shell())->
442 // ActivateContents(shell()->web_contents());
443 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
444 }
445 #endif
446
447 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Flash)) {
448 TestPlugin("flash.html");
449 }
450
451 #if defined(OS_WIN)
452 // Windows only test
453 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_FlashSecurity) {
454 TestPlugin("flash.html");
455 }
456 #endif // defined(OS_WIN)
457
458 #if defined(OS_WIN)
459 // TODO(port) Port the following tests to platforms that have the required
460 // plugins.
461 // Flaky: http://crbug.com/55915
462 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Quicktime) {
463 TestPlugin("quicktime.html");
464 }
465
466 // Disabled - http://crbug.com/44662
467 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(MediaPlayerNew)) {
468 TestPlugin("wmp_new.html");
469 }
470
471 // Disabled - http://crbug.com/44673
472 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Real)) {
473 TestPlugin("real.html");
474 }
475
476 // http://crbug.com/320041
477 #if (defined(OS_WIN) && defined(ARCH_CPU_X86_64)) || \
478 (defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN))
479 #define MAYBE_FlashOctetStream DISABLED_FlashOctetStream
480 #else
481 #define MAYBE_FlashOctetStream FlashOctetStream
482 #endif
483 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE_FlashOctetStream) {
484 TestPlugin("flash-octet-stream.html");
485 }
486
487 #if defined(OS_WIN)
488 // http://crbug.com/53926
489 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_FlashLayoutWhilePainting) {
490 #else
491 IN_PROC_BROWSER_TEST_F(PluginTest, FlashLayoutWhilePainting) {
492 #endif
493 TestPlugin("flash-layout-while-painting.html");
494 }
495
496 // http://crbug.com/8690
497 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Java) {
498 TestPlugin("Java.html");
499 }
500
501 // Flaky: http://crbug.com/55915
502 IN_PROC_BROWSER_TEST_F(PluginTest, DISABLED_Silverlight) {
503 TestPlugin("silverlight.html");
504 }
505 #endif // defined(OS_WIN)
506
507 class TestResourceDispatcherHostDelegate
508 : public ResourceDispatcherHostDelegate {
509 public:
510 TestResourceDispatcherHostDelegate() : found_cookie_(false) {}
511
512 bool found_cookie() { return found_cookie_; }
513
514 void WaitForPluginRequest() {
515 if (found_cookie_)
516 return;
517
518 runner_ = new MessageLoopRunner;
519 runner_->Run();
520 }
521
522 private:
523 // ResourceDispatcherHostDelegate implementation:
524 void OnResponseStarted(net::URLRequest* request,
525 ResourceContext* resource_context,
526 ResourceResponse* response,
527 IPC::Sender* sender) override {
528 // The URL below comes from plugin_geturl_test.cc.
529 if (!base::EndsWith(request->url().spec(),
530 "npapi/plugin_ref_target_page.html",
531 true)) {
532 return;
533 }
534 net::HttpRequestHeaders headers;
535 bool found_cookie = false;
536 if (request->GetFullRequestHeaders(&headers) &&
537 headers.ToString().find("Cookie: blah") != std::string::npos) {
538 found_cookie = true;
539 }
540 BrowserThread::PostTask(
541 BrowserThread::UI,
542 FROM_HERE,
543 base::Bind(&TestResourceDispatcherHostDelegate::GotCookie,
544 base::Unretained(this), found_cookie));
545 }
546
547 void GotCookie(bool found_cookie) {
548 found_cookie_ = found_cookie;
549 if (runner_.get())
550 runner_->QuitClosure().Run();
551 }
552
553 scoped_refptr<MessageLoopRunner> runner_;
554 bool found_cookie_;
555
556 DISALLOW_COPY_AND_ASSIGN(TestResourceDispatcherHostDelegate);
557 };
558
559 // Ensure that cookies get sent with plugin requests.
560 IN_PROC_BROWSER_TEST_F(PluginTest, MAYBE(Cookies)) {
561 // Create a new browser just to ensure that the plugin process' child_id is
562 // not equal to its type (PROCESS_TYPE_PLUGIN), as that was the error which
563 // caused this bug.
564 NavigateToURL(CreateBrowser(), GURL("about:blank"));
565
566 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
567 GURL url(embedded_test_server()->GetURL("/npapi/cookies.html"));
568
569 TestResourceDispatcherHostDelegate test_delegate;
570 ResourceDispatcherHostDelegate* old_delegate =
571 ResourceDispatcherHostImpl::Get()->delegate();
572 ResourceDispatcherHostImpl::Get()->SetDelegate(&test_delegate);
573 LoadAndWait(url);
574 test_delegate.WaitForPluginRequest();
575 ASSERT_TRUE(test_delegate.found_cookie());
576 ResourceDispatcherHostImpl::Get()->SetDelegate(old_delegate);
577 }
578
579 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/plugin_service_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698