Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(563)

Unified Diff: chrome/browser/plugin_data_remover.cc

Issue 5278001: Add a preference to clear Flash LSO data in the Clear Browsing Data dialog. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/plugin_data_remover.cc
diff --git a/chrome/browser/plugin_data_remover.cc b/chrome/browser/plugin_data_remover.cc
index 4415c5f3d6d8755ea962180410c6f424ff245b20..200e7bedaffe91fb3fd1b05c4b412d290bf7e9f5 100644
--- a/chrome/browser/plugin_data_remover.cc
+++ b/chrome/browser/plugin_data_remover.cc
@@ -5,10 +5,13 @@
#include "chrome/browser/plugin_data_remover.h"
#include "base/message_loop_proxy.h"
+#include "base/version.h"
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/plugin_service.h"
#include "chrome/common/plugin_messages.h"
#include "ipc/ipc_channel.h"
+#include "webkit/glue/plugins/plugin_group.h"
+#include "webkit/glue/plugins/plugin_list.h"
#if defined(OS_POSIX)
#include "ipc/ipc_channel_posix.h"
@@ -16,6 +19,7 @@
namespace {
const std::string flash_mime_type = "application/x-shockwave-flash";
+const std::string min_flash_version = "10.2";
const int64 timeout_ms = 10000;
}
@@ -40,8 +44,7 @@ void PluginDataRemover::StartRemoving(base::Time begin_time, Task* done_task) {
PluginService::GetInstance()->OpenChannelToPlugin(
GURL(), flash_mime_type, this);
- BrowserThread::PostDelayedTask(
- BrowserThread::IO,
+ MessageLoop::current()->PostDelayedTask(
FROM_HERE,
method_factory_.NewRunnableMethod(&PluginDataRemover::OnTimeout),
timeout_ms);
@@ -110,9 +113,32 @@ void PluginDataRemover::OnChannelError() {
}
void PluginDataRemover::SignalDone() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ // This method could be called from the timeout callback while in another
+ // callback, so we keep a lock while releasing |done_task_|.
+ AutoLock lock(task_lock_);
if (!done_task_.get())
return;
message_loop_->PostTask(FROM_HERE, done_task_.release());
message_loop_ = NULL;
}
+
+// static
+bool PluginDataRemover::IsSupported() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ bool allow_wildcard = false;
+ WebPluginInfo plugin;
+ std::string mime_type;
+ if (!NPAPI::PluginList::Singleton()->GetPluginInfo(GURL(),
+ flash_mime_type,
+ allow_wildcard,
+ &plugin,
+ &mime_type))
+ return false;
+ scoped_ptr<Version> version(
+ PluginGroup::CreateVersionFromString(plugin.version));
+ scoped_ptr<Version> min_version(
+ Version::GetVersionFromString(min_flash_version));
+ return plugin.enabled &&
+ version.get()
+ && min_version->CompareTo(*version) == -1;
+}

Powered by Google App Engine
This is Rietveld 408576698