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

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: Merge and compilation fixes 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
« no previous file with comments | « content/public/browser/browser_context.h ('k') | ui/base/clipboard/clipboard.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/callback.h"
12 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
13 #include "base/gtest_prod_util.h" 14 #include "base/gtest_prod_util.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)
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 // size gfx::Size struct 163 // size gfx::Size struct
163 // CBF_SMBITMAP shared_mem A pointer to an unmapped base::SharedMemory 164 // CBF_SMBITMAP shared_mem A pointer to an unmapped base::SharedMemory
164 // object containing the bitmap data. 165 // object containing the bitmap data.
165 // size gfx::Size struct 166 // size gfx::Size struct
166 // CBF_DATA format char array 167 // CBF_DATA format char array
167 // data byte array 168 // data byte array
168 typedef std::vector<char> ObjectMapParam; 169 typedef std::vector<char> ObjectMapParam;
169 typedef std::vector<ObjectMapParam> ObjectMapParams; 170 typedef std::vector<ObjectMapParam> ObjectMapParams;
170 typedef std::map<int /* ObjectType */, ObjectMapParams> ObjectMap; 171 typedef std::map<int /* ObjectType */, ObjectMapParams> ObjectMap;
171 172
173 // WriteObject() caller can use the SourceTag that will be stored in the
174 // clipboard. NULL value means "no tag".
175 typedef void* SourceTag;
176 static ObjectMapParam SourceTag2Binary(SourceTag tag);
177 static SourceTag Binary2SourceTag(const std::string& serialization);
178
172 // Buffer designates which clipboard the action should be applied to. 179 // Buffer designates which clipboard the action should be applied to.
173 // Only platforms that use the X Window System support the selection 180 // Only platforms that use the X Window System support the selection
174 // buffer. 181 // buffer.
175 enum Buffer { 182 enum Buffer {
176 BUFFER_STANDARD, 183 BUFFER_STANDARD,
177 BUFFER_SELECTION, 184 BUFFER_SELECTION,
178 }; 185 };
179 186
187 // The callback is called after Clipboard::WriteObjects().
188 // Don't use it for notification about changed OS clipboard.
189 void set_write_objects_callback_for_testing(
190 const base::Callback<void(Buffer)>& cb) {
191 write_objects_callback_ = cb;
192 }
193
180 static bool IsValidBuffer(int32 buffer) { 194 static bool IsValidBuffer(int32 buffer) {
181 switch (buffer) { 195 switch (buffer) {
182 case BUFFER_STANDARD: 196 case BUFFER_STANDARD:
183 return true; 197 return true;
184 #if defined(USE_X11) && !defined(OS_CHROMEOS) 198 #if defined(USE_X11) && !defined(OS_CHROMEOS)
185 case BUFFER_SELECTION: 199 case BUFFER_SELECTION:
186 return true; 200 return true;
187 #endif 201 #endif
188 } 202 }
189 return false; 203 return false;
(...skipping 17 matching lines...) Expand all
207 221
208 // Destroys the clipboard for the current thread. Usually, this will clean up 222 // Destroys the clipboard for the current thread. Usually, this will clean up
209 // all clipboards, except on Windows. (Previous code leaks the IO thread 223 // all clipboards, except on Windows. (Previous code leaks the IO thread
210 // clipboard, so it shouldn't be a problem.) 224 // clipboard, so it shouldn't be a problem.)
211 static void DestroyClipboardForCurrentThread(); 225 static void DestroyClipboardForCurrentThread();
212 226
213 // Write a bunch of objects to the system clipboard. Copies are made of the 227 // 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. 228 // 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 229 // On linux they are copied into a structure owned by the Clipboard object and
216 // kept until the system clipboard is set again. 230 // kept until the system clipboard is set again.
217 void WriteObjects(Buffer buffer, const ObjectMap& objects); 231 // SourceTag is optional value to be stored in the clipboard, NULL won't be
232 // stored.
233 void WriteObjects(Buffer buffer, const ObjectMap& objects, SourceTag tag);
218 234
219 // Returns a sequence number which uniquely identifies clipboard state. 235 // Returns a sequence number which uniquely identifies clipboard state.
220 // This can be used to version the data on the clipboard and determine 236 // This can be used to version the data on the clipboard and determine
221 // whether it has changed. 237 // whether it has changed.
222 uint64 GetSequenceNumber(Buffer buffer); 238 uint64 GetSequenceNumber(Buffer buffer);
223 239
224 // Tests whether the clipboard contains a certain format 240 // Tests whether the clipboard contains a certain format
225 bool IsFormatAvailable(const FormatType& format, Buffer buffer) const; 241 bool IsFormatAvailable(const FormatType& format, Buffer buffer) const;
226 242
227 // Clear the clipboard data. 243 // Clear the clipboard data.
(...skipping 26 matching lines...) Expand all
254 const string16& type, 270 const string16& type,
255 string16* result) const; 271 string16* result) const;
256 272
257 // Reads a bookmark from the clipboard, if available. 273 // Reads a bookmark from the clipboard, if available.
258 void ReadBookmark(string16* title, std::string* url) const; 274 void ReadBookmark(string16* title, std::string* url) const;
259 275
260 // Reads raw data from the clipboard with the given format type. Stores result 276 // Reads raw data from the clipboard with the given format type. Stores result
261 // as a byte vector. 277 // as a byte vector.
262 void ReadData(const FormatType& format, std::string* result) const; 278 void ReadData(const FormatType& format, std::string* result) const;
263 279
280 // Reads Source tag from the clipboard, if available.
281 SourceTag ReadSourceTag(Buffer buffer) const;
282
264 // Gets the FormatType corresponding to an arbitrary format string, 283 // Gets the FormatType corresponding to an arbitrary format string,
265 // registering it with the system if needed. Due to Windows/Linux 284 // registering it with the system if needed. Due to Windows/Linux
266 // limitiations, |format_string| must never be controlled by the user. 285 // limitiations, |format_string| must never be controlled by the user.
267 static FormatType GetFormatType(const std::string& format_string); 286 static FormatType GetFormatType(const std::string& format_string);
268 287
269 // Get format identifiers for various types. 288 // Get format identifiers for various types.
270 static const FormatType& GetUrlFormatType(); 289 static const FormatType& GetUrlFormatType();
271 static const FormatType& GetUrlWFormatType(); 290 static const FormatType& GetUrlWFormatType();
272 static const FormatType& GetMozUrlFormatType(); 291 static const FormatType& GetMozUrlFormatType();
273 static const FormatType& GetPlainTextFormatType(); 292 static const FormatType& GetPlainTextFormatType();
274 static const FormatType& GetPlainTextWFormatType(); 293 static const FormatType& GetPlainTextWFormatType();
275 static const FormatType& GetFilenameFormatType(); 294 static const FormatType& GetFilenameFormatType();
276 static const FormatType& GetFilenameWFormatType(); 295 static const FormatType& GetFilenameWFormatType();
277 static const FormatType& GetWebKitSmartPasteFormatType(); 296 static const FormatType& GetWebKitSmartPasteFormatType();
278 // Win: MS HTML Format, Other: Generic HTML format 297 // Win: MS HTML Format, Other: Generic HTML format
279 static const FormatType& GetHtmlFormatType(); 298 static const FormatType& GetHtmlFormatType();
280 static const FormatType& GetRtfFormatType(); 299 static const FormatType& GetRtfFormatType();
281 static const FormatType& GetBitmapFormatType(); 300 static const FormatType& GetBitmapFormatType();
282 // TODO(raymes): Unify web custom data and pepper custom data: 301 // TODO(raymes): Unify web custom data and pepper custom data:
283 // crbug.com/158399. 302 // crbug.com/158399.
284 static const FormatType& GetWebCustomDataFormatType(); 303 static const FormatType& GetWebCustomDataFormatType();
285 static const FormatType& GetPepperCustomDataFormatType(); 304 static const FormatType& GetPepperCustomDataFormatType();
305 static const FormatType& GetSourceTagFormatType();
286 306
287 // Embeds a pointer to a SharedMemory object pointed to by |bitmap_handle| 307 // Embeds a pointer to a SharedMemory object pointed to by |bitmap_handle|
288 // belonging to |process| into a shared bitmap [CBF_SMBITMAP] slot in 308 // belonging to |process| into a shared bitmap [CBF_SMBITMAP] slot in
289 // |objects|. The pointer is deleted by DispatchObjects(). 309 // |objects|. The pointer is deleted by DispatchObjects().
290 // 310 //
291 // On non-Windows platforms, |process| is ignored. 311 // On non-Windows platforms, |process| is ignored.
292 static void ReplaceSharedMemHandle(ObjectMap* objects, 312 static void ReplaceSharedMemHandle(ObjectMap* objects,
293 base::SharedMemoryHandle bitmap_handle, 313 base::SharedMemoryHandle bitmap_handle,
294 base::ProcessHandle process); 314 base::ProcessHandle process);
295 #if defined(OS_WIN) 315 #if defined(OS_WIN)
296 // Firefox text/html 316 // Firefox text/html
297 static const FormatType& GetTextHtmlFormatType(); 317 static const FormatType& GetTextHtmlFormatType();
298 static const FormatType& GetCFHDropFormatType(); 318 static const FormatType& GetCFHDropFormatType();
299 static const FormatType& GetFileDescriptorFormatType(); 319 static const FormatType& GetFileDescriptorFormatType();
300 static const FormatType& GetFileContentFormatZeroType(); 320 static const FormatType& GetFileContentFormatZeroType();
301 #endif 321 #endif
302 322
303 private: 323 private:
304 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, SharedBitmapTest); 324 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, SharedBitmapTest);
305 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, EmptyHTMLTest); 325 FRIEND_TEST_ALL_PREFIXES(ClipboardTest, EmptyHTMLTest);
306 friend class ClipboardTest; 326 friend class ClipboardTest;
307 327
308 Clipboard(); 328 Clipboard();
309 ~Clipboard(); 329 ~Clipboard();
310 330
311 void DispatchObject(ObjectType type, const ObjectMapParams& params); 331 void DispatchObject(ObjectType type, const ObjectMapParams& params);
312 332
333 void WriteObjectsImpl(Buffer buffer, const ObjectMap& objects, SourceTag tag);
334
313 void WriteText(const char* text_data, size_t text_len); 335 void WriteText(const char* text_data, size_t text_len);
314 336
315 void WriteHTML(const char* markup_data, 337 void WriteHTML(const char* markup_data,
316 size_t markup_len, 338 size_t markup_len,
317 const char* url_data, 339 const char* url_data,
318 size_t url_len); 340 size_t url_len);
319 341
320 void WriteRTF(const char* rtf_data, size_t data_len); 342 void WriteRTF(const char* rtf_data, size_t data_len);
321 343
322 void WriteBookmark(const char* title_data, 344 void WriteBookmark(const char* title_data,
323 size_t title_len, 345 size_t title_len,
324 const char* url_data, 346 const char* url_data,
325 size_t url_len); 347 size_t url_len);
326 348
327 void WriteWebSmartPaste(); 349 void WriteWebSmartPaste();
328 350
329 void WriteBitmap(const char* pixel_data, const char* size_data); 351 void WriteBitmap(const char* pixel_data, const char* size_data);
330 352
331 void WriteData(const FormatType& format, 353 void WriteData(const FormatType& format,
332 const char* data_data, 354 const char* data_data,
333 size_t data_len); 355 size_t data_len);
356
357 void WriteSourceTag(SourceTag tag);
334 #if defined(OS_WIN) 358 #if defined(OS_WIN)
335 void WriteBitmapFromHandle(HBITMAP source_hbitmap, 359 void WriteBitmapFromHandle(HBITMAP source_hbitmap,
336 const gfx::Size& size); 360 const gfx::Size& size);
337 361
338 // Safely write to system clipboard. Free |handle| on failure. 362 // Safely write to system clipboard. Free |handle| on failure.
339 void WriteToClipboard(unsigned int format, HANDLE handle); 363 void WriteToClipboard(unsigned int format, HANDLE handle);
340 364
341 static void ParseBookmarkClipboardFormat(const string16& bookmark, 365 static void ParseBookmarkClipboardFormat(const string16& bookmark,
342 string16* title, 366 string16* title,
343 std::string* url); 367 std::string* url);
(...skipping 23 matching lines...) Expand all
367 typedef std::map<std::string, std::pair<char*, size_t> > TargetMap; 391 typedef std::map<std::string, std::pair<char*, size_t> > TargetMap;
368 392
369 private: 393 private:
370 // Write changes to gtk clipboard. 394 // Write changes to gtk clipboard.
371 void SetGtkClipboard(Buffer buffer); 395 void SetGtkClipboard(Buffer buffer);
372 // Insert a mapping into clipboard_data_. 396 // Insert a mapping into clipboard_data_.
373 void InsertMapping(const char* key, char* data, size_t data_len); 397 void InsertMapping(const char* key, char* data, size_t data_len);
374 398
375 // Find the gtk clipboard for the passed buffer enum. 399 // Find the gtk clipboard for the passed buffer enum.
376 GtkClipboard* LookupBackingClipboard(Buffer clipboard) const; 400 GtkClipboard* LookupBackingClipboard(Buffer clipboard) const;
401 // Reads raw data from the specified clipboard with the given format type.
402 void ReadDataImpl(Buffer buffer,
403 const FormatType& format,
404 std::string* result) const;
377 405
378 TargetMap* clipboard_data_; 406 TargetMap* clipboard_data_;
379 GtkClipboard* clipboard_; 407 GtkClipboard* clipboard_;
380 GtkClipboard* primary_selection_; 408 GtkClipboard* primary_selection_;
381 #elif defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS) 409 #elif defined(USE_AURA) && defined(USE_X11) && !defined(OS_CHROMEOS)
382 private: 410 private:
411 // Reads raw data from the specified clipboard with the given format type.
412 void ReadDataImpl(Buffer buffer,
413 const FormatType& format,
414 std::string* result) const;
383 // We keep our implementation details private because otherwise we bring in 415 // We keep our implementation details private because otherwise we bring in
384 // the X11 headers and break chrome compile. 416 // the X11 headers and break chrome compile.
385 class AuraX11Details; 417 class AuraX11Details;
386 scoped_ptr<AuraX11Details> aurax11_details_; 418 scoped_ptr<AuraX11Details> aurax11_details_;
387 #endif 419 #endif
420 base::Callback<void(Buffer)> write_objects_callback_;
388 421
389 DISALLOW_COPY_AND_ASSIGN(Clipboard); 422 DISALLOW_COPY_AND_ASSIGN(Clipboard);
390 }; 423 };
391 424
392 } // namespace ui 425 } // namespace ui
393 426
394 #endif // UI_BASE_CLIPBOARD_CLIPBOARD_H_ 427 #endif // UI_BASE_CLIPBOARD_CLIPBOARD_H_
OLDNEW
« no previous file with comments | « content/public/browser/browser_context.h ('k') | ui/base/clipboard/clipboard.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698