Chromium Code Reviews| Index: webkit/plugins/npapi/webplugin_delegate_impl_win.cc |
| diff --git a/webkit/plugins/npapi/webplugin_delegate_impl_win.cc b/webkit/plugins/npapi/webplugin_delegate_impl_win.cc |
| index f308202cb956420d3e1fe15949e6cbd7309317ab..ebac949c013bea512bc2e3f14ae9550389e243f7 100644 |
| --- a/webkit/plugins/npapi/webplugin_delegate_impl_win.cc |
| +++ b/webkit/plugins/npapi/webplugin_delegate_impl_win.cc |
| @@ -48,6 +48,7 @@ namespace { |
| const wchar_t kWebPluginDelegateProperty[] = L"WebPluginDelegateProperty"; |
| const wchar_t kPluginNameAtomProperty[] = L"PluginNameAtom"; |
| +const wchar_t kPluginVersionAtomProperty[] = L"PluginVersionAtom"; |
| const wchar_t kDummyActivationWindowName[] = L"DummyWindowForActivation"; |
| const wchar_t kPluginFlashThrottle[] = L"FlashThrottle"; |
| @@ -263,6 +264,25 @@ int GetPluginMajorVersion(const WebPluginInfo& plugin_info) { |
| return major_version; |
| } |
| +bool GetPluginPropertyFromWindow( |
| + HWND window, const wchar_t* plugin_atom_property, |
| + string16* plugin_property) { |
| + if (NULL == plugin_atom_property || NULL == plugin_property) { |
|
jam
2012/04/03 16:18:02
nit: this isn't necessary, if someone passes in NU
whyuan
2012/04/03 17:35:07
Done.
|
| + return false; |
| + } |
| + ATOM plugin_atom = reinterpret_cast<ATOM>( |
| + GetPropW(window, plugin_atom_property)); |
| + if (plugin_atom != 0) { |
| + WCHAR plugin_property_local[MAX_PATH] = {0}; |
| + GlobalGetAtomNameW(plugin_atom, |
| + plugin_property_local, |
| + ARRAYSIZE(plugin_property_local)); |
| + *plugin_property = plugin_property_local; |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| } // namespace |
| bool WebPluginDelegateImpl::IsPluginDelegateWindow(HWND window) { |
| @@ -276,23 +296,17 @@ bool WebPluginDelegateImpl::IsPluginDelegateWindow(HWND window) { |
| // static |
| bool WebPluginDelegateImpl::GetPluginNameFromWindow( |
| HWND window, string16* plugin_name) { |
| - if (NULL == plugin_name) { |
| - return false; |
| - } |
| - if (!IsPluginDelegateWindow(window)) { |
| - return false; |
| - } |
| - ATOM plugin_name_atom = reinterpret_cast<ATOM>( |
| - GetPropW(window, kPluginNameAtomProperty)); |
| - if (plugin_name_atom != 0) { |
| - WCHAR plugin_name_local[MAX_PATH] = {0}; |
| - GlobalGetAtomNameW(plugin_name_atom, |
| - plugin_name_local, |
| - ARRAYSIZE(plugin_name_local)); |
| - *plugin_name = plugin_name_local; |
| - return true; |
| - } |
| - return false; |
| + return IsPluginDelegateWindow(window) && |
| + GetPluginPropertyFromWindow( |
|
jam
2012/04/03 16:18:02
nit: here and below, indentation is 4 spaces
whyuan
2012/04/03 17:35:07
Done.
|
| + window, kPluginNameAtomProperty, plugin_name); |
| +} |
| + |
| +// static |
| +bool WebPluginDelegateImpl::GetPluginVersionFromWindow( |
| + HWND window, string16* plugin_version) { |
| + return IsPluginDelegateWindow(window) && |
| + GetPluginPropertyFromWindow( |
| + window, kPluginVersionAtomProperty, plugin_version); |
| } |
| bool WebPluginDelegateImpl::IsDummyActivationWindow(HWND window) { |
| @@ -695,9 +709,9 @@ bool WebPluginDelegateImpl::WindowedCreatePlugin() { |
| BOOL result = SetProp(windowed_handle_, kWebPluginDelegateProperty, this); |
| DCHECK(result == TRUE) << "SetProp failed, last error = " << GetLastError(); |
| - // Get the name of the plugin, create an atom and set that in a window |
| - // property. Use an atom so that other processes can access the name of |
| - // the plugin that this window is hosting |
| + // Get the name and version of the plugin, create atoms and set them in a |
| + // window property. Use atoms so that other processes can access the name and |
| + // version of the plugin that this window is hosting. |
| if (instance_ != NULL) { |
| PluginLib* plugin_lib = instance()->plugin_lib(); |
| if (plugin_lib != NULL) { |
| @@ -711,6 +725,16 @@ bool WebPluginDelegateImpl::WindowedCreatePlugin() { |
| DCHECK(result == TRUE) << "SetProp failed, last error = " << |
| GetLastError(); |
| } |
| + std::wstring plugin_version = plugin_lib->plugin_info().version; |
| + if (!plugin_version.empty()) { |
| + ATOM plugin_version_atom = GlobalAddAtomW(plugin_version.c_str()); |
| + DCHECK(0 != plugin_version_atom); |
| + result = SetProp(windowed_handle_, |
| + kPluginVersionAtomProperty, |
| + reinterpret_cast<HANDLE>(plugin_version_atom)); |
| + DCHECK(result == TRUE) << "SetProp failed, last error = " << |
| + GetLastError(); |
| + } |
| } |
| } |
| @@ -1207,6 +1231,10 @@ LRESULT CALLBACK WebPluginDelegateImpl::NativeWndProc( |
| RemoveProp(hwnd, kPluginNameAtomProperty)); |
| if (plugin_name_atom != 0) |
| GlobalDeleteAtom(plugin_name_atom); |
| + ATOM plugin_version_atom = reinterpret_cast<ATOM>( |
| + RemoveProp(hwnd, kPluginVersionAtomProperty)); |
| + if (plugin_version_atom != 0) |
| + GlobalDeleteAtom(plugin_version_atom); |
| ClearThrottleQueueForWindow(hwnd); |
| } |
| } |