| Index: ui/base/clipboard/clipboard_android.cc
|
| diff --git a/ui/base/clipboard/clipboard_android.cc b/ui/base/clipboard/clipboard_android.cc
|
| index 2da7c540e6400e921e510b3668ad2c79ea8162b3..8f35282acde0eb701fedebef5ec6aaaad0e84243 100644
|
| --- a/ui/base/clipboard/clipboard_android.cc
|
| +++ b/ui/base/clipboard/clipboard_android.cc
|
| @@ -4,6 +4,9 @@
|
|
|
| #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"
|
| #include "base/stl_util.h"
|
| @@ -47,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();
|
| @@ -57,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_;
|
| };
|
| @@ -74,6 +80,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();
|
| @@ -158,6 +170,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_);
|
| @@ -399,6 +414,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) {
|
|
|