diff options
author | awalker@google.com <awalker@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-30 23:49:16 +0000 |
---|---|---|
committer | awalker@google.com <awalker@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-30 23:49:16 +0000 |
commit | 2840577282782b79e48252402785fb53a1d63dcf (patch) | |
tree | 1d53473c3b01d163a356014fdfa063cb6df772eb /webkit | |
parent | 74da373074d2ded097efef8541cf878564773a7f (diff) | |
download | chromium_src-2840577282782b79e48252402785fb53a1d63dcf.zip chromium_src-2840577282782b79e48252402785fb53a1d63dcf.tar.gz chromium_src-2840577282782b79e48252402785fb53a1d63dcf.tar.bz2 |
Move the current default plugin implementation to being
windows-specific and have plugin_impl.h include the
correct version based on the platform.
jam: primary
evan: FYI
Review URL: http://codereview.chromium.org/19727
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8997 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/default_plugin/SConscript | 2 | ||||
-rw-r--r-- | webkit/default_plugin/default_plugin.vcproj | 4 | ||||
-rw-r--r-- | webkit/default_plugin/plugin_impl.h | 382 | ||||
-rw-r--r-- | webkit/default_plugin/plugin_impl_win.cc (renamed from webkit/default_plugin/plugin_impl.cc) | 2 | ||||
-rw-r--r-- | webkit/default_plugin/plugin_impl_win.h | 375 |
5 files changed, 388 insertions, 377 deletions
diff --git a/webkit/default_plugin/SConscript b/webkit/default_plugin/SConscript index 3c84f9a..79417f8 100644 --- a/webkit/default_plugin/SConscript +++ b/webkit/default_plugin/SConscript @@ -44,7 +44,7 @@ if env.Bit('windows'): 'activex_installer.cc', 'default_plugin.cc', 'plugin_main.cc', - 'plugin_impl.cc', + 'plugin_impl_win.cc', 'plugin_database_handler.cc', 'plugin_install_job_monitor.cc', 'install_dialog.cc', diff --git a/webkit/default_plugin/default_plugin.vcproj b/webkit/default_plugin/default_plugin.vcproj index b3ee9cf..cc6a359 100644 --- a/webkit/default_plugin/default_plugin.vcproj +++ b/webkit/default_plugin/default_plugin.vcproj @@ -158,11 +158,11 @@ > </File> <File - RelativePath=".\plugin_impl.cc" + RelativePath=".\plugin_impl_win.cc" > </File> <File - RelativePath=".\plugin_impl.h" + RelativePath=".\plugin_impl_win.h" > </File> <File diff --git a/webkit/default_plugin/plugin_impl.h b/webkit/default_plugin/plugin_impl.h index 1e94a3a..a1fe5a9 100644 --- a/webkit/default_plugin/plugin_impl.h +++ b/webkit/default_plugin/plugin_impl.h @@ -1,375 +1,11 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2009 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. - -#ifndef WEBKIT_DEFAULT_PLUGIN_PLUGIN_IMPL_H__ -#define WEBKIT_DEFAULT_PLUGIN_PLUGIN_IMPL_H__ - -#include <atlbase.h> -#include <atlwin.h> -#include <string> -#include <vector> - -#include "base/logging.h" -#include "third_party/npapi/bindings/npapi.h" -#include "webkit/default_plugin/install_dialog.h" -#include "webkit/default_plugin/plugin_database_handler.h" -#include "webkit/default_plugin/plugin_install_job_monitor.h" - -// Possible plugin installer states. -enum PluginInstallerState { - PluginInstallerStateUndefined, - PluginListDownloadInitiated, - PluginListDownloaded, - PluginListDownloadedPluginNotFound, - PluginListDownloadFailed, - PluginDownloadInitiated, - PluginDownloadCompleted, - PluginDownloadFailed, - PluginInstallerLaunchSuccess, - PluginInstallerLaunchFailure -}; - -class ActiveXInstaller; -class PluginInstallDialog; -class PluginDatabaseHandler; - -// Provides the plugin installation functionality. This class is -// instantiated with the information like the mime type of the -// target plugin, the display mode, etc. -class PluginInstallerImpl : public CWindowImpl<PluginInstallerImpl> { - public: - static const int kRefreshPluginsMessage = WM_APP + 1; - static const int kInstallMissingPluginMessage = WM_APP + 2; - static const int kActivexInstallResult = WM_USER + 74; - - // mode is the plugin instantiation mode, i.e. whether it is a full - // page plugin (NP_FULL) or an embedded plugin (NP_EMBED) - explicit PluginInstallerImpl(int16 mode); - virtual ~PluginInstallerImpl(); - - BEGIN_MSG_MAP(PluginInstallerImpl) - MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackGround) - MESSAGE_HANDLER(WM_PAINT, OnPaint) - MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown) - MESSAGE_HANDLER(kRefreshPluginsMessage, OnRefreshPlugins) - MESSAGE_HANDLER(WM_COPYDATA, OnCopyData) - MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor) - MESSAGE_HANDLER(kActivexInstallResult, OnActiveXInstallResult) - END_MSG_MAP() - - // Initializes the plugin with the instance information, mime type - // and the list of parameters passed down to the plugin from the webpage. - // - // Parameters: - // module_handle - // The handle to the dll in which this object is instantiated. - // instance - // The plugins opaque instance handle. - // mime_type - // Identifies the third party plugin which would be eventually installed. - // argc - // Indicates the count of arguments passed in from the webpage. - // argv - // Pointer to the arguments. - // Returns true on success. - bool Initialize(HINSTANCE module_handle, NPP instance, NPMIMEType mime_type, - int16 argc, char* argn[], char* argv[]); - - // Displays the default plugin UI. - // - // Parameters: - // parent_window - // Handle to the parent window. - bool SetWindow(HWND parent_window); - - // Destroys the install dialog and the plugin window. - void Shutdown(); - - // Starts plugin download. Spawns the plugin installer after it is - // downloaded. - void DownloadPlugin(); - - // Indicates that the plugin download was cancelled. - void DownloadCancelled(); - - // Initializes the plugin download stream. - // - // Parameters: - // stream - // Pointer to the new stream being created. - void NewStream(NPStream* stream); - - // Uninitializes the plugin download stream. - // - // Parameters: - // stream - // Pointer to the stream being destroyed. - // reason - // Indicates why the stream is being destroyed. - // - void DestroyStream(NPStream* stream, NPError reason); - - // Determines whether the plugin is ready to accept data. - // We only accept data when we have initiated a download for the plugin - // database. - // - // Parameters: - // stream - // Pointer to the stream being destroyed. - // Returns true if the plugin is ready to accept data. - bool WriteReady(NPStream* stream); - - // Delivers data to the plugin instance. - // - // Parameters: - // stream - // Pointer to the stream being destroyed. - // offset - // Indicates the data offset. - // buffer_length - // Indicates the length of the data buffer. - // buffer - // Pointer to the actual buffer. - // Returns the number of bytes actually written, 0 on error. - int32 Write(NPStream* stream, int32 offset, int32 buffer_length, - void* buffer); - - // Handles notifications received in response to GetURLNotify calls issued - // by the plugin. - // - // Parameters: - // url - // Pointer to the URL. - // reason - // Describes why the notification was sent. - void URLNotify(const char* url, NPReason reason); - - // Initiates activex installs if applicable. - // Note: The null plugin being a windowed plugin does not have to implement - // NPP_HandleEvent. However to handle activex installations, we have this - // hack to allow the renderer to send out a request for installing the - // activex. - int16 NPP_HandleEvent(void* event); - - HWND window() const { return m_hWnd; } - const std::string& mime_type() const { return mime_type_; } - - // Replaces a resource string with the placeholder passed in as an argument - // - // Parameters: - // message_id_with_placeholders - // The resource id of the string with placeholders. This is only used if - // the placeholder string (the replacement_string) parameter is valid. - // message_id_without_placeholders - // The resource id of the string to be returned if the placeholder is - // empty. - // replacement_string - // The placeholder which replaces tokens in the string identified by - // resource id message_id_with_placeholders. - // Returns a string which has the placeholders replaced, or the string - // without placeholders. - static std::wstring ReplaceStringForPossibleEmptyReplacement( - int message_id_with_placeholders, int message_id_without_placeholders, - const std::wstring& replacement_string); - - // Setter/getter combination to set and retreieve the current - // state of the plugin installer. - void set_plugin_installer_state(PluginInstallerState new_state) { - plugin_installer_state_ = new_state; - } - - PluginInstallerState plugin_installer_state() const { - return plugin_installer_state_; - } - - // Getter for the NPP instance member. - const NPP instance() const { - return instance_; - } - - // Returns whether or not the UI layout is right-to-left (such as Hebrew or - // Arabic). - bool IsRTLLayout() const; - - protected: - // Window message handlers. - LRESULT OnPaint(UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled); - LRESULT OnEraseBackGround(UINT message, WPARAM wparam, LPARAM lparam, - BOOL& handled); - LRESULT OnLButtonDown(UINT message, WPARAM wparam, LPARAM lparam, - BOOL& handled); - LRESULT OnSetCursor(UINT message, WPARAM wparam, LPARAM lparam, - BOOL& handled); - - // Refreshes the loaded plugin list and reloads the current page. - LRESULT OnRefreshPlugins(UINT message, WPARAM wparam, LPARAM lparam, - BOOL& handled); - - // Launches the third party plugin installer. This message is - // received when the request to download the installer, initiated by - // plugin completes. - LRESULT OnCopyData(UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled); - - // Displays status information for ActiveX installs - LRESULT OnActiveXInstallResult(UINT message, WPARAM wparam, LPARAM lparam, - BOOL& handled); - - // Displays the plugin install confirmation dialog. - void ShowInstallDialog(); - - // Clears the current display state. - void ClearDisplay(); - - // Displays the status message identified by the message resource id - // passed in. - // - // Parameters: - // message_resource_id parameter - // The resource id of the message to be displayed. - void DisplayStatus(int message_resource_id); - - // Displays status information for the third party plugin which is needed - // by the page. - void DisplayAvailablePluginStatus(); - - // Displays information related to third party plugin download failure. - void DisplayPluginDownloadFailedStatus(); - - // Enables the plugin window if required and initiates an update of the - // the plugin window. - void RefreshDisplay(); - - // Create tooltip window. - bool CreateToolTip(); - - // Update ToolTip text with the message shown inside the default plugin. - void UpdateToolTip(); - - // Resolves the relative URL (could be already an absolute URL too) to return - // full URL based on current document's URL and base. - // - // Parameters: - // instance - // The plugins opaque instance handle. - // relative_url - // The URL to be resolved. - // Returns the resolved URL. - std::string ResolveURL(NPP instance, const std::string& relative_url); - - // Initializes resources like the icon, fonts, etc needed by the plugin - // installer - // - // Parameters: - // module_handle - // Handle to the dll in which this object is instantiated. - // Returns true on success. - bool InitializeResources(HINSTANCE module_handle); - - // Parses the plugin instantiation arguments. This includes checking for - // whether this is an activex install and reading the appropriate - // arguments like codebase, etc. For plugin installs we download the - // plugin finder URL and initalize the mime type and the plugin instance - // info. - // - // Parameters: - // module_handle - // The handle to the dll in which this object is instantiated. - // instance - // The plugins opaque instance handle. - // mime_type - // Identifies the third party plugin which would be eventually installed. - // argc - // Indicates the count of arguments passed in from the webpage. - // argv - // Pointer to the arguments. - // raw_activex_clsid - // Output parameter which contains the CLSID of the Activex plugin needed. - // This is only applicable if the webpage specifically requests an ActiveX - // control. - // Returns true on success. - bool ParseInstantiationArguments(NPMIMEType mime_type, NPP instance, - int16 argc, char* argn[], char* argv[], - std::string* raw_activex_clsid); - - // Paints user action messages to the plugin window. These include messages - // like whether the user should click on the plugin window to download the - // plugin, etc. - // - // Parameters: - // paint_dc - // The device context returned in BeginPaint. - // x_origin - // Horizontal reference point indicating where the text is to be displayed. - // y_origin - // Vertical reference point indicating where the text is to be displayed. - // - void PaintUserActionInformation(HDC paint_dc, int x_origin, int y_origin); - - private: - // Notify the renderer that plugin is available to download. - void NotifyPluginStatus(int status); - - // The plugins opaque instance handle - NPP instance_; - // If this is to install activex - bool is_activex_; - // The plugin instantiation mode (NP_FULL or NP_EMBED) - int16 mode_; - // The handle to the icon displayed in the plugin installation window. - HICON icon_; - // The Get plugin link message string displayed at the top left corner of - // the plugin window. - std::wstring get_plugin_link_message_; - // The command string displayed in the plugin installation window. - std::wstring command_; - // An additional message displayed at times by the plugin. - std::wstring optional_additional_message_; - // The current stream. - NPStream* plugin_install_stream_; - // The plugin finder URL. - std::string plugin_finder_url_; - // The desired mime type. - std::string mime_type_; - // The desired language. - std::string desired_language_; - // The plugin name. - std::wstring plugin_name_; - // The actual download URL. - std::string plugin_download_url_; - // Indicates if the plugin download URL points to an exe. - bool plugin_download_url_for_display_; - // The current state of the plugin installer. - PluginInstallerState plugin_installer_state_; - // Used to display the UI for plugin installation. - PluginInstallDialog install_dialog_; - // To enable auto refresh of the plugin window once the installation - // is complete, we spawn the installation process in a job, and monitor - // IO completion events on the job. When the active process count of the - // job falls to zero, we initiate an auto refresh of the plugin list - // which enables the downloaded plugin to be instantiated. - // The completion events from the job are monitored in an independent - // thread. - scoped_refptr<PluginInstallationJobMonitorThread> - installation_job_monitor_thread_; - // This object handles download and parsing of the plugins database. - PluginDatabaseHandler plugin_database_handler_; - // Indicates if the left click to download/refresh should be enabled or not. - bool enable_click_; - // Handles to the fonts used to display text in the plugin window. - HFONT bold_font_; - HFONT regular_font_; - HFONT underline_font_; - // Tooltip Window. - HWND tooltip_; - // ActiveX related. - std::string activex_codebase_; - std::string activex_clsid_; - CComObject<ActiveXInstaller>* activex_installer_; - - DISALLOW_EVIL_CONSTRUCTORS(PluginInstallerImpl); -}; - - -#endif // WEBKIT_DEFAULT_PLUGIN_PLUGIN_IMPL_H__ - +
+#if defined(OS_WIN)
+#include "webkit/default_plugin/plugin_impl_win.h"
+#elif defined (OS_MACOSX)
+#include "webkit/default_plugin/plugin_impl_mac.h"
+#elif defined (OS_LINUX)
+#include "webkit/default_plugin/plugin_impl_gtk.h"
+#endif
diff --git a/webkit/default_plugin/plugin_impl.cc b/webkit/default_plugin/plugin_impl_win.cc index 6f51008..7894363 100644 --- a/webkit/default_plugin/plugin_impl.cc +++ b/webkit/default_plugin/plugin_impl_win.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "webkit/default_plugin/plugin_impl.h" +#include "webkit/default_plugin/plugin_impl_win.h" #include <shellapi.h> diff --git a/webkit/default_plugin/plugin_impl_win.h b/webkit/default_plugin/plugin_impl_win.h new file mode 100644 index 0000000..f7939e9 --- /dev/null +++ b/webkit/default_plugin/plugin_impl_win.h @@ -0,0 +1,375 @@ +// 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. + +#ifndef WEBKIT_DEFAULT_PLUGIN_PLUGIN_IMPL_WIN_H_ +#define WEBKIT_DEFAULT_PLUGIN_PLUGIN_IMPL_WIN_H_ + +#include <atlbase.h> +#include <atlwin.h> +#include <string> +#include <vector> + +#include "base/logging.h" +#include "third_party/npapi/bindings/npapi.h" +#include "webkit/default_plugin/install_dialog.h" +#include "webkit/default_plugin/plugin_database_handler.h" +#include "webkit/default_plugin/plugin_install_job_monitor.h" + +// Possible plugin installer states. +enum PluginInstallerState { + PluginInstallerStateUndefined, + PluginListDownloadInitiated, + PluginListDownloaded, + PluginListDownloadedPluginNotFound, + PluginListDownloadFailed, + PluginDownloadInitiated, + PluginDownloadCompleted, + PluginDownloadFailed, + PluginInstallerLaunchSuccess, + PluginInstallerLaunchFailure +}; + +class ActiveXInstaller; +class PluginInstallDialog; +class PluginDatabaseHandler; + +// Provides the plugin installation functionality. This class is +// instantiated with the information like the mime type of the +// target plugin, the display mode, etc. +class PluginInstallerImpl : public CWindowImpl<PluginInstallerImpl> { + public: + static const int kRefreshPluginsMessage = WM_APP + 1; + static const int kInstallMissingPluginMessage = WM_APP + 2; + static const int kActivexInstallResult = WM_USER + 74; + + // mode is the plugin instantiation mode, i.e. whether it is a full + // page plugin (NP_FULL) or an embedded plugin (NP_EMBED) + explicit PluginInstallerImpl(int16 mode); + virtual ~PluginInstallerImpl(); + + BEGIN_MSG_MAP(PluginInstallerImpl) + MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackGround) + MESSAGE_HANDLER(WM_PAINT, OnPaint) + MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown) + MESSAGE_HANDLER(kRefreshPluginsMessage, OnRefreshPlugins) + MESSAGE_HANDLER(WM_COPYDATA, OnCopyData) + MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor) + MESSAGE_HANDLER(kActivexInstallResult, OnActiveXInstallResult) + END_MSG_MAP() + + // Initializes the plugin with the instance information, mime type + // and the list of parameters passed down to the plugin from the webpage. + // + // Parameters: + // module_handle + // The handle to the dll in which this object is instantiated. + // instance + // The plugins opaque instance handle. + // mime_type + // Identifies the third party plugin which would be eventually installed. + // argc + // Indicates the count of arguments passed in from the webpage. + // argv + // Pointer to the arguments. + // Returns true on success. + bool Initialize(HINSTANCE module_handle, NPP instance, NPMIMEType mime_type, + int16 argc, char* argn[], char* argv[]); + + // Displays the default plugin UI. + // + // Parameters: + // parent_window + // Handle to the parent window. + bool SetWindow(HWND parent_window); + + // Destroys the install dialog and the plugin window. + void Shutdown(); + + // Starts plugin download. Spawns the plugin installer after it is + // downloaded. + void DownloadPlugin(); + + // Indicates that the plugin download was cancelled. + void DownloadCancelled(); + + // Initializes the plugin download stream. + // + // Parameters: + // stream + // Pointer to the new stream being created. + void NewStream(NPStream* stream); + + // Uninitializes the plugin download stream. + // + // Parameters: + // stream + // Pointer to the stream being destroyed. + // reason + // Indicates why the stream is being destroyed. + // + void DestroyStream(NPStream* stream, NPError reason); + + // Determines whether the plugin is ready to accept data. + // We only accept data when we have initiated a download for the plugin + // database. + // + // Parameters: + // stream + // Pointer to the stream being destroyed. + // Returns true if the plugin is ready to accept data. + bool WriteReady(NPStream* stream); + + // Delivers data to the plugin instance. + // + // Parameters: + // stream + // Pointer to the stream being destroyed. + // offset + // Indicates the data offset. + // buffer_length + // Indicates the length of the data buffer. + // buffer + // Pointer to the actual buffer. + // Returns the number of bytes actually written, 0 on error. + int32 Write(NPStream* stream, int32 offset, int32 buffer_length, + void* buffer); + + // Handles notifications received in response to GetURLNotify calls issued + // by the plugin. + // + // Parameters: + // url + // Pointer to the URL. + // reason + // Describes why the notification was sent. + void URLNotify(const char* url, NPReason reason); + + // Initiates activex installs if applicable. + // Note: The null plugin being a windowed plugin does not have to implement + // NPP_HandleEvent. However to handle activex installations, we have this + // hack to allow the renderer to send out a request for installing the + // activex. + int16 NPP_HandleEvent(void* event); + + HWND window() const { return m_hWnd; } + const std::string& mime_type() const { return mime_type_; } + + // Replaces a resource string with the placeholder passed in as an argument + // + // Parameters: + // message_id_with_placeholders + // The resource id of the string with placeholders. This is only used if + // the placeholder string (the replacement_string) parameter is valid. + // message_id_without_placeholders + // The resource id of the string to be returned if the placeholder is + // empty. + // replacement_string + // The placeholder which replaces tokens in the string identified by + // resource id message_id_with_placeholders. + // Returns a string which has the placeholders replaced, or the string + // without placeholders. + static std::wstring ReplaceStringForPossibleEmptyReplacement( + int message_id_with_placeholders, int message_id_without_placeholders, + const std::wstring& replacement_string); + + // Setter/getter combination to set and retreieve the current + // state of the plugin installer. + void set_plugin_installer_state(PluginInstallerState new_state) { + plugin_installer_state_ = new_state; + } + + PluginInstallerState plugin_installer_state() const { + return plugin_installer_state_; + } + + // Getter for the NPP instance member. + const NPP instance() const { + return instance_; + } + + // Returns whether or not the UI layout is right-to-left (such as Hebrew or + // Arabic). + bool IsRTLLayout() const; + + protected: + // Window message handlers. + LRESULT OnPaint(UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled); + LRESULT OnEraseBackGround(UINT message, WPARAM wparam, LPARAM lparam, + BOOL& handled); + LRESULT OnLButtonDown(UINT message, WPARAM wparam, LPARAM lparam, + BOOL& handled); + LRESULT OnSetCursor(UINT message, WPARAM wparam, LPARAM lparam, + BOOL& handled); + + // Refreshes the loaded plugin list and reloads the current page. + LRESULT OnRefreshPlugins(UINT message, WPARAM wparam, LPARAM lparam, + BOOL& handled); + + // Launches the third party plugin installer. This message is + // received when the request to download the installer, initiated by + // plugin completes. + LRESULT OnCopyData(UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled); + + // Displays status information for ActiveX installs + LRESULT OnActiveXInstallResult(UINT message, WPARAM wparam, LPARAM lparam, + BOOL& handled); + + // Displays the plugin install confirmation dialog. + void ShowInstallDialog(); + + // Clears the current display state. + void ClearDisplay(); + + // Displays the status message identified by the message resource id + // passed in. + // + // Parameters: + // message_resource_id parameter + // The resource id of the message to be displayed. + void DisplayStatus(int message_resource_id); + + // Displays status information for the third party plugin which is needed + // by the page. + void DisplayAvailablePluginStatus(); + + // Displays information related to third party plugin download failure. + void DisplayPluginDownloadFailedStatus(); + + // Enables the plugin window if required and initiates an update of the + // the plugin window. + void RefreshDisplay(); + + // Create tooltip window. + bool CreateToolTip(); + + // Update ToolTip text with the message shown inside the default plugin. + void UpdateToolTip(); + + // Resolves the relative URL (could be already an absolute URL too) to return + // full URL based on current document's URL and base. + // + // Parameters: + // instance + // The plugins opaque instance handle. + // relative_url + // The URL to be resolved. + // Returns the resolved URL. + std::string ResolveURL(NPP instance, const std::string& relative_url); + + // Initializes resources like the icon, fonts, etc needed by the plugin + // installer + // + // Parameters: + // module_handle + // Handle to the dll in which this object is instantiated. + // Returns true on success. + bool InitializeResources(HINSTANCE module_handle); + + // Parses the plugin instantiation arguments. This includes checking for + // whether this is an activex install and reading the appropriate + // arguments like codebase, etc. For plugin installs we download the + // plugin finder URL and initalize the mime type and the plugin instance + // info. + // + // Parameters: + // module_handle + // The handle to the dll in which this object is instantiated. + // instance + // The plugins opaque instance handle. + // mime_type + // Identifies the third party plugin which would be eventually installed. + // argc + // Indicates the count of arguments passed in from the webpage. + // argv + // Pointer to the arguments. + // raw_activex_clsid + // Output parameter which contains the CLSID of the Activex plugin needed. + // This is only applicable if the webpage specifically requests an ActiveX + // control. + // Returns true on success. + bool ParseInstantiationArguments(NPMIMEType mime_type, NPP instance, + int16 argc, char* argn[], char* argv[], + std::string* raw_activex_clsid); + + // Paints user action messages to the plugin window. These include messages + // like whether the user should click on the plugin window to download the + // plugin, etc. + // + // Parameters: + // paint_dc + // The device context returned in BeginPaint. + // x_origin + // Horizontal reference point indicating where the text is to be displayed. + // y_origin + // Vertical reference point indicating where the text is to be displayed. + // + void PaintUserActionInformation(HDC paint_dc, int x_origin, int y_origin); + + private: + // Notify the renderer that plugin is available to download. + void NotifyPluginStatus(int status); + + // The plugins opaque instance handle + NPP instance_; + // If this is to install activex + bool is_activex_; + // The plugin instantiation mode (NP_FULL or NP_EMBED) + int16 mode_; + // The handle to the icon displayed in the plugin installation window. + HICON icon_; + // The Get plugin link message string displayed at the top left corner of + // the plugin window. + std::wstring get_plugin_link_message_; + // The command string displayed in the plugin installation window. + std::wstring command_; + // An additional message displayed at times by the plugin. + std::wstring optional_additional_message_; + // The current stream. + NPStream* plugin_install_stream_; + // The plugin finder URL. + std::string plugin_finder_url_; + // The desired mime type. + std::string mime_type_; + // The desired language. + std::string desired_language_; + // The plugin name. + std::wstring plugin_name_; + // The actual download URL. + std::string plugin_download_url_; + // Indicates if the plugin download URL points to an exe. + bool plugin_download_url_for_display_; + // The current state of the plugin installer. + PluginInstallerState plugin_installer_state_; + // Used to display the UI for plugin installation. + PluginInstallDialog install_dialog_; + // To enable auto refresh of the plugin window once the installation + // is complete, we spawn the installation process in a job, and monitor + // IO completion events on the job. When the active process count of the + // job falls to zero, we initiate an auto refresh of the plugin list + // which enables the downloaded plugin to be instantiated. + // The completion events from the job are monitored in an independent + // thread. + scoped_refptr<PluginInstallationJobMonitorThread> + installation_job_monitor_thread_; + // This object handles download and parsing of the plugins database. + PluginDatabaseHandler plugin_database_handler_; + // Indicates if the left click to download/refresh should be enabled or not. + bool enable_click_; + // Handles to the fonts used to display text in the plugin window. + HFONT bold_font_; + HFONT regular_font_; + HFONT underline_font_; + // Tooltip Window. + HWND tooltip_; + // ActiveX related. + std::string activex_codebase_; + std::string activex_clsid_; + CComObject<ActiveXInstaller>* activex_installer_; + + DISALLOW_EVIL_CONSTRUCTORS(PluginInstallerImpl); +}; + + +#endif // WEBKIT_DEFAULT_PLUGIN_PLUGIN_IMPL_WIN_H_ + |