blob: ffe96231026a20e173c23b4a82f2950f74d4d396 [file] [log] [blame]
// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// TODO(darin): This file will be deleted once we complete the move to
// webkit/api
// In this file, we pretend to be part of the WebKit implementation.
// This is just a temporary hack while glue is still being moved into
// webkit/api.
#define WEBKIT_IMPLEMENTATION 1
#include "config.h"
#include "webkit/glue/glue_util.h"
#include <string>
#include "ChromiumDataObject.h"
#include "CString.h"
#include "HTMLFormElement.h"
#include "IntPoint.h"
#include "IntRect.h"
#include "KURL.h"
#include "PlatformString.h"
#include "ResourceError.h"
#undef LOG
#include "base/compiler_specific.h"
#include "base/gfx/rect.h"
#include "base/string_piece.h"
#include "base/string_util.h"
#include "base/sys_string_conversions.h"
#include "googleurl/src/gurl.h"
#include "webkit/api/public/WebDragData.h"
#include "webkit/api/public/WebForm.h"
#include "webkit/api/public/WebPoint.h"
#include "webkit/api/public/WebRect.h"
#include "webkit/api/public/WebSize.h"
#include "webkit/api/public/WebString.h"
#include "webkit/api/public/WebURL.h"
#include "webkit/api/public/WebURLError.h"
#include "webkit/api/public/WebURLRequest.h"
#include "webkit/api/public/WebURLResponse.h"
namespace webkit_glue {
// String conversions ----------------------------------------------------------
std::string CStringToStdString(const WebCore::CString& str) {
const char* chars = str.data();
return std::string(chars ? chars : "", str.length());
}
WebCore::CString StdStringToCString(const std::string& str) {
return WebCore::CString(str.data(), str.size());
}
std::wstring StringToStdWString(const WebCore::String& str) {
const UChar* chars = str.characters();
#if defined(WCHAR_T_IS_UTF16)
return std::wstring(chars ? chars : L"", str.length());
#elif defined(WCHAR_T_IS_UTF32)
string16 str16(chars ? chars : reinterpret_cast<const char16 *>(L""),
str.length());
return UTF16ToWide(str16);
#endif
}
string16 StringToString16(const WebCore::String& str) {
const UChar* chars = str.characters();
return string16(chars ? chars : (UChar *)L"", str.length());
}
WebCore::String String16ToString(const string16& str) {
return WebCore::String(reinterpret_cast<const UChar*>(str.data()),
str.length());
}
std::string StringToStdString(const WebCore::String& str) {
std::string ret;
if (!str.isNull())
UTF16ToUTF8(str.characters(), str.length(), &ret);
return ret;
}
WebCore::String StdWStringToString(const std::wstring& str) {
#if defined(WCHAR_T_IS_UTF16)
return WebCore::String(str.data(), static_cast<unsigned>(str.length()));
#elif defined(WCHAR_T_IS_UTF32)
string16 str16 = WideToUTF16(str);
return WebCore::String(str16.data(), static_cast<unsigned>(str16.length()));
#endif
}
WebCore::String StdStringToString(const std::string& str) {
return WebCore::String::fromUTF8(str.data(),
static_cast<unsigned>(str.length()));
}
WebKit::WebString StringToWebString(const WebCore::String& str) {
return str;
}
WebCore::String WebStringToString(const WebKit::WebString& str) {
return str;
}
WebKit::WebCString CStringToWebCString(const WebCore::CString& str) {
return str;
}
WebCore::CString WebCStringToCString(const WebKit::WebCString& str) {
return str;
}
WebKit::WebString StdStringToWebString(const std::string& str) {
return WebKit::WebString::fromUTF8(str.data(), str.size());
}
std::string WebStringToStdString(const WebKit::WebString& str) {
std::string ret;
if (!str.isNull())
UTF16ToUTF8(str.data(), str.length(), &ret);
return ret;
}
FilePath::StringType StringToFilePathString(const WebCore::String& str) {
#if defined(OS_WIN)
return StringToStdWString(str);
#elif defined(OS_POSIX)
return base::SysWideToNativeMB(StringToStdWString(str));
#endif
}
WebCore::String FilePathStringToString(const FilePath::StringType& str) {
#if defined(OS_WIN)
return StdWStringToString(str);
#elif defined(OS_POSIX)
return StdWStringToString(base::SysNativeMBToWide(str));
#endif
}
// URL conversions -------------------------------------------------------------
GURL KURLToGURL(const WebCore::KURL& url) {
#if USE(GOOGLEURL)
const WebCore::CString& spec = url.utf8String();
if (spec.isNull() || 0 == spec.length())
return GURL();
return GURL(spec.data(), spec.length(), url.parsed(), url.isValid());
#else
return StringToGURL(url.string());
#endif
}
WebCore::KURL GURLToKURL(const GURL& url) {
const std::string& spec = url.possibly_invalid_spec();
#if USE(GOOGLEURL)
// Convert using the internal structures to avoid re-parsing.
return WebCore::KURL(WebCore::CString(spec.c_str(),
static_cast<unsigned>(spec.length())),
url.parsed_for_possibly_invalid_spec(), url.is_valid());
#else
return WebCore::KURL(StdWStringToString(UTF8ToWide(spec)));
#endif
}
GURL StringToGURL(const WebCore::String& spec) {
return GURL(WideToUTF8(StringToStdWString(spec)));
}
WebKit::WebURL KURLToWebURL(const WebCore::KURL& url) {
return url;
}
WebCore::KURL WebURLToKURL(const WebKit::WebURL& url) {
return url;
}
// Rect conversions ------------------------------------------------------------
gfx::Rect FromIntRect(const WebCore::IntRect& r) {
return gfx::Rect(r.x(), r.y(), r.width() < 0 ? 0 : r.width(),
r.height() < 0 ? 0 : r.height());
}
WebCore::IntRect ToIntRect(const gfx::Rect& r) {
return WebCore::IntRect(r.x(), r.y(), r.width(), r.height());
}
// Point conversions -----------------------------------------------------------
WebCore::IntPoint WebPointToIntPoint(const WebKit::WebPoint& point) {
return point;
}
WebKit::WebPoint IntPointToWebPoint(const WebCore::IntPoint& point) {
return point;
}
// Rect conversions ------------------------------------------------------------
WebCore::IntRect WebRectToIntRect(const WebKit::WebRect& rect) {
return rect;
}
WebKit::WebRect IntRectToWebRect(const WebCore::IntRect& rect) {
return rect;
}
// Size conversions ------------------------------------------------------------
WebCore::IntSize WebSizeToIntSize(const WebKit::WebSize& size) {
return size;
}
WebKit::WebSize IntSizeToWebSize(const WebCore::IntSize& size) {
return size;
}
// DragData conversions --------------------------------------------------------
WebKit::WebDragData ChromiumDataObjectToWebDragData(
const PassRefPtr<WebCore::ChromiumDataObject>& data) {
return data;
}
PassRefPtr<WebCore::ChromiumDataObject> WebDragDataToChromiumDataObject(
const WebKit::WebDragData& data) {
return data;
}
// FormElement conversions -----------------------------------------------------
WebKit::WebForm HTMLFormElementToWebForm(
const WTF::PassRefPtr<WebCore::HTMLFormElement>& form) {
return form;
}
WTF::PassRefPtr<WebCore::HTMLFormElement> WebFormToHTMLFormElement(
const WebKit::WebForm& form) {
return form;
}
// WebURLError conversions -----------------------------------------------------
WebKit::WebURLError ResourceErrorToWebURLError(
const WebCore::ResourceError& error) {
return error;
}
WebCore::ResourceError WebURLErrorToResourceError(
const WebKit::WebURLError& error) {
return error;
}
// WebURLRequest conversions ---------------------------------------------------
WebCore::ResourceRequest* WebURLRequestToMutableResourceRequest(
WebKit::WebURLRequest* request) {
return &request->toMutableResourceRequest();
}
const WebCore::ResourceRequest* WebURLRequestToResourceRequest(
const WebKit::WebURLRequest* request) {
return &request->toResourceRequest();
}
// WebURLResponse conversions --------------------------------------------------
WebCore::ResourceResponse* WebURLResponseToMutableResourceResponse(
WebKit::WebURLResponse* response) {
return &response->toMutableResourceResponse();
}
const WebCore::ResourceResponse* WebURLResponseToResourceResponse(
const WebKit::WebURLResponse* response) {
return &response->toResourceResponse();
}
} // namespace webkit_glue