| Index: chrome/browser/plugin_data_remover.h
 | 
| diff --git a/chrome/browser/plugin_data_remover.h b/chrome/browser/plugin_data_remover.h
 | 
| index cbc255678aeac711efbf95dc7f7251ec00185cc2..03b7e6fcc0801b5e9ff9b9a3887ca1177fe01d36 100644
 | 
| --- a/chrome/browser/plugin_data_remover.h
 | 
| +++ b/chrome/browser/plugin_data_remover.h
 | 
| @@ -9,8 +9,7 @@
 | 
|  #include "base/ref_counted.h"
 | 
|  #include "base/time.h"
 | 
|  #include "chrome/browser/plugin_process_host.h"
 | 
| -#include "ipc/ipc_channel_proxy.h"
 | 
| -#include "ipc/ipc_message.h"
 | 
| +#include "ipc/ipc_channel.h"
 | 
|  
 | 
|  class Task;
 | 
|  
 | 
| @@ -18,16 +17,27 @@ namespace base {
 | 
|  class MessageLoopProxy;
 | 
|  }
 | 
|  
 | 
| -class PluginDataRemover : public PluginProcessHost::Client,
 | 
| +class PluginDataRemover : public base::RefCountedThreadSafe<PluginDataRemover>,
 | 
| +                          public PluginProcessHost::Client,
 | 
|                            public IPC::Channel::Listener {
 | 
|   public:
 | 
|    PluginDataRemover();
 | 
| -  ~PluginDataRemover();
 | 
|  
 | 
| -  // Starts removing plug-in data stored since |begin_time| and calls
 | 
| -  // |done_task| on the current thread when finished.
 | 
| +  // Starts removing plug-in data stored since |begin_time|. If |done_task| is
 | 
| +  // not NULL, it is run on the current thread when removing has finished.
 | 
|    void StartRemoving(base::Time begin_time, Task* done_task);
 | 
|  
 | 
| +  // Returns whether there is a plug-in installed that supports removing
 | 
| +  // LSO data. Because this method possibly has to load the plug-in list, it
 | 
| +  // should only be called on the FILE thread.
 | 
| +  static bool IsSupported();
 | 
| +
 | 
| +  bool is_removing() const { return is_removing_; }
 | 
| +
 | 
| +  // Sets the task to run when removing has finished. Takes ownership of
 | 
| +  // the passed task.
 | 
| +  void set_done_task(Task* task) { done_task_.reset(task); }
 | 
| +
 | 
|    // PluginProcessHost::Client methods
 | 
|    virtual int ID();
 | 
|    virtual bool OffTheRecord();
 | 
| @@ -40,18 +50,24 @@ class PluginDataRemover : public PluginProcessHost::Client,
 | 
|    virtual void OnChannelError();
 | 
|  
 | 
|   private:
 | 
| +  friend class base::RefCountedThreadSafe<PluginDataRemover>;
 | 
| +  ~PluginDataRemover();
 | 
| +
 | 
|    void SignalDone();
 | 
| -  void SignalError();
 | 
| +  void ConnectToChannel(const IPC::ChannelHandle& handle);
 | 
|    void OnClearSiteDataResult(bool success);
 | 
|    void OnTimeout();
 | 
|  
 | 
|    scoped_refptr<base::MessageLoopProxy> message_loop_;
 | 
| +  bool is_removing_;
 | 
|    scoped_ptr<Task> done_task_;
 | 
| +  // The point in time when we start removing data.
 | 
| +  base::Time remove_start_time_;
 | 
| +  // The point in time from which on we remove data.
 | 
|    base::Time begin_time_;
 | 
|    // We own the channel, but it's used on the IO thread, so it needs to be
 | 
|    // deleted there as well.
 | 
|    IPC::Channel* channel_;
 | 
| -  ScopedRunnableMethodFactory<PluginDataRemover> method_factory_;
 | 
|  };
 | 
|  
 | 
|  #endif  // CHROME_BROWSER_PLUGIN_DATA_REMOVER_H_
 | 
| 
 |