diff --git a/webkit/glue/plugins/plugin_list_win.cc b/webkit/glue/plugins/plugin_list_win.cc index 9873691b848a5bdabac099ad5c6f8eed2ec93c2d..95762381c5b33cdc206395da90b70172a8212edf 100644 --- a/webkit/glue/plugins/plugin_list_win.cc +++ b/webkit/glue/plugins/plugin_list_win.cc @@ -8,8 +8,10 @@ #include "base/basictypes.h" #include "base/command_line.h" +#include "base/file_util.h" #include "base/path_service.h" #include "base/registry.h" +#include "base/scoped_ptr.h" #include "base/string_util.h" #include "webkit/glue/plugins/plugin_constants_win.h" #include "webkit/glue/plugins/plugin_lib.h" @@ -149,6 +151,26 @@ void GetWindowsMediaDirectory(std::set<FilePath>* plugin_dirs) { FilePath path; if (GetInstalledPath(kRegistryWindowsMedia, &path)) plugin_dirs->insert(path); + + // If the Windows Media Player Firefox plugin is installed before Firefox, + // the plugin will get written under PFiles\Plugins on one the drives + // (usually, but not always, the last letter). + int size = GetLogicalDriveStrings(0, NULL); + if (size) { + scoped_array<wchar_t> strings(new wchar_t[size]); + if (GetLogicalDriveStrings(size, strings.get())) { + wchar_t* next_drive = strings.get(); + while (*next_drive) { + if (GetDriveType(next_drive) == DRIVE_FIXED) { + FilePath pfiles(next_drive); + pfiles = pfiles.Append(L"PFiles\\Plugins"); + if (file_util::PathExists(pfiles)) + plugin_dirs->insert(pfiles); + } + next_drive = &next_drive[wcslen(next_drive) + 1]; + } + } + } } // Hardcoded logic to detect Java plugin location.