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

Unified Diff: chrome/common/chrome_plugin_lib.cc

Issue 6576020: Remove Gears from Chrome (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: windows fixes Created 9 years, 9 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 | « chrome/common/chrome_plugin_lib.h ('k') | chrome/common/chrome_plugin_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/chrome_plugin_lib.cc
diff --git a/chrome/common/chrome_plugin_lib.cc b/chrome/common/chrome_plugin_lib.cc
deleted file mode 100644
index 7df1837fa8403885c3e0043fb4107a41efd1fed8..0000000000000000000000000000000000000000
--- a/chrome/common/chrome_plugin_lib.cc
+++ /dev/null
@@ -1,292 +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/common/chrome_plugin_lib.h"
-
-#include "base/command_line.h"
-#include "base/hash_tables.h"
-#include "base/message_loop.h"
-#include "base/metrics/histogram.h"
-#include "base/path_service.h"
-#include "base/perftimer.h"
-#include "base/string_util.h"
-#include "base/threading/platform_thread.h"
-#include "base/threading/thread.h"
-#include "chrome/common/chrome_counters.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_switches.h"
-#include "content/common/notification_service.h"
-#include "webkit/plugins/npapi/plugin_list.h"
-
-#if defined(OS_WIN)
-#include "base/win/registry.h"
-#endif
-
-using base::TimeDelta;
-
-// TODO(port): revisit when plugins happier
-#if defined(OS_WIN)
-const wchar_t ChromePluginLib::kRegistryChromePlugins[] =
- L"Software\\Google\\Chrome\\Plugins";
-static const wchar_t kRegistryLoadOnStartup[] = L"LoadOnStartup";
-static const wchar_t kRegistryPath[] = L"Path";
-#endif
-
-typedef base::hash_map<FilePath, scoped_refptr<ChromePluginLib> >
- PluginMap;
-
-// A map of all the instantiated plugins.
-static PluginMap* g_loaded_libs;
-
-// The thread plugins are loaded and used in, lazily initialized upon
-// the first creation call.
-static base::PlatformThreadId g_plugin_thread_id = 0;
-static MessageLoop* g_plugin_thread_loop = NULL;
-
-static bool IsSingleProcessMode() {
- // We don't support ChromePlugins in single-process mode.
- return CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess);
-}
-
-// static
-bool ChromePluginLib::IsInitialized() {
- return (g_loaded_libs != NULL);
-}
-
-// static
-ChromePluginLib* ChromePluginLib::Create(const FilePath& filename,
- const CPBrowserFuncs* bfuncs) {
- // Keep a map of loaded plugins to ensure we only load each library once.
- if (!g_loaded_libs) {
- g_loaded_libs = new PluginMap();
- g_plugin_thread_id = base::PlatformThread::CurrentId();
- g_plugin_thread_loop = MessageLoop::current();
- }
- DCHECK(IsPluginThread());
-
- PluginMap::const_iterator iter = g_loaded_libs->find(filename);
- if (iter != g_loaded_libs->end())
- return iter->second;
-
- scoped_refptr<ChromePluginLib> plugin(new ChromePluginLib(filename));
- if (!plugin->CP_Initialize(bfuncs))
- return NULL;
-
- (*g_loaded_libs)[filename] = plugin;
- return plugin;
-}
-
-// static
-ChromePluginLib* ChromePluginLib::Find(const FilePath& filename) {
- if (g_loaded_libs) {
- PluginMap::const_iterator iter = g_loaded_libs->find(filename);
- if (iter != g_loaded_libs->end())
- return iter->second;
- }
- return NULL;
-}
-
-// static
-void ChromePluginLib::Destroy(const FilePath& filename) {
- DCHECK(g_loaded_libs);
- PluginMap::iterator iter = g_loaded_libs->find(filename);
- if (iter != g_loaded_libs->end()) {
- iter->second->Unload();
- g_loaded_libs->erase(iter);
- }
-}
-
-// static
-bool ChromePluginLib::IsPluginThread() {
- return base::PlatformThread::CurrentId() == g_plugin_thread_id;
-}
-
-// static
-MessageLoop* ChromePluginLib::GetPluginThreadLoop() {
- return g_plugin_thread_loop;
-}
-
-// static
-void ChromePluginLib::RegisterPluginsWithNPAPI() {
- // We don't support ChromePlugins in single-process mode.
- if (IsSingleProcessMode())
- return;
-
- FilePath path;
- // Register Gears, if available.
- if (PathService::Get(chrome::FILE_GEARS_PLUGIN, &path))
- webkit::npapi::PluginList::Singleton()->AddExtraPluginPath(path);
-}
-
-static void LogPluginLoadTime(const TimeDelta &time) {
- UMA_HISTOGRAM_TIMES("Gears.LoadTime", time);
-}
-
-// static
-void ChromePluginLib::LoadChromePlugins(const CPBrowserFuncs* bfuncs) {
- static bool loaded = false;
- if (loaded)
- return;
- loaded = true;
-
- // We don't support ChromePlugins in single-process mode.
- if (IsSingleProcessMode())
- return;
-
- FilePath path;
- if (!PathService::Get(chrome::FILE_GEARS_PLUGIN, &path))
- return;
-
- PerfTimer timer;
- ChromePluginLib::Create(path, bfuncs);
- LogPluginLoadTime(timer.Elapsed());
-
- // TODO(mpcomplete): disabled loading of plugins from the registry until we
- // phase out registry keys from the gears installer.
-#if 0
- for (RegistryKeyIterator iter(HKEY_CURRENT_USER, kRegistryChromePlugins);
- iter.Valid(); ++iter) {
- // Use the registry to gather plugin across the file system.
- std::wstring reg_path = kRegistryChromePlugins;
- reg_path.append(L"\\");
- reg_path.append(iter.Name());
- base::win::RegKey key(HKEY_CURRENT_USER, reg_path.c_str());
-
- DWORD is_persistent = 0;
- key.ReadValueDW(kRegistryLoadOnStartup, &is_persistent);
- if (is_persistent) {
- std::wstring path;
- if (key.ReadValue(kRegistryPath, &path) == ERROR_SUCCESS) {
- ChromePluginLib::Create(path, bfuncs);
- }
- }
- }
-#endif
-}
-
-// static
-void ChromePluginLib::UnloadAllPlugins() {
- if (g_loaded_libs) {
- PluginMap::iterator it;
- for (PluginMap::iterator it = g_loaded_libs->begin();
- it != g_loaded_libs->end(); ++it) {
- it->second->Unload();
- }
- delete g_loaded_libs;
- g_loaded_libs = NULL;
- }
-}
-
-const CPPluginFuncs& ChromePluginLib::functions() const {
- DCHECK(initialized_);
- DCHECK(IsPluginThread());
- return plugin_funcs_;
-}
-
-ChromePluginLib::ChromePluginLib(const FilePath& filename)
- : filename_(filename),
-#if defined(OS_WIN)
- module_(0),
-#endif
- initialized_(false),
- CP_VersionNegotiate_(NULL),
- CP_Initialize_(NULL),
- CP_Test_(NULL) {
- memset((void*)&plugin_funcs_, 0, sizeof(plugin_funcs_));
-}
-
-ChromePluginLib::~ChromePluginLib() {
-}
-
-bool ChromePluginLib::CP_Initialize(const CPBrowserFuncs* bfuncs) {
- VLOG(1) << "ChromePluginLib::CP_Initialize(" << filename_.value()
- << "): initialized=" << initialized_;
- if (initialized_)
- return true;
-
- if (!Load())
- return false;
-
- if (CP_VersionNegotiate_) {
- uint16 selected_version = 0;
- CPError rv = CP_VersionNegotiate_(CP_VERSION, CP_VERSION,
- &selected_version);
- if ((rv != CPERR_SUCCESS) || (selected_version != CP_VERSION))
- return false;
- }
-
- plugin_funcs_.size = sizeof(plugin_funcs_);
- CPError rv = CP_Initialize_(cpid(), bfuncs, &plugin_funcs_);
- initialized_ = (rv == CPERR_SUCCESS) &&
- (CP_GET_MAJOR_VERSION(plugin_funcs_.version) == CP_MAJOR_VERSION) &&
- (CP_GET_MINOR_VERSION(plugin_funcs_.version) <= CP_MINOR_VERSION);
- VLOG(1) << "ChromePluginLib::CP_Initialize(" << filename_.value()
- << "): initialized=" << initialized_ << "): result=" << rv;
-
- return initialized_;
-}
-
-void ChromePluginLib::CP_Shutdown() {
- DCHECK(initialized_);
- functions().shutdown();
- initialized_ = false;
- memset((void*)&plugin_funcs_, 0, sizeof(plugin_funcs_));
-}
-
-int ChromePluginLib::CP_Test(void* param) {
- DCHECK(initialized_);
- if (!CP_Test_)
- return -1;
- return CP_Test_(param);
-}
-
-bool ChromePluginLib::Load() {
-#if !defined(OS_WIN)
- // Mac and Linux won't implement Gears.
- return false;
-#else
- DCHECK(module_ == 0);
-
- module_ = LoadLibrary(filename_.value().c_str());
- if (module_ == 0)
- return false;
-
- // required initialization function
- CP_Initialize_ = reinterpret_cast<CP_InitializeFunc>
- (GetProcAddress(module_, "CP_Initialize"));
-
- if (!CP_Initialize_) {
- FreeLibrary(module_);
- module_ = 0;
- return false;
- }
-
- // optional version negotiation function
- CP_VersionNegotiate_ = reinterpret_cast<CP_VersionNegotiateFunc>
- (GetProcAddress(module_, "CP_VersionNegotiate"));
-
- // optional test function
- CP_Test_ = reinterpret_cast<CP_TestFunc>
- (GetProcAddress(module_, "CP_Test"));
-
- return true;
-#endif
-}
-
-void ChromePluginLib::Unload() {
- NotificationService::current()->Notify(
- NotificationType::CHROME_PLUGIN_UNLOADED,
- Source<ChromePluginLib>(this),
- NotificationService::NoDetails());
-
- if (initialized_)
- CP_Shutdown();
-
-#if defined(OS_WIN)
- if (module_) {
- FreeLibrary(module_);
- module_ = 0;
- }
-#endif
-}
« no previous file with comments | « chrome/common/chrome_plugin_lib.h ('k') | chrome/common/chrome_plugin_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698