1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_BASE_CLIPBOARD_CLIPBOARD_ANDROID_H_ 6 #define UI_BASE_CLIPBOARD_CLIPBOARD_ANDROID_H_ 7 8 #include "ui/base/clipboard/clipboard.h" 9 10 #include <jni.h> 11 #include <stddef.h> 12 #include <stdint.h> 13 14 #include "base/android/scoped_java_ref.h" 15 #include "base/callback_forward.h" 16 #include "base/component_export.h" 17 #include "base/macros.h" 18 #include "base/time/time.h" 19 20 namespace ui { 21 22 class ClipboardAndroid : public Clipboard { 23 public: 24 // Callback called whenever the clipboard is modified. The parameter 25 // represents the time of the modification. 26 using ModifiedCallback = base::RepeatingCallback<void(base::Time)>; 27 28 // Called by Java when the Java Clipboard is notified that the clipboard has 29 // changed. 30 void OnPrimaryClipChanged(JNIEnv* env, 31 const base::android::JavaParamRef<jobject>& obj); 32 33 // Called by Java when the Java Clipboard is notified that the window focus 34 // has changed. Since Chrome will not receive OnPrimaryClipChanged call from 35 // Android if Chrome is in background,Clipboard handler needs to check the 36 // content of clipboard didn't change, when Chrome is back in foreground. 37 void OnPrimaryClipTimestampInvalidated( 38 JNIEnv* env, 39 const base::android::JavaParamRef<jobject>& obj, 40 const jlong j_timestamp_ms); 41 42 // Called by Java side. 43 int64_t GetLastModifiedTimeToJavaTime(JNIEnv* env); 44 45 // Sets the callback called whenever the clipboard is modified. 46 COMPONENT_EXPORT(UI_BASE_CLIPBOARD) 47 void SetModifiedCallback(ModifiedCallback cb); 48 49 // Sets the last modified time without calling the above callback. 50 COMPONENT_EXPORT(UI_BASE_CLIPBOARD) 51 void SetLastModifiedTimeWithoutRunningCallback(base::Time time); 52 53 private: 54 friend class Clipboard; 55 56 ClipboardAndroid(); 57 ~ClipboardAndroid() override; 58 59 // Clipboard overrides: 60 void OnPreShutdown() override; 61 uint64_t GetSequenceNumber(ClipboardBuffer buffer) const override; 62 bool IsFormatAvailable(const ClipboardFormatType& format, 63 ClipboardBuffer buffer, 64 const DataTransferEndpoint* data_dst) const override; 65 void Clear(ClipboardBuffer buffer) override; 66 void ReadAvailableTypes(ClipboardBuffer buffer, 67 const DataTransferEndpoint* data_dst, 68 std::vector<base::string16>* types) const override; 69 std::vector<base::string16> ReadAvailablePlatformSpecificFormatNames( 70 ClipboardBuffer buffer, 71 const DataTransferEndpoint* data_dst) const override; 72 void ReadText(ClipboardBuffer buffer, 73 const DataTransferEndpoint* data_dst, 74 base::string16* result) const override; 75 void ReadAsciiText(ClipboardBuffer buffer, 76 const DataTransferEndpoint* data_dst, 77 std::string* result) const override; 78 void ReadHTML(ClipboardBuffer buffer, 79 const DataTransferEndpoint* data_dst, 80 base::string16* markup, 81 std::string* src_url, 82 uint32_t* fragment_start, 83 uint32_t* fragment_end) const override; 84 void ReadSvg(ClipboardBuffer buffer, 85 const DataTransferEndpoint* data_dst, 86 base::string16* result) const override; 87 void ReadRTF(ClipboardBuffer buffer, 88 const DataTransferEndpoint* data_dst, 89 std::string* result) const override; 90 void ReadImage(ClipboardBuffer buffer, 91 const DataTransferEndpoint* data_dst, 92 ReadImageCallback callback) const override; 93 void ReadCustomData(ClipboardBuffer buffer, 94 const base::string16& type, 95 const DataTransferEndpoint* data_dst, 96 base::string16* result) const override; 97 void ReadBookmark(const DataTransferEndpoint* data_dst, 98 base::string16* title, 99 100 std::string* url) const override; 101 void ReadData(const ClipboardFormatType& format, 102 const DataTransferEndpoint* data_dst, 103 std::string* result) const override; 104 base::Time GetLastModifiedTime() const override; 105 void ClearLastModifiedTime() override; 106 void WritePortableRepresentations( 107 ClipboardBuffer buffer, 108 const ObjectMap& objects, 109 std::unique_ptr<DataTransferEndpoint> data_src) override; 110 void WritePlatformRepresentations( 111 ClipboardBuffer buffer, 112 std::vector<Clipboard::PlatformRepresentation> platform_representations, 113 std::unique_ptr<DataTransferEndpoint> data_src) override; 114 void WriteText(const char* text_data, size_t text_len) override; 115 void WriteHTML(const char* markup_data, 116 size_t markup_len, 117 const char* url_data, 118 size_t url_len) override; 119 void WriteSvg(const char* markup_data, size_t markup_len) override; 120 void WriteRTF(const char* rtf_data, size_t data_len) override; 121 void WriteBookmark(const char* title_data, 122 size_t title_len, 123 const char* url_data, 124 size_t url_len) override; 125 void WriteWebSmartPaste() override; 126 void WriteBitmap(const SkBitmap& bitmap) override; 127 void WriteData(const ClipboardFormatType& format, 128 const char* data_data, 129 size_t data_len) override; 130 131 DISALLOW_COPY_AND_ASSIGN(ClipboardAndroid); 132 }; 133 134 } // namespace ui 135 136 #endif // UI_BASE_CLIPBOARD_CLIPBOARD_ANDROID_H_ 137