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

Unified Diff: chrome/browser/plugin_data_remover.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
Index: chrome/browser/plugin_data_remover.cc
===================================================================
--- chrome/browser/plugin_data_remover.cc (revision 110324)
+++ chrome/browser/plugin_data_remover.cc (working copy)
@@ -1,200 +0,0 @@
-// Copyright (c) 2011 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.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 {
-
-const char kFlashMimeType[] = "application/x-shockwave-flash";
-// The minimum Flash Player version that implements NPP_ClearSiteData.
-const char kMinFlashVersion[] = "10.3";
-const int64 kRemovalTimeoutMs = 10000;
-const uint64 kClearAllData = 0;
-
-} // namespace
-
-PluginDataRemover::PluginDataRemover(Profile* profile)
- : mime_type_(kFlashMimeType),
- is_removing_(false),
- context_(profile->GetResourceContext()),
- event_(new base::WaitableEvent(true, false)),
- channel_(NULL) {
-}
-
-PluginDataRemover::~PluginDataRemover() {
- DCHECK(!is_removing_);
- if (channel_)
- BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, channel_);
-}
-
-base::WaitableEvent* PluginDataRemover::StartRemoving(base::Time begin_time) {
- DCHECK(!is_removing_);
- remove_start_time_ = base::Time::Now();
- begin_time_ = begin_time;
-
- 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),
- 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() {
- // Generate a unique identifier for this PluginProcessHostClient.
- return ChildProcessInfo::GenerateChildProcessUniqueId();
-}
-
-bool PluginDataRemover::OffTheRecord() {
- return false;
-}
-
-const content::ResourceContext& PluginDataRemover::GetResourceContext() {
- return context_;
-}
-
-void PluginDataRemover::SetPluginInfo(
- const webkit::WebPluginInfo& info) {
-}
-
-void PluginDataRemover::OnFoundPluginProcessHost(
- PluginProcessHost* host) {
-}
-
-void PluginDataRemover::OnSentPluginChannelRequest() {
-}
-
-void PluginDataRemover::OnChannelOpened(const IPC::ChannelHandle& handle) {
- ConnectToChannel(handle);
- // Balancing the AddRef call in StartRemoving.
- Release();
-}
-
-void PluginDataRemover::ConnectToChannel(const IPC::ChannelHandle& handle) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- // If we timed out, don't bother connecting.
- if (!is_removing_)
- return;
-
- DCHECK(!channel_);
- channel_ = new IPC::Channel(handle, IPC::Channel::MODE_CLIENT, this);
- if (!channel_->Connect()) {
- NOTREACHED() << "Couldn't connect to plugin";
- SignalDone();
- return;
- }
-
- if (!channel_->Send(new PluginMsg_ClearSiteData(std::string(),
- kClearAllData,
- begin_time_))) {
- NOTREACHED() << "Couldn't send ClearSiteData message";
- SignalDone();
- return;
- }
-}
-
-void PluginDataRemover::OnError() {
- LOG(DFATAL) << "Couldn't open plugin channel";
- SignalDone();
- // Balancing the AddRef call in StartRemoving.
- Release();
-}
-
-void PluginDataRemover::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() {
- LOG_IF(ERROR, is_removing_) << "Timed out";
- SignalDone();
-}
-
-bool PluginDataRemover::OnMessageReceived(const IPC::Message& msg) {
- IPC_BEGIN_MESSAGE_MAP(PluginDataRemover, msg)
- IPC_MESSAGE_HANDLER(PluginHostMsg_ClearSiteDataResult,
- OnClearSiteDataResult)
- IPC_MESSAGE_UNHANDLED_ERROR()
- IPC_END_MESSAGE_MAP()
-
- return true;
-}
-
-void PluginDataRemover::OnChannelError() {
- if (is_removing_) {
- NOTREACHED() << "Channel error";
- SignalDone();
- }
-}
-
-void PluginDataRemover::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;
-}

Powered by Google App Engine
This is Rietveld 408576698