15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_paths.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/synchronization/waitable_event_watcher.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/plugin_data_remover_impl.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/content_browser_test.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_utils.h"
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/shell/browser/shell.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kNPAPITestPluginMimeType = "application/vnd.npapi-test";
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PluginDataRemoverTest : public ContentBrowserTest {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginDataRemoverTest() {}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnWaitableEventSignaled(base::WaitableEvent* waitable_event) {
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::MessageLoop::current()->Quit();
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath browser_directory;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PathService::Get(base::DIR_MODULE, &browser_directory);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitchPath(switches::kExtraPluginDir,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   browser_directory.AppendASCII("plugins"));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(jam): since these plugin tests are running under Chrome, we need to
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // tell it to disable its security features for old plugins. Once this is
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // running under content_browsertests, these flags won't be needed.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // http://crbug.com/90448
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // switches::kAlwaysAuthorizePlugins
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitch("always-authorize-plugins");
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PluginDataRemoverTest, RemoveData) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginDataRemoverImpl plugin_data_remover(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      shell()->web_contents()->GetBrowserContext());
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  plugin_data_remover.set_mime_type(kNPAPITestPluginMimeType);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WaitableEventWatcher watcher;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WaitableEvent* event =
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      plugin_data_remover.StartRemoving(base::Time());
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  watcher.StartWatching(
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      event,
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&PluginDataRemoverTest::OnWaitableEventSignaled, this));
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunMessageLoop();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
61