Index: chrome/default_plugin/plugin_impl_win.cc |
=================================================================== |
--- chrome/default_plugin/plugin_impl_win.cc (revision 98657) |
+++ chrome/default_plugin/plugin_impl_win.cc (working copy) |
@@ -10,6 +10,7 @@ |
#include "base/path_service.h" |
#include "base/string_util.h" |
#include "base/utf_string_conversions.h" |
+#include "chrome/common/chrome_plugin_messages.h" |
#include "chrome/default_plugin/plugin_main.h" |
#include "content/common/child_thread.h" |
#include "content/common/plugin_messages.h" |
@@ -23,6 +24,9 @@ |
static const int TOOLTIP_MAX_WIDTH = 500; |
+int PluginInstallerImpl::instance_count_ = 0; |
+bool PluginInstallerImpl::show_install_infobar_ = true; |
+ |
PluginInstallerImpl::PluginInstallerImpl(int16 mode) |
: instance_(NULL), |
mode_(mode), |
@@ -40,9 +44,14 @@ |
new PluginInstallationJobMonitorThread()), |
plugin_database_handler_(*this), |
plugin_download_url_for_display_(false) { |
+ instance_count_++; |
} |
PluginInstallerImpl::~PluginInstallerImpl() { |
+ instance_count_--; |
+ if (instance_count_ == 0) |
+ show_install_infobar_ = true; |
+ |
if (!disable_plugin_finder_) |
installation_job_monitor_thread_->Stop(); |
@@ -72,7 +81,7 @@ |
mime_type_ = mime_type; |
ChildThread::current()->Send( |
- new PluginProcessHostMsg_GetPluginFinderUrl(&plugin_finder_url_)); |
+ new ChromePluginProcessHostMsg_GetPluginFinderUrl(&plugin_finder_url_)); |
if (plugin_finder_url_.empty()) |
disable_plugin_finder_ = true; |
@@ -89,8 +98,8 @@ |
} else { |
DisplayStatus(IDS_DEFAULT_PLUGIN_GET_PLUGIN_MSG_PLUGIN_FINDER_DISABLED); |
} |
- |
- return true; |
+ return PluginInstallerBase::Initialize(module_handle, instance, mime_type, |
+ argc, argn, argv); |
} |
void PluginInstallerImpl::Shutdown() { |
@@ -257,8 +266,6 @@ |
if (plugin_available) { |
DVLOG(1) << "Plugin available for mime type " << mime_type_; |
DisplayAvailablePluginStatus(); |
- NotifyPluginStatus( |
- webkit::npapi::default_plugin::MISSING_PLUGIN_AVAILABLE); |
} else { |
DLOG(WARNING) << "No plugin available for mime type " << mime_type_; |
DisplayStatus(IDS_DEFAULT_PLUGIN_NO_PLUGIN_AVAILABLE_MSG); |
@@ -267,15 +274,6 @@ |
} |
int16 PluginInstallerImpl::NPP_HandleEvent(void* event) { |
- NPEvent* npp_event = static_cast<NPEvent*>(event); |
- if (npp_event->event == |
- webkit::npapi::default_plugin::kInstallMissingPluginMessage) { |
- // We could get this message because InfoBar may not be in sync with our |
- // internal processing. So we need to check the status. |
- if (plugin_installer_state() == PluginListDownloaded) { |
- ShowInstallDialog(); |
- } |
- } |
return 0; |
} |
@@ -330,6 +328,12 @@ |
UpdateWindow(hwnd()); |
ShowWindow(hwnd(), SW_SHOW); |
+ // Show the infobar only once. |
+ if (show_install_infobar_) { |
+ show_install_infobar_ = false; |
+ NotifyPluginStatus( |
+ webkit::npapi::default_plugin::MISSING_PLUGIN_AVAILABLE); |
+ } |
return true; |
} |
@@ -342,7 +346,7 @@ |
DisplayStatus(IDS_DEFAULT_PLUGIN_DOWNLOADING_PLUGIN_MSG); |
if (!plugin_download_url_for_display_) { |
- ChildThread::current()->Send(new PluginProcessHostMsg_DownloadUrl( |
+ ChildThread::current()->Send(new ChromePluginProcessHostMsg_DownloadUrl( |
plugin_download_url_, hwnd())); |
} else { |
default_plugin::g_browser->geturl(instance(), |
@@ -624,6 +628,18 @@ |
return 0; |
} |
+LRESULT PluginInstallerImpl::OnInstallPluginMessage(UINT message, |
+ WPARAM wparam, |
+ LPARAM lparam, |
+ BOOL& handled) { |
+ // We could get this message because InfoBar may not be in sync with our |
+ // internal processing. So we need to check the status. |
+ if (plugin_installer_state() == PluginListDownloaded) { |
+ ShowInstallDialog(); |
+ } |
+ return 0; |
+} |
+ |
bool PluginInstallerImpl::InitializeResources(HINSTANCE module_handle) { |
DCHECK(icon_ == NULL); |
DCHECK(regular_font_ == NULL); |
@@ -650,9 +666,10 @@ |
} |
void PluginInstallerImpl::NotifyPluginStatus(int status) { |
- default_plugin::g_browser->getvalue( |
- instance_, |
- static_cast<NPNVariable>( |
- webkit::npapi::default_plugin::kMissingPluginStatusStart + status), |
- NULL); |
+ ChildThread::current()->Send( |
+ new ChromePluginProcessHostMsg_MissingPluginStatus( |
+ status, |
+ renderer_process_id(), |
+ render_view_id(), |
+ hwnd())); |
} |