Index: ui/base/clipboard/clipboard.h |
diff --git a/ui/base/clipboard/clipboard.h b/ui/base/clipboard/clipboard.h |
index 66a5dcbf426b10be1fb7ea5e3758d9342b6fd235..d06bcabfa586c7a8d6bf86d04649414a7f6e7161 100644 |
--- a/ui/base/clipboard/clipboard.h |
+++ b/ui/base/clipboard/clipboard.h |
@@ -10,9 +10,11 @@ |
#include <vector> |
#include "base/compiler_specific.h" |
+#include "base/lazy_instance.h" |
#include "base/memory/shared_memory.h" |
#include "base/process/process.h" |
#include "base/strings/string16.h" |
+#include "base/synchronization/lock.h" |
#include "base/threading/platform_thread.h" |
#include "base/threading/thread_checker.h" |
#include "ui/base/clipboard/clipboard_types.h" |
@@ -50,6 +52,7 @@ class NSString; |
namespace ui { |
template <typename T> |
class ClipboardTest; |
+class FakeClipboard; |
class ScopedClipboardWriter; |
class UI_BASE_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { |
@@ -71,10 +74,8 @@ class UI_BASE_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { |
std::string Serialize() const; |
static FormatType Deserialize(const std::string& serialization); |
-#if !defined(OS_ANDROID) |
// FormatType can be used in a set on some platforms. |
bool operator<(const FormatType& other) const; |
-#endif |
#if defined(OS_WIN) |
const FORMATETC& ToFormatEtc() const { return data_; } |
@@ -187,6 +188,10 @@ class UI_BASE_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { |
// the IO thread. |
static Clipboard* GetForCurrentThread(); |
+ // Testing helper to Replace any clipboard for the current thread with a fake |
sky
2014/11/14 02:10:31
Why the caps for Replace?
dcheng
2014/11/14 03:30:28
Done.
|
+ // clipboard. Useful for unit tests, since those generally run in parallel. |
+ static void UseFakeForCurrentThreadForTest(); |
sky
2014/11/14 02:10:31
How about UseTestClipboardForCurrentThread? Or Moc
dcheng
2014/11/14 03:30:28
Done.
|
+ |
// Destroys the clipboard for the current thread. Usually, this will clean up |
// all clipboards, except on Windows. (Previous code leaks the IO thread |
// clipboard, so it shouldn't be a problem.) |
@@ -195,7 +200,7 @@ class UI_BASE_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { |
// Returns a sequence number which uniquely identifies clipboard state. |
// This can be used to version the data on the clipboard and determine |
// whether it has changed. |
- virtual uint64 GetSequenceNumber(ClipboardType type) = 0; |
+ virtual uint64 GetSequenceNumber(ClipboardType type) const = 0; |
// Tests whether the clipboard contains a certain format |
virtual bool IsFormatAvailable(const FormatType& format, |
@@ -326,6 +331,19 @@ class UI_BASE_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) { |
friend class content::ClipboardMessageFilter; |
friend class ScopedClipboardWriter; |
+ // A list of allowed threads. By default, this is empty and no thread checking |
+ // is done (in the unit test case), but a user (like content) can set which |
+ // threads are allowed to call this method. |
+ typedef std::vector<base::PlatformThreadId> AllowedThreadsVector; |
+ static base::LazyInstance<AllowedThreadsVector> allowed_threads_; |
+ |
+ // Mapping from threads to clipboard objects. |
+ typedef std::map<base::PlatformThreadId, Clipboard*> ClipboardMap; |
+ static base::LazyInstance<ClipboardMap> clipboard_map_; |
+ |
+ // Mutex that controls access to |g_clipboard_map|. |
+ static base::LazyInstance<base::Lock>::Leaky clipboard_map_lock_; |
+ |
DISALLOW_COPY_AND_ASSIGN(Clipboard); |
}; |