// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_BROWSER_PLUGIN_DATA_REMOVER_IMPL_H_
#define CONTENT_BROWSER_PLUGIN_DATA_REMOVER_IMPL_H_

#include <string>

#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "base/time/time.h"
#include "content/public/browser/plugin_data_remover.h"

namespace content {

class CONTENT_EXPORT PluginDataRemoverImpl : public PluginDataRemover {
 public:
  explicit PluginDataRemoverImpl(BrowserContext* browser_context);
  ~PluginDataRemoverImpl() override;

  // PluginDataRemover implementation:
  base::WaitableEvent* StartRemoving(base::Time begin_time) override;

  // The plug-in whose data should be removed (usually Flash) is specified via
  // its MIME type. This method sets a different MIME type in order to call a
  // different plug-in (for example in tests).
  void set_mime_type(const std::string& mime_type) { mime_type_ = mime_type; }

 private:
  class Context;

  std::string mime_type_;

  // The browser context for the profile.
  BrowserContext* browser_context_;

  // This allows this object to be deleted on the UI thread while it's still
  // being used on the IO thread.
  scoped_refptr<Context> context_;

  DISALLOW_COPY_AND_ASSIGN(PluginDataRemoverImpl);
};

}  // namespace content

#endif  // CONTENT_BROWSER_PLUGIN_DATA_REMOVER_IMPL_H_
