| Index: chrome/browser/plugin_data_remover_helper.cc
|
| diff --git a/chrome/browser/plugin_data_remover_helper.cc b/chrome/browser/plugin_data_remover_helper.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c3a1c37e46b220fb1c0b6714ef09ffccbb368484
|
| --- /dev/null
|
| +++ b/chrome/browser/plugin_data_remover_helper.cc
|
| @@ -0,0 +1,89 @@
|
| +// Copyright (c) 2010 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.
|
| +
|
| +#include "chrome/browser/plugin_data_remover_helper.h"
|
| +
|
| +#include "base/ref_counted.h"
|
| +#include "chrome/browser/browser_thread.h"
|
| +#include "chrome/browser/plugin_data_remover.h"
|
| +#include "chrome/common/notification_service.h"
|
| +#include "chrome/common/pref_names.h"
|
| +#include "chrome/browser/prefs/pref_service.h"
|
| +#include "chrome/browser/profile.h"
|
| +
|
| +class PluginDataRemoverHelper::Internal
|
| + : public base::RefCountedThreadSafe<PluginDataRemoverHelper::Internal> {
|
| + public:
|
| + explicit Internal(const char* pref_name, PrefService* prefs)
|
| + : pref_name_(pref_name), prefs_(prefs) {}
|
| +
|
| + void StartUpdate() {
|
| + BrowserThread::PostTask(
|
| + BrowserThread::FILE,
|
| + FROM_HERE,
|
| + NewRunnableMethod(
|
| + this,
|
| + &PluginDataRemoverHelper::Internal::UpdateOnFileThread));
|
| + }
|
| +
|
| + void Invalidate() {
|
| + prefs_ = NULL;
|
| + }
|
| +
|
| + private:
|
| + friend class base::RefCountedThreadSafe<Internal>;
|
| +
|
| + ~Internal() {}
|
| +
|
| + void UpdateOnFileThread() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| + bool result = PluginDataRemover::IsSupported();
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI,
|
| + FROM_HERE,
|
| + NewRunnableMethod(this,
|
| + &PluginDataRemoverHelper::Internal::SetPrefOnUIThread,
|
| + result));
|
| + }
|
| +
|
| + void SetPrefOnUIThread(bool value) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + if (prefs_)
|
| + prefs_->SetBoolean(pref_name_.c_str(), value);
|
| + }
|
| +
|
| + std::string pref_name_;
|
| + // Weak pointer.
|
| + PrefService* prefs_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(Internal);
|
| +};
|
| +
|
| +PluginDataRemoverHelper::PluginDataRemoverHelper() {}
|
| +
|
| +PluginDataRemoverHelper::~PluginDataRemoverHelper() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + if (internal_)
|
| + internal_->Invalidate();
|
| +}
|
| +
|
| +void PluginDataRemoverHelper::Init(const char* pref_name,
|
| + PrefService* prefs,
|
| + NotificationObserver* observer) {
|
| + pref_.Init(pref_name, prefs, observer);
|
| + registrar_.Add(this, NotificationType::PLUGIN_ENABLE_STATUS_CHANGED,
|
| + NotificationService::AllSources());
|
| + internal_ = make_scoped_refptr(new Internal(pref_name, prefs));
|
| + internal_->StartUpdate();
|
| +}
|
| +
|
| +void PluginDataRemoverHelper::Observe(NotificationType type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details) {
|
| + if (type.value == NotificationType::PLUGIN_ENABLE_STATUS_CHANGED) {
|
| + internal_->StartUpdate();
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| +}
|
|
|