Index: webkit/glue/clipboard_conversion.cc |
diff --git a/webkit/glue/clipboard_conversion.cc b/webkit/glue/clipboard_conversion.cc |
index 0c690c0e0459ef6a3c66066a96f9e7892ab6e840..7bf8c51ff3812e39e6dc7685f5f062c2dfaeb3df 100644 |
--- a/webkit/glue/clipboard_conversion.cc |
+++ b/webkit/glue/clipboard_conversion.cc |
@@ -16,114 +16,6 @@ |
#include "webkit/glue/glue_util.h" |
-namespace { |
- |
-// TODO(tc): CF_HTML logic should move into the browser process since it only |
-// makes sense on Windows. |
-#if defined(OS_WIN) |
-void append(WTF::Vector<char>& vector, const WebCore::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 WebCore::String& markup, |
- const WebCore::String& src_url, |
- WTF::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) |
- |
- static const char* header = "Version:0.9\n" |
- "StartHTML:" NUMBER_FORMAT "\n" |
- "EndHTML:" NUMBER_FORMAT "\n" |
- "StartFragment:" NUMBER_FORMAT "\n" |
- "EndFragment:" NUMBER_FORMAT "\n"; |
- static const char* source_url_prefix = "SourceURL:"; |
- |
- static const char* start_markup = "<HTML>\n<BODY>\n<!--StartFragment-->\n"; |
- static const char* end_markup = "\n<!--EndFragment-->\n</BODY>\n</HTML>"; |
- |
- WebCore::CString source_url_utf8 = (src_url == WebCore::blankURL()) ? |
- "" : src_url.utf8(); |
- WebCore::CString markup_utf8 = markup.utf8(); |
- |
- // calculate offsets |
- size_t start_html_offset = strlen(header) - strlen(NUMBER_FORMAT) * 4 + |
- MAX_DIGITS * 4; |
- if (source_url_utf8.length()) { |
- start_html_offset += strlen(source_url_prefix) + |
- source_url_utf8.length() + 1; |
- } |
- size_t start_fragment_offset = start_html_offset + strlen(start_markup); |
- size_t end_fragment_offset = start_fragment_offset + markup_utf8.length(); |
- size_t end_html_offset = end_fragment_offset + strlen(end_markup); |
- |
- append(result, WebCore::String::format(header, start_html_offset, |
- end_html_offset, start_fragment_offset, end_fragment_offset).utf8()); |
- if (source_url_utf8.length()) { |
- append(result, source_url_prefix); |
- append(result, source_url_utf8); |
- result.append('\n'); |
- } |
- append(result, start_markup); |
- append(result, markup_utf8); |
- append(result, end_markup); |
- |
- #undef MAX_DIGITS |
- #undef MAKE_NUMBER_FORMAT_1 |
- #undef MAKE_NUMBER_FORMAT_2 |
- #undef NUMBER_FORMAT |
-} |
-#endif |
- |
-std::wstring HTMLToCFHTML(const WebCore::String& html, |
- const WebCore::KURL& url) { |
-#if defined(OS_WIN) |
- Vector<char> cf_html_data; |
- markupToCF_HTML(html, url, cf_html_data); |
- WebCore::String cf_html_str(cf_html_data.data(), cf_html_data.size()); |
- return webkit_glue::StringToStdWString(cf_html_str); |
-#else |
- return std::wstring(); |
-#endif |
-} |
- |
-WebCore::String CFHTMLToHTML(const std::wstring& cf_html_wstr) { |
-#if defined(OS_WIN) |
- WebCore::String cf_html = webkit_glue::StdWStringToString(cf_html_wstr); |
- // Obtain baseURL if present. |
- WebCore::String src_url_str("sourceURL:"); |
- WebCore::String src_url; |
- unsigned int line_start = cf_html.find(src_url_str, 0, false); |
- if (line_start != -1) { |
- unsigned int src_end = cf_html.find("\n", line_start, false); |
- unsigned int src_start = line_start + src_url_str.length(); |
- WebCore::String raw_src_url = cf_html.substring(src_start, src_end - src_start); |
- replaceNBSPWithSpace(raw_src_url); |
- src_url = raw_src_url.stripWhiteSpace(); |
- } |
- |
- // find the markup between "<!--StartFragment -->" and "<!--EndFragment |
- // -->", accounting for browser quirks |
- unsigned markup_start = cf_html.find("<html", 0, false); |
- unsigned tag_start = cf_html.find("startfragment", markup_start, false); |
- unsigned fragment_start = cf_html.find('>', tag_start) + 1; |
- unsigned tag_end = cf_html.find("endfragment", fragment_start, false); |
- unsigned fragment_end = cf_html.reverseFind('<', tag_end); |
- WebCore::String markup = cf_html.substring(fragment_start, |
- fragment_end - fragment_start).stripWhiteSpace(); |
- return markup; |
-#else |
- return WebCore::String(); |
-#endif |
-} |
- |
-} // namespace |
- |
namespace webkit_glue { |
WebDropData ChromiumDataObjectToWebDropData( |
@@ -139,9 +31,8 @@ WebDropData ChromiumDataObjectToWebDropData( |
drop_data.plain_text = StringToStdWString(data_object->plain_text); |
- drop_data.cf_html = HTMLToCFHTML(data_object->text_html, data_object->url); |
- |
drop_data.text_html = StringToStdWString(data_object->text_html); |
+ drop_data.html_base_url = KURLToGURL(data_object->html_base_url); |
drop_data.file_description_filename = StringToStdWString( |
data_object->file_content_filename); |
@@ -167,10 +58,7 @@ PassRefPtr<WebCore::ChromiumDataObject> WebDropDataToChromiumDataObject( |
data_object->plain_text = StdWStringToString(drop_data.plain_text); |
data_object->text_html = StdWStringToString(drop_data.text_html); |
- if (data_object->text_html.isEmpty()) { |
- // Use CF_HTML only if there's no text/html data. |
- data_object->text_html = CFHTMLToHTML(drop_data.cf_html); |
- } |
+ data_object->html_base_url = GURLToKURL(drop_data.html_base_url); |
data_object->file_content_filename = StdWStringToString( |
drop_data.file_description_filename); |