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

Side by Side Diff: base/clipboard_win.cc

Issue 41012: This changes the base clipboard class. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « base/clipboard_mac.mm ('k') | chrome/browser/autocomplete/autocomplete_edit_view_win.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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 // Many of these functions are based on those found in 5 // Many of these functions are based on those found in
6 // webkit/port/platform/PasteboardWin.cpp 6 // webkit/port/platform/PasteboardWin.cpp
7 7
8 #include "base/clipboard.h" 8 #include "base/clipboard.h"
9 9
10 #include <shlobj.h> 10 #include <shlobj.h>
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 size_t url_len) { 183 size_t url_len) {
184 std::string markup(markup_data, markup_len); 184 std::string markup(markup_data, markup_len);
185 std::string url; 185 std::string url;
186 186
187 if (url_len > 0) 187 if (url_len > 0)
188 url.assign(url_data, url_len); 188 url.assign(url_data, url_len);
189 189
190 std::string html_fragment = ClipboardUtil::HtmlToCFHtml(markup, url); 190 std::string html_fragment = ClipboardUtil::HtmlToCFHtml(markup, url);
191 HGLOBAL glob = CreateGlobalData(html_fragment); 191 HGLOBAL glob = CreateGlobalData(html_fragment);
192 192
193 WriteToClipboard(GetHtmlFormatType(), glob); 193 WriteToClipboard(StringToInt(GetHtmlFormatType()), glob);
194 } 194 }
195 195
196 void Clipboard::WriteBookmark(const char* title_data, 196 void Clipboard::WriteBookmark(const char* title_data,
197 size_t title_len, 197 size_t title_len,
198 const char* url_data, 198 const char* url_data,
199 size_t url_len) { 199 size_t url_len) {
200 std::string bookmark(title_data, title_len); 200 std::string bookmark(title_data, title_len);
201 bookmark.append(1, L'\n'); 201 bookmark.append(1, L'\n');
202 bookmark.append(url_data, url_len); 202 bookmark.append(url_data, url_len);
203 203
204 string16 wide_bookmark = UTF8ToWide(bookmark); 204 string16 wide_bookmark = UTF8ToWide(bookmark);
205 HGLOBAL glob = CreateGlobalData(wide_bookmark); 205 HGLOBAL glob = CreateGlobalData(wide_bookmark);
206 206
207 WriteToClipboard(GetUrlWFormatType(), glob); 207 WriteToClipboard(StringToInt(GetUrlWFormatType()), glob);
208 } 208 }
209 209
210 void Clipboard::WriteHyperlink(const char* title_data, 210 void Clipboard::WriteHyperlink(const char* title_data,
211 size_t title_len, 211 size_t title_len,
212 const char* url_data, 212 const char* url_data,
213 size_t url_len) { 213 size_t url_len) {
214 // Store as a bookmark. 214 // Store as a bookmark.
215 WriteBookmark(title_data, title_len, url_data, url_len); 215 WriteBookmark(title_data, title_len, url_data, url_len);
216 216
217 std::string title(title_data, title_len), 217 std::string title(title_data, title_len),
218 url(url_data, url_len), 218 url(url_data, url_len),
219 link("<a href=\""); 219 link("<a href=\"");
220 220
221 // Construct the hyperlink. 221 // Construct the hyperlink.
222 link.append(url); 222 link.append(url);
223 link.append("\">"); 223 link.append("\">");
224 link.append(title); 224 link.append(title);
225 link.append("</a>"); 225 link.append("</a>");
226 226
227 // Store hyperlink as html. 227 // Store hyperlink as html.
228 WriteHTML(link.c_str(), link.size(), NULL, 0); 228 WriteHTML(link.c_str(), link.size(), NULL, 0);
229 } 229 }
230 230
231 void Clipboard::WriteWebSmartPaste() { 231 void Clipboard::WriteWebSmartPaste() {
232 DCHECK(clipboard_owner_); 232 DCHECK(clipboard_owner_);
233 ::SetClipboardData(GetWebKitSmartPasteFormatType(), NULL); 233 ::SetClipboardData(StringToInt(GetWebKitSmartPasteFormatType()), NULL);
234 } 234 }
235 235
236 void Clipboard::WriteBitmap(const char* pixel_data, const char* size_data) { 236 void Clipboard::WriteBitmap(const char* pixel_data, const char* size_data) {
237 const gfx::Size* size = reinterpret_cast<const gfx::Size*>(size_data); 237 const gfx::Size* size = reinterpret_cast<const gfx::Size*>(size_data);
238 HDC dc = ::GetDC(NULL); 238 HDC dc = ::GetDC(NULL);
239 239
240 // This doesn't actually cost us a memcpy when the bitmap comes from the 240 // This doesn't actually cost us a memcpy when the bitmap comes from the
241 // renderer as we load it into the bitmap using setPixels which just sets a 241 // renderer as we load it into the bitmap using setPixels which just sets a
242 // pointer. Someone has to memcpy it into GDI, it might as well be us here. 242 // pointer. Someone has to memcpy it into GDI, it might as well be us here.
243 243
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 DROPFILES* drop_files = reinterpret_cast<DROPFILES*>(data); 364 DROPFILES* drop_files = reinterpret_cast<DROPFILES*>(data);
365 drop_files->pFiles = sizeof(DROPFILES); 365 drop_files->pFiles = sizeof(DROPFILES);
366 drop_files->fWide = TRUE; 366 drop_files->fWide = TRUE;
367 367
368 memcpy(data + sizeof(DROPFILES), file_data, file_len); 368 memcpy(data + sizeof(DROPFILES), file_data, file_len);
369 369
370 ::GlobalUnlock(hdata); 370 ::GlobalUnlock(hdata);
371 WriteToClipboard(CF_HDROP, hdata); 371 WriteToClipboard(CF_HDROP, hdata);
372 } 372 }
373 373
374 void Clipboard::WriteToClipboard(FormatType format, HANDLE handle) { 374 void Clipboard::WriteToClipboard(unsigned int format, HANDLE handle) {
375 DCHECK(clipboard_owner_); 375 DCHECK(clipboard_owner_);
376 if (handle && !::SetClipboardData(format, handle)) { 376 if (handle && !::SetClipboardData(format, handle)) {
377 DCHECK(ERROR_CLIPBOARD_NOT_OPEN != GetLastError()); 377 DCHECK(ERROR_CLIPBOARD_NOT_OPEN != GetLastError());
378 FreeData(format, handle); 378 FreeData(format, handle);
379 } 379 }
380 } 380 }
381 381
382 bool Clipboard::IsFormatAvailable(unsigned int format) const { 382 bool Clipboard::IsFormatAvailable(const Clipboard::FormatType& format) const {
383 return ::IsClipboardFormatAvailable(format) != FALSE; 383 return ::IsClipboardFormatAvailable(StringToInt(format)) != FALSE;
384 } 384 }
385 385
386 void Clipboard::ReadText(string16* result) const { 386 void Clipboard::ReadText(string16* result) const {
387 if (!result) { 387 if (!result) {
388 NOTREACHED(); 388 NOTREACHED();
389 return; 389 return;
390 } 390 }
391 391
392 result->clear(); 392 result->clear();
393 393
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 markup->clear(); 430 markup->clear();
431 431
432 if (src_url) 432 if (src_url)
433 src_url->clear(); 433 src_url->clear();
434 434
435 // Acquire the clipboard. 435 // Acquire the clipboard.
436 ScopedClipboard clipboard; 436 ScopedClipboard clipboard;
437 if (!clipboard.Acquire(GetClipboardWindow())) 437 if (!clipboard.Acquire(GetClipboardWindow()))
438 return; 438 return;
439 439
440 HANDLE data = ::GetClipboardData(GetHtmlFormatType()); 440 HANDLE data = ::GetClipboardData(StringToInt(GetHtmlFormatType()));
441 if (!data) 441 if (!data)
442 return; 442 return;
443 443
444 std::string html_fragment(static_cast<const char*>(::GlobalLock(data))); 444 std::string html_fragment(static_cast<const char*>(::GlobalLock(data)));
445 ::GlobalUnlock(data); 445 ::GlobalUnlock(data);
446 446
447 std::string markup_utf8; 447 std::string markup_utf8;
448 ClipboardUtil::CFHtmlToHtml(html_fragment, &markup_utf8, src_url); 448 ClipboardUtil::CFHtmlToHtml(html_fragment, &markup_utf8, src_url);
449 markup->assign(UTF8ToWide(markup_utf8)); 449 markup->assign(UTF8ToWide(markup_utf8));
450 } 450 }
451 451
452 void Clipboard::ReadBookmark(string16* title, std::string* url) const { 452 void Clipboard::ReadBookmark(string16* title, std::string* url) const {
453 if (title) 453 if (title)
454 title->clear(); 454 title->clear();
455 455
456 if (url) 456 if (url)
457 url->clear(); 457 url->clear();
458 458
459 // Acquire the clipboard. 459 // Acquire the clipboard.
460 ScopedClipboard clipboard; 460 ScopedClipboard clipboard;
461 if (!clipboard.Acquire(GetClipboardWindow())) 461 if (!clipboard.Acquire(GetClipboardWindow()))
462 return; 462 return;
463 463
464 HANDLE data = ::GetClipboardData(GetUrlWFormatType()); 464 HANDLE data = ::GetClipboardData(StringToInt(GetUrlWFormatType()));
465 if (!data) 465 if (!data)
466 return; 466 return;
467 467
468 string16 bookmark(static_cast<const char16*>(::GlobalLock(data))); 468 string16 bookmark(static_cast<const char16*>(::GlobalLock(data)));
469 ::GlobalUnlock(data); 469 ::GlobalUnlock(data);
470 470
471 ParseBookmarkClipboardFormat(bookmark, title, url); 471 ParseBookmarkClipboardFormat(bookmark, title, url);
472 } 472 }
473 473
474 // Read a file in HDROP format from the clipboard. 474 // Read a file in HDROP format from the clipboard.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 529
530 if (url) { 530 if (url) {
531 const size_t url_start = bookmark.find_first_not_of(kDelim, title_end); 531 const size_t url_start = bookmark.find_first_not_of(kDelim, title_end);
532 if (url_start != string16::npos) 532 if (url_start != string16::npos)
533 *url = UTF16ToUTF8(bookmark.substr(url_start, string16::npos)); 533 *url = UTF16ToUTF8(bookmark.substr(url_start, string16::npos));
534 } 534 }
535 } 535 }
536 536
537 // static 537 // static
538 Clipboard::FormatType Clipboard::GetUrlFormatType() { 538 Clipboard::FormatType Clipboard::GetUrlFormatType() {
539 return ClipboardUtil::GetUrlFormat()->cfFormat; 539 return IntToString(ClipboardUtil::GetUrlFormat()->cfFormat);
540 } 540 }
541 541
542 // static 542 // static
543 Clipboard::FormatType Clipboard::GetUrlWFormatType() { 543 Clipboard::FormatType Clipboard::GetUrlWFormatType() {
544 return ClipboardUtil::GetUrlWFormat()->cfFormat; 544 return IntToString(ClipboardUtil::GetUrlWFormat()->cfFormat);
545 } 545 }
546 546
547 // static 547 // static
548 Clipboard::FormatType Clipboard::GetMozUrlFormatType() { 548 Clipboard::FormatType Clipboard::GetMozUrlFormatType() {
549 return ClipboardUtil::GetMozUrlFormat()->cfFormat; 549 return IntToString(ClipboardUtil::GetMozUrlFormat()->cfFormat);
550 } 550 }
551 551
552 // static 552 // static
553 Clipboard::FormatType Clipboard::GetPlainTextFormatType() { 553 Clipboard::FormatType Clipboard::GetPlainTextFormatType() {
554 return ClipboardUtil::GetPlainTextFormat()->cfFormat; 554 return IntToString(ClipboardUtil::GetPlainTextFormat()->cfFormat);
555 } 555 }
556 556
557 // static 557 // static
558 Clipboard::FormatType Clipboard::GetPlainTextWFormatType() { 558 Clipboard::FormatType Clipboard::GetPlainTextWFormatType() {
559 return ClipboardUtil::GetPlainTextWFormat()->cfFormat; 559 return IntToString(ClipboardUtil::GetPlainTextWFormat()->cfFormat);
560 } 560 }
561 561
562 // static 562 // static
563 Clipboard::FormatType Clipboard::GetFilenameFormatType() { 563 Clipboard::FormatType Clipboard::GetFilenameFormatType() {
564 return ClipboardUtil::GetFilenameFormat()->cfFormat; 564 return IntToString(ClipboardUtil::GetFilenameFormat()->cfFormat);
565 } 565 }
566 566
567 // static 567 // static
568 Clipboard::FormatType Clipboard::GetFilenameWFormatType() { 568 Clipboard::FormatType Clipboard::GetFilenameWFormatType() {
569 return ClipboardUtil::GetFilenameWFormat()->cfFormat; 569 return IntToString(ClipboardUtil::GetFilenameWFormat()->cfFormat);
570 } 570 }
571 571
572 // MS HTML Format 572 // MS HTML Format
573 // static 573 // static
574 Clipboard::FormatType Clipboard::GetHtmlFormatType() { 574 Clipboard::FormatType Clipboard::GetHtmlFormatType() {
575 return ClipboardUtil::GetHtmlFormat()->cfFormat; 575 return IntToString(ClipboardUtil::GetHtmlFormat()->cfFormat);
576 } 576 }
577 577
578 // static 578 // static
579 Clipboard::FormatType Clipboard::GetBitmapFormatType() { 579 Clipboard::FormatType Clipboard::GetBitmapFormatType() {
580 return CF_BITMAP; 580 return IntToString(CF_BITMAP);
581 } 581 }
582 582
583 // Firefox text/html 583 // Firefox text/html
584 // static 584 // static
585 Clipboard::FormatType Clipboard::GetTextHtmlFormatType() { 585 Clipboard::FormatType Clipboard::GetTextHtmlFormatType() {
586 return ClipboardUtil::GetTextHtmlFormat()->cfFormat; 586 return IntToString(ClipboardUtil::GetTextHtmlFormat()->cfFormat);
587 } 587 }
588 588
589 // static 589 // static
590 Clipboard::FormatType Clipboard::GetCFHDropFormatType() { 590 Clipboard::FormatType Clipboard::GetCFHDropFormatType() {
591 return ClipboardUtil::GetCFHDropFormat()->cfFormat; 591 return IntToString(ClipboardUtil::GetCFHDropFormat()->cfFormat);
592 } 592 }
593 593
594 // static 594 // static
595 Clipboard::FormatType Clipboard::GetFileDescriptorFormatType() { 595 Clipboard::FormatType Clipboard::GetFileDescriptorFormatType() {
596 return ClipboardUtil::GetFileDescriptorFormat()->cfFormat; 596 return IntToString(ClipboardUtil::GetFileDescriptorFormat()->cfFormat);
597 } 597 }
598 598
599 // static 599 // static
600 Clipboard::FormatType Clipboard::GetFileContentFormatZeroType() { 600 Clipboard::FormatType Clipboard::GetFileContentFormatZeroType() {
601 return ClipboardUtil::GetFileContentFormatZero()->cfFormat; 601 return IntToString(ClipboardUtil::GetFileContentFormatZero()->cfFormat);
602 } 602 }
603 603
604 // static 604 // static
605 void Clipboard::DuplicateRemoteHandles(base::ProcessHandle process, 605 void Clipboard::DuplicateRemoteHandles(base::ProcessHandle process,
606 ObjectMap* objects) { 606 ObjectMap* objects) {
607 for (ObjectMap::iterator iter = objects->begin(); iter != objects->end(); 607 for (ObjectMap::iterator iter = objects->begin(); iter != objects->end();
608 ++iter) { 608 ++iter) {
609 if (iter->first == CBF_SMBITMAP) { 609 if (iter->first == CBF_SMBITMAP) {
610 // There is a shared memory handle encoded on the first ObjectMapParam. 610 // There is a shared memory handle encoded on the first ObjectMapParam.
611 // Use it to open a local handle to the memory. 611 // Use it to open a local handle to the memory.
612 char* bitmap_data = &(iter->second[0].front()); 612 char* bitmap_data = &(iter->second[0].front());
613 base::SharedMemoryHandle* remote_bitmap_handle = 613 base::SharedMemoryHandle* remote_bitmap_handle =
614 reinterpret_cast<base::SharedMemoryHandle*>(bitmap_data); 614 reinterpret_cast<base::SharedMemoryHandle*>(bitmap_data);
615 615
616 base::SharedMemory* bitmap = new base::SharedMemory(*remote_bitmap_handle, 616 base::SharedMemory* bitmap = new base::SharedMemory(*remote_bitmap_handle,
617 false, process); 617 false, process);
618 618
619 // We store the object where the remote handle was located so it can 619 // We store the object where the remote handle was located so it can
620 // be retrieved by the UI thread (see WriteBitmapFromSharedMemory()). 620 // be retrieved by the UI thread (see WriteBitmapFromSharedMemory()).
621 iter->second[0].clear(); 621 iter->second[0].clear();
622 for (size_t i = 0; i < sizeof(bitmap); i++) 622 for (size_t i = 0; i < sizeof(bitmap); i++)
623 iter->second[0].push_back(reinterpret_cast<char*>(&bitmap)[i]); 623 iter->second[0].push_back(reinterpret_cast<char*>(&bitmap)[i]);
624 } 624 }
625 } 625 }
626 } 626 }
627 627
628 // static 628 // static
629 Clipboard::FormatType Clipboard::GetWebKitSmartPasteFormatType() { 629 Clipboard::FormatType Clipboard::GetWebKitSmartPasteFormatType() {
630 return ClipboardUtil::GetWebKitSmartPasteFormat()->cfFormat; 630 return IntToString(ClipboardUtil::GetWebKitSmartPasteFormat()->cfFormat);
631 } 631 }
632 632
633 // static 633 // static
634 void Clipboard::FreeData(FormatType format, HANDLE data) { 634 void Clipboard::FreeData(unsigned int format, HANDLE data) {
635 if (format == CF_BITMAP) 635 if (format == CF_BITMAP)
636 ::DeleteObject(static_cast<HBITMAP>(data)); 636 ::DeleteObject(static_cast<HBITMAP>(data));
637 else 637 else
638 ::GlobalFree(data); 638 ::GlobalFree(data);
639 } 639 }
640 640
641 HWND Clipboard::GetClipboardWindow() const { 641 HWND Clipboard::GetClipboardWindow() const {
642 if (!clipboard_owner_ && create_window_) { 642 if (!clipboard_owner_ && create_window_) {
643 clipboard_owner_ = ::CreateWindow(L"ClipboardOwnerWindowClass", 643 clipboard_owner_ = ::CreateWindow(L"ClipboardOwnerWindowClass",
644 L"ClipboardOwnerWindow", 644 L"ClipboardOwnerWindow",
645 0, 0, 0, 0, 0, 645 0, 0, 0, 0, 0,
646 HWND_MESSAGE, 646 HWND_MESSAGE,
647 0, 0, 0); 647 0, 0, 0);
648 } 648 }
649 return clipboard_owner_; 649 return clipboard_owner_;
650 } 650 }
OLDNEW
« no previous file with comments | « base/clipboard_mac.mm ('k') | chrome/browser/autocomplete/autocomplete_edit_view_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698