Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Side by Side Diff: ui/base/clipboard/clipboard.h

Issue 12041078: Clear the clipboard closing Incognito window (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Removed includes + style changes Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_BASE_CLIPBOARD_CLIPBOARD_H_ 5 #ifndef UI_BASE_CLIPBOARD_CLIPBOARD_H_
6 #define UI_BASE_CLIPBOARD_CLIPBOARD_H_ 6 #define UI_BASE_CLIPBOARD_CLIPBOARD_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/gtest_prod_util.h" 13 #include "base/gtest_prod_util.h"
14 #include "base/observer_list.h"
14 #include "base/process.h" 15 #include "base/process.h"
15 #include "base/shared_memory.h" 16 #include "base/shared_memory.h"
16 #include "base/string16.h" 17 #include "base/string16.h"
17 #include "base/threading/thread_checker.h" 18 #include "base/threading/thread_checker.h"
18 #include "base/threading/platform_thread.h" 19 #include "base/threading/platform_thread.h"
19 #include "ui/base/ui_export.h" 20 #include "ui/base/ui_export.h"
20 21
21 #if defined(TOOLKIT_GTK) 22 #if defined(TOOLKIT_GTK)
22 #include <gdk/gdk.h> 23 #include <gdk/gdk.h>
23 #endif 24 #endif
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 enum ObjectType { 129 enum ObjectType {
129 CBF_TEXT, 130 CBF_TEXT,
130 CBF_HTML, 131 CBF_HTML,
131 CBF_RTF, 132 CBF_RTF,
132 CBF_BOOKMARK, 133 CBF_BOOKMARK,
133 CBF_FILES, 134 CBF_FILES,
134 CBF_WEBKIT, 135 CBF_WEBKIT,
135 CBF_BITMAP, 136 CBF_BITMAP,
136 CBF_SMBITMAP, // Bitmap from shared memory. 137 CBF_SMBITMAP, // Bitmap from shared memory.
137 CBF_DATA, // Arbitrary block of bytes. 138 CBF_DATA, // Arbitrary block of bytes.
139 CBF_SOURCE_TAG, // Signifies the source of data.
138 }; 140 };
139 141
140 // ObjectMap is a map from ObjectType to associated data. 142 // ObjectMap is a map from ObjectType to associated data.
141 // The data is organized differently for each ObjectType. The following 143 // The data is organized differently for each ObjectType. The following
142 // table summarizes what kind of data is stored for each key. 144 // table summarizes what kind of data is stored for each key.
143 // * indicates an optional argument. 145 // * indicates an optional argument.
144 // 146 //
145 // Key Arguments Type 147 // Key Arguments Type
146 // ------------------------------------- 148 // -------------------------------------
147 // CBF_TEXT text char array 149 // CBF_TEXT text char array
(...skipping 14 matching lines...) Expand all
162 // size gfx::Size struct 164 // size gfx::Size struct
163 // CBF_SMBITMAP shared_mem A pointer to an unmapped base::SharedMemory 165 // CBF_SMBITMAP shared_mem A pointer to an unmapped base::SharedMemory
164 // object containing the bitmap data. 166 // object containing the bitmap data.
165 // size gfx::Size struct 167 // size gfx::Size struct
166 // CBF_DATA format char array 168 // CBF_DATA format char array
167 // data byte array 169 // data byte array
168 typedef std::vector<char> ObjectMapParam; 170 typedef std::vector<char> ObjectMapParam;
169 typedef std::vector<ObjectMapParam> ObjectMapParams; 171 typedef std::vector<ObjectMapParam> ObjectMapParams;
170 typedef std::map<int /* ObjectType */, ObjectMapParams> ObjectMap; 172 typedef std::map<int /* ObjectType */, ObjectMapParams> ObjectMap;
171 173
174 // WriteObject() caller can use the SourceTag that will be stored in the
175 // clipboard. NULL value means "no tag".
176 typedef void* SourceTag;
177 static ObjectMapParam SourceTag2Binary(SourceTag tag);
178 static SourceTag Binary2SourceTag(const std::string& serialization);
179
172 // Buffer designates which clipboard the action should be applied to. 180 // Buffer designates which clipboard the action should be applied to.
173 // Only platforms that use the X Window System support the selection 181 // Only platforms that use the X Window System support the selection
174 // buffer. 182 // buffer.
175 enum Buffer { 183 enum Buffer {
176 BUFFER_STANDARD, 184 BUFFER_STANDARD,
177 BUFFER_SELECTION, 185 BUFFER_SELECTION,
178 }; 186 };
179 187
188 // This observer does track only calls to Clipboard::WriteObjects.
189 // Don't use it for notification about changed OS clipboard.
190 class ClipboardObserverForTesting {
191 public:
192 // Called at the end of Clipboard::WriteObjects().
193 virtual void OnWriteObjects(Buffer buffer) = 0;
194 protected:
195 virtual ~ClipboardObserverForTesting() {}
196 };
197
198 void AddObserver(ClipboardObserverForTesting* obs) {
199 observer_list_.AddObserver(obs);
200 }
201
202 void RemoveObserver(ClipboardObserverForTesting* obs) {
203 observer_list_.RemoveObserver(obs);
204 }
205
180 static bool IsValidBuffer(int32 buffer) { 206 static bool IsValidBuffer(int32 buffer) {
181 switch (buffer) { 207 switch (buffer) {
182 case BUFFER_STANDARD: 208 case BUFFER_STANDARD:
183 return true; 209 return true;
184 #if defined(USE_X11) && !defined(OS_CHROMEOS) 210 #if defined(USE_X11) && !defined(OS_CHROMEOS)
185 case BUFFER_SELECTION: 211 case BUFFER_SELECTION:
186 return true; 212 return true;
187 #endif 213 #endif
188 } 214 }
189 return false; 215 return false;
(...skipping 17 matching lines...) Expand all
207 233
208 // Destroys the clipboard for the current thread. Usually, this will clean up 234 // Destroys the clipboard for the current thread. Usually, this will clean up
209 // all clipboards, except on Windows. (Previous code leaks the IO thread 235 // all clipboards, except on Windows. (Previous code leaks the IO thread
210 // clipboard, so it shouldn't be a problem.) 236 // clipboard, so it shouldn't be a problem.)
211 static void DestroyClipboardForCurrentThread(); 237 static void DestroyClipboardForCurrentThread();
212 238
213 // Write a bunch of objects to the system clipboard. Copies are made of the 239 // Write a bunch of objects to the system clipboard. Copies are made of the
214 // contents of |objects|. On Windows they are copied to the system clipboard. 240 // contents of |objects|. On Windows they are copied to the system clipboard.
215 // On linux they are copied into a structure owned by the Clipboard object and 241 // On linux they are copied into a structure owned by the Clipboard object and
216 // kept until the system clipboard is set again. 242 // kept until the system clipboard is set again.
217 void WriteObjects(Buffer buffer, const ObjectMap& objects); 243 // SourceTag is optional value to be stored in the clipboard, NULL won't be
244 // stored.
245 void WriteObjects(Buffer buffer, const ObjectMap& objects, SourceTag tag);
218 246
219 // Returns a sequence number which uniquely identifies clipboard state. 247 // Returns a sequence number which uniquely identifies clipboard state.
220 // This can be used to version the data on the clipboard and determine 248 // This can be used to version the data on the clipboard and determine
221 // whether it has changed. 249 // whether it has changed.
222 uint64 GetSequenceNumber(Buffer buffer); 250 uint64 GetSequenceNumber(Buffer buffer);
223 251
224 // Tests whether the clipboard contains a certain format 252 // Tests whether the clipboard contains a certain format
225 bool IsFormatAvailable(const FormatType& format, Buffer buffer) const; 253 bool IsFormatAvailable(const FormatType& format, Buffer buffer) const;
226 254
227 // Clear the clipboard data. 255 // Clear the clipboard data.
(...skipping 26 matching lines...) Expand all
254 const string16& type, 282 const string16& type,
255 string16* result) const; 283 string16* result) const;
256 284
257 // Reads a bookmark from the clipboard, if available. 285 // Reads a bookmark from the clipboard, if available.
258 void ReadBookmark(string16* title, std::string* url) const; 286 void ReadBookmark(string16* title, std::string* url) const;
259 287
260 // Reads raw data from the clipboard with the given format type. Stores result 288 // Reads raw data from the clipboard with the given format type. Stores result
261 // as a byte vector. 289 // as a byte vector.
262 void ReadData(const FormatType& format, std::string* result) const; 290 void ReadData(const FormatType& format, std::string* result) const;
263 291
292 // Reads Source tag from the clipboard, if available.
293 SourceTag ReadSourceTag() const;
294
264 // Gets the FormatType corresponding to an arbitrary format string, 295 // Gets the FormatType corresponding to an arbitrary format string,
265 // registering it with the system if needed. Due to Windows/Linux 296 // registering it with the system if needed. Due to Windows/Linux
266 // limitiations, |format_string| must never be controlled by the user. 297 // limitiations, |format_string| must never be controlled by the user.
267 static FormatType GetFormatType(const std::string& format_string); 298 static FormatType GetFormatType(const std::string& format_string);
268 299
269 // Get format identifiers for various types. 300 // Get format identifiers for various types.
270 static const FormatType& GetUrlFormatType(); 301 static const FormatType& GetUrlFormatType();
271 static const FormatType& GetUrlWFormatType(); 302 static const FormatType& GetUrlWFormatType();
272 static const FormatType& GetMozUrlFormatType(); 303 static const FormatType& GetMozUrlFormatType();
273 static const FormatType& GetPlainTextFormatType(); 304 static const FormatType& GetPlainTextFormatType();
(...skipping 29 matching lines...) Expand all
303 private: 334 private:
304 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, SharedBitmapTest); 335 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, SharedBitmapTest);
305 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, EmptyHTMLTest); 336 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, EmptyHTMLTest);
306 friend class ClipboardTest; 337 friend class ClipboardTest;
307 338
308 Clipboard(); 339 Clipboard();
309 ~Clipboard(); 340 ~Clipboard();
310 341
311 void DispatchObject(ObjectType type, const ObjectMapParams& params); 342 void DispatchObject(ObjectType type, const ObjectMapParams& params);
312 343
344 void WriteObjectsImpl(Buffer buffer, const ObjectMap& objects, SourceTag tag);
345
313 void WriteText(const char* text_data, size_t text_len); 346 void WriteText(const char* text_data, size_t text_len);
314 347
315 void WriteHTML(const char* markup_data, 348 void WriteHTML(const char* markup_data,
316 size_t markup_len, 349 size_t markup_len,
317 const char* url_data, 350 const char* url_data,
318 size_t url_len); 351 size_t url_len);
319 352
320 void WriteRTF(const char* rtf_data, size_t data_len); 353 void WriteRTF(const char* rtf_data, size_t data_len);
321 354
322 void WriteBookmark(const char* title_data, 355 void WriteBookmark(const char* title_data,
323 size_t title_len, 356 size_t title_len,
324 const char* url_data, 357 const char* url_data,
325 size_t url_len); 358 size_t url_len);
326 359
327 void WriteWebSmartPaste(); 360 void WriteWebSmartPaste();
328 361
329 void WriteBitmap(const char* pixel_data, const char* size_data); 362 void WriteBitmap(const char* pixel_data, const char* size_data);
330 363
331 void WriteData(const FormatType& format, 364 void WriteData(const FormatType& format,
332 const char* data_data, 365 const char* data_data,
333 size_t data_len); 366 size_t data_len);
367
368 void WriteSourceTag(SourceTag tag);
369
370 static const FormatType& GetSourceTagFormatType();
334 #if defined(OS_WIN) 371 #if defined(OS_WIN)
335 void WriteBitmapFromHandle(HBITMAP source_hbitmap, 372 void WriteBitmapFromHandle(HBITMAP source_hbitmap,
336 const gfx::Size& size); 373 const gfx::Size& size);
337 374
338 // Safely write to system clipboard. Free |handle| on failure. 375 // Safely write to system clipboard. Free |handle| on failure.
339 void WriteToClipboard(unsigned int format, HANDLE handle); 376 void WriteToClipboard(unsigned int format, HANDLE handle);
340 377
341 static void ParseBookmarkClipboardFormat(const string16& bookmark, 378 static void ParseBookmarkClipboardFormat(const string16& bookmark,
342 string16* title, 379 string16* title,
343 std::string* url); 380 std::string* url);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 TargetMap* clipboard_data_; 415 TargetMap* clipboard_data_;
379 GtkClipboard* clipboard_; 416 GtkClipboard* clipboard_;
380 GtkClipboard* primary_selection_; 417 GtkClipboard* primary_selection_;
381 #elif defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS) 418 #elif defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS)
382 private: 419 private:
383 // We keep our implementation details private because otherwise we bring in 420 // We keep our implementation details private because otherwise we bring in
384 // the X11 headers and break chrome compile. 421 // the X11 headers and break chrome compile.
385 class AuraX11Details; 422 class AuraX11Details;
386 scoped_ptr<AuraX11Details> aurax11_details_; 423 scoped_ptr<AuraX11Details> aurax11_details_;
387 #endif 424 #endif
425 ObserverList<ClipboardObserverForTesting> observer_list_;
388 426
389 DISALLOW_COPY_AND_ASSIGN(Clipboard); 427 DISALLOW_COPY_AND_ASSIGN(Clipboard);
390 }; 428 };
391 429
392 } // namespace ui 430 } // namespace ui
393 431
394 #endif // UI_BASE_CLIPBOARD_CLIPBOARD_H_ 432 #endif // UI_BASE_CLIPBOARD_CLIPBOARD_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698