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..a589d0e5fb12f22732d7120b95dbe5a70e1a3d0a |
--- /dev/null |
+++ b/chrome/browser/plugin_data_remover_helper.cc |
@@ -0,0 +1,76 @@ |
+// 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/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); |
+ internal_ = make_scoped_refptr(new Internal(pref_name, prefs)); |
+ internal_->StartUpdate(); |
+} |