| Index: chrome/browser/plugin_installer.cc
|
| diff --git a/chrome/browser/plugin_installer.cc b/chrome/browser/plugin_installer.cc
|
| deleted file mode 100644
|
| index 10bbd4415766c71c60de48308263ce15dbd05ee7..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/plugin_installer.cc
|
| +++ /dev/null
|
| @@ -1,264 +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 "chrome/browser/plugin_installer.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/file_util.h"
|
| -#include "base/process.h"
|
| -#include "chrome/browser/download/download_service.h"
|
| -#include "chrome/browser/download/download_service_factory.h"
|
| -#include "chrome/browser/download/download_util.h"
|
| -#include "chrome/browser/platform_util.h"
|
| -#include "chrome/browser/plugin_installer_observer.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/ui/tab_contents/tab_contents.h"
|
| -#include "content/public/browser/browser_context.h"
|
| -#include "content/public/browser/download_id.h"
|
| -#include "content/public/browser/download_item.h"
|
| -#include "content/public/browser/download_manager.h"
|
| -#include "content/public/browser/download_save_info.h"
|
| -#include "content/public/browser/render_process_host.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/resource_context.h"
|
| -#include "content/public/browser/resource_dispatcher_host.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "net/url_request/url_request.h"
|
| -#include "net/url_request/url_request_context.h"
|
| -#include "webkit/plugins/npapi/plugin_group.h"
|
| -#include "webkit/plugins/npapi/plugin_utils.h"
|
| -#include "webkit/plugins/webplugininfo.h"
|
| -
|
| -using content::BrowserContext;
|
| -using content::BrowserThread;
|
| -using content::DownloadItem;
|
| -using content::DownloadManager;
|
| -using content::ResourceDispatcherHost;
|
| -
|
| -namespace {
|
| -
|
| -void BeginDownload(
|
| - const GURL& url,
|
| - content::ResourceContext* resource_context,
|
| - int render_process_host_id,
|
| - int render_view_host_routing_id,
|
| - const ResourceDispatcherHost::DownloadStartedCallback& callback) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| -
|
| - ResourceDispatcherHost* rdh = ResourceDispatcherHost::Get();
|
| - scoped_ptr<net::URLRequest> request(
|
| - resource_context->GetRequestContext()->CreateRequest(url, NULL));
|
| - net::Error error = rdh->BeginDownload(
|
| - request.Pass(),
|
| - false, // is_content_initiated
|
| - resource_context,
|
| - render_process_host_id,
|
| - render_view_host_routing_id,
|
| - true, // prefer_cache
|
| - content::DownloadSaveInfo(),
|
| - callback);
|
| -
|
| - if (error != net::OK) {
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(callback, content::DownloadId::Invalid(), error));
|
| - }
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -PluginInstaller::PluginInstaller(const std::string& identifier,
|
| - const string16& name,
|
| - bool url_for_display,
|
| - const GURL& plugin_url,
|
| - const GURL& help_url,
|
| - const string16& group_name_matcher)
|
| - : identifier_(identifier),
|
| - name_(name),
|
| - group_name_matcher_(group_name_matcher),
|
| - url_for_display_(url_for_display),
|
| - plugin_url_(plugin_url),
|
| - help_url_(help_url),
|
| - state_(INSTALLER_STATE_IDLE) {
|
| -}
|
| -
|
| -PluginInstaller::~PluginInstaller() {
|
| -}
|
| -
|
| -void PluginInstaller::AddVersion(const Version& version,
|
| - SecurityStatus status) {
|
| - DCHECK(versions_.find(version) == versions_.end());
|
| - versions_[version] = status;
|
| -}
|
| -
|
| -PluginInstaller::SecurityStatus PluginInstaller::GetSecurityStatus(
|
| - const webkit::WebPluginInfo& plugin) const {
|
| - if (versions_.empty()) {
|
| -#if defined(OS_LINUX)
|
| - // On Linux, unknown plugins require authorization.
|
| - return SECURITY_STATUS_REQUIRES_AUTHORIZATION;
|
| -#else
|
| - return SECURITY_STATUS_UP_TO_DATE;
|
| -#endif
|
| - }
|
| -
|
| - Version version;
|
| - webkit::npapi::CreateVersionFromString(plugin.version, &version);
|
| - if (!version.IsValid())
|
| - version = Version("0");
|
| -
|
| - // |lower_bound| returns the latest version that is not newer than |version|.
|
| - std::map<Version, SecurityStatus, VersionComparator>::const_iterator it =
|
| - versions_.lower_bound(version);
|
| - // If there is at least one version defined, everything older than the oldest
|
| - // defined version is considered out-of-date.
|
| - if (it == versions_.end())
|
| - return SECURITY_STATUS_OUT_OF_DATE;
|
| -
|
| - return it->second;
|
| -}
|
| -
|
| -bool PluginInstaller::VersionComparator::operator() (const Version& lhs,
|
| - const Version& rhs) const {
|
| - // Keep versions ordered by newest (biggest) first.
|
| - return lhs.CompareTo(rhs) > 0;
|
| -}
|
| -
|
| -// static
|
| -bool PluginInstaller::ParseSecurityStatus(
|
| - const std::string& status_str,
|
| - PluginInstaller::SecurityStatus* status) {
|
| - if (status_str == "up_to_date")
|
| - *status = SECURITY_STATUS_UP_TO_DATE;
|
| - else if (status_str == "out_of_date")
|
| - *status = SECURITY_STATUS_OUT_OF_DATE;
|
| - else if (status_str == "requires_authorization")
|
| - *status = SECURITY_STATUS_REQUIRES_AUTHORIZATION;
|
| - else
|
| - return false;
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void PluginInstaller::OnDownloadUpdated(DownloadItem* download) {
|
| - DownloadItem::DownloadState state = download->GetState();
|
| - switch (state) {
|
| - case DownloadItem::IN_PROGRESS:
|
| - return;
|
| - case DownloadItem::COMPLETE: {
|
| - DCHECK_EQ(INSTALLER_STATE_DOWNLOADING, state_);
|
| - state_ = INSTALLER_STATE_IDLE;
|
| - FOR_EACH_OBSERVER(PluginInstallerObserver, observers_,
|
| - DownloadFinished());
|
| - break;
|
| - }
|
| - case DownloadItem::CANCELLED: {
|
| - DownloadCancelled();
|
| - break;
|
| - }
|
| - case DownloadItem::INTERRUPTED: {
|
| - content::DownloadInterruptReason reason = download->GetLastReason();
|
| - DownloadError(content::InterruptReasonDebugString(reason));
|
| - break;
|
| - }
|
| - case DownloadItem::MAX_DOWNLOAD_STATE: {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - }
|
| - download->RemoveObserver(this);
|
| -}
|
| -
|
| -void PluginInstaller::OnDownloadDestroyed(DownloadItem* download) {
|
| - DCHECK_EQ(INSTALLER_STATE_DOWNLOADING, state_);
|
| - state_ = INSTALLER_STATE_IDLE;
|
| - download->RemoveObserver(this);
|
| -}
|
| -
|
| -void PluginInstaller::AddObserver(PluginInstallerObserver* observer) {
|
| - observers_.AddObserver(observer);
|
| -}
|
| -
|
| -void PluginInstaller::RemoveObserver(PluginInstallerObserver* observer) {
|
| - observers_.RemoveObserver(observer);
|
| - if (observers_.size() == weak_observers_.size()) {
|
| - FOR_EACH_OBSERVER(WeakPluginInstallerObserver, weak_observers_,
|
| - OnlyWeakObserversLeft());
|
| - }
|
| -}
|
| -
|
| -void PluginInstaller::AddWeakObserver(WeakPluginInstallerObserver* observer) {
|
| - weak_observers_.AddObserver(observer);
|
| -}
|
| -
|
| -void PluginInstaller::RemoveWeakObserver(
|
| - WeakPluginInstallerObserver* observer) {
|
| - weak_observers_.RemoveObserver(observer);
|
| -}
|
| -
|
| -void PluginInstaller::StartInstalling(TabContents* tab_contents) {
|
| - DCHECK_EQ(INSTALLER_STATE_IDLE, state_);
|
| - DCHECK(!url_for_display_);
|
| - state_ = INSTALLER_STATE_DOWNLOADING;
|
| - FOR_EACH_OBSERVER(PluginInstallerObserver, observers_, DownloadStarted());
|
| - content::WebContents* web_contents = tab_contents->web_contents();
|
| - DownloadManager* download_manager =
|
| - BrowserContext::GetDownloadManager(tab_contents->profile());
|
| - download_util::RecordDownloadSource(
|
| - download_util::INITIATED_BY_PLUGIN_INSTALLER);
|
| - BrowserThread::PostTask(
|
| - BrowserThread::IO, FROM_HERE,
|
| - base::Bind(&BeginDownload,
|
| - plugin_url_,
|
| - tab_contents->profile()->GetResourceContext(),
|
| - web_contents->GetRenderProcessHost()->GetID(),
|
| - web_contents->GetRenderViewHost()->GetRoutingID(),
|
| - base::Bind(&PluginInstaller::DownloadStarted,
|
| - base::Unretained(this),
|
| - make_scoped_refptr(download_manager))));
|
| -}
|
| -
|
| -void PluginInstaller::DownloadStarted(
|
| - scoped_refptr<content::DownloadManager> dlm,
|
| - content::DownloadId download_id,
|
| - net::Error error) {
|
| - if (error != net::OK) {
|
| - std::string msg =
|
| - base::StringPrintf("Error %d: %s", error, net::ErrorToString(error));
|
| - DownloadError(msg);
|
| - return;
|
| - }
|
| - DownloadItem* download_item =
|
| - dlm->GetActiveDownloadItem(download_id.local());
|
| - download_item->SetOpenWhenComplete(true);
|
| - download_item->AddObserver(this);
|
| -}
|
| -
|
| -void PluginInstaller::OpenDownloadURL(content::WebContents* web_contents) {
|
| - DCHECK_EQ(INSTALLER_STATE_IDLE, state_);
|
| - DCHECK(url_for_display_);
|
| - web_contents->OpenURL(content::OpenURLParams(
|
| - plugin_url_,
|
| - content::Referrer(web_contents->GetURL(),
|
| - WebKit::WebReferrerPolicyDefault),
|
| - NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_TYPED, false));
|
| - FOR_EACH_OBSERVER(PluginInstallerObserver, observers_, DownloadFinished());
|
| -}
|
| -
|
| -void PluginInstaller::DownloadError(const std::string& msg) {
|
| - DCHECK_EQ(INSTALLER_STATE_DOWNLOADING, state_);
|
| - state_ = INSTALLER_STATE_IDLE;
|
| - FOR_EACH_OBSERVER(PluginInstallerObserver, observers_, DownloadError(msg));
|
| -}
|
| -
|
| -void PluginInstaller::DownloadCancelled() {
|
| - DCHECK_EQ(INSTALLER_STATE_DOWNLOADING, state_);
|
| - state_ = INSTALLER_STATE_IDLE;
|
| - FOR_EACH_OBSERVER(PluginInstallerObserver, observers_, DownloadCancelled());
|
| -}
|
| -
|
| -bool PluginInstaller::MatchesPlugin(const webkit::WebPluginInfo& plugin) {
|
| - return plugin.name.find(group_name_matcher_) != string16::npos;
|
| -}
|
|
|