Commit 117d6fb1 authored by cfredric's avatar cfredric Committed by Commit Bot

Instrument calls to navigator.mimeTypes.

This will be used to analyze how much entropy leaked by this API can be
used for cross-site tracking.

Bug: 973801
Change-Id: I1691fb17d2da0268ce77617a00309ae3f5b9f92f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2442894Reviewed-by: default avatarAsanka Herath <asanka@chromium.org>
Reviewed-by: default avatarJeremy Roman <jbroman@chromium.org>
Commit-Queue: Chris Fredrickson <cfredric@google.com>
Auto-Submit: Chris Fredrickson <cfredric@google.com>
Cr-Commit-Position: refs/heads/master@{#813778}
parent f97dbee0
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/navigator.h" #include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/modules/plugins/dom_mime_type.h"
#include "third_party/blink/renderer/modules/plugins/dom_mime_type_array.h" #include "third_party/blink/renderer/modules/plugins/dom_mime_type_array.h"
#include "third_party/blink/renderer/modules/plugins/dom_plugin_array.h" #include "third_party/blink/renderer/modules/plugins/dom_plugin_array.h"
#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h" #include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
...@@ -91,11 +92,40 @@ DOMPluginArray* NavigatorPlugins::plugins(LocalFrame* frame) const { ...@@ -91,11 +92,40 @@ DOMPluginArray* NavigatorPlugins::plugins(LocalFrame* frame) const {
} }
DOMMimeTypeArray* NavigatorPlugins::mimeTypes(LocalFrame* frame) const { DOMMimeTypeArray* NavigatorPlugins::mimeTypes(LocalFrame* frame) const {
if (!mime_types_) if (!mime_types_) {
mime_types_ = MakeGarbageCollected<DOMMimeTypeArray>(frame); mime_types_ = MakeGarbageCollected<DOMMimeTypeArray>(frame);
RecordMimeTypes(frame);
}
return mime_types_.Get(); return mime_types_.Get();
} }
void NavigatorPlugins::RecordMimeTypes(LocalFrame* frame) const {
constexpr IdentifiableSurface surface = IdentifiableSurface::FromTypeAndToken(
IdentifiableSurface::Type::kWebFeature, WebFeature::kNavigatorMimeTypes);
if (!IdentifiabilityStudySettings::Get()->IsSurfaceAllowed(surface) || !frame)
return;
Document* document = frame->GetDocument();
if (!document)
return;
IdentifiableTokenBuilder builder;
for (unsigned i = 0; i < mime_types_->length(); i++) {
DOMMimeType* mime_type = mime_types_->item(i);
builder.AddToken(IdentifiabilityBenignStringToken(mime_type->type()));
builder.AddToken(
IdentifiabilityBenignStringToken(mime_type->description()));
builder.AddToken(IdentifiabilityBenignStringToken(mime_type->suffixes()));
DOMPlugin* plugin = mime_type->enabledPlugin();
if (plugin) {
builder.AddToken(IdentifiabilityBenignStringToken(plugin->name()));
builder.AddToken(IdentifiabilityBenignStringToken(plugin->filename()));
builder.AddToken(IdentifiabilityBenignStringToken(plugin->description()));
}
}
IdentifiabilityMetricBuilder(document->UkmSourceID())
.Set(surface, builder.GetToken())
.Record(document->UkmRecorder());
}
void NavigatorPlugins::Trace(Visitor* visitor) const { void NavigatorPlugins::Trace(Visitor* visitor) const {
visitor->Trace(plugins_); visitor->Trace(plugins_);
visitor->Trace(mime_types_); visitor->Trace(mime_types_);
......
...@@ -35,6 +35,8 @@ class NavigatorPlugins final : public GarbageCollected<NavigatorPlugins>, ...@@ -35,6 +35,8 @@ class NavigatorPlugins final : public GarbageCollected<NavigatorPlugins>,
DOMPluginArray* plugins(LocalFrame*) const; DOMPluginArray* plugins(LocalFrame*) const;
DOMMimeTypeArray* mimeTypes(LocalFrame*) const; DOMMimeTypeArray* mimeTypes(LocalFrame*) const;
void RecordMimeTypes(LocalFrame*) const;
mutable Member<DOMPluginArray> plugins_; mutable Member<DOMPluginArray> plugins_;
mutable Member<DOMMimeTypeArray> mime_types_; mutable Member<DOMMimeTypeArray> mime_types_;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment