Index: ui/base/clipboard/clipboard.cc |
diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc |
index e384c6528d70dbc4bdd01ad8832b5704d1f3864e..32cea0edd7e73c88cd2b2ca67245353b7ef6e77b 100644 |
--- a/ui/base/clipboard/clipboard.cc |
+++ b/ui/base/clipboard/clipboard.cc |
@@ -9,6 +9,7 @@ |
#include "base/lazy_instance.h" |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/metrics/histogram.h" |
#include "base/synchronization/lock.h" |
#include "ui/gfx/size.h" |
@@ -103,6 +104,8 @@ union SourceTag2BinaryHelper { |
} // namespace |
+const Clipboard::SourceTag Clipboard::kInvalidSourceTag = |
+ reinterpret_cast<void*>(1); |
const char Clipboard::kMimeTypeText[] = "text/plain"; |
const char Clipboard::kMimeTypeURIList[] = "text/uri-list"; |
const char Clipboard::kMimeTypeDownloadURL[] = "downloadurl"; |
@@ -186,6 +189,8 @@ void Clipboard::WriteObjects(Buffer buffer, |
WriteObjectsImpl(buffer, objects, tag); |
if (!write_objects_callback_.is_null()) |
write_objects_callback_.Run(buffer); |
+ ReportAction(buffer, tag == SourceTag() ? WRITE_CLIPBOARD_NO_SOURCE_TAG |
+ : WRITE_CLIPBOARD_SOURCE_TAG); |
} |
void Clipboard::DispatchObject(ObjectType type, const ObjectMapParams& params) { |
@@ -299,4 +304,31 @@ void Clipboard::ReplaceSharedMemHandle(ObjectMap* objects, |
} |
} |
+void Clipboard::ReportAction(Buffer buffer, TrackedAction action) const |
+{ |
+ if (buffer != BUFFER_STANDARD) |
+ return; |
+ |
+ switch (action) { |
+ case WRITE_CLIPBOARD_NO_SOURCE_TAG: |
+ case WRITE_CLIPBOARD_SOURCE_TAG: |
+ UMA_HISTOGRAM_ENUMERATION("Clipboard.IncognitoUseCase", |
+ action, |
+ MAX_TRACKED_ACTION); |
+ break; |
+ // The code below counts cases when there is the kInvalidSourceTag in the |
+ // clipboard. That is, original data came from Incognito window and was |
+ // destroyed with that window. |
+ case READ_TEXT: |
+ if (kInvalidSourceTag == ReadSourceTag(buffer)) { |
+ UMA_HISTOGRAM_ENUMERATION("Clipboard.IncognitoUseCase", |
+ action, |
+ MAX_TRACKED_ACTION); |
+ } |
+ break; |
+ case MAX_TRACKED_ACTION: |
+ break; |
+ } |
+} |
+ |
} // namespace ui |