plugin_data_remover.h revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2010 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#ifndef CHROME_BROWSER_PLUGIN_DATA_REMOVER_H_
6#define CHROME_BROWSER_PLUGIN_DATA_REMOVER_H_
7#pragma once
8
9#include "base/ref_counted.h"
10#include "base/time.h"
11#include "chrome/browser/plugin_process_host.h"
12#include "ipc/ipc_channel.h"
13
14class Task;
15
16namespace base {
17class MessageLoopProxy;
18}
19
20class PluginDataRemover : public base::RefCountedThreadSafe<PluginDataRemover>,
21                          public PluginProcessHost::Client,
22                          public IPC::Channel::Listener {
23 public:
24  PluginDataRemover();
25
26  // Starts removing plug-in data stored since |begin_time|. If |done_task| is
27  // not NULL, it is run on the current thread when removing has finished.
28  void StartRemoving(base::Time begin_time, Task* done_task);
29
30  // Returns whether there is a plug-in installed that supports removing
31  // LSO data. Because this method possibly has to load the plug-in list, it
32  // should only be called on the FILE thread.
33  static bool IsSupported();
34
35  bool is_removing() const { return is_removing_; }
36
37  // Sets the task to run when removing has finished. Takes ownership of
38  // the passed task.
39  void set_done_task(Task* task) { done_task_.reset(task); }
40
41  // PluginProcessHost::Client methods
42  virtual int ID();
43  virtual bool OffTheRecord();
44  virtual void SetPluginInfo(const webkit::npapi::WebPluginInfo& info);
45  virtual void OnChannelOpened(const IPC::ChannelHandle& handle);
46  virtual void OnError();
47
48  // IPC::Channel::Listener methods
49  virtual bool OnMessageReceived(const IPC::Message& message);
50  virtual void OnChannelError();
51
52 private:
53  friend class base::RefCountedThreadSafe<PluginDataRemover>;
54  ~PluginDataRemover();
55
56  void SignalDone();
57  void ConnectToChannel(const IPC::ChannelHandle& handle);
58  void OnClearSiteDataResult(bool success);
59  void OnTimeout();
60
61  scoped_refptr<base::MessageLoopProxy> message_loop_;
62  bool is_removing_;
63  scoped_ptr<Task> done_task_;
64  // The point in time when we start removing data.
65  base::Time remove_start_time_;
66  // The point in time from which on we remove data.
67  base::Time begin_time_;
68  // We own the channel, but it's used on the IO thread, so it needs to be
69  // deleted there as well.
70  IPC::Channel* channel_;
71};
72
73#endif  // CHROME_BROWSER_PLUGIN_DATA_REMOVER_H_
74