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

Unified Diff: content/browser/plugin_data_remover_impl.cc

Issue 8590016: Move the PluginDataRemover class to content, and remove the chrome pieces from it. This class rea... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 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
« no previous file with comments | « content/browser/plugin_data_remover_impl.h ('k') | content/browser/plugin_data_remover_impl_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/plugin_data_remover_impl.cc
===================================================================
--- content/browser/plugin_data_remover_impl.cc (revision 110324)
+++ content/browser/plugin_data_remover_impl.cc (working copy)
@@ -2,26 +2,17 @@
// 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.h"
+#include "content/browser/plugin_data_remover_impl.h"
#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/message_loop_proxy.h"
#include "base/metrics/histogram.h"
#include "base/synchronization/waitable_event.h"
#include "base/version.h"
-#include "chrome/browser/plugin_prefs.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/chrome_switches.h"
#include "content/browser/plugin_service.h"
#include "content/common/plugin_messages.h"
#include "content/public/browser/browser_thread.h"
#include "webkit/plugins/npapi/plugin_group.h"
-#if defined(OS_POSIX)
-#include "ipc/ipc_channel_posix.h"
-#endif
-
using content::BrowserThread;
namespace {
@@ -34,83 +25,104 @@
} // namespace
-PluginDataRemover::PluginDataRemover(Profile* profile)
+namespace content {
+
+// static
+PluginDataRemover* PluginDataRemover::Create(
+ const content::ResourceContext& resource_context) {
+ return new PluginDataRemoverImpl(resource_context);
+}
+
+// static
+bool PluginDataRemover::IsSupported(webkit::WebPluginInfo* plugin) {
+ bool allow_wildcard = false;
+ std::vector<webkit::WebPluginInfo> plugins;
+ PluginService::GetInstance()->GetPluginInfoArray(
+ GURL(), kFlashMimeType, allow_wildcard, &plugins, NULL);
+ std::vector<webkit::WebPluginInfo>::iterator plugin_it = plugins.begin();
+ if (plugin_it == plugins.end())
+ return false;
+ scoped_ptr<Version> version(
+ webkit::npapi::PluginGroup::CreateVersionFromString(plugin_it->version));
+ scoped_ptr<Version> min_version(
+ Version::GetVersionFromString(kMinFlashVersion));
+ bool rv = version.get() && min_version->CompareTo(*version) == -1;
+ if (rv)
+ *plugin = *plugin_it;
+ return rv;
+}
+
+}
+
+PluginDataRemoverImpl::PluginDataRemoverImpl(
+ const content::ResourceContext& resource_context)
: mime_type_(kFlashMimeType),
+ is_starting_process_(false),
is_removing_(false),
- context_(profile->GetResourceContext()),
+ context_(resource_context),
event_(new base::WaitableEvent(true, false)),
- channel_(NULL) {
+ channel_(NULL),
+ ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
}
-PluginDataRemover::~PluginDataRemover() {
+PluginDataRemoverImpl::~PluginDataRemoverImpl() {
+ if (is_starting_process_)
+ PluginService::GetInstance()->CancelOpenChannelToNpapiPlugin(this);
DCHECK(!is_removing_);
if (channel_)
BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, channel_);
}
-base::WaitableEvent* PluginDataRemover::StartRemoving(base::Time begin_time) {
+base::WaitableEvent* PluginDataRemoverImpl::StartRemoving(
+ base::Time begin_time) {
DCHECK(!is_removing_);
remove_start_time_ = base::Time::Now();
begin_time_ = begin_time;
+ is_starting_process_ = true;
is_removing_ = true;
-
- // Balanced in OnChannelOpened or OnError. Exactly one them will eventually be
- // called, so we need to keep this object around until then.
- AddRef();
PluginService::GetInstance()->OpenChannelToNpapiPlugin(
0, 0, GURL(), GURL(), mime_type_, this);
BrowserThread::PostDelayedTask(
BrowserThread::IO,
FROM_HERE,
- base::Bind(&PluginDataRemover::OnTimeout, this),
+ base::Bind(&PluginDataRemoverImpl::OnTimeout, weak_factory_.GetWeakPtr()),
kRemovalTimeoutMs);
return event_.get();
}
-void PluginDataRemover::Wait() {
- base::Time start_time(base::Time::Now());
- if (is_removing_)
- event_->Wait();
- UMA_HISTOGRAM_TIMES("ClearPluginData.wait_at_shutdown",
- base::Time::Now() - start_time);
- UMA_HISTOGRAM_TIMES("ClearPluginData.time_at_shutdown",
- base::Time::Now() - remove_start_time_);
-}
-
-int PluginDataRemover::ID() {
+int PluginDataRemoverImpl::ID() {
// Generate a unique identifier for this PluginProcessHostClient.
return ChildProcessInfo::GenerateChildProcessUniqueId();
}
-bool PluginDataRemover::OffTheRecord() {
+bool PluginDataRemoverImpl::OffTheRecord() {
return false;
}
-const content::ResourceContext& PluginDataRemover::GetResourceContext() {
+const content::ResourceContext& PluginDataRemoverImpl::GetResourceContext() {
return context_;
}
-void PluginDataRemover::SetPluginInfo(
+void PluginDataRemoverImpl::SetPluginInfo(
const webkit::WebPluginInfo& info) {
}
-void PluginDataRemover::OnFoundPluginProcessHost(
+void PluginDataRemoverImpl::OnFoundPluginProcessHost(
PluginProcessHost* host) {
}
-void PluginDataRemover::OnSentPluginChannelRequest() {
+void PluginDataRemoverImpl::OnSentPluginChannelRequest() {
}
-void PluginDataRemover::OnChannelOpened(const IPC::ChannelHandle& handle) {
+void PluginDataRemoverImpl::OnChannelOpened(const IPC::ChannelHandle& handle) {
+ is_starting_process_ = false;
ConnectToChannel(handle);
- // Balancing the AddRef call in StartRemoving.
- Release();
}
-void PluginDataRemover::ConnectToChannel(const IPC::ChannelHandle& handle) {
+void PluginDataRemoverImpl::ConnectToChannel(const IPC::ChannelHandle& handle) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
// If we timed out, don't bother connecting.
@@ -134,27 +146,25 @@
}
}
-void PluginDataRemover::OnError() {
+void PluginDataRemoverImpl::OnError() {
LOG(DFATAL) << "Couldn't open plugin channel";
SignalDone();
- // Balancing the AddRef call in StartRemoving.
- Release();
}
-void PluginDataRemover::OnClearSiteDataResult(bool success) {
+void PluginDataRemoverImpl::OnClearSiteDataResult(bool success) {
LOG_IF(ERROR, !success) << "ClearSiteData returned error";
UMA_HISTOGRAM_TIMES("ClearPluginData.time",
base::Time::Now() - remove_start_time_);
SignalDone();
}
-void PluginDataRemover::OnTimeout() {
+void PluginDataRemoverImpl::OnTimeout() {
LOG_IF(ERROR, is_removing_) << "Timed out";
SignalDone();
}
-bool PluginDataRemover::OnMessageReceived(const IPC::Message& msg) {
- IPC_BEGIN_MESSAGE_MAP(PluginDataRemover, msg)
+bool PluginDataRemoverImpl::OnMessageReceived(const IPC::Message& msg) {
+ IPC_BEGIN_MESSAGE_MAP(PluginDataRemoverImpl, msg)
IPC_MESSAGE_HANDLER(PluginHostMsg_ClearSiteDataResult,
OnClearSiteDataResult)
IPC_MESSAGE_UNHANDLED_ERROR()
@@ -163,38 +173,18 @@
return true;
}
-void PluginDataRemover::OnChannelError() {
+void PluginDataRemoverImpl::OnChannelError() {
+ is_starting_process_ = false;
if (is_removing_) {
NOTREACHED() << "Channel error";
SignalDone();
}
}
-void PluginDataRemover::SignalDone() {
+void PluginDataRemoverImpl::SignalDone() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
if (!is_removing_)
return;
is_removing_ = false;
event_->Signal();
}
-
-// static
-bool PluginDataRemover::IsSupported(PluginPrefs* plugin_prefs) {
- bool allow_wildcard = false;
- std::vector<webkit::WebPluginInfo> plugins;
- PluginService::GetInstance()->GetPluginInfoArray(
- GURL(), kFlashMimeType, allow_wildcard, &plugins, NULL);
- std::vector<webkit::WebPluginInfo>::iterator plugin = plugins.begin();
- if (plugin == plugins.end())
- return false;
- scoped_ptr<Version> version(
- webkit::npapi::PluginGroup::CreateVersionFromString(plugin->version));
- scoped_ptr<Version> min_version(Version::GetVersionFromString(
- CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kMinClearSiteDataFlashVersion)));
- if (!min_version.get())
- min_version.reset(Version::GetVersionFromString(kMinFlashVersion));
- return plugin_prefs->IsPluginEnabled(*plugin) &&
- version.get() &&
- min_version->CompareTo(*version) == -1;
-}
« no previous file with comments | « content/browser/plugin_data_remover_impl.h ('k') | content/browser/plugin_data_remover_impl_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698