diff options
Diffstat (limited to 'webkit/port/platform/win')
-rw-r--r-- | webkit/port/platform/win/ClipboardUtilitiesWin.cpp | 323 | ||||
-rw-r--r-- | webkit/port/platform/win/ClipboardUtilitiesWin.h | 72 | ||||
-rw-r--r-- | webkit/port/platform/win/PasteboardWin.cpp | 224 |
3 files changed, 0 insertions, 619 deletions
diff --git a/webkit/port/platform/win/ClipboardUtilitiesWin.cpp b/webkit/port/platform/win/ClipboardUtilitiesWin.cpp deleted file mode 100644 index f23c2fe..0000000 --- a/webkit/port/platform/win/ClipboardUtilitiesWin.cpp +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Copyright (C) 2007 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "ClipboardUtilitiesWin.h" - -#include "KURL.h" -#include "CString.h" -#include "DocumentFragment.h" -#include "markup.h" -#include "PlatformString.h" -#include "TextEncoding.h" -#include <shlobj.h> -#include <shlwapi.h> -#include <shellapi.h> -#include <wininet.h> // for INTERNET_MAX_URL_LENGTH - -#include "base/clipboard_util.h" - -namespace WebCore { - -FORMATETC* cfHDropFormat() -{ - static FORMATETC urlFormat = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &urlFormat; -} - -//Firefox text/html -static FORMATETC* texthtmlFormat() -{ - static UINT cf = RegisterClipboardFormat(L"text/html"); - static FORMATETC texthtmlFormat = {cf, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &texthtmlFormat; -} - -HGLOBAL createGlobalData(const KURL& url, const String& title) -{ - String mutableURL(url.string()); - String mutableTitle(title); - SIZE_T size = mutableURL.length() + mutableTitle.length() + 2; // +1 for "\n" and +1 for null terminator - HGLOBAL cbData = ::GlobalAlloc(GPTR, size * sizeof(UChar)); - - if (cbData) { - PWSTR buffer = (PWSTR)::GlobalLock(cbData); - swprintf_s(buffer, size, L"%s\n%s", mutableURL.charactersWithNullTermination(), mutableTitle.isNull() ? L"" : mutableTitle.charactersWithNullTermination()); - ::GlobalUnlock(cbData); - } - return cbData; -} - -HGLOBAL createGlobalData(const String& str) -{ - HGLOBAL globalData = ::GlobalAlloc(GPTR, (str.length() + 1) * sizeof(UChar)); - if (!globalData) - return 0; - UChar* buffer = static_cast<UChar*>(::GlobalLock(globalData)); - memcpy(buffer, str.characters(), str.length() * sizeof(UChar)); - buffer[str.length()] = 0; - ::GlobalUnlock(globalData); - return globalData; -} - -HGLOBAL createGlobalData(const Vector<char>& vector) -{ - HGLOBAL globalData = ::GlobalAlloc(GPTR, vector.size() + 1); - if (!globalData) - return 0; - char* buffer = static_cast<char*>(::GlobalLock(globalData)); - memcpy(buffer, vector.data(), vector.size()); - buffer[vector.size()] = 0; - ::GlobalUnlock(globalData); - return globalData; -} - -static void append(Vector<char>& vector, const char* string) -{ - vector.append(string, strlen(string)); -} - -static void append(Vector<char>& vector, const CString& string) -{ - vector.append(string.data(), string.length()); -} - -// Documentation for the CF_HTML format is available at http://msdn.microsoft.com/workshop/networking/clipboard/htmlclipboard.asp -void markupToCF_HTML(const String& markup, const String& srcURL, Vector<char>& result) -{ - if (markup.isEmpty()) - return; - - #define MAX_DIGITS 10 - #define MAKE_NUMBER_FORMAT_1(digits) MAKE_NUMBER_FORMAT_2(digits) - #define MAKE_NUMBER_FORMAT_2(digits) "%0" #digits "u" - #define NUMBER_FORMAT MAKE_NUMBER_FORMAT_1(MAX_DIGITS) - - const char* header = "Version:0.9\n" - "StartHTML:" NUMBER_FORMAT "\n" - "EndHTML:" NUMBER_FORMAT "\n" - "StartFragment:" NUMBER_FORMAT "\n" - "EndFragment:" NUMBER_FORMAT "\n"; - const char* sourceURLPrefix = "SourceURL:"; - - const char* startMarkup = "<HTML>\n<BODY>\n<!--StartFragment-->\n"; - const char* endMarkup = "\n<!--EndFragment-->\n</BODY>\n</HTML>"; - - CString sourceURLUTF8 = srcURL == blankURL() ? "" : srcURL.utf8(); - CString markupUTF8 = markup.utf8(); - - // calculate offsets - unsigned startHTMLOffset = strlen(header) - strlen(NUMBER_FORMAT) * 4 + MAX_DIGITS * 4; - if (sourceURLUTF8.length()) - startHTMLOffset += strlen(sourceURLPrefix) + sourceURLUTF8.length() + 1; - unsigned startFragmentOffset = startHTMLOffset + strlen(startMarkup); - unsigned endFragmentOffset = startFragmentOffset + markupUTF8.length(); - unsigned endHTMLOffset = endFragmentOffset + strlen(endMarkup); - - append(result, String::format(header, startHTMLOffset, endHTMLOffset, startFragmentOffset, endFragmentOffset).utf8()); - if (sourceURLUTF8.length()) { - append(result, sourceURLPrefix); - append(result, sourceURLUTF8); - result.append('\n'); - } - append(result, startMarkup); - append(result, markupUTF8); - append(result, endMarkup); - - #undef MAX_DIGITS - #undef MAKE_NUMBER_FORMAT_1 - #undef MAKE_NUMBER_FORMAT_2 - #undef NUMBER_FORMAT -} - -String urlToMarkup(const KURL& url, const String& title) -{ - String markup("<a href=\""); - markup.append(url.string()); - markup.append("\">"); - markup.append(title); - markup.append("</a>"); - return markup; -} - -String urlToImageMarkup(const KURL& url, const String& altStr) { - String markup("<img src=\""); - markup.append(url.string()); - markup.append("\""); - if (!altStr.isEmpty()) { - markup.append(" alt=\""); - // TODO(dglazkov): escape string - markup.append(altStr); - markup.append("\""); - } - markup.append("/>"); - return markup; -} - -void replaceNewlinesWithWindowsStyleNewlines(String& str) -{ - static const UChar Newline = '\n'; - static const char* const WindowsNewline("\r\n"); - str.replace(Newline, WindowsNewline); -} - -void replaceNBSPWithSpace(String& str) -{ - static const UChar NonBreakingSpaceCharacter = 0xA0; - static const UChar SpaceCharacter = ' '; - str.replace(NonBreakingSpaceCharacter, SpaceCharacter); -} - -FORMATETC* urlWFormat() -{ - static UINT cf = RegisterClipboardFormat(L"UniformResourceLocatorW"); - static FORMATETC urlFormat = {cf, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &urlFormat; -} - -FORMATETC* urlFormat() -{ - static UINT cf = RegisterClipboardFormat(L"UniformResourceLocator"); - static FORMATETC urlFormat = {cf, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &urlFormat; -} - -FORMATETC* plainTextFormat() -{ - static FORMATETC textFormat = {CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &textFormat; -} - -FORMATETC* plainTextWFormat() -{ - static FORMATETC textFormat = {CF_UNICODETEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &textFormat; -} - -FORMATETC* filenameWFormat() -{ - static UINT cf = RegisterClipboardFormat(L"FileNameW"); - static FORMATETC urlFormat = {cf, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &urlFormat; -} - -FORMATETC* filenameFormat() -{ - static UINT cf = RegisterClipboardFormat(L"FileName"); - static FORMATETC urlFormat = {cf, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &urlFormat; -} - -//MSIE HTML Format -FORMATETC* htmlFormat() -{ - static UINT cf = RegisterClipboardFormat(L"HTML Format"); - static FORMATETC htmlFormat = {cf, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &htmlFormat; -} - -FORMATETC* smartPasteFormat() -{ - static UINT cf = RegisterClipboardFormat(L"WebKit Smart Paste Format"); - static FORMATETC htmlFormat = {cf, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; - return &htmlFormat; -} - -PassRefPtr<DocumentFragment> fragmentFromFilenames(Document*, const IDataObject*) -{ - //FIXME: We should be able to create fragments from files - return 0; -} - -bool containsFilenames(const IDataObject*) -{ - //FIXME: We'll want to update this once we can produce fragments from files - return false; -} - -//Convert a String containing CF_HTML formatted text to a DocumentFragment -PassRefPtr<DocumentFragment> fragmentFromCF_HTML(Document* doc, const String& cf_html) -{ - // obtain baseURL if present - String srcURLStr("sourceURL:"); - String srcURL; - unsigned lineStart = cf_html.find(srcURLStr, 0, false); - if (lineStart != -1) { - unsigned srcEnd = cf_html.find("\n", lineStart, false); - unsigned srcStart = lineStart+srcURLStr.length(); - String rawSrcURL = cf_html.substring(srcStart, srcEnd-srcStart); - replaceNBSPWithSpace(rawSrcURL); - srcURL = rawSrcURL.stripWhiteSpace(); - } - - // find the markup between "<!--StartFragment -->" and "<!--EndFragment -->", accounting for browser quirks - unsigned markupStart = cf_html.find("<html", 0, false); - unsigned tagStart = cf_html.find("startfragment", markupStart, false); - unsigned fragmentStart = cf_html.find('>', tagStart) + 1; - unsigned tagEnd = cf_html.find("endfragment", fragmentStart, false); - unsigned fragmentEnd = cf_html.reverseFind('<', tagEnd); - String markup = cf_html.substring(fragmentStart, fragmentEnd - fragmentStart).stripWhiteSpace(); - - return createFragmentFromMarkup(doc, markup, srcURL); -} - - -PassRefPtr<DocumentFragment> fragmentFromHTML(Document* doc, IDataObject* data) -{ - if (!doc || !data) - return 0; - - STGMEDIUM store; - String html; - String srcURL; - if (SUCCEEDED(data->GetData(ClipboardUtil::GetHtmlFormat(), &store))) { - //MS HTML Format parsing - char* data = (char*)GlobalLock(store.hGlobal); - SIZE_T dataSize = ::GlobalSize(store.hGlobal); - String cf_html(UTF8Encoding().decode(data, dataSize)); - GlobalUnlock(store.hGlobal); - ReleaseStgMedium(&store); - if (PassRefPtr<DocumentFragment> fragment = fragmentFromCF_HTML(doc, cf_html)) - return fragment; - } - if (SUCCEEDED(data->GetData(ClipboardUtil::GetTextHtmlFormat(), &store))) { - //raw html - UChar* data = (UChar*)GlobalLock(store.hGlobal); - html = String(data); - GlobalUnlock(store.hGlobal); - ReleaseStgMedium(&store); - return createFragmentFromMarkup(doc, html, srcURL); - } - - return 0; -} - -bool containsHTML(IDataObject* data) -{ - return SUCCEEDED(data->QueryGetData(ClipboardUtil::GetTextHtmlFormat())) || - SUCCEEDED(data->QueryGetData(ClipboardUtil::GetHtmlFormat())); -} - -} // namespace WebCore diff --git a/webkit/port/platform/win/ClipboardUtilitiesWin.h b/webkit/port/platform/win/ClipboardUtilitiesWin.h deleted file mode 100644 index a7669ad..0000000 --- a/webkit/port/platform/win/ClipboardUtilitiesWin.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2007 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef ClipboardUtilitiesWin_h -#define ClipboardUtilitiesWin_h - -#include "DocumentFragment.h" -#include <wtf/RefPtr.h> -#include <wtf/Vector.h> - -#include <windows.h> -#include <objidl.h> - -namespace WebCore { - -class Document; -class KURL; -class String; - -HGLOBAL createGlobalData(const String&); -HGLOBAL createGlobalData(const Vector<char>&); -HGLOBAL createGlobalData(const KURL& url, const String& title); - -FORMATETC* urlWFormat(); -FORMATETC* urlFormat(); -FORMATETC* plainTextWFormat(); -FORMATETC* plainTextFormat(); -FORMATETC* filenameWFormat(); -FORMATETC* filenameFormat(); -FORMATETC* htmlFormat(); -FORMATETC* cfHDropFormat(); -FORMATETC* smartPasteFormat(); - -void markupToCF_HTML(const String& markup, const String& srcURL, Vector<char>& result); -String urlToMarkup(const KURL& url, const String& title); -String urlToImageMarkup(const KURL& url, const String& altStr); - -void replaceNewlinesWithWindowsStyleNewlines(String& str); -void replaceNBSPWithSpace(String& str); - -bool containsFilenames(const IDataObject*); -bool containsHTML(IDataObject* data); - -PassRefPtr<DocumentFragment> fragmentFromFilenames(Document*, const IDataObject*); -PassRefPtr<DocumentFragment> fragmentFromHTML(Document* doc, IDataObject* data); -PassRefPtr<DocumentFragment> fragmentFromCF_HTML(Document* doc, const String& cf_html); - -} // namespace WebCore - -#endif // ClipboardUtilitiesWin_h diff --git a/webkit/port/platform/win/PasteboardWin.cpp b/webkit/port/platform/win/PasteboardWin.cpp deleted file mode 100644 index 3063dc9..0000000 --- a/webkit/port/platform/win/PasteboardWin.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "Pasteboard.h" - -#include "ClipboardUtilitiesWin.h" -#include "CString.h" -#include "DocumentFragment.h" -#include "Document.h" -#include "Element.h" -#include "Frame.h" -#include "HitTestResult.h" -#include "Image.h" -#include "KURL.h" -#include "NativeImageSkia.h" -#include "NotImplemented.h" -#include "Page.h" -#include "Range.h" -#include "RenderImage.h" -#include "TextEncoding.h" -#include "markup.h" - -#include "base/clipboard_util.h" -#include "webkit/glue/glue_util.h" -#include "webkit/glue/scoped_clipboard_writer_glue.h" -#include "webkit/glue/webkit_glue.h" - -namespace WebCore { - -static UINT HTMLClipboardFormat = 0; -static UINT BookmarkClipboardFormat = 0; -static UINT WebSmartPasteFormat = 0; - -Pasteboard* Pasteboard::generalPasteboard() -{ - static Pasteboard* pasteboard = new Pasteboard; - return pasteboard; -} - -Pasteboard::Pasteboard() -{ - HTMLClipboardFormat = ClipboardUtil::GetHtmlFormat()->cfFormat; - - BookmarkClipboardFormat = ClipboardUtil::GetUrlWFormat()->cfFormat; - - WebSmartPasteFormat = ClipboardUtil::GetWebKitSmartPasteFormat()->cfFormat; -} - -void Pasteboard::clear() -{ - // The ScopedClipboardWriter class takes care of clearing the clipboard's - // previous contents. -} - -void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame) -{ - ScopedClipboardWriterGlue scw(webkit_glue::ClipboardGetClipboard()); - - ExceptionCode ec = 0; - scw.WriteHTML( - webkit_glue::StringToStdWString( - createMarkup(selectedRange, 0, AnnotateForInterchange)), - GURL(webkit_glue::StringToStdWString( - selectedRange->startContainer(ec)->document()->url())).spec()); - - // Put plain string on the pasteboard. CF_UNICODETEXT covers CF_TEXT as well - String str = frame->selectedText(); - replaceNewlinesWithWindowsStyleNewlines(str); - replaceNBSPWithSpace(str); - scw.WriteText(webkit_glue::StringToStdWString(str)); - - if (canSmartCopyOrDelete) - scw.WriteWebSmartPaste(); -} - -void Pasteboard::writeURL(const KURL& url, const String& titleStr, Frame* frame) -{ - ASSERT(!url.isEmpty()); - - String title(titleStr); - if (title.isEmpty()) { - title = url.lastPathComponent(); - if (title.isEmpty()) - title = url.host(); - } - - ScopedClipboardWriterGlue scw(webkit_glue::ClipboardGetClipboard()); - - // write to clipboard in format com.apple.safari.bookmarkdata to be able to paste into the bookmarks view with appropriate title - scw.WriteBookmark(webkit_glue::StringToStdWString(titleStr), - webkit_glue::KURLToGURL(url).spec()); - - // write to clipboard in format CF_HTML to be able to paste into contenteditable areas as a link - std::wstring link(webkit_glue::StringToStdWString(urlToMarkup(url, title))); - scw.WriteHTML(link, GURL().spec()); - - // bare-bones CF_UNICODETEXT support - std::wstring spec(webkit_glue::StringToStdWString(url)); - scw.WriteText(spec); -} - -void Pasteboard::writeImage(Node* node, const KURL& url, const String& title) -{ - ASSERT(node && node->renderer() && node->renderer()->isImage()); - RenderImage* renderer = static_cast<RenderImage*>(node->renderer()); - CachedImage* cachedImage = static_cast<CachedImage*>(renderer->cachedImage()); - ASSERT(cachedImage); - Image* image = cachedImage->image(); - ASSERT(image); - - NativeImageSkia* bitmap = image->nativeImageForCurrentFrame(); - ScopedClipboardWriterGlue scw(webkit_glue::ClipboardGetClipboard()); - - if (bitmap) - scw.WriteBitmap(*bitmap); - if (!url.isEmpty()) { - // write to clipboard in format com.apple.safari.bookmarkdata to be able to paste into the bookmarks view with appropriate title - scw.WriteBookmark(webkit_glue::StringToStdWString(title), - webkit_glue::KURLToGURL(url).spec()); - - // write to clipboard in format CF_HTML to be able to paste into contenteditable areas as a an image - std::wstring markup(webkit_glue::StringToStdWString(urlToImageMarkup(url, title))); - scw.WriteHTML(markup, GURL().spec()); - - // bare-bones CF_UNICODETEXT support - std::wstring spec(webkit_glue::StringToStdWString(url.string())); - scw.WriteText(spec); - } -} - -bool Pasteboard::canSmartReplace() -{ - return webkit_glue::ClipboardIsFormatAvailable(WebSmartPasteFormat); -} - -String Pasteboard::plainText(Frame* frame) -{ - if (webkit_glue::ClipboardIsFormatAvailable(CF_UNICODETEXT)) { - std::wstring text; - webkit_glue::ClipboardReadText(&text); - if (!text.empty()) - return webkit_glue::StdWStringToString(text); - } - - if (webkit_glue::ClipboardIsFormatAvailable(CF_TEXT)) { - std::string text; - webkit_glue::ClipboardReadAsciiText(&text); - if (!text.empty()) - return webkit_glue::StdStringToString(text); - } - - return String(); -} - -PassRefPtr<DocumentFragment> Pasteboard::documentFragment(Frame* frame, PassRefPtr<Range> context, bool allowPlainText, bool& chosePlainText) -{ - chosePlainText = false; - - if (webkit_glue::ClipboardIsFormatAvailable(HTMLClipboardFormat)) { - std::wstring markup; - GURL src_url; - webkit_glue::ClipboardReadHTML(&markup, &src_url); - - PassRefPtr<DocumentFragment> fragment = - createFragmentFromMarkup(frame->document(), - webkit_glue::StdWStringToString(markup), - webkit_glue::StdStringToString(src_url.spec())); - - if (fragment) - return fragment; - } - - if (allowPlainText && - webkit_glue::ClipboardIsFormatAvailable(CF_UNICODETEXT)) { - - chosePlainText = true; - std::wstring markup; - webkit_glue::ClipboardReadText(&markup); - RefPtr<DocumentFragment> fragment = - createFragmentFromText(context.get(), - webkit_glue::StdWStringToString(markup)); - - if (fragment) - return fragment.release(); - } - - if (allowPlainText && webkit_glue::ClipboardIsFormatAvailable(CF_TEXT)) { - chosePlainText = true; - std::string markup; - webkit_glue::ClipboardReadAsciiText(&markup); - RefPtr<DocumentFragment> fragment = - createFragmentFromText(context.get(), - webkit_glue::StdStringToString(markup)); - if (fragment) - return fragment.release(); - } - - return 0; -} - -} // namespace WebCore |