Index: ui/base/clipboard/clipboard_android.cc |
diff --git a/ui/base/clipboard/clipboard_android.cc b/ui/base/clipboard/clipboard_android.cc |
index 4e175e9a5a4f2ac214aece4ee5cf047b6bc1fd65..9c3032217427743a03bba2e8e7747e77bbea3101 100644 |
--- a/ui/base/clipboard/clipboard_android.cc |
+++ b/ui/base/clipboard/clipboard_android.cc |
@@ -4,6 +4,8 @@ |
#include "ui/base/clipboard/clipboard_android.h" |
+#include <algorithm> |
+ |
#include "base/android/context_utils.h" |
#include "base/android/jni_string.h" |
#include "base/lazy_instance.h" |
@@ -48,6 +50,7 @@ class ClipboardMap { |
public: |
ClipboardMap(); |
std::string Get(const std::string& format); |
+ int64_t GetLastClipboardChangeTimeInMillis(); |
bool HasFormat(const std::string& format); |
void Set(const std::string& format, const std::string& data); |
void CommitToAndroidClipboard(); |
@@ -58,6 +61,8 @@ class ClipboardMap { |
std::map<std::string, std::string> map_; |
base::Lock lock_; |
+ int64_t last_clipboard_change_time_ms_; |
+ |
// Java class and methods for the Android ClipboardManager. |
ScopedJavaGlobalRef<jobject> clipboard_manager_; |
}; |
@@ -76,6 +81,12 @@ std::string ClipboardMap::Get(const std::string& format) { |
return it == map_.end() ? std::string() : it->second; |
} |
+int64_t ClipboardMap::GetLastClipboardChangeTimeInMillis() { |
+ base::AutoLock lock(lock_); |
+ UpdateFromAndroidClipboard(); |
+ return last_clipboard_change_time_ms_; |
+} |
+ |
bool ClipboardMap::HasFormat(const std::string& format) { |
base::AutoLock lock(lock_); |
UpdateFromAndroidClipboard(); |
@@ -160,6 +171,9 @@ void ClipboardMap::UpdateFromAndroidClipboard() { |
AddMapEntry(env, &android_clipboard_state, kPlainTextFormat, jtext); |
AddMapEntry(env, &android_clipboard_state, kHTMLFormat, jhtml); |
+ last_clipboard_change_time_ms_ = |
+ Java_Clipboard_getClipboardContentChangeTimeInMillis(env, |
+ clipboard_manager_); |
if (!MapIsSubset(android_clipboard_state, map_)) |
android_clipboard_state.swap(map_); |
@@ -401,6 +415,12 @@ void ClipboardAndroid::ReadData(const Clipboard::FormatType& format, |
*result = g_map.Get().Get(format.ToString()); |
} |
+base::Time ClipboardAndroid::GetClipboardLastModifiedTime() const { |
+ DCHECK(CalledOnValidThread()); |
+ return base::Time::FromJavaTime( |
+ g_map.Get().GetLastClipboardChangeTimeInMillis()); |
+} |
+ |
// Main entry point used to write several values in the clipboard. |
void ClipboardAndroid::WriteObjects(ClipboardType type, |
const ObjectMap& objects) { |