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

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