1 // Copyright (c) 2011 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.
5 #include "chrome/browser/plugin_data_remover_helper.h"
9 #include "base/memory/ref_counted.h"
10 #include "chrome/browser/plugin_data_remover.h"
11 #include "chrome/browser/prefs/pref_service.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "content/browser/browser_thread.h"
14 #include "content/common/notification_service.h"
16 // The internal class is refcounted so it can outlive PluginDataRemoverHelper.
17 class PluginDataRemoverHelper::Internal
18 : public base::RefCountedThreadSafe
<PluginDataRemoverHelper::Internal
> {
20 explicit Internal(const char* pref_name
, PrefService
* prefs
)
21 : pref_name_(pref_name
), prefs_(prefs
) {}
24 BrowserThread::PostTask(
29 &PluginDataRemoverHelper::Internal::UpdateOnFileThread
));
37 friend class base::RefCountedThreadSafe
<Internal
>;
41 void UpdateOnFileThread() {
42 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
43 bool result
= PluginDataRemover::IsSupported();
44 BrowserThread::PostTask(
47 NewRunnableMethod(this,
48 &PluginDataRemoverHelper::Internal::SetPrefOnUIThread
,
52 void SetPrefOnUIThread(bool value
) {
53 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI
));
55 prefs_
->SetBoolean(pref_name_
.c_str(), value
);
58 std::string pref_name_
;
62 DISALLOW_COPY_AND_ASSIGN(Internal
);
65 PluginDataRemoverHelper::PluginDataRemoverHelper() {}
67 PluginDataRemoverHelper::~PluginDataRemoverHelper() {
68 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI
));
70 internal_
->Invalidate();
73 void PluginDataRemoverHelper::Init(const char* pref_name
,
75 NotificationObserver
* observer
) {
76 pref_
.Init(pref_name
, prefs
, observer
);
77 registrar_
.Add(this, NotificationType::PLUGIN_ENABLE_STATUS_CHANGED
,
78 NotificationService::AllSources());
79 internal_
= make_scoped_refptr(new Internal(pref_name
, prefs
));
80 internal_
->StartUpdate();
83 void PluginDataRemoverHelper::Observe(NotificationType type
,
84 const NotificationSource
& source
,
85 const NotificationDetails
& details
) {
86 if (type
.value
== NotificationType::PLUGIN_ENABLE_STATUS_CHANGED
) {
87 internal_
->StartUpdate();