summaryrefslogtreecommitdiffstats
path: root/chrome/default_plugin/plugin_database_handler.cc
diff options
context:
space:
mode:
authorthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-07 02:48:34 +0000
committerthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-07 02:48:34 +0000
commit325358b8f7e145d69300b1186985a57ab59a546c (patch)
treeed7d81acaf409dde9df4acb5f712b0089945d5e7 /chrome/default_plugin/plugin_database_handler.cc
parent421fb9a0f6c489c006031c1789848e0565ab485c (diff)
downloadchromium_src-325358b8f7e145d69300b1186985a57ab59a546c.zip
chromium_src-325358b8f7e145d69300b1186985a57ab59a546c.tar.gz
chromium_src-325358b8f7e145d69300b1186985a57ab59a546c.tar.bz2
Revert 51681 - Move default_plugin out of webkit.
BUG=48419 Review URL: http://codereview.chromium.org/2803035 TBR=thakis@chromium.org Review URL: http://codereview.chromium.org/2819043 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51684 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/default_plugin/plugin_database_handler.cc')
-rw-r--r--chrome/default_plugin/plugin_database_handler.cc358
1 files changed, 0 insertions, 358 deletions
diff --git a/chrome/default_plugin/plugin_database_handler.cc b/chrome/default_plugin/plugin_database_handler.cc
deleted file mode 100644
index ab79752..0000000
--- a/chrome/default_plugin/plugin_database_handler.cc
+++ /dev/null
@@ -1,358 +0,0 @@
-// Copyright (c) 2006-2008 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/default_plugin/plugin_database_handler.h"
-
-#if defined(USE_SYSTEM_LIBXML)
-#include <parser.h>
-#include <xpath.h>
-#else
-#include "third_party/libxml/include/libxml/parser.h"
-#include "third_party/libxml/include/libxml/xpath.h"
-#endif
-
-#include "base/file_util.h"
-#include "base/path_service.h"
-#include "base/string_util.h"
-#include "base/time.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/default_plugin/plugin_impl.h"
-#include "chrome/default_plugin/plugin_main.h"
-
-using base::Time;
-using base::TimeDelta;
-
-PluginDatabaseHandler::PluginDatabaseHandler(
- PluginInstallerImpl& plugin_installer_instance)
- : plugin_downloads_file_(INVALID_HANDLE_VALUE),
- plugin_installer_instance_(plugin_installer_instance),
- ignore_plugin_db_data_(false) {
-}
-
-PluginDatabaseHandler::~PluginDatabaseHandler() {
- if (plugin_downloads_file_ != INVALID_HANDLE_VALUE) {
- ::CloseHandle(plugin_downloads_file_);
- plugin_downloads_file_ = INVALID_HANDLE_VALUE;
- }
-}
-
-bool PluginDatabaseHandler::DownloadPluginsFileIfNeeded(
- const std::string& plugin_finder_url) {
- DCHECK(!plugin_finder_url.empty());
- // The time in days for which the plugins list is cached.
- // TODO(iyengar) Make this configurable.
- const int kPluginsListCacheTimeInDays = 3;
-
- plugin_finder_url_ = plugin_finder_url;
-
- PathService::Get(base::DIR_MODULE, &plugins_file_);
- plugins_file_ += L"\\chrome_plugins_file.xml";
-
- bool initiate_download = false;
- if (!file_util::PathExists(FilePath::FromWStringHack(plugins_file_))) {
- initiate_download = true;
- } else {
- SYSTEMTIME creation_system_time = {0};
- if (!file_util::GetFileCreationLocalTime(plugins_file_,
- &creation_system_time)) {
- NOTREACHED();
- return false;
- }
-
- FILETIME creation_file_time = {0};
- ::SystemTimeToFileTime(&creation_system_time, &creation_file_time);
-
- FILETIME current_time = {0};
- ::GetSystemTimeAsFileTime(&current_time);
-
- Time file_time = Time::FromFileTime(creation_file_time);
- Time current_system_time = Time::FromFileTime(current_time);
-
- TimeDelta time_diff = file_time - current_system_time;
- if (time_diff.InDays() > kPluginsListCacheTimeInDays) {
- initiate_download = true;
- }
- }
-
- if (initiate_download) {
- DLOG(INFO) << "Initiating GetURLNotify on the plugin finder URL "
- << plugin_finder_url.c_str();
-
- plugin_installer_instance_.set_plugin_installer_state(
- PluginListDownloadInitiated);
-
- DCHECK(default_plugin::g_browser->geturlnotify);
- default_plugin::g_browser->geturlnotify(
- plugin_installer_instance_.instance(), plugin_finder_url.c_str(),
- NULL, NULL);
- } else {
- DLOG(INFO) << "Plugins file " << plugins_file_.c_str()
- << " already exists";
- plugin_downloads_file_ = ::CreateFile(plugins_file_.c_str(), GENERIC_READ,
- FILE_SHARE_READ, NULL, OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL, NULL);
- if (plugin_downloads_file_ == INVALID_HANDLE_VALUE) {
- DLOG(INFO) << "Failed to open plugins file "
- << plugins_file_.c_str() << " Error "
- << ::GetLastError();
- NOTREACHED();
- return false;
- }
- // The URLNotify function contains all handling needed to parse the plugins
- // file and display the UI accordingly.
- plugin_installer_instance_.set_plugin_installer_state(
- PluginListDownloadInitiated);
- plugin_installer_instance_.URLNotify(plugin_finder_url.c_str(),
- NPRES_DONE);
- }
- return true;
-}
-
-int32 PluginDatabaseHandler::Write(NPStream* stream, int32 offset,
- int32 buffer_length, void* buffer) {
- if (ignore_plugin_db_data_) {
- return buffer_length;
- }
-
- if (plugin_downloads_file_ == INVALID_HANDLE_VALUE) {
- DLOG(INFO) << "About to create plugins file " << plugins_file_.c_str();
- plugin_downloads_file_ = CreateFile(plugins_file_.c_str(),
- GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ, NULL, CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL, NULL);
- if (plugin_downloads_file_ == INVALID_HANDLE_VALUE) {
- unsigned long error = ::GetLastError();
- if (error == ERROR_SHARING_VIOLATION) {
- // File may have been downloaded by another plugin instance on this
- // page.
- plugin_downloads_file_ = ::CreateFile(
- plugins_file_.c_str(), GENERIC_READ,
- FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL, NULL);
- if (plugin_downloads_file_ != INVALID_HANDLE_VALUE) {
- ignore_plugin_db_data_ = true;
- return buffer_length;
- }
- }
-
- DLOG(INFO) << "Failed to create plugins file "
- << plugins_file_.c_str() << " Error "
- << ::GetLastError();
- NOTREACHED();
- return 0;
- }
- }
-
- DWORD bytes_written = 0;
- if (0 == lstrcmpiA(stream->url, plugin_finder_url_.c_str())) {
- DCHECK(plugin_downloads_file_ != INVALID_HANDLE_VALUE);
-
- WriteFile(plugin_downloads_file_, buffer, buffer_length, &bytes_written,
- NULL);
- DCHECK_EQ(buffer_length, static_cast<int32>(bytes_written));
- }
- return bytes_written;
-}
-
-
-bool PluginDatabaseHandler::ParsePluginList() {
- if (plugin_downloads_file_ == INVALID_HANDLE_VALUE) {
- DLOG(WARNING) << "Invalid plugins file";
- NOTREACHED();
- return false;
- }
-
- bool parse_result = false;
-
- std::string plugins_file = WideToUTF8(plugins_file_.c_str());
- xmlDocPtr plugin_downloads_doc = xmlParseFile(plugins_file.c_str());
- if (plugin_downloads_doc == NULL) {
- DLOG(WARNING) << "Failed to parse plugins file " << plugins_file.c_str();
- return parse_result;
- }
-
- xmlXPathContextPtr context = NULL;
- xmlXPathObjectPtr plugins_result = NULL;
-
- do {
- context = xmlXPathNewContext(plugin_downloads_doc);
- if (context == NULL) {
- DLOG(WARNING) << "Failed to retrieve XPath context";
- NOTREACHED();
- parse_result = false;
- break;
- }
-
- plugins_result =
- xmlXPathEvalExpression(reinterpret_cast<const xmlChar*>("//plugin"),
- context);
- if ((plugins_result == NULL) ||
- xmlXPathNodeSetIsEmpty(plugins_result->nodesetval)) {
- DLOG(WARNING) << "Failed to find XPath //plugin";
- NOTREACHED();
- parse_result = false;
- break;
- }
-
- xmlNodeSetPtr plugin_list = plugins_result->nodesetval;
- for (int plugin_index = 0; plugin_index < plugin_list->nodeNr;
- ++plugin_index) {
- PluginDetail plugin_detail;
- if (!ReadPluginInfo(plugin_list->nodeTab[plugin_index]->children,
- &plugin_detail)) {
- DLOG(ERROR) << "Failed to read plugin details at index "
- << plugin_index;
- break;
- }
- downloaded_plugins_list_.push_back(plugin_detail);
- }
- if (downloaded_plugins_list_.size())
- parse_result = true;
- } while (0);
-
- xmlXPathFreeContext(context);
- xmlXPathFreeObject(plugins_result);
- xmlFreeDoc(plugin_downloads_doc);
- xmlCleanupParser();
- DLOG(INFO) << "Parse plugins file result " << parse_result;
- return parse_result;
-}
-
-bool PluginDatabaseHandler::GetPluginDetailsForMimeType(
- const char* mime_type, const char* language,
- std::string* download_url, std::wstring* plugin_name,
- bool* download_url_for_display) {
- if (!mime_type || !language || !download_url || !plugin_name ||
- !download_url_for_display) {
- NOTREACHED();
- return false;
- }
-
- PluginList::iterator plugin_index;
- for (plugin_index = downloaded_plugins_list_.begin();
- plugin_index != downloaded_plugins_list_.end();
- ++plugin_index) {
- PluginDetail& current_plugin = *plugin_index;
-
- std::vector<std::string>::iterator mime_type_index;
- for (mime_type_index = current_plugin.mime_types.begin();
- mime_type_index != current_plugin.mime_types.end();
- ++mime_type_index) {
- if ((0 == lstrcmpiA(mime_type, (*mime_type_index).c_str())) &&
- (0 == lstrcmpiA(language, current_plugin.language.c_str()))) {
- *download_url = current_plugin.download_url;
- *plugin_name = current_plugin.display_name;
- *download_url_for_display = current_plugin.download_url_for_display;
- return true;
- }
- }
- }
- return false;
-}
-
-void PluginDatabaseHandler::Close(bool delete_file) {
- if (plugin_downloads_file_ != INVALID_HANDLE_VALUE) {
- ::CloseHandle(plugin_downloads_file_);
- plugin_downloads_file_ = INVALID_HANDLE_VALUE;
- if (delete_file) {
- ::DeleteFile(plugins_file_.c_str());
- plugins_file_.clear();
- }
- }
-}
-
-bool PluginDatabaseHandler::ReadPluginInfo(_xmlNode* plugin_node,
- PluginDetail* plugin_detail) {
- static const char kMimeTypeSeparator = ';';
-
- if (!plugin_node) {
- NOTREACHED();
- return false;
- }
-
- _xmlNode* plugin_mime_type = plugin_node->next;
- if ((plugin_mime_type == NULL) ||
- (plugin_mime_type->next == NULL)) {
- DLOG(WARNING) << "Failed to find mime type node in file";
- NOTREACHED();
- return false;
- }
- _xmlNode* plugin_mime_type_vals = plugin_mime_type->children;
- if (plugin_mime_type_vals == NULL) {
- DLOG(WARNING) << "Invalid mime type";
- NOTREACHED();
- return false;
- }
- // Skip the first child of each node as it is the text element
- // for that node.
- _xmlNode* plugin_lang_node = plugin_mime_type->next->next;
- if ((plugin_lang_node == NULL) ||
- (plugin_lang_node->next == NULL)) {
- DLOG(WARNING) << "Failed to find plugin language node";
- NOTREACHED();
- return false;
- }
- _xmlNode* plugin_lang_val = plugin_lang_node->children;
- if (plugin_lang_val == NULL) {
- DLOG(WARNING) << "Invalid plugin language";
- NOTREACHED();
- return false;
- }
- _xmlNode* plugin_name_node = plugin_lang_node->next->next;
- if ((plugin_name_node == NULL) ||
- (plugin_name_node->next == NULL)) {
- DLOG(WARNING) << "Failed to find plugin name node";
- NOTREACHED();
- return false;
- }
- _xmlNode* plugin_name_val = plugin_name_node->children;
- if (plugin_name_val == NULL) {
- DLOG(WARNING) << "Invalid plugin name";
- NOTREACHED();
- return false;
- }
- _xmlNode* plugin_download_url_node = plugin_name_node->next->next;
- if (plugin_download_url_node == NULL) {
- DLOG(WARNING) << "Failed to find plugin URL node";
- NOTREACHED();
- return false;
- }
- _xmlNode* plugin_download_url_val = plugin_download_url_node->children;
- if (plugin_download_url_val == NULL) {
- DLOG(WARNING) << "Invalid plugin URL";
- NOTREACHED();
- return false;
- }
-
- // Look for the DisplayUrl node. By default every URL is treated as an
- // executable URL.
- plugin_detail->download_url_for_display = false;
-
- _xmlNode* plugin_download_url_for_display_node =
- plugin_download_url_node->next->next;
- if (plugin_download_url_for_display_node) {
- _xmlNode* url_for_display_val =
- plugin_download_url_for_display_node->children;
- if (url_for_display_val) {
- int url_for_display = 0;
- StringToInt(reinterpret_cast<const char*>(url_for_display_val->content),
- &url_for_display);
- if (url_for_display != 0)
- plugin_detail->download_url_for_display = true;
- }
- }
-
- plugin_detail->display_name =
- UTF8ToWide(reinterpret_cast<const char*>(plugin_name_val->content));
- plugin_detail->download_url =
- reinterpret_cast<const char*>(plugin_download_url_val->content);
-
- SplitString(reinterpret_cast<const char*>(plugin_mime_type_vals->content),
- kMimeTypeSeparator, &plugin_detail->mime_types);
-
- plugin_detail->language =
- reinterpret_cast<const char*>(plugin_lang_val->content);
-
- return true;
-}