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

Unified Diff: content/browser/plugin_loader_posix.cc

Issue 1862513003: Remove NPAPI from browser and utility (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 8 months 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_loader_posix.h ('k') | content/browser/plugin_loader_posix_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/plugin_loader_posix.cc
diff --git a/content/browser/plugin_loader_posix.cc b/content/browser/plugin_loader_posix.cc
deleted file mode 100644
index dcfb55812ef45dcab4ce73a674b073a1d9f0f8b9..0000000000000000000000000000000000000000
--- a/content/browser/plugin_loader_posix.cc
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright (c) 2012 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 "content/browser/plugin_loader_posix.h"
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/metrics/histogram.h"
-#include "base/single_thread_task_runner.h"
-#include "base/thread_task_runner_handle.h"
-#include "content/browser/utility_process_host_impl.h"
-#include "content/common/child_process_host_impl.h"
-#include "content/common/plugin_list.h"
-#include "content/common/utility_messages.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/plugin_service.h"
-#include "content/public/browser/user_metrics.h"
-
-namespace content {
-
-PluginLoaderPosix::PluginLoaderPosix()
- : next_load_index_(0), loading_plugins_(false) {
-}
-
-void PluginLoaderPosix::GetPlugins(
- const PluginService::GetPluginsCallback& callback) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- std::vector<WebPluginInfo> cached_plugins;
- if (PluginList::Singleton()->GetPluginsNoRefresh(&cached_plugins)) {
- // Can't assume the caller is reentrant.
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(callback, cached_plugins));
- return;
- }
-
- if (!loading_plugins_) {
- loading_plugins_ = true;
- callbacks_.push_back(callback);
-
- // When |loading_plugins_| is set to false, this instance must call
- // SetPlugins().
- PluginList::Singleton()->PrepareForPluginLoading();
-
- BrowserThread::PostTask(BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&PluginLoaderPosix::GetPluginsToLoad,
- make_scoped_refptr(this)));
- } else {
- // If we are currently loading plugins, the plugin list might have been
- // invalidated in the mean time, or might get invalidated before we finish.
- // We'll wait until we have finished the current run, then try to get them
- // again from the plugin list. If it has indeed been invalidated, it will
- // restart plugin loading, otherwise it will immediately run the callback.
- callbacks_.push_back(base::Bind(&PluginLoaderPosix::GetPluginsWrapper,
- make_scoped_refptr(this), callback));
- }
-}
-
-bool PluginLoaderPosix::OnMessageReceived(const IPC::Message& message) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(PluginLoaderPosix, message)
- IPC_MESSAGE_HANDLER(UtilityHostMsg_LoadedPlugin, OnPluginLoaded)
- IPC_MESSAGE_HANDLER(UtilityHostMsg_LoadPluginFailed, OnPluginLoadFailed)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
-void PluginLoaderPosix::OnProcessCrashed(int exit_code) {
- RecordAction(
- base::UserMetricsAction("PluginLoaderPosix.UtilityProcessCrashed"));
-
- if (next_load_index_ == canonical_list_.size()) {
- // How this case occurs is unknown. See crbug.com/111935.
- canonical_list_.clear();
- } else {
- canonical_list_.erase(canonical_list_.begin(),
- canonical_list_.begin() + next_load_index_ + 1);
- }
-
- next_load_index_ = 0;
-
- LoadPluginsInternal();
-}
-
-void PluginLoaderPosix::OnProcessLaunchFailed() {
- FinishedLoadingPlugins();
-}
-
-bool PluginLoaderPosix::Send(IPC::Message* message) {
- if (process_host_.get())
- return process_host_->Send(message);
- return false;
-}
-
-PluginLoaderPosix::~PluginLoaderPosix() {
-}
-
-void PluginLoaderPosix::GetPluginsToLoad() {
- DCHECK_CURRENTLY_ON(BrowserThread::FILE);
-
- base::TimeTicks start_time(base::TimeTicks::Now());
-
- loaded_plugins_.clear();
- next_load_index_ = 0;
-
- canonical_list_.clear();
- PluginList::Singleton()->GetPluginPathsToLoad(
- &canonical_list_,
- PluginService::GetInstance()->NPAPIPluginsSupported());
-
- internal_plugins_.clear();
- PluginList::Singleton()->GetInternalPlugins(&internal_plugins_);
-
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&PluginLoaderPosix::LoadPluginsInternal,
- make_scoped_refptr(this)));
-
- LOCAL_HISTOGRAM_TIMES("PluginLoaderPosix.GetPluginList",
- (base::TimeTicks::Now() - start_time) *
- base::Time::kMicrosecondsPerMillisecond);
-}
-
-void PluginLoaderPosix::LoadPluginsInternal() {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
-
- // Check if the list is empty or all plugins have already been loaded before
- // forking.
- if (IsFinishedLoadingPlugins()) {
- FinishedLoadingPlugins();
- return;
- }
-
- RecordAction(
- base::UserMetricsAction("PluginLoaderPosix.LaunchUtilityProcess"));
-
- UtilityProcessHostImpl* host = new UtilityProcessHostImpl(
- this,
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO).get());
- process_host_ = host->AsWeakPtr();
- process_host_->DisableSandbox();
-
- bool launched = LaunchUtilityProcess();
- if (!launched) {
- // The utility process either failed to start or failed to receive the IPC.
- // This process will never receive any callbacks for OnPluginLoaded() or
- // OnPluginLoadFailed().
- FinishedLoadingPlugins();
- }
-}
-
-void PluginLoaderPosix::GetPluginsWrapper(
- const PluginService::GetPluginsCallback& callback,
- const std::vector<WebPluginInfo>& plugins_unused) {
- // We are being called after plugin loading has finished, but we don't know
- // whether the plugin list has been invalidated in the mean time
- // (and therefore |plugins| might already be stale). So we simply ignore it
- // and call regular GetPlugins() instead.
- GetPlugins(callback);
-}
-
-void PluginLoaderPosix::OnPluginLoaded(uint32_t index,
- const WebPluginInfo& plugin) {
- if (index != next_load_index_) {
- LOG(ERROR) << "Received unexpected plugin load message for "
- << plugin.path.value() << "; index=" << index;
- return;
- }
-
- auto it = FindInternalPlugin(plugin.path);
- if (it != internal_plugins_.end()) {
- loaded_plugins_.push_back(*it);
- internal_plugins_.erase(it);
- } else {
- loaded_plugins_.push_back(plugin);
- }
-
- ++next_load_index_;
-
- if (IsFinishedLoadingPlugins())
- FinishedLoadingPlugins();
-}
-
-void PluginLoaderPosix::OnPluginLoadFailed(uint32_t index,
- const base::FilePath& plugin_path) {
- if (index != next_load_index_) {
- LOG(ERROR) << "Received unexpected plugin load failure message for "
- << plugin_path.value() << "; index=" << index;
- return;
- }
-
- ++next_load_index_;
-
- auto it = FindInternalPlugin(plugin_path);
- if (it != internal_plugins_.end()) {
- loaded_plugins_.push_back(*it);
- internal_plugins_.erase(it);
- }
-
- if (IsFinishedLoadingPlugins())
- FinishedLoadingPlugins();
-}
-
-std::vector<WebPluginInfo>::iterator PluginLoaderPosix::FindInternalPlugin(
- const base::FilePath& plugin_path) {
- return std::find_if(internal_plugins_.begin(), internal_plugins_.end(),
- [&plugin_path](const WebPluginInfo& plugin) {
- return plugin.path == plugin_path;
- });
-}
-
-bool PluginLoaderPosix::IsFinishedLoadingPlugins() {
- if (canonical_list_.empty())
- return true;
-
- DCHECK(next_load_index_ <= canonical_list_.size());
- return next_load_index_ == canonical_list_.size();
-}
-
-void PluginLoaderPosix::FinishedLoadingPlugins() {
- loading_plugins_ = false;
- PluginList::Singleton()->SetPlugins(loaded_plugins_);
-
- for (auto& callback : callbacks_) {
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(callback, loaded_plugins_));
- }
- callbacks_.clear();
-}
-
-bool PluginLoaderPosix::LaunchUtilityProcess() {
- return process_host_->Send(new UtilityMsg_LoadPlugins(canonical_list_));
-}
-
-} // namespace content
« no previous file with comments | « content/browser/plugin_loader_posix.h ('k') | content/browser/plugin_loader_posix_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698