Commit 4c87ba08 authored by Dylan Cutler's avatar Dylan Cutler Committed by Commit Bot

Instrument NavigatorDeviceMemory to see if it leaks entropy about users' cross-origin identity.

We use IdentifiabilityMetricBuilder to report hashes of the different
values this method can return to UKM to determine how much entropy
this function leaks.

Bug: 973801
Change-Id: I4aa45f5662d62a83f1971a62c61891f3ebdfa81b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2186997
Commit-Queue: Dylan Cutler <dylancutler@google.com>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarAsanka Herath <asanka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#769839}
parent 2f1b352f
...@@ -39,8 +39,9 @@ ...@@ -39,8 +39,9 @@
namespace blink { namespace blink {
Navigator::Navigator(LocalFrame* frame) Navigator::Navigator(LocalFrame* frame)
: NavigatorLanguage(frame ? frame->DomWindow() : nullptr), : ExecutionContextClient(frame),
ExecutionContextClient(frame) {} NavigatorDeviceMemory(frame ? frame->GetDocument() : nullptr),
NavigatorLanguage(frame ? frame->DomWindow() : nullptr) {}
String Navigator::productSub() const { String Navigator::productSub() const {
return "20030107"; return "20030107";
...@@ -119,6 +120,7 @@ void Navigator::Trace(Visitor* visitor) const { ...@@ -119,6 +120,7 @@ void Navigator::Trace(Visitor* visitor) const {
NavigatorLanguage::Trace(visitor); NavigatorLanguage::Trace(visitor);
ExecutionContextClient::Trace(visitor); ExecutionContextClient::Trace(visitor);
Supplementable<Navigator>::Trace(visitor); Supplementable<Navigator>::Trace(visitor);
NavigatorDeviceMemory::Trace(visitor);
} }
ExecutionContext* Navigator::GetUAExecutionContext() const { ExecutionContext* Navigator::GetUAExecutionContext() const {
......
...@@ -39,13 +39,13 @@ namespace blink { ...@@ -39,13 +39,13 @@ namespace blink {
class LocalFrame; class LocalFrame;
class CORE_EXPORT Navigator final : public ScriptWrappable, class CORE_EXPORT Navigator final : public ScriptWrappable,
public ExecutionContextClient,
public NavigatorConcurrentHardware, public NavigatorConcurrentHardware,
public NavigatorDeviceMemory, public NavigatorDeviceMemory,
public NavigatorID, public NavigatorID,
public NavigatorLanguage, public NavigatorLanguage,
public NavigatorOnLine, public NavigatorOnLine,
public NavigatorUA, public NavigatorUA,
public ExecutionContextClient,
public Supplementable<Navigator> { public Supplementable<Navigator> {
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
USING_GARBAGE_COLLECTED_MIXIN(Navigator); USING_GARBAGE_COLLECTED_MIXIN(Navigator);
......
...@@ -5,11 +5,33 @@ ...@@ -5,11 +5,33 @@
#include "third_party/blink/renderer/core/frame/navigator_device_memory.h" #include "third_party/blink/renderer/core/frame/navigator_device_memory.h"
#include "third_party/blink/public/common/device_memory/approximated_device_memory.h" #include "third_party/blink/public/common/device_memory/approximated_device_memory.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_metrics.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
#include "third_party/blink/public/mojom/web_feature/web_feature.mojom-shared.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
namespace blink { namespace blink {
NavigatorDeviceMemory::NavigatorDeviceMemory(Document* document)
: document_(document) {}
float NavigatorDeviceMemory::deviceMemory() const { float NavigatorDeviceMemory::deviceMemory() const {
return ApproximatedDeviceMemory::GetApproximatedDeviceMemory(); float result = ApproximatedDeviceMemory::GetApproximatedDeviceMemory();
if (document_) {
IdentifiabilityMetricBuilder(
base::UkmSourceId::FromInt64(document_->UkmSourceID()))
.Set(IdentifiableSurface::FromTypeAndInput(
IdentifiableSurface::Type::kWebFeature,
static_cast<uint64_t>(WebFeature::kNavigatorDeviceMemory)),
IdentifiabilityDigestHelper(result))
.Record(document_->UkmRecorder());
}
return result;
}
void NavigatorDeviceMemory::Trace(Visitor* visitor) const {
visitor->Trace(document_);
} }
} // namespace blink } // namespace blink
...@@ -6,12 +6,19 @@ ...@@ -6,12 +6,19 @@
#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_NAVIGATOR_DEVICE_MEMORY_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_NAVIGATOR_DEVICE_MEMORY_H_
#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/dom/document.h"
namespace blink { namespace blink {
class CORE_EXPORT NavigatorDeviceMemory { class CORE_EXPORT NavigatorDeviceMemory : public GarbageCollectedMixin {
public: public:
explicit NavigatorDeviceMemory();
explicit NavigatorDeviceMemory(Document* document);
float deviceMemory() const; float deviceMemory() const;
void Trace(Visitor*) const override;
private:
WeakMember<Document> document_;
}; };
} // namespace blink } // namespace blink
......
...@@ -40,6 +40,7 @@ WorkerNavigator::WorkerNavigator(const String& user_agent, ...@@ -40,6 +40,7 @@ WorkerNavigator::WorkerNavigator(const String& user_agent,
const UserAgentMetadata& ua_metadata, const UserAgentMetadata& ua_metadata,
ExecutionContext* execution_context) ExecutionContext* execution_context)
: ExecutionContextClient(execution_context), : ExecutionContextClient(execution_context),
NavigatorDeviceMemory(nullptr),
NavigatorLanguage(execution_context), NavigatorLanguage(execution_context),
user_agent_(user_agent), user_agent_(user_agent),
ua_metadata_(ua_metadata) {} ua_metadata_(ua_metadata) {}
...@@ -73,6 +74,7 @@ void WorkerNavigator::Trace(Visitor* visitor) const { ...@@ -73,6 +74,7 @@ void WorkerNavigator::Trace(Visitor* visitor) const {
ExecutionContextClient::Trace(visitor); ExecutionContextClient::Trace(visitor);
NavigatorLanguage::Trace(visitor); NavigatorLanguage::Trace(visitor);
Supplementable<WorkerNavigator>::Trace(visitor); Supplementable<WorkerNavigator>::Trace(visitor);
NavigatorDeviceMemory::Trace(visitor);
} }
} // namespace blink } // namespace blink
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