Replace FrameHostMsg_GetPlugins with a Mojo interface.

It is a per-process Mojo interface, since the browser side never
did anything per-frame, and the renderer actually caches this data
process-wide anyhow.

Bug: 846722
Change-Id: I8e0300749b0d1c2b055b512f0d8906c1fcd3e403
Reviewed-on: https://chromium-review.googlesource.com/1073648
Reviewed-by: Antoine Labour <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Reviewed-by: Kentaro Hara <[email protected]>
Commit-Queue: Jeremy Roman <[email protected]>
Cr-Commit-Position: refs/heads/master@{#568185}
diff --git a/content/browser/renderer_host/plugin_registry_impl.h b/content/browser/renderer_host/plugin_registry_impl.h
new file mode 100644
index 0000000..3009401
--- /dev/null
+++ b/content/browser/renderer_host/plugin_registry_impl.h
@@ -0,0 +1,43 @@
+// Copyright 2018 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 CONTENT_BROWSER_RENDERER_HOST_PLUGIN_REGISTRY_IMPL_H_
+#define CONTENT_BROWSER_RENDERER_HOST_PLUGIN_REGISTRY_IMPL_H_
+
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "mojo/public/cpp/bindings/binding_set.h"
+#include "third_party/blink/public/mojom/plugins/plugin_registry.mojom.h"
+
+namespace content {
+
+class ResourceContext;
+struct WebPluginInfo;
+
+class PluginRegistryImpl : public blink::mojom::PluginRegistry {
+ public:
+  explicit PluginRegistryImpl(ResourceContext* resource_context);
+  ~PluginRegistryImpl() override;
+
+  void Bind(blink::mojom::PluginRegistryRequest request);
+
+  // blink::mojom::PluginRegistry
+  void GetPlugins(bool refresh,
+                  const url::Origin& main_frame_origin,
+                  GetPluginsCallback callback) override;
+
+ private:
+  void GetPluginsComplete(const url::Origin& main_frame_origin,
+                          GetPluginsCallback callback,
+                          const std::vector<WebPluginInfo>& all_plugins);
+
+  ResourceContext* const resource_context_;
+  mojo::BindingSet<PluginRegistry> bindings_;
+  base::TimeTicks last_plugin_refresh_time_;
+  base::WeakPtrFactory<PluginRegistryImpl> weak_factory_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_RENDERER_HOST_PLUGIN_REGISTRY_IMPL_H_