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