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.